index.js 2.5 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2. if(typeof exports === 'object' && typeof module === 'object')
  3. module.exports = factory();
  4. else if(typeof define === 'function' && define.amd)
  5. define([], factory);
  6. else if(typeof exports === 'object')
  7. exports["d3v4pp"] = factory();
  8. else
  9. root["d3v4pp"] = factory();
  10. })(this, () => {
  11. return /******/ (() => { // webpackBootstrap
  12. /******/ var __webpack_modules__ = ({
  13. /***/ "./node_modules/@remix-run/router/dist/router.js":
  14. /*!*******************************************************!*\
  15. !*** ./node_modules/@remix-run/router/dist/router.js ***!
  16. \*******************************************************/
  17. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  18. "use strict";
  19. __webpack_require__.r(__webpack_exports__);
  20. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  21. /* harmony export */ "AbortedDeferredError": () => (/* binding */ AbortedDeferredError),
  22. /* harmony export */ "Action": () => (/* binding */ Action),
  23. /* harmony export */ "ErrorResponse": () => (/* binding */ ErrorResponse),
  24. /* harmony export */ "IDLE_FETCHER": () => (/* binding */ IDLE_FETCHER),
  25. /* harmony export */ "IDLE_NAVIGATION": () => (/* binding */ IDLE_NAVIGATION),
  26. /* harmony export */ "UNSAFE_convertRoutesToDataRoutes": () => (/* binding */ convertRoutesToDataRoutes),
  27. /* harmony export */ "UNSAFE_getPathContributingMatches": () => (/* binding */ getPathContributingMatches),
  28. /* harmony export */ "createBrowserHistory": () => (/* binding */ createBrowserHistory),
  29. /* harmony export */ "createHashHistory": () => (/* binding */ createHashHistory),
  30. /* harmony export */ "createMemoryHistory": () => (/* binding */ createMemoryHistory),
  31. /* harmony export */ "createPath": () => (/* binding */ createPath),
  32. /* harmony export */ "createRouter": () => (/* binding */ createRouter),
  33. /* harmony export */ "defer": () => (/* binding */ defer),
  34. /* harmony export */ "generatePath": () => (/* binding */ generatePath),
  35. /* harmony export */ "getStaticContextFromError": () => (/* binding */ getStaticContextFromError),
  36. /* harmony export */ "getToPathname": () => (/* binding */ getToPathname),
  37. /* harmony export */ "invariant": () => (/* binding */ invariant),
  38. /* harmony export */ "isRouteErrorResponse": () => (/* binding */ isRouteErrorResponse),
  39. /* harmony export */ "joinPaths": () => (/* binding */ joinPaths),
  40. /* harmony export */ "json": () => (/* binding */ json),
  41. /* harmony export */ "matchPath": () => (/* binding */ matchPath),
  42. /* harmony export */ "matchRoutes": () => (/* binding */ matchRoutes),
  43. /* harmony export */ "normalizePathname": () => (/* binding */ normalizePathname),
  44. /* harmony export */ "parsePath": () => (/* binding */ parsePath),
  45. /* harmony export */ "redirect": () => (/* binding */ redirect),
  46. /* harmony export */ "resolvePath": () => (/* binding */ resolvePath),
  47. /* harmony export */ "resolveTo": () => (/* binding */ resolveTo),
  48. /* harmony export */ "stripBasename": () => (/* binding */ stripBasename),
  49. /* harmony export */ "unstable_createStaticHandler": () => (/* binding */ unstable_createStaticHandler),
  50. /* harmony export */ "warning": () => (/* binding */ warning)
  51. /* harmony export */ });
  52. /**
  53. * @remix-run/router v1.0.3
  54. *
  55. * Copyright (c) Remix Software Inc.
  56. *
  57. * This source code is licensed under the MIT license found in the
  58. * LICENSE.md file in the root directory of this source tree.
  59. *
  60. * @license MIT
  61. */
  62. function _extends() {
  63. _extends = Object.assign ? Object.assign.bind() : function (target) {
  64. for (var i = 1; i < arguments.length; i++) {
  65. var source = arguments[i];
  66. for (var key in source) {
  67. if (Object.prototype.hasOwnProperty.call(source, key)) {
  68. target[key] = source[key];
  69. }
  70. }
  71. }
  72. return target;
  73. };
  74. return _extends.apply(this, arguments);
  75. }
  76. ////////////////////////////////////////////////////////////////////////////////
  77. //#region Types and Constants
  78. ////////////////////////////////////////////////////////////////////////////////
  79. /**
  80. * Actions represent the type of change to a location value.
  81. */
  82. var Action;
  83. (function (Action) {
  84. /**
  85. * A POP indicates a change to an arbitrary index in the history stack, such
  86. * as a back or forward navigation. It does not describe the direction of the
  87. * navigation, only that the current index changed.
  88. *
  89. * Note: This is the default action for newly created history objects.
  90. */
  91. Action["Pop"] = "POP";
  92. /**
  93. * A PUSH indicates a new entry being added to the history stack, such as when
  94. * a link is clicked and a new page loads. When this happens, all subsequent
  95. * entries in the stack are lost.
  96. */
  97. Action["Push"] = "PUSH";
  98. /**
  99. * A REPLACE indicates the entry at the current index in the history stack
  100. * being replaced by a new one.
  101. */
  102. Action["Replace"] = "REPLACE";
  103. })(Action || (Action = {}));
  104. const PopStateEventType = "popstate";
  105. /**
  106. * Memory history stores the current location in memory. It is designed for use
  107. * in stateful non-browser environments like tests and React Native.
  108. */
  109. function createMemoryHistory(options) {
  110. if (options === void 0) {
  111. options = {};
  112. }
  113. let {
  114. initialEntries = ["/"],
  115. initialIndex,
  116. v5Compat = false
  117. } = options;
  118. let entries; // Declare so we can access from createMemoryLocation
  119. entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === "string" ? null : entry.state, index === 0 ? "default" : undefined));
  120. let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);
  121. let action = Action.Pop;
  122. let listener = null;
  123. function clampIndex(n) {
  124. return Math.min(Math.max(n, 0), entries.length - 1);
  125. }
  126. function getCurrentLocation() {
  127. return entries[index];
  128. }
  129. function createMemoryLocation(to, state, key) {
  130. if (state === void 0) {
  131. state = null;
  132. }
  133. let location = createLocation(entries ? getCurrentLocation().pathname : "/", to, state, key);
  134. warning$1(location.pathname.charAt(0) === "/", "relative pathnames are not supported in memory history: " + JSON.stringify(to));
  135. return location;
  136. }
  137. let history = {
  138. get index() {
  139. return index;
  140. },
  141. get action() {
  142. return action;
  143. },
  144. get location() {
  145. return getCurrentLocation();
  146. },
  147. createHref(to) {
  148. return typeof to === "string" ? to : createPath(to);
  149. },
  150. encodeLocation(location) {
  151. return location;
  152. },
  153. push(to, state) {
  154. action = Action.Push;
  155. let nextLocation = createMemoryLocation(to, state);
  156. index += 1;
  157. entries.splice(index, entries.length, nextLocation);
  158. if (v5Compat && listener) {
  159. listener({
  160. action,
  161. location: nextLocation
  162. });
  163. }
  164. },
  165. replace(to, state) {
  166. action = Action.Replace;
  167. let nextLocation = createMemoryLocation(to, state);
  168. entries[index] = nextLocation;
  169. if (v5Compat && listener) {
  170. listener({
  171. action,
  172. location: nextLocation
  173. });
  174. }
  175. },
  176. go(delta) {
  177. action = Action.Pop;
  178. index = clampIndex(index + delta);
  179. if (listener) {
  180. listener({
  181. action,
  182. location: getCurrentLocation()
  183. });
  184. }
  185. },
  186. listen(fn) {
  187. listener = fn;
  188. return () => {
  189. listener = null;
  190. };
  191. }
  192. };
  193. return history;
  194. }
  195. /**
  196. * Browser history stores the location in regular URLs. This is the standard for
  197. * most web apps, but it requires some configuration on the server to ensure you
  198. * serve the same app at multiple URLs.
  199. *
  200. * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory
  201. */
  202. function createBrowserHistory(options) {
  203. if (options === void 0) {
  204. options = {};
  205. }
  206. function createBrowserLocation(window, globalHistory) {
  207. let {
  208. pathname,
  209. search,
  210. hash
  211. } = window.location;
  212. return createLocation("", {
  213. pathname,
  214. search,
  215. hash
  216. }, // state defaults to `null` because `window.history.state` does
  217. globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
  218. }
  219. function createBrowserHref(window, to) {
  220. return typeof to === "string" ? to : createPath(to);
  221. }
  222. return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);
  223. }
  224. /**
  225. * Hash history stores the location in window.location.hash. This makes it ideal
  226. * for situations where you don't want to send the location to the server for
  227. * some reason, either because you do cannot configure it or the URL space is
  228. * reserved for something else.
  229. *
  230. * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory
  231. */
  232. function createHashHistory(options) {
  233. if (options === void 0) {
  234. options = {};
  235. }
  236. function createHashLocation(window, globalHistory) {
  237. let {
  238. pathname = "/",
  239. search = "",
  240. hash = ""
  241. } = parsePath(window.location.hash.substr(1));
  242. return createLocation("", {
  243. pathname,
  244. search,
  245. hash
  246. }, // state defaults to `null` because `window.history.state` does
  247. globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
  248. }
  249. function createHashHref(window, to) {
  250. let base = window.document.querySelector("base");
  251. let href = "";
  252. if (base && base.getAttribute("href")) {
  253. let url = window.location.href;
  254. let hashIndex = url.indexOf("#");
  255. href = hashIndex === -1 ? url : url.slice(0, hashIndex);
  256. }
  257. return href + "#" + (typeof to === "string" ? to : createPath(to));
  258. }
  259. function validateHashLocation(location, to) {
  260. warning$1(location.pathname.charAt(0) === "/", "relative pathnames are not supported in hash history.push(" + JSON.stringify(to) + ")");
  261. }
  262. return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);
  263. } //#endregion
  264. ////////////////////////////////////////////////////////////////////////////////
  265. //#region UTILS
  266. ////////////////////////////////////////////////////////////////////////////////
  267. function warning$1(cond, message) {
  268. if (!cond) {
  269. // eslint-disable-next-line no-console
  270. if (typeof console !== "undefined") console.warn(message);
  271. try {
  272. // Welcome to debugging history!
  273. //
  274. // This error is thrown as a convenience so you can more easily
  275. // find the source for a warning that appears in the console by
  276. // enabling "pause on exceptions" in your JavaScript debugger.
  277. throw new Error(message); // eslint-disable-next-line no-empty
  278. } catch (e) {}
  279. }
  280. }
  281. function createKey() {
  282. return Math.random().toString(36).substr(2, 8);
  283. }
  284. /**
  285. * For browser-based histories, we combine the state and key into an object
  286. */
  287. function getHistoryState(location) {
  288. return {
  289. usr: location.state,
  290. key: location.key
  291. };
  292. }
  293. /**
  294. * Creates a Location object with a unique key from the given Path
  295. */
  296. function createLocation(current, to, state, key) {
  297. if (state === void 0) {
  298. state = null;
  299. }
  300. let location = _extends({
  301. pathname: typeof current === "string" ? current : current.pathname,
  302. search: "",
  303. hash: ""
  304. }, typeof to === "string" ? parsePath(to) : to, {
  305. state,
  306. // TODO: This could be cleaned up. push/replace should probably just take
  307. // full Locations now and avoid the need to run through this flow at all
  308. // But that's a pretty big refactor to the current test suite so going to
  309. // keep as is for the time being and just let any incoming keys take precedence
  310. key: to && to.key || key || createKey()
  311. });
  312. return location;
  313. }
  314. /**
  315. * Creates a string URL path from the given pathname, search, and hash components.
  316. */
  317. function createPath(_ref) {
  318. let {
  319. pathname = "/",
  320. search = "",
  321. hash = ""
  322. } = _ref;
  323. if (search && search !== "?") pathname += search.charAt(0) === "?" ? search : "?" + search;
  324. if (hash && hash !== "#") pathname += hash.charAt(0) === "#" ? hash : "#" + hash;
  325. return pathname;
  326. }
  327. /**
  328. * Parses a string URL path into its separate pathname, search, and hash components.
  329. */
  330. function parsePath(path) {
  331. let parsedPath = {};
  332. if (path) {
  333. let hashIndex = path.indexOf("#");
  334. if (hashIndex >= 0) {
  335. parsedPath.hash = path.substr(hashIndex);
  336. path = path.substr(0, hashIndex);
  337. }
  338. let searchIndex = path.indexOf("?");
  339. if (searchIndex >= 0) {
  340. parsedPath.search = path.substr(searchIndex);
  341. path = path.substr(0, searchIndex);
  342. }
  343. if (path) {
  344. parsedPath.pathname = path;
  345. }
  346. }
  347. return parsedPath;
  348. }
  349. function createURL(location) {
  350. // window.location.origin is "null" (the literal string value) in Firefox
  351. // under certain conditions, notably when serving from a local HTML file
  352. // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297
  353. let base = typeof window !== "undefined" && typeof window.location !== "undefined" && window.location.origin !== "null" ? window.location.origin : "unknown://unknown";
  354. let href = typeof location === "string" ? location : createPath(location);
  355. return new URL(href, base);
  356. }
  357. function getUrlBasedHistory(getLocation, createHref, validateLocation, options) {
  358. if (options === void 0) {
  359. options = {};
  360. }
  361. let {
  362. window = document.defaultView,
  363. v5Compat = false
  364. } = options;
  365. let globalHistory = window.history;
  366. let action = Action.Pop;
  367. let listener = null;
  368. function handlePop() {
  369. action = Action.Pop;
  370. if (listener) {
  371. listener({
  372. action,
  373. location: history.location
  374. });
  375. }
  376. }
  377. function push(to, state) {
  378. action = Action.Push;
  379. let location = createLocation(history.location, to, state);
  380. if (validateLocation) validateLocation(location, to);
  381. let historyState = getHistoryState(location);
  382. let url = history.createHref(location); // try...catch because iOS limits us to 100 pushState calls :/
  383. try {
  384. globalHistory.pushState(historyState, "", url);
  385. } catch (error) {
  386. // They are going to lose state here, but there is no real
  387. // way to warn them about it since the page will refresh...
  388. window.location.assign(url);
  389. }
  390. if (v5Compat && listener) {
  391. listener({
  392. action,
  393. location: history.location
  394. });
  395. }
  396. }
  397. function replace(to, state) {
  398. action = Action.Replace;
  399. let location = createLocation(history.location, to, state);
  400. if (validateLocation) validateLocation(location, to);
  401. let historyState = getHistoryState(location);
  402. let url = history.createHref(location);
  403. globalHistory.replaceState(historyState, "", url);
  404. if (v5Compat && listener) {
  405. listener({
  406. action,
  407. location: history.location
  408. });
  409. }
  410. }
  411. let history = {
  412. get action() {
  413. return action;
  414. },
  415. get location() {
  416. return getLocation(window, globalHistory);
  417. },
  418. listen(fn) {
  419. if (listener) {
  420. throw new Error("A history only accepts one active listener");
  421. }
  422. window.addEventListener(PopStateEventType, handlePop);
  423. listener = fn;
  424. return () => {
  425. window.removeEventListener(PopStateEventType, handlePop);
  426. listener = null;
  427. };
  428. },
  429. createHref(to) {
  430. return createHref(window, to);
  431. },
  432. encodeLocation(location) {
  433. // Encode a Location the same way window.location would
  434. let url = createURL(createPath(location));
  435. return _extends({}, location, {
  436. pathname: url.pathname,
  437. search: url.search,
  438. hash: url.hash
  439. });
  440. },
  441. push,
  442. replace,
  443. go(n) {
  444. return globalHistory.go(n);
  445. }
  446. };
  447. return history;
  448. } //#endregion
  449. var ResultType;
  450. (function (ResultType) {
  451. ResultType["data"] = "data";
  452. ResultType["deferred"] = "deferred";
  453. ResultType["redirect"] = "redirect";
  454. ResultType["error"] = "error";
  455. })(ResultType || (ResultType = {}));
  456. function isIndexRoute(route) {
  457. return route.index === true;
  458. } // Walk the route tree generating unique IDs where necessary so we are working
  459. // solely with AgnosticDataRouteObject's within the Router
  460. function convertRoutesToDataRoutes(routes, parentPath, allIds) {
  461. if (parentPath === void 0) {
  462. parentPath = [];
  463. }
  464. if (allIds === void 0) {
  465. allIds = new Set();
  466. }
  467. return routes.map((route, index) => {
  468. let treePath = [...parentPath, index];
  469. let id = typeof route.id === "string" ? route.id : treePath.join("-");
  470. invariant(route.index !== true || !route.children, "Cannot specify children on an index route");
  471. invariant(!allIds.has(id), "Found a route id collision on id \"" + id + "\". Route " + "id's must be globally unique within Data Router usages");
  472. allIds.add(id);
  473. if (isIndexRoute(route)) {
  474. let indexRoute = _extends({}, route, {
  475. id
  476. });
  477. return indexRoute;
  478. } else {
  479. let pathOrLayoutRoute = _extends({}, route, {
  480. id,
  481. children: route.children ? convertRoutesToDataRoutes(route.children, treePath, allIds) : undefined
  482. });
  483. return pathOrLayoutRoute;
  484. }
  485. });
  486. }
  487. /**
  488. * Matches the given routes to a location and returns the match data.
  489. *
  490. * @see https://reactrouter.com/docs/en/v6/utils/match-routes
  491. */
  492. function matchRoutes(routes, locationArg, basename) {
  493. if (basename === void 0) {
  494. basename = "/";
  495. }
  496. let location = typeof locationArg === "string" ? parsePath(locationArg) : locationArg;
  497. let pathname = stripBasename(location.pathname || "/", basename);
  498. if (pathname == null) {
  499. return null;
  500. }
  501. let branches = flattenRoutes(routes);
  502. rankRouteBranches(branches);
  503. let matches = null;
  504. for (let i = 0; matches == null && i < branches.length; ++i) {
  505. matches = matchRouteBranch(branches[i], // Incoming pathnames are generally encoded from either window.location
  506. // or from router.navigate, but we want to match against the unencoded
  507. // paths in the route definitions. Memory router locations won't be
  508. // encoded here but there also shouldn't be anything to decode so this
  509. // should be a safe operation. This avoids needing matchRoutes to be
  510. // history-aware.
  511. safelyDecodeURI(pathname));
  512. }
  513. return matches;
  514. }
  515. function flattenRoutes(routes, branches, parentsMeta, parentPath) {
  516. if (branches === void 0) {
  517. branches = [];
  518. }
  519. if (parentsMeta === void 0) {
  520. parentsMeta = [];
  521. }
  522. if (parentPath === void 0) {
  523. parentPath = "";
  524. }
  525. routes.forEach((route, index) => {
  526. let meta = {
  527. relativePath: route.path || "",
  528. caseSensitive: route.caseSensitive === true,
  529. childrenIndex: index,
  530. route
  531. };
  532. if (meta.relativePath.startsWith("/")) {
  533. invariant(meta.relativePath.startsWith(parentPath), "Absolute route path \"" + meta.relativePath + "\" nested under path " + ("\"" + parentPath + "\" is not valid. An absolute child route path ") + "must start with the combined path of all its parent routes.");
  534. meta.relativePath = meta.relativePath.slice(parentPath.length);
  535. }
  536. let path = joinPaths([parentPath, meta.relativePath]);
  537. let routesMeta = parentsMeta.concat(meta); // Add the children before adding this route to the array so we traverse the
  538. // route tree depth-first and child routes appear before their parents in
  539. // the "flattened" version.
  540. if (route.children && route.children.length > 0) {
  541. invariant( // Our types know better, but runtime JS may not!
  542. // @ts-expect-error
  543. route.index !== true, "Index routes must not have child routes. Please remove " + ("all child routes from route path \"" + path + "\"."));
  544. flattenRoutes(route.children, branches, routesMeta, path);
  545. } // Routes without a path shouldn't ever match by themselves unless they are
  546. // index routes, so don't add them to the list of possible branches.
  547. if (route.path == null && !route.index) {
  548. return;
  549. }
  550. branches.push({
  551. path,
  552. score: computeScore(path, route.index),
  553. routesMeta
  554. });
  555. });
  556. return branches;
  557. }
  558. function rankRouteBranches(branches) {
  559. branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first
  560. : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));
  561. }
  562. const paramRe = /^:\w+$/;
  563. const dynamicSegmentValue = 3;
  564. const indexRouteValue = 2;
  565. const emptySegmentValue = 1;
  566. const staticSegmentValue = 10;
  567. const splatPenalty = -2;
  568. const isSplat = s => s === "*";
  569. function computeScore(path, index) {
  570. let segments = path.split("/");
  571. let initialScore = segments.length;
  572. if (segments.some(isSplat)) {
  573. initialScore += splatPenalty;
  574. }
  575. if (index) {
  576. initialScore += indexRouteValue;
  577. }
  578. return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === "" ? emptySegmentValue : staticSegmentValue), initialScore);
  579. }
  580. function compareIndexes(a, b) {
  581. let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);
  582. return siblings ? // If two routes are siblings, we should try to match the earlier sibling
  583. // first. This allows people to have fine-grained control over the matching
  584. // behavior by simply putting routes with identical paths in the order they
  585. // want them tried.
  586. a[a.length - 1] - b[b.length - 1] : // Otherwise, it doesn't really make sense to rank non-siblings by index,
  587. // so they sort equally.
  588. 0;
  589. }
  590. function matchRouteBranch(branch, pathname) {
  591. let {
  592. routesMeta
  593. } = branch;
  594. let matchedParams = {};
  595. let matchedPathname = "/";
  596. let matches = [];
  597. for (let i = 0; i < routesMeta.length; ++i) {
  598. let meta = routesMeta[i];
  599. let end = i === routesMeta.length - 1;
  600. let remainingPathname = matchedPathname === "/" ? pathname : pathname.slice(matchedPathname.length) || "/";
  601. let match = matchPath({
  602. path: meta.relativePath,
  603. caseSensitive: meta.caseSensitive,
  604. end
  605. }, remainingPathname);
  606. if (!match) return null;
  607. Object.assign(matchedParams, match.params);
  608. let route = meta.route;
  609. matches.push({
  610. // TODO: Can this as be avoided?
  611. params: matchedParams,
  612. pathname: joinPaths([matchedPathname, match.pathname]),
  613. pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),
  614. route
  615. });
  616. if (match.pathnameBase !== "/") {
  617. matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);
  618. }
  619. }
  620. return matches;
  621. }
  622. /**
  623. * Returns a path with params interpolated.
  624. *
  625. * @see https://reactrouter.com/docs/en/v6/utils/generate-path
  626. */
  627. function generatePath(path, params) {
  628. if (params === void 0) {
  629. params = {};
  630. }
  631. return path.replace(/:(\w+)/g, (_, key) => {
  632. invariant(params[key] != null, "Missing \":" + key + "\" param");
  633. return params[key];
  634. }).replace(/(\/?)\*/, (_, prefix, __, str) => {
  635. const star = "*";
  636. if (params[star] == null) {
  637. // If no splat was provided, trim the trailing slash _unless_ it's
  638. // the entire path
  639. return str === "/*" ? "/" : "";
  640. } // Apply the splat
  641. return "" + prefix + params[star];
  642. });
  643. }
  644. /**
  645. * Performs pattern matching on a URL pathname and returns information about
  646. * the match.
  647. *
  648. * @see https://reactrouter.com/docs/en/v6/utils/match-path
  649. */
  650. function matchPath(pattern, pathname) {
  651. if (typeof pattern === "string") {
  652. pattern = {
  653. path: pattern,
  654. caseSensitive: false,
  655. end: true
  656. };
  657. }
  658. let [matcher, paramNames] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);
  659. let match = pathname.match(matcher);
  660. if (!match) return null;
  661. let matchedPathname = match[0];
  662. let pathnameBase = matchedPathname.replace(/(.)\/+$/, "$1");
  663. let captureGroups = match.slice(1);
  664. let params = paramNames.reduce((memo, paramName, index) => {
  665. // We need to compute the pathnameBase here using the raw splat value
  666. // instead of using params["*"] later because it will be decoded then
  667. if (paramName === "*") {
  668. let splatValue = captureGroups[index] || "";
  669. pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\/+$/, "$1");
  670. }
  671. memo[paramName] = safelyDecodeURIComponent(captureGroups[index] || "", paramName);
  672. return memo;
  673. }, {});
  674. return {
  675. params,
  676. pathname: matchedPathname,
  677. pathnameBase,
  678. pattern
  679. };
  680. }
  681. function compilePath(path, caseSensitive, end) {
  682. if (caseSensitive === void 0) {
  683. caseSensitive = false;
  684. }
  685. if (end === void 0) {
  686. end = true;
  687. }
  688. warning(path === "*" || !path.endsWith("*") || path.endsWith("/*"), "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\"."));
  689. let paramNames = [];
  690. let regexpSource = "^" + path.replace(/\/*\*?$/, "") // Ignore trailing / and /*, we'll handle it below
  691. .replace(/^\/*/, "/") // Make sure it has a leading /
  692. .replace(/[\\.*+^$?{}|()[\]]/g, "\\$&") // Escape special regex chars
  693. .replace(/:(\w+)/g, (_, paramName) => {
  694. paramNames.push(paramName);
  695. return "([^\\/]+)";
  696. });
  697. if (path.endsWith("*")) {
  698. paramNames.push("*");
  699. regexpSource += path === "*" || path === "/*" ? "(.*)$" // Already matched the initial /, just match the rest
  700. : "(?:\\/(.+)|\\/*)$"; // Don't include the / in params["*"]
  701. } else if (end) {
  702. // When matching to the end, ignore trailing slashes
  703. regexpSource += "\\/*$";
  704. } else if (path !== "" && path !== "/") {
  705. // If our path is non-empty and contains anything beyond an initial slash,
  706. // then we have _some_ form of path in our regex so we should expect to
  707. // match only if we find the end of this path segment. Look for an optional
  708. // non-captured trailing slash (to match a portion of the URL) or the end
  709. // of the path (if we've matched to the end). We used to do this with a
  710. // word boundary but that gives false positives on routes like
  711. // /user-preferences since `-` counts as a word boundary.
  712. regexpSource += "(?:(?=\\/|$))";
  713. } else ;
  714. let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i");
  715. return [matcher, paramNames];
  716. }
  717. function safelyDecodeURI(value) {
  718. try {
  719. return decodeURI(value);
  720. } catch (error) {
  721. warning(false, "The URL path \"" + value + "\" could not be decoded because it is is a " + "malformed URL segment. This is probably due to a bad percent " + ("encoding (" + error + ")."));
  722. return value;
  723. }
  724. }
  725. function safelyDecodeURIComponent(value, paramName) {
  726. try {
  727. return decodeURIComponent(value);
  728. } catch (error) {
  729. warning(false, "The value for the URL param \"" + paramName + "\" will not be decoded because" + (" the string \"" + value + "\" is a malformed URL segment. This is probably") + (" due to a bad percent encoding (" + error + ")."));
  730. return value;
  731. }
  732. }
  733. /**
  734. * @private
  735. */
  736. function stripBasename(pathname, basename) {
  737. if (basename === "/") return pathname;
  738. if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {
  739. return null;
  740. } // We want to leave trailing slash behavior in the user's control, so if they
  741. // specify a basename with a trailing slash, we should support it
  742. let startIndex = basename.endsWith("/") ? basename.length - 1 : basename.length;
  743. let nextChar = pathname.charAt(startIndex);
  744. if (nextChar && nextChar !== "/") {
  745. // pathname does not start with basename/
  746. return null;
  747. }
  748. return pathname.slice(startIndex) || "/";
  749. }
  750. function invariant(value, message) {
  751. if (value === false || value === null || typeof value === "undefined") {
  752. throw new Error(message);
  753. }
  754. }
  755. /**
  756. * @private
  757. */
  758. function warning(cond, message) {
  759. if (!cond) {
  760. // eslint-disable-next-line no-console
  761. if (typeof console !== "undefined") console.warn(message);
  762. try {
  763. // Welcome to debugging React Router!
  764. //
  765. // This error is thrown as a convenience so you can more easily
  766. // find the source for a warning that appears in the console by
  767. // enabling "pause on exceptions" in your JavaScript debugger.
  768. throw new Error(message); // eslint-disable-next-line no-empty
  769. } catch (e) {}
  770. }
  771. }
  772. /**
  773. * Returns a resolved path object relative to the given pathname.
  774. *
  775. * @see https://reactrouter.com/docs/en/v6/utils/resolve-path
  776. */
  777. function resolvePath(to, fromPathname) {
  778. if (fromPathname === void 0) {
  779. fromPathname = "/";
  780. }
  781. let {
  782. pathname: toPathname,
  783. search = "",
  784. hash = ""
  785. } = typeof to === "string" ? parsePath(to) : to;
  786. let pathname = toPathname ? toPathname.startsWith("/") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;
  787. return {
  788. pathname,
  789. search: normalizeSearch(search),
  790. hash: normalizeHash(hash)
  791. };
  792. }
  793. function resolvePathname(relativePath, fromPathname) {
  794. let segments = fromPathname.replace(/\/+$/, "").split("/");
  795. let relativeSegments = relativePath.split("/");
  796. relativeSegments.forEach(segment => {
  797. if (segment === "..") {
  798. // Keep the root "" segment so the pathname starts at /
  799. if (segments.length > 1) segments.pop();
  800. } else if (segment !== ".") {
  801. segments.push(segment);
  802. }
  803. });
  804. return segments.length > 1 ? segments.join("/") : "/";
  805. }
  806. function getInvalidPathError(char, field, dest, path) {
  807. return "Cannot include a '" + char + "' character in a manually specified " + ("`to." + field + "` field [" + JSON.stringify(path) + "]. Please separate it out to the ") + ("`to." + dest + "` field. Alternatively you may provide the full path as ") + "a string in <Link to=\"...\"> and the router will parse it for you.";
  808. }
  809. /**
  810. * @private
  811. *
  812. * When processing relative navigation we want to ignore ancestor routes that
  813. * do not contribute to the path, such that index/pathless layout routes don't
  814. * interfere.
  815. *
  816. * For example, when moving a route element into an index route and/or a
  817. * pathless layout route, relative link behavior contained within should stay
  818. * the same. Both of the following examples should link back to the root:
  819. *
  820. * <Route path="/">
  821. * <Route path="accounts" element={<Link to=".."}>
  822. * </Route>
  823. *
  824. * <Route path="/">
  825. * <Route path="accounts">
  826. * <Route element={<AccountsLayout />}> // <-- Does not contribute
  827. * <Route index element={<Link to=".."} /> // <-- Does not contribute
  828. * </Route
  829. * </Route>
  830. * </Route>
  831. */
  832. function getPathContributingMatches(matches) {
  833. return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);
  834. }
  835. /**
  836. * @private
  837. */
  838. function resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {
  839. if (isPathRelative === void 0) {
  840. isPathRelative = false;
  841. }
  842. let to;
  843. if (typeof toArg === "string") {
  844. to = parsePath(toArg);
  845. } else {
  846. to = _extends({}, toArg);
  847. invariant(!to.pathname || !to.pathname.includes("?"), getInvalidPathError("?", "pathname", "search", to));
  848. invariant(!to.pathname || !to.pathname.includes("#"), getInvalidPathError("#", "pathname", "hash", to));
  849. invariant(!to.search || !to.search.includes("#"), getInvalidPathError("#", "search", "hash", to));
  850. }
  851. let isEmptyPath = toArg === "" || to.pathname === "";
  852. let toPathname = isEmptyPath ? "/" : to.pathname;
  853. let from; // Routing is relative to the current pathname if explicitly requested.
  854. //
  855. // If a pathname is explicitly provided in `to`, it should be relative to the
  856. // route context. This is explained in `Note on `<Link to>` values` in our
  857. // migration guide from v5 as a means of disambiguation between `to` values
  858. // that begin with `/` and those that do not. However, this is problematic for
  859. // `to` values that do not provide a pathname. `to` can simply be a search or
  860. // hash string, in which case we should assume that the navigation is relative
  861. // to the current location's pathname and *not* the route pathname.
  862. if (isPathRelative || toPathname == null) {
  863. from = locationPathname;
  864. } else {
  865. let routePathnameIndex = routePathnames.length - 1;
  866. if (toPathname.startsWith("..")) {
  867. let toSegments = toPathname.split("/"); // Each leading .. segment means "go up one route" instead of "go up one
  868. // URL segment". This is a key difference from how <a href> works and a
  869. // major reason we call this a "to" value instead of a "href".
  870. while (toSegments[0] === "..") {
  871. toSegments.shift();
  872. routePathnameIndex -= 1;
  873. }
  874. to.pathname = toSegments.join("/");
  875. } // If there are more ".." segments than parent routes, resolve relative to
  876. // the root / URL.
  877. from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : "/";
  878. }
  879. let path = resolvePath(to, from); // Ensure the pathname has a trailing slash if the original "to" had one
  880. let hasExplicitTrailingSlash = toPathname && toPathname !== "/" && toPathname.endsWith("/"); // Or if this was a link to the current path which has a trailing slash
  881. let hasCurrentTrailingSlash = (isEmptyPath || toPathname === ".") && locationPathname.endsWith("/");
  882. if (!path.pathname.endsWith("/") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {
  883. path.pathname += "/";
  884. }
  885. return path;
  886. }
  887. /**
  888. * @private
  889. */
  890. function getToPathname(to) {
  891. // Empty strings should be treated the same as / paths
  892. return to === "" || to.pathname === "" ? "/" : typeof to === "string" ? parsePath(to).pathname : to.pathname;
  893. }
  894. /**
  895. * @private
  896. */
  897. const joinPaths = paths => paths.join("/").replace(/\/\/+/g, "/");
  898. /**
  899. * @private
  900. */
  901. const normalizePathname = pathname => pathname.replace(/\/+$/, "").replace(/^\/*/, "/");
  902. /**
  903. * @private
  904. */
  905. const normalizeSearch = search => !search || search === "?" ? "" : search.startsWith("?") ? search : "?" + search;
  906. /**
  907. * @private
  908. */
  909. const normalizeHash = hash => !hash || hash === "#" ? "" : hash.startsWith("#") ? hash : "#" + hash;
  910. /**
  911. * This is a shortcut for creating `application/json` responses. Converts `data`
  912. * to JSON and sets the `Content-Type` header.
  913. */
  914. const json = function json(data, init) {
  915. if (init === void 0) {
  916. init = {};
  917. }
  918. let responseInit = typeof init === "number" ? {
  919. status: init
  920. } : init;
  921. let headers = new Headers(responseInit.headers);
  922. if (!headers.has("Content-Type")) {
  923. headers.set("Content-Type", "application/json; charset=utf-8");
  924. }
  925. return new Response(JSON.stringify(data), _extends({}, responseInit, {
  926. headers
  927. }));
  928. };
  929. class AbortedDeferredError extends Error {}
  930. class DeferredData {
  931. constructor(data) {
  932. this.pendingKeys = new Set();
  933. this.subscriber = undefined;
  934. invariant(data && typeof data === "object" && !Array.isArray(data), "defer() only accepts plain objects"); // Set up an AbortController + Promise we can race against to exit early
  935. // cancellation
  936. let reject;
  937. this.abortPromise = new Promise((_, r) => reject = r);
  938. this.controller = new AbortController();
  939. let onAbort = () => reject(new AbortedDeferredError("Deferred data aborted"));
  940. this.unlistenAbortSignal = () => this.controller.signal.removeEventListener("abort", onAbort);
  941. this.controller.signal.addEventListener("abort", onAbort);
  942. this.data = Object.entries(data).reduce((acc, _ref) => {
  943. let [key, value] = _ref;
  944. return Object.assign(acc, {
  945. [key]: this.trackPromise(key, value)
  946. });
  947. }, {});
  948. }
  949. trackPromise(key, value) {
  950. if (!(value instanceof Promise)) {
  951. return value;
  952. }
  953. this.pendingKeys.add(key); // We store a little wrapper promise that will be extended with
  954. // _data/_error props upon resolve/reject
  955. let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, null, data), error => this.onSettle(promise, key, error)); // Register rejection listeners to avoid uncaught promise rejections on
  956. // errors or aborted deferred values
  957. promise.catch(() => {});
  958. Object.defineProperty(promise, "_tracked", {
  959. get: () => true
  960. });
  961. return promise;
  962. }
  963. onSettle(promise, key, error, data) {
  964. if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {
  965. this.unlistenAbortSignal();
  966. Object.defineProperty(promise, "_error", {
  967. get: () => error
  968. });
  969. return Promise.reject(error);
  970. }
  971. this.pendingKeys.delete(key);
  972. if (this.done) {
  973. // Nothing left to abort!
  974. this.unlistenAbortSignal();
  975. }
  976. const subscriber = this.subscriber;
  977. if (error) {
  978. Object.defineProperty(promise, "_error", {
  979. get: () => error
  980. });
  981. subscriber && subscriber(false);
  982. return Promise.reject(error);
  983. }
  984. Object.defineProperty(promise, "_data", {
  985. get: () => data
  986. });
  987. subscriber && subscriber(false);
  988. return data;
  989. }
  990. subscribe(fn) {
  991. this.subscriber = fn;
  992. }
  993. cancel() {
  994. this.controller.abort();
  995. this.pendingKeys.forEach((v, k) => this.pendingKeys.delete(k));
  996. let subscriber = this.subscriber;
  997. subscriber && subscriber(true);
  998. }
  999. async resolveData(signal) {
  1000. let aborted = false;
  1001. if (!this.done) {
  1002. let onAbort = () => this.cancel();
  1003. signal.addEventListener("abort", onAbort);
  1004. aborted = await new Promise(resolve => {
  1005. this.subscribe(aborted => {
  1006. signal.removeEventListener("abort", onAbort);
  1007. if (aborted || this.done) {
  1008. resolve(aborted);
  1009. }
  1010. });
  1011. });
  1012. }
  1013. return aborted;
  1014. }
  1015. get done() {
  1016. return this.pendingKeys.size === 0;
  1017. }
  1018. get unwrappedData() {
  1019. invariant(this.data !== null && this.done, "Can only unwrap data on initialized and settled deferreds");
  1020. return Object.entries(this.data).reduce((acc, _ref2) => {
  1021. let [key, value] = _ref2;
  1022. return Object.assign(acc, {
  1023. [key]: unwrapTrackedPromise(value)
  1024. });
  1025. }, {});
  1026. }
  1027. }
  1028. function isTrackedPromise(value) {
  1029. return value instanceof Promise && value._tracked === true;
  1030. }
  1031. function unwrapTrackedPromise(value) {
  1032. if (!isTrackedPromise(value)) {
  1033. return value;
  1034. }
  1035. if (value._error) {
  1036. throw value._error;
  1037. }
  1038. return value._data;
  1039. }
  1040. function defer(data) {
  1041. return new DeferredData(data);
  1042. }
  1043. /**
  1044. * A redirect response. Sets the status code and the `Location` header.
  1045. * Defaults to "302 Found".
  1046. */
  1047. const redirect = function redirect(url, init) {
  1048. if (init === void 0) {
  1049. init = 302;
  1050. }
  1051. let responseInit = init;
  1052. if (typeof responseInit === "number") {
  1053. responseInit = {
  1054. status: responseInit
  1055. };
  1056. } else if (typeof responseInit.status === "undefined") {
  1057. responseInit.status = 302;
  1058. }
  1059. let headers = new Headers(responseInit.headers);
  1060. headers.set("Location", url);
  1061. return new Response(null, _extends({}, responseInit, {
  1062. headers
  1063. }));
  1064. };
  1065. /**
  1066. * @private
  1067. * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies
  1068. */
  1069. class ErrorResponse {
  1070. constructor(status, statusText, data) {
  1071. this.status = status;
  1072. this.statusText = statusText || "";
  1073. this.data = data;
  1074. }
  1075. }
  1076. /**
  1077. * Check if the given error is an ErrorResponse generated from a 4xx/5xx
  1078. * Response throw from an action/loader
  1079. */
  1080. function isRouteErrorResponse(e) {
  1081. return e instanceof ErrorResponse;
  1082. }
  1083. const IDLE_NAVIGATION = {
  1084. state: "idle",
  1085. location: undefined,
  1086. formMethod: undefined,
  1087. formAction: undefined,
  1088. formEncType: undefined,
  1089. formData: undefined
  1090. };
  1091. const IDLE_FETCHER = {
  1092. state: "idle",
  1093. data: undefined,
  1094. formMethod: undefined,
  1095. formAction: undefined,
  1096. formEncType: undefined,
  1097. formData: undefined
  1098. };
  1099. const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
  1100. const isServer = !isBrowser; //#endregion
  1101. ////////////////////////////////////////////////////////////////////////////////
  1102. //#region createRouter
  1103. ////////////////////////////////////////////////////////////////////////////////
  1104. /**
  1105. * Create a router and listen to history POP navigations
  1106. */
  1107. function createRouter(init) {
  1108. invariant(init.routes.length > 0, "You must provide a non-empty routes array to createRouter");
  1109. let dataRoutes = convertRoutesToDataRoutes(init.routes); // Cleanup function for history
  1110. let unlistenHistory = null; // Externally-provided functions to call on all state changes
  1111. let subscribers = new Set(); // Externally-provided object to hold scroll restoration locations during routing
  1112. let savedScrollPositions = null; // Externally-provided function to get scroll restoration keys
  1113. let getScrollRestorationKey = null; // Externally-provided function to get current scroll position
  1114. let getScrollPosition = null; // One-time flag to control the initial hydration scroll restoration. Because
  1115. // we don't get the saved positions from <ScrollRestoration /> until _after_
  1116. // the initial render, we need to manually trigger a separate updateState to
  1117. // send along the restoreScrollPosition
  1118. let initialScrollRestored = false;
  1119. let initialMatches = matchRoutes(dataRoutes, init.history.location, init.basename);
  1120. let initialErrors = null;
  1121. if (initialMatches == null) {
  1122. // If we do not match a user-provided-route, fall back to the root
  1123. // to allow the error boundary to take over
  1124. let {
  1125. matches,
  1126. route,
  1127. error
  1128. } = getNotFoundMatches(dataRoutes);
  1129. initialMatches = matches;
  1130. initialErrors = {
  1131. [route.id]: error
  1132. };
  1133. }
  1134. let initialized = !initialMatches.some(m => m.route.loader) || init.hydrationData != null;
  1135. let router;
  1136. let state = {
  1137. historyAction: init.history.action,
  1138. location: init.history.location,
  1139. matches: initialMatches,
  1140. initialized,
  1141. navigation: IDLE_NAVIGATION,
  1142. restoreScrollPosition: null,
  1143. preventScrollReset: false,
  1144. revalidation: "idle",
  1145. loaderData: init.hydrationData && init.hydrationData.loaderData || {},
  1146. actionData: init.hydrationData && init.hydrationData.actionData || null,
  1147. errors: init.hydrationData && init.hydrationData.errors || initialErrors,
  1148. fetchers: new Map()
  1149. }; // -- Stateful internal variables to manage navigations --
  1150. // Current navigation in progress (to be committed in completeNavigation)
  1151. let pendingAction = Action.Pop; // Should the current navigation prevent the scroll reset if scroll cannot
  1152. // be restored?
  1153. let pendingPreventScrollReset = false; // AbortController for the active navigation
  1154. let pendingNavigationController; // We use this to avoid touching history in completeNavigation if a
  1155. // revalidation is entirely uninterrupted
  1156. let isUninterruptedRevalidation = false; // Use this internal flag to force revalidation of all loaders:
  1157. // - submissions (completed or interrupted)
  1158. // - useRevalidate()
  1159. // - X-Remix-Revalidate (from redirect)
  1160. let isRevalidationRequired = false; // Use this internal array to capture routes that require revalidation due
  1161. // to a cancelled deferred on action submission
  1162. let cancelledDeferredRoutes = []; // Use this internal array to capture fetcher loads that were cancelled by an
  1163. // action navigation and require revalidation
  1164. let cancelledFetcherLoads = []; // AbortControllers for any in-flight fetchers
  1165. let fetchControllers = new Map(); // Track loads based on the order in which they started
  1166. let incrementingLoadId = 0; // Track the outstanding pending navigation data load to be compared against
  1167. // the globally incrementing load when a fetcher load lands after a completed
  1168. // navigation
  1169. let pendingNavigationLoadId = -1; // Fetchers that triggered data reloads as a result of their actions
  1170. let fetchReloadIds = new Map(); // Fetchers that triggered redirect navigations from their actions
  1171. let fetchRedirectIds = new Set(); // Most recent href/match for fetcher.load calls for fetchers
  1172. let fetchLoadMatches = new Map(); // Store DeferredData instances for active route matches. When a
  1173. // route loader returns defer() we stick one in here. Then, when a nested
  1174. // promise resolves we update loaderData. If a new navigation starts we
  1175. // cancel active deferreds for eliminated routes.
  1176. let activeDeferreds = new Map(); // Initialize the router, all side effects should be kicked off from here.
  1177. // Implemented as a Fluent API for ease of:
  1178. // let router = createRouter(init).initialize();
  1179. function initialize() {
  1180. // If history informs us of a POP navigation, start the navigation but do not update
  1181. // state. We'll update our own state once the navigation completes
  1182. unlistenHistory = init.history.listen(_ref => {
  1183. let {
  1184. action: historyAction,
  1185. location
  1186. } = _ref;
  1187. return startNavigation(historyAction, location);
  1188. }); // Kick off initial data load if needed. Use Pop to avoid modifying history
  1189. if (!state.initialized) {
  1190. startNavigation(Action.Pop, state.location);
  1191. }
  1192. return router;
  1193. } // Clean up a router and it's side effects
  1194. function dispose() {
  1195. if (unlistenHistory) {
  1196. unlistenHistory();
  1197. }
  1198. subscribers.clear();
  1199. pendingNavigationController && pendingNavigationController.abort();
  1200. state.fetchers.forEach((_, key) => deleteFetcher(key));
  1201. } // Subscribe to state updates for the router
  1202. function subscribe(fn) {
  1203. subscribers.add(fn);
  1204. return () => subscribers.delete(fn);
  1205. } // Update our state and notify the calling context of the change
  1206. function updateState(newState) {
  1207. state = _extends({}, state, newState);
  1208. subscribers.forEach(subscriber => subscriber(state));
  1209. } // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION
  1210. // and setting state.[historyAction/location/matches] to the new route.
  1211. // - Location is a required param
  1212. // - Navigation will always be set to IDLE_NAVIGATION
  1213. // - Can pass any other state in newState
  1214. function completeNavigation(location, newState) {
  1215. var _state$navigation$for;
  1216. // Deduce if we're in a loading/actionReload state:
  1217. // - We have committed actionData in the store
  1218. // - The current navigation was a submission
  1219. // - We're past the submitting state and into the loading state
  1220. // - The location we've finished loading is different from the submission
  1221. // location, indicating we redirected from the action (avoids false
  1222. // positives for loading/submissionRedirect when actionData returned
  1223. // on a prior submission)
  1224. let isActionReload = state.actionData != null && state.navigation.formMethod != null && state.navigation.state === "loading" && ((_state$navigation$for = state.navigation.formAction) == null ? void 0 : _state$navigation$for.split("?")[0]) === location.pathname; // Always preserve any existing loaderData from re-used routes
  1225. let newLoaderData = newState.loaderData ? {
  1226. loaderData: mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [])
  1227. } : {};
  1228. updateState(_extends({}, isActionReload ? {} : {
  1229. actionData: null
  1230. }, newState, newLoaderData, {
  1231. historyAction: pendingAction,
  1232. location,
  1233. initialized: true,
  1234. navigation: IDLE_NAVIGATION,
  1235. revalidation: "idle",
  1236. // Don't restore on submission navigations
  1237. restoreScrollPosition: state.navigation.formData ? false : getSavedScrollPosition(location, newState.matches || state.matches),
  1238. preventScrollReset: pendingPreventScrollReset
  1239. }));
  1240. if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {
  1241. init.history.push(location, location.state);
  1242. } else if (pendingAction === Action.Replace) {
  1243. init.history.replace(location, location.state);
  1244. } // Reset stateful navigation vars
  1245. pendingAction = Action.Pop;
  1246. pendingPreventScrollReset = false;
  1247. isUninterruptedRevalidation = false;
  1248. isRevalidationRequired = false;
  1249. cancelledDeferredRoutes = [];
  1250. cancelledFetcherLoads = [];
  1251. } // Trigger a navigation event, which can either be a numerical POP or a PUSH
  1252. // replace with an optional submission
  1253. async function navigate(to, opts) {
  1254. if (typeof to === "number") {
  1255. init.history.go(to);
  1256. return;
  1257. }
  1258. let {
  1259. path,
  1260. submission,
  1261. error
  1262. } = normalizeNavigateOptions(to, opts);
  1263. let location = createLocation(state.location, path, opts && opts.state); // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded
  1264. // URL from window.location, so we need to encode it here so the behavior
  1265. // remains the same as POP and non-data-router usages. new URL() does all
  1266. // the same encoding we'd get from a history.pushState/window.location read
  1267. // without having to touch history
  1268. location = init.history.encodeLocation(location);
  1269. let historyAction = (opts && opts.replace) === true || submission != null ? Action.Replace : Action.Push;
  1270. let preventScrollReset = opts && "preventScrollReset" in opts ? opts.preventScrollReset === true : undefined;
  1271. return await startNavigation(historyAction, location, {
  1272. submission,
  1273. // Send through the formData serialization error if we have one so we can
  1274. // render at the right error boundary after we match routes
  1275. pendingError: error,
  1276. preventScrollReset,
  1277. replace: opts && opts.replace
  1278. });
  1279. } // Revalidate all current loaders. If a navigation is in progress or if this
  1280. // is interrupted by a navigation, allow this to "succeed" by calling all
  1281. // loaders during the next loader round
  1282. function revalidate() {
  1283. interruptActiveLoads();
  1284. updateState({
  1285. revalidation: "loading"
  1286. }); // If we're currently submitting an action, we don't need to start a new
  1287. // navigation, we'll just let the follow up loader execution call all loaders
  1288. if (state.navigation.state === "submitting") {
  1289. return;
  1290. } // If we're currently in an idle state, start a new navigation for the current
  1291. // action/location and mark it as uninterrupted, which will skip the history
  1292. // update in completeNavigation
  1293. if (state.navigation.state === "idle") {
  1294. startNavigation(state.historyAction, state.location, {
  1295. startUninterruptedRevalidation: true
  1296. });
  1297. return;
  1298. } // Otherwise, if we're currently in a loading state, just start a new
  1299. // navigation to the navigation.location but do not trigger an uninterrupted
  1300. // revalidation so that history correctly updates once the navigation completes
  1301. startNavigation(pendingAction || state.historyAction, state.navigation.location, {
  1302. overrideNavigation: state.navigation
  1303. });
  1304. } // Start a navigation to the given action/location. Can optionally provide a
  1305. // overrideNavigation which will override the normalLoad in the case of a redirect
  1306. // navigation
  1307. async function startNavigation(historyAction, location, opts) {
  1308. // Abort any in-progress navigations and start a new one. Unset any ongoing
  1309. // uninterrupted revalidations unless told otherwise, since we want this
  1310. // new navigation to update history normally
  1311. pendingNavigationController && pendingNavigationController.abort();
  1312. pendingNavigationController = null;
  1313. pendingAction = historyAction;
  1314. isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true; // Save the current scroll position every time we start a new navigation,
  1315. // and track whether we should reset scroll on completion
  1316. saveScrollPosition(state.location, state.matches);
  1317. pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;
  1318. let loadingNavigation = opts && opts.overrideNavigation;
  1319. let matches = matchRoutes(dataRoutes, location, init.basename); // Short circuit with a 404 on the root error boundary if we match nothing
  1320. if (!matches) {
  1321. let {
  1322. matches: notFoundMatches,
  1323. route,
  1324. error
  1325. } = getNotFoundMatches(dataRoutes); // Cancel all pending deferred on 404s since we don't keep any routes
  1326. cancelActiveDeferreds();
  1327. completeNavigation(location, {
  1328. matches: notFoundMatches,
  1329. loaderData: {},
  1330. errors: {
  1331. [route.id]: error
  1332. }
  1333. });
  1334. return;
  1335. } // Short circuit if it's only a hash change
  1336. if (isHashChangeOnly(state.location, location)) {
  1337. completeNavigation(location, {
  1338. matches
  1339. });
  1340. return;
  1341. } // Create a controller/Request for this navigation
  1342. pendingNavigationController = new AbortController();
  1343. let request = createRequest(location, pendingNavigationController.signal, opts && opts.submission);
  1344. let pendingActionData;
  1345. let pendingError;
  1346. if (opts && opts.pendingError) {
  1347. // If we have a pendingError, it means the user attempted a GET submission
  1348. // with binary FormData so assign here and skip to handleLoaders. That
  1349. // way we handle calling loaders above the boundary etc. It's not really
  1350. // different from an actionError in that sense.
  1351. pendingError = {
  1352. [findNearestBoundary(matches).route.id]: opts.pendingError
  1353. };
  1354. } else if (opts && opts.submission) {
  1355. // Call action if we received an action submission
  1356. let actionOutput = await handleAction(request, location, opts.submission, matches, {
  1357. replace: opts.replace
  1358. });
  1359. if (actionOutput.shortCircuited) {
  1360. return;
  1361. }
  1362. pendingActionData = actionOutput.pendingActionData;
  1363. pendingError = actionOutput.pendingActionError;
  1364. let navigation = _extends({
  1365. state: "loading",
  1366. location
  1367. }, opts.submission);
  1368. loadingNavigation = navigation;
  1369. } // Call loaders
  1370. let {
  1371. shortCircuited,
  1372. loaderData,
  1373. errors
  1374. } = await handleLoaders(request, location, matches, loadingNavigation, opts && opts.submission, opts && opts.replace, pendingActionData, pendingError);
  1375. if (shortCircuited) {
  1376. return;
  1377. } // Clean up now that the action/loaders have completed. Don't clean up if
  1378. // we short circuited because pendingNavigationController will have already
  1379. // been assigned to a new controller for the next navigation
  1380. pendingNavigationController = null;
  1381. completeNavigation(location, {
  1382. matches,
  1383. loaderData,
  1384. errors
  1385. });
  1386. } // Call the action matched by the leaf route for this navigation and handle
  1387. // redirects/errors
  1388. async function handleAction(request, location, submission, matches, opts) {
  1389. interruptActiveLoads(); // Put us in a submitting state
  1390. let navigation = _extends({
  1391. state: "submitting",
  1392. location
  1393. }, submission);
  1394. updateState({
  1395. navigation
  1396. }); // Call our action and get the result
  1397. let result;
  1398. let actionMatch = getTargetMatch(matches, location);
  1399. if (!actionMatch.route.action) {
  1400. result = getMethodNotAllowedResult(location);
  1401. } else {
  1402. result = await callLoaderOrAction("action", request, actionMatch, matches, router.basename);
  1403. if (request.signal.aborted) {
  1404. return {
  1405. shortCircuited: true
  1406. };
  1407. }
  1408. }
  1409. if (isRedirectResult(result)) {
  1410. let redirectNavigation = _extends({
  1411. state: "loading",
  1412. location: createLocation(state.location, result.location)
  1413. }, submission);
  1414. await startRedirectNavigation(result, redirectNavigation, opts && opts.replace);
  1415. return {
  1416. shortCircuited: true
  1417. };
  1418. }
  1419. if (isErrorResult(result)) {
  1420. // Store off the pending error - we use it to determine which loaders
  1421. // to call and will commit it when we complete the navigation
  1422. let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id); // By default, all submissions are REPLACE navigations, but if the
  1423. // action threw an error that'll be rendered in an errorElement, we fall
  1424. // back to PUSH so that the user can use the back button to get back to
  1425. // the pre-submission form location to try again
  1426. if ((opts && opts.replace) !== true) {
  1427. pendingAction = Action.Push;
  1428. }
  1429. return {
  1430. pendingActionError: {
  1431. [boundaryMatch.route.id]: result.error
  1432. }
  1433. };
  1434. }
  1435. if (isDeferredResult(result)) {
  1436. throw new Error("defer() is not supported in actions");
  1437. }
  1438. return {
  1439. pendingActionData: {
  1440. [actionMatch.route.id]: result.data
  1441. }
  1442. };
  1443. } // Call all applicable loaders for the given matches, handling redirects,
  1444. // errors, etc.
  1445. async function handleLoaders(request, location, matches, overrideNavigation, submission, replace, pendingActionData, pendingError) {
  1446. // Figure out the right navigation we want to use for data loading
  1447. let loadingNavigation = overrideNavigation;
  1448. if (!loadingNavigation) {
  1449. let navigation = {
  1450. state: "loading",
  1451. location,
  1452. formMethod: undefined,
  1453. formAction: undefined,
  1454. formEncType: undefined,
  1455. formData: undefined
  1456. };
  1457. loadingNavigation = navigation;
  1458. }
  1459. let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(state, matches, submission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, pendingActionData, pendingError, fetchLoadMatches); // Cancel pending deferreds for no-longer-matched routes or routes we're
  1460. // about to reload. Note that if this is an action reload we would have
  1461. // already cancelled all pending deferreds so this would be a no-op
  1462. cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId)); // Short circuit if we have no loaders to run
  1463. if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {
  1464. completeNavigation(location, {
  1465. matches,
  1466. loaderData: mergeLoaderData(state.loaderData, {}, matches),
  1467. // Commit pending error if we're short circuiting
  1468. errors: pendingError || null,
  1469. actionData: pendingActionData || null
  1470. });
  1471. return {
  1472. shortCircuited: true
  1473. };
  1474. } // If this is an uninterrupted revalidation, we remain in our current idle
  1475. // state. If not, we need to switch to our loading state and load data,
  1476. // preserving any new action data or existing action data (in the case of
  1477. // a revalidation interrupting an actionReload)
  1478. if (!isUninterruptedRevalidation) {
  1479. revalidatingFetchers.forEach(_ref2 => {
  1480. let [key] = _ref2;
  1481. let fetcher = state.fetchers.get(key);
  1482. let revalidatingFetcher = {
  1483. state: "loading",
  1484. data: fetcher && fetcher.data,
  1485. formMethod: undefined,
  1486. formAction: undefined,
  1487. formEncType: undefined,
  1488. formData: undefined
  1489. };
  1490. state.fetchers.set(key, revalidatingFetcher);
  1491. });
  1492. updateState(_extends({
  1493. navigation: loadingNavigation,
  1494. actionData: pendingActionData || state.actionData || null
  1495. }, revalidatingFetchers.length > 0 ? {
  1496. fetchers: new Map(state.fetchers)
  1497. } : {}));
  1498. }
  1499. pendingNavigationLoadId = ++incrementingLoadId;
  1500. revalidatingFetchers.forEach(_ref3 => {
  1501. let [key] = _ref3;
  1502. return fetchControllers.set(key, pendingNavigationController);
  1503. });
  1504. let {
  1505. results,
  1506. loaderResults,
  1507. fetcherResults
  1508. } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request);
  1509. if (request.signal.aborted) {
  1510. return {
  1511. shortCircuited: true
  1512. };
  1513. } // Clean up _after_ loaders have completed. Don't clean up if we short
  1514. // circuited because fetchControllers would have been aborted and
  1515. // reassigned to new controllers for the next navigation
  1516. revalidatingFetchers.forEach(_ref4 => {
  1517. let [key] = _ref4;
  1518. return fetchControllers.delete(key);
  1519. }); // If any loaders returned a redirect Response, start a new REPLACE navigation
  1520. let redirect = findRedirect(results);
  1521. if (redirect) {
  1522. let redirectNavigation = getLoaderRedirect(state, redirect);
  1523. await startRedirectNavigation(redirect, redirectNavigation, replace);
  1524. return {
  1525. shortCircuited: true
  1526. };
  1527. } // Process and commit output from loaders
  1528. let {
  1529. loaderData,
  1530. errors
  1531. } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds); // Wire up subscribers to update loaderData as promises settle
  1532. activeDeferreds.forEach((deferredData, routeId) => {
  1533. deferredData.subscribe(aborted => {
  1534. // Note: No need to updateState here since the TrackedPromise on
  1535. // loaderData is stable across resolve/reject
  1536. // Remove this instance if we were aborted or if promises have settled
  1537. if (aborted || deferredData.done) {
  1538. activeDeferreds.delete(routeId);
  1539. }
  1540. });
  1541. });
  1542. markFetchRedirectsDone();
  1543. let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);
  1544. return _extends({
  1545. loaderData,
  1546. errors
  1547. }, didAbortFetchLoads || revalidatingFetchers.length > 0 ? {
  1548. fetchers: new Map(state.fetchers)
  1549. } : {});
  1550. }
  1551. function getFetcher(key) {
  1552. return state.fetchers.get(key) || IDLE_FETCHER;
  1553. } // Trigger a fetcher load/submit for the given fetcher key
  1554. function fetch(key, routeId, href, opts) {
  1555. if (isServer) {
  1556. throw new Error("router.fetch() was called during the server render, but it shouldn't be. " + "You are likely calling a useFetcher() method in the body of your component. " + "Try moving it to a useEffect or a callback.");
  1557. }
  1558. if (fetchControllers.has(key)) abortFetcher(key);
  1559. let matches = matchRoutes(dataRoutes, href, init.basename);
  1560. if (!matches) {
  1561. setFetcherError(key, routeId, new ErrorResponse(404, "Not Found", null));
  1562. return;
  1563. }
  1564. let {
  1565. path,
  1566. submission
  1567. } = normalizeNavigateOptions(href, opts, true);
  1568. let match = getTargetMatch(matches, path);
  1569. if (submission) {
  1570. handleFetcherAction(key, routeId, path, match, matches, submission);
  1571. return;
  1572. } // Store off the match so we can call it's shouldRevalidate on subsequent
  1573. // revalidations
  1574. fetchLoadMatches.set(key, [path, match, matches]);
  1575. handleFetcherLoader(key, routeId, path, match, matches);
  1576. } // Call the action for the matched fetcher.submit(), and then handle redirects,
  1577. // errors, and revalidation
  1578. async function handleFetcherAction(key, routeId, path, match, requestMatches, submission) {
  1579. interruptActiveLoads();
  1580. fetchLoadMatches.delete(key);
  1581. if (!match.route.action) {
  1582. let {
  1583. error
  1584. } = getMethodNotAllowedResult(path);
  1585. setFetcherError(key, routeId, error);
  1586. return;
  1587. } // Put this fetcher into it's submitting state
  1588. let existingFetcher = state.fetchers.get(key);
  1589. let fetcher = _extends({
  1590. state: "submitting"
  1591. }, submission, {
  1592. data: existingFetcher && existingFetcher.data
  1593. });
  1594. state.fetchers.set(key, fetcher);
  1595. updateState({
  1596. fetchers: new Map(state.fetchers)
  1597. }); // Call the action for the fetcher
  1598. let abortController = new AbortController();
  1599. let fetchRequest = createRequest(path, abortController.signal, submission);
  1600. fetchControllers.set(key, abortController);
  1601. let actionResult = await callLoaderOrAction("action", fetchRequest, match, requestMatches, router.basename);
  1602. if (fetchRequest.signal.aborted) {
  1603. // We can delete this so long as we weren't aborted by ou our own fetcher
  1604. // re-submit which would have put _new_ controller is in fetchControllers
  1605. if (fetchControllers.get(key) === abortController) {
  1606. fetchControllers.delete(key);
  1607. }
  1608. return;
  1609. }
  1610. if (isRedirectResult(actionResult)) {
  1611. fetchControllers.delete(key);
  1612. fetchRedirectIds.add(key);
  1613. let loadingFetcher = _extends({
  1614. state: "loading"
  1615. }, submission, {
  1616. data: undefined
  1617. });
  1618. state.fetchers.set(key, loadingFetcher);
  1619. updateState({
  1620. fetchers: new Map(state.fetchers)
  1621. });
  1622. let redirectNavigation = _extends({
  1623. state: "loading",
  1624. location: createLocation(state.location, actionResult.location)
  1625. }, submission);
  1626. await startRedirectNavigation(actionResult, redirectNavigation);
  1627. return;
  1628. } // Process any non-redirect errors thrown
  1629. if (isErrorResult(actionResult)) {
  1630. setFetcherError(key, routeId, actionResult.error);
  1631. return;
  1632. }
  1633. if (isDeferredResult(actionResult)) {
  1634. invariant(false, "defer() is not supported in actions");
  1635. } // Start the data load for current matches, or the next location if we're
  1636. // in the middle of a navigation
  1637. let nextLocation = state.navigation.location || state.location;
  1638. let revalidationRequest = createRequest(nextLocation, abortController.signal);
  1639. let matches = state.navigation.state !== "idle" ? matchRoutes(dataRoutes, state.navigation.location, init.basename) : state.matches;
  1640. invariant(matches, "Didn't find any matches after fetcher action");
  1641. let loadId = ++incrementingLoadId;
  1642. fetchReloadIds.set(key, loadId);
  1643. let loadFetcher = _extends({
  1644. state: "loading",
  1645. data: actionResult.data
  1646. }, submission);
  1647. state.fetchers.set(key, loadFetcher);
  1648. let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(state, matches, submission, nextLocation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, {
  1649. [match.route.id]: actionResult.data
  1650. }, undefined, // No need to send through errors since we short circuit above
  1651. fetchLoadMatches); // Put all revalidating fetchers into the loading state, except for the
  1652. // current fetcher which we want to keep in it's current loading state which
  1653. // contains it's action submission info + action data
  1654. revalidatingFetchers.filter(_ref5 => {
  1655. let [staleKey] = _ref5;
  1656. return staleKey !== key;
  1657. }).forEach(_ref6 => {
  1658. let [staleKey] = _ref6;
  1659. let existingFetcher = state.fetchers.get(staleKey);
  1660. let revalidatingFetcher = {
  1661. state: "loading",
  1662. data: existingFetcher && existingFetcher.data,
  1663. formMethod: undefined,
  1664. formAction: undefined,
  1665. formEncType: undefined,
  1666. formData: undefined
  1667. };
  1668. state.fetchers.set(staleKey, revalidatingFetcher);
  1669. fetchControllers.set(staleKey, abortController);
  1670. });
  1671. updateState({
  1672. fetchers: new Map(state.fetchers)
  1673. });
  1674. let {
  1675. results,
  1676. loaderResults,
  1677. fetcherResults
  1678. } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);
  1679. if (abortController.signal.aborted) {
  1680. return;
  1681. }
  1682. fetchReloadIds.delete(key);
  1683. fetchControllers.delete(key);
  1684. revalidatingFetchers.forEach(_ref7 => {
  1685. let [staleKey] = _ref7;
  1686. return fetchControllers.delete(staleKey);
  1687. });
  1688. let redirect = findRedirect(results);
  1689. if (redirect) {
  1690. let redirectNavigation = getLoaderRedirect(state, redirect);
  1691. await startRedirectNavigation(redirect, redirectNavigation);
  1692. return;
  1693. } // Process and commit output from loaders
  1694. let {
  1695. loaderData,
  1696. errors
  1697. } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);
  1698. let doneFetcher = {
  1699. state: "idle",
  1700. data: actionResult.data,
  1701. formMethod: undefined,
  1702. formAction: undefined,
  1703. formEncType: undefined,
  1704. formData: undefined
  1705. };
  1706. state.fetchers.set(key, doneFetcher);
  1707. let didAbortFetchLoads = abortStaleFetchLoads(loadId); // If we are currently in a navigation loading state and this fetcher is
  1708. // more recent than the navigation, we want the newer data so abort the
  1709. // navigation and complete it with the fetcher data
  1710. if (state.navigation.state === "loading" && loadId > pendingNavigationLoadId) {
  1711. invariant(pendingAction, "Expected pending action");
  1712. pendingNavigationController && pendingNavigationController.abort();
  1713. completeNavigation(state.navigation.location, {
  1714. matches,
  1715. loaderData,
  1716. errors,
  1717. fetchers: new Map(state.fetchers)
  1718. });
  1719. } else {
  1720. // otherwise just update with the fetcher data, preserving any existing
  1721. // loaderData for loaders that did not need to reload. We have to
  1722. // manually merge here since we aren't going through completeNavigation
  1723. updateState(_extends({
  1724. errors,
  1725. loaderData: mergeLoaderData(state.loaderData, loaderData, matches)
  1726. }, didAbortFetchLoads ? {
  1727. fetchers: new Map(state.fetchers)
  1728. } : {}));
  1729. isRevalidationRequired = false;
  1730. }
  1731. } // Call the matched loader for fetcher.load(), handling redirects, errors, etc.
  1732. async function handleFetcherLoader(key, routeId, path, match, matches) {
  1733. let existingFetcher = state.fetchers.get(key); // Put this fetcher into it's loading state
  1734. let loadingFetcher = {
  1735. state: "loading",
  1736. formMethod: undefined,
  1737. formAction: undefined,
  1738. formEncType: undefined,
  1739. formData: undefined,
  1740. data: existingFetcher && existingFetcher.data
  1741. };
  1742. state.fetchers.set(key, loadingFetcher);
  1743. updateState({
  1744. fetchers: new Map(state.fetchers)
  1745. }); // Call the loader for this fetcher route match
  1746. let abortController = new AbortController();
  1747. let fetchRequest = createRequest(path, abortController.signal);
  1748. fetchControllers.set(key, abortController);
  1749. let result = await callLoaderOrAction("loader", fetchRequest, match, matches, router.basename); // Deferred isn't supported or fetcher loads, await everything and treat it
  1750. // as a normal load. resolveDeferredData will return undefined if this
  1751. // fetcher gets aborted, so we just leave result untouched and short circuit
  1752. // below if that happens
  1753. if (isDeferredResult(result)) {
  1754. result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;
  1755. } // We can delete this so long as we weren't aborted by ou our own fetcher
  1756. // re-load which would have put _new_ controller is in fetchControllers
  1757. if (fetchControllers.get(key) === abortController) {
  1758. fetchControllers.delete(key);
  1759. }
  1760. if (fetchRequest.signal.aborted) {
  1761. return;
  1762. } // If the loader threw a redirect Response, start a new REPLACE navigation
  1763. if (isRedirectResult(result)) {
  1764. let redirectNavigation = getLoaderRedirect(state, result);
  1765. await startRedirectNavigation(result, redirectNavigation);
  1766. return;
  1767. } // Process any non-redirect errors thrown
  1768. if (isErrorResult(result)) {
  1769. let boundaryMatch = findNearestBoundary(state.matches, routeId);
  1770. state.fetchers.delete(key); // TODO: In remix, this would reset to IDLE_NAVIGATION if it was a catch -
  1771. // do we need to behave any differently with our non-redirect errors?
  1772. // What if it was a non-redirect Response?
  1773. updateState({
  1774. fetchers: new Map(state.fetchers),
  1775. errors: {
  1776. [boundaryMatch.route.id]: result.error
  1777. }
  1778. });
  1779. return;
  1780. }
  1781. invariant(!isDeferredResult(result), "Unhandled fetcher deferred data"); // Put the fetcher back into an idle state
  1782. let doneFetcher = {
  1783. state: "idle",
  1784. data: result.data,
  1785. formMethod: undefined,
  1786. formAction: undefined,
  1787. formEncType: undefined,
  1788. formData: undefined
  1789. };
  1790. state.fetchers.set(key, doneFetcher);
  1791. updateState({
  1792. fetchers: new Map(state.fetchers)
  1793. });
  1794. }
  1795. /**
  1796. * Utility function to handle redirects returned from an action or loader.
  1797. * Normally, a redirect "replaces" the navigation that triggered it. So, for
  1798. * example:
  1799. *
  1800. * - user is on /a
  1801. * - user clicks a link to /b
  1802. * - loader for /b redirects to /c
  1803. *
  1804. * In a non-JS app the browser would track the in-flight navigation to /b and
  1805. * then replace it with /c when it encountered the redirect response. In
  1806. * the end it would only ever update the URL bar with /c.
  1807. *
  1808. * In client-side routing using pushState/replaceState, we aim to emulate
  1809. * this behavior and we also do not update history until the end of the
  1810. * navigation (including processed redirects). This means that we never
  1811. * actually touch history until we've processed redirects, so we just use
  1812. * the history action from the original navigation (PUSH or REPLACE).
  1813. */
  1814. async function startRedirectNavigation(redirect, navigation, replace) {
  1815. if (redirect.revalidate) {
  1816. isRevalidationRequired = true;
  1817. }
  1818. invariant(navigation.location, "Expected a location on the redirect navigation"); // There's no need to abort on redirects, since we don't detect the
  1819. // redirect until the action/loaders have settled
  1820. pendingNavigationController = null;
  1821. let redirectHistoryAction = replace === true ? Action.Replace : Action.Push;
  1822. await startNavigation(redirectHistoryAction, navigation.location, {
  1823. overrideNavigation: navigation
  1824. });
  1825. }
  1826. async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) {
  1827. // Call all navigation loaders and revalidating fetcher loaders in parallel,
  1828. // then slice off the results into separate arrays so we can handle them
  1829. // accordingly
  1830. let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction("loader", request, match, matches, router.basename)), ...fetchersToLoad.map(_ref8 => {
  1831. let [, href, match, fetchMatches] = _ref8;
  1832. return callLoaderOrAction("loader", createRequest(href, request.signal), match, fetchMatches, router.basename);
  1833. })]);
  1834. let loaderResults = results.slice(0, matchesToLoad.length);
  1835. let fetcherResults = results.slice(matchesToLoad.length);
  1836. await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, request.signal, false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(_ref9 => {
  1837. let [,, match] = _ref9;
  1838. return match;
  1839. }), fetcherResults, request.signal, true)]);
  1840. return {
  1841. results,
  1842. loaderResults,
  1843. fetcherResults
  1844. };
  1845. }
  1846. function interruptActiveLoads() {
  1847. // Every interruption triggers a revalidation
  1848. isRevalidationRequired = true; // Cancel pending route-level deferreds and mark cancelled routes for
  1849. // revalidation
  1850. cancelledDeferredRoutes.push(...cancelActiveDeferreds()); // Abort in-flight fetcher loads
  1851. fetchLoadMatches.forEach((_, key) => {
  1852. if (fetchControllers.has(key)) {
  1853. cancelledFetcherLoads.push(key);
  1854. abortFetcher(key);
  1855. }
  1856. });
  1857. }
  1858. function setFetcherError(key, routeId, error) {
  1859. let boundaryMatch = findNearestBoundary(state.matches, routeId);
  1860. deleteFetcher(key);
  1861. updateState({
  1862. errors: {
  1863. [boundaryMatch.route.id]: error
  1864. },
  1865. fetchers: new Map(state.fetchers)
  1866. });
  1867. }
  1868. function deleteFetcher(key) {
  1869. if (fetchControllers.has(key)) abortFetcher(key);
  1870. fetchLoadMatches.delete(key);
  1871. fetchReloadIds.delete(key);
  1872. fetchRedirectIds.delete(key);
  1873. state.fetchers.delete(key);
  1874. }
  1875. function abortFetcher(key) {
  1876. let controller = fetchControllers.get(key);
  1877. invariant(controller, "Expected fetch controller: " + key);
  1878. controller.abort();
  1879. fetchControllers.delete(key);
  1880. }
  1881. function markFetchersDone(keys) {
  1882. for (let key of keys) {
  1883. let fetcher = getFetcher(key);
  1884. let doneFetcher = {
  1885. state: "idle",
  1886. data: fetcher.data,
  1887. formMethod: undefined,
  1888. formAction: undefined,
  1889. formEncType: undefined,
  1890. formData: undefined
  1891. };
  1892. state.fetchers.set(key, doneFetcher);
  1893. }
  1894. }
  1895. function markFetchRedirectsDone() {
  1896. let doneKeys = [];
  1897. for (let key of fetchRedirectIds) {
  1898. let fetcher = state.fetchers.get(key);
  1899. invariant(fetcher, "Expected fetcher: " + key);
  1900. if (fetcher.state === "loading") {
  1901. fetchRedirectIds.delete(key);
  1902. doneKeys.push(key);
  1903. }
  1904. }
  1905. markFetchersDone(doneKeys);
  1906. }
  1907. function abortStaleFetchLoads(landedId) {
  1908. let yeetedKeys = [];
  1909. for (let [key, id] of fetchReloadIds) {
  1910. if (id < landedId) {
  1911. let fetcher = state.fetchers.get(key);
  1912. invariant(fetcher, "Expected fetcher: " + key);
  1913. if (fetcher.state === "loading") {
  1914. abortFetcher(key);
  1915. fetchReloadIds.delete(key);
  1916. yeetedKeys.push(key);
  1917. }
  1918. }
  1919. }
  1920. markFetchersDone(yeetedKeys);
  1921. return yeetedKeys.length > 0;
  1922. }
  1923. function cancelActiveDeferreds(predicate) {
  1924. let cancelledRouteIds = [];
  1925. activeDeferreds.forEach((dfd, routeId) => {
  1926. if (!predicate || predicate(routeId)) {
  1927. // Cancel the deferred - but do not remove from activeDeferreds here -
  1928. // we rely on the subscribers to do that so our tests can assert proper
  1929. // cleanup via _internalActiveDeferreds
  1930. dfd.cancel();
  1931. cancelledRouteIds.push(routeId);
  1932. activeDeferreds.delete(routeId);
  1933. }
  1934. });
  1935. return cancelledRouteIds;
  1936. } // Opt in to capturing and reporting scroll positions during navigations,
  1937. // used by the <ScrollRestoration> component
  1938. function enableScrollRestoration(positions, getPosition, getKey) {
  1939. savedScrollPositions = positions;
  1940. getScrollPosition = getPosition;
  1941. getScrollRestorationKey = getKey || (location => location.key); // Perform initial hydration scroll restoration, since we miss the boat on
  1942. // the initial updateState() because we've not yet rendered <ScrollRestoration/>
  1943. // and therefore have no savedScrollPositions available
  1944. if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {
  1945. initialScrollRestored = true;
  1946. let y = getSavedScrollPosition(state.location, state.matches);
  1947. if (y != null) {
  1948. updateState({
  1949. restoreScrollPosition: y
  1950. });
  1951. }
  1952. }
  1953. return () => {
  1954. savedScrollPositions = null;
  1955. getScrollPosition = null;
  1956. getScrollRestorationKey = null;
  1957. };
  1958. }
  1959. function saveScrollPosition(location, matches) {
  1960. if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {
  1961. let userMatches = matches.map(m => createUseMatchesMatch(m, state.loaderData));
  1962. let key = getScrollRestorationKey(location, userMatches) || location.key;
  1963. savedScrollPositions[key] = getScrollPosition();
  1964. }
  1965. }
  1966. function getSavedScrollPosition(location, matches) {
  1967. if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {
  1968. let userMatches = matches.map(m => createUseMatchesMatch(m, state.loaderData));
  1969. let key = getScrollRestorationKey(location, userMatches) || location.key;
  1970. let y = savedScrollPositions[key];
  1971. if (typeof y === "number") {
  1972. return y;
  1973. }
  1974. }
  1975. return null;
  1976. }
  1977. router = {
  1978. get basename() {
  1979. return init.basename;
  1980. },
  1981. get state() {
  1982. return state;
  1983. },
  1984. get routes() {
  1985. return dataRoutes;
  1986. },
  1987. initialize,
  1988. subscribe,
  1989. enableScrollRestoration,
  1990. navigate,
  1991. fetch,
  1992. revalidate,
  1993. // Passthrough to history-aware createHref used by useHref so we get proper
  1994. // hash-aware URLs in DOM paths
  1995. createHref: to => init.history.createHref(to),
  1996. getFetcher,
  1997. deleteFetcher,
  1998. dispose,
  1999. _internalFetchControllers: fetchControllers,
  2000. _internalActiveDeferreds: activeDeferreds
  2001. };
  2002. return router;
  2003. } //#endregion
  2004. ////////////////////////////////////////////////////////////////////////////////
  2005. //#region createStaticHandler
  2006. ////////////////////////////////////////////////////////////////////////////////
  2007. const validActionMethods = new Set(["POST", "PUT", "PATCH", "DELETE"]);
  2008. const validRequestMethods = new Set(["GET", "HEAD", ...validActionMethods]);
  2009. function unstable_createStaticHandler(routes) {
  2010. invariant(routes.length > 0, "You must provide a non-empty routes array to unstable_createStaticHandler");
  2011. let dataRoutes = convertRoutesToDataRoutes(routes);
  2012. /**
  2013. * The query() method is intended for document requests, in which we want to
  2014. * call an optional action and potentially multiple loaders for all nested
  2015. * routes. It returns a StaticHandlerContext object, which is very similar
  2016. * to the router state (location, loaderData, actionData, errors, etc.) and
  2017. * also adds SSR-specific information such as the statusCode and headers
  2018. * from action/loaders Responses.
  2019. *
  2020. * It _should_ never throw and should report all errors through the
  2021. * returned context.errors object, properly associating errors to their error
  2022. * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be
  2023. * used to emulate React error boundaries during SSr by performing a second
  2024. * pass only down to the boundaryId.
  2025. *
  2026. * The one exception where we do not return a StaticHandlerContext is when a
  2027. * redirect response is returned or thrown from any action/loader. We
  2028. * propagate that out and return the raw Response so the HTTP server can
  2029. * return it directly.
  2030. */
  2031. async function query(request) {
  2032. let url = new URL(request.url);
  2033. let location = createLocation("", createPath(url), null, "default");
  2034. let matches = matchRoutes(dataRoutes, location);
  2035. if (!validRequestMethods.has(request.method)) {
  2036. let {
  2037. matches: methodNotAllowedMatches,
  2038. route,
  2039. error
  2040. } = getMethodNotAllowedMatches(dataRoutes);
  2041. return {
  2042. location,
  2043. matches: methodNotAllowedMatches,
  2044. loaderData: {},
  2045. actionData: null,
  2046. errors: {
  2047. [route.id]: error
  2048. },
  2049. statusCode: error.status,
  2050. loaderHeaders: {},
  2051. actionHeaders: {}
  2052. };
  2053. } else if (!matches) {
  2054. let {
  2055. matches: notFoundMatches,
  2056. route,
  2057. error
  2058. } = getNotFoundMatches(dataRoutes);
  2059. return {
  2060. location,
  2061. matches: notFoundMatches,
  2062. loaderData: {},
  2063. actionData: null,
  2064. errors: {
  2065. [route.id]: error
  2066. },
  2067. statusCode: error.status,
  2068. loaderHeaders: {},
  2069. actionHeaders: {}
  2070. };
  2071. }
  2072. let result = await queryImpl(request, location, matches);
  2073. if (result instanceof Response) {
  2074. return result;
  2075. } // When returning StaticHandlerContext, we patch back in the location here
  2076. // since we need it for React Context. But this helps keep our submit and
  2077. // loadRouteData operating on a Request instead of a Location
  2078. return _extends({
  2079. location
  2080. }, result);
  2081. }
  2082. /**
  2083. * The queryRoute() method is intended for targeted route requests, either
  2084. * for fetch ?_data requests or resource route requests. In this case, we
  2085. * are only ever calling a single action or loader, and we are returning the
  2086. * returned value directly. In most cases, this will be a Response returned
  2087. * from the action/loader, but it may be a primitive or other value as well -
  2088. * and in such cases the calling context should handle that accordingly.
  2089. *
  2090. * We do respect the throw/return differentiation, so if an action/loader
  2091. * throws, then this method will throw the value. This is important so we
  2092. * can do proper boundary identification in Remix where a thrown Response
  2093. * must go to the Catch Boundary but a returned Response is happy-path.
  2094. *
  2095. * One thing to note is that any Router-initiated thrown Response (such as a
  2096. * 404 or 405) will have a custom X-Remix-Router-Error: "yes" header on it
  2097. * in order to differentiate from responses thrown from user actions/loaders.
  2098. */
  2099. async function queryRoute(request, routeId) {
  2100. let url = new URL(request.url);
  2101. let location = createLocation("", createPath(url), null, "default");
  2102. let matches = matchRoutes(dataRoutes, location);
  2103. if (!validRequestMethods.has(request.method)) {
  2104. throw createRouterErrorResponse(null, {
  2105. status: 405,
  2106. statusText: "Method Not Allowed"
  2107. });
  2108. } else if (!matches) {
  2109. throw createRouterErrorResponse(null, {
  2110. status: 404,
  2111. statusText: "Not Found"
  2112. });
  2113. }
  2114. let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);
  2115. if (!match) {
  2116. throw createRouterErrorResponse(null, {
  2117. status: 404,
  2118. statusText: "Not Found"
  2119. });
  2120. }
  2121. let result = await queryImpl(request, location, matches, match);
  2122. if (result instanceof Response) {
  2123. return result;
  2124. }
  2125. let error = result.errors ? Object.values(result.errors)[0] : undefined;
  2126. if (error !== undefined) {
  2127. // If we got back result.errors, that means the loader/action threw
  2128. // _something_ that wasn't a Response, but it's not guaranteed/required
  2129. // to be an `instanceof Error` either, so we have to use throw here to
  2130. // preserve the "error" state outside of queryImpl.
  2131. throw error;
  2132. } // Pick off the right state value to return
  2133. let routeData = [result.actionData, result.loaderData].find(v => v);
  2134. return Object.values(routeData || {})[0];
  2135. }
  2136. async function queryImpl(request, location, matches, routeMatch) {
  2137. invariant(request.signal, "query()/queryRoute() requests must contain an AbortController signal");
  2138. try {
  2139. if (validActionMethods.has(request.method)) {
  2140. let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), routeMatch != null);
  2141. return result;
  2142. }
  2143. let result = await loadRouteData(request, matches, routeMatch);
  2144. return result instanceof Response ? result : _extends({}, result, {
  2145. actionData: null,
  2146. actionHeaders: {}
  2147. });
  2148. } catch (e) {
  2149. // If the user threw/returned a Response in callLoaderOrAction, we throw
  2150. // it to bail out and then return or throw here based on whether the user
  2151. // returned or threw
  2152. if (isQueryRouteResponse(e)) {
  2153. if (e.type === ResultType.error && !isRedirectResponse(e.response)) {
  2154. throw e.response;
  2155. }
  2156. return e.response;
  2157. } // Redirects are always returned since they don't propagate to catch
  2158. // boundaries
  2159. if (isRedirectResponse(e)) {
  2160. return e;
  2161. }
  2162. throw e;
  2163. }
  2164. }
  2165. async function submit(request, matches, actionMatch, isRouteRequest) {
  2166. let result;
  2167. if (!actionMatch.route.action) {
  2168. if (isRouteRequest) {
  2169. throw createRouterErrorResponse(null, {
  2170. status: 405,
  2171. statusText: "Method Not Allowed"
  2172. });
  2173. }
  2174. result = getMethodNotAllowedResult(request.url);
  2175. } else {
  2176. result = await callLoaderOrAction("action", request, actionMatch, matches, undefined, // Basename not currently supported in static handlers
  2177. true, isRouteRequest);
  2178. if (request.signal.aborted) {
  2179. let method = isRouteRequest ? "queryRoute" : "query";
  2180. throw new Error(method + "() call aborted");
  2181. }
  2182. }
  2183. if (isRedirectResult(result)) {
  2184. // Uhhhh - this should never happen, we should always throw these from
  2185. // callLoaderOrAction, but the type narrowing here keeps TS happy and we
  2186. // can get back on the "throw all redirect responses" train here should
  2187. // this ever happen :/
  2188. throw new Response(null, {
  2189. status: result.status,
  2190. headers: {
  2191. Location: result.location
  2192. }
  2193. });
  2194. }
  2195. if (isDeferredResult(result)) {
  2196. throw new Error("defer() is not supported in actions");
  2197. }
  2198. if (isRouteRequest) {
  2199. // Note: This should only be non-Response values if we get here, since
  2200. // isRouteRequest should throw any Response received in callLoaderOrAction
  2201. if (isErrorResult(result)) {
  2202. let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);
  2203. return {
  2204. matches: [actionMatch],
  2205. loaderData: {},
  2206. actionData: null,
  2207. errors: {
  2208. [boundaryMatch.route.id]: result.error
  2209. },
  2210. // Note: statusCode + headers are unused here since queryRoute will
  2211. // return the raw Response or value
  2212. statusCode: 500,
  2213. loaderHeaders: {},
  2214. actionHeaders: {}
  2215. };
  2216. }
  2217. return {
  2218. matches: [actionMatch],
  2219. loaderData: {},
  2220. actionData: {
  2221. [actionMatch.route.id]: result.data
  2222. },
  2223. errors: null,
  2224. // Note: statusCode + headers are unused here since queryRoute will
  2225. // return the raw Response or value
  2226. statusCode: 200,
  2227. loaderHeaders: {},
  2228. actionHeaders: {}
  2229. };
  2230. }
  2231. if (isErrorResult(result)) {
  2232. // Store off the pending error - we use it to determine which loaders
  2233. // to call and will commit it when we complete the navigation
  2234. let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);
  2235. let context = await loadRouteData(request, matches, undefined, {
  2236. [boundaryMatch.route.id]: result.error
  2237. }); // action status codes take precedence over loader status codes
  2238. return _extends({}, context, {
  2239. statusCode: isRouteErrorResponse(result.error) ? result.error.status : 500,
  2240. actionData: null,
  2241. actionHeaders: _extends({}, result.headers ? {
  2242. [actionMatch.route.id]: result.headers
  2243. } : {})
  2244. });
  2245. }
  2246. let context = await loadRouteData(request, matches);
  2247. return _extends({}, context, result.statusCode ? {
  2248. statusCode: result.statusCode
  2249. } : {}, {
  2250. actionData: {
  2251. [actionMatch.route.id]: result.data
  2252. },
  2253. actionHeaders: _extends({}, result.headers ? {
  2254. [actionMatch.route.id]: result.headers
  2255. } : {})
  2256. });
  2257. }
  2258. async function loadRouteData(request, matches, routeMatch, pendingActionError) {
  2259. let isRouteRequest = routeMatch != null;
  2260. let requestMatches = routeMatch ? [routeMatch] : getLoaderMatchesUntilBoundary(matches, Object.keys(pendingActionError || {})[0]);
  2261. let matchesToLoad = requestMatches.filter(m => m.route.loader); // Short circuit if we have no loaders to run
  2262. if (matchesToLoad.length === 0) {
  2263. return {
  2264. matches,
  2265. loaderData: {},
  2266. errors: pendingActionError || null,
  2267. statusCode: 200,
  2268. loaderHeaders: {}
  2269. };
  2270. }
  2271. let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction("loader", request, match, matches, undefined, // Basename not currently supported in static handlers
  2272. true, isRouteRequest))]);
  2273. if (request.signal.aborted) {
  2274. let method = isRouteRequest ? "queryRoute" : "query";
  2275. throw new Error(method + "() call aborted");
  2276. } // Can't do anything with these without the Remix side of things, so just
  2277. // cancel them for now
  2278. results.forEach(result => {
  2279. if (isDeferredResult(result)) {
  2280. result.deferredData.cancel();
  2281. }
  2282. }); // Process and commit output from loaders
  2283. let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionError);
  2284. return _extends({}, context, {
  2285. matches
  2286. });
  2287. }
  2288. function createRouterErrorResponse(body, init) {
  2289. return new Response(body, _extends({}, init, {
  2290. headers: _extends({}, init.headers, {
  2291. "X-Remix-Router-Error": "yes"
  2292. })
  2293. }));
  2294. }
  2295. return {
  2296. dataRoutes,
  2297. query,
  2298. queryRoute
  2299. };
  2300. } //#endregion
  2301. ////////////////////////////////////////////////////////////////////////////////
  2302. //#region Helpers
  2303. ////////////////////////////////////////////////////////////////////////////////
  2304. /**
  2305. * Given an existing StaticHandlerContext and an error thrown at render time,
  2306. * provide an updated StaticHandlerContext suitable for a second SSR render
  2307. */
  2308. function getStaticContextFromError(routes, context, error) {
  2309. let newContext = _extends({}, context, {
  2310. statusCode: 500,
  2311. errors: {
  2312. [context._deepestRenderedBoundaryId || routes[0].id]: error
  2313. }
  2314. });
  2315. return newContext;
  2316. } // Normalize navigation options by converting formMethod=GET formData objects to
  2317. // URLSearchParams so they behave identically to links with query params
  2318. function normalizeNavigateOptions(to, opts, isFetcher) {
  2319. if (isFetcher === void 0) {
  2320. isFetcher = false;
  2321. }
  2322. let path = typeof to === "string" ? to : createPath(to); // Return location verbatim on non-submission navigations
  2323. if (!opts || !("formMethod" in opts) && !("formData" in opts)) {
  2324. return {
  2325. path
  2326. };
  2327. } // Create a Submission on non-GET navigations
  2328. if (opts.formMethod != null && opts.formMethod !== "get") {
  2329. return {
  2330. path,
  2331. submission: {
  2332. formMethod: opts.formMethod,
  2333. formAction: stripHashFromPath(path),
  2334. formEncType: opts && opts.formEncType || "application/x-www-form-urlencoded",
  2335. formData: opts.formData
  2336. }
  2337. };
  2338. } // No formData to flatten for GET submission
  2339. if (!opts.formData) {
  2340. return {
  2341. path
  2342. };
  2343. } // Flatten submission onto URLSearchParams for GET submissions
  2344. let parsedPath = parsePath(path);
  2345. try {
  2346. let searchParams = convertFormDataToSearchParams(opts.formData); // Since fetcher GET submissions only run a single loader (as opposed to
  2347. // navigation GET submissions which run all loaders), we need to preserve
  2348. // any incoming ?index params
  2349. if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {
  2350. searchParams.append("index", "");
  2351. }
  2352. parsedPath.search = "?" + searchParams;
  2353. } catch (e) {
  2354. return {
  2355. path,
  2356. error: new ErrorResponse(400, "Bad Request", "Cannot submit binary form data using GET")
  2357. };
  2358. }
  2359. return {
  2360. path: createPath(parsedPath)
  2361. };
  2362. }
  2363. function getLoaderRedirect(state, redirect) {
  2364. let {
  2365. formMethod,
  2366. formAction,
  2367. formEncType,
  2368. formData
  2369. } = state.navigation;
  2370. let navigation = {
  2371. state: "loading",
  2372. location: createLocation(state.location, redirect.location),
  2373. formMethod: formMethod || undefined,
  2374. formAction: formAction || undefined,
  2375. formEncType: formEncType || undefined,
  2376. formData: formData || undefined
  2377. };
  2378. return navigation;
  2379. } // Filter out all routes below any caught error as they aren't going to
  2380. // render so we don't need to load them
  2381. function getLoaderMatchesUntilBoundary(matches, boundaryId) {
  2382. let boundaryMatches = matches;
  2383. if (boundaryId) {
  2384. let index = matches.findIndex(m => m.route.id === boundaryId);
  2385. if (index >= 0) {
  2386. boundaryMatches = matches.slice(0, index);
  2387. }
  2388. }
  2389. return boundaryMatches;
  2390. }
  2391. function getMatchesToLoad(state, matches, submission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, pendingActionData, pendingError, fetchLoadMatches) {
  2392. let actionResult = pendingError ? Object.values(pendingError)[0] : pendingActionData ? Object.values(pendingActionData)[0] : null; // Pick navigation matches that are net-new or qualify for revalidation
  2393. let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;
  2394. let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);
  2395. let navigationMatches = boundaryMatches.filter((match, index) => match.route.loader != null && (isNewLoader(state.loaderData, state.matches[index], match) || // If this route had a pending deferred cancelled it must be revalidated
  2396. cancelledDeferredRoutes.some(id => id === match.route.id) || shouldRevalidateLoader(state.location, state.matches[index], submission, location, match, isRevalidationRequired, actionResult))); // Pick fetcher.loads that need to be revalidated
  2397. let revalidatingFetchers = [];
  2398. fetchLoadMatches && fetchLoadMatches.forEach((_ref10, key) => {
  2399. let [href, match, fetchMatches] = _ref10;
  2400. // This fetcher was cancelled from a prior action submission - force reload
  2401. if (cancelledFetcherLoads.includes(key)) {
  2402. revalidatingFetchers.push([key, href, match, fetchMatches]);
  2403. } else if (isRevalidationRequired) {
  2404. let shouldRevalidate = shouldRevalidateLoader(href, match, submission, href, match, isRevalidationRequired, actionResult);
  2405. if (shouldRevalidate) {
  2406. revalidatingFetchers.push([key, href, match, fetchMatches]);
  2407. }
  2408. }
  2409. });
  2410. return [navigationMatches, revalidatingFetchers];
  2411. }
  2412. function isNewLoader(currentLoaderData, currentMatch, match) {
  2413. let isNew = // [a] -> [a, b]
  2414. !currentMatch || // [a, b] -> [a, c]
  2415. match.route.id !== currentMatch.route.id; // Handle the case that we don't have data for a re-used route, potentially
  2416. // from a prior error or from a cancelled pending deferred
  2417. let isMissingData = currentLoaderData[match.route.id] === undefined; // Always load if this is a net-new route or we don't yet have data
  2418. return isNew || isMissingData;
  2419. }
  2420. function isNewRouteInstance(currentMatch, match) {
  2421. let currentPath = currentMatch.route.path;
  2422. return (// param change for this match, /users/123 -> /users/456
  2423. currentMatch.pathname !== match.pathname || // splat param changed, which is not present in match.path
  2424. // e.g. /files/images/avatar.jpg -> files/finances.xls
  2425. currentPath && currentPath.endsWith("*") && currentMatch.params["*"] !== match.params["*"]
  2426. );
  2427. }
  2428. function shouldRevalidateLoader(currentLocation, currentMatch, submission, location, match, isRevalidationRequired, actionResult) {
  2429. let currentUrl = createURL(currentLocation);
  2430. let currentParams = currentMatch.params;
  2431. let nextUrl = createURL(location);
  2432. let nextParams = match.params; // This is the default implementation as to when we revalidate. If the route
  2433. // provides it's own implementation, then we give them full control but
  2434. // provide this value so they can leverage it if needed after they check
  2435. // their own specific use cases
  2436. // Note that fetchers always provide the same current/next locations so the
  2437. // URL-based checks here don't apply to fetcher shouldRevalidate calls
  2438. let defaultShouldRevalidate = isNewRouteInstance(currentMatch, match) || // Clicked the same link, resubmitted a GET form
  2439. currentUrl.toString() === nextUrl.toString() || // Search params affect all loaders
  2440. currentUrl.search !== nextUrl.search || // Forced revalidation due to submission, useRevalidate, or X-Remix-Revalidate
  2441. isRevalidationRequired;
  2442. if (match.route.shouldRevalidate) {
  2443. let routeChoice = match.route.shouldRevalidate(_extends({
  2444. currentUrl,
  2445. currentParams,
  2446. nextUrl,
  2447. nextParams
  2448. }, submission, {
  2449. actionResult,
  2450. defaultShouldRevalidate
  2451. }));
  2452. if (typeof routeChoice === "boolean") {
  2453. return routeChoice;
  2454. }
  2455. }
  2456. return defaultShouldRevalidate;
  2457. }
  2458. async function callLoaderOrAction(type, request, match, matches, basename, isStaticRequest, isRouteRequest) {
  2459. if (isStaticRequest === void 0) {
  2460. isStaticRequest = false;
  2461. }
  2462. if (isRouteRequest === void 0) {
  2463. isRouteRequest = false;
  2464. }
  2465. let resultType;
  2466. let result; // Setup a promise we can race against so that abort signals short circuit
  2467. let reject;
  2468. let abortPromise = new Promise((_, r) => reject = r);
  2469. let onReject = () => reject();
  2470. request.signal.addEventListener("abort", onReject);
  2471. try {
  2472. let handler = match.route[type];
  2473. invariant(handler, "Could not find the " + type + " to run on the \"" + match.route.id + "\" route");
  2474. result = await Promise.race([handler({
  2475. request,
  2476. params: match.params
  2477. }), abortPromise]);
  2478. } catch (e) {
  2479. resultType = ResultType.error;
  2480. result = e;
  2481. } finally {
  2482. request.signal.removeEventListener("abort", onReject);
  2483. }
  2484. if (result instanceof Response) {
  2485. let status = result.status; // Process redirects
  2486. if (status >= 300 && status <= 399) {
  2487. let location = result.headers.get("Location");
  2488. invariant(location, "Redirects returned/thrown from loaders/actions must have a Location header"); // Support relative routing in redirects
  2489. let activeMatches = matches.slice(0, matches.indexOf(match) + 1);
  2490. let routePathnames = getPathContributingMatches(activeMatches).map(match => match.pathnameBase);
  2491. let requestPath = createURL(request.url).pathname;
  2492. let resolvedLocation = resolveTo(location, routePathnames, requestPath);
  2493. invariant(createPath(resolvedLocation), "Unable to resolve redirect location: " + result.headers.get("Location")); // Prepend the basename to the redirect location if we have one
  2494. if (basename) {
  2495. let path = resolvedLocation.pathname;
  2496. resolvedLocation.pathname = path === "/" ? basename : joinPaths([basename, path]);
  2497. }
  2498. location = createPath(resolvedLocation); // Don't process redirects in the router during static requests requests.
  2499. // Instead, throw the Response and let the server handle it with an HTTP
  2500. // redirect. We also update the Location header in place in this flow so
  2501. // basename and relative routing is taken into account
  2502. if (isStaticRequest) {
  2503. result.headers.set("Location", location);
  2504. throw result;
  2505. }
  2506. return {
  2507. type: ResultType.redirect,
  2508. status,
  2509. location,
  2510. revalidate: result.headers.get("X-Remix-Revalidate") !== null
  2511. };
  2512. } // For SSR single-route requests, we want to hand Responses back directly
  2513. // without unwrapping. We do this with the QueryRouteResponse wrapper
  2514. // interface so we can know whether it was returned or thrown
  2515. if (isRouteRequest) {
  2516. // eslint-disable-next-line no-throw-literal
  2517. throw {
  2518. type: resultType || ResultType.data,
  2519. response: result
  2520. };
  2521. }
  2522. let data;
  2523. let contentType = result.headers.get("Content-Type");
  2524. if (contentType && contentType.startsWith("application/json")) {
  2525. data = await result.json();
  2526. } else {
  2527. data = await result.text();
  2528. }
  2529. if (resultType === ResultType.error) {
  2530. return {
  2531. type: resultType,
  2532. error: new ErrorResponse(status, result.statusText, data),
  2533. headers: result.headers
  2534. };
  2535. }
  2536. return {
  2537. type: ResultType.data,
  2538. data,
  2539. statusCode: result.status,
  2540. headers: result.headers
  2541. };
  2542. }
  2543. if (resultType === ResultType.error) {
  2544. return {
  2545. type: resultType,
  2546. error: result
  2547. };
  2548. }
  2549. if (result instanceof DeferredData) {
  2550. return {
  2551. type: ResultType.deferred,
  2552. deferredData: result
  2553. };
  2554. }
  2555. return {
  2556. type: ResultType.data,
  2557. data: result
  2558. };
  2559. }
  2560. function createRequest(location, signal, submission) {
  2561. let url = createURL(stripHashFromPath(location)).toString();
  2562. let init = {
  2563. signal
  2564. };
  2565. if (submission) {
  2566. let {
  2567. formMethod,
  2568. formEncType,
  2569. formData
  2570. } = submission;
  2571. init.method = formMethod.toUpperCase();
  2572. init.body = formEncType === "application/x-www-form-urlencoded" ? convertFormDataToSearchParams(formData) : formData;
  2573. } // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)
  2574. return new Request(url, init);
  2575. }
  2576. function convertFormDataToSearchParams(formData) {
  2577. let searchParams = new URLSearchParams();
  2578. for (let [key, value] of formData.entries()) {
  2579. invariant(typeof value === "string", 'File inputs are not supported with encType "application/x-www-form-urlencoded", ' + 'please use "multipart/form-data" instead.');
  2580. searchParams.append(key, value);
  2581. }
  2582. return searchParams;
  2583. }
  2584. function processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds) {
  2585. // Fill in loaderData/errors from our loaders
  2586. let loaderData = {};
  2587. let errors = null;
  2588. let statusCode;
  2589. let foundError = false;
  2590. let loaderHeaders = {}; // Process loader results into state.loaderData/state.errors
  2591. results.forEach((result, index) => {
  2592. let id = matchesToLoad[index].route.id;
  2593. invariant(!isRedirectResult(result), "Cannot handle redirect results in processLoaderData");
  2594. if (isErrorResult(result)) {
  2595. // Look upwards from the matched route for the closest ancestor
  2596. // error boundary, defaulting to the root match
  2597. let boundaryMatch = findNearestBoundary(matches, id);
  2598. let error = result.error; // If we have a pending action error, we report it at the highest-route
  2599. // that throws a loader error, and then clear it out to indicate that
  2600. // it was consumed
  2601. if (pendingError) {
  2602. error = Object.values(pendingError)[0];
  2603. pendingError = undefined;
  2604. }
  2605. errors = Object.assign(errors || {}, {
  2606. [boundaryMatch.route.id]: error
  2607. }); // Once we find our first (highest) error, we set the status code and
  2608. // prevent deeper status codes from overriding
  2609. if (!foundError) {
  2610. foundError = true;
  2611. statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;
  2612. }
  2613. if (result.headers) {
  2614. loaderHeaders[id] = result.headers;
  2615. }
  2616. } else if (isDeferredResult(result)) {
  2617. activeDeferreds && activeDeferreds.set(id, result.deferredData);
  2618. loaderData[id] = result.deferredData.data; // TODO: Add statusCode/headers once we wire up streaming in Remix
  2619. } else {
  2620. loaderData[id] = result.data; // Error status codes always override success status codes, but if all
  2621. // loaders are successful we take the deepest status code.
  2622. if (result.statusCode != null && result.statusCode !== 200 && !foundError) {
  2623. statusCode = result.statusCode;
  2624. }
  2625. if (result.headers) {
  2626. loaderHeaders[id] = result.headers;
  2627. }
  2628. }
  2629. }); // If we didn't consume the pending action error (i.e., all loaders
  2630. // resolved), then consume it here
  2631. if (pendingError) {
  2632. errors = pendingError;
  2633. }
  2634. return {
  2635. loaderData,
  2636. errors,
  2637. statusCode: statusCode || 200,
  2638. loaderHeaders
  2639. };
  2640. }
  2641. function processLoaderData(state, matches, matchesToLoad, results, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds) {
  2642. let {
  2643. loaderData,
  2644. errors
  2645. } = processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds); // Process results from our revalidating fetchers
  2646. for (let index = 0; index < revalidatingFetchers.length; index++) {
  2647. let [key,, match] = revalidatingFetchers[index];
  2648. invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, "Did not find corresponding fetcher result");
  2649. let result = fetcherResults[index]; // Process fetcher non-redirect errors
  2650. if (isErrorResult(result)) {
  2651. let boundaryMatch = findNearestBoundary(state.matches, match.route.id);
  2652. if (!(errors && errors[boundaryMatch.route.id])) {
  2653. errors = _extends({}, errors, {
  2654. [boundaryMatch.route.id]: result.error
  2655. });
  2656. }
  2657. state.fetchers.delete(key);
  2658. } else if (isRedirectResult(result)) {
  2659. // Should never get here, redirects should get processed above, but we
  2660. // keep this to type narrow to a success result in the else
  2661. throw new Error("Unhandled fetcher revalidation redirect");
  2662. } else if (isDeferredResult(result)) {
  2663. // Should never get here, deferred data should be awaited for fetchers
  2664. // in resolveDeferredResults
  2665. throw new Error("Unhandled fetcher deferred data");
  2666. } else {
  2667. let doneFetcher = {
  2668. state: "idle",
  2669. data: result.data,
  2670. formMethod: undefined,
  2671. formAction: undefined,
  2672. formEncType: undefined,
  2673. formData: undefined
  2674. };
  2675. state.fetchers.set(key, doneFetcher);
  2676. }
  2677. }
  2678. return {
  2679. loaderData,
  2680. errors
  2681. };
  2682. }
  2683. function mergeLoaderData(loaderData, newLoaderData, matches) {
  2684. let mergedLoaderData = _extends({}, newLoaderData);
  2685. matches.forEach(match => {
  2686. let id = match.route.id;
  2687. if (newLoaderData[id] === undefined && loaderData[id] !== undefined) {
  2688. mergedLoaderData[id] = loaderData[id];
  2689. }
  2690. });
  2691. return mergedLoaderData;
  2692. } // Find the nearest error boundary, looking upwards from the leaf route (or the
  2693. // route specified by routeId) for the closest ancestor error boundary,
  2694. // defaulting to the root match
  2695. function findNearestBoundary(matches, routeId) {
  2696. let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];
  2697. return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];
  2698. }
  2699. function getShortCircuitMatches(routes, status, statusText) {
  2700. // Prefer a root layout route if present, otherwise shim in a route object
  2701. let route = routes.find(r => r.index || !r.path || r.path === "/") || {
  2702. id: "__shim-" + status + "-route__"
  2703. };
  2704. return {
  2705. matches: [{
  2706. params: {},
  2707. pathname: "",
  2708. pathnameBase: "",
  2709. route
  2710. }],
  2711. route,
  2712. error: new ErrorResponse(status, statusText, null)
  2713. };
  2714. }
  2715. function getNotFoundMatches(routes) {
  2716. return getShortCircuitMatches(routes, 404, "Not Found");
  2717. }
  2718. function getMethodNotAllowedMatches(routes) {
  2719. return getShortCircuitMatches(routes, 405, "Method Not Allowed");
  2720. }
  2721. function getMethodNotAllowedResult(path) {
  2722. let href = typeof path === "string" ? path : createPath(path);
  2723. console.warn("You're trying to submit to a route that does not have an action. To " + "fix this, please add an `action` function to the route for " + ("[" + href + "]"));
  2724. return {
  2725. type: ResultType.error,
  2726. error: new ErrorResponse(405, "Method Not Allowed", "")
  2727. };
  2728. } // Find any returned redirect errors, starting from the lowest match
  2729. function findRedirect(results) {
  2730. for (let i = results.length - 1; i >= 0; i--) {
  2731. let result = results[i];
  2732. if (isRedirectResult(result)) {
  2733. return result;
  2734. }
  2735. }
  2736. }
  2737. function stripHashFromPath(path) {
  2738. let parsedPath = typeof path === "string" ? parsePath(path) : path;
  2739. return createPath(_extends({}, parsedPath, {
  2740. hash: ""
  2741. }));
  2742. }
  2743. function isHashChangeOnly(a, b) {
  2744. return a.pathname === b.pathname && a.search === b.search && a.hash !== b.hash;
  2745. }
  2746. function isDeferredResult(result) {
  2747. return result.type === ResultType.deferred;
  2748. }
  2749. function isErrorResult(result) {
  2750. return result.type === ResultType.error;
  2751. }
  2752. function isRedirectResult(result) {
  2753. return (result && result.type) === ResultType.redirect;
  2754. }
  2755. function isRedirectResponse(result) {
  2756. if (!(result instanceof Response)) {
  2757. return false;
  2758. }
  2759. let status = result.status;
  2760. let location = result.headers.get("Location");
  2761. return status >= 300 && status <= 399 && location != null;
  2762. }
  2763. function isQueryRouteResponse(obj) {
  2764. return obj && obj.response instanceof Response && (obj.type === ResultType.data || ResultType.error);
  2765. }
  2766. async function resolveDeferredResults(currentMatches, matchesToLoad, results, signal, isFetcher, currentLoaderData) {
  2767. for (let index = 0; index < results.length; index++) {
  2768. let result = results[index];
  2769. let match = matchesToLoad[index];
  2770. let currentMatch = currentMatches.find(m => m.route.id === match.route.id);
  2771. let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;
  2772. if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {
  2773. // Note: we do not have to touch activeDeferreds here since we race them
  2774. // against the signal in resolveDeferredData and they'll get aborted
  2775. // there if needed
  2776. await resolveDeferredData(result, signal, isFetcher).then(result => {
  2777. if (result) {
  2778. results[index] = result || results[index];
  2779. }
  2780. });
  2781. }
  2782. }
  2783. }
  2784. async function resolveDeferredData(result, signal, unwrap) {
  2785. if (unwrap === void 0) {
  2786. unwrap = false;
  2787. }
  2788. let aborted = await result.deferredData.resolveData(signal);
  2789. if (aborted) {
  2790. return;
  2791. }
  2792. if (unwrap) {
  2793. try {
  2794. return {
  2795. type: ResultType.data,
  2796. data: result.deferredData.unwrappedData
  2797. };
  2798. } catch (e) {
  2799. // Handle any TrackedPromise._error values encountered while unwrapping
  2800. return {
  2801. type: ResultType.error,
  2802. error: e
  2803. };
  2804. }
  2805. }
  2806. return {
  2807. type: ResultType.data,
  2808. data: result.deferredData.data
  2809. };
  2810. }
  2811. function hasNakedIndexQuery(search) {
  2812. return new URLSearchParams(search).getAll("index").some(v => v === "");
  2813. } // Note: This should match the format exported by useMatches, so if you change
  2814. // this please also change that :) Eventually we'll DRY this up
  2815. function createUseMatchesMatch(match, loaderData) {
  2816. let {
  2817. route,
  2818. pathname,
  2819. params
  2820. } = match;
  2821. return {
  2822. id: route.id,
  2823. pathname,
  2824. params,
  2825. data: loaderData[route.id],
  2826. handle: route.handle
  2827. };
  2828. }
  2829. function getTargetMatch(matches, location) {
  2830. let search = typeof location === "string" ? parsePath(location).search : location.search;
  2831. if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || "")) {
  2832. // Return the leaf index route when index is present
  2833. return matches[matches.length - 1];
  2834. } // Otherwise grab the deepest "path contributing" match (ignoring index and
  2835. // pathless layout routes)
  2836. let pathMatches = getPathContributingMatches(matches);
  2837. return pathMatches[pathMatches.length - 1];
  2838. } //#endregion
  2839. //# sourceMappingURL=router.js.map
  2840. /***/ }),
  2841. /***/ "./node_modules/autosize/dist/autosize.js":
  2842. /*!************************************************!*\
  2843. !*** ./node_modules/autosize/dist/autosize.js ***!
  2844. \************************************************/
  2845. /***/ (function(module, exports) {
  2846. var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  2847. autosize 4.0.4
  2848. license: MIT
  2849. http://www.jacklmoore.com/autosize
  2850. */
  2851. (function (global, factory) {
  2852. if (true) {
  2853. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  2854. __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  2855. (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  2856. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  2857. } else { var mod; }
  2858. })(this, function (module, exports) {
  2859. 'use strict';
  2860. var map = typeof Map === "function" ? new Map() : function () {
  2861. var keys = [];
  2862. var values = [];
  2863. return {
  2864. has: function has(key) {
  2865. return keys.indexOf(key) > -1;
  2866. },
  2867. get: function get(key) {
  2868. return values[keys.indexOf(key)];
  2869. },
  2870. set: function set(key, value) {
  2871. if (keys.indexOf(key) === -1) {
  2872. keys.push(key);
  2873. values.push(value);
  2874. }
  2875. },
  2876. delete: function _delete(key) {
  2877. var index = keys.indexOf(key);
  2878. if (index > -1) {
  2879. keys.splice(index, 1);
  2880. values.splice(index, 1);
  2881. }
  2882. }
  2883. };
  2884. }();
  2885. var createEvent = function createEvent(name) {
  2886. return new Event(name, { bubbles: true });
  2887. };
  2888. try {
  2889. new Event('test');
  2890. } catch (e) {
  2891. // IE does not support `new Event()`
  2892. createEvent = function createEvent(name) {
  2893. var evt = document.createEvent('Event');
  2894. evt.initEvent(name, true, false);
  2895. return evt;
  2896. };
  2897. }
  2898. function assign(ta) {
  2899. if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
  2900. var heightOffset = null;
  2901. var clientWidth = null;
  2902. var cachedHeight = null;
  2903. function init() {
  2904. var style = window.getComputedStyle(ta, null);
  2905. if (style.resize === 'vertical') {
  2906. ta.style.resize = 'none';
  2907. } else if (style.resize === 'both') {
  2908. ta.style.resize = 'horizontal';
  2909. }
  2910. if (style.boxSizing === 'content-box') {
  2911. heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
  2912. } else {
  2913. heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
  2914. }
  2915. // Fix when a textarea is not on document body and heightOffset is Not a Number
  2916. if (isNaN(heightOffset)) {
  2917. heightOffset = 0;
  2918. }
  2919. update();
  2920. }
  2921. function changeOverflow(value) {
  2922. {
  2923. // Chrome/Safari-specific fix:
  2924. // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
  2925. // made available by removing the scrollbar. The following forces the necessary text reflow.
  2926. var width = ta.style.width;
  2927. ta.style.width = '0px';
  2928. // Force reflow:
  2929. /* jshint ignore:start */
  2930. ta.offsetWidth;
  2931. /* jshint ignore:end */
  2932. ta.style.width = width;
  2933. }
  2934. ta.style.overflowY = value;
  2935. }
  2936. function getParentOverflows(el) {
  2937. var arr = [];
  2938. while (el && el.parentNode && el.parentNode instanceof Element) {
  2939. if (el.parentNode.scrollTop) {
  2940. arr.push({
  2941. node: el.parentNode,
  2942. scrollTop: el.parentNode.scrollTop
  2943. });
  2944. }
  2945. el = el.parentNode;
  2946. }
  2947. return arr;
  2948. }
  2949. function resize() {
  2950. if (ta.scrollHeight === 0) {
  2951. // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
  2952. return;
  2953. }
  2954. var overflows = getParentOverflows(ta);
  2955. var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
  2956. ta.style.height = '';
  2957. ta.style.height = ta.scrollHeight + heightOffset + 'px';
  2958. // used to check if an update is actually necessary on window.resize
  2959. clientWidth = ta.clientWidth;
  2960. // prevents scroll-position jumping
  2961. overflows.forEach(function (el) {
  2962. el.node.scrollTop = el.scrollTop;
  2963. });
  2964. if (docTop) {
  2965. document.documentElement.scrollTop = docTop;
  2966. }
  2967. }
  2968. function update() {
  2969. resize();
  2970. var styleHeight = Math.round(parseFloat(ta.style.height));
  2971. var computed = window.getComputedStyle(ta, null);
  2972. // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
  2973. var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
  2974. // The actual height not matching the style height (set via the resize method) indicates that
  2975. // the max-height has been exceeded, in which case the overflow should be allowed.
  2976. if (actualHeight < styleHeight) {
  2977. if (computed.overflowY === 'hidden') {
  2978. changeOverflow('scroll');
  2979. resize();
  2980. actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
  2981. }
  2982. } else {
  2983. // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
  2984. if (computed.overflowY !== 'hidden') {
  2985. changeOverflow('hidden');
  2986. resize();
  2987. actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
  2988. }
  2989. }
  2990. if (cachedHeight !== actualHeight) {
  2991. cachedHeight = actualHeight;
  2992. var evt = createEvent('autosize:resized');
  2993. try {
  2994. ta.dispatchEvent(evt);
  2995. } catch (err) {
  2996. // Firefox will throw an error on dispatchEvent for a detached element
  2997. // https://bugzilla.mozilla.org/show_bug.cgi?id=889376
  2998. }
  2999. }
  3000. }
  3001. var pageResize = function pageResize() {
  3002. if (ta.clientWidth !== clientWidth) {
  3003. update();
  3004. }
  3005. };
  3006. var destroy = function (style) {
  3007. window.removeEventListener('resize', pageResize, false);
  3008. ta.removeEventListener('input', update, false);
  3009. ta.removeEventListener('keyup', update, false);
  3010. ta.removeEventListener('autosize:destroy', destroy, false);
  3011. ta.removeEventListener('autosize:update', update, false);
  3012. Object.keys(style).forEach(function (key) {
  3013. ta.style[key] = style[key];
  3014. });
  3015. map.delete(ta);
  3016. }.bind(ta, {
  3017. height: ta.style.height,
  3018. resize: ta.style.resize,
  3019. overflowY: ta.style.overflowY,
  3020. overflowX: ta.style.overflowX,
  3021. wordWrap: ta.style.wordWrap
  3022. });
  3023. ta.addEventListener('autosize:destroy', destroy, false);
  3024. // IE9 does not fire onpropertychange or oninput for deletions,
  3025. // so binding to onkeyup to catch most of those events.
  3026. // There is no way that I know of to detect something like 'cut' in IE9.
  3027. if ('onpropertychange' in ta && 'oninput' in ta) {
  3028. ta.addEventListener('keyup', update, false);
  3029. }
  3030. window.addEventListener('resize', pageResize, false);
  3031. ta.addEventListener('input', update, false);
  3032. ta.addEventListener('autosize:update', update, false);
  3033. ta.style.overflowX = 'hidden';
  3034. ta.style.wordWrap = 'break-word';
  3035. map.set(ta, {
  3036. destroy: destroy,
  3037. update: update
  3038. });
  3039. init();
  3040. }
  3041. function destroy(ta) {
  3042. var methods = map.get(ta);
  3043. if (methods) {
  3044. methods.destroy();
  3045. }
  3046. }
  3047. function update(ta) {
  3048. var methods = map.get(ta);
  3049. if (methods) {
  3050. methods.update();
  3051. }
  3052. }
  3053. var autosize = null;
  3054. // Do nothing in Node.js environment and IE8 (or lower)
  3055. if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
  3056. autosize = function autosize(el) {
  3057. return el;
  3058. };
  3059. autosize.destroy = function (el) {
  3060. return el;
  3061. };
  3062. autosize.update = function (el) {
  3063. return el;
  3064. };
  3065. } else {
  3066. autosize = function autosize(el, options) {
  3067. if (el) {
  3068. Array.prototype.forEach.call(el.length ? el : [el], function (x) {
  3069. return assign(x, options);
  3070. });
  3071. }
  3072. return el;
  3073. };
  3074. autosize.destroy = function (el) {
  3075. if (el) {
  3076. Array.prototype.forEach.call(el.length ? el : [el], destroy);
  3077. }
  3078. return el;
  3079. };
  3080. autosize.update = function (el) {
  3081. if (el) {
  3082. Array.prototype.forEach.call(el.length ? el : [el], update);
  3083. }
  3084. return el;
  3085. };
  3086. }
  3087. exports.default = autosize;
  3088. module.exports = exports['default'];
  3089. });
  3090. /***/ }),
  3091. /***/ "./node_modules/computed-style/dist/computedStyle.commonjs.js":
  3092. /*!********************************************************************!*\
  3093. !*** ./node_modules/computed-style/dist/computedStyle.commonjs.js ***!
  3094. \********************************************************************/
  3095. /***/ ((module) => {
  3096. // DEV: We don't use var but favor parameters since these play nicer with minification
  3097. function computedStyle(el, prop, getComputedStyle, style) {
  3098. getComputedStyle = window.getComputedStyle;
  3099. style =
  3100. // If we have getComputedStyle
  3101. getComputedStyle ?
  3102. // Query it
  3103. // TODO: From CSS-Query notes, we might need (node, null) for FF
  3104. getComputedStyle(el) :
  3105. // Otherwise, we are in IE and use currentStyle
  3106. el.currentStyle;
  3107. if (style) {
  3108. return style
  3109. [
  3110. // Switch to camelCase for CSSOM
  3111. // DEV: Grabbed from jQuery
  3112. // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
  3113. // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
  3114. prop.replace(/-(\w)/gi, function (word, letter) {
  3115. return letter.toUpperCase();
  3116. })
  3117. ];
  3118. }
  3119. }
  3120. module.exports = computedStyle;
  3121. /***/ }),
  3122. /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss":
  3123. /*!***************************************************************************************************************************************!*\
  3124. !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss ***!
  3125. \***************************************************************************************************************************************/
  3126. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  3127. "use strict";
  3128. __webpack_require__.r(__webpack_exports__);
  3129. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3130. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3131. /* harmony export */ });
  3132. /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
  3133. /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
  3134. /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
  3135. /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
  3136. /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js");
  3137. /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);
  3138. // Imports
  3139. var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.eot */ "./src/sass/icons/assets/SweetIcons-Regular.eot"), __webpack_require__.b);
  3140. var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.woff2 */ "./src/sass/icons/assets/SweetIcons-Regular.woff2"), __webpack_require__.b);
  3141. var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.woff */ "./src/sass/icons/assets/SweetIcons-Regular.woff"), __webpack_require__.b);
  3142. var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.ttf */ "./src/sass/icons/assets/SweetIcons-Regular.ttf"), __webpack_require__.b);
  3143. var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
  3144. ___CSS_LOADER_EXPORT___.push([module.id, "@import url(https://fonts.googleapis.com/css?family=Ubuntu);"]);
  3145. var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
  3146. var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);
  3147. var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___);
  3148. var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___);
  3149. // Module
  3150. ___CSS_LOADER_EXPORT___.push([module.id, "@charset \"UTF-8\";\n@font-face {\n font-family: sweeticons;\n font-style: normal;\n font-weight: 400;\n src: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\n src: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") format(\"woff2\"), url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") format(\"woff\"), url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") format(\"truetype\");\n}\n.s-icon,\n.s-icons,\n.sweet-icons,\n.sweet-icon {\n font-family: sweeticons, sans-serif;\n font-weight: normal;\n font-style: normal;\n font-size: 28px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-feature-settings: \"liga\";\n -moz-font-feature-settings: \"liga=1\";\n -moz-font-feature-settings: \"liga\";\n font-feature-settings: \"liga\";\n text-align: center;\n}\n\n.webo {\n background-color: #0062d6 !important;\n}\n\n.webo-text {\n color: #0062d6 !important;\n}\n\n.webo-waves .waves-ripple {\n background-color: #0062d6 !important;\n}\n\n.webo.second {\n background-color: #0077FA !important;\n}\n\n.webo-text.text-second {\n color: #0077FA !important;\n}\n\n.webo-waves.waves-second .waves-ripple {\n background-color: #0077FA !important;\n}\n\n.webo.third {\n background-color: #09bddd !important;\n}\n\n.webo-text.text-third {\n color: #09bddd !important;\n}\n\n.webo-waves.waves-third .waves-ripple {\n background-color: #09bddd !important;\n}\n\n.webo.fourth {\n background-color: #cbe7fe !important;\n}\n\n.webo-text.text-fourth {\n color: #cbe7fe !important;\n}\n\n.webo-waves.waves-fourth .waves-ripple {\n background-color: #cbe7fe !important;\n}\n\n.webo.lighten-5 {\n background-color: #bbdefb !important;\n}\n\n.webo-text.text-lighten-5 {\n color: #bbdefb !important;\n}\n\n.webo-waves.waves-lighten-5 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.webo.lighten-4 {\n background-color: #42a5f5 !important;\n}\n\n.webo-text.text-lighten-4 {\n color: #42a5f5 !important;\n}\n\n.webo-waves.waves-lighten-4 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.webo.lighten-3 {\n background-color: #7986cb !important;\n}\n\n.webo-text.text-lighten-3 {\n color: #7986cb !important;\n}\n\n.webo-waves.waves-lighten-3 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.webo.lighten-2 {\n background-color: #512da8 !important;\n}\n\n.webo-text.text-lighten-2 {\n color: #512da8 !important;\n}\n\n.webo-waves.waves-lighten-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.webo.lighten-1 {\n background-color: #283593 !important;\n}\n\n.webo-text.text-lighten-1 {\n color: #283593 !important;\n}\n\n.webo-waves.waves-lighten-1 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.webo.darken-1 {\n background-color: #d0181e !important;\n}\n\n.webo-text.text-darken-1 {\n color: #d0181e !important;\n}\n\n.webo-waves.waves-darken-1 .waves-ripple {\n background-color: #d0181e !important;\n}\n\n.webo.darken-2 {\n background-color: #b9151b !important;\n}\n\n.webo-text.text-darken-2 {\n color: #b9151b !important;\n}\n\n.webo-waves.waves-darken-2 .waves-ripple {\n background-color: #b9151b !important;\n}\n\n.webo.darken-3 {\n background-color: #a21318 !important;\n}\n\n.webo-text.text-darken-3 {\n color: #a21318 !important;\n}\n\n.webo-waves.waves-darken-3 .waves-ripple {\n background-color: #a21318 !important;\n}\n\n.webo.b- {\n background-color: #49ce5f !important;\n}\n\n.webo-text.text-b- {\n color: #49ce5f !important;\n}\n\n.webo-waves.waves-b- .waves-ripple {\n background-color: #49ce5f !important;\n}\n\n.webo.darken-4 {\n background-color: #8b1014 !important;\n}\n\n.webo-text.text-darken-4 {\n color: #8b1014 !important;\n}\n\n.webo-waves.waves-darken-4 .waves-ripple {\n background-color: #8b1014 !important;\n}\n\n.red {\n background-color: #f44336 !important;\n}\n\n.red-text {\n color: #f44336 !important;\n}\n\n.red-waves .waves-ripple {\n background-color: #f44336 !important;\n}\n\n.red.lighten-5 {\n background-color: #ffebee !important;\n}\n\n.red-text.text-lighten-5 {\n color: #ffebee !important;\n}\n\n.red-waves.waves-lighten-5 .waves-ripple {\n background-color: #ffebee !important;\n}\n\n.red.lighten-4 {\n background-color: #ffcdd2 !important;\n}\n\n.red-text.text-lighten-4 {\n color: #ffcdd2 !important;\n}\n\n.red-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffcdd2 !important;\n}\n\n.red.lighten-3 {\n background-color: #ef9a9a !important;\n}\n\n.red-text.text-lighten-3 {\n color: #ef9a9a !important;\n}\n\n.red-waves.waves-lighten-3 .waves-ripple {\n background-color: #ef9a9a !important;\n}\n\n.red.lighten-2 {\n background-color: #e57373 !important;\n}\n\n.red-text.text-lighten-2 {\n color: #e57373 !important;\n}\n\n.red-waves.waves-lighten-2 .waves-ripple {\n background-color: #e57373 !important;\n}\n\n.red.lighten-1 {\n background-color: #ef5350 !important;\n}\n\n.red-text.text-lighten-1 {\n color: #ef5350 !important;\n}\n\n.red-waves.waves-lighten-1 .waves-ripple {\n background-color: #ef5350 !important;\n}\n\n.red.darken-1 {\n background-color: #e53935 !important;\n}\n\n.red-text.text-darken-1 {\n color: #e53935 !important;\n}\n\n.red-waves.waves-darken-1 .waves-ripple {\n background-color: #e53935 !important;\n}\n\n.red.darken-2 {\n background-color: #d32f2f !important;\n}\n\n.red-text.text-darken-2 {\n color: #d32f2f !important;\n}\n\n.red-waves.waves-darken-2 .waves-ripple {\n background-color: #d32f2f !important;\n}\n\n.red.darken-3 {\n background-color: #c62828 !important;\n}\n\n.red-text.text-darken-3 {\n color: #c62828 !important;\n}\n\n.red-waves.waves-darken-3 .waves-ripple {\n background-color: #c62828 !important;\n}\n\n.red.darken-4 {\n background-color: #b71c1c !important;\n}\n\n.red-text.text-darken-4 {\n color: #b71c1c !important;\n}\n\n.red-waves.waves-darken-4 .waves-ripple {\n background-color: #b71c1c !important;\n}\n\n.red.accent-1 {\n background-color: #ff8a80 !important;\n}\n\n.red-text.text-accent-1 {\n color: #ff8a80 !important;\n}\n\n.red-waves.waves-accent-1 .waves-ripple {\n background-color: #ff8a80 !important;\n}\n\n.red.accent-2 {\n background-color: #ff5252 !important;\n}\n\n.red-text.text-accent-2 {\n color: #ff5252 !important;\n}\n\n.red-waves.waves-accent-2 .waves-ripple {\n background-color: #ff5252 !important;\n}\n\n.red.accent-3 {\n background-color: #ff1744 !important;\n}\n\n.red-text.text-accent-3 {\n color: #ff1744 !important;\n}\n\n.red-waves.waves-accent-3 .waves-ripple {\n background-color: #ff1744 !important;\n}\n\n.red.accent-4 {\n background-color: #d50000 !important;\n}\n\n.red-text.text-accent-4 {\n color: #d50000 !important;\n}\n\n.red-waves.waves-accent-4 .waves-ripple {\n background-color: #d50000 !important;\n}\n\n.pink {\n background-color: #e91e63 !important;\n}\n\n.pink-text {\n color: #e91e63 !important;\n}\n\n.pink-waves .waves-ripple {\n background-color: #e91e63 !important;\n}\n\n.pink.lighten-5 {\n background-color: #fce4ec !important;\n}\n\n.pink-text.text-lighten-5 {\n color: #fce4ec !important;\n}\n\n.pink-waves.waves-lighten-5 .waves-ripple {\n background-color: #fce4ec !important;\n}\n\n.pink.lighten-4 {\n background-color: #f8bbd0 !important;\n}\n\n.pink-text.text-lighten-4 {\n color: #f8bbd0 !important;\n}\n\n.pink-waves.waves-lighten-4 .waves-ripple {\n background-color: #f8bbd0 !important;\n}\n\n.pink.lighten-3 {\n background-color: #f48fb1 !important;\n}\n\n.pink-text.text-lighten-3 {\n color: #f48fb1 !important;\n}\n\n.pink-waves.waves-lighten-3 .waves-ripple {\n background-color: #f48fb1 !important;\n}\n\n.pink.lighten-2 {\n background-color: #f06292 !important;\n}\n\n.pink-text.text-lighten-2 {\n color: #f06292 !important;\n}\n\n.pink-waves.waves-lighten-2 .waves-ripple {\n background-color: #f06292 !important;\n}\n\n.pink.lighten-1 {\n background-color: #ec407a !important;\n}\n\n.pink-text.text-lighten-1 {\n color: #ec407a !important;\n}\n\n.pink-waves.waves-lighten-1 .waves-ripple {\n background-color: #ec407a !important;\n}\n\n.pink.darken-1 {\n background-color: #d81b60 !important;\n}\n\n.pink-text.text-darken-1 {\n color: #d81b60 !important;\n}\n\n.pink-waves.waves-darken-1 .waves-ripple {\n background-color: #d81b60 !important;\n}\n\n.pink.darken-2 {\n background-color: #c2185b !important;\n}\n\n.pink-text.text-darken-2 {\n color: #c2185b !important;\n}\n\n.pink-waves.waves-darken-2 .waves-ripple {\n background-color: #c2185b !important;\n}\n\n.pink.darken-3 {\n background-color: #ad1457 !important;\n}\n\n.pink-text.text-darken-3 {\n color: #ad1457 !important;\n}\n\n.pink-waves.waves-darken-3 .waves-ripple {\n background-color: #ad1457 !important;\n}\n\n.pink.darken-4 {\n background-color: #880e4f !important;\n}\n\n.pink-text.text-darken-4 {\n color: #880e4f !important;\n}\n\n.pink-waves.waves-darken-4 .waves-ripple {\n background-color: #880e4f !important;\n}\n\n.pink.accent-1 {\n background-color: #ff80ab !important;\n}\n\n.pink-text.text-accent-1 {\n color: #ff80ab !important;\n}\n\n.pink-waves.waves-accent-1 .waves-ripple {\n background-color: #ff80ab !important;\n}\n\n.pink.accent-2 {\n background-color: #ff4081 !important;\n}\n\n.pink-text.text-accent-2 {\n color: #ff4081 !important;\n}\n\n.pink-waves.waves-accent-2 .waves-ripple {\n background-color: #ff4081 !important;\n}\n\n.pink.accent-3 {\n background-color: #f50057 !important;\n}\n\n.pink-text.text-accent-3 {\n color: #f50057 !important;\n}\n\n.pink-waves.waves-accent-3 .waves-ripple {\n background-color: #f50057 !important;\n}\n\n.pink.accent-4 {\n background-color: #c51162 !important;\n}\n\n.pink-text.text-accent-4 {\n color: #c51162 !important;\n}\n\n.pink-waves.waves-accent-4 .waves-ripple {\n background-color: #c51162 !important;\n}\n\n.purple {\n background-color: #9c27b0 !important;\n}\n\n.purple-text {\n color: #9c27b0 !important;\n}\n\n.purple-waves .waves-ripple {\n background-color: #9c27b0 !important;\n}\n\n.purple.lighten-5 {\n background-color: #f3e5f5 !important;\n}\n\n.purple-text.text-lighten-5 {\n color: #f3e5f5 !important;\n}\n\n.purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #f3e5f5 !important;\n}\n\n.purple.lighten-4 {\n background-color: #e1bee7 !important;\n}\n\n.purple-text.text-lighten-4 {\n color: #e1bee7 !important;\n}\n\n.purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #e1bee7 !important;\n}\n\n.purple.lighten-3 {\n background-color: #ce93d8 !important;\n}\n\n.purple-text.text-lighten-3 {\n color: #ce93d8 !important;\n}\n\n.purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #ce93d8 !important;\n}\n\n.purple.lighten-2 {\n background-color: #ba68c8 !important;\n}\n\n.purple-text.text-lighten-2 {\n color: #ba68c8 !important;\n}\n\n.purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #ba68c8 !important;\n}\n\n.purple.lighten-1 {\n background-color: #ab47bc !important;\n}\n\n.purple-text.text-lighten-1 {\n color: #ab47bc !important;\n}\n\n.purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #ab47bc !important;\n}\n\n.purple.darken-1 {\n background-color: #8e24aa !important;\n}\n\n.purple-text.text-darken-1 {\n color: #8e24aa !important;\n}\n\n.purple-waves.waves-darken-1 .waves-ripple {\n background-color: #8e24aa !important;\n}\n\n.purple.darken-2 {\n background-color: #7b1fa2 !important;\n}\n\n.purple-text.text-darken-2 {\n color: #7b1fa2 !important;\n}\n\n.purple-waves.waves-darken-2 .waves-ripple {\n background-color: #7b1fa2 !important;\n}\n\n.purple.darken-3 {\n background-color: #6a1b9a !important;\n}\n\n.purple-text.text-darken-3 {\n color: #6a1b9a !important;\n}\n\n.purple-waves.waves-darken-3 .waves-ripple {\n background-color: #6a1b9a !important;\n}\n\n.purple.darken-4 {\n background-color: #4a148c !important;\n}\n\n.purple-text.text-darken-4 {\n color: #4a148c !important;\n}\n\n.purple-waves.waves-darken-4 .waves-ripple {\n background-color: #4a148c !important;\n}\n\n.purple.accent-1 {\n background-color: #ea80fc !important;\n}\n\n.purple-text.text-accent-1 {\n color: #ea80fc !important;\n}\n\n.purple-waves.waves-accent-1 .waves-ripple {\n background-color: #ea80fc !important;\n}\n\n.purple.accent-2 {\n background-color: #e040fb !important;\n}\n\n.purple-text.text-accent-2 {\n color: #e040fb !important;\n}\n\n.purple-waves.waves-accent-2 .waves-ripple {\n background-color: #e040fb !important;\n}\n\n.purple.accent-3 {\n background-color: #d500f9 !important;\n}\n\n.purple-text.text-accent-3 {\n color: #d500f9 !important;\n}\n\n.purple-waves.waves-accent-3 .waves-ripple {\n background-color: #d500f9 !important;\n}\n\n.purple.accent-4 {\n background-color: #aa00ff !important;\n}\n\n.purple-text.text-accent-4 {\n color: #aa00ff !important;\n}\n\n.purple-waves.waves-accent-4 .waves-ripple {\n background-color: #aa00ff !important;\n}\n\n.deep-purple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple-text {\n color: #673ab7 !important;\n}\n\n.deep-purple-waves .waves-ripple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple.lighten-5 {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple-text.text-lighten-5 {\n color: #ede7f6 !important;\n}\n\n.deep-purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple.lighten-4 {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple-text.text-lighten-4 {\n color: #d1c4e9 !important;\n}\n\n.deep-purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple.lighten-3 {\n background-color: #b39ddb !important;\n}\n\n.deep-purple-text.text-lighten-3 {\n color: #b39ddb !important;\n}\n\n.deep-purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #b39ddb !important;\n}\n\n.deep-purple.lighten-2 {\n background-color: #9575cd !important;\n}\n\n.deep-purple-text.text-lighten-2 {\n color: #9575cd !important;\n}\n\n.deep-purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #9575cd !important;\n}\n\n.deep-purple.lighten-1 {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple-text.text-lighten-1 {\n color: #7e57c2 !important;\n}\n\n.deep-purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple.darken-1 {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple-text.text-darken-1 {\n color: #5e35b1 !important;\n}\n\n.deep-purple-waves.waves-darken-1 .waves-ripple {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple.darken-2 {\n background-color: #512da8 !important;\n}\n\n.deep-purple-text.text-darken-2 {\n color: #512da8 !important;\n}\n\n.deep-purple-waves.waves-darken-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.deep-purple.darken-3 {\n background-color: #4527a0 !important;\n}\n\n.deep-purple-text.text-darken-3 {\n color: #4527a0 !important;\n}\n\n.deep-purple-waves.waves-darken-3 .waves-ripple {\n background-color: #4527a0 !important;\n}\n\n.deep-purple.darken-4 {\n background-color: #311b92 !important;\n}\n\n.deep-purple-text.text-darken-4 {\n color: #311b92 !important;\n}\n\n.deep-purple-waves.waves-darken-4 .waves-ripple {\n background-color: #311b92 !important;\n}\n\n.deep-purple.accent-1 {\n background-color: #b388ff !important;\n}\n\n.deep-purple-text.text-accent-1 {\n color: #b388ff !important;\n}\n\n.deep-purple-waves.waves-accent-1 .waves-ripple {\n background-color: #b388ff !important;\n}\n\n.deep-purple.accent-2 {\n background-color: #7c4dff !important;\n}\n\n.deep-purple-text.text-accent-2 {\n color: #7c4dff !important;\n}\n\n.deep-purple-waves.waves-accent-2 .waves-ripple {\n background-color: #7c4dff !important;\n}\n\n.deep-purple.accent-3 {\n background-color: #651fff !important;\n}\n\n.deep-purple-text.text-accent-3 {\n color: #651fff !important;\n}\n\n.deep-purple-waves.waves-accent-3 .waves-ripple {\n background-color: #651fff !important;\n}\n\n.deep-purple.accent-4 {\n background-color: #6200ea !important;\n}\n\n.deep-purple-text.text-accent-4 {\n color: #6200ea !important;\n}\n\n.deep-purple-waves.waves-accent-4 .waves-ripple {\n background-color: #6200ea !important;\n}\n\n.indigo {\n background-color: #3f51b5 !important;\n}\n\n.indigo-text {\n color: #3f51b5 !important;\n}\n\n.indigo-waves .waves-ripple {\n background-color: #3f51b5 !important;\n}\n\n.indigo.lighten-5 {\n background-color: #e8eaf6 !important;\n}\n\n.indigo-text.text-lighten-5 {\n color: #e8eaf6 !important;\n}\n\n.indigo-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8eaf6 !important;\n}\n\n.indigo.lighten-4 {\n background-color: #c5cae9 !important;\n}\n\n.indigo-text.text-lighten-4 {\n color: #c5cae9 !important;\n}\n\n.indigo-waves.waves-lighten-4 .waves-ripple {\n background-color: #c5cae9 !important;\n}\n\n.indigo.lighten-3 {\n background-color: #9fa8da !important;\n}\n\n.indigo-text.text-lighten-3 {\n color: #9fa8da !important;\n}\n\n.indigo-waves.waves-lighten-3 .waves-ripple {\n background-color: #9fa8da !important;\n}\n\n.indigo.lighten-2 {\n background-color: #7986cb !important;\n}\n\n.indigo-text.text-lighten-2 {\n color: #7986cb !important;\n}\n\n.indigo-waves.waves-lighten-2 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.indigo.lighten-1 {\n background-color: #5c6bc0 !important;\n}\n\n.indigo-text.text-lighten-1 {\n color: #5c6bc0 !important;\n}\n\n.indigo-waves.waves-lighten-1 .waves-ripple {\n background-color: #5c6bc0 !important;\n}\n\n.indigo.darken-1 {\n background-color: #3949ab !important;\n}\n\n.indigo-text.text-darken-1 {\n color: #3949ab !important;\n}\n\n.indigo-waves.waves-darken-1 .waves-ripple {\n background-color: #3949ab !important;\n}\n\n.indigo.darken-2 {\n background-color: #303f9f !important;\n}\n\n.indigo-text.text-darken-2 {\n color: #303f9f !important;\n}\n\n.indigo-waves.waves-darken-2 .waves-ripple {\n background-color: #303f9f !important;\n}\n\n.indigo.darken-3 {\n background-color: #283593 !important;\n}\n\n.indigo-text.text-darken-3 {\n color: #283593 !important;\n}\n\n.indigo-waves.waves-darken-3 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.indigo.darken-4 {\n background-color: #1a237e !important;\n}\n\n.indigo-text.text-darken-4 {\n color: #1a237e !important;\n}\n\n.indigo-waves.waves-darken-4 .waves-ripple {\n background-color: #1a237e !important;\n}\n\n.indigo.accent-1 {\n background-color: #8c9eff !important;\n}\n\n.indigo-text.text-accent-1 {\n color: #8c9eff !important;\n}\n\n.indigo-waves.waves-accent-1 .waves-ripple {\n background-color: #8c9eff !important;\n}\n\n.indigo.accent-2 {\n background-color: #536dfe !important;\n}\n\n.indigo-text.text-accent-2 {\n color: #536dfe !important;\n}\n\n.indigo-waves.waves-accent-2 .waves-ripple {\n background-color: #536dfe !important;\n}\n\n.indigo.accent-3 {\n background-color: #3d5afe !important;\n}\n\n.indigo-text.text-accent-3 {\n color: #3d5afe !important;\n}\n\n.indigo-waves.waves-accent-3 .waves-ripple {\n background-color: #3d5afe !important;\n}\n\n.indigo.accent-4 {\n background-color: #304ffe !important;\n}\n\n.indigo-text.text-accent-4 {\n color: #304ffe !important;\n}\n\n.indigo-waves.waves-accent-4 .waves-ripple {\n background-color: #304ffe !important;\n}\n\n.blue {\n background-color: #2196f3 !important;\n}\n\n.blue-text {\n color: #2196f3 !important;\n}\n\n.blue-waves .waves-ripple {\n background-color: #2196f3 !important;\n}\n\n.blue.lighten-5 {\n background-color: #e3f2fd !important;\n}\n\n.blue-text.text-lighten-5 {\n color: #e3f2fd !important;\n}\n\n.blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e3f2fd !important;\n}\n\n.blue.lighten-4 {\n background-color: #bbdefb !important;\n}\n\n.blue-text.text-lighten-4 {\n color: #bbdefb !important;\n}\n\n.blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.blue.lighten-3 {\n background-color: #90caf9 !important;\n}\n\n.blue-text.text-lighten-3 {\n color: #90caf9 !important;\n}\n\n.blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #90caf9 !important;\n}\n\n.blue.lighten-2 {\n background-color: #64b5f6 !important;\n}\n\n.blue-text.text-lighten-2 {\n color: #64b5f6 !important;\n}\n\n.blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #64b5f6 !important;\n}\n\n.blue.lighten-1 {\n background-color: #42a5f5 !important;\n}\n\n.blue-text.text-lighten-1 {\n color: #42a5f5 !important;\n}\n\n.blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.blue.darken-1 {\n background-color: #1e88e5 !important;\n}\n\n.blue-text.text-darken-1 {\n color: #1e88e5 !important;\n}\n\n.blue-waves.waves-darken-1 .waves-ripple {\n background-color: #1e88e5 !important;\n}\n\n.blue.darken-2 {\n background-color: #1976d2 !important;\n}\n\n.blue-text.text-darken-2 {\n color: #1976d2 !important;\n}\n\n.blue-waves.waves-darken-2 .waves-ripple {\n background-color: #1976d2 !important;\n}\n\n.blue.darken-3 {\n background-color: #1565c0 !important;\n}\n\n.blue-text.text-darken-3 {\n color: #1565c0 !important;\n}\n\n.blue-waves.waves-darken-3 .waves-ripple {\n background-color: #1565c0 !important;\n}\n\n.blue.darken-4 {\n background-color: #0d47a1 !important;\n}\n\n.blue-text.text-darken-4 {\n color: #0d47a1 !important;\n}\n\n.blue-waves.waves-darken-4 .waves-ripple {\n background-color: #0d47a1 !important;\n}\n\n.blue.accent-1 {\n background-color: #82b1ff !important;\n}\n\n.blue-text.text-accent-1 {\n color: #82b1ff !important;\n}\n\n.blue-waves.waves-accent-1 .waves-ripple {\n background-color: #82b1ff !important;\n}\n\n.blue.accent-2 {\n background-color: #448aff !important;\n}\n\n.blue-text.text-accent-2 {\n color: #448aff !important;\n}\n\n.blue-waves.waves-accent-2 .waves-ripple {\n background-color: #448aff !important;\n}\n\n.blue.accent-3 {\n background-color: #2979ff !important;\n}\n\n.blue-text.text-accent-3 {\n color: #2979ff !important;\n}\n\n.blue-waves.waves-accent-3 .waves-ripple {\n background-color: #2979ff !important;\n}\n\n.blue.accent-4 {\n background-color: #2962ff !important;\n}\n\n.blue-text.text-accent-4 {\n color: #2962ff !important;\n}\n\n.blue-waves.waves-accent-4 .waves-ripple {\n background-color: #2962ff !important;\n}\n\n.light-blue {\n background-color: #03a9f4 !important;\n}\n\n.light-blue-text {\n color: #03a9f4 !important;\n}\n\n.light-blue-waves .waves-ripple {\n background-color: #03a9f4 !important;\n}\n\n.light-blue.lighten-5 {\n background-color: #e1f5fe !important;\n}\n\n.light-blue-text.text-lighten-5 {\n color: #e1f5fe !important;\n}\n\n.light-blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e1f5fe !important;\n}\n\n.light-blue.lighten-4 {\n background-color: #b3e5fc !important;\n}\n\n.light-blue-text.text-lighten-4 {\n color: #b3e5fc !important;\n}\n\n.light-blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #b3e5fc !important;\n}\n\n.light-blue.lighten-3 {\n background-color: #81d4fa !important;\n}\n\n.light-blue-text.text-lighten-3 {\n color: #81d4fa !important;\n}\n\n.light-blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #81d4fa !important;\n}\n\n.light-blue.lighten-2 {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue-text.text-lighten-2 {\n color: #4fc3f7 !important;\n}\n\n.light-blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue.lighten-1 {\n background-color: #29b6f6 !important;\n}\n\n.light-blue-text.text-lighten-1 {\n color: #29b6f6 !important;\n}\n\n.light-blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #29b6f6 !important;\n}\n\n.light-blue.darken-1 {\n background-color: #039be5 !important;\n}\n\n.light-blue-text.text-darken-1 {\n color: #039be5 !important;\n}\n\n.light-blue-waves.waves-darken-1 .waves-ripple {\n background-color: #039be5 !important;\n}\n\n.light-blue.darken-2 {\n background-color: #0288d1 !important;\n}\n\n.light-blue-text.text-darken-2 {\n color: #0288d1 !important;\n}\n\n.light-blue-waves.waves-darken-2 .waves-ripple {\n background-color: #0288d1 !important;\n}\n\n.light-blue.darken-3 {\n background-color: #0277bd !important;\n}\n\n.light-blue-text.text-darken-3 {\n color: #0277bd !important;\n}\n\n.light-blue-waves.waves-darken-3 .waves-ripple {\n background-color: #0277bd !important;\n}\n\n.light-blue.darken-4 {\n background-color: #01579b !important;\n}\n\n.light-blue-text.text-darken-4 {\n color: #01579b !important;\n}\n\n.light-blue-waves.waves-darken-4 .waves-ripple {\n background-color: #01579b !important;\n}\n\n.light-blue.accent-1 {\n background-color: #80d8ff !important;\n}\n\n.light-blue-text.text-accent-1 {\n color: #80d8ff !important;\n}\n\n.light-blue-waves.waves-accent-1 .waves-ripple {\n background-color: #80d8ff !important;\n}\n\n.light-blue.accent-2 {\n background-color: #40c4ff !important;\n}\n\n.light-blue-text.text-accent-2 {\n color: #40c4ff !important;\n}\n\n.light-blue-waves.waves-accent-2 .waves-ripple {\n background-color: #40c4ff !important;\n}\n\n.light-blue.accent-3 {\n background-color: #00b0ff !important;\n}\n\n.light-blue-text.text-accent-3 {\n color: #00b0ff !important;\n}\n\n.light-blue-waves.waves-accent-3 .waves-ripple {\n background-color: #00b0ff !important;\n}\n\n.light-blue.accent-4 {\n background-color: #0091ea !important;\n}\n\n.light-blue-text.text-accent-4 {\n color: #0091ea !important;\n}\n\n.light-blue-waves.waves-accent-4 .waves-ripple {\n background-color: #0091ea !important;\n}\n\n.cyan {\n background-color: #00bcd4 !important;\n}\n\n.cyan-text {\n color: #00bcd4 !important;\n}\n\n.cyan-waves .waves-ripple {\n background-color: #00bcd4 !important;\n}\n\n.cyan.lighten-5 {\n background-color: #e0f7fa !important;\n}\n\n.cyan-text.text-lighten-5 {\n color: #e0f7fa !important;\n}\n\n.cyan-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f7fa !important;\n}\n\n.cyan.lighten-4 {\n background-color: #b2ebf2 !important;\n}\n\n.cyan-text.text-lighten-4 {\n color: #b2ebf2 !important;\n}\n\n.cyan-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2ebf2 !important;\n}\n\n.cyan.lighten-3 {\n background-color: #80deea !important;\n}\n\n.cyan-text.text-lighten-3 {\n color: #80deea !important;\n}\n\n.cyan-waves.waves-lighten-3 .waves-ripple {\n background-color: #80deea !important;\n}\n\n.cyan.lighten-2 {\n background-color: #4dd0e1 !important;\n}\n\n.cyan-text.text-lighten-2 {\n color: #4dd0e1 !important;\n}\n\n.cyan-waves.waves-lighten-2 .waves-ripple {\n background-color: #4dd0e1 !important;\n}\n\n.cyan.lighten-1 {\n background-color: #26c6da !important;\n}\n\n.cyan-text.text-lighten-1 {\n color: #26c6da !important;\n}\n\n.cyan-waves.waves-lighten-1 .waves-ripple {\n background-color: #26c6da !important;\n}\n\n.cyan.darken-1 {\n background-color: #00acc1 !important;\n}\n\n.cyan-text.text-darken-1 {\n color: #00acc1 !important;\n}\n\n.cyan-waves.waves-darken-1 .waves-ripple {\n background-color: #00acc1 !important;\n}\n\n.cyan.darken-2 {\n background-color: #0097a7 !important;\n}\n\n.cyan-text.text-darken-2 {\n color: #0097a7 !important;\n}\n\n.cyan-waves.waves-darken-2 .waves-ripple {\n background-color: #0097a7 !important;\n}\n\n.cyan.darken-3 {\n background-color: #00838f !important;\n}\n\n.cyan-text.text-darken-3 {\n color: #00838f !important;\n}\n\n.cyan-waves.waves-darken-3 .waves-ripple {\n background-color: #00838f !important;\n}\n\n.cyan.darken-4 {\n background-color: #006064 !important;\n}\n\n.cyan-text.text-darken-4 {\n color: #006064 !important;\n}\n\n.cyan-waves.waves-darken-4 .waves-ripple {\n background-color: #006064 !important;\n}\n\n.cyan.accent-1 {\n background-color: #84ffff !important;\n}\n\n.cyan-text.text-accent-1 {\n color: #84ffff !important;\n}\n\n.cyan-waves.waves-accent-1 .waves-ripple {\n background-color: #84ffff !important;\n}\n\n.cyan.accent-2 {\n background-color: #18ffff !important;\n}\n\n.cyan-text.text-accent-2 {\n color: #18ffff !important;\n}\n\n.cyan-waves.waves-accent-2 .waves-ripple {\n background-color: #18ffff !important;\n}\n\n.cyan.accent-3 {\n background-color: #00e5ff !important;\n}\n\n.cyan-text.text-accent-3 {\n color: #00e5ff !important;\n}\n\n.cyan-waves.waves-accent-3 .waves-ripple {\n background-color: #00e5ff !important;\n}\n\n.cyan.accent-4 {\n background-color: #00b8d4 !important;\n}\n\n.cyan-text.text-accent-4 {\n color: #00b8d4 !important;\n}\n\n.cyan-waves.waves-accent-4 .waves-ripple {\n background-color: #00b8d4 !important;\n}\n\n.teal {\n background-color: #009688 !important;\n}\n\n.teal-text {\n color: #009688 !important;\n}\n\n.teal-waves .waves-ripple {\n background-color: #009688 !important;\n}\n\n.teal.lighten-5 {\n background-color: #e0f2f1 !important;\n}\n\n.teal-text.text-lighten-5 {\n color: #e0f2f1 !important;\n}\n\n.teal-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f2f1 !important;\n}\n\n.teal.lighten-4 {\n background-color: #b2dfdb !important;\n}\n\n.teal-text.text-lighten-4 {\n color: #b2dfdb !important;\n}\n\n.teal-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2dfdb !important;\n}\n\n.teal.lighten-3 {\n background-color: #80cbc4 !important;\n}\n\n.teal-text.text-lighten-3 {\n color: #80cbc4 !important;\n}\n\n.teal-waves.waves-lighten-3 .waves-ripple {\n background-color: #80cbc4 !important;\n}\n\n.teal.lighten-2 {\n background-color: #4db6ac !important;\n}\n\n.teal-text.text-lighten-2 {\n color: #4db6ac !important;\n}\n\n.teal-waves.waves-lighten-2 .waves-ripple {\n background-color: #4db6ac !important;\n}\n\n.teal.lighten-1 {\n background-color: #26a69a !important;\n}\n\n.teal-text.text-lighten-1 {\n color: #26a69a !important;\n}\n\n.teal-waves.waves-lighten-1 .waves-ripple {\n background-color: #26a69a !important;\n}\n\n.teal.darken-1 {\n background-color: #00897b !important;\n}\n\n.teal-text.text-darken-1 {\n color: #00897b !important;\n}\n\n.teal-waves.waves-darken-1 .waves-ripple {\n background-color: #00897b !important;\n}\n\n.teal.darken-2 {\n background-color: #00796b !important;\n}\n\n.teal-text.text-darken-2 {\n color: #00796b !important;\n}\n\n.teal-waves.waves-darken-2 .waves-ripple {\n background-color: #00796b !important;\n}\n\n.teal.darken-3 {\n background-color: #00695c !important;\n}\n\n.teal-text.text-darken-3 {\n color: #00695c !important;\n}\n\n.teal-waves.waves-darken-3 .waves-ripple {\n background-color: #00695c !important;\n}\n\n.teal.darken-4 {\n background-color: #004d40 !important;\n}\n\n.teal-text.text-darken-4 {\n color: #004d40 !important;\n}\n\n.teal-waves.waves-darken-4 .waves-ripple {\n background-color: #004d40 !important;\n}\n\n.teal.accent-1 {\n background-color: #a7ffeb !important;\n}\n\n.teal-text.text-accent-1 {\n color: #a7ffeb !important;\n}\n\n.teal-waves.waves-accent-1 .waves-ripple {\n background-color: #a7ffeb !important;\n}\n\n.teal.accent-2 {\n background-color: #64ffda !important;\n}\n\n.teal-text.text-accent-2 {\n color: #64ffda !important;\n}\n\n.teal-waves.waves-accent-2 .waves-ripple {\n background-color: #64ffda !important;\n}\n\n.teal.accent-3 {\n background-color: #1de9b6 !important;\n}\n\n.teal-text.text-accent-3 {\n color: #1de9b6 !important;\n}\n\n.teal-waves.waves-accent-3 .waves-ripple {\n background-color: #1de9b6 !important;\n}\n\n.teal.accent-4 {\n background-color: #00bfa5 !important;\n}\n\n.teal-text.text-accent-4 {\n color: #00bfa5 !important;\n}\n\n.teal-waves.waves-accent-4 .waves-ripple {\n background-color: #00bfa5 !important;\n}\n\n.green {\n background-color: #4caf50 !important;\n}\n\n.green-text {\n color: #4caf50 !important;\n}\n\n.green-waves .waves-ripple {\n background-color: #4caf50 !important;\n}\n\n.green.lighten-5 {\n background-color: #e8f5e9 !important;\n}\n\n.green-text.text-lighten-5 {\n color: #e8f5e9 !important;\n}\n\n.green-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8f5e9 !important;\n}\n\n.green.lighten-4 {\n background-color: #c8e6c9 !important;\n}\n\n.green-text.text-lighten-4 {\n color: #c8e6c9 !important;\n}\n\n.green-waves.waves-lighten-4 .waves-ripple {\n background-color: #c8e6c9 !important;\n}\n\n.green.lighten-3 {\n background-color: #a5d6a7 !important;\n}\n\n.green-text.text-lighten-3 {\n color: #a5d6a7 !important;\n}\n\n.green-waves.waves-lighten-3 .waves-ripple {\n background-color: #a5d6a7 !important;\n}\n\n.green.lighten-2 {\n background-color: #81c784 !important;\n}\n\n.green-text.text-lighten-2 {\n color: #81c784 !important;\n}\n\n.green-waves.waves-lighten-2 .waves-ripple {\n background-color: #81c784 !important;\n}\n\n.green.lighten-1 {\n background-color: #66bb6a !important;\n}\n\n.green-text.text-lighten-1 {\n color: #66bb6a !important;\n}\n\n.green-waves.waves-lighten-1 .waves-ripple {\n background-color: #66bb6a !important;\n}\n\n.green.darken-1 {\n background-color: #43a047 !important;\n}\n\n.green-text.text-darken-1 {\n color: #43a047 !important;\n}\n\n.green-waves.waves-darken-1 .waves-ripple {\n background-color: #43a047 !important;\n}\n\n.green.darken-2 {\n background-color: #388e3c !important;\n}\n\n.green-text.text-darken-2 {\n color: #388e3c !important;\n}\n\n.green-waves.waves-darken-2 .waves-ripple {\n background-color: #388e3c !important;\n}\n\n.green.darken-3 {\n background-color: #2e7d32 !important;\n}\n\n.green-text.text-darken-3 {\n color: #2e7d32 !important;\n}\n\n.green-waves.waves-darken-3 .waves-ripple {\n background-color: #2e7d32 !important;\n}\n\n.green.darken-4 {\n background-color: #1b5e20 !important;\n}\n\n.green-text.text-darken-4 {\n color: #1b5e20 !important;\n}\n\n.green-waves.waves-darken-4 .waves-ripple {\n background-color: #1b5e20 !important;\n}\n\n.green.accent-1 {\n background-color: #b9f6ca !important;\n}\n\n.green-text.text-accent-1 {\n color: #b9f6ca !important;\n}\n\n.green-waves.waves-accent-1 .waves-ripple {\n background-color: #b9f6ca !important;\n}\n\n.green.accent-2 {\n background-color: #69f0ae !important;\n}\n\n.green-text.text-accent-2 {\n color: #69f0ae !important;\n}\n\n.green-waves.waves-accent-2 .waves-ripple {\n background-color: #69f0ae !important;\n}\n\n.green.accent-3 {\n background-color: #00e676 !important;\n}\n\n.green-text.text-accent-3 {\n color: #00e676 !important;\n}\n\n.green-waves.waves-accent-3 .waves-ripple {\n background-color: #00e676 !important;\n}\n\n.green.accent-4 {\n background-color: #00c853 !important;\n}\n\n.green-text.text-accent-4 {\n color: #00c853 !important;\n}\n\n.green-waves.waves-accent-4 .waves-ripple {\n background-color: #00c853 !important;\n}\n\n.light-green {\n background-color: #8bc34a !important;\n}\n\n.light-green-text {\n color: #8bc34a !important;\n}\n\n.light-green-waves .waves-ripple {\n background-color: #8bc34a !important;\n}\n\n.light-green.lighten-5 {\n background-color: #f1f8e9 !important;\n}\n\n.light-green-text.text-lighten-5 {\n color: #f1f8e9 !important;\n}\n\n.light-green-waves.waves-lighten-5 .waves-ripple {\n background-color: #f1f8e9 !important;\n}\n\n.light-green.lighten-4 {\n background-color: #dcedc8 !important;\n}\n\n.light-green-text.text-lighten-4 {\n color: #dcedc8 !important;\n}\n\n.light-green-waves.waves-lighten-4 .waves-ripple {\n background-color: #dcedc8 !important;\n}\n\n.light-green.lighten-3 {\n background-color: #c5e1a5 !important;\n}\n\n.light-green-text.text-lighten-3 {\n color: #c5e1a5 !important;\n}\n\n.light-green-waves.waves-lighten-3 .waves-ripple {\n background-color: #c5e1a5 !important;\n}\n\n.light-green.lighten-2 {\n background-color: #aed581 !important;\n}\n\n.light-green-text.text-lighten-2 {\n color: #aed581 !important;\n}\n\n.light-green-waves.waves-lighten-2 .waves-ripple {\n background-color: #aed581 !important;\n}\n\n.light-green.lighten-1 {\n background-color: #9ccc65 !important;\n}\n\n.light-green-text.text-lighten-1 {\n color: #9ccc65 !important;\n}\n\n.light-green-waves.waves-lighten-1 .waves-ripple {\n background-color: #9ccc65 !important;\n}\n\n.light-green.darken-1 {\n background-color: #7cb342 !important;\n}\n\n.light-green-text.text-darken-1 {\n color: #7cb342 !important;\n}\n\n.light-green-waves.waves-darken-1 .waves-ripple {\n background-color: #7cb342 !important;\n}\n\n.light-green.darken-2 {\n background-color: #689f38 !important;\n}\n\n.light-green-text.text-darken-2 {\n color: #689f38 !important;\n}\n\n.light-green-waves.waves-darken-2 .waves-ripple {\n background-color: #689f38 !important;\n}\n\n.light-green.darken-3 {\n background-color: #558b2f !important;\n}\n\n.light-green-text.text-darken-3 {\n color: #558b2f !important;\n}\n\n.light-green-waves.waves-darken-3 .waves-ripple {\n background-color: #558b2f !important;\n}\n\n.light-green.darken-4 {\n background-color: #33691e !important;\n}\n\n.light-green-text.text-darken-4 {\n color: #33691e !important;\n}\n\n.light-green-waves.waves-darken-4 .waves-ripple {\n background-color: #33691e !important;\n}\n\n.light-green.accent-1 {\n background-color: #ccff90 !important;\n}\n\n.light-green-text.text-accent-1 {\n color: #ccff90 !important;\n}\n\n.light-green-waves.waves-accent-1 .waves-ripple {\n background-color: #ccff90 !important;\n}\n\n.light-green.accent-2 {\n background-color: #b2ff59 !important;\n}\n\n.light-green-text.text-accent-2 {\n color: #b2ff59 !important;\n}\n\n.light-green-waves.waves-accent-2 .waves-ripple {\n background-color: #b2ff59 !important;\n}\n\n.light-green.accent-3 {\n background-color: #76ff03 !important;\n}\n\n.light-green-text.text-accent-3 {\n color: #76ff03 !important;\n}\n\n.light-green-waves.waves-accent-3 .waves-ripple {\n background-color: #76ff03 !important;\n}\n\n.light-green.accent-4 {\n background-color: #64dd17 !important;\n}\n\n.light-green-text.text-accent-4 {\n color: #64dd17 !important;\n}\n\n.light-green-waves.waves-accent-4 .waves-ripple {\n background-color: #64dd17 !important;\n}\n\n.lime {\n background-color: #cddc39 !important;\n}\n\n.lime-text {\n color: #cddc39 !important;\n}\n\n.lime-waves .waves-ripple {\n background-color: #cddc39 !important;\n}\n\n.lime.lighten-5 {\n background-color: #f9fbe7 !important;\n}\n\n.lime-text.text-lighten-5 {\n color: #f9fbe7 !important;\n}\n\n.lime-waves.waves-lighten-5 .waves-ripple {\n background-color: #f9fbe7 !important;\n}\n\n.lime.lighten-4 {\n background-color: #f0f4c3 !important;\n}\n\n.lime-text.text-lighten-4 {\n color: #f0f4c3 !important;\n}\n\n.lime-waves.waves-lighten-4 .waves-ripple {\n background-color: #f0f4c3 !important;\n}\n\n.lime.lighten-3 {\n background-color: #e6ee9c !important;\n}\n\n.lime-text.text-lighten-3 {\n color: #e6ee9c !important;\n}\n\n.lime-waves.waves-lighten-3 .waves-ripple {\n background-color: #e6ee9c !important;\n}\n\n.lime.lighten-2 {\n background-color: #dce775 !important;\n}\n\n.lime-text.text-lighten-2 {\n color: #dce775 !important;\n}\n\n.lime-waves.waves-lighten-2 .waves-ripple {\n background-color: #dce775 !important;\n}\n\n.lime.lighten-1 {\n background-color: #d4e157 !important;\n}\n\n.lime-text.text-lighten-1 {\n color: #d4e157 !important;\n}\n\n.lime-waves.waves-lighten-1 .waves-ripple {\n background-color: #d4e157 !important;\n}\n\n.lime.darken-1 {\n background-color: #c0ca33 !important;\n}\n\n.lime-text.text-darken-1 {\n color: #c0ca33 !important;\n}\n\n.lime-waves.waves-darken-1 .waves-ripple {\n background-color: #c0ca33 !important;\n}\n\n.lime.darken-2 {\n background-color: #afb42b !important;\n}\n\n.lime-text.text-darken-2 {\n color: #afb42b !important;\n}\n\n.lime-waves.waves-darken-2 .waves-ripple {\n background-color: #afb42b !important;\n}\n\n.lime.darken-3 {\n background-color: #9e9d24 !important;\n}\n\n.lime-text.text-darken-3 {\n color: #9e9d24 !important;\n}\n\n.lime-waves.waves-darken-3 .waves-ripple {\n background-color: #9e9d24 !important;\n}\n\n.lime.darken-4 {\n background-color: #827717 !important;\n}\n\n.lime-text.text-darken-4 {\n color: #827717 !important;\n}\n\n.lime-waves.waves-darken-4 .waves-ripple {\n background-color: #827717 !important;\n}\n\n.lime.accent-1 {\n background-color: #f4ff81 !important;\n}\n\n.lime-text.text-accent-1 {\n color: #f4ff81 !important;\n}\n\n.lime-waves.waves-accent-1 .waves-ripple {\n background-color: #f4ff81 !important;\n}\n\n.lime.accent-2 {\n background-color: #eeff41 !important;\n}\n\n.lime-text.text-accent-2 {\n color: #eeff41 !important;\n}\n\n.lime-waves.waves-accent-2 .waves-ripple {\n background-color: #eeff41 !important;\n}\n\n.lime.accent-3 {\n background-color: #c6ff00 !important;\n}\n\n.lime-text.text-accent-3 {\n color: #c6ff00 !important;\n}\n\n.lime-waves.waves-accent-3 .waves-ripple {\n background-color: #c6ff00 !important;\n}\n\n.lime.accent-4 {\n background-color: #aeea00 !important;\n}\n\n.lime-text.text-accent-4 {\n color: #aeea00 !important;\n}\n\n.lime-waves.waves-accent-4 .waves-ripple {\n background-color: #aeea00 !important;\n}\n\n.yellow {\n background-color: #ffeb3b !important;\n}\n\n.yellow-text {\n color: #ffeb3b !important;\n}\n\n.yellow-waves .waves-ripple {\n background-color: #ffeb3b !important;\n}\n\n.yellow.lighten-5 {\n background-color: #fffde7 !important;\n}\n\n.yellow-text.text-lighten-5 {\n color: #fffde7 !important;\n}\n\n.yellow-waves.waves-lighten-5 .waves-ripple {\n background-color: #fffde7 !important;\n}\n\n.yellow.lighten-4 {\n background-color: #fff9c4 !important;\n}\n\n.yellow-text.text-lighten-4 {\n color: #fff9c4 !important;\n}\n\n.yellow-waves.waves-lighten-4 .waves-ripple {\n background-color: #fff9c4 !important;\n}\n\n.yellow.lighten-3 {\n background-color: #fff59d !important;\n}\n\n.yellow-text.text-lighten-3 {\n color: #fff59d !important;\n}\n\n.yellow-waves.waves-lighten-3 .waves-ripple {\n background-color: #fff59d !important;\n}\n\n.yellow.lighten-2 {\n background-color: #fff176 !important;\n}\n\n.yellow-text.text-lighten-2 {\n color: #fff176 !important;\n}\n\n.yellow-waves.waves-lighten-2 .waves-ripple {\n background-color: #fff176 !important;\n}\n\n.yellow.lighten-1 {\n background-color: #ffee58 !important;\n}\n\n.yellow-text.text-lighten-1 {\n color: #ffee58 !important;\n}\n\n.yellow-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffee58 !important;\n}\n\n.yellow.darken-1 {\n background-color: #fdd835 !important;\n}\n\n.yellow-text.text-darken-1 {\n color: #fdd835 !important;\n}\n\n.yellow-waves.waves-darken-1 .waves-ripple {\n background-color: #fdd835 !important;\n}\n\n.yellow.darken-2 {\n background-color: #fbc02d !important;\n}\n\n.yellow-text.text-darken-2 {\n color: #fbc02d !important;\n}\n\n.yellow-waves.waves-darken-2 .waves-ripple {\n background-color: #fbc02d !important;\n}\n\n.yellow.darken-3 {\n background-color: #f9a825 !important;\n}\n\n.yellow-text.text-darken-3 {\n color: #f9a825 !important;\n}\n\n.yellow-waves.waves-darken-3 .waves-ripple {\n background-color: #f9a825 !important;\n}\n\n.yellow.darken-4 {\n background-color: #f57f17 !important;\n}\n\n.yellow-text.text-darken-4 {\n color: #f57f17 !important;\n}\n\n.yellow-waves.waves-darken-4 .waves-ripple {\n background-color: #f57f17 !important;\n}\n\n.yellow.accent-1 {\n background-color: #ffff8d !important;\n}\n\n.yellow-text.text-accent-1 {\n color: #ffff8d !important;\n}\n\n.yellow-waves.waves-accent-1 .waves-ripple {\n background-color: #ffff8d !important;\n}\n\n.yellow.accent-2 {\n background-color: #ffff00 !important;\n}\n\n.yellow-text.text-accent-2 {\n color: #ffff00 !important;\n}\n\n.yellow-waves.waves-accent-2 .waves-ripple {\n background-color: #ffff00 !important;\n}\n\n.yellow.accent-3 {\n background-color: #ffea00 !important;\n}\n\n.yellow-text.text-accent-3 {\n color: #ffea00 !important;\n}\n\n.yellow-waves.waves-accent-3 .waves-ripple {\n background-color: #ffea00 !important;\n}\n\n.yellow.accent-4 {\n background-color: #ffd600 !important;\n}\n\n.yellow-text.text-accent-4 {\n color: #ffd600 !important;\n}\n\n.yellow-waves.waves-accent-4 .waves-ripple {\n background-color: #ffd600 !important;\n}\n\n.amber {\n background-color: #ffc107 !important;\n}\n\n.amber-text {\n color: #ffc107 !important;\n}\n\n.amber-waves .waves-ripple {\n background-color: #ffc107 !important;\n}\n\n.amber.lighten-5 {\n background-color: #fff8e1 !important;\n}\n\n.amber-text.text-lighten-5 {\n color: #fff8e1 !important;\n}\n\n.amber-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff8e1 !important;\n}\n\n.amber.lighten-4 {\n background-color: #ffecb3 !important;\n}\n\n.amber-text.text-lighten-4 {\n color: #ffecb3 !important;\n}\n\n.amber-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffecb3 !important;\n}\n\n.amber.lighten-3 {\n background-color: #ffe082 !important;\n}\n\n.amber-text.text-lighten-3 {\n color: #ffe082 !important;\n}\n\n.amber-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffe082 !important;\n}\n\n.amber.lighten-2 {\n background-color: #ffd54f !important;\n}\n\n.amber-text.text-lighten-2 {\n color: #ffd54f !important;\n}\n\n.amber-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffd54f !important;\n}\n\n.amber.lighten-1 {\n background-color: #ffca28 !important;\n}\n\n.amber-text.text-lighten-1 {\n color: #ffca28 !important;\n}\n\n.amber-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffca28 !important;\n}\n\n.amber.darken-1 {\n background-color: #ffb300 !important;\n}\n\n.amber-text.text-darken-1 {\n color: #ffb300 !important;\n}\n\n.amber-waves.waves-darken-1 .waves-ripple {\n background-color: #ffb300 !important;\n}\n\n.amber.darken-2 {\n background-color: #ffa000 !important;\n}\n\n.amber-text.text-darken-2 {\n color: #ffa000 !important;\n}\n\n.amber-waves.waves-darken-2 .waves-ripple {\n background-color: #ffa000 !important;\n}\n\n.amber.darken-3 {\n background-color: #ff8f00 !important;\n}\n\n.amber-text.text-darken-3 {\n color: #ff8f00 !important;\n}\n\n.amber-waves.waves-darken-3 .waves-ripple {\n background-color: #ff8f00 !important;\n}\n\n.amber.darken-4 {\n background-color: #ff6f00 !important;\n}\n\n.amber-text.text-darken-4 {\n color: #ff6f00 !important;\n}\n\n.amber-waves.waves-darken-4 .waves-ripple {\n background-color: #ff6f00 !important;\n}\n\n.amber.accent-1 {\n background-color: #ffe57f !important;\n}\n\n.amber-text.text-accent-1 {\n color: #ffe57f !important;\n}\n\n.amber-waves.waves-accent-1 .waves-ripple {\n background-color: #ffe57f !important;\n}\n\n.amber.accent-2 {\n background-color: #ffd740 !important;\n}\n\n.amber-text.text-accent-2 {\n color: #ffd740 !important;\n}\n\n.amber-waves.waves-accent-2 .waves-ripple {\n background-color: #ffd740 !important;\n}\n\n.amber.accent-3 {\n background-color: #ffc400 !important;\n}\n\n.amber-text.text-accent-3 {\n color: #ffc400 !important;\n}\n\n.amber-waves.waves-accent-3 .waves-ripple {\n background-color: #ffc400 !important;\n}\n\n.amber.accent-4 {\n background-color: #ffab00 !important;\n}\n\n.amber-text.text-accent-4 {\n color: #ffab00 !important;\n}\n\n.amber-waves.waves-accent-4 .waves-ripple {\n background-color: #ffab00 !important;\n}\n\n.orange {\n background-color: #ff9800 !important;\n}\n\n.orange-text {\n color: #ff9800 !important;\n}\n\n.orange-waves .waves-ripple {\n background-color: #ff9800 !important;\n}\n\n.orange.lighten-5 {\n background-color: #fff3e0 !important;\n}\n\n.orange-text.text-lighten-5 {\n color: #fff3e0 !important;\n}\n\n.orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff3e0 !important;\n}\n\n.orange.lighten-4 {\n background-color: #ffe0b2 !important;\n}\n\n.orange-text.text-lighten-4 {\n color: #ffe0b2 !important;\n}\n\n.orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffe0b2 !important;\n}\n\n.orange.lighten-3 {\n background-color: #ffcc80 !important;\n}\n\n.orange-text.text-lighten-3 {\n color: #ffcc80 !important;\n}\n\n.orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffcc80 !important;\n}\n\n.orange.lighten-2 {\n background-color: #ffb74d !important;\n}\n\n.orange-text.text-lighten-2 {\n color: #ffb74d !important;\n}\n\n.orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffb74d !important;\n}\n\n.orange.lighten-1 {\n background-color: #ffa726 !important;\n}\n\n.orange-text.text-lighten-1 {\n color: #ffa726 !important;\n}\n\n.orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffa726 !important;\n}\n\n.orange.darken-1 {\n background-color: #fb8c00 !important;\n}\n\n.orange-text.text-darken-1 {\n color: #fb8c00 !important;\n}\n\n.orange-waves.waves-darken-1 .waves-ripple {\n background-color: #fb8c00 !important;\n}\n\n.orange.darken-2 {\n background-color: #f57c00 !important;\n}\n\n.orange-text.text-darken-2 {\n color: #f57c00 !important;\n}\n\n.orange-waves.waves-darken-2 .waves-ripple {\n background-color: #f57c00 !important;\n}\n\n.orange.darken-3 {\n background-color: #ef6c00 !important;\n}\n\n.orange-text.text-darken-3 {\n color: #ef6c00 !important;\n}\n\n.orange-waves.waves-darken-3 .waves-ripple {\n background-color: #ef6c00 !important;\n}\n\n.orange.darken-4 {\n background-color: #e65100 !important;\n}\n\n.orange-text.text-darken-4 {\n color: #e65100 !important;\n}\n\n.orange-waves.waves-darken-4 .waves-ripple {\n background-color: #e65100 !important;\n}\n\n.orange.accent-1 {\n background-color: #ffd180 !important;\n}\n\n.orange-text.text-accent-1 {\n color: #ffd180 !important;\n}\n\n.orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ffd180 !important;\n}\n\n.orange.accent-2 {\n background-color: #ffab40 !important;\n}\n\n.orange-text.text-accent-2 {\n color: #ffab40 !important;\n}\n\n.orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ffab40 !important;\n}\n\n.orange.accent-3 {\n background-color: #ff9100 !important;\n}\n\n.orange-text.text-accent-3 {\n color: #ff9100 !important;\n}\n\n.orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff9100 !important;\n}\n\n.orange.accent-4 {\n background-color: #ff6d00 !important;\n}\n\n.orange-text.text-accent-4 {\n color: #ff6d00 !important;\n}\n\n.orange-waves.waves-accent-4 .waves-ripple {\n background-color: #ff6d00 !important;\n}\n\n.deep-orange {\n background-color: #ff5722 !important;\n}\n\n.deep-orange-text {\n color: #ff5722 !important;\n}\n\n.deep-orange-waves .waves-ripple {\n background-color: #ff5722 !important;\n}\n\n.deep-orange.lighten-5 {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange-text.text-lighten-5 {\n color: #fbe9e7 !important;\n}\n\n.deep-orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange.lighten-4 {\n background-color: #ffccbc !important;\n}\n\n.deep-orange-text.text-lighten-4 {\n color: #ffccbc !important;\n}\n\n.deep-orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffccbc !important;\n}\n\n.deep-orange.lighten-3 {\n background-color: #ffab91 !important;\n}\n\n.deep-orange-text.text-lighten-3 {\n color: #ffab91 !important;\n}\n\n.deep-orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffab91 !important;\n}\n\n.deep-orange.lighten-2 {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange-text.text-lighten-2 {\n color: #ff8a65 !important;\n}\n\n.deep-orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange.lighten-1 {\n background-color: #ff7043 !important;\n}\n\n.deep-orange-text.text-lighten-1 {\n color: #ff7043 !important;\n}\n\n.deep-orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ff7043 !important;\n}\n\n.deep-orange.darken-1 {\n background-color: #f4511e !important;\n}\n\n.deep-orange-text.text-darken-1 {\n color: #f4511e !important;\n}\n\n.deep-orange-waves.waves-darken-1 .waves-ripple {\n background-color: #f4511e !important;\n}\n\n.deep-orange.darken-2 {\n background-color: #e64a19 !important;\n}\n\n.deep-orange-text.text-darken-2 {\n color: #e64a19 !important;\n}\n\n.deep-orange-waves.waves-darken-2 .waves-ripple {\n background-color: #e64a19 !important;\n}\n\n.deep-orange.darken-3 {\n background-color: #d84315 !important;\n}\n\n.deep-orange-text.text-darken-3 {\n color: #d84315 !important;\n}\n\n.deep-orange-waves.waves-darken-3 .waves-ripple {\n background-color: #d84315 !important;\n}\n\n.deep-orange.darken-4 {\n background-color: #bf360c !important;\n}\n\n.deep-orange-text.text-darken-4 {\n color: #bf360c !important;\n}\n\n.deep-orange-waves.waves-darken-4 .waves-ripple {\n background-color: #bf360c !important;\n}\n\n.deep-orange.accent-1 {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange-text.text-accent-1 {\n color: #ff9e80 !important;\n}\n\n.deep-orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange.accent-2 {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange-text.text-accent-2 {\n color: #ff6e40 !important;\n}\n\n.deep-orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange.accent-3 {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange-text.text-accent-3 {\n color: #ff3d00 !important;\n}\n\n.deep-orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange.accent-4 {\n background-color: #dd2c00 !important;\n}\n\n.deep-orange-text.text-accent-4 {\n color: #dd2c00 !important;\n}\n\n.deep-orange-waves.waves-accent-4 .waves-ripple {\n background-color: #dd2c00 !important;\n}\n\n.brown {\n background-color: #795548 !important;\n}\n\n.brown-text {\n color: #795548 !important;\n}\n\n.brown-waves .waves-ripple {\n background-color: #795548 !important;\n}\n\n.brown.lighten-5 {\n background-color: #efebe9 !important;\n}\n\n.brown-text.text-lighten-5 {\n color: #efebe9 !important;\n}\n\n.brown-waves.waves-lighten-5 .waves-ripple {\n background-color: #efebe9 !important;\n}\n\n.brown.lighten-4 {\n background-color: #d7ccc8 !important;\n}\n\n.brown-text.text-lighten-4 {\n color: #d7ccc8 !important;\n}\n\n.brown-waves.waves-lighten-4 .waves-ripple {\n background-color: #d7ccc8 !important;\n}\n\n.brown.lighten-3 {\n background-color: #bcaaa4 !important;\n}\n\n.brown-text.text-lighten-3 {\n color: #bcaaa4 !important;\n}\n\n.brown-waves.waves-lighten-3 .waves-ripple {\n background-color: #bcaaa4 !important;\n}\n\n.brown.lighten-2 {\n background-color: #a1887f !important;\n}\n\n.brown-text.text-lighten-2 {\n color: #a1887f !important;\n}\n\n.brown-waves.waves-lighten-2 .waves-ripple {\n background-color: #a1887f !important;\n}\n\n.brown.lighten-1 {\n background-color: #8d6e63 !important;\n}\n\n.brown-text.text-lighten-1 {\n color: #8d6e63 !important;\n}\n\n.brown-waves.waves-lighten-1 .waves-ripple {\n background-color: #8d6e63 !important;\n}\n\n.brown.darken-1 {\n background-color: #6d4c41 !important;\n}\n\n.brown-text.text-darken-1 {\n color: #6d4c41 !important;\n}\n\n.brown-waves.waves-darken-1 .waves-ripple {\n background-color: #6d4c41 !important;\n}\n\n.brown.darken-2 {\n background-color: #5d4037 !important;\n}\n\n.brown-text.text-darken-2 {\n color: #5d4037 !important;\n}\n\n.brown-waves.waves-darken-2 .waves-ripple {\n background-color: #5d4037 !important;\n}\n\n.brown.darken-3 {\n background-color: #4e342e !important;\n}\n\n.brown-text.text-darken-3 {\n color: #4e342e !important;\n}\n\n.brown-waves.waves-darken-3 .waves-ripple {\n background-color: #4e342e !important;\n}\n\n.brown.darken-4 {\n background-color: #3e2723 !important;\n}\n\n.brown-text.text-darken-4 {\n color: #3e2723 !important;\n}\n\n.brown-waves.waves-darken-4 .waves-ripple {\n background-color: #3e2723 !important;\n}\n\n.blue-grey {\n background-color: #607d8b !important;\n}\n\n.blue-grey-text {\n color: #607d8b !important;\n}\n\n.blue-grey-waves .waves-ripple {\n background-color: #607d8b !important;\n}\n\n.blue-grey.lighten-5 {\n background-color: #eceff1 !important;\n}\n\n.blue-grey-text.text-lighten-5 {\n color: #eceff1 !important;\n}\n\n.blue-grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #eceff1 !important;\n}\n\n.blue-grey.lighten-4 {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey-text.text-lighten-4 {\n color: #cfd8dc !important;\n}\n\n.blue-grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey.lighten-3 {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey-text.text-lighten-3 {\n color: #b0bec5 !important;\n}\n\n.blue-grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey.lighten-2 {\n background-color: #90a4ae !important;\n}\n\n.blue-grey-text.text-lighten-2 {\n color: #90a4ae !important;\n}\n\n.blue-grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #90a4ae !important;\n}\n\n.blue-grey.lighten-1 {\n background-color: #78909c !important;\n}\n\n.blue-grey-text.text-lighten-1 {\n color: #78909c !important;\n}\n\n.blue-grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #78909c !important;\n}\n\n.blue-grey.darken-1 {\n background-color: #546e7a !important;\n}\n\n.blue-grey-text.text-darken-1 {\n color: #546e7a !important;\n}\n\n.blue-grey-waves.waves-darken-1 .waves-ripple {\n background-color: #546e7a !important;\n}\n\n.blue-grey.darken-2 {\n background-color: #455a64 !important;\n}\n\n.blue-grey-text.text-darken-2 {\n color: #455a64 !important;\n}\n\n.blue-grey-waves.waves-darken-2 .waves-ripple {\n background-color: #455a64 !important;\n}\n\n.blue-grey.darken-3 {\n background-color: #37474f !important;\n}\n\n.blue-grey-text.text-darken-3 {\n color: #37474f !important;\n}\n\n.blue-grey-waves.waves-darken-3 .waves-ripple {\n background-color: #37474f !important;\n}\n\n.blue-grey.darken-4 {\n background-color: #263238 !important;\n}\n\n.blue-grey-text.text-darken-4 {\n color: #263238 !important;\n}\n\n.blue-grey-waves.waves-darken-4 .waves-ripple {\n background-color: #263238 !important;\n}\n\n.grey {\n background-color: #9e9e9e !important;\n}\n\n.grey-text {\n color: #9e9e9e !important;\n}\n\n.grey-waves .waves-ripple {\n background-color: #9e9e9e !important;\n}\n\n.grey.lighten-5 {\n background-color: #fafafa !important;\n}\n\n.grey-text.text-lighten-5 {\n color: #fafafa !important;\n}\n\n.grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #fafafa !important;\n}\n\n.grey.lighten-4 {\n background-color: #f5f5f5 !important;\n}\n\n.grey-text.text-lighten-4 {\n color: #f5f5f5 !important;\n}\n\n.grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #f5f5f5 !important;\n}\n\n.grey.lighten-3 {\n background-color: #eeeeee !important;\n}\n\n.grey-text.text-lighten-3 {\n color: #eeeeee !important;\n}\n\n.grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #eeeeee !important;\n}\n\n.grey.lighten-2 {\n background-color: #e0e0e0 !important;\n}\n\n.grey-text.text-lighten-2 {\n color: #e0e0e0 !important;\n}\n\n.grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #e0e0e0 !important;\n}\n\n.grey.lighten-1 {\n background-color: #bdbdbd !important;\n}\n\n.grey-text.text-lighten-1 {\n color: #bdbdbd !important;\n}\n\n.grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #bdbdbd !important;\n}\n\n.grey.darken-1 {\n background-color: #757575 !important;\n}\n\n.grey-text.text-darken-1 {\n color: #757575 !important;\n}\n\n.grey-waves.waves-darken-1 .waves-ripple {\n background-color: #757575 !important;\n}\n\n.grey.darken-2 {\n background-color: #616161 !important;\n}\n\n.grey-text.text-darken-2 {\n color: #616161 !important;\n}\n\n.grey-waves.waves-darken-2 .waves-ripple {\n background-color: #616161 !important;\n}\n\n.grey.darken-3 {\n background-color: #424242 !important;\n}\n\n.grey-text.text-darken-3 {\n color: #424242 !important;\n}\n\n.grey-waves.waves-darken-3 .waves-ripple {\n background-color: #424242 !important;\n}\n\n.grey.darken-4 {\n background-color: #212121 !important;\n}\n\n.grey-text.text-darken-4 {\n color: #212121 !important;\n}\n\n.grey-waves.waves-darken-4 .waves-ripple {\n background-color: #212121 !important;\n}\n\n.black {\n background-color: #000000 !important;\n}\n\n.black-text {\n color: #000000 !important;\n}\n\n.white {\n background-color: #ffffff !important;\n}\n\n.white-text {\n color: #ffffff !important;\n}\n\n.transparent {\n background-color: transparent !important;\n}\n\n.transparent-text {\n color: transparent !important;\n}\n\n/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\ncode[class*=language-],\npre[class*=language-] {\n color: white;\n background: none;\n font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace;\n text-align: left;\n text-shadow: 0 -0.1em 0.2em black;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\npre[class*=language-],\n:not(pre) > code[class*=language-] {\n background: hsl(0deg, 0%, 8%); /* #141414 */\n}\n\n/* Code blocks */\npre[class*=language-] {\n border-radius: 0.5em;\n border: 0.3em solid hsl(0deg, 0%, 33%); /* #282A2B */\n box-shadow: 1px 1px 0.5em black inset;\n margin: 0.5em 0;\n overflow: auto;\n padding: 1em;\n}\n\npre[class*=language-]::-moz-selection {\n /* Firefox */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\npre[class*=language-]::selection {\n /* Safari */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\n/* Text Selection colour */\npre[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection,\ncode[class*=language-]::-moz-selection, code[class*=language-] ::-moz-selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\npre[class*=language-]::selection, pre[class*=language-] ::selection,\ncode[class*=language-]::selection, code[class*=language-] ::selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\n/* Inline code */\n:not(pre) > code[class*=language-] {\n border-radius: 0.3em;\n border: 0.13em solid hsl(0deg, 0%, 33%); /* #545454 */\n box-shadow: 1px 1px 0.3em -0.1em black inset;\n padding: 0.15em 0.2em 0.05em;\n white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: hsl(0deg, 0%, 47%); /* #777777 */\n}\n\n.token.punctuation {\n opacity: 0.7;\n}\n\n.namespace {\n opacity: 0.7;\n}\n\n.token.tag,\n.token.boolean,\n.token.number,\n.token.deleted {\n color: hsl(14deg, 58%, 55%); /* #CF6A4C */\n}\n\n.token.keyword,\n.token.property,\n.token.selector,\n.token.constant,\n.token.symbol,\n.token.builtin {\n color: hsl(53deg, 89%, 79%); /* #F9EE98 */\n}\n\n.token.attr-name,\n.token.attr-value,\n.token.string,\n.token.char,\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable,\n.token.inserted {\n color: hsl(76deg, 21%, 52%); /* #8F9D6A */\n}\n\n.token.atrule {\n color: hsl(218deg, 22%, 55%); /* #7587A6 */\n}\n\n.token.regex,\n.token.important {\n color: hsl(42deg, 75%, 65%); /* #E9C062 */\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\npre[data-line] {\n padding: 1em 0 1em 3em;\n position: relative;\n}\n\n/* Markup */\n.language-markup .token.tag,\n.language-markup .token.attr-name,\n.language-markup .token.punctuation {\n color: hsl(33deg, 33%, 52%); /* #AC885B */\n}\n\n/* Make the tokens sit above the line highlight so the colours don't look faded. */\n.token {\n position: relative;\n z-index: 1;\n}\n\n.line-highlight {\n background: hsla(0deg, 0%, 33%, 0.25); /* #545454 */\n background: linear-gradient(to right, hsla(0deg, 0%, 33%, 0.1) 70%, hsla(0deg, 0%, 33%, 0)); /* #545454 */\n border-bottom: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n border-top: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n left: 0;\n line-height: inherit;\n margin-top: 0.75em; /* Same as .prism’s padding-top */\n padding: inherit 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n white-space: pre;\n z-index: 0;\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n background-color: hsl(215deg, 15%, 59%); /* #8794A6 */\n border-radius: 999px;\n box-shadow: 0 1px white;\n color: hsl(24deg, 20%, 95%); /* #F5F2F0 */\n content: attr(data-start);\n font: bold 65%/1.5 sans-serif;\n left: 0.6em;\n min-width: 1em;\n padding: 0 0.5em;\n position: absolute;\n text-align: center;\n text-shadow: none;\n top: 0.4em;\n vertical-align: 0.3em;\n}\n\n.line-highlight[data-end]:after {\n bottom: 0.4em;\n content: attr(data-end);\n top: auto;\n}\n\n.window {\n font-family: \"Ubuntu\", sans-serif;\n font-size: 17px;\n width: 600px;\n margin: 75px auto;\n background: #2c3e50;\n height: 350px;\n border-radius: 5px;\n display: relative;\n box-shadow: 10px 10px 10px #888888;\n}\n\n.afterclose {\n color: #34495e;\n display: none;\n text-align: center;\n}\n\n.open {\n color: #fff;\n padding: 15px;\n background: #2ecc71;\n border-radius: 4px;\n border: none;\n}\n\n.bash {\n width: 600px;\n background: #34495e;\n height: 310px;\n border-radius: 5px;\n top: 40px;\n display: absolute;\n color: #fff;\n text-align: left;\n}\n.bash .command::before {\n content: \"user@machine $ : \";\n color: #2ecc71;\n}\n.bash .resulta::before {\n content: \">>\";\n color: #2ecc71;\n}\n\n/* effected by controllers */\n.windowmax {\n width: 100%;\n margin: auto;\n background: #2c3e50;\n height: 1000px;\n border-radius: 5px;\n display: relative;\n}\n\n.windowmin {\n width: 300px;\n height: 45px;\n background: #2c3e50;\n border-radius: 5px;\n bottom: 0;\n position: fixed;\n}\n\n.bashmax {\n display: absolute;\n width: 100%;\n background: #34495e;\n height: 960px;\n border-radius: 5px;\n bottom: 0;\n color: #fff;\n}\n\n/* !--end--! */\n.buttons {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n float: right;\n margin: 13px 4px;\n border: none;\n}\n\n.close {\n background: #e74c3c;\n}\n\n.maximize {\n background: #f1c40f;\n}\n\n.minimize {\n background: #2ecc71;\n}\n\n.result {\n display: none;\n}\n\n.controls {\n height: 40px;\n top: 0;\n}\n\n.title {\n color: #fff;\n font-weight: bold;\n padding: 10px;\n}\n\n.material-tooltip {\n padding: 10px 8px;\n font-size: 1rem;\n z-index: 2000;\n border-radius: 2px;\n color: #fff;\n min-height: 36px;\n line-height: 120%;\n opacity: 0;\n position: absolute;\n text-align: center;\n max-width: calc(100% - 4px);\n overflow: hidden;\n left: 0;\n top: 0;\n pointer-events: none;\n visibility: hidden;\n background-color: #323232;\n}\n\n.backdrop {\n position: absolute;\n opacity: 0;\n height: 7px;\n width: 14px;\n border-radius: 0 0 50% 50%;\n background-color: #323232;\n z-index: -1;\n transform-origin: 50% 0%;\n visibility: hidden;\n}\n\n.shadow-0 {\n box-shadow: none !important;\n}\n\n/* 2dp elevation modified*/\n.shadow-1, nav, .dropdown-content, .card, .card-panel, .btn-floating, .btn, .btn-small, .btn-large, .collapsible {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n\n.shadow-1-half, .btn-floating:hover, .btn:hover, .btn-small:hover, .btn-large:hover {\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2);\n}\n\n/* 6dp elevation modified*/\n.shadow-2 {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* 12dp elevation modified*/\n.shadow-3 {\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\n}\n\n/* 16dp elevation */\n.shadow-4 {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.shadow-5, .modal {\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.invert-shadow-5 {\n box-shadow: 38px 0 0 0 rgba(0, 0, 0, 0.14), 46px 0 0 0 rgba(0, 0, 0, 0.12), 15px 0 0 0 rgba(0, 0, 0, 0.2);\n}\n\n.hoverable {\n transition: box-shadow 0.25s;\n}\n.hoverable:hover {\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n.waves-effect {\n position: relative;\n cursor: pointer;\n display: inline-block;\n overflow: hidden;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n z-index: 1;\n transition: 0.3s ease-out;\n}\n.waves-effect .waves-ripple {\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n opacity: 0;\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.7s ease-out;\n transition-property: transform, opacity;\n transform: scale(0);\n pointer-events: none;\n}\n.waves-effect.waves-light .waves-ripple {\n background-color: rgba(255, 255, 255, 0.45);\n}\n.waves-effect.waves-red .waves-ripple {\n background-color: rgba(244, 67, 54, 0.7);\n}\n.waves-effect.waves-yellow .waves-ripple {\n background-color: rgba(255, 235, 59, 0.7);\n}\n.waves-effect.waves-orange .waves-ripple {\n background-color: rgba(255, 152, 0, 0.7);\n}\n.waves-effect.waves-purple .waves-ripple {\n background-color: rgba(156, 39, 176, 0.7);\n}\n.waves-effect.waves-green .waves-ripple {\n background-color: rgba(76, 175, 80, 0.7);\n}\n.waves-effect.waves-teal .waves-ripple {\n background-color: rgba(0, 150, 136, 0.7);\n}\n.waves-effect input[type=button], .waves-effect input[type=reset], .waves-effect input[type=submit] {\n border: 0;\n font-style: normal;\n font-size: inherit;\n text-transform: inherit;\n background: none;\n}\n.waves-effect img {\n position: relative;\n z-index: -1;\n}\n\n.waves-notransition {\n transition: none !important;\n}\n\n.waves-circle {\n transform: translateZ(0);\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\n}\n\n.waves-input-wrapper {\n border-radius: 0.2em;\n vertical-align: bottom;\n}\n.waves-input-wrapper .waves-button-input {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n}\n\n.waves-circle {\n text-align: center;\n width: 2.5em;\n height: 2.5em;\n line-height: 2.5em;\n border-radius: 50%;\n -webkit-mask-image: none;\n}\n\n.waves-block {\n display: block;\n}\n\n/* Firefox Bug: link not triggered */\n.waves-effect .waves-ripple {\n z-index: -1;\n}\n\n.modal {\n position: fixed;\n left: 0;\n right: 0;\n background-color: #fafafa;\n padding: 0;\n max-height: 70%;\n width: 55%;\n margin: auto;\n overflow-y: auto;\n border-radius: 2px;\n will-change: top, opacity;\n}\n.modal:focus {\n outline: none;\n}\n@media only screen and (max-width : 992px) {\n .modal {\n width: 80%;\n }\n}\n.modal h1, .modal h2, .modal h3, .modal h4 {\n margin-top: 0;\n}\n.modal .modal-content {\n padding: 24px;\n}\n.modal .modal-close {\n cursor: pointer;\n}\n.modal .modal-footer {\n border-radius: 0 0 2px 2px;\n background-color: #fafafa;\n padding: 4px 6px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-footer .btn, .modal .modal-footer .btn-small, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {\n margin: 6px 0;\n}\n.modal .modal-header {\n border-radius: 2px 2px 0 0;\n background-color: #fafafa;\n padding: 6px 4px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-header .btn, .modal .modal-header .btn-small, .modal .modal-header .btn-large, .modal .modal-header .btn-flat {\n margin: 6px 0;\n}\n\n.modal-overlay {\n position: fixed;\n z-index: 999;\n top: -25%;\n left: 0;\n bottom: 0;\n right: 0;\n height: 125%;\n width: 100%;\n background: #000;\n display: none;\n will-change: opacity;\n}\n\n.modal.modal-fixed-footer {\n padding: 0;\n height: 70%;\n}\n.modal.modal-fixed-footer .modal-content {\n position: absolute;\n height: calc(100% - 56px);\n max-height: 100%;\n width: 100%;\n overflow-y: auto;\n}\n.modal.modal-fixed-footer .modal-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n position: absolute;\n bottom: 0;\n}\n\n.modal.bottom-sheet {\n top: auto;\n bottom: -100%;\n margin: 0;\n width: 100%;\n max-height: 45%;\n border-radius: 0;\n will-change: bottom, opacity;\n}\n\nhtml,\nbody,\n#root {\n margin: 0;\n height: 100%;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n}\n\nul:not(.browser-default) {\n padding-left: 0;\n list-style-type: none;\n}\nul:not(.browser-default) > li {\n list-style-type: none;\n}\n\na {\n color: #039be5;\n text-decoration: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n.w-100 {\n width: 100%;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center-align {\n text-align: center;\n}\n\n.v-center {\n display: flex;\n align-items: center;\n}\n\n.mb1 {\n margin-bottom: 10px;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.hover:hover {\n background-color: #ddd;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n\n.secondary-content {\n float: right;\n color: #26a69a;\n}\n\n.collapsible .collection {\n margin: 0;\n border: none;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n padding: 20px 0 20px 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n}\n.modal-overlay .innerform {\n max-width: 650px;\n}\n.modal-overlay .innerform form {\n overflow: hidden;\n}\n\n/*********************\n Media Query Classes\n**********************/\n@media only screen and (max-width : 600px) {\n .hide-on-small-only, .hide-on-small-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .hide-on-med-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .hide-on-med-and-up {\n display: none !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .hide-on-med-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .hide-on-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .hide-on-extra-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .show-on-extra-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .show-on-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .show-on-medium {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .show-on-small {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .show-on-medium-and-up {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .show-on-medium-and-down {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .center-on-small-only {\n text-align: center;\n }\n}\n\n/*******************\n Utility Classes\n*******************/\n.hide {\n display: none !important;\n}\n\n.left-align {\n text-align: left;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center, .center-align {\n text-align: center;\n}\n\n.left {\n float: left !important;\n}\n\n.right {\n float: right !important;\n}\n\n.no-select {\n user-select: none;\n}\n\n.circle {\n border-radius: 50%;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.truncate {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.no-padding {\n padding: 0 !important;\n}\n\nspan.badge {\n min-width: 3rem;\n padding: 0 6px;\n margin-left: 14px;\n text-align: center;\n font-size: 1rem;\n line-height: 22px;\n height: 22px;\n color: #757575;\n float: right;\n box-sizing: border-box;\n}\nspan.badge.new {\n font-weight: 300;\n font-size: 0.8rem;\n color: #fff;\n background-color: #26a69a;\n border-radius: 2px;\n}\nspan.badge.new:after {\n content: \" new\";\n}\nspan.badge[data-badge-caption]::after {\n content: \" \" attr(data-badge-caption);\n}\n\nnav ul a span.badge {\n display: inline-block;\n float: none;\n margin-left: 4px;\n line-height: 22px;\n height: 22px;\n -webkit-font-smoothing: auto;\n}\n\n.collection-item span.badge {\n margin-top: calc(0.75rem - 11px);\n}\n\n.collapsible span.badge {\n margin-left: auto;\n}\n\n.sidenav span.badge {\n margin-top: 11.5px;\n}\n\ntable span.badge {\n display: inline-block;\n float: none;\n margin-left: auto;\n}\n\n.chip {\n display: inline-block;\n height: 32px;\n font-size: 13px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.6);\n line-height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background-color: #e4e4e4;\n margin-bottom: 5px;\n margin-right: 5px;\n}\n.chip:focus {\n outline: none;\n background-color: #26a69a;\n color: #fff;\n}\n.chip > img {\n float: left;\n margin: 0 8px 0 -12px;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n}\n.chip .close {\n cursor: pointer;\n float: right;\n font-size: 16px;\n line-height: 32px;\n padding-left: 8px;\n}\n\n.chips {\n border: none;\n border-bottom: 1px solid #9e9e9e;\n box-shadow: none;\n margin: 0 0 8px 0;\n min-height: 45px;\n outline: none;\n transition: all 0.3s;\n}\n.chips.focus {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\n.chips:hover {\n cursor: text;\n}\n.chips .input {\n background: none;\n border: 0;\n color: rgba(0, 0, 0, 0.6);\n display: inline-block;\n font-size: 16px;\n height: 56px;\n line-height: 32px;\n outline: 0;\n margin: 0;\n padding: 0 !important;\n width: 120px !important;\n}\n.chips .input:focus {\n border: 0 !important;\n box-shadow: none !important;\n}\n.chips .autocomplete-content {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.prefix ~ .chips {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.chips:empty ~ label {\n font-size: 0.8rem;\n transform: translateY(-140%);\n}\n\n.collapsible {\n border-top: 1px solid #ddd;\n border-right: 1px solid #ddd;\n border-left: 1px solid #ddd;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n}\n\n.collapsible-header {\n display: flex;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n padding: 1rem;\n background-color: #fff;\n border-bottom: 1px solid #ddd;\n}\n.collapsible-header:focus {\n outline: 0;\n}\n.collapsible-header i {\n width: 2rem;\n font-size: 1.6rem;\n display: inline-block;\n text-align: center;\n margin-right: 1rem;\n}\n\n.keyboard-focused .collapsible-header:focus {\n background-color: #eee;\n}\n\n.collapsible-body {\n display: none;\n border-bottom: 1px solid #ddd;\n box-sizing: border-box;\n padding: 2rem;\n}\n\n.sidenav .collapsible,\n.sidenav.fixed .collapsible {\n border: none;\n box-shadow: none;\n}\n.sidenav .collapsible li,\n.sidenav.fixed .collapsible li {\n padding: 0;\n}\n.sidenav .collapsible-header,\n.sidenav.fixed .collapsible-header {\n background-color: transparent;\n border: none;\n line-height: inherit;\n height: inherit;\n padding: 0 15px;\n}\n.sidenav .collapsible-header:hover,\n.sidenav.fixed .collapsible-header:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav .collapsible-header i,\n.sidenav.fixed .collapsible-header i {\n line-height: inherit;\n}\n.sidenav .collapsible-body,\n.sidenav.fixed .collapsible-body {\n border: 0;\n background-color: #fff;\n}\n.sidenav .collapsible-body li a,\n.sidenav.fixed .collapsible-body li a {\n padding: 0 22.5px 0 30px;\n}\n\n.collapsible.popout {\n border: none;\n box-shadow: none;\n}\n.collapsible.popout > li {\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n margin: 0 24px;\n transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n}\n.collapsible.popout > li.active {\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n margin: 16px 0;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n.collection .secondary-content {\n float: right;\n color: #26a69a;\n}\n\nselect:focus {\n outline: 1px solid #c9f3ef;\n}\n\nbutton:focus {\n outline: none;\n background-color: #2ab7a9;\n}\n\nlabel {\n font-size: 0.8rem;\n color: #9e9e9e;\n}\n\n/* Text Inputs + Textarea\n ========================================================================== */\n/* Style Placeholders */\n::placeholder {\n color: #d1d1d1;\n}\n\n/* Text inputs */\ninput:not([type]),\ninput[type=text]:not(.browser-default),\ninput[type=password]:not(.browser-default),\ninput[type=email]:not(.browser-default),\ninput[type=url]:not(.browser-default),\ninput[type=time]:not(.browser-default),\ninput[type=date]:not(.browser-default),\ninput[type=datetime]:not(.browser-default),\ninput[type=datetime-local]:not(.browser-default),\ninput[type=tel]:not(.browser-default),\ninput[type=number]:not(.browser-default),\ninput[type=search]:not(.browser-default),\ntextarea.textarea {\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n border-radius: 0;\n outline: none;\n height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n box-shadow: none;\n box-sizing: content-box;\n transition: box-shadow 0.3s, border 0.3s;\n}\ninput:not([type]):disabled, input:not([type])[readonly=readonly],\ninput[type=text]:not(.browser-default):disabled,\ninput[type=text]:not(.browser-default)[readonly=readonly],\ninput[type=password]:not(.browser-default):disabled,\ninput[type=password]:not(.browser-default)[readonly=readonly],\ninput[type=email]:not(.browser-default):disabled,\ninput[type=email]:not(.browser-default)[readonly=readonly],\ninput[type=url]:not(.browser-default):disabled,\ninput[type=url]:not(.browser-default)[readonly=readonly],\ninput[type=time]:not(.browser-default):disabled,\ninput[type=time]:not(.browser-default)[readonly=readonly],\ninput[type=date]:not(.browser-default):disabled,\ninput[type=date]:not(.browser-default)[readonly=readonly],\ninput[type=datetime]:not(.browser-default):disabled,\ninput[type=datetime]:not(.browser-default)[readonly=readonly],\ninput[type=datetime-local]:not(.browser-default):disabled,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly],\ninput[type=tel]:not(.browser-default):disabled,\ninput[type=tel]:not(.browser-default)[readonly=readonly],\ninput[type=number]:not(.browser-default):disabled,\ninput[type=number]:not(.browser-default)[readonly=readonly],\ninput[type=search]:not(.browser-default):disabled,\ninput[type=search]:not(.browser-default)[readonly=readonly],\ntextarea.textarea:disabled,\ntextarea.textarea[readonly=readonly] {\n color: rgba(0, 0, 0, 0.42);\n border-bottom: 1px dotted rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):disabled + label, input:not([type])[readonly=readonly] + label,\ninput[type=text]:not(.browser-default):disabled + label,\ninput[type=text]:not(.browser-default)[readonly=readonly] + label,\ninput[type=password]:not(.browser-default):disabled + label,\ninput[type=password]:not(.browser-default)[readonly=readonly] + label,\ninput[type=email]:not(.browser-default):disabled + label,\ninput[type=email]:not(.browser-default)[readonly=readonly] + label,\ninput[type=url]:not(.browser-default):disabled + label,\ninput[type=url]:not(.browser-default)[readonly=readonly] + label,\ninput[type=time]:not(.browser-default):disabled + label,\ninput[type=time]:not(.browser-default)[readonly=readonly] + label,\ninput[type=date]:not(.browser-default):disabled + label,\ninput[type=date]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime]:not(.browser-default):disabled + label,\ninput[type=datetime]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime-local]:not(.browser-default):disabled + label,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly] + label,\ninput[type=tel]:not(.browser-default):disabled + label,\ninput[type=tel]:not(.browser-default)[readonly=readonly] + label,\ninput[type=number]:not(.browser-default):disabled + label,\ninput[type=number]:not(.browser-default)[readonly=readonly] + label,\ninput[type=search]:not(.browser-default):disabled + label,\ninput[type=search]:not(.browser-default)[readonly=readonly] + label,\ntextarea.textarea:disabled + label,\ntextarea.textarea[readonly=readonly] + label {\n color: rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):focus:not([readonly]),\ninput[type=text]:not(.browser-default):focus:not([readonly]),\ninput[type=password]:not(.browser-default):focus:not([readonly]),\ninput[type=email]:not(.browser-default):focus:not([readonly]),\ninput[type=url]:not(.browser-default):focus:not([readonly]),\ninput[type=time]:not(.browser-default):focus:not([readonly]),\ninput[type=date]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]),\ninput[type=tel]:not(.browser-default):focus:not([readonly]),\ninput[type=number]:not(.browser-default):focus:not([readonly]),\ninput[type=search]:not(.browser-default):focus:not([readonly]),\ntextarea.textarea:focus:not([readonly]) {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\ninput:not([type]):focus:not([readonly]) + label,\ninput[type=text]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=password]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=email]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=url]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=time]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=date]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=tel]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=number]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=search]:not(.browser-default):focus:not([readonly]) + label,\ntextarea.textarea:focus:not([readonly]) + label {\n color: #26a69a;\n}\ninput:not([type]):focus.valid ~ label,\ninput[type=text]:not(.browser-default):focus.valid ~ label,\ninput[type=password]:not(.browser-default):focus.valid ~ label,\ninput[type=email]:not(.browser-default):focus.valid ~ label,\ninput[type=url]:not(.browser-default):focus.valid ~ label,\ninput[type=time]:not(.browser-default):focus.valid ~ label,\ninput[type=date]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ label,\ninput[type=tel]:not(.browser-default):focus.valid ~ label,\ninput[type=number]:not(.browser-default):focus.valid ~ label,\ninput[type=search]:not(.browser-default):focus.valid ~ label,\ntextarea.textarea:focus.valid ~ label {\n color: #4caf50;\n}\ninput:not([type]):focus.invalid ~ label,\ninput[type=text]:not(.browser-default):focus.invalid ~ label,\ninput[type=password]:not(.browser-default):focus.invalid ~ label,\ninput[type=email]:not(.browser-default):focus.invalid ~ label,\ninput[type=url]:not(.browser-default):focus.invalid ~ label,\ninput[type=time]:not(.browser-default):focus.invalid ~ label,\ninput[type=date]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ label,\ninput[type=tel]:not(.browser-default):focus.invalid ~ label,\ninput[type=number]:not(.browser-default):focus.invalid ~ label,\ninput[type=search]:not(.browser-default):focus.invalid ~ label,\ntextarea.textarea:focus.invalid ~ label {\n color: #f44336;\n}\ninput:not([type]).validate + label,\ninput[type=text]:not(.browser-default).validate + label,\ninput[type=password]:not(.browser-default).validate + label,\ninput[type=email]:not(.browser-default).validate + label,\ninput[type=url]:not(.browser-default).validate + label,\ninput[type=time]:not(.browser-default).validate + label,\ninput[type=date]:not(.browser-default).validate + label,\ninput[type=datetime]:not(.browser-default).validate + label,\ninput[type=datetime-local]:not(.browser-default).validate + label,\ninput[type=tel]:not(.browser-default).validate + label,\ninput[type=number]:not(.browser-default).validate + label,\ninput[type=search]:not(.browser-default).validate + label,\ntextarea.textarea.validate + label {\n width: 100%;\n}\n/* Validation Sass Placeholders */\n.select-wrapper.valid > input.select-dropdown, input:not([type]).valid, input:not([type]):focus.valid,\ninput[type=text]:not(.browser-default).valid,\ninput[type=text]:not(.browser-default):focus.valid,\ninput[type=password]:not(.browser-default).valid,\ninput[type=password]:not(.browser-default):focus.valid,\ninput[type=email]:not(.browser-default).valid,\ninput[type=email]:not(.browser-default):focus.valid,\ninput[type=url]:not(.browser-default).valid,\ninput[type=url]:not(.browser-default):focus.valid,\ninput[type=time]:not(.browser-default).valid,\ninput[type=time]:not(.browser-default):focus.valid,\ninput[type=date]:not(.browser-default).valid,\ninput[type=date]:not(.browser-default):focus.valid,\ninput[type=datetime]:not(.browser-default).valid,\ninput[type=datetime]:not(.browser-default):focus.valid,\ninput[type=datetime-local]:not(.browser-default).valid,\ninput[type=datetime-local]:not(.browser-default):focus.valid,\ninput[type=tel]:not(.browser-default).valid,\ninput[type=tel]:not(.browser-default):focus.valid,\ninput[type=number]:not(.browser-default).valid,\ninput[type=number]:not(.browser-default):focus.valid,\ninput[type=search]:not(.browser-default).valid,\ninput[type=search]:not(.browser-default):focus.valid,\ntextarea.textarea.valid,\ntextarea.textarea:focus.valid {\n border-bottom: 1px solid #4caf50;\n box-shadow: 0 1px 0 0 #4caf50;\n}\n\n.select-wrapper.invalid > input.select-dropdown, .select-wrapper.invalid > input.select-dropdown:focus, input:not([type]).invalid, input:not([type]):focus.invalid,\ninput[type=text]:not(.browser-default).invalid,\ninput[type=text]:not(.browser-default):focus.invalid,\ninput[type=password]:not(.browser-default).invalid,\ninput[type=password]:not(.browser-default):focus.invalid,\ninput[type=email]:not(.browser-default).invalid,\ninput[type=email]:not(.browser-default):focus.invalid,\ninput[type=url]:not(.browser-default).invalid,\ninput[type=url]:not(.browser-default):focus.invalid,\ninput[type=time]:not(.browser-default).invalid,\ninput[type=time]:not(.browser-default):focus.invalid,\ninput[type=date]:not(.browser-default).invalid,\ninput[type=date]:not(.browser-default):focus.invalid,\ninput[type=datetime]:not(.browser-default).invalid,\ninput[type=datetime]:not(.browser-default):focus.invalid,\ninput[type=datetime-local]:not(.browser-default).invalid,\ninput[type=datetime-local]:not(.browser-default):focus.invalid,\ninput[type=tel]:not(.browser-default).invalid,\ninput[type=tel]:not(.browser-default):focus.invalid,\ninput[type=number]:not(.browser-default).invalid,\ninput[type=number]:not(.browser-default):focus.invalid,\ninput[type=search]:not(.browser-default).invalid,\ninput[type=search]:not(.browser-default):focus.invalid,\ntextarea.textarea.invalid,\ntextarea.textarea:focus.invalid {\n border-bottom: 1px solid #f44336;\n box-shadow: 0 1px 0 0 #f44336;\n}\n\n.select-wrapper.valid .helper-text[data-success], .select-wrapper.invalid ~ .helper-text[data-error], input:not([type]).valid ~ .helper-text[data-success], input:not([type]):focus.valid ~ .helper-text[data-success], input:not([type]).invalid ~ .helper-text[data-error], input:not([type]):focus.invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ntextarea.textarea.valid ~ .helper-text[data-success],\ntextarea.textarea:focus.valid ~ .helper-text[data-success],\ntextarea.textarea.invalid ~ .helper-text[data-error],\ntextarea.textarea:focus.invalid ~ .helper-text[data-error] {\n color: transparent;\n user-select: none;\n pointer-events: none;\n}\n\n.select-wrapper.valid ~ .helper-text:after, input:not([type]).valid ~ .helper-text:after, input:not([type]):focus.valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,\ntextarea.textarea.valid ~ .helper-text:after,\ntextarea.textarea:focus.valid ~ .helper-text:after {\n content: attr(data-success);\n color: #4caf50;\n}\n\n.select-wrapper.invalid ~ .helper-text:after, input:not([type]).invalid ~ .helper-text:after, input:not([type]):focus.invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,\ntextarea.textarea.invalid ~ .helper-text:after,\ntextarea.textarea:focus.invalid ~ .helper-text:after {\n content: attr(data-error);\n color: #f44336;\n}\n\n.select-wrapper + label:after, input:not([type]) + label:after,\ninput[type=text]:not(.browser-default) + label:after,\ninput[type=password]:not(.browser-default) + label:after,\ninput[type=email]:not(.browser-default) + label:after,\ninput[type=url]:not(.browser-default) + label:after,\ninput[type=time]:not(.browser-default) + label:after,\ninput[type=date]:not(.browser-default) + label:after,\ninput[type=datetime]:not(.browser-default) + label:after,\ninput[type=datetime-local]:not(.browser-default) + label:after,\ninput[type=tel]:not(.browser-default) + label:after,\ninput[type=number]:not(.browser-default) + label:after,\ninput[type=search]:not(.browser-default) + label:after,\ntextarea.textarea + label:after {\n display: block;\n content: \"\";\n position: absolute;\n top: 100%;\n left: 0;\n opacity: 0;\n transition: 0.2s opacity ease-out, 0.2s color ease-out;\n}\n\n.input-field {\n position: relative;\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.input-field.inline {\n display: inline-block;\n vertical-align: middle;\n margin-left: 5px;\n}\n.input-field.inline input,\n.input-field.inline .select-dropdown {\n margin-bottom: 1rem;\n}\n.input-field.col label {\n left: 0.5rem;\n}\n.input-field.col .prefix ~ label,\n.input-field.col .prefix ~ .validate ~ label {\n width: calc(100% - 3rem - 1rem);\n}\n.input-field > label {\n color: #9e9e9e;\n position: absolute;\n top: 0;\n left: 0;\n font-size: 1rem;\n cursor: text;\n transition: transform 0.2s ease-out, color 0.2s ease-out;\n transform-origin: 0% 100%;\n text-align: initial;\n transform: translateY(12px);\n}\n.input-field > label:not(.label-icon).active {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type=search]) + label, .input-field > input[type=date]:not(.browser-default) + label, .input-field > input[type=time]:not(.browser-default) + label {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field .helper-text {\n position: relative;\n min-height: 18px;\n display: block;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.54);\n}\n.input-field .helper-text::after {\n opacity: 1;\n position: absolute;\n top: 0;\n left: 0;\n}\n.input-field .prefix {\n position: absolute;\n width: 56px;\n font-size: 2rem;\n transition: color 0.2s;\n}\n.input-field .prefix.active {\n color: #26a69a;\n}\n.input-field .prefix ~ input,\n.input-field .prefix ~ textarea,\n.input-field .prefix ~ label,\n.input-field .prefix ~ .validate ~ label,\n.input-field .prefix ~ .helper-text,\n.input-field .prefix ~ .autocomplete-content {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n.input-field .prefix ~ label {\n margin-left: 3rem;\n}\n@media only screen and (max-width : 992px) {\n .input-field .prefix ~ input {\n width: 86%;\n width: calc(100% - 3rem);\n }\n}\n@media only screen and (max-width : 600px) {\n .input-field .prefix ~ input {\n width: 80%;\n width: calc(100% - 3rem);\n }\n}\n\n/* Search Field */\n.input-field input[type=search] {\n display: block;\n line-height: inherit;\n transition: 0.3s background-color;\n}\n.nav-wrapper .input-field input[type=search] {\n height: inherit;\n padding-left: 4rem;\n width: calc(100% - 4rem);\n border: 0;\n box-shadow: none;\n}\n.input-field input[type=search]:focus:not(.browser-default) {\n background-color: #fff;\n border: 0;\n box-shadow: none;\n color: #444;\n}\n.input-field input[type=search]:focus:not(.browser-default) + label i, .input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, .input-field input[type=search]:focus:not(.browser-default) ~ .material-icons {\n color: #444;\n}\n.input-field input[type=search] + .label-icon {\n transform: none;\n left: 1rem;\n}\n.input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons {\n position: absolute;\n top: 0;\n right: 1rem;\n color: transparent;\n cursor: pointer;\n font-size: 2rem;\n transition: 0.3s color;\n}\n\n/* Textarea */\ntextarea {\n width: 100%;\n height: 56px;\n background-color: transparent;\n}\ntextarea.textarea {\n line-height: normal;\n overflow-y: hidden; /* prevents scroll bar flash */\n padding: 0.8rem 0 0.8rem 0; /* prevents text jump on Enter keypress */\n resize: none;\n min-height: 56px;\n box-sizing: border-box;\n}\n\n.hiddendiv {\n visibility: hidden;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\n position: absolute;\n top: 0;\n z-index: -1;\n}\n\n/* Autocomplete */\n.autocomplete-content li .highlight {\n color: #444;\n}\n.autocomplete-content li img {\n margin: 5px 15px;\n}\n\n/* Character Counter */\n.character-counter {\n min-height: 18px;\n}\n\n/* Radio Buttons\n ========================================================================== */\n[type=radio]:not(:checked),\n[type=radio]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=radio]:not(:checked) + span,\n[type=radio]:checked + span {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n transition: 0.28s ease;\n user-select: none;\n}\n\n[type=radio] + span:before,\n[type=radio] + span:after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n margin: 4px;\n width: 16px;\n height: 16px;\n z-index: 0;\n transition: 0.28s ease;\n}\n\n/* Unchecked styles */\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after,\n[type=radio]:checked + span:before,\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border-radius: 50%;\n}\n\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after {\n border: 2px solid #5a5a5a;\n}\n\n[type=radio]:not(:checked) + span:after {\n transform: scale(0);\n}\n\n/* Checked styles */\n[type=radio]:checked + span:before {\n border: 2px solid transparent;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border: 2px solid #26a69a;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:after {\n background-color: #26a69a;\n}\n\n[type=radio]:checked + span:after {\n transform: scale(1.02);\n}\n\n/* Radio With gap */\n[type=radio].with-gap:checked + span:after {\n transform: scale(0.5);\n}\n\n/* Focused styles */\n[type=radio].tabbed:focus + span:before {\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n/* Disabled Radio With gap */\n[type=radio].with-gap:disabled:checked + span:before {\n border: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n[type=radio].with-gap:disabled:checked + span:after {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n\n/* Disabled style */\n[type=radio]:disabled:not(:checked) + span:before,\n[type=radio]:disabled:checked + span:before {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled + span {\n color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:not(:checked) + span:before {\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:checked + span:after {\n background-color: rgba(0, 0, 0, 0.42);\n border-color: #949494;\n}\n\n/* Checkboxes\n ========================================================================== */\n/* Remove default checkbox */\n[type=checkbox]:not(:checked),\n[type=checkbox]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=checkbox] {\n /* checkbox aspect */\n}\n[type=checkbox] + span:not(.lever) {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n user-select: none;\n}\n[type=checkbox] + span:not(.lever):before, [type=checkbox]:not(.filled-in) + span:not(.lever):after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 18px;\n z-index: 0;\n border: 2px solid #5a5a5a;\n border-radius: 1px;\n margin-top: 3px;\n transition: 0.2s;\n}\n[type=checkbox]:not(.filled-in) + span:not(.lever):after {\n border: 0;\n transform: scale(0);\n}\n[type=checkbox]:not(:checked):disabled + span:not(.lever):before {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n[type=checkbox].tabbed:focus + span:not(.lever):after {\n transform: scale(1);\n border: 0;\n border-radius: 50%;\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n[type=checkbox]:checked + span:not(.lever):before {\n top: -4px;\n left: -5px;\n width: 12px;\n height: 22px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #26a69a;\n border-bottom: 2px solid #26a69a;\n transform: rotate(40deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:checked:disabled + span:before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n border-bottom: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n/* Indeterminate checkbox */\n[type=checkbox]:indeterminate + span:not(.lever):before {\n top: -11px;\n left: -12px;\n width: 10px;\n height: 22px;\n border-top: none;\n border-left: none;\n border-right: 2px solid #26a69a;\n border-bottom: none;\n transform: rotate(90deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:indeterminate:disabled + span:not(.lever):before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n background-color: transparent;\n}\n\n[type=checkbox].filled-in + span:not(.lever):after {\n border-radius: 2px;\n}\n[type=checkbox].filled-in + span:not(.lever):before,\n[type=checkbox].filled-in + span:not(.lever):after {\n content: \"\";\n left: 0;\n position: absolute;\n /* .1s delay is for check animation */\n transition: border 0.25s, background-color 0.25s, width 0.2s 0.1s, height 0.2s 0.1s, top 0.2s 0.1s, left 0.2s 0.1s;\n z-index: 1;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):before {\n width: 0;\n height: 0;\n border: 3px solid transparent;\n left: 6px;\n top: 10px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):after {\n height: 20px;\n width: 20px;\n background-color: transparent;\n border: 2px solid #5a5a5a;\n top: 0px;\n z-index: 0;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):before {\n top: 0;\n left: 1px;\n width: 8px;\n height: 13px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #fff;\n border-bottom: 2px solid #fff;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):after {\n top: 0;\n width: 20px;\n height: 20px;\n border: 2px solid #26a69a;\n background-color: #26a69a;\n z-index: 0;\n}\n[type=checkbox].filled-in.tabbed:focus + span:not(.lever):after {\n border-radius: 2px;\n border-color: #5a5a5a;\n background-color: rgba(0, 0, 0, 0.1);\n}\n[type=checkbox].filled-in.tabbed:checked:focus + span:not(.lever):after {\n border-radius: 2px;\n background-color: #26a69a;\n border-color: #26a69a;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):before {\n background-color: transparent;\n border: 2px solid transparent;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):after {\n border-color: transparent;\n background-color: #949494;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):before {\n background-color: transparent;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):after {\n background-color: #949494;\n border-color: #949494;\n}\n\n/* Switch\n ========================================================================== */\n.switch,\n.switch * {\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n\n.switch label {\n cursor: pointer;\n}\n\n.switch label input[type=checkbox] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n.switch label input[type=checkbox]:checked + .lever {\n background-color: #84c7c1;\n}\n.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after {\n left: 18px;\n}\n.switch label input[type=checkbox]:checked + .lever:after {\n background-color: #26a69a;\n}\n\n.switch label .lever {\n content: \"\";\n display: inline-block;\n position: relative;\n width: 36px;\n height: 14px;\n background-color: rgba(0, 0, 0, 0.38);\n border-radius: 15px;\n transition: background 0.3s ease;\n vertical-align: middle;\n margin: 0 16px;\n}\n.switch label .lever:before, .switch label .lever:after {\n content: \"\";\n position: absolute;\n display: inline-block;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -3px;\n transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease, transform 0.1s ease;\n}\n.switch label .lever:before {\n background-color: rgba(38, 166, 154, 0.15);\n}\n.switch label .lever:after {\n background-color: #F1F1F1;\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(38, 166, 154, 0.15);\n}\n\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.switch input[type=checkbox][disabled] + .lever {\n cursor: default;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.switch label input[type=checkbox][disabled] + .lever:after,\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\n background-color: #949494;\n}\n\n/* Select Field\n ========================================================================== */\nselect {\n display: none;\n}\n\nselect.browser-default {\n display: block;\n}\n\nselect {\n background-color: rgba(255, 255, 255, 0.9);\n width: 100%;\n padding: 5px;\n border: 1px solid #f2f2f2;\n border-radius: 2px;\n height: 56px;\n}\n\n.select-label {\n position: absolute;\n}\n\n.select-wrapper {\n position: relative;\n}\n.select-wrapper.valid + label, .select-wrapper.invalid + label {\n width: 100%;\n pointer-events: none;\n}\n.select-wrapper input.select-dropdown {\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n outline: none;\n height: 56px;\n line-height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n display: block;\n user-select: none;\n z-index: 1;\n}\n.select-wrapper input.select-dropdown:focus {\n border-bottom: 1px solid #26a69a;\n}\n.select-wrapper .caret {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto 0;\n z-index: 0;\n fill: rgba(0, 0, 0, 0.87);\n}\n.select-wrapper + label {\n position: absolute;\n top: -26px;\n font-size: 0.8rem;\n}\n\nselect:disabled {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper.disabled + label {\n color: rgba(0, 0, 0, 0.42);\n}\n.select-wrapper.disabled .caret {\n fill: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper input.select-dropdown:disabled {\n color: rgba(0, 0, 0, 0.42);\n cursor: default;\n user-select: none;\n}\n\n.select-wrapper i {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.select-dropdown li.disabled,\n.select-dropdown li.disabled > span,\n.select-dropdown li.optgroup {\n color: rgba(0, 0, 0, 0.3);\n background-color: transparent;\n}\n\nbody.keyboard-focused .select-dropdown.dropdown-content li:focus {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.select-dropdown.dropdown-content li:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n.select-dropdown.dropdown-content li.selected {\n background-color: rgba(0, 0, 0, 0.03);\n}\n\n.prefix ~ .select-wrapper {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.prefix ~ label {\n margin-left: 3rem;\n}\n\n.select-dropdown li img {\n margin: 5px 15px;\n float: right;\n}\n\n.select-dropdown li.optgroup.selected > span {\n color: rgba(0, 0, 0, 0.7);\n}\n.select-dropdown li.optgroup > span {\n color: rgba(0, 0, 0, 0.4);\n}\n.select-dropdown li.optgroup ~ li.optgroup-option {\n padding-left: 1rem;\n}\n\n/* File Input\n ========================================================================== */\n.file-field {\n position: relative;\n}\n.file-field .file-path-wrapper {\n overflow: hidden;\n padding-left: 10px;\n}\n.file-field input.file-path {\n width: 100%;\n}\n.file-field .btn, .file-field .btn-small, .file-field .btn-large {\n float: left;\n height: 56px;\n line-height: 56px;\n}\n.file-field span {\n cursor: pointer;\n}\n.file-field input[type=file] {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.file-field input[type=file]::-webkit-file-upload-button {\n display: none;\n}\n\n/* Range\n ========================================================================== */\n.range-field {\n position: relative;\n}\n\ninput[type=range],\ninput[type=range] + .thumb {\n cursor: pointer;\n}\n\ninput[type=range] {\n position: relative;\n background-color: transparent;\n border: none;\n outline: none;\n width: 100%;\n margin: 15px 0;\n padding: 0;\n}\ninput[type=range]:focus {\n outline: none;\n}\n\ninput[type=range] + .thumb {\n position: absolute;\n top: 10px;\n left: 0;\n border: none;\n height: 0;\n width: 0;\n border-radius: 50%;\n background-color: #26a69a;\n margin-left: 7px;\n transform-origin: 50% 50%;\n transform: rotate(-45deg);\n}\ninput[type=range] + .thumb .value {\n display: block;\n width: 30px;\n text-align: center;\n color: #26a69a;\n font-size: 0;\n transform: rotate(45deg);\n}\ninput[type=range] + .thumb.active {\n border-radius: 50% 50% 50% 0;\n}\ninput[type=range] + .thumb.active .value {\n color: #fff;\n margin-left: -1px;\n margin-top: 8px;\n font-size: 10px;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n -webkit-appearance: none;\n background-color: #26a69a;\n transform-origin: 50% 50%;\n margin: -5px 0 0 0;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range] {\n /* fix for FF unable to apply focus style bug */\n border: 1px solid white;\n /*required for proper track sizing in FF*/\n}\n\ninput[type=range]::-moz-range-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-moz-focus-inner {\n border: 0;\n}\n\ninput[type=range]::-moz-range-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n margin-top: -5px;\n}\n\ninput[type=range]:-moz-focusring {\n outline: 1px solid #fff;\n outline-offset: -1px;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range]::-ms-track {\n height: 3px;\n background: transparent;\n border-color: transparent;\n border-width: 6px 0;\n /*remove default tick marks*/\n color: transparent;\n}\n\ninput[type=range]::-ms-fill-lower {\n background: #777;\n}\n\ninput[type=range]::-ms-fill-upper {\n background: #ddd;\n}\n\ninput[type=range]::-ms-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\n.parallax {\n /* Set a specific height */\n min-height: 500px;\n /* Create the parallax scrolling effect */\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n}\n\n.scene {\n width: 200px;\n height: 200px;\n border: 1px solid #CCC;\n margin: 80px;\n perspective: 400px;\n}\n\n.cube {\n width: 200px;\n height: 200px;\n position: relative;\n transform-style: preserve-3d;\n transform: translateZ(-400px);\n transition: transform 1s;\n}\n\n.cube.show-front {\n transform: translateZ(-10px) rotateY(0deg);\n}\n\n.cube.show-right {\n transform: translateZ(-10px) rotateY(-90deg);\n}\n\n.cube.show-back {\n transform: translateZ(-10px) rotateY(-180deg);\n}\n\n.cube.show-left {\n transform: translateZ(-10px) rotateY(90deg);\n}\n\n.cube.show-top {\n transform: translateZ(-10px) rotateX(-90deg);\n}\n\n.cube.show-bottom {\n transform: translateZ(-10px) rotateX(90deg);\n}\n\n.cube__face {\n position: absolute;\n width: 200px;\n height: 200px;\n border: 2px solid black;\n line-height: 200px;\n font-size: 40px;\n font-weight: bold;\n color: white;\n text-align: center;\n}\n\n.cube__face--front {\n background: hsla(0deg, 100%, 50%, 0.7);\n}\n\n.cube__face--right {\n background: hsla(60deg, 100%, 50%, 0.7);\n}\n\n.cube__face--back {\n background: hsla(120deg, 100%, 50%, 0.7);\n}\n\n.cube__face--left {\n background: hsla(180deg, 100%, 50%, 0.7);\n}\n\n.cube__face--top {\n background: hsla(240deg, 100%, 50%, 0.7);\n}\n\n.cube__face--bottom {\n background: hsla(300deg, 100%, 50%, 0.7);\n}\n\n.cube__face--front {\n transform: rotateY(0deg) translateZ(100px);\n}\n\n.cube__face--right {\n transform: rotateY(90deg) translateZ(100px);\n}\n\n.cube__face--back {\n transform: rotateY(180deg) translateZ(100px);\n}\n\n.cube__face--left {\n transform: rotateY(-90deg) translateZ(100px);\n}\n\n.cube__face--top {\n transform: rotateX(90deg) translateZ(100px);\n}\n\n.cube__face--bottom {\n transform: rotateX(-90deg) translateZ(100px);\n}\n\nlabel {\n margin-right: 10px;\n}\n\n.container {\n margin: 0 auto;\n max-width: 1280px;\n width: 90%;\n}\n\n@media only screen and (min-width : 601px) {\n .container {\n width: 85%;\n }\n}\n@media only screen and (min-width : 993px) {\n .container {\n width: 70%;\n }\n}\n.col .row {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n\n.section {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.section.no-pad {\n padding: 0;\n}\n.section.no-pad-bot {\n padding-bottom: 0;\n}\n.section.no-pad-top {\n padding-top: 0;\n}\n\n.row {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 20px;\n}\n.row:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.row .col {\n float: left;\n box-sizing: border-box;\n padding: 0 0.5rem;\n min-height: 1px;\n}\n.row .col[class*=push-], .row .col[class*=pull-] {\n position: relative;\n}\n.row .col.s1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.offset-s1 {\n margin-left: 8.3333333333%;\n}\n.row .col.pull-s1 {\n right: 8.3333333333%;\n}\n.row .col.push-s1 {\n left: 8.3333333333%;\n}\n.row .col.offset-s2 {\n margin-left: 16.6666666667%;\n}\n.row .col.pull-s2 {\n right: 16.6666666667%;\n}\n.row .col.push-s2 {\n left: 16.6666666667%;\n}\n.row .col.offset-s3 {\n margin-left: 25%;\n}\n.row .col.pull-s3 {\n right: 25%;\n}\n.row .col.push-s3 {\n left: 25%;\n}\n.row .col.offset-s4 {\n margin-left: 33.3333333333%;\n}\n.row .col.pull-s4 {\n right: 33.3333333333%;\n}\n.row .col.push-s4 {\n left: 33.3333333333%;\n}\n.row .col.offset-s5 {\n margin-left: 41.6666666667%;\n}\n.row .col.pull-s5 {\n right: 41.6666666667%;\n}\n.row .col.push-s5 {\n left: 41.6666666667%;\n}\n.row .col.offset-s6 {\n margin-left: 50%;\n}\n.row .col.pull-s6 {\n right: 50%;\n}\n.row .col.push-s6 {\n left: 50%;\n}\n.row .col.offset-s7 {\n margin-left: 58.3333333333%;\n}\n.row .col.pull-s7 {\n right: 58.3333333333%;\n}\n.row .col.push-s7 {\n left: 58.3333333333%;\n}\n.row .col.offset-s8 {\n margin-left: 66.6666666667%;\n}\n.row .col.pull-s8 {\n right: 66.6666666667%;\n}\n.row .col.push-s8 {\n left: 66.6666666667%;\n}\n.row .col.offset-s9 {\n margin-left: 75%;\n}\n.row .col.pull-s9 {\n right: 75%;\n}\n.row .col.push-s9 {\n left: 75%;\n}\n.row .col.offset-s10 {\n margin-left: 83.3333333333%;\n}\n.row .col.pull-s10 {\n right: 83.3333333333%;\n}\n.row .col.push-s10 {\n left: 83.3333333333%;\n}\n.row .col.offset-s11 {\n margin-left: 91.6666666667%;\n}\n.row .col.pull-s11 {\n right: 91.6666666667%;\n}\n.row .col.push-s11 {\n left: 91.6666666667%;\n}\n.row .col.offset-s12 {\n margin-left: 100%;\n}\n.row .col.pull-s12 {\n right: 100%;\n}\n.row .col.push-s12 {\n left: 100%;\n}\n@media only screen and (min-width : 601px) {\n .row .col.m1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-m1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-m1 {\n right: 8.3333333333%;\n }\n .row .col.push-m1 {\n left: 8.3333333333%;\n }\n .row .col.offset-m2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-m2 {\n right: 16.6666666667%;\n }\n .row .col.push-m2 {\n left: 16.6666666667%;\n }\n .row .col.offset-m3 {\n margin-left: 25%;\n }\n .row .col.pull-m3 {\n right: 25%;\n }\n .row .col.push-m3 {\n left: 25%;\n }\n .row .col.offset-m4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-m4 {\n right: 33.3333333333%;\n }\n .row .col.push-m4 {\n left: 33.3333333333%;\n }\n .row .col.offset-m5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-m5 {\n right: 41.6666666667%;\n }\n .row .col.push-m5 {\n left: 41.6666666667%;\n }\n .row .col.offset-m6 {\n margin-left: 50%;\n }\n .row .col.pull-m6 {\n right: 50%;\n }\n .row .col.push-m6 {\n left: 50%;\n }\n .row .col.offset-m7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-m7 {\n right: 58.3333333333%;\n }\n .row .col.push-m7 {\n left: 58.3333333333%;\n }\n .row .col.offset-m8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-m8 {\n right: 66.6666666667%;\n }\n .row .col.push-m8 {\n left: 66.6666666667%;\n }\n .row .col.offset-m9 {\n margin-left: 75%;\n }\n .row .col.pull-m9 {\n right: 75%;\n }\n .row .col.push-m9 {\n left: 75%;\n }\n .row .col.offset-m10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-m10 {\n right: 83.3333333333%;\n }\n .row .col.push-m10 {\n left: 83.3333333333%;\n }\n .row .col.offset-m11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-m11 {\n right: 91.6666666667%;\n }\n .row .col.push-m11 {\n left: 91.6666666667%;\n }\n .row .col.offset-m12 {\n margin-left: 100%;\n }\n .row .col.pull-m12 {\n right: 100%;\n }\n .row .col.push-m12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 993px) {\n .row .col.l1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-l1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-l1 {\n right: 8.3333333333%;\n }\n .row .col.push-l1 {\n left: 8.3333333333%;\n }\n .row .col.offset-l2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-l2 {\n right: 16.6666666667%;\n }\n .row .col.push-l2 {\n left: 16.6666666667%;\n }\n .row .col.offset-l3 {\n margin-left: 25%;\n }\n .row .col.pull-l3 {\n right: 25%;\n }\n .row .col.push-l3 {\n left: 25%;\n }\n .row .col.offset-l4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-l4 {\n right: 33.3333333333%;\n }\n .row .col.push-l4 {\n left: 33.3333333333%;\n }\n .row .col.offset-l5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-l5 {\n right: 41.6666666667%;\n }\n .row .col.push-l5 {\n left: 41.6666666667%;\n }\n .row .col.offset-l6 {\n margin-left: 50%;\n }\n .row .col.pull-l6 {\n right: 50%;\n }\n .row .col.push-l6 {\n left: 50%;\n }\n .row .col.offset-l7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-l7 {\n right: 58.3333333333%;\n }\n .row .col.push-l7 {\n left: 58.3333333333%;\n }\n .row .col.offset-l8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-l8 {\n right: 66.6666666667%;\n }\n .row .col.push-l8 {\n left: 66.6666666667%;\n }\n .row .col.offset-l9 {\n margin-left: 75%;\n }\n .row .col.pull-l9 {\n right: 75%;\n }\n .row .col.push-l9 {\n left: 75%;\n }\n .row .col.offset-l10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-l10 {\n right: 83.3333333333%;\n }\n .row .col.push-l10 {\n left: 83.3333333333%;\n }\n .row .col.offset-l11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-l11 {\n right: 91.6666666667%;\n }\n .row .col.push-l11 {\n left: 91.6666666667%;\n }\n .row .col.offset-l12 {\n margin-left: 100%;\n }\n .row .col.pull-l12 {\n right: 100%;\n }\n .row .col.push-l12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 1201px) {\n .row .col.xl1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-xl1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-xl1 {\n right: 8.3333333333%;\n }\n .row .col.push-xl1 {\n left: 8.3333333333%;\n }\n .row .col.offset-xl2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-xl2 {\n right: 16.6666666667%;\n }\n .row .col.push-xl2 {\n left: 16.6666666667%;\n }\n .row .col.offset-xl3 {\n margin-left: 25%;\n }\n .row .col.pull-xl3 {\n right: 25%;\n }\n .row .col.push-xl3 {\n left: 25%;\n }\n .row .col.offset-xl4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-xl4 {\n right: 33.3333333333%;\n }\n .row .col.push-xl4 {\n left: 33.3333333333%;\n }\n .row .col.offset-xl5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-xl5 {\n right: 41.6666666667%;\n }\n .row .col.push-xl5 {\n left: 41.6666666667%;\n }\n .row .col.offset-xl6 {\n margin-left: 50%;\n }\n .row .col.pull-xl6 {\n right: 50%;\n }\n .row .col.push-xl6 {\n left: 50%;\n }\n .row .col.offset-xl7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-xl7 {\n right: 58.3333333333%;\n }\n .row .col.push-xl7 {\n left: 58.3333333333%;\n }\n .row .col.offset-xl8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-xl8 {\n right: 66.6666666667%;\n }\n .row .col.push-xl8 {\n left: 66.6666666667%;\n }\n .row .col.offset-xl9 {\n margin-left: 75%;\n }\n .row .col.pull-xl9 {\n right: 75%;\n }\n .row .col.push-xl9 {\n left: 75%;\n }\n .row .col.offset-xl10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-xl10 {\n right: 83.3333333333%;\n }\n .row .col.push-xl10 {\n left: 83.3333333333%;\n }\n .row .col.offset-xl11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-xl11 {\n right: 91.6666666667%;\n }\n .row .col.push-xl11 {\n left: 91.6666666667%;\n }\n .row .col.offset-xl12 {\n margin-left: 100%;\n }\n .row .col.pull-xl12 {\n right: 100%;\n }\n .row .col.push-xl12 {\n left: 100%;\n }\n}\n\n.sidenav {\n position: fixed;\n width: 300px;\n left: 0;\n top: 0;\n margin: 0;\n height: 100%;\n height: calc(100% + 60px);\n height: -moz-calc(100%);\n padding-bottom: 60px;\n background-color: #fff;\n z-index: 999;\n overflow-y: auto;\n will-change: transform;\n backface-visibility: hidden;\n transform: translateX(-105%);\n transition: transform 1s;\n}\n.sidenav.right-aligned {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.sidenav .collapsible {\n margin: 0;\n}\n.sidenav li {\n float: none;\n}\n.sidenav li .iconSideLink {\n display: flex;\n align-items: center;\n}\n.sidenav li .iconSideLink svg {\n stroke: rgba(0, 0, 0, 0.2);\n width: 30px;\n}\n.sidenav li.active {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li.active svg {\n stroke: white !important;\n width: 30px;\n}\n.sidenav li.last {\n position: sticky;\n top: calc(100% - 45px - 35px);\n}\n.sidenav li > a {\n color: rgba(0, 0, 0, 0.87);\n display: flex;\n font-size: 14px;\n font-weight: 700;\n height: 45px;\n line-height: 45px;\n padding: 0 30px;\n}\n.sidenav li > a:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating {\n margin: 10px 15px;\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating {\n color: #fff;\n}\n.sidenav li > a.btn-flat {\n color: #343434;\n}\n.sidenav li > a.btn:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover {\n background-color: #414141;\n}\n.sidenav li > a.btn-floating:hover {\n background-color: #343434;\n}\n.sidenav li > a > i, .sidenav li > a > [class^=mdi-],\n.sidenav li > a li > a > [class*=mdi-], .sidenav li > a > i.s-icon {\n float: left;\n height: 45px;\n line-height: 45px;\n margin: 0 30px 0 0;\n width: 22.5px;\n color: rgba(0, 0, 0, 0.54);\n}\n.sidenav .divider {\n margin: 7.5px 0 0 0;\n}\n.sidenav .subheader {\n cursor: initial;\n pointer-events: none;\n color: rgba(0, 0, 0, 0.54);\n font-size: 14px;\n font-weight: 500;\n line-height: 45px;\n}\n.sidenav .subheader:hover {\n background-color: transparent;\n}\n.sidenav .user-view {\n position: relative;\n padding: 30px 30px 0;\n margin-bottom: 7.5px;\n}\n.sidenav .user-view > a {\n height: auto;\n padding: 0;\n}\n.sidenav .user-view > a:hover {\n background-color: transparent;\n}\n.sidenav .user-view .background {\n overflow: hidden;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n}\n.sidenav .user-view .circle,\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n display: block;\n}\n.sidenav .user-view .circle {\n height: 64px;\n width: 64px;\n}\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n font-size: 14px;\n line-height: 22.5px;\n}\n.sidenav .user-view .name {\n margin-top: 16px;\n font-weight: 500;\n}\n.sidenav .user-view .email {\n padding-bottom: 16px;\n font-weight: 400;\n}\n\n.drag-target {\n height: 100%;\n width: 10px;\n position: fixed;\n top: 0;\n z-index: 998;\n}\n.drag-target.right-aligned {\n right: 0;\n}\n\n.sidenav.sidenav-fixed {\n left: 0;\n transform: translateX(0);\n position: fixed;\n}\n.sidenav.sidenav-fixed.right-aligned {\n right: 0;\n left: auto;\n}\n\n@media only screen and (max-width : 992px) {\n .sidenav.sidenav-fixed {\n transform: translateX(-105%);\n }\n .sidenav.sidenav-fixed.right-aligned {\n transform: translateX(105%);\n }\n .sidenav > a {\n padding: 0 15px;\n }\n .sidenav .user-view {\n padding: 15px 15px 0;\n }\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\n background-color: #90caf9;\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active a,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a {\n color: #fff;\n}\n\n.sidenav .collapsible-body {\n padding: 0;\n}\n\n.sidenav-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n opacity: 0;\n height: 120vh;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 997;\n display: none;\n}\n\n.with-side-nav-open {\n padding-left: 300px;\n transition: padding 1s;\n}\n\n.btn, .btn-small, .btn-large,\n.btn-flat {\n border: none;\n border-radius: 2px;\n display: inline-block;\n height: 36px;\n line-height: 36px;\n padding: 0 16px;\n text-transform: uppercase;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n}\n\n.btn.disabled,\n.btn-floating.disabled,\n.btn-large.disabled,\n.btn-small.disabled,\n.btn-flat.disabled,\n.btn:disabled,\n.btn-floating:disabled,\n.btn-large:disabled,\n.btn-small:disabled,\n.btn-flat:disabled,\n.btn[disabled],\n.btn-floating[disabled],\n.btn-large[disabled],\n.btn-small[disabled],\n.btn-flat[disabled] {\n pointer-events: none;\n background-color: #DFDFDF !important;\n box-shadow: none;\n color: #9F9F9F !important;\n cursor: default;\n}\n.btn.disabled:hover,\n.btn-floating.disabled:hover,\n.btn-large.disabled:hover,\n.btn-small.disabled:hover,\n.btn-flat.disabled:hover,\n.btn:disabled:hover,\n.btn-floating:disabled:hover,\n.btn-large:disabled:hover,\n.btn-small:disabled:hover,\n.btn-flat:disabled:hover,\n.btn[disabled]:hover,\n.btn-floating[disabled]:hover,\n.btn-large[disabled]:hover,\n.btn-small[disabled]:hover,\n.btn-flat[disabled]:hover {\n background-color: #DFDFDF !important;\n color: #9F9F9F !important;\n}\n\n.btn,\n.btn-small,\n.btn-large,\n.btn-floating,\n.btn-flat {\n font-size: 14px;\n outline: 0;\n}\n.btn i,\n.btn-floating i,\n.btn-large i,\n.btn-small i,\n.btn-flat i {\n font-size: 1.3rem;\n line-height: inherit;\n}\n\n.btn:focus, .btn-small:focus, .btn-large:focus,\n.btn-floating:focus {\n background-color: #1b1b1b;\n}\n\n.btn, .btn-small, .btn-large {\n text-decoration: none;\n color: #fff;\n background-color: #343434;\n text-align: center;\n letter-spacing: 0.5px;\n transition: background-color 0.2s ease-out;\n cursor: pointer;\n}\n.btn:hover, .btn-small:hover, .btn-large:hover {\n background-color: #414141;\n}\n\n.btn-floating {\n display: inline-block;\n color: #fff;\n position: relative;\n overflow: hidden;\n z-index: 1;\n width: 40px;\n height: 40px;\n line-height: 40px;\n padding: 0;\n background-color: #26a69a;\n border-radius: 50%;\n transition: background-color 0.3s;\n cursor: pointer;\n vertical-align: middle;\n}\n.btn-floating:hover {\n background-color: #26a69a;\n}\n.btn-floating:before {\n border-radius: 0;\n}\n.btn-floating.btn-large {\n width: 56px;\n height: 56px;\n padding: 0;\n}\n.btn-floating.btn-large.halfway-fab {\n bottom: 28px;\n}\n.btn-floating.btn-large i {\n line-height: 56px;\n}\n.btn-floating.btn-small {\n width: 32.4px;\n height: 32.4px;\n}\n.btn-floating.btn-small.halfway-fab {\n bottom: 16.2px;\n}\n.btn-floating.btn-small i {\n line-height: 32.4px;\n}\n.btn-floating.halfway-fab {\n position: absolute;\n right: 24px;\n bottom: 20px;\n}\n.btn-floating.halfway-fab.left {\n right: auto;\n left: 24px;\n}\n.btn-floating i {\n width: inherit;\n display: inline-block;\n text-align: center;\n color: #fff;\n font-size: 1.6rem;\n line-height: 40px;\n}\n\nbutton.btn-floating {\n border: none;\n}\n\n.fixed-action-btn {\n position: fixed;\n right: 23px;\n bottom: 23px;\n padding-top: 15px;\n margin-bottom: 0;\n z-index: 997;\n}\n.fixed-action-btn.active ul {\n visibility: visible;\n}\n.fixed-action-btn.direction-left, .fixed-action-btn.direction-right {\n padding: 0 0 0 15px;\n}\n.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul {\n text-align: right;\n right: 64px;\n top: 50%;\n transform: translateY(-50%);\n height: 100%;\n left: auto;\n /*width 100% only goes to width of button container */\n width: 500px;\n}\n.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li {\n display: inline-block;\n margin: 7.5px 15px 0 0;\n}\n.fixed-action-btn.direction-right {\n padding: 0 15px 0 0;\n}\n.fixed-action-btn.direction-right ul {\n text-align: left;\n direction: rtl;\n left: 64px;\n right: auto;\n}\n.fixed-action-btn.direction-right ul li {\n margin: 7.5px 0 0 15px;\n}\n.fixed-action-btn.direction-bottom {\n padding: 0 0 15px 0;\n}\n.fixed-action-btn.direction-bottom ul {\n top: 64px;\n bottom: auto;\n display: flex;\n flex-direction: column-reverse;\n}\n.fixed-action-btn.direction-bottom ul li {\n margin: 15px 0 0 0;\n}\n.fixed-action-btn.toolbar {\n padding: 0;\n height: 56px;\n}\n.fixed-action-btn.toolbar.active > a i {\n opacity: 0;\n}\n.fixed-action-btn.toolbar ul {\n display: flex;\n top: 0;\n bottom: 0;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li {\n flex: 1;\n display: inline-block;\n margin: 0;\n height: 100%;\n transition: none;\n}\n.fixed-action-btn.toolbar ul li a {\n display: block;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n background-color: transparent;\n box-shadow: none;\n color: #fff;\n line-height: 56px;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li a i {\n line-height: inherit;\n}\n.fixed-action-btn ul {\n left: 0;\n right: 0;\n text-align: center;\n position: absolute;\n bottom: 64px;\n margin: 0;\n visibility: hidden;\n}\n.fixed-action-btn ul li {\n margin-bottom: 15px;\n}\n.fixed-action-btn ul a.btn-floating {\n opacity: 0;\n}\n.fixed-action-btn .fab-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 40px;\n height: 40px;\n background-color: #26a69a;\n border-radius: 50%;\n transform: scale(0);\n}\n\n.btn-flat {\n box-shadow: none;\n background-color: transparent;\n color: #343434;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n.btn-flat:focus, .btn-flat:hover {\n box-shadow: none;\n}\n.btn-flat:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.btn-flat.disabled, .btn-flat.btn-flat[disabled] {\n background-color: transparent !important;\n color: #b3b3b3 !important;\n cursor: default;\n}\n\n.btn-large {\n height: 54px;\n line-height: 54px;\n font-size: 15px;\n padding: 0 28px;\n}\n.btn-large i {\n font-size: 1.6rem;\n}\n\n.btn-small {\n height: 32.4px;\n line-height: 32.4px;\n font-size: 13px;\n}\n.btn-small i {\n font-size: 1.2rem;\n}\n\n.btn-block {\n display: block;\n}\n\n.communTabHeader, .tabs.activeTab-2 .tab-header-over2 .tab-header, .tabs.activeTab-2 .tab-header-over1 .tab-header, .tabs.activeTab-2 .tab-header-over0 .tab-header, .tabs.activeTab-1 .tab-header-over2 .tab-header, .tabs.activeTab-1 .tab-header-over1 .tab-header, .tabs.activeTab-1 .tab-header-over0 .tab-header, .tabs.activeTab-0 .tab-header-over2 .tab-header, .tabs.activeTab-0 .tab-header-over1 .tab-header, .tabs.activeTab-0 .tab-header-over0 .tab-header {\n height: 100px;\n padding: 40px;\n}\n\n.tabs {\n min-height: calc(100% - 150px);\n margin-top: 30px;\n padding: 0 !important;\n border-radius: 40px !important;\n}\n.tabs .innerpage {\n min-height: 70VH !important;\n}\n.tabs .tabs-header-overlay {\n display: flex;\n height: 100px;\n}\n.tabs.activeTab-0 .tab-header-over0 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over0 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #cbe7fe, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 .tab-header {\n background-color: #80c4fd;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-0 .tab-header-over2 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-1 .tab-header-over0 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-1 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over1 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-2 .tab-header-over0 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #cbe7fe);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over1 .tab-header {\n background-color: #35a2fb;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over2 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-2 .tab-header-over2 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs .tab-content {\n background-color: #cbe7fe;\n padding: 10px;\n border-top: 0;\n min-height: 70vh;\n border-radius: 0 0 40px 40px;\n padding-bottom: 20px;\n}\n\n.loader-overlay {\n z-index: 999;\n position: absolute;\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n background-color: rgba(102, 100, 100, 0.603);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n.loader-overlay .loader {\n border: 7px solid #f3f3f3; /* Light grey */\n border-top: 7px solid #2ea2cc; /* Blue */\n border-radius: 50%;\n width: 70px;\n height: 70px;\n animation: spin 2s linear infinite;\n}\n.loader-overlay .loader-text {\n margin-top: 20px;\n font-size: 25px;\n color: #2ea2cc;\n}\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.card-panel {\n transition: box-shadow 0.25s;\n padding: 24px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border-radius: 2px;\n background-color: #fff;\n}\n\n.card {\n position: relative;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n background-color: #fff;\n transition: box-shadow 0.25s;\n border-radius: 2px;\n}\n.card .card-title {\n font-size: 24px;\n font-weight: 300;\n}\n.card .card-title.activator {\n cursor: pointer;\n}\n.card.small, .card.medium, .card.large {\n position: relative;\n}\n.card.small .card-image, .card.medium .card-image, .card.large .card-image {\n max-height: 60%;\n overflow: hidden;\n}\n.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content {\n max-height: 40%;\n}\n.card.small .card-content, .card.medium .card-content, .card.large .card-content {\n max-height: 100%;\n overflow: hidden;\n}\n.card.small .card-action, .card.medium .card-action, .card.large .card-action {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.card.small {\n height: 300px;\n}\n.card.medium {\n height: 400px;\n}\n.card.large {\n height: 500px;\n}\n.card.horizontal {\n display: flex;\n}\n.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image {\n height: 100%;\n max-height: none;\n overflow: visible;\n}\n.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img {\n height: 100%;\n}\n.card.horizontal .card-image {\n max-width: 50%;\n}\n.card.horizontal .card-image img {\n border-radius: 2px 0 0 2px;\n max-width: 100%;\n width: auto;\n}\n.card.horizontal .card-stacked {\n display: flex;\n flex-direction: column;\n flex: 1;\n position: relative;\n}\n.card.horizontal .card-stacked .card-content {\n flex-grow: 1;\n}\n.card.sticky-action .card-action {\n z-index: 2;\n}\n.card.sticky-action .card-reveal {\n z-index: 1;\n padding-bottom: 64px;\n}\n.card .card-image {\n position: relative;\n}\n.card .card-image img {\n display: block;\n border-radius: 2px 2px 0 0;\n position: relative;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n}\n.card .card-image .card-title {\n color: #fff;\n position: absolute;\n bottom: 0;\n left: 0;\n max-width: 100%;\n padding: 24px;\n}\n.card .card-content {\n padding: 24px;\n border-radius: 0 0 2px 2px;\n}\n.card .card-content p {\n margin: 0;\n}\n.card .card-content .card-title {\n display: block;\n line-height: 32px;\n margin-bottom: 8px;\n}\n.card .card-content .card-title i {\n line-height: 32px;\n}\n.card .card-action {\n background-color: inherit;\n border-top: 1px solid rgba(160, 160, 160, 0.2);\n position: relative;\n padding: 16px 24px;\n}\n.card .card-action:last-child {\n border-radius: 0 0 2px 2px;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) {\n color: #ffab40;\n margin-right: 24px;\n transition: color 0.3s ease;\n text-transform: uppercase;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover {\n color: #ffd8a6;\n}\n.card .card-reveal {\n padding: 24px;\n position: absolute;\n background-color: #fff;\n width: 100%;\n overflow-y: auto;\n left: 0;\n top: 100%;\n height: 100%;\n z-index: 3;\n display: none;\n}\n.card .card-reveal .card-title {\n cursor: pointer;\n display: block;\n}\n\n/*\n @license\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**************************/\n/* STYLES FOR THE SPINNER */\n/**************************/\n/*\n * Constants:\n * STROKEWIDTH = 3px\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\n * should rotate each time, 216 gives us a\n * 5 pointed star shape (it's 360/5 * 3).\n * For a 7 pointed star, we might do\n * 360/7 * 3 = 154.286)\n * CONTAINERWIDTH = 28px\n * SHRINK_TIME = 400ms\n */\n.preloader-wrapper {\n display: inline-block;\n position: relative;\n width: 50px;\n height: 50px;\n}\n.preloader-wrapper.small {\n width: 36px;\n height: 36px;\n}\n.preloader-wrapper.big {\n width: 64px;\n height: 64px;\n}\n.preloader-wrapper.active {\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\n -webkit-animation: container-rotate 1568ms linear infinite;\n animation: container-rotate 1568ms linear infinite;\n}\n\n@-webkit-keyframes container-rotate {\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes container-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n.spinner-layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0;\n border-color: #26a69a;\n}\n\n.spinner-blue,\n.spinner-blue-only {\n border-color: #4285f4;\n}\n\n.spinner-red,\n.spinner-red-only {\n border-color: #db4437;\n}\n\n.spinner-yellow,\n.spinner-yellow-only {\n border-color: #f4b400;\n}\n\n.spinner-green,\n.spinner-green-only {\n border-color: #0f9d58;\n}\n\n/**\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\n *\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\n * animation-delay and instead set custom keyframes for each color (as redundant as it\n * seems).\n *\n * We write out each animation in full (instead of separating animation-name,\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\n * specific properties properly, treats them as -webkit-animation, and overrides the\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\n */\n.active .spinner-layer.spinner-blue {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-red {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-yellow {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-green {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer,\n.active .spinner-layer.spinner-blue-only,\n.active .spinner-layer.spinner-red-only,\n.active .spinner-layer.spinner-yellow-only,\n.active .spinner-layer.spinner-green-only {\n /* durations: 4 * ARCTIME */\n opacity: 1;\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes fill-unfill-rotate {\n 12.5% {\n -webkit-transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n -webkit-transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n -webkit-transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n -webkit-transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n -webkit-transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n -webkit-transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n -webkit-transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n -webkit-transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@keyframes fill-unfill-rotate {\n 12.5% {\n transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@-webkit-keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@-webkit-keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@-webkit-keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n/**\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\n */\n.gap-patch {\n position: absolute;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n\n.gap-patch .circle {\n width: 1000%;\n left: -450%;\n}\n\n.circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n.circle-clipper .circle {\n width: 200%;\n height: 100%;\n border-width: 3px; /* STROKEWIDTH */\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n -webkit-animation: none;\n animation: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n}\n.circle-clipper.left .circle {\n left: 0;\n border-right-color: transparent !important;\n -webkit-transform: rotate(129deg);\n transform: rotate(129deg);\n}\n.circle-clipper.right .circle {\n left: -100%;\n border-left-color: transparent !important;\n -webkit-transform: rotate(-129deg);\n transform: rotate(-129deg);\n}\n\n.active .circle-clipper.left .circle {\n /* duration: ARCTIME */\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .circle-clipper.right .circle {\n /* duration: ARCTIME */\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes left-spin {\n from {\n -webkit-transform: rotate(130deg);\n }\n 50% {\n -webkit-transform: rotate(-5deg);\n }\n to {\n -webkit-transform: rotate(130deg);\n }\n}\n@keyframes left-spin {\n from {\n transform: rotate(130deg);\n }\n 50% {\n transform: rotate(-5deg);\n }\n to {\n transform: rotate(130deg);\n }\n}\n@-webkit-keyframes right-spin {\n from {\n -webkit-transform: rotate(-130deg);\n }\n 50% {\n -webkit-transform: rotate(5deg);\n }\n to {\n -webkit-transform: rotate(-130deg);\n }\n}\n@keyframes right-spin {\n from {\n transform: rotate(-130deg);\n }\n 50% {\n transform: rotate(5deg);\n }\n to {\n transform: rotate(-130deg);\n }\n}\n#spinnerContainer.cooldown {\n /* duration: SHRINK_TIME */\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@-webkit-keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n.progress {\n position: relative;\n height: 4px;\n display: block;\n width: 100%;\n background-color: #acece6;\n border-radius: 2px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n overflow: hidden;\n}\n.progress .determinate {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n background-color: #26a69a;\n transition: width 0.3s linear;\n}\n.progress .indeterminate {\n background-color: #26a69a;\n}\n.progress .indeterminate:before {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n}\n.progress .indeterminate:after {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;\n animation-delay: 1.15s;\n}\n\n@keyframes indeterminate {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n@keyframes indeterminate-short {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n.flash-message {\n position: absolute;\n padding: 2px 10px;\n border-radius: 5px;\n z-index: 99999;\n right: 0;\n bottom: 0;\n font-size: 14px;\n}\n.flash-message.info {\n background-color: #beddbe;\n border: 1px solid #728f72;\n}\n.flash-message.warn {\n background-color: #f5e6d0;\n border: 1px solid #ea7d17;\n}\n.flash-message.error {\n background-color: #e5b2bc;\n border: 1px solid #e33257;\n}\n\n@keyframes messageIn {\n from {\n right: 80%;\n }\n to {\n right: 0;\n }\n}\n.pulse {\n overflow: visible;\n position: relative;\n}\n.pulse::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: inherit;\n border-radius: inherit;\n transition: opacity 0.3s, transform 0.3s;\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\n}\n\n@keyframes pulse-animation {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0;\n transform: scale(1.5);\n }\n 100% {\n opacity: 0;\n transform: scale(1.5);\n }\n}\n.dropdown-content {\n background-color: #fff;\n margin: 0;\n display: flow;\n min-width: 100px;\n overflow-y: auto;\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9999;\n transform-origin: 0 0;\n}\n.dropdown-content:focus {\n outline: 0;\n}\n.dropdown-content li {\n clear: both;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n min-height: 50px;\n line-height: 1.5rem;\n width: 100%;\n text-align: left;\n}\n.dropdown-content li:hover, .dropdown-content li.active {\n background-color: #eee;\n}\n.dropdown-content li:focus {\n outline: none;\n}\n.dropdown-content li.divider {\n min-height: 0;\n height: 1px;\n}\n.dropdown-content li > a, .dropdown-content li > span {\n font-size: 16px;\n color: #26a69a;\n display: block;\n line-height: 22px;\n padding: 14px 16px;\n}\n.dropdown-content li > span > label {\n top: 1px;\n left: 0;\n height: 18px;\n}\n.dropdown-content li > a > i {\n height: inherit;\n line-height: inherit;\n float: left;\n margin: 0 24px 0 0;\n width: 24px;\n}\n\nbody.keyboard-focused .dropdown-content li:focus {\n background-color: #dadada;\n}\n\n.input-field.col .dropdown-content [type=checkbox] + label {\n top: 1px;\n left: 0;\n height: 18px;\n transform: none;\n}\n\n.dropdown-trigger {\n cursor: pointer;\n}\n\nnav {\n color: #fff;\n background-color: #90caf9;\n width: 100%;\n height: 56px;\n line-height: 56px;\n}\nnav.nav-extended {\n height: auto;\n}\nnav.nav-extended .nav-wrapper {\n display: flex;\n align-items: center;\n min-height: 56px;\n height: auto;\n}\nnav.nav-extended .nav-content {\n position: relative;\n line-height: normal;\n}\nnav a {\n color: #fff;\n}\nnav i,\nnav [class^=mdi-], nav [class*=mdi-],\nnav i.s-icons {\n display: block;\n font-size: 24px;\n height: 56px;\n line-height: 56px;\n}\nnav .nav-wrapper {\n position: relative;\n height: 100%;\n}\n@media only screen and (min-width : 993px) {\n nav a.sidenav-trigger {\n display: none;\n }\n}\nnav .sidenav-trigger {\n float: left;\n position: relative;\n z-index: 1;\n height: 56px;\n margin: 0 18px;\n}\nnav .sidenav-trigger i {\n height: 56px;\n line-height: 56px;\n}\nnav .brand-logo {\n position: absolute;\n color: #fff;\n display: inline-block;\n font-size: 2.1rem;\n padding: 0;\n}\nnav .brand-logo img.circle {\n height: 32px;\n width: 32px;\n}\nnav .brand-logo.center {\n left: 50%;\n transform: translateX(-50%);\n}\n@media only screen and (max-width : 992px) {\n nav .brand-logo {\n left: 50%;\n transform: translateX(-50%);\n }\n nav .brand-logo.left, nav .brand-logo.right {\n padding: 0;\n transform: none;\n }\n nav .brand-logo.left {\n left: 0.5rem;\n }\n nav .brand-logo.right {\n right: 0.5rem;\n left: auto;\n }\n}\nnav .brand-logo.right {\n right: 0.5rem;\n padding: 0;\n}\nnav .brand-logo i,\nnav .brand-logo [class^=mdi-], nav .brand-logo [class*=mdi-],\nnav .brand-logo i.s-icons {\n float: left;\n margin-right: 15px;\n}\nnav .nav-title {\n display: inline-block;\n font-size: 32px;\n padding: 28px 0;\n}\nnav ul {\n margin: 0;\n}\nnav ul li {\n transition: background-color 0.3s;\n float: left;\n padding: 0;\n}\nnav ul li.active {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul a {\n transition: background-color 0.3s;\n font-size: 1rem;\n color: #fff;\n display: block;\n padding: 0 15px;\n cursor: pointer;\n}\nnav ul a.btn, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating {\n margin-top: -2px;\n margin-left: 15px;\n margin-right: 15px;\n}\nnav ul a.btn > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons {\n height: inherit;\n line-height: inherit;\n}\nnav ul a:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul.left {\n float: left;\n}\nnav form {\n height: 100%;\n}\nnav .input-field {\n margin: 0;\n height: 100%;\n}\nnav .input-field input {\n height: 100%;\n font-size: 1.2rem;\n border: none;\n padding-left: 2rem;\n}\nnav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {\n border: none;\n box-shadow: none;\n}\nnav .input-field label {\n top: 0;\n left: 0;\n}\nnav .input-field label i {\n color: rgba(255, 255, 255, 0.7);\n transition: color 0.3s;\n}\nnav .input-field label.active i {\n color: #fff;\n}\n\n.navbar-fixed {\n position: relative;\n height: 56px;\n z-index: 997;\n}\n.navbar-fixed nav {\n position: fixed;\n}\n\n@media only screen and (min-width : 601px) {\n nav.nav-extended .nav-wrapper {\n min-height: 64px;\n }\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\n height: 64px;\n line-height: 64px;\n }\n .navbar-fixed {\n height: 64px;\n }\n}", "",{"version":3,"sources":["webpack://./src/sass/d3v4pp.scss","webpack://./src/sass/icons/SweetcomIcons.scss","webpack://./src/sass/_colors.scss","webpack://./src/sass/_code-dark.scss","webpack://./src/sass/_terminal.scss","webpack://./src/sass/_tooltip.scss","webpack://./src/sass/_shadows.scss","webpack://./src/sass/_waves.scss","webpack://./src/sass/_modal.scss","webpack://./src/sass/_global.scss","webpack://./src/sass/_variables.scss","webpack://./src/sass/_badges.scss","webpack://./src/sass/_chips.scss","webpack://./src/sass/_collapsible.scss","webpack://./src/sass/_collection.scss","webpack://./src/sass/forms/_forms.scss","webpack://./src/sass/forms/_input-fields.scss","webpack://./src/sass/forms/_radio-buttons.scss","webpack://./src/sass/forms/_checkboxes.scss","webpack://./src/sass/forms/_switches.scss","webpack://./src/sass/forms/_select.scss","webpack://./src/sass/forms/_file-input.scss","webpack://./src/sass/forms/_range.scss","webpack://./src/sass/_paralax.scss","webpack://./src/sass/_cube.scss","webpack://./src/sass/_grid.scss","webpack://./src/sass/_sidenav.scss","webpack://./src/sass/_buttons.scss","webpack://./src/sass/_tabs.scss","webpack://./src/sass/_loader.scss","webpack://./src/sass/_cards.scss","webpack://./src/sass/_preloader.scss","webpack://./src/sass/_progress.scss","webpack://./src/sass/_flash-message.scss","webpack://./src/sass/_pulse.scss","webpack://./src/sass/_dropdown.scss","webpack://./src/sass/_navbar.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;EACE,uBAAA;EACA,kBAAA;EACA,gBAAA;EACA,4CAAA;EACA,gLAAA;ADGF;ACKA;;;;EAIE,mCAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;EACA,sBAAA;EACA,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,iBAAA;EACA,cAAA;EACA,mCAAA;EACA,kCAAA;EACA,kCAAA;EACA,qCAAA;EACA,oCAAA;EACA,kCAAA;EACA,6BAAA;EACA,kBAAA;ADHF;;AE3BM;EACE,oCAAA;AF8BR;;AE5BM;EACE,yBAAA;AF+BR;;AE7BM;EACE,oCAAA;AFgCR;;AE7BM;EACE,oCAAA;AFgCR;;AE9BM;EACE,yBAAA;AFiCR;;AE/BM;EACE,oCAAA;AFkCR;;AEzCM;EACE,oCAAA;AF4CR;;AE1CM;EACE,yBAAA;AF6CR;;AE3CM;EACE,oCAAA;AF8CR;;AErDM;EACE,oCAAA;AFwDR;;AEtDM;EACE,yBAAA;AFyDR;;AEvDM;EACE,oCAAA;AF0DR;;AEjEM;EACE,oCAAA;AFoER;;AElEM;EACE,yBAAA;AFqER;;AEnEM;EACE,oCAAA;AFsER;;AE7EM;EACE,oCAAA;AFgFR;;AE9EM;EACE,yBAAA;AFiFR;;AE/EM;EACE,oCAAA;AFkFR;;AEzFM;EACE,oCAAA;AF4FR;;AE1FM;EACE,yBAAA;AF6FR;;AE3FM;EACE,oCAAA;AF8FR;;AErGM;EACE,oCAAA;AFwGR;;AEtGM;EACE,yBAAA;AFyGR;;AEvGM;EACE,oCAAA;AF0GR;;AEjHM;EACE,oCAAA;AFoHR;;AElHM;EACE,yBAAA;AFqHR;;AEnHM;EACE,oCAAA;AFsHR;;AE7HM;EACE,oCAAA;AFgIR;;AE9HM;EACE,yBAAA;AFiIR;;AE/HM;EACE,oCAAA;AFkIR;;AEzIM;EACE,oCAAA;AF4IR;;AE1IM;EACE,yBAAA;AF6IR;;AE3IM;EACE,oCAAA;AF8IR;;AErJM;EACE,oCAAA;AFwJR;;AEtJM;EACE,yBAAA;AFyJR;;AEvJM;EACE,oCAAA;AF0JR;;AEjKM;EACE,oCAAA;AFoKR;;AElKM;EACE,yBAAA;AFqKR;;AEnKM;EACE,oCAAA;AFsKR;;AE7KM;EACE,oCAAA;AFgLR;;AE9KM;EACE,yBAAA;AFiLR;;AE/KM;EACE,oCAAA;AFkLR;;AEnMM;EACE,oCAAA;AFsMR;;AEpMM;EACE,yBAAA;AFuMR;;AErMM;EACE,oCAAA;AFwMR;;AErMM;EACE,oCAAA;AFwMR;;AEtMM;EACE,yBAAA;AFyMR;;AEvMM;EACE,oCAAA;AF0MR;;AEjNM;EACE,oCAAA;AFoNR;;AElNM;EACE,yBAAA;AFqNR;;AEnNM;EACE,oCAAA;AFsNR;;AE7NM;EACE,oCAAA;AFgOR;;AE9NM;EACE,yBAAA;AFiOR;;AE/NM;EACE,oCAAA;AFkOR;;AEzOM;EACE,oCAAA;AF4OR;;AE1OM;EACE,yBAAA;AF6OR;;AE3OM;EACE,oCAAA;AF8OR;;AErPM;EACE,oCAAA;AFwPR;;AEtPM;EACE,yBAAA;AFyPR;;AEvPM;EACE,oCAAA;AF0PR;;AEjQM;EACE,oCAAA;AFoQR;;AElQM;EACE,yBAAA;AFqQR;;AEnQM;EACE,oCAAA;AFsQR;;AE7QM;EACE,oCAAA;AFgRR;;AE9QM;EACE,yBAAA;AFiRR;;AE/QM;EACE,oCAAA;AFkRR;;AEzRM;EACE,oCAAA;AF4RR;;AE1RM;EACE,yBAAA;AF6RR;;AE3RM;EACE,oCAAA;AF8RR;;AErSM;EACE,oCAAA;AFwSR;;AEtSM;EACE,yBAAA;AFySR;;AEvSM;EACE,oCAAA;AF0SR;;AEjTM;EACE,oCAAA;AFoTR;;AElTM;EACE,yBAAA;AFqTR;;AEnTM;EACE,oCAAA;AFsTR;;AE7TM;EACE,oCAAA;AFgUR;;AE9TM;EACE,yBAAA;AFiUR;;AE/TM;EACE,oCAAA;AFkUR;;AEzUM;EACE,oCAAA;AF4UR;;AE1UM;EACE,yBAAA;AF6UR;;AE3UM;EACE,oCAAA;AF8UR;;AErVM;EACE,oCAAA;AFwVR;;AEtVM;EACE,yBAAA;AFyVR;;AEvVM;EACE,oCAAA;AF0VR;;AE3WM;EACE,oCAAA;AF8WR;;AE5WM;EACE,yBAAA;AF+WR;;AE7WM;EACE,oCAAA;AFgXR;;AE7WM;EACE,oCAAA;AFgXR;;AE9WM;EACE,yBAAA;AFiXR;;AE/WM;EACE,oCAAA;AFkXR;;AEzXM;EACE,oCAAA;AF4XR;;AE1XM;EACE,yBAAA;AF6XR;;AE3XM;EACE,oCAAA;AF8XR;;AErYM;EACE,oCAAA;AFwYR;;AEtYM;EACE,yBAAA;AFyYR;;AEvYM;EACE,oCAAA;AF0YR;;AEjZM;EACE,oCAAA;AFoZR;;AElZM;EACE,yBAAA;AFqZR;;AEnZM;EACE,oCAAA;AFsZR;;AE7ZM;EACE,oCAAA;AFgaR;;AE9ZM;EACE,yBAAA;AFiaR;;AE/ZM;EACE,oCAAA;AFkaR;;AEzaM;EACE,oCAAA;AF4aR;;AE1aM;EACE,yBAAA;AF6aR;;AE3aM;EACE,oCAAA;AF8aR;;AErbM;EACE,oCAAA;AFwbR;;AEtbM;EACE,yBAAA;AFybR;;AEvbM;EACE,oCAAA;AF0bR;;AEjcM;EACE,oCAAA;AFocR;;AElcM;EACE,yBAAA;AFqcR;;AEncM;EACE,oCAAA;AFscR;;AE7cM;EACE,oCAAA;AFgdR;;AE9cM;EACE,yBAAA;AFidR;;AE/cM;EACE,oCAAA;AFkdR;;AEzdM;EACE,oCAAA;AF4dR;;AE1dM;EACE,yBAAA;AF6dR;;AE3dM;EACE,oCAAA;AF8dR;;AEreM;EACE,oCAAA;AFweR;;AEteM;EACE,yBAAA;AFyeR;;AEveM;EACE,oCAAA;AF0eR;;AEjfM;EACE,oCAAA;AFofR;;AElfM;EACE,yBAAA;AFqfR;;AEnfM;EACE,oCAAA;AFsfR;;AE7fM;EACE,oCAAA;AFggBR;;AE9fM;EACE,yBAAA;AFigBR;;AE/fM;EACE,oCAAA;AFkgBR;;AEnhBM;EACE,oCAAA;AFshBR;;AEphBM;EACE,yBAAA;AFuhBR;;AErhBM;EACE,oCAAA;AFwhBR;;AErhBM;EACE,oCAAA;AFwhBR;;AEthBM;EACE,yBAAA;AFyhBR;;AEvhBM;EACE,oCAAA;AF0hBR;;AEjiBM;EACE,oCAAA;AFoiBR;;AEliBM;EACE,yBAAA;AFqiBR;;AEniBM;EACE,oCAAA;AFsiBR;;AE7iBM;EACE,oCAAA;AFgjBR;;AE9iBM;EACE,yBAAA;AFijBR;;AE/iBM;EACE,oCAAA;AFkjBR;;AEzjBM;EACE,oCAAA;AF4jBR;;AE1jBM;EACE,yBAAA;AF6jBR;;AE3jBM;EACE,oCAAA;AF8jBR;;AErkBM;EACE,oCAAA;AFwkBR;;AEtkBM;EACE,yBAAA;AFykBR;;AEvkBM;EACE,oCAAA;AF0kBR;;AEjlBM;EACE,oCAAA;AFolBR;;AEllBM;EACE,yBAAA;AFqlBR;;AEnlBM;EACE,oCAAA;AFslBR;;AE7lBM;EACE,oCAAA;AFgmBR;;AE9lBM;EACE,yBAAA;AFimBR;;AE/lBM;EACE,oCAAA;AFkmBR;;AEzmBM;EACE,oCAAA;AF4mBR;;AE1mBM;EACE,yBAAA;AF6mBR;;AE3mBM;EACE,oCAAA;AF8mBR;;AErnBM;EACE,oCAAA;AFwnBR;;AEtnBM;EACE,yBAAA;AFynBR;;AEvnBM;EACE,oCAAA;AF0nBR;;AEjoBM;EACE,oCAAA;AFooBR;;AEloBM;EACE,yBAAA;AFqoBR;;AEnoBM;EACE,oCAAA;AFsoBR;;AE7oBM;EACE,oCAAA;AFgpBR;;AE9oBM;EACE,yBAAA;AFipBR;;AE/oBM;EACE,oCAAA;AFkpBR;;AEzpBM;EACE,oCAAA;AF4pBR;;AE1pBM;EACE,yBAAA;AF6pBR;;AE3pBM;EACE,oCAAA;AF8pBR;;AErqBM;EACE,oCAAA;AFwqBR;;AEtqBM;EACE,yBAAA;AFyqBR;;AEvqBM;EACE,oCAAA;AF0qBR;;AE3rBM;EACE,oCAAA;AF8rBR;;AE5rBM;EACE,yBAAA;AF+rBR;;AE7rBM;EACE,oCAAA;AFgsBR;;AE7rBM;EACE,oCAAA;AFgsBR;;AE9rBM;EACE,yBAAA;AFisBR;;AE/rBM;EACE,oCAAA;AFksBR;;AEzsBM;EACE,oCAAA;AF4sBR;;AE1sBM;EACE,yBAAA;AF6sBR;;AE3sBM;EACE,oCAAA;AF8sBR;;AErtBM;EACE,oCAAA;AFwtBR;;AEttBM;EACE,yBAAA;AFytBR;;AEvtBM;EACE,oCAAA;AF0tBR;;AEjuBM;EACE,oCAAA;AFouBR;;AEluBM;EACE,yBAAA;AFquBR;;AEnuBM;EACE,oCAAA;AFsuBR;;AE7uBM;EACE,oCAAA;AFgvBR;;AE9uBM;EACE,yBAAA;AFivBR;;AE/uBM;EACE,oCAAA;AFkvBR;;AEzvBM;EACE,oCAAA;AF4vBR;;AE1vBM;EACE,yBAAA;AF6vBR;;AE3vBM;EACE,oCAAA;AF8vBR;;AErwBM;EACE,oCAAA;AFwwBR;;AEtwBM;EACE,yBAAA;AFywBR;;AEvwBM;EACE,oCAAA;AF0wBR;;AEjxBM;EACE,oCAAA;AFoxBR;;AElxBM;EACE,yBAAA;AFqxBR;;AEnxBM;EACE,oCAAA;AFsxBR;;AE7xBM;EACE,oCAAA;AFgyBR;;AE9xBM;EACE,yBAAA;AFiyBR;;AE/xBM;EACE,oCAAA;AFkyBR;;AEzyBM;EACE,oCAAA;AF4yBR;;AE1yBM;EACE,yBAAA;AF6yBR;;AE3yBM;EACE,oCAAA;AF8yBR;;AErzBM;EACE,oCAAA;AFwzBR;;AEtzBM;EACE,yBAAA;AFyzBR;;AEvzBM;EACE,oCAAA;AF0zBR;;AEj0BM;EACE,oCAAA;AFo0BR;;AEl0BM;EACE,yBAAA;AFq0BR;;AEn0BM;EACE,oCAAA;AFs0BR;;AE70BM;EACE,oCAAA;AFg1BR;;AE90BM;EACE,yBAAA;AFi1BR;;AE/0BM;EACE,oCAAA;AFk1BR;;AEn2BM;EACE,oCAAA;AFs2BR;;AEp2BM;EACE,yBAAA;AFu2BR;;AEr2BM;EACE,oCAAA;AFw2BR;;AEr2BM;EACE,oCAAA;AFw2BR;;AEt2BM;EACE,yBAAA;AFy2BR;;AEv2BM;EACE,oCAAA;AF02BR;;AEj3BM;EACE,oCAAA;AFo3BR;;AEl3BM;EACE,yBAAA;AFq3BR;;AEn3BM;EACE,oCAAA;AFs3BR;;AE73BM;EACE,oCAAA;AFg4BR;;AE93BM;EACE,yBAAA;AFi4BR;;AE/3BM;EACE,oCAAA;AFk4BR;;AEz4BM;EACE,oCAAA;AF44BR;;AE14BM;EACE,yBAAA;AF64BR;;AE34BM;EACE,oCAAA;AF84BR;;AEr5BM;EACE,oCAAA;AFw5BR;;AEt5BM;EACE,yBAAA;AFy5BR;;AEv5BM;EACE,oCAAA;AF05BR;;AEj6BM;EACE,oCAAA;AFo6BR;;AEl6BM;EACE,yBAAA;AFq6BR;;AEn6BM;EACE,oCAAA;AFs6BR;;AE76BM;EACE,oCAAA;AFg7BR;;AE96BM;EACE,yBAAA;AFi7BR;;AE/6BM;EACE,oCAAA;AFk7BR;;AEz7BM;EACE,oCAAA;AF47BR;;AE17BM;EACE,yBAAA;AF67BR;;AE37BM;EACE,oCAAA;AF87BR;;AEr8BM;EACE,oCAAA;AFw8BR;;AEt8BM;EACE,yBAAA;AFy8BR;;AEv8BM;EACE,oCAAA;AF08BR;;AEj9BM;EACE,oCAAA;AFo9BR;;AEl9BM;EACE,yBAAA;AFq9BR;;AEn9BM;EACE,oCAAA;AFs9BR;;AE79BM;EACE,oCAAA;AFg+BR;;AE99BM;EACE,yBAAA;AFi+BR;;AE/9BM;EACE,oCAAA;AFk+BR;;AEz+BM;EACE,oCAAA;AF4+BR;;AE1+BM;EACE,yBAAA;AF6+BR;;AE3+BM;EACE,oCAAA;AF8+BR;;AEr/BM;EACE,oCAAA;AFw/BR;;AEt/BM;EACE,yBAAA;AFy/BR;;AEv/BM;EACE,oCAAA;AF0/BR;;AE3gCM;EACE,oCAAA;AF8gCR;;AE5gCM;EACE,yBAAA;AF+gCR;;AE7gCM;EACE,oCAAA;AFghCR;;AE7gCM;EACE,oCAAA;AFghCR;;AE9gCM;EACE,yBAAA;AFihCR;;AE/gCM;EACE,oCAAA;AFkhCR;;AEzhCM;EACE,oCAAA;AF4hCR;;AE1hCM;EACE,yBAAA;AF6hCR;;AE3hCM;EACE,oCAAA;AF8hCR;;AEriCM;EACE,oCAAA;AFwiCR;;AEtiCM;EACE,yBAAA;AFyiCR;;AEviCM;EACE,oCAAA;AF0iCR;;AEjjCM;EACE,oCAAA;AFojCR;;AEljCM;EACE,yBAAA;AFqjCR;;AEnjCM;EACE,oCAAA;AFsjCR;;AE7jCM;EACE,oCAAA;AFgkCR;;AE9jCM;EACE,yBAAA;AFikCR;;AE/jCM;EACE,oCAAA;AFkkCR;;AEzkCM;EACE,oCAAA;AF4kCR;;AE1kCM;EACE,yBAAA;AF6kCR;;AE3kCM;EACE,oCAAA;AF8kCR;;AErlCM;EACE,oCAAA;AFwlCR;;AEtlCM;EACE,yBAAA;AFylCR;;AEvlCM;EACE,oCAAA;AF0lCR;;AEjmCM;EACE,oCAAA;AFomCR;;AElmCM;EACE,yBAAA;AFqmCR;;AEnmCM;EACE,oCAAA;AFsmCR;;AE7mCM;EACE,oCAAA;AFgnCR;;AE9mCM;EACE,yBAAA;AFinCR;;AE/mCM;EACE,oCAAA;AFknCR;;AEznCM;EACE,oCAAA;AF4nCR;;AE1nCM;EACE,yBAAA;AF6nCR;;AE3nCM;EACE,oCAAA;AF8nCR;;AEroCM;EACE,oCAAA;AFwoCR;;AEtoCM;EACE,yBAAA;AFyoCR;;AEvoCM;EACE,oCAAA;AF0oCR;;AEjpCM;EACE,oCAAA;AFopCR;;AElpCM;EACE,yBAAA;AFqpCR;;AEnpCM;EACE,oCAAA;AFspCR;;AE7pCM;EACE,oCAAA;AFgqCR;;AE9pCM;EACE,yBAAA;AFiqCR;;AE/pCM;EACE,oCAAA;AFkqCR;;AEnrCM;EACE,oCAAA;AFsrCR;;AEprCM;EACE,yBAAA;AFurCR;;AErrCM;EACE,oCAAA;AFwrCR;;AErrCM;EACE,oCAAA;AFwrCR;;AEtrCM;EACE,yBAAA;AFyrCR;;AEvrCM;EACE,oCAAA;AF0rCR;;AEjsCM;EACE,oCAAA;AFosCR;;AElsCM;EACE,yBAAA;AFqsCR;;AEnsCM;EACE,oCAAA;AFssCR;;AE7sCM;EACE,oCAAA;AFgtCR;;AE9sCM;EACE,yBAAA;AFitCR;;AE/sCM;EACE,oCAAA;AFktCR;;AEztCM;EACE,oCAAA;AF4tCR;;AE1tCM;EACE,yBAAA;AF6tCR;;AE3tCM;EACE,oCAAA;AF8tCR;;AEruCM;EACE,oCAAA;AFwuCR;;AEtuCM;EACE,yBAAA;AFyuCR;;AEvuCM;EACE,oCAAA;AF0uCR;;AEjvCM;EACE,oCAAA;AFovCR;;AElvCM;EACE,yBAAA;AFqvCR;;AEnvCM;EACE,oCAAA;AFsvCR;;AE7vCM;EACE,oCAAA;AFgwCR;;AE9vCM;EACE,yBAAA;AFiwCR;;AE/vCM;EACE,oCAAA;AFkwCR;;AEzwCM;EACE,oCAAA;AF4wCR;;AE1wCM;EACE,yBAAA;AF6wCR;;AE3wCM;EACE,oCAAA;AF8wCR;;AErxCM;EACE,oCAAA;AFwxCR;;AEtxCM;EACE,yBAAA;AFyxCR;;AEvxCM;EACE,oCAAA;AF0xCR;;AEjyCM;EACE,oCAAA;AFoyCR;;AElyCM;EACE,yBAAA;AFqyCR;;AEnyCM;EACE,oCAAA;AFsyCR;;AE7yCM;EACE,oCAAA;AFgzCR;;AE9yCM;EACE,yBAAA;AFizCR;;AE/yCM;EACE,oCAAA;AFkzCR;;AEzzCM;EACE,oCAAA;AF4zCR;;AE1zCM;EACE,yBAAA;AF6zCR;;AE3zCM;EACE,oCAAA;AF8zCR;;AEr0CM;EACE,oCAAA;AFw0CR;;AEt0CM;EACE,yBAAA;AFy0CR;;AEv0CM;EACE,oCAAA;AF00CR;;AE31CM;EACE,oCAAA;AF81CR;;AE51CM;EACE,yBAAA;AF+1CR;;AE71CM;EACE,oCAAA;AFg2CR;;AE71CM;EACE,oCAAA;AFg2CR;;AE91CM;EACE,yBAAA;AFi2CR;;AE/1CM;EACE,oCAAA;AFk2CR;;AEz2CM;EACE,oCAAA;AF42CR;;AE12CM;EACE,yBAAA;AF62CR;;AE32CM;EACE,oCAAA;AF82CR;;AEr3CM;EACE,oCAAA;AFw3CR;;AEt3CM;EACE,yBAAA;AFy3CR;;AEv3CM;EACE,oCAAA;AF03CR;;AEj4CM;EACE,oCAAA;AFo4CR;;AEl4CM;EACE,yBAAA;AFq4CR;;AEn4CM;EACE,oCAAA;AFs4CR;;AE74CM;EACE,oCAAA;AFg5CR;;AE94CM;EACE,yBAAA;AFi5CR;;AE/4CM;EACE,oCAAA;AFk5CR;;AEz5CM;EACE,oCAAA;AF45CR;;AE15CM;EACE,yBAAA;AF65CR;;AE35CM;EACE,oCAAA;AF85CR;;AEr6CM;EACE,oCAAA;AFw6CR;;AEt6CM;EACE,yBAAA;AFy6CR;;AEv6CM;EACE,oCAAA;AF06CR;;AEj7CM;EACE,oCAAA;AFo7CR;;AEl7CM;EACE,yBAAA;AFq7CR;;AEn7CM;EACE,oCAAA;AFs7CR;;AE77CM;EACE,oCAAA;AFg8CR;;AE97CM;EACE,yBAAA;AFi8CR;;AE/7CM;EACE,oCAAA;AFk8CR;;AEz8CM;EACE,oCAAA;AF48CR;;AE18CM;EACE,yBAAA;AF68CR;;AE38CM;EACE,oCAAA;AF88CR;;AEr9CM;EACE,oCAAA;AFw9CR;;AEt9CM;EACE,yBAAA;AFy9CR;;AEv9CM;EACE,oCAAA;AF09CR;;AEj+CM;EACE,oCAAA;AFo+CR;;AEl+CM;EACE,yBAAA;AFq+CR;;AEn+CM;EACE,oCAAA;AFs+CR;;AE7+CM;EACE,oCAAA;AFg/CR;;AE9+CM;EACE,yBAAA;AFi/CR;;AE/+CM;EACE,oCAAA;AFk/CR;;AEngDM;EACE,oCAAA;AFsgDR;;AEpgDM;EACE,yBAAA;AFugDR;;AErgDM;EACE,oCAAA;AFwgDR;;AErgDM;EACE,oCAAA;AFwgDR;;AEtgDM;EACE,yBAAA;AFygDR;;AEvgDM;EACE,oCAAA;AF0gDR;;AEjhDM;EACE,oCAAA;AFohDR;;AElhDM;EACE,yBAAA;AFqhDR;;AEnhDM;EACE,oCAAA;AFshDR;;AE7hDM;EACE,oCAAA;AFgiDR;;AE9hDM;EACE,yBAAA;AFiiDR;;AE/hDM;EACE,oCAAA;AFkiDR;;AEziDM;EACE,oCAAA;AF4iDR;;AE1iDM;EACE,yBAAA;AF6iDR;;AE3iDM;EACE,oCAAA;AF8iDR;;AErjDM;EACE,oCAAA;AFwjDR;;AEtjDM;EACE,yBAAA;AFyjDR;;AEvjDM;EACE,oCAAA;AF0jDR;;AEjkDM;EACE,oCAAA;AFokDR;;AElkDM;EACE,yBAAA;AFqkDR;;AEnkDM;EACE,oCAAA;AFskDR;;AE7kDM;EACE,oCAAA;AFglDR;;AE9kDM;EACE,yBAAA;AFilDR;;AE/kDM;EACE,oCAAA;AFklDR;;AEzlDM;EACE,oCAAA;AF4lDR;;AE1lDM;EACE,yBAAA;AF6lDR;;AE3lDM;EACE,oCAAA;AF8lDR;;AErmDM;EACE,oCAAA;AFwmDR;;AEtmDM;EACE,yBAAA;AFymDR;;AEvmDM;EACE,oCAAA;AF0mDR;;AEjnDM;EACE,oCAAA;AFonDR;;AElnDM;EACE,yBAAA;AFqnDR;;AEnnDM;EACE,oCAAA;AFsnDR;;AE7nDM;EACE,oCAAA;AFgoDR;;AE9nDM;EACE,yBAAA;AFioDR;;AE/nDM;EACE,oCAAA;AFkoDR;;AEzoDM;EACE,oCAAA;AF4oDR;;AE1oDM;EACE,yBAAA;AF6oDR;;AE3oDM;EACE,oCAAA;AF8oDR;;AErpDM;EACE,oCAAA;AFwpDR;;AEtpDM;EACE,yBAAA;AFypDR;;AEvpDM;EACE,oCAAA;AF0pDR;;AE3qDM;EACE,oCAAA;AF8qDR;;AE5qDM;EACE,yBAAA;AF+qDR;;AE7qDM;EACE,oCAAA;AFgrDR;;AE7qDM;EACE,oCAAA;AFgrDR;;AE9qDM;EACE,yBAAA;AFirDR;;AE/qDM;EACE,oCAAA;AFkrDR;;AEzrDM;EACE,oCAAA;AF4rDR;;AE1rDM;EACE,yBAAA;AF6rDR;;AE3rDM;EACE,oCAAA;AF8rDR;;AErsDM;EACE,oCAAA;AFwsDR;;AEtsDM;EACE,yBAAA;AFysDR;;AEvsDM;EACE,oCAAA;AF0sDR;;AEjtDM;EACE,oCAAA;AFotDR;;AEltDM;EACE,yBAAA;AFqtDR;;AEntDM;EACE,oCAAA;AFstDR;;AE7tDM;EACE,oCAAA;AFguDR;;AE9tDM;EACE,yBAAA;AFiuDR;;AE/tDM;EACE,oCAAA;AFkuDR;;AEzuDM;EACE,oCAAA;AF4uDR;;AE1uDM;EACE,yBAAA;AF6uDR;;AE3uDM;EACE,oCAAA;AF8uDR;;AErvDM;EACE,oCAAA;AFwvDR;;AEtvDM;EACE,yBAAA;AFyvDR;;AEvvDM;EACE,oCAAA;AF0vDR;;AEjwDM;EACE,oCAAA;AFowDR;;AElwDM;EACE,yBAAA;AFqwDR;;AEnwDM;EACE,oCAAA;AFswDR;;AE7wDM;EACE,oCAAA;AFgxDR;;AE9wDM;EACE,yBAAA;AFixDR;;AE/wDM;EACE,oCAAA;AFkxDR;;AEzxDM;EACE,oCAAA;AF4xDR;;AE1xDM;EACE,yBAAA;AF6xDR;;AE3xDM;EACE,oCAAA;AF8xDR;;AEryDM;EACE,oCAAA;AFwyDR;;AEtyDM;EACE,yBAAA;AFyyDR;;AEvyDM;EACE,oCAAA;AF0yDR;;AEjzDM;EACE,oCAAA;AFozDR;;AElzDM;EACE,yBAAA;AFqzDR;;AEnzDM;EACE,oCAAA;AFszDR;;AE7zDM;EACE,oCAAA;AFg0DR;;AE9zDM;EACE,yBAAA;AFi0DR;;AE/zDM;EACE,oCAAA;AFk0DR;;AEn1DM;EACE,oCAAA;AFs1DR;;AEp1DM;EACE,yBAAA;AFu1DR;;AEr1DM;EACE,oCAAA;AFw1DR;;AEr1DM;EACE,oCAAA;AFw1DR;;AEt1DM;EACE,yBAAA;AFy1DR;;AEv1DM;EACE,oCAAA;AF01DR;;AEj2DM;EACE,oCAAA;AFo2DR;;AEl2DM;EACE,yBAAA;AFq2DR;;AEn2DM;EACE,oCAAA;AFs2DR;;AE72DM;EACE,oCAAA;AFg3DR;;AE92DM;EACE,yBAAA;AFi3DR;;AE/2DM;EACE,oCAAA;AFk3DR;;AEz3DM;EACE,oCAAA;AF43DR;;AE13DM;EACE,yBAAA;AF63DR;;AE33DM;EACE,oCAAA;AF83DR;;AEr4DM;EACE,oCAAA;AFw4DR;;AEt4DM;EACE,yBAAA;AFy4DR;;AEv4DM;EACE,oCAAA;AF04DR;;AEj5DM;EACE,oCAAA;AFo5DR;;AEl5DM;EACE,yBAAA;AFq5DR;;AEn5DM;EACE,oCAAA;AFs5DR;;AE75DM;EACE,oCAAA;AFg6DR;;AE95DM;EACE,yBAAA;AFi6DR;;AE/5DM;EACE,oCAAA;AFk6DR;;AEz6DM;EACE,oCAAA;AF46DR;;AE16DM;EACE,yBAAA;AF66DR;;AE36DM;EACE,oCAAA;AF86DR;;AEr7DM;EACE,oCAAA;AFw7DR;;AEt7DM;EACE,yBAAA;AFy7DR;;AEv7DM;EACE,oCAAA;AF07DR;;AEj8DM;EACE,oCAAA;AFo8DR;;AEl8DM;EACE,yBAAA;AFq8DR;;AEn8DM;EACE,oCAAA;AFs8DR;;AE78DM;EACE,oCAAA;AFg9DR;;AE98DM;EACE,yBAAA;AFi9DR;;AE/8DM;EACE,oCAAA;AFk9DR;;AEz9DM;EACE,oCAAA;AF49DR;;AE19DM;EACE,yBAAA;AF69DR;;AE39DM;EACE,oCAAA;AF89DR;;AEr+DM;EACE,oCAAA;AFw+DR;;AEt+DM;EACE,yBAAA;AFy+DR;;AEv+DM;EACE,oCAAA;AF0+DR;;AE3/DM;EACE,oCAAA;AF8/DR;;AE5/DM;EACE,yBAAA;AF+/DR;;AE7/DM;EACE,oCAAA;AFggER;;AE7/DM;EACE,oCAAA;AFggER;;AE9/DM;EACE,yBAAA;AFigER;;AE//DM;EACE,oCAAA;AFkgER;;AEzgEM;EACE,oCAAA;AF4gER;;AE1gEM;EACE,yBAAA;AF6gER;;AE3gEM;EACE,oCAAA;AF8gER;;AErhEM;EACE,oCAAA;AFwhER;;AEthEM;EACE,yBAAA;AFyhER;;AEvhEM;EACE,oCAAA;AF0hER;;AEjiEM;EACE,oCAAA;AFoiER;;AEliEM;EACE,yBAAA;AFqiER;;AEniEM;EACE,oCAAA;AFsiER;;AE7iEM;EACE,oCAAA;AFgjER;;AE9iEM;EACE,yBAAA;AFijER;;AE/iEM;EACE,oCAAA;AFkjER;;AEzjEM;EACE,oCAAA;AF4jER;;AE1jEM;EACE,yBAAA;AF6jER;;AE3jEM;EACE,oCAAA;AF8jER;;AErkEM;EACE,oCAAA;AFwkER;;AEtkEM;EACE,yBAAA;AFykER;;AEvkEM;EACE,oCAAA;AF0kER;;AEjlEM;EACE,oCAAA;AFolER;;AEllEM;EACE,yBAAA;AFqlER;;AEnlEM;EACE,oCAAA;AFslER;;AE7lEM;EACE,oCAAA;AFgmER;;AE9lEM;EACE,yBAAA;AFimER;;AE/lEM;EACE,oCAAA;AFkmER;;AEzmEM;EACE,oCAAA;AF4mER;;AE1mEM;EACE,yBAAA;AF6mER;;AE3mEM;EACE,oCAAA;AF8mER;;AErnEM;EACE,oCAAA;AFwnER;;AEtnEM;EACE,yBAAA;AFynER;;AEvnEM;EACE,oCAAA;AF0nER;;AEjoEM;EACE,oCAAA;AFooER;;AEloEM;EACE,yBAAA;AFqoER;;AEnoEM;EACE,oCAAA;AFsoER;;AE7oEM;EACE,oCAAA;AFgpER;;AE9oEM;EACE,yBAAA;AFipER;;AE/oEM;EACE,oCAAA;AFkpER;;AEnqEM;EACE,oCAAA;AFsqER;;AEpqEM;EACE,yBAAA;AFuqER;;AErqEM;EACE,oCAAA;AFwqER;;AErqEM;EACE,oCAAA;AFwqER;;AEtqEM;EACE,yBAAA;AFyqER;;AEvqEM;EACE,oCAAA;AF0qER;;AEjrEM;EACE,oCAAA;AForER;;AElrEM;EACE,yBAAA;AFqrER;;AEnrEM;EACE,oCAAA;AFsrER;;AE7rEM;EACE,oCAAA;AFgsER;;AE9rEM;EACE,yBAAA;AFisER;;AE/rEM;EACE,oCAAA;AFksER;;AEzsEM;EACE,oCAAA;AF4sER;;AE1sEM;EACE,yBAAA;AF6sER;;AE3sEM;EACE,oCAAA;AF8sER;;AErtEM;EACE,oCAAA;AFwtER;;AEttEM;EACE,yBAAA;AFytER;;AEvtEM;EACE,oCAAA;AF0tER;;AEjuEM;EACE,oCAAA;AFouER;;AEluEM;EACE,yBAAA;AFquER;;AEnuEM;EACE,oCAAA;AFsuER;;AE7uEM;EACE,oCAAA;AFgvER;;AE9uEM;EACE,yBAAA;AFivER;;AE/uEM;EACE,oCAAA;AFkvER;;AEzvEM;EACE,oCAAA;AF4vER;;AE1vEM;EACE,yBAAA;AF6vER;;AE3vEM;EACE,oCAAA;AF8vER;;AErwEM;EACE,oCAAA;AFwwER;;AEtwEM;EACE,yBAAA;AFywER;;AEvwEM;EACE,oCAAA;AF0wER;;AEjxEM;EACE,oCAAA;AFoxER;;AElxEM;EACE,yBAAA;AFqxER;;AEnxEM;EACE,oCAAA;AFsxER;;AE7xEM;EACE,oCAAA;AFgyER;;AE9xEM;EACE,yBAAA;AFiyER;;AE/xEM;EACE,oCAAA;AFkyER;;AEzyEM;EACE,oCAAA;AF4yER;;AE1yEM;EACE,yBAAA;AF6yER;;AE3yEM;EACE,oCAAA;AF8yER;;AErzEM;EACE,oCAAA;AFwzER;;AEtzEM;EACE,yBAAA;AFyzER;;AEvzEM;EACE,oCAAA;AF0zER;;AE30EM;EACE,oCAAA;AF80ER;;AE50EM;EACE,yBAAA;AF+0ER;;AE70EM;EACE,oCAAA;AFg1ER;;AE70EM;EACE,oCAAA;AFg1ER;;AE90EM;EACE,yBAAA;AFi1ER;;AE/0EM;EACE,oCAAA;AFk1ER;;AEz1EM;EACE,oCAAA;AF41ER;;AE11EM;EACE,yBAAA;AF61ER;;AE31EM;EACE,oCAAA;AF81ER;;AEr2EM;EACE,oCAAA;AFw2ER;;AEt2EM;EACE,yBAAA;AFy2ER;;AEv2EM;EACE,oCAAA;AF02ER;;AEj3EM;EACE,oCAAA;AFo3ER;;AEl3EM;EACE,yBAAA;AFq3ER;;AEn3EM;EACE,oCAAA;AFs3ER;;AE73EM;EACE,oCAAA;AFg4ER;;AE93EM;EACE,yBAAA;AFi4ER;;AE/3EM;EACE,oCAAA;AFk4ER;;AEz4EM;EACE,oCAAA;AF44ER;;AE14EM;EACE,yBAAA;AF64ER;;AE34EM;EACE,oCAAA;AF84ER;;AEr5EM;EACE,oCAAA;AFw5ER;;AEt5EM;EACE,yBAAA;AFy5ER;;AEv5EM;EACE,oCAAA;AF05ER;;AEj6EM;EACE,oCAAA;AFo6ER;;AEl6EM;EACE,yBAAA;AFq6ER;;AEn6EM;EACE,oCAAA;AFs6ER;;AE76EM;EACE,oCAAA;AFg7ER;;AE96EM;EACE,yBAAA;AFi7ER;;AE/6EM;EACE,oCAAA;AFk7ER;;AEz7EM;EACE,oCAAA;AF47ER;;AE17EM;EACE,yBAAA;AF67ER;;AE37EM;EACE,oCAAA;AF87ER;;AEr8EM;EACE,oCAAA;AFw8ER;;AEt8EM;EACE,yBAAA;AFy8ER;;AEv8EM;EACE,oCAAA;AF08ER;;AEj9EM;EACE,oCAAA;AFo9ER;;AEl9EM;EACE,yBAAA;AFq9ER;;AEn9EM;EACE,oCAAA;AFs9ER;;AE79EM;EACE,oCAAA;AFg+ER;;AE99EM;EACE,yBAAA;AFi+ER;;AE/9EM;EACE,oCAAA;AFk+ER;;AEn/EM;EACE,oCAAA;AFs/ER;;AEp/EM;EACE,yBAAA;AFu/ER;;AEr/EM;EACE,oCAAA;AFw/ER;;AEr/EM;EACE,oCAAA;AFw/ER;;AEt/EM;EACE,yBAAA;AFy/ER;;AEv/EM;EACE,oCAAA;AF0/ER;;AEjgFM;EACE,oCAAA;AFogFR;;AElgFM;EACE,yBAAA;AFqgFR;;AEngFM;EACE,oCAAA;AFsgFR;;AE7gFM;EACE,oCAAA;AFghFR;;AE9gFM;EACE,yBAAA;AFihFR;;AE/gFM;EACE,oCAAA;AFkhFR;;AEzhFM;EACE,oCAAA;AF4hFR;;AE1hFM;EACE,yBAAA;AF6hFR;;AE3hFM;EACE,oCAAA;AF8hFR;;AEriFM;EACE,oCAAA;AFwiFR;;AEtiFM;EACE,yBAAA;AFyiFR;;AEviFM;EACE,oCAAA;AF0iFR;;AEjjFM;EACE,oCAAA;AFojFR;;AEljFM;EACE,yBAAA;AFqjFR;;AEnjFM;EACE,oCAAA;AFsjFR;;AE7jFM;EACE,oCAAA;AFgkFR;;AE9jFM;EACE,yBAAA;AFikFR;;AE/jFM;EACE,oCAAA;AFkkFR;;AEzkFM;EACE,oCAAA;AF4kFR;;AE1kFM;EACE,yBAAA;AF6kFR;;AE3kFM;EACE,oCAAA;AF8kFR;;AErlFM;EACE,oCAAA;AFwlFR;;AEtlFM;EACE,yBAAA;AFylFR;;AEvlFM;EACE,oCAAA;AF0lFR;;AEjmFM;EACE,oCAAA;AFomFR;;AElmFM;EACE,yBAAA;AFqmFR;;AEnmFM;EACE,oCAAA;AFsmFR;;AE7mFM;EACE,oCAAA;AFgnFR;;AE9mFM;EACE,yBAAA;AFinFR;;AE/mFM;EACE,oCAAA;AFknFR;;AEznFM;EACE,oCAAA;AF4nFR;;AE1nFM;EACE,yBAAA;AF6nFR;;AE3nFM;EACE,oCAAA;AF8nFR;;AEroFM;EACE,oCAAA;AFwoFR;;AEtoFM;EACE,yBAAA;AFyoFR;;AEvoFM;EACE,oCAAA;AF0oFR;;AE3pFM;EACE,oCAAA;AF8pFR;;AE5pFM;EACE,yBAAA;AF+pFR;;AE7pFM;EACE,oCAAA;AFgqFR;;AE7pFM;EACE,oCAAA;AFgqFR;;AE9pFM;EACE,yBAAA;AFiqFR;;AE/pFM;EACE,oCAAA;AFkqFR;;AEzqFM;EACE,oCAAA;AF4qFR;;AE1qFM;EACE,yBAAA;AF6qFR;;AE3qFM;EACE,oCAAA;AF8qFR;;AErrFM;EACE,oCAAA;AFwrFR;;AEtrFM;EACE,yBAAA;AFyrFR;;AEvrFM;EACE,oCAAA;AF0rFR;;AEjsFM;EACE,oCAAA;AFosFR;;AElsFM;EACE,yBAAA;AFqsFR;;AEnsFM;EACE,oCAAA;AFssFR;;AE7sFM;EACE,oCAAA;AFgtFR;;AE9sFM;EACE,yBAAA;AFitFR;;AE/sFM;EACE,oCAAA;AFktFR;;AEztFM;EACE,oCAAA;AF4tFR;;AE1tFM;EACE,yBAAA;AF6tFR;;AE3tFM;EACE,oCAAA;AF8tFR;;AEruFM;EACE,oCAAA;AFwuFR;;AEtuFM;EACE,yBAAA;AFyuFR;;AEvuFM;EACE,oCAAA;AF0uFR;;AEjvFM;EACE,oCAAA;AFovFR;;AElvFM;EACE,yBAAA;AFqvFR;;AEnvFM;EACE,oCAAA;AFsvFR;;AE7vFM;EACE,oCAAA;AFgwFR;;AE9vFM;EACE,yBAAA;AFiwFR;;AE/vFM;EACE,oCAAA;AFkwFR;;AEzwFM;EACE,oCAAA;AF4wFR;;AE1wFM;EACE,yBAAA;AF6wFR;;AE3wFM;EACE,oCAAA;AF8wFR;;AErxFM;EACE,oCAAA;AFwxFR;;AEtxFM;EACE,yBAAA;AFyxFR;;AEvxFM;EACE,oCAAA;AF0xFR;;AEjyFM;EACE,oCAAA;AFoyFR;;AElyFM;EACE,yBAAA;AFqyFR;;AEnyFM;EACE,oCAAA;AFsyFR;;AE7yFM;EACE,oCAAA;AFgzFR;;AE9yFM;EACE,yBAAA;AFizFR;;AE/yFM;EACE,oCAAA;AFkzFR;;AEn0FM;EACE,oCAAA;AFs0FR;;AEp0FM;EACE,yBAAA;AFu0FR;;AEr0FM;EACE,oCAAA;AFw0FR;;AEr0FM;EACE,oCAAA;AFw0FR;;AEt0FM;EACE,yBAAA;AFy0FR;;AEv0FM;EACE,oCAAA;AF00FR;;AEj1FM;EACE,oCAAA;AFo1FR;;AEl1FM;EACE,yBAAA;AFq1FR;;AEn1FM;EACE,oCAAA;AFs1FR;;AE71FM;EACE,oCAAA;AFg2FR;;AE91FM;EACE,yBAAA;AFi2FR;;AE/1FM;EACE,oCAAA;AFk2FR;;AEz2FM;EACE,oCAAA;AF42FR;;AE12FM;EACE,yBAAA;AF62FR;;AE32FM;EACE,oCAAA;AF82FR;;AEr3FM;EACE,oCAAA;AFw3FR;;AEt3FM;EACE,yBAAA;AFy3FR;;AEv3FM;EACE,oCAAA;AF03FR;;AEj4FM;EACE,oCAAA;AFo4FR;;AEl4FM;EACE,yBAAA;AFq4FR;;AEn4FM;EACE,oCAAA;AFs4FR;;AE74FM;EACE,oCAAA;AFg5FR;;AE94FM;EACE,yBAAA;AFi5FR;;AE/4FM;EACE,oCAAA;AFk5FR;;AEz5FM;EACE,oCAAA;AF45FR;;AE15FM;EACE,yBAAA;AF65FR;;AE35FM;EACE,oCAAA;AF85FR;;AEr6FM;EACE,oCAAA;AFw6FR;;AEt6FM;EACE,yBAAA;AFy6FR;;AEv6FM;EACE,oCAAA;AF06FR;;AE37FM;EACE,oCAAA;AF87FR;;AE57FM;EACE,yBAAA;AF+7FR;;AE77FM;EACE,oCAAA;AFg8FR;;AE77FM;EACE,oCAAA;AFg8FR;;AE97FM;EACE,yBAAA;AFi8FR;;AE/7FM;EACE,oCAAA;AFk8FR;;AEz8FM;EACE,oCAAA;AF48FR;;AE18FM;EACE,yBAAA;AF68FR;;AE38FM;EACE,oCAAA;AF88FR;;AEr9FM;EACE,oCAAA;AFw9FR;;AEt9FM;EACE,yBAAA;AFy9FR;;AEv9FM;EACE,oCAAA;AF09FR;;AEj+FM;EACE,oCAAA;AFo+FR;;AEl+FM;EACE,yBAAA;AFq+FR;;AEn+FM;EACE,oCAAA;AFs+FR;;AE7+FM;EACE,oCAAA;AFg/FR;;AE9+FM;EACE,yBAAA;AFi/FR;;AE/+FM;EACE,oCAAA;AFk/FR;;AEz/FM;EACE,oCAAA;AF4/FR;;AE1/FM;EACE,yBAAA;AF6/FR;;AE3/FM;EACE,oCAAA;AF8/FR;;AErgGM;EACE,oCAAA;AFwgGR;;AEtgGM;EACE,yBAAA;AFygGR;;AEvgGM;EACE,oCAAA;AF0gGR;;AEjhGM;EACE,oCAAA;AFohGR;;AElhGM;EACE,yBAAA;AFqhGR;;AEnhGM;EACE,oCAAA;AFshGR;;AE7hGM;EACE,oCAAA;AFgiGR;;AE9hGM;EACE,yBAAA;AFiiGR;;AE/hGM;EACE,oCAAA;AFkiGR;;AEnjGM;EACE,oCAAA;AFsjGR;;AEpjGM;EACE,yBAAA;AFujGR;;AErjGM;EACE,oCAAA;AFwjGR;;AErjGM;EACE,oCAAA;AFwjGR;;AEtjGM;EACE,yBAAA;AFyjGR;;AEvjGM;EACE,oCAAA;AF0jGR;;AEjkGM;EACE,oCAAA;AFokGR;;AElkGM;EACE,yBAAA;AFqkGR;;AEnkGM;EACE,oCAAA;A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","sourcesContent":["@charset \"UTF-8\";\n@import 'https://fonts.googleapis.com/css?family=Ubuntu';\n@font-face {\n font-family: sweeticons;\n font-style: normal;\n font-weight: 400;\n src: url(\"./icons/assets/SweetIcons-Regular.eot\");\n src: url(\"./icons/assets/SweetIcons-Regular.woff2\") format(\"woff2\"), url(\"./icons/assets/SweetIcons-Regular.woff\") format(\"woff\"), url(\"./icons/assets/SweetIcons-Regular.ttf\") format(\"truetype\");\n}\n.s-icon,\n.s-icons,\n.sweet-icons,\n.sweet-icon {\n font-family: sweeticons, sans-serif;\n font-weight: normal;\n font-style: normal;\n font-size: 28px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-feature-settings: \"liga\";\n -moz-font-feature-settings: \"liga=1\";\n -moz-font-feature-settings: \"liga\";\n font-feature-settings: \"liga\";\n text-align: center;\n}\n\n.webo {\n background-color: #0062d6 !important;\n}\n\n.webo-text {\n color: #0062d6 !important;\n}\n\n.webo-waves .waves-ripple {\n background-color: #0062d6 !important;\n}\n\n.webo.second {\n background-color: #0077FA !important;\n}\n\n.webo-text.text-second {\n color: #0077FA !important;\n}\n\n.webo-waves.waves-second .waves-ripple {\n background-color: #0077FA !important;\n}\n\n.webo.third {\n background-color: #09bddd !important;\n}\n\n.webo-text.text-third {\n color: #09bddd !important;\n}\n\n.webo-waves.waves-third .waves-ripple {\n background-color: #09bddd !important;\n}\n\n.webo.fourth {\n background-color: #cbe7fe !important;\n}\n\n.webo-text.text-fourth {\n color: #cbe7fe !important;\n}\n\n.webo-waves.waves-fourth .waves-ripple {\n background-color: #cbe7fe !important;\n}\n\n.webo.lighten-5 {\n background-color: #bbdefb !important;\n}\n\n.webo-text.text-lighten-5 {\n color: #bbdefb !important;\n}\n\n.webo-waves.waves-lighten-5 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.webo.lighten-4 {\n background-color: #42a5f5 !important;\n}\n\n.webo-text.text-lighten-4 {\n color: #42a5f5 !important;\n}\n\n.webo-waves.waves-lighten-4 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.webo.lighten-3 {\n background-color: #7986cb !important;\n}\n\n.webo-text.text-lighten-3 {\n color: #7986cb !important;\n}\n\n.webo-waves.waves-lighten-3 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.webo.lighten-2 {\n background-color: #512da8 !important;\n}\n\n.webo-text.text-lighten-2 {\n color: #512da8 !important;\n}\n\n.webo-waves.waves-lighten-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.webo.lighten-1 {\n background-color: #283593 !important;\n}\n\n.webo-text.text-lighten-1 {\n color: #283593 !important;\n}\n\n.webo-waves.waves-lighten-1 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.webo.darken-1 {\n background-color: #d0181e !important;\n}\n\n.webo-text.text-darken-1 {\n color: #d0181e !important;\n}\n\n.webo-waves.waves-darken-1 .waves-ripple {\n background-color: #d0181e !important;\n}\n\n.webo.darken-2 {\n background-color: #b9151b !important;\n}\n\n.webo-text.text-darken-2 {\n color: #b9151b !important;\n}\n\n.webo-waves.waves-darken-2 .waves-ripple {\n background-color: #b9151b !important;\n}\n\n.webo.darken-3 {\n background-color: #a21318 !important;\n}\n\n.webo-text.text-darken-3 {\n color: #a21318 !important;\n}\n\n.webo-waves.waves-darken-3 .waves-ripple {\n background-color: #a21318 !important;\n}\n\n.webo.b- {\n background-color: #49ce5f !important;\n}\n\n.webo-text.text-b- {\n color: #49ce5f !important;\n}\n\n.webo-waves.waves-b- .waves-ripple {\n background-color: #49ce5f !important;\n}\n\n.webo.darken-4 {\n background-color: #8b1014 !important;\n}\n\n.webo-text.text-darken-4 {\n color: #8b1014 !important;\n}\n\n.webo-waves.waves-darken-4 .waves-ripple {\n background-color: #8b1014 !important;\n}\n\n.red {\n background-color: #f44336 !important;\n}\n\n.red-text {\n color: #f44336 !important;\n}\n\n.red-waves .waves-ripple {\n background-color: #f44336 !important;\n}\n\n.red.lighten-5 {\n background-color: #ffebee !important;\n}\n\n.red-text.text-lighten-5 {\n color: #ffebee !important;\n}\n\n.red-waves.waves-lighten-5 .waves-ripple {\n background-color: #ffebee !important;\n}\n\n.red.lighten-4 {\n background-color: #ffcdd2 !important;\n}\n\n.red-text.text-lighten-4 {\n color: #ffcdd2 !important;\n}\n\n.red-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffcdd2 !important;\n}\n\n.red.lighten-3 {\n background-color: #ef9a9a !important;\n}\n\n.red-text.text-lighten-3 {\n color: #ef9a9a !important;\n}\n\n.red-waves.waves-lighten-3 .waves-ripple {\n background-color: #ef9a9a !important;\n}\n\n.red.lighten-2 {\n background-color: #e57373 !important;\n}\n\n.red-text.text-lighten-2 {\n color: #e57373 !important;\n}\n\n.red-waves.waves-lighten-2 .waves-ripple {\n background-color: #e57373 !important;\n}\n\n.red.lighten-1 {\n background-color: #ef5350 !important;\n}\n\n.red-text.text-lighten-1 {\n color: #ef5350 !important;\n}\n\n.red-waves.waves-lighten-1 .waves-ripple {\n background-color: #ef5350 !important;\n}\n\n.red.darken-1 {\n background-color: #e53935 !important;\n}\n\n.red-text.text-darken-1 {\n color: #e53935 !important;\n}\n\n.red-waves.waves-darken-1 .waves-ripple {\n background-color: #e53935 !important;\n}\n\n.red.darken-2 {\n background-color: #d32f2f !important;\n}\n\n.red-text.text-darken-2 {\n color: #d32f2f !important;\n}\n\n.red-waves.waves-darken-2 .waves-ripple {\n background-color: #d32f2f !important;\n}\n\n.red.darken-3 {\n background-color: #c62828 !important;\n}\n\n.red-text.text-darken-3 {\n color: #c62828 !important;\n}\n\n.red-waves.waves-darken-3 .waves-ripple {\n background-color: #c62828 !important;\n}\n\n.red.darken-4 {\n background-color: #b71c1c !important;\n}\n\n.red-text.text-darken-4 {\n color: #b71c1c !important;\n}\n\n.red-waves.waves-darken-4 .waves-ripple {\n background-color: #b71c1c !important;\n}\n\n.red.accent-1 {\n background-color: #ff8a80 !important;\n}\n\n.red-text.text-accent-1 {\n color: #ff8a80 !important;\n}\n\n.red-waves.waves-accent-1 .waves-ripple {\n background-color: #ff8a80 !important;\n}\n\n.red.accent-2 {\n background-color: #ff5252 !important;\n}\n\n.red-text.text-accent-2 {\n color: #ff5252 !important;\n}\n\n.red-waves.waves-accent-2 .waves-ripple {\n background-color: #ff5252 !important;\n}\n\n.red.accent-3 {\n background-color: #ff1744 !important;\n}\n\n.red-text.text-accent-3 {\n color: #ff1744 !important;\n}\n\n.red-waves.waves-accent-3 .waves-ripple {\n background-color: #ff1744 !important;\n}\n\n.red.accent-4 {\n background-color: #d50000 !important;\n}\n\n.red-text.text-accent-4 {\n color: #d50000 !important;\n}\n\n.red-waves.waves-accent-4 .waves-ripple {\n background-color: #d50000 !important;\n}\n\n.pink {\n background-color: #e91e63 !important;\n}\n\n.pink-text {\n color: #e91e63 !important;\n}\n\n.pink-waves .waves-ripple {\n background-color: #e91e63 !important;\n}\n\n.pink.lighten-5 {\n background-color: #fce4ec !important;\n}\n\n.pink-text.text-lighten-5 {\n color: #fce4ec !important;\n}\n\n.pink-waves.waves-lighten-5 .waves-ripple {\n background-color: #fce4ec !important;\n}\n\n.pink.lighten-4 {\n background-color: #f8bbd0 !important;\n}\n\n.pink-text.text-lighten-4 {\n color: #f8bbd0 !important;\n}\n\n.pink-waves.waves-lighten-4 .waves-ripple {\n background-color: #f8bbd0 !important;\n}\n\n.pink.lighten-3 {\n background-color: #f48fb1 !important;\n}\n\n.pink-text.text-lighten-3 {\n color: #f48fb1 !important;\n}\n\n.pink-waves.waves-lighten-3 .waves-ripple {\n background-color: #f48fb1 !important;\n}\n\n.pink.lighten-2 {\n background-color: #f06292 !important;\n}\n\n.pink-text.text-lighten-2 {\n color: #f06292 !important;\n}\n\n.pink-waves.waves-lighten-2 .waves-ripple {\n background-color: #f06292 !important;\n}\n\n.pink.lighten-1 {\n background-color: #ec407a !important;\n}\n\n.pink-text.text-lighten-1 {\n color: #ec407a !important;\n}\n\n.pink-waves.waves-lighten-1 .waves-ripple {\n background-color: #ec407a !important;\n}\n\n.pink.darken-1 {\n background-color: #d81b60 !important;\n}\n\n.pink-text.text-darken-1 {\n color: #d81b60 !important;\n}\n\n.pink-waves.waves-darken-1 .waves-ripple {\n background-color: #d81b60 !important;\n}\n\n.pink.darken-2 {\n background-color: #c2185b !important;\n}\n\n.pink-text.text-darken-2 {\n color: #c2185b !important;\n}\n\n.pink-waves.waves-darken-2 .waves-ripple {\n background-color: #c2185b !important;\n}\n\n.pink.darken-3 {\n background-color: #ad1457 !important;\n}\n\n.pink-text.text-darken-3 {\n color: #ad1457 !important;\n}\n\n.pink-waves.waves-darken-3 .waves-ripple {\n background-color: #ad1457 !important;\n}\n\n.pink.darken-4 {\n background-color: #880e4f !important;\n}\n\n.pink-text.text-darken-4 {\n color: #880e4f !important;\n}\n\n.pink-waves.waves-darken-4 .waves-ripple {\n background-color: #880e4f !important;\n}\n\n.pink.accent-1 {\n background-color: #ff80ab !important;\n}\n\n.pink-text.text-accent-1 {\n color: #ff80ab !important;\n}\n\n.pink-waves.waves-accent-1 .waves-ripple {\n background-color: #ff80ab !important;\n}\n\n.pink.accent-2 {\n background-color: #ff4081 !important;\n}\n\n.pink-text.text-accent-2 {\n color: #ff4081 !important;\n}\n\n.pink-waves.waves-accent-2 .waves-ripple {\n background-color: #ff4081 !important;\n}\n\n.pink.accent-3 {\n background-color: #f50057 !important;\n}\n\n.pink-text.text-accent-3 {\n color: #f50057 !important;\n}\n\n.pink-waves.waves-accent-3 .waves-ripple {\n background-color: #f50057 !important;\n}\n\n.pink.accent-4 {\n background-color: #c51162 !important;\n}\n\n.pink-text.text-accent-4 {\n color: #c51162 !important;\n}\n\n.pink-waves.waves-accent-4 .waves-ripple {\n background-color: #c51162 !important;\n}\n\n.purple {\n background-color: #9c27b0 !important;\n}\n\n.purple-text {\n color: #9c27b0 !important;\n}\n\n.purple-waves .waves-ripple {\n background-color: #9c27b0 !important;\n}\n\n.purple.lighten-5 {\n background-color: #f3e5f5 !important;\n}\n\n.purple-text.text-lighten-5 {\n color: #f3e5f5 !important;\n}\n\n.purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #f3e5f5 !important;\n}\n\n.purple.lighten-4 {\n background-color: #e1bee7 !important;\n}\n\n.purple-text.text-lighten-4 {\n color: #e1bee7 !important;\n}\n\n.purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #e1bee7 !important;\n}\n\n.purple.lighten-3 {\n background-color: #ce93d8 !important;\n}\n\n.purple-text.text-lighten-3 {\n color: #ce93d8 !important;\n}\n\n.purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #ce93d8 !important;\n}\n\n.purple.lighten-2 {\n background-color: #ba68c8 !important;\n}\n\n.purple-text.text-lighten-2 {\n color: #ba68c8 !important;\n}\n\n.purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #ba68c8 !important;\n}\n\n.purple.lighten-1 {\n background-color: #ab47bc !important;\n}\n\n.purple-text.text-lighten-1 {\n color: #ab47bc !important;\n}\n\n.purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #ab47bc !important;\n}\n\n.purple.darken-1 {\n background-color: #8e24aa !important;\n}\n\n.purple-text.text-darken-1 {\n color: #8e24aa !important;\n}\n\n.purple-waves.waves-darken-1 .waves-ripple {\n background-color: #8e24aa !important;\n}\n\n.purple.darken-2 {\n background-color: #7b1fa2 !important;\n}\n\n.purple-text.text-darken-2 {\n color: #7b1fa2 !important;\n}\n\n.purple-waves.waves-darken-2 .waves-ripple {\n background-color: #7b1fa2 !important;\n}\n\n.purple.darken-3 {\n background-color: #6a1b9a !important;\n}\n\n.purple-text.text-darken-3 {\n color: #6a1b9a !important;\n}\n\n.purple-waves.waves-darken-3 .waves-ripple {\n background-color: #6a1b9a !important;\n}\n\n.purple.darken-4 {\n background-color: #4a148c !important;\n}\n\n.purple-text.text-darken-4 {\n color: #4a148c !important;\n}\n\n.purple-waves.waves-darken-4 .waves-ripple {\n background-color: #4a148c !important;\n}\n\n.purple.accent-1 {\n background-color: #ea80fc !important;\n}\n\n.purple-text.text-accent-1 {\n color: #ea80fc !important;\n}\n\n.purple-waves.waves-accent-1 .waves-ripple {\n background-color: #ea80fc !important;\n}\n\n.purple.accent-2 {\n background-color: #e040fb !important;\n}\n\n.purple-text.text-accent-2 {\n color: #e040fb !important;\n}\n\n.purple-waves.waves-accent-2 .waves-ripple {\n background-color: #e040fb !important;\n}\n\n.purple.accent-3 {\n background-color: #d500f9 !important;\n}\n\n.purple-text.text-accent-3 {\n color: #d500f9 !important;\n}\n\n.purple-waves.waves-accent-3 .waves-ripple {\n background-color: #d500f9 !important;\n}\n\n.purple.accent-4 {\n background-color: #aa00ff !important;\n}\n\n.purple-text.text-accent-4 {\n color: #aa00ff !important;\n}\n\n.purple-waves.waves-accent-4 .waves-ripple {\n background-color: #aa00ff !important;\n}\n\n.deep-purple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple-text {\n color: #673ab7 !important;\n}\n\n.deep-purple-waves .waves-ripple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple.lighten-5 {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple-text.text-lighten-5 {\n color: #ede7f6 !important;\n}\n\n.deep-purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple.lighten-4 {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple-text.text-lighten-4 {\n color: #d1c4e9 !important;\n}\n\n.deep-purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple.lighten-3 {\n background-color: #b39ddb !important;\n}\n\n.deep-purple-text.text-lighten-3 {\n color: #b39ddb !important;\n}\n\n.deep-purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #b39ddb !important;\n}\n\n.deep-purple.lighten-2 {\n background-color: #9575cd !important;\n}\n\n.deep-purple-text.text-lighten-2 {\n color: #9575cd !important;\n}\n\n.deep-purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #9575cd !important;\n}\n\n.deep-purple.lighten-1 {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple-text.text-lighten-1 {\n color: #7e57c2 !important;\n}\n\n.deep-purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple.darken-1 {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple-text.text-darken-1 {\n color: #5e35b1 !important;\n}\n\n.deep-purple-waves.waves-darken-1 .waves-ripple {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple.darken-2 {\n background-color: #512da8 !important;\n}\n\n.deep-purple-text.text-darken-2 {\n color: #512da8 !important;\n}\n\n.deep-purple-waves.waves-darken-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.deep-purple.darken-3 {\n background-color: #4527a0 !important;\n}\n\n.deep-purple-text.text-darken-3 {\n color: #4527a0 !important;\n}\n\n.deep-purple-waves.waves-darken-3 .waves-ripple {\n background-color: #4527a0 !important;\n}\n\n.deep-purple.darken-4 {\n background-color: #311b92 !important;\n}\n\n.deep-purple-text.text-darken-4 {\n color: #311b92 !important;\n}\n\n.deep-purple-waves.waves-darken-4 .waves-ripple {\n background-color: #311b92 !important;\n}\n\n.deep-purple.accent-1 {\n background-color: #b388ff !important;\n}\n\n.deep-purple-text.text-accent-1 {\n color: #b388ff !important;\n}\n\n.deep-purple-waves.waves-accent-1 .waves-ripple {\n background-color: #b388ff !important;\n}\n\n.deep-purple.accent-2 {\n background-color: #7c4dff !important;\n}\n\n.deep-purple-text.text-accent-2 {\n color: #7c4dff !important;\n}\n\n.deep-purple-waves.waves-accent-2 .waves-ripple {\n background-color: #7c4dff !important;\n}\n\n.deep-purple.accent-3 {\n background-color: #651fff !important;\n}\n\n.deep-purple-text.text-accent-3 {\n color: #651fff !important;\n}\n\n.deep-purple-waves.waves-accent-3 .waves-ripple {\n background-color: #651fff !important;\n}\n\n.deep-purple.accent-4 {\n background-color: #6200ea !important;\n}\n\n.deep-purple-text.text-accent-4 {\n color: #6200ea !important;\n}\n\n.deep-purple-waves.waves-accent-4 .waves-ripple {\n background-color: #6200ea !important;\n}\n\n.indigo {\n background-color: #3f51b5 !important;\n}\n\n.indigo-text {\n color: #3f51b5 !important;\n}\n\n.indigo-waves .waves-ripple {\n background-color: #3f51b5 !important;\n}\n\n.indigo.lighten-5 {\n background-color: #e8eaf6 !important;\n}\n\n.indigo-text.text-lighten-5 {\n color: #e8eaf6 !important;\n}\n\n.indigo-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8eaf6 !important;\n}\n\n.indigo.lighten-4 {\n background-color: #c5cae9 !important;\n}\n\n.indigo-text.text-lighten-4 {\n color: #c5cae9 !important;\n}\n\n.indigo-waves.waves-lighten-4 .waves-ripple {\n background-color: #c5cae9 !important;\n}\n\n.indigo.lighten-3 {\n background-color: #9fa8da !important;\n}\n\n.indigo-text.text-lighten-3 {\n color: #9fa8da !important;\n}\n\n.indigo-waves.waves-lighten-3 .waves-ripple {\n background-color: #9fa8da !important;\n}\n\n.indigo.lighten-2 {\n background-color: #7986cb !important;\n}\n\n.indigo-text.text-lighten-2 {\n color: #7986cb !important;\n}\n\n.indigo-waves.waves-lighten-2 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.indigo.lighten-1 {\n background-color: #5c6bc0 !important;\n}\n\n.indigo-text.text-lighten-1 {\n color: #5c6bc0 !important;\n}\n\n.indigo-waves.waves-lighten-1 .waves-ripple {\n background-color: #5c6bc0 !important;\n}\n\n.indigo.darken-1 {\n background-color: #3949ab !important;\n}\n\n.indigo-text.text-darken-1 {\n color: #3949ab !important;\n}\n\n.indigo-waves.waves-darken-1 .waves-ripple {\n background-color: #3949ab !important;\n}\n\n.indigo.darken-2 {\n background-color: #303f9f !important;\n}\n\n.indigo-text.text-darken-2 {\n color: #303f9f !important;\n}\n\n.indigo-waves.waves-darken-2 .waves-ripple {\n background-color: #303f9f !important;\n}\n\n.indigo.darken-3 {\n background-color: #283593 !important;\n}\n\n.indigo-text.text-darken-3 {\n color: #283593 !important;\n}\n\n.indigo-waves.waves-darken-3 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.indigo.darken-4 {\n background-color: #1a237e !important;\n}\n\n.indigo-text.text-darken-4 {\n color: #1a237e !important;\n}\n\n.indigo-waves.waves-darken-4 .waves-ripple {\n background-color: #1a237e !important;\n}\n\n.indigo.accent-1 {\n background-color: #8c9eff !important;\n}\n\n.indigo-text.text-accent-1 {\n color: #8c9eff !important;\n}\n\n.indigo-waves.waves-accent-1 .waves-ripple {\n background-color: #8c9eff !important;\n}\n\n.indigo.accent-2 {\n background-color: #536dfe !important;\n}\n\n.indigo-text.text-accent-2 {\n color: #536dfe !important;\n}\n\n.indigo-waves.waves-accent-2 .waves-ripple {\n background-color: #536dfe !important;\n}\n\n.indigo.accent-3 {\n background-color: #3d5afe !important;\n}\n\n.indigo-text.text-accent-3 {\n color: #3d5afe !important;\n}\n\n.indigo-waves.waves-accent-3 .waves-ripple {\n background-color: #3d5afe !important;\n}\n\n.indigo.accent-4 {\n background-color: #304ffe !important;\n}\n\n.indigo-text.text-accent-4 {\n color: #304ffe !important;\n}\n\n.indigo-waves.waves-accent-4 .waves-ripple {\n background-color: #304ffe !important;\n}\n\n.blue {\n background-color: #2196f3 !important;\n}\n\n.blue-text {\n color: #2196f3 !important;\n}\n\n.blue-waves .waves-ripple {\n background-color: #2196f3 !important;\n}\n\n.blue.lighten-5 {\n background-color: #e3f2fd !important;\n}\n\n.blue-text.text-lighten-5 {\n color: #e3f2fd !important;\n}\n\n.blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e3f2fd !important;\n}\n\n.blue.lighten-4 {\n background-color: #bbdefb !important;\n}\n\n.blue-text.text-lighten-4 {\n color: #bbdefb !important;\n}\n\n.blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.blue.lighten-3 {\n background-color: #90caf9 !important;\n}\n\n.blue-text.text-lighten-3 {\n color: #90caf9 !important;\n}\n\n.blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #90caf9 !important;\n}\n\n.blue.lighten-2 {\n background-color: #64b5f6 !important;\n}\n\n.blue-text.text-lighten-2 {\n color: #64b5f6 !important;\n}\n\n.blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #64b5f6 !important;\n}\n\n.blue.lighten-1 {\n background-color: #42a5f5 !important;\n}\n\n.blue-text.text-lighten-1 {\n color: #42a5f5 !important;\n}\n\n.blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.blue.darken-1 {\n background-color: #1e88e5 !important;\n}\n\n.blue-text.text-darken-1 {\n color: #1e88e5 !important;\n}\n\n.blue-waves.waves-darken-1 .waves-ripple {\n background-color: #1e88e5 !important;\n}\n\n.blue.darken-2 {\n background-color: #1976d2 !important;\n}\n\n.blue-text.text-darken-2 {\n color: #1976d2 !important;\n}\n\n.blue-waves.waves-darken-2 .waves-ripple {\n background-color: #1976d2 !important;\n}\n\n.blue.darken-3 {\n background-color: #1565c0 !important;\n}\n\n.blue-text.text-darken-3 {\n color: #1565c0 !important;\n}\n\n.blue-waves.waves-darken-3 .waves-ripple {\n background-color: #1565c0 !important;\n}\n\n.blue.darken-4 {\n background-color: #0d47a1 !important;\n}\n\n.blue-text.text-darken-4 {\n color: #0d47a1 !important;\n}\n\n.blue-waves.waves-darken-4 .waves-ripple {\n background-color: #0d47a1 !important;\n}\n\n.blue.accent-1 {\n background-color: #82b1ff !important;\n}\n\n.blue-text.text-accent-1 {\n color: #82b1ff !important;\n}\n\n.blue-waves.waves-accent-1 .waves-ripple {\n background-color: #82b1ff !important;\n}\n\n.blue.accent-2 {\n background-color: #448aff !important;\n}\n\n.blue-text.text-accent-2 {\n color: #448aff !important;\n}\n\n.blue-waves.waves-accent-2 .waves-ripple {\n background-color: #448aff !important;\n}\n\n.blue.accent-3 {\n background-color: #2979ff !important;\n}\n\n.blue-text.text-accent-3 {\n color: #2979ff !important;\n}\n\n.blue-waves.waves-accent-3 .waves-ripple {\n background-color: #2979ff !important;\n}\n\n.blue.accent-4 {\n background-color: #2962ff !important;\n}\n\n.blue-text.text-accent-4 {\n color: #2962ff !important;\n}\n\n.blue-waves.waves-accent-4 .waves-ripple {\n background-color: #2962ff !important;\n}\n\n.light-blue {\n background-color: #03a9f4 !important;\n}\n\n.light-blue-text {\n color: #03a9f4 !important;\n}\n\n.light-blue-waves .waves-ripple {\n background-color: #03a9f4 !important;\n}\n\n.light-blue.lighten-5 {\n background-color: #e1f5fe !important;\n}\n\n.light-blue-text.text-lighten-5 {\n color: #e1f5fe !important;\n}\n\n.light-blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e1f5fe !important;\n}\n\n.light-blue.lighten-4 {\n background-color: #b3e5fc !important;\n}\n\n.light-blue-text.text-lighten-4 {\n color: #b3e5fc !important;\n}\n\n.light-blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #b3e5fc !important;\n}\n\n.light-blue.lighten-3 {\n background-color: #81d4fa !important;\n}\n\n.light-blue-text.text-lighten-3 {\n color: #81d4fa !important;\n}\n\n.light-blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #81d4fa !important;\n}\n\n.light-blue.lighten-2 {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue-text.text-lighten-2 {\n color: #4fc3f7 !important;\n}\n\n.light-blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue.lighten-1 {\n background-color: #29b6f6 !important;\n}\n\n.light-blue-text.text-lighten-1 {\n color: #29b6f6 !important;\n}\n\n.light-blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #29b6f6 !important;\n}\n\n.light-blue.darken-1 {\n background-color: #039be5 !important;\n}\n\n.light-blue-text.text-darken-1 {\n color: #039be5 !important;\n}\n\n.light-blue-waves.waves-darken-1 .waves-ripple {\n background-color: #039be5 !important;\n}\n\n.light-blue.darken-2 {\n background-color: #0288d1 !important;\n}\n\n.light-blue-text.text-darken-2 {\n color: #0288d1 !important;\n}\n\n.light-blue-waves.waves-darken-2 .waves-ripple {\n background-color: #0288d1 !important;\n}\n\n.light-blue.darken-3 {\n background-color: #0277bd !important;\n}\n\n.light-blue-text.text-darken-3 {\n color: #0277bd !important;\n}\n\n.light-blue-waves.waves-darken-3 .waves-ripple {\n background-color: #0277bd !important;\n}\n\n.light-blue.darken-4 {\n background-color: #01579b !important;\n}\n\n.light-blue-text.text-darken-4 {\n color: #01579b !important;\n}\n\n.light-blue-waves.waves-darken-4 .waves-ripple {\n background-color: #01579b !important;\n}\n\n.light-blue.accent-1 {\n background-color: #80d8ff !important;\n}\n\n.light-blue-text.text-accent-1 {\n color: #80d8ff !important;\n}\n\n.light-blue-waves.waves-accent-1 .waves-ripple {\n background-color: #80d8ff !important;\n}\n\n.light-blue.accent-2 {\n background-color: #40c4ff !important;\n}\n\n.light-blue-text.text-accent-2 {\n color: #40c4ff !important;\n}\n\n.light-blue-waves.waves-accent-2 .waves-ripple {\n background-color: #40c4ff !important;\n}\n\n.light-blue.accent-3 {\n background-color: #00b0ff !important;\n}\n\n.light-blue-text.text-accent-3 {\n color: #00b0ff !important;\n}\n\n.light-blue-waves.waves-accent-3 .waves-ripple {\n background-color: #00b0ff !important;\n}\n\n.light-blue.accent-4 {\n background-color: #0091ea !important;\n}\n\n.light-blue-text.text-accent-4 {\n color: #0091ea !important;\n}\n\n.light-blue-waves.waves-accent-4 .waves-ripple {\n background-color: #0091ea !important;\n}\n\n.cyan {\n background-color: #00bcd4 !important;\n}\n\n.cyan-text {\n color: #00bcd4 !important;\n}\n\n.cyan-waves .waves-ripple {\n background-color: #00bcd4 !important;\n}\n\n.cyan.lighten-5 {\n background-color: #e0f7fa !important;\n}\n\n.cyan-text.text-lighten-5 {\n color: #e0f7fa !important;\n}\n\n.cyan-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f7fa !important;\n}\n\n.cyan.lighten-4 {\n background-color: #b2ebf2 !important;\n}\n\n.cyan-text.text-lighten-4 {\n color: #b2ebf2 !important;\n}\n\n.cyan-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2ebf2 !important;\n}\n\n.cyan.lighten-3 {\n background-color: #80deea !important;\n}\n\n.cyan-text.text-lighten-3 {\n color: #80deea !important;\n}\n\n.cyan-waves.waves-lighten-3 .waves-ripple {\n background-color: #80deea !important;\n}\n\n.cyan.lighten-2 {\n background-color: #4dd0e1 !important;\n}\n\n.cyan-text.text-lighten-2 {\n color: #4dd0e1 !important;\n}\n\n.cyan-waves.waves-lighten-2 .waves-ripple {\n background-color: #4dd0e1 !important;\n}\n\n.cyan.lighten-1 {\n background-color: #26c6da !important;\n}\n\n.cyan-text.text-lighten-1 {\n color: #26c6da !important;\n}\n\n.cyan-waves.waves-lighten-1 .waves-ripple {\n background-color: #26c6da !important;\n}\n\n.cyan.darken-1 {\n background-color: #00acc1 !important;\n}\n\n.cyan-text.text-darken-1 {\n color: #00acc1 !important;\n}\n\n.cyan-waves.waves-darken-1 .waves-ripple {\n background-color: #00acc1 !important;\n}\n\n.cyan.darken-2 {\n background-color: #0097a7 !important;\n}\n\n.cyan-text.text-darken-2 {\n color: #0097a7 !important;\n}\n\n.cyan-waves.waves-darken-2 .waves-ripple {\n background-color: #0097a7 !important;\n}\n\n.cyan.darken-3 {\n background-color: #00838f !important;\n}\n\n.cyan-text.text-darken-3 {\n color: #00838f !important;\n}\n\n.cyan-waves.waves-darken-3 .waves-ripple {\n background-color: #00838f !important;\n}\n\n.cyan.darken-4 {\n background-color: #006064 !important;\n}\n\n.cyan-text.text-darken-4 {\n color: #006064 !important;\n}\n\n.cyan-waves.waves-darken-4 .waves-ripple {\n background-color: #006064 !important;\n}\n\n.cyan.accent-1 {\n background-color: #84ffff !important;\n}\n\n.cyan-text.text-accent-1 {\n color: #84ffff !important;\n}\n\n.cyan-waves.waves-accent-1 .waves-ripple {\n background-color: #84ffff !important;\n}\n\n.cyan.accent-2 {\n background-color: #18ffff !important;\n}\n\n.cyan-text.text-accent-2 {\n color: #18ffff !important;\n}\n\n.cyan-waves.waves-accent-2 .waves-ripple {\n background-color: #18ffff !important;\n}\n\n.cyan.accent-3 {\n background-color: #00e5ff !important;\n}\n\n.cyan-text.text-accent-3 {\n color: #00e5ff !important;\n}\n\n.cyan-waves.waves-accent-3 .waves-ripple {\n background-color: #00e5ff !important;\n}\n\n.cyan.accent-4 {\n background-color: #00b8d4 !important;\n}\n\n.cyan-text.text-accent-4 {\n color: #00b8d4 !important;\n}\n\n.cyan-waves.waves-accent-4 .waves-ripple {\n background-color: #00b8d4 !important;\n}\n\n.teal {\n background-color: #009688 !important;\n}\n\n.teal-text {\n color: #009688 !important;\n}\n\n.teal-waves .waves-ripple {\n background-color: #009688 !important;\n}\n\n.teal.lighten-5 {\n background-color: #e0f2f1 !important;\n}\n\n.teal-text.text-lighten-5 {\n color: #e0f2f1 !important;\n}\n\n.teal-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f2f1 !important;\n}\n\n.teal.lighten-4 {\n background-color: #b2dfdb !important;\n}\n\n.teal-text.text-lighten-4 {\n color: #b2dfdb !important;\n}\n\n.teal-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2dfdb !important;\n}\n\n.teal.lighten-3 {\n background-color: #80cbc4 !important;\n}\n\n.teal-text.text-lighten-3 {\n color: #80cbc4 !important;\n}\n\n.teal-waves.waves-lighten-3 .waves-ripple {\n background-color: #80cbc4 !important;\n}\n\n.teal.lighten-2 {\n background-color: #4db6ac !important;\n}\n\n.teal-text.text-lighten-2 {\n color: #4db6ac !important;\n}\n\n.teal-waves.waves-lighten-2 .waves-ripple {\n background-color: #4db6ac !important;\n}\n\n.teal.lighten-1 {\n background-color: #26a69a !important;\n}\n\n.teal-text.text-lighten-1 {\n color: #26a69a !important;\n}\n\n.teal-waves.waves-lighten-1 .waves-ripple {\n background-color: #26a69a !important;\n}\n\n.teal.darken-1 {\n background-color: #00897b !important;\n}\n\n.teal-text.text-darken-1 {\n color: #00897b !important;\n}\n\n.teal-waves.waves-darken-1 .waves-ripple {\n background-color: #00897b !important;\n}\n\n.teal.darken-2 {\n background-color: #00796b !important;\n}\n\n.teal-text.text-darken-2 {\n color: #00796b !important;\n}\n\n.teal-waves.waves-darken-2 .waves-ripple {\n background-color: #00796b !important;\n}\n\n.teal.darken-3 {\n background-color: #00695c !important;\n}\n\n.teal-text.text-darken-3 {\n color: #00695c !important;\n}\n\n.teal-waves.waves-darken-3 .waves-ripple {\n background-color: #00695c !important;\n}\n\n.teal.darken-4 {\n background-color: #004d40 !important;\n}\n\n.teal-text.text-darken-4 {\n color: #004d40 !important;\n}\n\n.teal-waves.waves-darken-4 .waves-ripple {\n background-color: #004d40 !important;\n}\n\n.teal.accent-1 {\n background-color: #a7ffeb !important;\n}\n\n.teal-text.text-accent-1 {\n color: #a7ffeb !important;\n}\n\n.teal-waves.waves-accent-1 .waves-ripple {\n background-color: #a7ffeb !important;\n}\n\n.teal.accent-2 {\n background-color: #64ffda !important;\n}\n\n.teal-text.text-accent-2 {\n color: #64ffda !important;\n}\n\n.teal-waves.waves-accent-2 .waves-ripple {\n background-color: #64ffda !important;\n}\n\n.teal.accent-3 {\n background-color: #1de9b6 !important;\n}\n\n.teal-text.text-accent-3 {\n color: #1de9b6 !important;\n}\n\n.teal-waves.waves-accent-3 .waves-ripple {\n background-color: #1de9b6 !important;\n}\n\n.teal.accent-4 {\n background-color: #00bfa5 !important;\n}\n\n.teal-text.text-accent-4 {\n color: #00bfa5 !important;\n}\n\n.teal-waves.waves-accent-4 .waves-ripple {\n background-color: #00bfa5 !important;\n}\n\n.green {\n background-color: #4caf50 !important;\n}\n\n.green-text {\n color: #4caf50 !important;\n}\n\n.green-waves .waves-ripple {\n background-color: #4caf50 !important;\n}\n\n.green.lighten-5 {\n background-color: #e8f5e9 !important;\n}\n\n.green-text.text-lighten-5 {\n color: #e8f5e9 !important;\n}\n\n.green-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8f5e9 !important;\n}\n\n.green.lighten-4 {\n background-color: #c8e6c9 !important;\n}\n\n.green-text.text-lighten-4 {\n color: #c8e6c9 !important;\n}\n\n.green-waves.waves-lighten-4 .waves-ripple {\n background-color: #c8e6c9 !important;\n}\n\n.green.lighten-3 {\n background-color: #a5d6a7 !important;\n}\n\n.green-text.text-lighten-3 {\n color: #a5d6a7 !important;\n}\n\n.green-waves.waves-lighten-3 .waves-ripple {\n background-color: #a5d6a7 !important;\n}\n\n.green.lighten-2 {\n background-color: #81c784 !important;\n}\n\n.green-text.text-lighten-2 {\n color: #81c784 !important;\n}\n\n.green-waves.waves-lighten-2 .waves-ripple {\n background-color: #81c784 !important;\n}\n\n.green.lighten-1 {\n background-color: #66bb6a !important;\n}\n\n.green-text.text-lighten-1 {\n color: #66bb6a !important;\n}\n\n.green-waves.waves-lighten-1 .waves-ripple {\n background-color: #66bb6a !important;\n}\n\n.green.darken-1 {\n background-color: #43a047 !important;\n}\n\n.green-text.text-darken-1 {\n color: #43a047 !important;\n}\n\n.green-waves.waves-darken-1 .waves-ripple {\n background-color: #43a047 !important;\n}\n\n.green.darken-2 {\n background-color: #388e3c !important;\n}\n\n.green-text.text-darken-2 {\n color: #388e3c !important;\n}\n\n.green-waves.waves-darken-2 .waves-ripple {\n background-color: #388e3c !important;\n}\n\n.green.darken-3 {\n background-color: #2e7d32 !important;\n}\n\n.green-text.text-darken-3 {\n color: #2e7d32 !important;\n}\n\n.green-waves.waves-darken-3 .waves-ripple {\n background-color: #2e7d32 !important;\n}\n\n.green.darken-4 {\n background-color: #1b5e20 !important;\n}\n\n.green-text.text-darken-4 {\n color: #1b5e20 !important;\n}\n\n.green-waves.waves-darken-4 .waves-ripple {\n background-color: #1b5e20 !important;\n}\n\n.green.accent-1 {\n background-color: #b9f6ca !important;\n}\n\n.green-text.text-accent-1 {\n color: #b9f6ca !important;\n}\n\n.green-waves.waves-accent-1 .waves-ripple {\n background-color: #b9f6ca !important;\n}\n\n.green.accent-2 {\n background-color: #69f0ae !important;\n}\n\n.green-text.text-accent-2 {\n color: #69f0ae !important;\n}\n\n.green-waves.waves-accent-2 .waves-ripple {\n background-color: #69f0ae !important;\n}\n\n.green.accent-3 {\n background-color: #00e676 !important;\n}\n\n.green-text.text-accent-3 {\n color: #00e676 !important;\n}\n\n.green-waves.waves-accent-3 .waves-ripple {\n background-color: #00e676 !important;\n}\n\n.green.accent-4 {\n background-color: #00c853 !important;\n}\n\n.green-text.text-accent-4 {\n color: #00c853 !important;\n}\n\n.green-waves.waves-accent-4 .waves-ripple {\n background-color: #00c853 !important;\n}\n\n.light-green {\n background-color: #8bc34a !important;\n}\n\n.light-green-text {\n color: #8bc34a !important;\n}\n\n.light-green-waves .waves-ripple {\n background-color: #8bc34a !important;\n}\n\n.light-green.lighten-5 {\n background-color: #f1f8e9 !important;\n}\n\n.light-green-text.text-lighten-5 {\n color: #f1f8e9 !important;\n}\n\n.light-green-waves.waves-lighten-5 .waves-ripple {\n background-color: #f1f8e9 !important;\n}\n\n.light-green.lighten-4 {\n background-color: #dcedc8 !important;\n}\n\n.light-green-text.text-lighten-4 {\n color: #dcedc8 !important;\n}\n\n.light-green-waves.waves-lighten-4 .waves-ripple {\n background-color: #dcedc8 !important;\n}\n\n.light-green.lighten-3 {\n background-color: #c5e1a5 !important;\n}\n\n.light-green-text.text-lighten-3 {\n color: #c5e1a5 !important;\n}\n\n.light-green-waves.waves-lighten-3 .waves-ripple {\n background-color: #c5e1a5 !important;\n}\n\n.light-green.lighten-2 {\n background-color: #aed581 !important;\n}\n\n.light-green-text.text-lighten-2 {\n color: #aed581 !important;\n}\n\n.light-green-waves.waves-lighten-2 .waves-ripple {\n background-color: #aed581 !important;\n}\n\n.light-green.lighten-1 {\n background-color: #9ccc65 !important;\n}\n\n.light-green-text.text-lighten-1 {\n color: #9ccc65 !important;\n}\n\n.light-green-waves.waves-lighten-1 .waves-ripple {\n background-color: #9ccc65 !important;\n}\n\n.light-green.darken-1 {\n background-color: #7cb342 !important;\n}\n\n.light-green-text.text-darken-1 {\n color: #7cb342 !important;\n}\n\n.light-green-waves.waves-darken-1 .waves-ripple {\n background-color: #7cb342 !important;\n}\n\n.light-green.darken-2 {\n background-color: #689f38 !important;\n}\n\n.light-green-text.text-darken-2 {\n color: #689f38 !important;\n}\n\n.light-green-waves.waves-darken-2 .waves-ripple {\n background-color: #689f38 !important;\n}\n\n.light-green.darken-3 {\n background-color: #558b2f !important;\n}\n\n.light-green-text.text-darken-3 {\n color: #558b2f !important;\n}\n\n.light-green-waves.waves-darken-3 .waves-ripple {\n background-color: #558b2f !important;\n}\n\n.light-green.darken-4 {\n background-color: #33691e !important;\n}\n\n.light-green-text.text-darken-4 {\n color: #33691e !important;\n}\n\n.light-green-waves.waves-darken-4 .waves-ripple {\n background-color: #33691e !important;\n}\n\n.light-green.accent-1 {\n background-color: #ccff90 !important;\n}\n\n.light-green-text.text-accent-1 {\n color: #ccff90 !important;\n}\n\n.light-green-waves.waves-accent-1 .waves-ripple {\n background-color: #ccff90 !important;\n}\n\n.light-green.accent-2 {\n background-color: #b2ff59 !important;\n}\n\n.light-green-text.text-accent-2 {\n color: #b2ff59 !important;\n}\n\n.light-green-waves.waves-accent-2 .waves-ripple {\n background-color: #b2ff59 !important;\n}\n\n.light-green.accent-3 {\n background-color: #76ff03 !important;\n}\n\n.light-green-text.text-accent-3 {\n color: #76ff03 !important;\n}\n\n.light-green-waves.waves-accent-3 .waves-ripple {\n background-color: #76ff03 !important;\n}\n\n.light-green.accent-4 {\n background-color: #64dd17 !important;\n}\n\n.light-green-text.text-accent-4 {\n color: #64dd17 !important;\n}\n\n.light-green-waves.waves-accent-4 .waves-ripple {\n background-color: #64dd17 !important;\n}\n\n.lime {\n background-color: #cddc39 !important;\n}\n\n.lime-text {\n color: #cddc39 !important;\n}\n\n.lime-waves .waves-ripple {\n background-color: #cddc39 !important;\n}\n\n.lime.lighten-5 {\n background-color: #f9fbe7 !important;\n}\n\n.lime-text.text-lighten-5 {\n color: #f9fbe7 !important;\n}\n\n.lime-waves.waves-lighten-5 .waves-ripple {\n background-color: #f9fbe7 !important;\n}\n\n.lime.lighten-4 {\n background-color: #f0f4c3 !important;\n}\n\n.lime-text.text-lighten-4 {\n color: #f0f4c3 !important;\n}\n\n.lime-waves.waves-lighten-4 .waves-ripple {\n background-color: #f0f4c3 !important;\n}\n\n.lime.lighten-3 {\n background-color: #e6ee9c !important;\n}\n\n.lime-text.text-lighten-3 {\n color: #e6ee9c !important;\n}\n\n.lime-waves.waves-lighten-3 .waves-ripple {\n background-color: #e6ee9c !important;\n}\n\n.lime.lighten-2 {\n background-color: #dce775 !important;\n}\n\n.lime-text.text-lighten-2 {\n color: #dce775 !important;\n}\n\n.lime-waves.waves-lighten-2 .waves-ripple {\n background-color: #dce775 !important;\n}\n\n.lime.lighten-1 {\n background-color: #d4e157 !important;\n}\n\n.lime-text.text-lighten-1 {\n color: #d4e157 !important;\n}\n\n.lime-waves.waves-lighten-1 .waves-ripple {\n background-color: #d4e157 !important;\n}\n\n.lime.darken-1 {\n background-color: #c0ca33 !important;\n}\n\n.lime-text.text-darken-1 {\n color: #c0ca33 !important;\n}\n\n.lime-waves.waves-darken-1 .waves-ripple {\n background-color: #c0ca33 !important;\n}\n\n.lime.darken-2 {\n background-color: #afb42b !important;\n}\n\n.lime-text.text-darken-2 {\n color: #afb42b !important;\n}\n\n.lime-waves.waves-darken-2 .waves-ripple {\n background-color: #afb42b !important;\n}\n\n.lime.darken-3 {\n background-color: #9e9d24 !important;\n}\n\n.lime-text.text-darken-3 {\n color: #9e9d24 !important;\n}\n\n.lime-waves.waves-darken-3 .waves-ripple {\n background-color: #9e9d24 !important;\n}\n\n.lime.darken-4 {\n background-color: #827717 !important;\n}\n\n.lime-text.text-darken-4 {\n color: #827717 !important;\n}\n\n.lime-waves.waves-darken-4 .waves-ripple {\n background-color: #827717 !important;\n}\n\n.lime.accent-1 {\n background-color: #f4ff81 !important;\n}\n\n.lime-text.text-accent-1 {\n color: #f4ff81 !important;\n}\n\n.lime-waves.waves-accent-1 .waves-ripple {\n background-color: #f4ff81 !important;\n}\n\n.lime.accent-2 {\n background-color: #eeff41 !important;\n}\n\n.lime-text.text-accent-2 {\n color: #eeff41 !important;\n}\n\n.lime-waves.waves-accent-2 .waves-ripple {\n background-color: #eeff41 !important;\n}\n\n.lime.accent-3 {\n background-color: #c6ff00 !important;\n}\n\n.lime-text.text-accent-3 {\n color: #c6ff00 !important;\n}\n\n.lime-waves.waves-accent-3 .waves-ripple {\n background-color: #c6ff00 !important;\n}\n\n.lime.accent-4 {\n background-color: #aeea00 !important;\n}\n\n.lime-text.text-accent-4 {\n color: #aeea00 !important;\n}\n\n.lime-waves.waves-accent-4 .waves-ripple {\n background-color: #aeea00 !important;\n}\n\n.yellow {\n background-color: #ffeb3b !important;\n}\n\n.yellow-text {\n color: #ffeb3b !important;\n}\n\n.yellow-waves .waves-ripple {\n background-color: #ffeb3b !important;\n}\n\n.yellow.lighten-5 {\n background-color: #fffde7 !important;\n}\n\n.yellow-text.text-lighten-5 {\n color: #fffde7 !important;\n}\n\n.yellow-waves.waves-lighten-5 .waves-ripple {\n background-color: #fffde7 !important;\n}\n\n.yellow.lighten-4 {\n background-color: #fff9c4 !important;\n}\n\n.yellow-text.text-lighten-4 {\n color: #fff9c4 !important;\n}\n\n.yellow-waves.waves-lighten-4 .waves-ripple {\n background-color: #fff9c4 !important;\n}\n\n.yellow.lighten-3 {\n background-color: #fff59d !important;\n}\n\n.yellow-text.text-lighten-3 {\n color: #fff59d !important;\n}\n\n.yellow-waves.waves-lighten-3 .waves-ripple {\n background-color: #fff59d !important;\n}\n\n.yellow.lighten-2 {\n background-color: #fff176 !important;\n}\n\n.yellow-text.text-lighten-2 {\n color: #fff176 !important;\n}\n\n.yellow-waves.waves-lighten-2 .waves-ripple {\n background-color: #fff176 !important;\n}\n\n.yellow.lighten-1 {\n background-color: #ffee58 !important;\n}\n\n.yellow-text.text-lighten-1 {\n color: #ffee58 !important;\n}\n\n.yellow-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffee58 !important;\n}\n\n.yellow.darken-1 {\n background-color: #fdd835 !important;\n}\n\n.yellow-text.text-darken-1 {\n color: #fdd835 !important;\n}\n\n.yellow-waves.waves-darken-1 .waves-ripple {\n background-color: #fdd835 !important;\n}\n\n.yellow.darken-2 {\n background-color: #fbc02d !important;\n}\n\n.yellow-text.text-darken-2 {\n color: #fbc02d !important;\n}\n\n.yellow-waves.waves-darken-2 .waves-ripple {\n background-color: #fbc02d !important;\n}\n\n.yellow.darken-3 {\n background-color: #f9a825 !important;\n}\n\n.yellow-text.text-darken-3 {\n color: #f9a825 !important;\n}\n\n.yellow-waves.waves-darken-3 .waves-ripple {\n background-color: #f9a825 !important;\n}\n\n.yellow.darken-4 {\n background-color: #f57f17 !important;\n}\n\n.yellow-text.text-darken-4 {\n color: #f57f17 !important;\n}\n\n.yellow-waves.waves-darken-4 .waves-ripple {\n background-color: #f57f17 !important;\n}\n\n.yellow.accent-1 {\n background-color: #ffff8d !important;\n}\n\n.yellow-text.text-accent-1 {\n color: #ffff8d !important;\n}\n\n.yellow-waves.waves-accent-1 .waves-ripple {\n background-color: #ffff8d !important;\n}\n\n.yellow.accent-2 {\n background-color: #ffff00 !important;\n}\n\n.yellow-text.text-accent-2 {\n color: #ffff00 !important;\n}\n\n.yellow-waves.waves-accent-2 .waves-ripple {\n background-color: #ffff00 !important;\n}\n\n.yellow.accent-3 {\n background-color: #ffea00 !important;\n}\n\n.yellow-text.text-accent-3 {\n color: #ffea00 !important;\n}\n\n.yellow-waves.waves-accent-3 .waves-ripple {\n background-color: #ffea00 !important;\n}\n\n.yellow.accent-4 {\n background-color: #ffd600 !important;\n}\n\n.yellow-text.text-accent-4 {\n color: #ffd600 !important;\n}\n\n.yellow-waves.waves-accent-4 .waves-ripple {\n background-color: #ffd600 !important;\n}\n\n.amber {\n background-color: #ffc107 !important;\n}\n\n.amber-text {\n color: #ffc107 !important;\n}\n\n.amber-waves .waves-ripple {\n background-color: #ffc107 !important;\n}\n\n.amber.lighten-5 {\n background-color: #fff8e1 !important;\n}\n\n.amber-text.text-lighten-5 {\n color: #fff8e1 !important;\n}\n\n.amber-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff8e1 !important;\n}\n\n.amber.lighten-4 {\n background-color: #ffecb3 !important;\n}\n\n.amber-text.text-lighten-4 {\n color: #ffecb3 !important;\n}\n\n.amber-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffecb3 !important;\n}\n\n.amber.lighten-3 {\n background-color: #ffe082 !important;\n}\n\n.amber-text.text-lighten-3 {\n color: #ffe082 !important;\n}\n\n.amber-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffe082 !important;\n}\n\n.amber.lighten-2 {\n background-color: #ffd54f !important;\n}\n\n.amber-text.text-lighten-2 {\n color: #ffd54f !important;\n}\n\n.amber-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffd54f !important;\n}\n\n.amber.lighten-1 {\n background-color: #ffca28 !important;\n}\n\n.amber-text.text-lighten-1 {\n color: #ffca28 !important;\n}\n\n.amber-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffca28 !important;\n}\n\n.amber.darken-1 {\n background-color: #ffb300 !important;\n}\n\n.amber-text.text-darken-1 {\n color: #ffb300 !important;\n}\n\n.amber-waves.waves-darken-1 .waves-ripple {\n background-color: #ffb300 !important;\n}\n\n.amber.darken-2 {\n background-color: #ffa000 !important;\n}\n\n.amber-text.text-darken-2 {\n color: #ffa000 !important;\n}\n\n.amber-waves.waves-darken-2 .waves-ripple {\n background-color: #ffa000 !important;\n}\n\n.amber.darken-3 {\n background-color: #ff8f00 !important;\n}\n\n.amber-text.text-darken-3 {\n color: #ff8f00 !important;\n}\n\n.amber-waves.waves-darken-3 .waves-ripple {\n background-color: #ff8f00 !important;\n}\n\n.amber.darken-4 {\n background-color: #ff6f00 !important;\n}\n\n.amber-text.text-darken-4 {\n color: #ff6f00 !important;\n}\n\n.amber-waves.waves-darken-4 .waves-ripple {\n background-color: #ff6f00 !important;\n}\n\n.amber.accent-1 {\n background-color: #ffe57f !important;\n}\n\n.amber-text.text-accent-1 {\n color: #ffe57f !important;\n}\n\n.amber-waves.waves-accent-1 .waves-ripple {\n background-color: #ffe57f !important;\n}\n\n.amber.accent-2 {\n background-color: #ffd740 !important;\n}\n\n.amber-text.text-accent-2 {\n color: #ffd740 !important;\n}\n\n.amber-waves.waves-accent-2 .waves-ripple {\n background-color: #ffd740 !important;\n}\n\n.amber.accent-3 {\n background-color: #ffc400 !important;\n}\n\n.amber-text.text-accent-3 {\n color: #ffc400 !important;\n}\n\n.amber-waves.waves-accent-3 .waves-ripple {\n background-color: #ffc400 !important;\n}\n\n.amber.accent-4 {\n background-color: #ffab00 !important;\n}\n\n.amber-text.text-accent-4 {\n color: #ffab00 !important;\n}\n\n.amber-waves.waves-accent-4 .waves-ripple {\n background-color: #ffab00 !important;\n}\n\n.orange {\n background-color: #ff9800 !important;\n}\n\n.orange-text {\n color: #ff9800 !important;\n}\n\n.orange-waves .waves-ripple {\n background-color: #ff9800 !important;\n}\n\n.orange.lighten-5 {\n background-color: #fff3e0 !important;\n}\n\n.orange-text.text-lighten-5 {\n color: #fff3e0 !important;\n}\n\n.orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff3e0 !important;\n}\n\n.orange.lighten-4 {\n background-color: #ffe0b2 !important;\n}\n\n.orange-text.text-lighten-4 {\n color: #ffe0b2 !important;\n}\n\n.orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffe0b2 !important;\n}\n\n.orange.lighten-3 {\n background-color: #ffcc80 !important;\n}\n\n.orange-text.text-lighten-3 {\n color: #ffcc80 !important;\n}\n\n.orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffcc80 !important;\n}\n\n.orange.lighten-2 {\n background-color: #ffb74d !important;\n}\n\n.orange-text.text-lighten-2 {\n color: #ffb74d !important;\n}\n\n.orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffb74d !important;\n}\n\n.orange.lighten-1 {\n background-color: #ffa726 !important;\n}\n\n.orange-text.text-lighten-1 {\n color: #ffa726 !important;\n}\n\n.orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffa726 !important;\n}\n\n.orange.darken-1 {\n background-color: #fb8c00 !important;\n}\n\n.orange-text.text-darken-1 {\n color: #fb8c00 !important;\n}\n\n.orange-waves.waves-darken-1 .waves-ripple {\n background-color: #fb8c00 !important;\n}\n\n.orange.darken-2 {\n background-color: #f57c00 !important;\n}\n\n.orange-text.text-darken-2 {\n color: #f57c00 !important;\n}\n\n.orange-waves.waves-darken-2 .waves-ripple {\n background-color: #f57c00 !important;\n}\n\n.orange.darken-3 {\n background-color: #ef6c00 !important;\n}\n\n.orange-text.text-darken-3 {\n color: #ef6c00 !important;\n}\n\n.orange-waves.waves-darken-3 .waves-ripple {\n background-color: #ef6c00 !important;\n}\n\n.orange.darken-4 {\n background-color: #e65100 !important;\n}\n\n.orange-text.text-darken-4 {\n color: #e65100 !important;\n}\n\n.orange-waves.waves-darken-4 .waves-ripple {\n background-color: #e65100 !important;\n}\n\n.orange.accent-1 {\n background-color: #ffd180 !important;\n}\n\n.orange-text.text-accent-1 {\n color: #ffd180 !important;\n}\n\n.orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ffd180 !important;\n}\n\n.orange.accent-2 {\n background-color: #ffab40 !important;\n}\n\n.orange-text.text-accent-2 {\n color: #ffab40 !important;\n}\n\n.orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ffab40 !important;\n}\n\n.orange.accent-3 {\n background-color: #ff9100 !important;\n}\n\n.orange-text.text-accent-3 {\n color: #ff9100 !important;\n}\n\n.orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff9100 !important;\n}\n\n.orange.accent-4 {\n background-color: #ff6d00 !important;\n}\n\n.orange-text.text-accent-4 {\n color: #ff6d00 !important;\n}\n\n.orange-waves.waves-accent-4 .waves-ripple {\n background-color: #ff6d00 !important;\n}\n\n.deep-orange {\n background-color: #ff5722 !important;\n}\n\n.deep-orange-text {\n color: #ff5722 !important;\n}\n\n.deep-orange-waves .waves-ripple {\n background-color: #ff5722 !important;\n}\n\n.deep-orange.lighten-5 {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange-text.text-lighten-5 {\n color: #fbe9e7 !important;\n}\n\n.deep-orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange.lighten-4 {\n background-color: #ffccbc !important;\n}\n\n.deep-orange-text.text-lighten-4 {\n color: #ffccbc !important;\n}\n\n.deep-orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffccbc !important;\n}\n\n.deep-orange.lighten-3 {\n background-color: #ffab91 !important;\n}\n\n.deep-orange-text.text-lighten-3 {\n color: #ffab91 !important;\n}\n\n.deep-orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffab91 !important;\n}\n\n.deep-orange.lighten-2 {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange-text.text-lighten-2 {\n color: #ff8a65 !important;\n}\n\n.deep-orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange.lighten-1 {\n background-color: #ff7043 !important;\n}\n\n.deep-orange-text.text-lighten-1 {\n color: #ff7043 !important;\n}\n\n.deep-orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ff7043 !important;\n}\n\n.deep-orange.darken-1 {\n background-color: #f4511e !important;\n}\n\n.deep-orange-text.text-darken-1 {\n color: #f4511e !important;\n}\n\n.deep-orange-waves.waves-darken-1 .waves-ripple {\n background-color: #f4511e !important;\n}\n\n.deep-orange.darken-2 {\n background-color: #e64a19 !important;\n}\n\n.deep-orange-text.text-darken-2 {\n color: #e64a19 !important;\n}\n\n.deep-orange-waves.waves-darken-2 .waves-ripple {\n background-color: #e64a19 !important;\n}\n\n.deep-orange.darken-3 {\n background-color: #d84315 !important;\n}\n\n.deep-orange-text.text-darken-3 {\n color: #d84315 !important;\n}\n\n.deep-orange-waves.waves-darken-3 .waves-ripple {\n background-color: #d84315 !important;\n}\n\n.deep-orange.darken-4 {\n background-color: #bf360c !important;\n}\n\n.deep-orange-text.text-darken-4 {\n color: #bf360c !important;\n}\n\n.deep-orange-waves.waves-darken-4 .waves-ripple {\n background-color: #bf360c !important;\n}\n\n.deep-orange.accent-1 {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange-text.text-accent-1 {\n color: #ff9e80 !important;\n}\n\n.deep-orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange.accent-2 {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange-text.text-accent-2 {\n color: #ff6e40 !important;\n}\n\n.deep-orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange.accent-3 {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange-text.text-accent-3 {\n color: #ff3d00 !important;\n}\n\n.deep-orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange.accent-4 {\n background-color: #dd2c00 !important;\n}\n\n.deep-orange-text.text-accent-4 {\n color: #dd2c00 !important;\n}\n\n.deep-orange-waves.waves-accent-4 .waves-ripple {\n background-color: #dd2c00 !important;\n}\n\n.brown {\n background-color: #795548 !important;\n}\n\n.brown-text {\n color: #795548 !important;\n}\n\n.brown-waves .waves-ripple {\n background-color: #795548 !important;\n}\n\n.brown.lighten-5 {\n background-color: #efebe9 !important;\n}\n\n.brown-text.text-lighten-5 {\n color: #efebe9 !important;\n}\n\n.brown-waves.waves-lighten-5 .waves-ripple {\n background-color: #efebe9 !important;\n}\n\n.brown.lighten-4 {\n background-color: #d7ccc8 !important;\n}\n\n.brown-text.text-lighten-4 {\n color: #d7ccc8 !important;\n}\n\n.brown-waves.waves-lighten-4 .waves-ripple {\n background-color: #d7ccc8 !important;\n}\n\n.brown.lighten-3 {\n background-color: #bcaaa4 !important;\n}\n\n.brown-text.text-lighten-3 {\n color: #bcaaa4 !important;\n}\n\n.brown-waves.waves-lighten-3 .waves-ripple {\n background-color: #bcaaa4 !important;\n}\n\n.brown.lighten-2 {\n background-color: #a1887f !important;\n}\n\n.brown-text.text-lighten-2 {\n color: #a1887f !important;\n}\n\n.brown-waves.waves-lighten-2 .waves-ripple {\n background-color: #a1887f !important;\n}\n\n.brown.lighten-1 {\n background-color: #8d6e63 !important;\n}\n\n.brown-text.text-lighten-1 {\n color: #8d6e63 !important;\n}\n\n.brown-waves.waves-lighten-1 .waves-ripple {\n background-color: #8d6e63 !important;\n}\n\n.brown.darken-1 {\n background-color: #6d4c41 !important;\n}\n\n.brown-text.text-darken-1 {\n color: #6d4c41 !important;\n}\n\n.brown-waves.waves-darken-1 .waves-ripple {\n background-color: #6d4c41 !important;\n}\n\n.brown.darken-2 {\n background-color: #5d4037 !important;\n}\n\n.brown-text.text-darken-2 {\n color: #5d4037 !important;\n}\n\n.brown-waves.waves-darken-2 .waves-ripple {\n background-color: #5d4037 !important;\n}\n\n.brown.darken-3 {\n background-color: #4e342e !important;\n}\n\n.brown-text.text-darken-3 {\n color: #4e342e !important;\n}\n\n.brown-waves.waves-darken-3 .waves-ripple {\n background-color: #4e342e !important;\n}\n\n.brown.darken-4 {\n background-color: #3e2723 !important;\n}\n\n.brown-text.text-darken-4 {\n color: #3e2723 !important;\n}\n\n.brown-waves.waves-darken-4 .waves-ripple {\n background-color: #3e2723 !important;\n}\n\n.blue-grey {\n background-color: #607d8b !important;\n}\n\n.blue-grey-text {\n color: #607d8b !important;\n}\n\n.blue-grey-waves .waves-ripple {\n background-color: #607d8b !important;\n}\n\n.blue-grey.lighten-5 {\n background-color: #eceff1 !important;\n}\n\n.blue-grey-text.text-lighten-5 {\n color: #eceff1 !important;\n}\n\n.blue-grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #eceff1 !important;\n}\n\n.blue-grey.lighten-4 {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey-text.text-lighten-4 {\n color: #cfd8dc !important;\n}\n\n.blue-grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey.lighten-3 {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey-text.text-lighten-3 {\n color: #b0bec5 !important;\n}\n\n.blue-grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey.lighten-2 {\n background-color: #90a4ae !important;\n}\n\n.blue-grey-text.text-lighten-2 {\n color: #90a4ae !important;\n}\n\n.blue-grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #90a4ae !important;\n}\n\n.blue-grey.lighten-1 {\n background-color: #78909c !important;\n}\n\n.blue-grey-text.text-lighten-1 {\n color: #78909c !important;\n}\n\n.blue-grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #78909c !important;\n}\n\n.blue-grey.darken-1 {\n background-color: #546e7a !important;\n}\n\n.blue-grey-text.text-darken-1 {\n color: #546e7a !important;\n}\n\n.blue-grey-waves.waves-darken-1 .waves-ripple {\n background-color: #546e7a !important;\n}\n\n.blue-grey.darken-2 {\n background-color: #455a64 !important;\n}\n\n.blue-grey-text.text-darken-2 {\n color: #455a64 !important;\n}\n\n.blue-grey-waves.waves-darken-2 .waves-ripple {\n background-color: #455a64 !important;\n}\n\n.blue-grey.darken-3 {\n background-color: #37474f !important;\n}\n\n.blue-grey-text.text-darken-3 {\n color: #37474f !important;\n}\n\n.blue-grey-waves.waves-darken-3 .waves-ripple {\n background-color: #37474f !important;\n}\n\n.blue-grey.darken-4 {\n background-color: #263238 !important;\n}\n\n.blue-grey-text.text-darken-4 {\n color: #263238 !important;\n}\n\n.blue-grey-waves.waves-darken-4 .waves-ripple {\n background-color: #263238 !important;\n}\n\n.grey {\n background-color: #9e9e9e !important;\n}\n\n.grey-text {\n color: #9e9e9e !important;\n}\n\n.grey-waves .waves-ripple {\n background-color: #9e9e9e !important;\n}\n\n.grey.lighten-5 {\n background-color: #fafafa !important;\n}\n\n.grey-text.text-lighten-5 {\n color: #fafafa !important;\n}\n\n.grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #fafafa !important;\n}\n\n.grey.lighten-4 {\n background-color: #f5f5f5 !important;\n}\n\n.grey-text.text-lighten-4 {\n color: #f5f5f5 !important;\n}\n\n.grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #f5f5f5 !important;\n}\n\n.grey.lighten-3 {\n background-color: #eeeeee !important;\n}\n\n.grey-text.text-lighten-3 {\n color: #eeeeee !important;\n}\n\n.grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #eeeeee !important;\n}\n\n.grey.lighten-2 {\n background-color: #e0e0e0 !important;\n}\n\n.grey-text.text-lighten-2 {\n color: #e0e0e0 !important;\n}\n\n.grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #e0e0e0 !important;\n}\n\n.grey.lighten-1 {\n background-color: #bdbdbd !important;\n}\n\n.grey-text.text-lighten-1 {\n color: #bdbdbd !important;\n}\n\n.grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #bdbdbd !important;\n}\n\n.grey.darken-1 {\n background-color: #757575 !important;\n}\n\n.grey-text.text-darken-1 {\n color: #757575 !important;\n}\n\n.grey-waves.waves-darken-1 .waves-ripple {\n background-color: #757575 !important;\n}\n\n.grey.darken-2 {\n background-color: #616161 !important;\n}\n\n.grey-text.text-darken-2 {\n color: #616161 !important;\n}\n\n.grey-waves.waves-darken-2 .waves-ripple {\n background-color: #616161 !important;\n}\n\n.grey.darken-3 {\n background-color: #424242 !important;\n}\n\n.grey-text.text-darken-3 {\n color: #424242 !important;\n}\n\n.grey-waves.waves-darken-3 .waves-ripple {\n background-color: #424242 !important;\n}\n\n.grey.darken-4 {\n background-color: #212121 !important;\n}\n\n.grey-text.text-darken-4 {\n color: #212121 !important;\n}\n\n.grey-waves.waves-darken-4 .waves-ripple {\n background-color: #212121 !important;\n}\n\n.black {\n background-color: #000000 !important;\n}\n\n.black-text {\n color: #000000 !important;\n}\n\n.white {\n background-color: #ffffff !important;\n}\n\n.white-text {\n color: #ffffff !important;\n}\n\n.transparent {\n background-color: transparent !important;\n}\n\n.transparent-text {\n color: transparent !important;\n}\n\n/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\ncode[class*=language-],\npre[class*=language-] {\n color: white;\n background: none;\n font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace;\n text-align: left;\n text-shadow: 0 -0.1em 0.2em black;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\npre[class*=language-],\n:not(pre) > code[class*=language-] {\n background: hsl(0deg, 0%, 8%); /* #141414 */\n}\n\n/* Code blocks */\npre[class*=language-] {\n border-radius: 0.5em;\n border: 0.3em solid hsl(0deg, 0%, 33%); /* #282A2B */\n box-shadow: 1px 1px 0.5em black inset;\n margin: 0.5em 0;\n overflow: auto;\n padding: 1em;\n}\n\npre[class*=language-]::-moz-selection {\n /* Firefox */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\npre[class*=language-]::selection {\n /* Safari */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\n/* Text Selection colour */\npre[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection,\ncode[class*=language-]::-moz-selection, code[class*=language-] ::-moz-selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\npre[class*=language-]::selection, pre[class*=language-] ::selection,\ncode[class*=language-]::selection, code[class*=language-] ::selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\n/* Inline code */\n:not(pre) > code[class*=language-] {\n border-radius: 0.3em;\n border: 0.13em solid hsl(0deg, 0%, 33%); /* #545454 */\n box-shadow: 1px 1px 0.3em -0.1em black inset;\n padding: 0.15em 0.2em 0.05em;\n white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: hsl(0deg, 0%, 47%); /* #777777 */\n}\n\n.token.punctuation {\n opacity: 0.7;\n}\n\n.namespace {\n opacity: 0.7;\n}\n\n.token.tag,\n.token.boolean,\n.token.number,\n.token.deleted {\n color: hsl(14deg, 58%, 55%); /* #CF6A4C */\n}\n\n.token.keyword,\n.token.property,\n.token.selector,\n.token.constant,\n.token.symbol,\n.token.builtin {\n color: hsl(53deg, 89%, 79%); /* #F9EE98 */\n}\n\n.token.attr-name,\n.token.attr-value,\n.token.string,\n.token.char,\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable,\n.token.inserted {\n color: hsl(76deg, 21%, 52%); /* #8F9D6A */\n}\n\n.token.atrule {\n color: hsl(218deg, 22%, 55%); /* #7587A6 */\n}\n\n.token.regex,\n.token.important {\n color: hsl(42deg, 75%, 65%); /* #E9C062 */\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\npre[data-line] {\n padding: 1em 0 1em 3em;\n position: relative;\n}\n\n/* Markup */\n.language-markup .token.tag,\n.language-markup .token.attr-name,\n.language-markup .token.punctuation {\n color: hsl(33deg, 33%, 52%); /* #AC885B */\n}\n\n/* Make the tokens sit above the line highlight so the colours don't look faded. */\n.token {\n position: relative;\n z-index: 1;\n}\n\n.line-highlight {\n background: hsla(0deg, 0%, 33%, 0.25); /* #545454 */\n background: linear-gradient(to right, hsla(0deg, 0%, 33%, 0.1) 70%, hsla(0deg, 0%, 33%, 0)); /* #545454 */\n border-bottom: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n border-top: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n left: 0;\n line-height: inherit;\n margin-top: 0.75em; /* Same as .prism’s padding-top */\n padding: inherit 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n white-space: pre;\n z-index: 0;\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n background-color: hsl(215deg, 15%, 59%); /* #8794A6 */\n border-radius: 999px;\n box-shadow: 0 1px white;\n color: hsl(24deg, 20%, 95%); /* #F5F2F0 */\n content: attr(data-start);\n font: bold 65%/1.5 sans-serif;\n left: 0.6em;\n min-width: 1em;\n padding: 0 0.5em;\n position: absolute;\n text-align: center;\n text-shadow: none;\n top: 0.4em;\n vertical-align: 0.3em;\n}\n\n.line-highlight[data-end]:after {\n bottom: 0.4em;\n content: attr(data-end);\n top: auto;\n}\n\n.window {\n font-family: \"Ubuntu\", sans-serif;\n font-size: 17px;\n width: 600px;\n margin: 75px auto;\n background: #2c3e50;\n height: 350px;\n border-radius: 5px;\n display: relative;\n box-shadow: 10px 10px 10px #888888;\n}\n\n.afterclose {\n color: #34495e;\n display: none;\n text-align: center;\n}\n\n.open {\n color: #fff;\n padding: 15px;\n background: #2ecc71;\n border-radius: 4px;\n border: none;\n}\n\n.bash {\n width: 600px;\n background: #34495e;\n height: 310px;\n border-radius: 5px;\n top: 40px;\n display: absolute;\n color: #fff;\n text-align: left;\n}\n.bash .command::before {\n content: \"user@machine $ : \";\n color: #2ecc71;\n}\n.bash .resulta::before {\n content: \">>\";\n color: #2ecc71;\n}\n\n/* effected by controllers */\n.windowmax {\n width: 100%;\n margin: auto;\n background: #2c3e50;\n height: 1000px;\n border-radius: 5px;\n display: relative;\n}\n\n.windowmin {\n width: 300px;\n height: 45px;\n background: #2c3e50;\n border-radius: 5px;\n bottom: 0;\n position: fixed;\n}\n\n.bashmax {\n display: absolute;\n width: 100%;\n background: #34495e;\n height: 960px;\n border-radius: 5px;\n bottom: 0;\n color: #fff;\n}\n\n/* !--end--! */\n.buttons {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n float: right;\n margin: 13px 4px;\n border: none;\n}\n\n.close {\n background: #e74c3c;\n}\n\n.maximize {\n background: #f1c40f;\n}\n\n.minimize {\n background: #2ecc71;\n}\n\n.result {\n display: none;\n}\n\n.controls {\n height: 40px;\n top: 0;\n}\n\n.title {\n color: #fff;\n font-weight: bold;\n padding: 10px;\n}\n\n.material-tooltip {\n padding: 10px 8px;\n font-size: 1rem;\n z-index: 2000;\n border-radius: 2px;\n color: #fff;\n min-height: 36px;\n line-height: 120%;\n opacity: 0;\n position: absolute;\n text-align: center;\n max-width: calc(100% - 4px);\n overflow: hidden;\n left: 0;\n top: 0;\n pointer-events: none;\n visibility: hidden;\n background-color: #323232;\n}\n\n.backdrop {\n position: absolute;\n opacity: 0;\n height: 7px;\n width: 14px;\n border-radius: 0 0 50% 50%;\n background-color: #323232;\n z-index: -1;\n transform-origin: 50% 0%;\n visibility: hidden;\n}\n\n.shadow-0 {\n box-shadow: none !important;\n}\n\n/* 2dp elevation modified*/\n.shadow-1, nav, .dropdown-content, .card, .card-panel, .btn-floating, .btn, .btn-small, .btn-large, .collapsible {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n\n.shadow-1-half, .btn-floating:hover, .btn:hover, .btn-small:hover, .btn-large:hover {\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2);\n}\n\n/* 6dp elevation modified*/\n.shadow-2 {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* 12dp elevation modified*/\n.shadow-3 {\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\n}\n\n/* 16dp elevation */\n.shadow-4 {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.shadow-5, .modal {\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.invert-shadow-5 {\n box-shadow: 38px 0 0 0 rgba(0, 0, 0, 0.14), 46px 0 0 0 rgba(0, 0, 0, 0.12), 15px 0 0 0 rgba(0, 0, 0, 0.2);\n}\n\n.hoverable {\n transition: box-shadow 0.25s;\n}\n.hoverable:hover {\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n.waves-effect {\n position: relative;\n cursor: pointer;\n display: inline-block;\n overflow: hidden;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n z-index: 1;\n transition: 0.3s ease-out;\n}\n.waves-effect .waves-ripple {\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n opacity: 0;\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.7s ease-out;\n transition-property: transform, opacity;\n transform: scale(0);\n pointer-events: none;\n}\n.waves-effect.waves-light .waves-ripple {\n background-color: rgba(255, 255, 255, 0.45);\n}\n.waves-effect.waves-red .waves-ripple {\n background-color: rgba(244, 67, 54, 0.7);\n}\n.waves-effect.waves-yellow .waves-ripple {\n background-color: rgba(255, 235, 59, 0.7);\n}\n.waves-effect.waves-orange .waves-ripple {\n background-color: rgba(255, 152, 0, 0.7);\n}\n.waves-effect.waves-purple .waves-ripple {\n background-color: rgba(156, 39, 176, 0.7);\n}\n.waves-effect.waves-green .waves-ripple {\n background-color: rgba(76, 175, 80, 0.7);\n}\n.waves-effect.waves-teal .waves-ripple {\n background-color: rgba(0, 150, 136, 0.7);\n}\n.waves-effect input[type=button], .waves-effect input[type=reset], .waves-effect input[type=submit] {\n border: 0;\n font-style: normal;\n font-size: inherit;\n text-transform: inherit;\n background: none;\n}\n.waves-effect img {\n position: relative;\n z-index: -1;\n}\n\n.waves-notransition {\n transition: none !important;\n}\n\n.waves-circle {\n transform: translateZ(0);\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\n}\n\n.waves-input-wrapper {\n border-radius: 0.2em;\n vertical-align: bottom;\n}\n.waves-input-wrapper .waves-button-input {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n}\n\n.waves-circle {\n text-align: center;\n width: 2.5em;\n height: 2.5em;\n line-height: 2.5em;\n border-radius: 50%;\n -webkit-mask-image: none;\n}\n\n.waves-block {\n display: block;\n}\n\n/* Firefox Bug: link not triggered */\n.waves-effect .waves-ripple {\n z-index: -1;\n}\n\n.modal {\n position: fixed;\n left: 0;\n right: 0;\n background-color: #fafafa;\n padding: 0;\n max-height: 70%;\n width: 55%;\n margin: auto;\n overflow-y: auto;\n border-radius: 2px;\n will-change: top, opacity;\n}\n.modal:focus {\n outline: none;\n}\n@media only screen and (max-width : 992px) {\n .modal {\n width: 80%;\n }\n}\n.modal h1, .modal h2, .modal h3, .modal h4 {\n margin-top: 0;\n}\n.modal .modal-content {\n padding: 24px;\n}\n.modal .modal-close {\n cursor: pointer;\n}\n.modal .modal-footer {\n border-radius: 0 0 2px 2px;\n background-color: #fafafa;\n padding: 4px 6px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-footer .btn, .modal .modal-footer .btn-small, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {\n margin: 6px 0;\n}\n.modal .modal-header {\n border-radius: 2px 2px 0 0;\n background-color: #fafafa;\n padding: 6px 4px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-header .btn, .modal .modal-header .btn-small, .modal .modal-header .btn-large, .modal .modal-header .btn-flat {\n margin: 6px 0;\n}\n\n.modal-overlay {\n position: fixed;\n z-index: 999;\n top: -25%;\n left: 0;\n bottom: 0;\n right: 0;\n height: 125%;\n width: 100%;\n background: #000;\n display: none;\n will-change: opacity;\n}\n\n.modal.modal-fixed-footer {\n padding: 0;\n height: 70%;\n}\n.modal.modal-fixed-footer .modal-content {\n position: absolute;\n height: calc(100% - 56px);\n max-height: 100%;\n width: 100%;\n overflow-y: auto;\n}\n.modal.modal-fixed-footer .modal-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n position: absolute;\n bottom: 0;\n}\n\n.modal.bottom-sheet {\n top: auto;\n bottom: -100%;\n margin: 0;\n width: 100%;\n max-height: 45%;\n border-radius: 0;\n will-change: bottom, opacity;\n}\n\nhtml,\nbody,\n#root {\n margin: 0;\n height: 100%;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n}\n\nul:not(.browser-default) {\n padding-left: 0;\n list-style-type: none;\n}\nul:not(.browser-default) > li {\n list-style-type: none;\n}\n\na {\n color: #039be5;\n text-decoration: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n.w-100 {\n width: 100%;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center-align {\n text-align: center;\n}\n\n.v-center {\n display: flex;\n align-items: center;\n}\n\n.mb1 {\n margin-bottom: 10px;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.hover:hover {\n background-color: #ddd;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n\n.secondary-content {\n float: right;\n color: #26a69a;\n}\n\n.collapsible .collection {\n margin: 0;\n border: none;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n padding: 20px 0 20px 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n}\n.modal-overlay .innerform {\n max-width: 650px;\n}\n.modal-overlay .innerform form {\n overflow: hidden;\n}\n\n/*********************\n Media Query Classes\n**********************/\n@media only screen and (max-width : 600px) {\n .hide-on-small-only, .hide-on-small-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .hide-on-med-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .hide-on-med-and-up {\n display: none !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .hide-on-med-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .hide-on-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .hide-on-extra-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .show-on-extra-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .show-on-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .show-on-medium {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .show-on-small {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .show-on-medium-and-up {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .show-on-medium-and-down {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .center-on-small-only {\n text-align: center;\n }\n}\n\n/*******************\n Utility Classes\n*******************/\n.hide {\n display: none !important;\n}\n\n.left-align {\n text-align: left;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center, .center-align {\n text-align: center;\n}\n\n.left {\n float: left !important;\n}\n\n.right {\n float: right !important;\n}\n\n.no-select {\n user-select: none;\n}\n\n.circle {\n border-radius: 50%;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.truncate {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.no-padding {\n padding: 0 !important;\n}\n\nspan.badge {\n min-width: 3rem;\n padding: 0 6px;\n margin-left: 14px;\n text-align: center;\n font-size: 1rem;\n line-height: 22px;\n height: 22px;\n color: #757575;\n float: right;\n box-sizing: border-box;\n}\nspan.badge.new {\n font-weight: 300;\n font-size: 0.8rem;\n color: #fff;\n background-color: #26a69a;\n border-radius: 2px;\n}\nspan.badge.new:after {\n content: \" new\";\n}\nspan.badge[data-badge-caption]::after {\n content: \" \" attr(data-badge-caption);\n}\n\nnav ul a span.badge {\n display: inline-block;\n float: none;\n margin-left: 4px;\n line-height: 22px;\n height: 22px;\n -webkit-font-smoothing: auto;\n}\n\n.collection-item span.badge {\n margin-top: calc(0.75rem - 11px);\n}\n\n.collapsible span.badge {\n margin-left: auto;\n}\n\n.sidenav span.badge {\n margin-top: 11.5px;\n}\n\ntable span.badge {\n display: inline-block;\n float: none;\n margin-left: auto;\n}\n\n.chip {\n display: inline-block;\n height: 32px;\n font-size: 13px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.6);\n line-height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background-color: #e4e4e4;\n margin-bottom: 5px;\n margin-right: 5px;\n}\n.chip:focus {\n outline: none;\n background-color: #26a69a;\n color: #fff;\n}\n.chip > img {\n float: left;\n margin: 0 8px 0 -12px;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n}\n.chip .close {\n cursor: pointer;\n float: right;\n font-size: 16px;\n line-height: 32px;\n padding-left: 8px;\n}\n\n.chips {\n border: none;\n border-bottom: 1px solid #9e9e9e;\n box-shadow: none;\n margin: 0 0 8px 0;\n min-height: 45px;\n outline: none;\n transition: all 0.3s;\n}\n.chips.focus {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\n.chips:hover {\n cursor: text;\n}\n.chips .input {\n background: none;\n border: 0;\n color: rgba(0, 0, 0, 0.6);\n display: inline-block;\n font-size: 16px;\n height: 56px;\n line-height: 32px;\n outline: 0;\n margin: 0;\n padding: 0 !important;\n width: 120px !important;\n}\n.chips .input:focus {\n border: 0 !important;\n box-shadow: none !important;\n}\n.chips .autocomplete-content {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.prefix ~ .chips {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.chips:empty ~ label {\n font-size: 0.8rem;\n transform: translateY(-140%);\n}\n\n.collapsible {\n border-top: 1px solid #ddd;\n border-right: 1px solid #ddd;\n border-left: 1px solid #ddd;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n}\n\n.collapsible-header {\n display: flex;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n padding: 1rem;\n background-color: #fff;\n border-bottom: 1px solid #ddd;\n}\n.collapsible-header:focus {\n outline: 0;\n}\n.collapsible-header i {\n width: 2rem;\n font-size: 1.6rem;\n display: inline-block;\n text-align: center;\n margin-right: 1rem;\n}\n\n.keyboard-focused .collapsible-header:focus {\n background-color: #eee;\n}\n\n.collapsible-body {\n display: none;\n border-bottom: 1px solid #ddd;\n box-sizing: border-box;\n padding: 2rem;\n}\n\n.sidenav .collapsible,\n.sidenav.fixed .collapsible {\n border: none;\n box-shadow: none;\n}\n.sidenav .collapsible li,\n.sidenav.fixed .collapsible li {\n padding: 0;\n}\n.sidenav .collapsible-header,\n.sidenav.fixed .collapsible-header {\n background-color: transparent;\n border: none;\n line-height: inherit;\n height: inherit;\n padding: 0 15px;\n}\n.sidenav .collapsible-header:hover,\n.sidenav.fixed .collapsible-header:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav .collapsible-header i,\n.sidenav.fixed .collapsible-header i {\n line-height: inherit;\n}\n.sidenav .collapsible-body,\n.sidenav.fixed .collapsible-body {\n border: 0;\n background-color: #fff;\n}\n.sidenav .collapsible-body li a,\n.sidenav.fixed .collapsible-body li a {\n padding: 0 22.5px 0 30px;\n}\n\n.collapsible.popout {\n border: none;\n box-shadow: none;\n}\n.collapsible.popout > li {\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n margin: 0 24px;\n transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n}\n.collapsible.popout > li.active {\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n margin: 16px 0;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n.collection .secondary-content {\n float: right;\n color: #26a69a;\n}\n\nselect:focus {\n outline: 1px solid #c9f3ef;\n}\n\nbutton:focus {\n outline: none;\n background-color: #2ab7a9;\n}\n\nlabel {\n font-size: 0.8rem;\n color: #9e9e9e;\n}\n\n/* Text Inputs + Textarea\n ========================================================================== */\n/* Style Placeholders */\n::placeholder {\n color: #d1d1d1;\n}\n\n/* Text inputs */\ninput:not([type]),\ninput[type=text]:not(.browser-default),\ninput[type=password]:not(.browser-default),\ninput[type=email]:not(.browser-default),\ninput[type=url]:not(.browser-default),\ninput[type=time]:not(.browser-default),\ninput[type=date]:not(.browser-default),\ninput[type=datetime]:not(.browser-default),\ninput[type=datetime-local]:not(.browser-default),\ninput[type=tel]:not(.browser-default),\ninput[type=number]:not(.browser-default),\ninput[type=search]:not(.browser-default),\ntextarea.textarea {\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n border-radius: 0;\n outline: none;\n height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n box-shadow: none;\n box-sizing: content-box;\n transition: box-shadow 0.3s, border 0.3s;\n}\ninput:not([type]):disabled, input:not([type])[readonly=readonly],\ninput[type=text]:not(.browser-default):disabled,\ninput[type=text]:not(.browser-default)[readonly=readonly],\ninput[type=password]:not(.browser-default):disabled,\ninput[type=password]:not(.browser-default)[readonly=readonly],\ninput[type=email]:not(.browser-default):disabled,\ninput[type=email]:not(.browser-default)[readonly=readonly],\ninput[type=url]:not(.browser-default):disabled,\ninput[type=url]:not(.browser-default)[readonly=readonly],\ninput[type=time]:not(.browser-default):disabled,\ninput[type=time]:not(.browser-default)[readonly=readonly],\ninput[type=date]:not(.browser-default):disabled,\ninput[type=date]:not(.browser-default)[readonly=readonly],\ninput[type=datetime]:not(.browser-default):disabled,\ninput[type=datetime]:not(.browser-default)[readonly=readonly],\ninput[type=datetime-local]:not(.browser-default):disabled,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly],\ninput[type=tel]:not(.browser-default):disabled,\ninput[type=tel]:not(.browser-default)[readonly=readonly],\ninput[type=number]:not(.browser-default):disabled,\ninput[type=number]:not(.browser-default)[readonly=readonly],\ninput[type=search]:not(.browser-default):disabled,\ninput[type=search]:not(.browser-default)[readonly=readonly],\ntextarea.textarea:disabled,\ntextarea.textarea[readonly=readonly] {\n color: rgba(0, 0, 0, 0.42);\n border-bottom: 1px dotted rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):disabled + label, input:not([type])[readonly=readonly] + label,\ninput[type=text]:not(.browser-default):disabled + label,\ninput[type=text]:not(.browser-default)[readonly=readonly] + label,\ninput[type=password]:not(.browser-default):disabled + label,\ninput[type=password]:not(.browser-default)[readonly=readonly] + label,\ninput[type=email]:not(.browser-default):disabled + label,\ninput[type=email]:not(.browser-default)[readonly=readonly] + label,\ninput[type=url]:not(.browser-default):disabled + label,\ninput[type=url]:not(.browser-default)[readonly=readonly] + label,\ninput[type=time]:not(.browser-default):disabled + label,\ninput[type=time]:not(.browser-default)[readonly=readonly] + label,\ninput[type=date]:not(.browser-default):disabled + label,\ninput[type=date]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime]:not(.browser-default):disabled + label,\ninput[type=datetime]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime-local]:not(.browser-default):disabled + label,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly] + label,\ninput[type=tel]:not(.browser-default):disabled + label,\ninput[type=tel]:not(.browser-default)[readonly=readonly] + label,\ninput[type=number]:not(.browser-default):disabled + label,\ninput[type=number]:not(.browser-default)[readonly=readonly] + label,\ninput[type=search]:not(.browser-default):disabled + label,\ninput[type=search]:not(.browser-default)[readonly=readonly] + label,\ntextarea.textarea:disabled + label,\ntextarea.textarea[readonly=readonly] + label {\n color: rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):focus:not([readonly]),\ninput[type=text]:not(.browser-default):focus:not([readonly]),\ninput[type=password]:not(.browser-default):focus:not([readonly]),\ninput[type=email]:not(.browser-default):focus:not([readonly]),\ninput[type=url]:not(.browser-default):focus:not([readonly]),\ninput[type=time]:not(.browser-default):focus:not([readonly]),\ninput[type=date]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]),\ninput[type=tel]:not(.browser-default):focus:not([readonly]),\ninput[type=number]:not(.browser-default):focus:not([readonly]),\ninput[type=search]:not(.browser-default):focus:not([readonly]),\ntextarea.textarea:focus:not([readonly]) {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\ninput:not([type]):focus:not([readonly]) + label,\ninput[type=text]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=password]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=email]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=url]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=time]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=date]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=tel]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=number]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=search]:not(.browser-default):focus:not([readonly]) + label,\ntextarea.textarea:focus:not([readonly]) + label {\n color: #26a69a;\n}\ninput:not([type]):focus.valid ~ label,\ninput[type=text]:not(.browser-default):focus.valid ~ label,\ninput[type=password]:not(.browser-default):focus.valid ~ label,\ninput[type=email]:not(.browser-default):focus.valid ~ label,\ninput[type=url]:not(.browser-default):focus.valid ~ label,\ninput[type=time]:not(.browser-default):focus.valid ~ label,\ninput[type=date]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ label,\ninput[type=tel]:not(.browser-default):focus.valid ~ label,\ninput[type=number]:not(.browser-default):focus.valid ~ label,\ninput[type=search]:not(.browser-default):focus.valid ~ label,\ntextarea.textarea:focus.valid ~ label {\n color: #4caf50;\n}\ninput:not([type]):focus.invalid ~ label,\ninput[type=text]:not(.browser-default):focus.invalid ~ label,\ninput[type=password]:not(.browser-default):focus.invalid ~ label,\ninput[type=email]:not(.browser-default):focus.invalid ~ label,\ninput[type=url]:not(.browser-default):focus.invalid ~ label,\ninput[type=time]:not(.browser-default):focus.invalid ~ label,\ninput[type=date]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ label,\ninput[type=tel]:not(.browser-default):focus.invalid ~ label,\ninput[type=number]:not(.browser-default):focus.invalid ~ label,\ninput[type=search]:not(.browser-default):focus.invalid ~ label,\ntextarea.textarea:focus.invalid ~ label {\n color: #f44336;\n}\ninput:not([type]).validate + label,\ninput[type=text]:not(.browser-default).validate + label,\ninput[type=password]:not(.browser-default).validate + label,\ninput[type=email]:not(.browser-default).validate + label,\ninput[type=url]:not(.browser-default).validate + label,\ninput[type=time]:not(.browser-default).validate + label,\ninput[type=date]:not(.browser-default).validate + label,\ninput[type=datetime]:not(.browser-default).validate + label,\ninput[type=datetime-local]:not(.browser-default).validate + label,\ninput[type=tel]:not(.browser-default).validate + label,\ninput[type=number]:not(.browser-default).validate + label,\ninput[type=search]:not(.browser-default).validate + label,\ntextarea.textarea.validate + label {\n width: 100%;\n}\n/* Validation Sass Placeholders */\n.select-wrapper.valid > input.select-dropdown, input:not([type]).valid, input:not([type]):focus.valid,\ninput[type=text]:not(.browser-default).valid,\ninput[type=text]:not(.browser-default):focus.valid,\ninput[type=password]:not(.browser-default).valid,\ninput[type=password]:not(.browser-default):focus.valid,\ninput[type=email]:not(.browser-default).valid,\ninput[type=email]:not(.browser-default):focus.valid,\ninput[type=url]:not(.browser-default).valid,\ninput[type=url]:not(.browser-default):focus.valid,\ninput[type=time]:not(.browser-default).valid,\ninput[type=time]:not(.browser-default):focus.valid,\ninput[type=date]:not(.browser-default).valid,\ninput[type=date]:not(.browser-default):focus.valid,\ninput[type=datetime]:not(.browser-default).valid,\ninput[type=datetime]:not(.browser-default):focus.valid,\ninput[type=datetime-local]:not(.browser-default).valid,\ninput[type=datetime-local]:not(.browser-default):focus.valid,\ninput[type=tel]:not(.browser-default).valid,\ninput[type=tel]:not(.browser-default):focus.valid,\ninput[type=number]:not(.browser-default).valid,\ninput[type=number]:not(.browser-default):focus.valid,\ninput[type=search]:not(.browser-default).valid,\ninput[type=search]:not(.browser-default):focus.valid,\ntextarea.textarea.valid,\ntextarea.textarea:focus.valid {\n border-bottom: 1px solid #4caf50;\n box-shadow: 0 1px 0 0 #4caf50;\n}\n\n.select-wrapper.invalid > input.select-dropdown, .select-wrapper.invalid > input.select-dropdown:focus, input:not([type]).invalid, input:not([type]):focus.invalid,\ninput[type=text]:not(.browser-default).invalid,\ninput[type=text]:not(.browser-default):focus.invalid,\ninput[type=password]:not(.browser-default).invalid,\ninput[type=password]:not(.browser-default):focus.invalid,\ninput[type=email]:not(.browser-default).invalid,\ninput[type=email]:not(.browser-default):focus.invalid,\ninput[type=url]:not(.browser-default).invalid,\ninput[type=url]:not(.browser-default):focus.invalid,\ninput[type=time]:not(.browser-default).invalid,\ninput[type=time]:not(.browser-default):focus.invalid,\ninput[type=date]:not(.browser-default).invalid,\ninput[type=date]:not(.browser-default):focus.invalid,\ninput[type=datetime]:not(.browser-default).invalid,\ninput[type=datetime]:not(.browser-default):focus.invalid,\ninput[type=datetime-local]:not(.browser-default).invalid,\ninput[type=datetime-local]:not(.browser-default):focus.invalid,\ninput[type=tel]:not(.browser-default).invalid,\ninput[type=tel]:not(.browser-default):focus.invalid,\ninput[type=number]:not(.browser-default).invalid,\ninput[type=number]:not(.browser-default):focus.invalid,\ninput[type=search]:not(.browser-default).invalid,\ninput[type=search]:not(.browser-default):focus.invalid,\ntextarea.textarea.invalid,\ntextarea.textarea:focus.invalid {\n border-bottom: 1px solid #f44336;\n box-shadow: 0 1px 0 0 #f44336;\n}\n\n.select-wrapper.valid .helper-text[data-success], .select-wrapper.invalid ~ .helper-text[data-error], input:not([type]).valid ~ .helper-text[data-success], input:not([type]):focus.valid ~ .helper-text[data-success], input:not([type]).invalid ~ .helper-text[data-error], input:not([type]):focus.invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ntextarea.textarea.valid ~ .helper-text[data-success],\ntextarea.textarea:focus.valid ~ .helper-text[data-success],\ntextarea.textarea.invalid ~ .helper-text[data-error],\ntextarea.textarea:focus.invalid ~ .helper-text[data-error] {\n color: transparent;\n user-select: none;\n pointer-events: none;\n}\n\n.select-wrapper.valid ~ .helper-text:after, input:not([type]).valid ~ .helper-text:after, input:not([type]):focus.valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,\ntextarea.textarea.valid ~ .helper-text:after,\ntextarea.textarea:focus.valid ~ .helper-text:after {\n content: attr(data-success);\n color: #4caf50;\n}\n\n.select-wrapper.invalid ~ .helper-text:after, input:not([type]).invalid ~ .helper-text:after, input:not([type]):focus.invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,\ntextarea.textarea.invalid ~ .helper-text:after,\ntextarea.textarea:focus.invalid ~ .helper-text:after {\n content: attr(data-error);\n color: #f44336;\n}\n\n.select-wrapper + label:after, input:not([type]) + label:after,\ninput[type=text]:not(.browser-default) + label:after,\ninput[type=password]:not(.browser-default) + label:after,\ninput[type=email]:not(.browser-default) + label:after,\ninput[type=url]:not(.browser-default) + label:after,\ninput[type=time]:not(.browser-default) + label:after,\ninput[type=date]:not(.browser-default) + label:after,\ninput[type=datetime]:not(.browser-default) + label:after,\ninput[type=datetime-local]:not(.browser-default) + label:after,\ninput[type=tel]:not(.browser-default) + label:after,\ninput[type=number]:not(.browser-default) + label:after,\ninput[type=search]:not(.browser-default) + label:after,\ntextarea.textarea + label:after {\n display: block;\n content: \"\";\n position: absolute;\n top: 100%;\n left: 0;\n opacity: 0;\n transition: 0.2s opacity ease-out, 0.2s color ease-out;\n}\n\n.input-field {\n position: relative;\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.input-field.inline {\n display: inline-block;\n vertical-align: middle;\n margin-left: 5px;\n}\n.input-field.inline input,\n.input-field.inline .select-dropdown {\n margin-bottom: 1rem;\n}\n.input-field.col label {\n left: 0.5rem;\n}\n.input-field.col .prefix ~ label,\n.input-field.col .prefix ~ .validate ~ label {\n width: calc(100% - 3rem - 1rem);\n}\n.input-field > label {\n color: #9e9e9e;\n position: absolute;\n top: 0;\n left: 0;\n font-size: 1rem;\n cursor: text;\n transition: transform 0.2s ease-out, color 0.2s ease-out;\n transform-origin: 0% 100%;\n text-align: initial;\n transform: translateY(12px);\n}\n.input-field > label:not(.label-icon).active {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type=search]) + label, .input-field > input[type=date]:not(.browser-default) + label, .input-field > input[type=time]:not(.browser-default) + label {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field .helper-text {\n position: relative;\n min-height: 18px;\n display: block;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.54);\n}\n.input-field .helper-text::after {\n opacity: 1;\n position: absolute;\n top: 0;\n left: 0;\n}\n.input-field .prefix {\n position: absolute;\n width: 56px;\n font-size: 2rem;\n transition: color 0.2s;\n}\n.input-field .prefix.active {\n color: #26a69a;\n}\n.input-field .prefix ~ input,\n.input-field .prefix ~ textarea,\n.input-field .prefix ~ label,\n.input-field .prefix ~ .validate ~ label,\n.input-field .prefix ~ .helper-text,\n.input-field .prefix ~ .autocomplete-content {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n.input-field .prefix ~ label {\n margin-left: 3rem;\n}\n@media only screen and (max-width : 992px) {\n .input-field .prefix ~ input {\n width: 86%;\n width: calc(100% - 3rem);\n }\n}\n@media only screen and (max-width : 600px) {\n .input-field .prefix ~ input {\n width: 80%;\n width: calc(100% - 3rem);\n }\n}\n\n/* Search Field */\n.input-field input[type=search] {\n display: block;\n line-height: inherit;\n transition: 0.3s background-color;\n}\n.nav-wrapper .input-field input[type=search] {\n height: inherit;\n padding-left: 4rem;\n width: calc(100% - 4rem);\n border: 0;\n box-shadow: none;\n}\n.input-field input[type=search]:focus:not(.browser-default) {\n background-color: #fff;\n border: 0;\n box-shadow: none;\n color: #444;\n}\n.input-field input[type=search]:focus:not(.browser-default) + label i, .input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, .input-field input[type=search]:focus:not(.browser-default) ~ .material-icons {\n color: #444;\n}\n.input-field input[type=search] + .label-icon {\n transform: none;\n left: 1rem;\n}\n.input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons {\n position: absolute;\n top: 0;\n right: 1rem;\n color: transparent;\n cursor: pointer;\n font-size: 2rem;\n transition: 0.3s color;\n}\n\n/* Textarea */\ntextarea {\n width: 100%;\n height: 56px;\n background-color: transparent;\n}\ntextarea.textarea {\n line-height: normal;\n overflow-y: hidden; /* prevents scroll bar flash */\n padding: 0.8rem 0 0.8rem 0; /* prevents text jump on Enter keypress */\n resize: none;\n min-height: 56px;\n box-sizing: border-box;\n}\n\n.hiddendiv {\n visibility: hidden;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\n position: absolute;\n top: 0;\n z-index: -1;\n}\n\n/* Autocomplete */\n.autocomplete-content li .highlight {\n color: #444;\n}\n.autocomplete-content li img {\n margin: 5px 15px;\n}\n\n/* Character Counter */\n.character-counter {\n min-height: 18px;\n}\n\n/* Radio Buttons\n ========================================================================== */\n[type=radio]:not(:checked),\n[type=radio]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=radio]:not(:checked) + span,\n[type=radio]:checked + span {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n transition: 0.28s ease;\n user-select: none;\n}\n\n[type=radio] + span:before,\n[type=radio] + span:after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n margin: 4px;\n width: 16px;\n height: 16px;\n z-index: 0;\n transition: 0.28s ease;\n}\n\n/* Unchecked styles */\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after,\n[type=radio]:checked + span:before,\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border-radius: 50%;\n}\n\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after {\n border: 2px solid #5a5a5a;\n}\n\n[type=radio]:not(:checked) + span:after {\n transform: scale(0);\n}\n\n/* Checked styles */\n[type=radio]:checked + span:before {\n border: 2px solid transparent;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border: 2px solid #26a69a;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:after {\n background-color: #26a69a;\n}\n\n[type=radio]:checked + span:after {\n transform: scale(1.02);\n}\n\n/* Radio With gap */\n[type=radio].with-gap:checked + span:after {\n transform: scale(0.5);\n}\n\n/* Focused styles */\n[type=radio].tabbed:focus + span:before {\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n/* Disabled Radio With gap */\n[type=radio].with-gap:disabled:checked + span:before {\n border: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n[type=radio].with-gap:disabled:checked + span:after {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n\n/* Disabled style */\n[type=radio]:disabled:not(:checked) + span:before,\n[type=radio]:disabled:checked + span:before {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled + span {\n color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:not(:checked) + span:before {\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:checked + span:after {\n background-color: rgba(0, 0, 0, 0.42);\n border-color: #949494;\n}\n\n/* Checkboxes\n ========================================================================== */\n/* Remove default checkbox */\n[type=checkbox]:not(:checked),\n[type=checkbox]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=checkbox] {\n /* checkbox aspect */\n}\n[type=checkbox] + span:not(.lever) {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n user-select: none;\n}\n[type=checkbox] + span:not(.lever):before, [type=checkbox]:not(.filled-in) + span:not(.lever):after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 18px;\n z-index: 0;\n border: 2px solid #5a5a5a;\n border-radius: 1px;\n margin-top: 3px;\n transition: 0.2s;\n}\n[type=checkbox]:not(.filled-in) + span:not(.lever):after {\n border: 0;\n transform: scale(0);\n}\n[type=checkbox]:not(:checked):disabled + span:not(.lever):before {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n[type=checkbox].tabbed:focus + span:not(.lever):after {\n transform: scale(1);\n border: 0;\n border-radius: 50%;\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n[type=checkbox]:checked + span:not(.lever):before {\n top: -4px;\n left: -5px;\n width: 12px;\n height: 22px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #26a69a;\n border-bottom: 2px solid #26a69a;\n transform: rotate(40deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:checked:disabled + span:before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n border-bottom: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n/* Indeterminate checkbox */\n[type=checkbox]:indeterminate + span:not(.lever):before {\n top: -11px;\n left: -12px;\n width: 10px;\n height: 22px;\n border-top: none;\n border-left: none;\n border-right: 2px solid #26a69a;\n border-bottom: none;\n transform: rotate(90deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:indeterminate:disabled + span:not(.lever):before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n background-color: transparent;\n}\n\n[type=checkbox].filled-in + span:not(.lever):after {\n border-radius: 2px;\n}\n[type=checkbox].filled-in + span:not(.lever):before,\n[type=checkbox].filled-in + span:not(.lever):after {\n content: \"\";\n left: 0;\n position: absolute;\n /* .1s delay is for check animation */\n transition: border 0.25s, background-color 0.25s, width 0.2s 0.1s, height 0.2s 0.1s, top 0.2s 0.1s, left 0.2s 0.1s;\n z-index: 1;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):before {\n width: 0;\n height: 0;\n border: 3px solid transparent;\n left: 6px;\n top: 10px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):after {\n height: 20px;\n width: 20px;\n background-color: transparent;\n border: 2px solid #5a5a5a;\n top: 0px;\n z-index: 0;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):before {\n top: 0;\n left: 1px;\n width: 8px;\n height: 13px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #fff;\n border-bottom: 2px solid #fff;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):after {\n top: 0;\n width: 20px;\n height: 20px;\n border: 2px solid #26a69a;\n background-color: #26a69a;\n z-index: 0;\n}\n[type=checkbox].filled-in.tabbed:focus + span:not(.lever):after {\n border-radius: 2px;\n border-color: #5a5a5a;\n background-color: rgba(0, 0, 0, 0.1);\n}\n[type=checkbox].filled-in.tabbed:checked:focus + span:not(.lever):after {\n border-radius: 2px;\n background-color: #26a69a;\n border-color: #26a69a;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):before {\n background-color: transparent;\n border: 2px solid transparent;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):after {\n border-color: transparent;\n background-color: #949494;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):before {\n background-color: transparent;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):after {\n background-color: #949494;\n border-color: #949494;\n}\n\n/* Switch\n ========================================================================== */\n.switch,\n.switch * {\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n\n.switch label {\n cursor: pointer;\n}\n\n.switch label input[type=checkbox] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n.switch label input[type=checkbox]:checked + .lever {\n background-color: #84c7c1;\n}\n.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after {\n left: 18px;\n}\n.switch label input[type=checkbox]:checked + .lever:after {\n background-color: #26a69a;\n}\n\n.switch label .lever {\n content: \"\";\n display: inline-block;\n position: relative;\n width: 36px;\n height: 14px;\n background-color: rgba(0, 0, 0, 0.38);\n border-radius: 15px;\n transition: background 0.3s ease;\n vertical-align: middle;\n margin: 0 16px;\n}\n.switch label .lever:before, .switch label .lever:after {\n content: \"\";\n position: absolute;\n display: inline-block;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -3px;\n transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease, transform 0.1s ease;\n}\n.switch label .lever:before {\n background-color: rgba(38, 166, 154, 0.15);\n}\n.switch label .lever:after {\n background-color: #F1F1F1;\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(38, 166, 154, 0.15);\n}\n\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.switch input[type=checkbox][disabled] + .lever {\n cursor: default;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.switch label input[type=checkbox][disabled] + .lever:after,\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\n background-color: #949494;\n}\n\n/* Select Field\n ========================================================================== */\nselect {\n display: none;\n}\n\nselect.browser-default {\n display: block;\n}\n\nselect {\n background-color: rgba(255, 255, 255, 0.9);\n width: 100%;\n padding: 5px;\n border: 1px solid #f2f2f2;\n border-radius: 2px;\n height: 56px;\n}\n\n.select-label {\n position: absolute;\n}\n\n.select-wrapper {\n position: relative;\n}\n.select-wrapper.valid + label, .select-wrapper.invalid + label {\n width: 100%;\n pointer-events: none;\n}\n.select-wrapper input.select-dropdown {\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n outline: none;\n height: 56px;\n line-height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n display: block;\n user-select: none;\n z-index: 1;\n}\n.select-wrapper input.select-dropdown:focus {\n border-bottom: 1px solid #26a69a;\n}\n.select-wrapper .caret {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto 0;\n z-index: 0;\n fill: rgba(0, 0, 0, 0.87);\n}\n.select-wrapper + label {\n position: absolute;\n top: -26px;\n font-size: 0.8rem;\n}\n\nselect:disabled {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper.disabled + label {\n color: rgba(0, 0, 0, 0.42);\n}\n.select-wrapper.disabled .caret {\n fill: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper input.select-dropdown:disabled {\n color: rgba(0, 0, 0, 0.42);\n cursor: default;\n user-select: none;\n}\n\n.select-wrapper i {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.select-dropdown li.disabled,\n.select-dropdown li.disabled > span,\n.select-dropdown li.optgroup {\n color: rgba(0, 0, 0, 0.3);\n background-color: transparent;\n}\n\nbody.keyboard-focused .select-dropdown.dropdown-content li:focus {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.select-dropdown.dropdown-content li:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n.select-dropdown.dropdown-content li.selected {\n background-color: rgba(0, 0, 0, 0.03);\n}\n\n.prefix ~ .select-wrapper {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.prefix ~ label {\n margin-left: 3rem;\n}\n\n.select-dropdown li img {\n margin: 5px 15px;\n float: right;\n}\n\n.select-dropdown li.optgroup.selected > span {\n color: rgba(0, 0, 0, 0.7);\n}\n.select-dropdown li.optgroup > span {\n color: rgba(0, 0, 0, 0.4);\n}\n.select-dropdown li.optgroup ~ li.optgroup-option {\n padding-left: 1rem;\n}\n\n/* File Input\n ========================================================================== */\n.file-field {\n position: relative;\n}\n.file-field .file-path-wrapper {\n overflow: hidden;\n padding-left: 10px;\n}\n.file-field input.file-path {\n width: 100%;\n}\n.file-field .btn, .file-field .btn-small, .file-field .btn-large {\n float: left;\n height: 56px;\n line-height: 56px;\n}\n.file-field span {\n cursor: pointer;\n}\n.file-field input[type=file] {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.file-field input[type=file]::-webkit-file-upload-button {\n display: none;\n}\n\n/* Range\n ========================================================================== */\n.range-field {\n position: relative;\n}\n\ninput[type=range],\ninput[type=range] + .thumb {\n cursor: pointer;\n}\n\ninput[type=range] {\n position: relative;\n background-color: transparent;\n border: none;\n outline: none;\n width: 100%;\n margin: 15px 0;\n padding: 0;\n}\ninput[type=range]:focus {\n outline: none;\n}\n\ninput[type=range] + .thumb {\n position: absolute;\n top: 10px;\n left: 0;\n border: none;\n height: 0;\n width: 0;\n border-radius: 50%;\n background-color: #26a69a;\n margin-left: 7px;\n transform-origin: 50% 50%;\n transform: rotate(-45deg);\n}\ninput[type=range] + .thumb .value {\n display: block;\n width: 30px;\n text-align: center;\n color: #26a69a;\n font-size: 0;\n transform: rotate(45deg);\n}\ninput[type=range] + .thumb.active {\n border-radius: 50% 50% 50% 0;\n}\ninput[type=range] + .thumb.active .value {\n color: #fff;\n margin-left: -1px;\n margin-top: 8px;\n font-size: 10px;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n -webkit-appearance: none;\n background-color: #26a69a;\n transform-origin: 50% 50%;\n margin: -5px 0 0 0;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range] {\n /* fix for FF unable to apply focus style bug */\n border: 1px solid white;\n /*required for proper track sizing in FF*/\n}\n\ninput[type=range]::-moz-range-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-moz-focus-inner {\n border: 0;\n}\n\ninput[type=range]::-moz-range-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n margin-top: -5px;\n}\n\ninput[type=range]:-moz-focusring {\n outline: 1px solid #fff;\n outline-offset: -1px;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range]::-ms-track {\n height: 3px;\n background: transparent;\n border-color: transparent;\n border-width: 6px 0;\n /*remove default tick marks*/\n color: transparent;\n}\n\ninput[type=range]::-ms-fill-lower {\n background: #777;\n}\n\ninput[type=range]::-ms-fill-upper {\n background: #ddd;\n}\n\ninput[type=range]::-ms-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\n.parallax {\n /* Set a specific height */\n min-height: 500px;\n /* Create the parallax scrolling effect */\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n}\n\n.scene {\n width: 200px;\n height: 200px;\n border: 1px solid #CCC;\n margin: 80px;\n perspective: 400px;\n}\n\n.cube {\n width: 200px;\n height: 200px;\n position: relative;\n transform-style: preserve-3d;\n transform: translateZ(-400px);\n transition: transform 1s;\n}\n\n.cube.show-front {\n transform: translateZ(-10px) rotateY(0deg);\n}\n\n.cube.show-right {\n transform: translateZ(-10px) rotateY(-90deg);\n}\n\n.cube.show-back {\n transform: translateZ(-10px) rotateY(-180deg);\n}\n\n.cube.show-left {\n transform: translateZ(-10px) rotateY(90deg);\n}\n\n.cube.show-top {\n transform: translateZ(-10px) rotateX(-90deg);\n}\n\n.cube.show-bottom {\n transform: translateZ(-10px) rotateX(90deg);\n}\n\n.cube__face {\n position: absolute;\n width: 200px;\n height: 200px;\n border: 2px solid black;\n line-height: 200px;\n font-size: 40px;\n font-weight: bold;\n color: white;\n text-align: center;\n}\n\n.cube__face--front {\n background: hsla(0deg, 100%, 50%, 0.7);\n}\n\n.cube__face--right {\n background: hsla(60deg, 100%, 50%, 0.7);\n}\n\n.cube__face--back {\n background: hsla(120deg, 100%, 50%, 0.7);\n}\n\n.cube__face--left {\n background: hsla(180deg, 100%, 50%, 0.7);\n}\n\n.cube__face--top {\n background: hsla(240deg, 100%, 50%, 0.7);\n}\n\n.cube__face--bottom {\n background: hsla(300deg, 100%, 50%, 0.7);\n}\n\n.cube__face--front {\n transform: rotateY(0deg) translateZ(100px);\n}\n\n.cube__face--right {\n transform: rotateY(90deg) translateZ(100px);\n}\n\n.cube__face--back {\n transform: rotateY(180deg) translateZ(100px);\n}\n\n.cube__face--left {\n transform: rotateY(-90deg) translateZ(100px);\n}\n\n.cube__face--top {\n transform: rotateX(90deg) translateZ(100px);\n}\n\n.cube__face--bottom {\n transform: rotateX(-90deg) translateZ(100px);\n}\n\nlabel {\n margin-right: 10px;\n}\n\n.container {\n margin: 0 auto;\n max-width: 1280px;\n width: 90%;\n}\n\n@media only screen and (min-width : 601px) {\n .container {\n width: 85%;\n }\n}\n@media only screen and (min-width : 993px) {\n .container {\n width: 70%;\n }\n}\n.col .row {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n\n.section {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.section.no-pad {\n padding: 0;\n}\n.section.no-pad-bot {\n padding-bottom: 0;\n}\n.section.no-pad-top {\n padding-top: 0;\n}\n\n.row {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 20px;\n}\n.row:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.row .col {\n float: left;\n box-sizing: border-box;\n padding: 0 0.5rem;\n min-height: 1px;\n}\n.row .col[class*=push-], .row .col[class*=pull-] {\n position: relative;\n}\n.row .col.s1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.offset-s1 {\n margin-left: 8.3333333333%;\n}\n.row .col.pull-s1 {\n right: 8.3333333333%;\n}\n.row .col.push-s1 {\n left: 8.3333333333%;\n}\n.row .col.offset-s2 {\n margin-left: 16.6666666667%;\n}\n.row .col.pull-s2 {\n right: 16.6666666667%;\n}\n.row .col.push-s2 {\n left: 16.6666666667%;\n}\n.row .col.offset-s3 {\n margin-left: 25%;\n}\n.row .col.pull-s3 {\n right: 25%;\n}\n.row .col.push-s3 {\n left: 25%;\n}\n.row .col.offset-s4 {\n margin-left: 33.3333333333%;\n}\n.row .col.pull-s4 {\n right: 33.3333333333%;\n}\n.row .col.push-s4 {\n left: 33.3333333333%;\n}\n.row .col.offset-s5 {\n margin-left: 41.6666666667%;\n}\n.row .col.pull-s5 {\n right: 41.6666666667%;\n}\n.row .col.push-s5 {\n left: 41.6666666667%;\n}\n.row .col.offset-s6 {\n margin-left: 50%;\n}\n.row .col.pull-s6 {\n right: 50%;\n}\n.row .col.push-s6 {\n left: 50%;\n}\n.row .col.offset-s7 {\n margin-left: 58.3333333333%;\n}\n.row .col.pull-s7 {\n right: 58.3333333333%;\n}\n.row .col.push-s7 {\n left: 58.3333333333%;\n}\n.row .col.offset-s8 {\n margin-left: 66.6666666667%;\n}\n.row .col.pull-s8 {\n right: 66.6666666667%;\n}\n.row .col.push-s8 {\n left: 66.6666666667%;\n}\n.row .col.offset-s9 {\n margin-left: 75%;\n}\n.row .col.pull-s9 {\n right: 75%;\n}\n.row .col.push-s9 {\n left: 75%;\n}\n.row .col.offset-s10 {\n margin-left: 83.3333333333%;\n}\n.row .col.pull-s10 {\n right: 83.3333333333%;\n}\n.row .col.push-s10 {\n left: 83.3333333333%;\n}\n.row .col.offset-s11 {\n margin-left: 91.6666666667%;\n}\n.row .col.pull-s11 {\n right: 91.6666666667%;\n}\n.row .col.push-s11 {\n left: 91.6666666667%;\n}\n.row .col.offset-s12 {\n margin-left: 100%;\n}\n.row .col.pull-s12 {\n right: 100%;\n}\n.row .col.push-s12 {\n left: 100%;\n}\n@media only screen and (min-width : 601px) {\n .row .col.m1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-m1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-m1 {\n right: 8.3333333333%;\n }\n .row .col.push-m1 {\n left: 8.3333333333%;\n }\n .row .col.offset-m2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-m2 {\n right: 16.6666666667%;\n }\n .row .col.push-m2 {\n left: 16.6666666667%;\n }\n .row .col.offset-m3 {\n margin-left: 25%;\n }\n .row .col.pull-m3 {\n right: 25%;\n }\n .row .col.push-m3 {\n left: 25%;\n }\n .row .col.offset-m4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-m4 {\n right: 33.3333333333%;\n }\n .row .col.push-m4 {\n left: 33.3333333333%;\n }\n .row .col.offset-m5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-m5 {\n right: 41.6666666667%;\n }\n .row .col.push-m5 {\n left: 41.6666666667%;\n }\n .row .col.offset-m6 {\n margin-left: 50%;\n }\n .row .col.pull-m6 {\n right: 50%;\n }\n .row .col.push-m6 {\n left: 50%;\n }\n .row .col.offset-m7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-m7 {\n right: 58.3333333333%;\n }\n .row .col.push-m7 {\n left: 58.3333333333%;\n }\n .row .col.offset-m8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-m8 {\n right: 66.6666666667%;\n }\n .row .col.push-m8 {\n left: 66.6666666667%;\n }\n .row .col.offset-m9 {\n margin-left: 75%;\n }\n .row .col.pull-m9 {\n right: 75%;\n }\n .row .col.push-m9 {\n left: 75%;\n }\n .row .col.offset-m10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-m10 {\n right: 83.3333333333%;\n }\n .row .col.push-m10 {\n left: 83.3333333333%;\n }\n .row .col.offset-m11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-m11 {\n right: 91.6666666667%;\n }\n .row .col.push-m11 {\n left: 91.6666666667%;\n }\n .row .col.offset-m12 {\n margin-left: 100%;\n }\n .row .col.pull-m12 {\n right: 100%;\n }\n .row .col.push-m12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 993px) {\n .row .col.l1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-l1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-l1 {\n right: 8.3333333333%;\n }\n .row .col.push-l1 {\n left: 8.3333333333%;\n }\n .row .col.offset-l2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-l2 {\n right: 16.6666666667%;\n }\n .row .col.push-l2 {\n left: 16.6666666667%;\n }\n .row .col.offset-l3 {\n margin-left: 25%;\n }\n .row .col.pull-l3 {\n right: 25%;\n }\n .row .col.push-l3 {\n left: 25%;\n }\n .row .col.offset-l4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-l4 {\n right: 33.3333333333%;\n }\n .row .col.push-l4 {\n left: 33.3333333333%;\n }\n .row .col.offset-l5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-l5 {\n right: 41.6666666667%;\n }\n .row .col.push-l5 {\n left: 41.6666666667%;\n }\n .row .col.offset-l6 {\n margin-left: 50%;\n }\n .row .col.pull-l6 {\n right: 50%;\n }\n .row .col.push-l6 {\n left: 50%;\n }\n .row .col.offset-l7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-l7 {\n right: 58.3333333333%;\n }\n .row .col.push-l7 {\n left: 58.3333333333%;\n }\n .row .col.offset-l8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-l8 {\n right: 66.6666666667%;\n }\n .row .col.push-l8 {\n left: 66.6666666667%;\n }\n .row .col.offset-l9 {\n margin-left: 75%;\n }\n .row .col.pull-l9 {\n right: 75%;\n }\n .row .col.push-l9 {\n left: 75%;\n }\n .row .col.offset-l10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-l10 {\n right: 83.3333333333%;\n }\n .row .col.push-l10 {\n left: 83.3333333333%;\n }\n .row .col.offset-l11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-l11 {\n right: 91.6666666667%;\n }\n .row .col.push-l11 {\n left: 91.6666666667%;\n }\n .row .col.offset-l12 {\n margin-left: 100%;\n }\n .row .col.pull-l12 {\n right: 100%;\n }\n .row .col.push-l12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 1201px) {\n .row .col.xl1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-xl1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-xl1 {\n right: 8.3333333333%;\n }\n .row .col.push-xl1 {\n left: 8.3333333333%;\n }\n .row .col.offset-xl2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-xl2 {\n right: 16.6666666667%;\n }\n .row .col.push-xl2 {\n left: 16.6666666667%;\n }\n .row .col.offset-xl3 {\n margin-left: 25%;\n }\n .row .col.pull-xl3 {\n right: 25%;\n }\n .row .col.push-xl3 {\n left: 25%;\n }\n .row .col.offset-xl4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-xl4 {\n right: 33.3333333333%;\n }\n .row .col.push-xl4 {\n left: 33.3333333333%;\n }\n .row .col.offset-xl5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-xl5 {\n right: 41.6666666667%;\n }\n .row .col.push-xl5 {\n left: 41.6666666667%;\n }\n .row .col.offset-xl6 {\n margin-left: 50%;\n }\n .row .col.pull-xl6 {\n right: 50%;\n }\n .row .col.push-xl6 {\n left: 50%;\n }\n .row .col.offset-xl7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-xl7 {\n right: 58.3333333333%;\n }\n .row .col.push-xl7 {\n left: 58.3333333333%;\n }\n .row .col.offset-xl8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-xl8 {\n right: 66.6666666667%;\n }\n .row .col.push-xl8 {\n left: 66.6666666667%;\n }\n .row .col.offset-xl9 {\n margin-left: 75%;\n }\n .row .col.pull-xl9 {\n right: 75%;\n }\n .row .col.push-xl9 {\n left: 75%;\n }\n .row .col.offset-xl10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-xl10 {\n right: 83.3333333333%;\n }\n .row .col.push-xl10 {\n left: 83.3333333333%;\n }\n .row .col.offset-xl11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-xl11 {\n right: 91.6666666667%;\n }\n .row .col.push-xl11 {\n left: 91.6666666667%;\n }\n .row .col.offset-xl12 {\n margin-left: 100%;\n }\n .row .col.pull-xl12 {\n right: 100%;\n }\n .row .col.push-xl12 {\n left: 100%;\n }\n}\n\n.sidenav {\n position: fixed;\n width: 300px;\n left: 0;\n top: 0;\n margin: 0;\n height: 100%;\n height: calc(100% + 60px);\n height: -moz-calc(100%);\n padding-bottom: 60px;\n background-color: #fff;\n z-index: 999;\n overflow-y: auto;\n will-change: transform;\n backface-visibility: hidden;\n transform: translateX(-105%);\n transition: transform 1s;\n}\n.sidenav.right-aligned {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.sidenav .collapsible {\n margin: 0;\n}\n.sidenav li {\n float: none;\n}\n.sidenav li .iconSideLink {\n display: flex;\n align-items: center;\n}\n.sidenav li .iconSideLink svg {\n stroke: rgba(0, 0, 0, 0.2);\n width: 30px;\n}\n.sidenav li.active {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li.active svg {\n stroke: white !important;\n width: 30px;\n}\n.sidenav li.last {\n position: sticky;\n top: calc(100% - 45px - 35px);\n}\n.sidenav li > a {\n color: rgba(0, 0, 0, 0.87);\n display: flex;\n font-size: 14px;\n font-weight: 700;\n height: 45px;\n line-height: 45px;\n padding: 0 30px;\n}\n.sidenav li > a:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating {\n margin: 10px 15px;\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating {\n color: #fff;\n}\n.sidenav li > a.btn-flat {\n color: #343434;\n}\n.sidenav li > a.btn:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover {\n background-color: #414141;\n}\n.sidenav li > a.btn-floating:hover {\n background-color: #343434;\n}\n.sidenav li > a > i, .sidenav li > a > [class^=mdi-],\n.sidenav li > a li > a > [class*=mdi-], .sidenav li > a > i.s-icon {\n float: left;\n height: 45px;\n line-height: 45px;\n margin: 0 30px 0 0;\n width: 22.5px;\n color: rgba(0, 0, 0, 0.54);\n}\n.sidenav .divider {\n margin: 7.5px 0 0 0;\n}\n.sidenav .subheader {\n cursor: initial;\n pointer-events: none;\n color: rgba(0, 0, 0, 0.54);\n font-size: 14px;\n font-weight: 500;\n line-height: 45px;\n}\n.sidenav .subheader:hover {\n background-color: transparent;\n}\n.sidenav .user-view {\n position: relative;\n padding: 30px 30px 0;\n margin-bottom: 7.5px;\n}\n.sidenav .user-view > a {\n height: auto;\n padding: 0;\n}\n.sidenav .user-view > a:hover {\n background-color: transparent;\n}\n.sidenav .user-view .background {\n overflow: hidden;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n}\n.sidenav .user-view .circle,\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n display: block;\n}\n.sidenav .user-view .circle {\n height: 64px;\n width: 64px;\n}\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n font-size: 14px;\n line-height: 22.5px;\n}\n.sidenav .user-view .name {\n margin-top: 16px;\n font-weight: 500;\n}\n.sidenav .user-view .email {\n padding-bottom: 16px;\n font-weight: 400;\n}\n\n.drag-target {\n height: 100%;\n width: 10px;\n position: fixed;\n top: 0;\n z-index: 998;\n}\n.drag-target.right-aligned {\n right: 0;\n}\n\n.sidenav.sidenav-fixed {\n left: 0;\n transform: translateX(0);\n position: fixed;\n}\n.sidenav.sidenav-fixed.right-aligned {\n right: 0;\n left: auto;\n}\n\n@media only screen and (max-width : 992px) {\n .sidenav.sidenav-fixed {\n transform: translateX(-105%);\n }\n .sidenav.sidenav-fixed.right-aligned {\n transform: translateX(105%);\n }\n .sidenav > a {\n padding: 0 15px;\n }\n .sidenav .user-view {\n padding: 15px 15px 0;\n }\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\n background-color: #90caf9;\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active a,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a {\n color: #fff;\n}\n\n.sidenav .collapsible-body {\n padding: 0;\n}\n\n.sidenav-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n opacity: 0;\n height: 120vh;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 997;\n display: none;\n}\n\n.with-side-nav-open {\n padding-left: 300px;\n transition: padding 1s;\n}\n\n.btn, .btn-small, .btn-large,\n.btn-flat {\n border: none;\n border-radius: 2px;\n display: inline-block;\n height: 36px;\n line-height: 36px;\n padding: 0 16px;\n text-transform: uppercase;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n}\n\n.btn.disabled,\n.btn-floating.disabled,\n.btn-large.disabled,\n.btn-small.disabled,\n.btn-flat.disabled,\n.btn:disabled,\n.btn-floating:disabled,\n.btn-large:disabled,\n.btn-small:disabled,\n.btn-flat:disabled,\n.btn[disabled],\n.btn-floating[disabled],\n.btn-large[disabled],\n.btn-small[disabled],\n.btn-flat[disabled] {\n pointer-events: none;\n background-color: #DFDFDF !important;\n box-shadow: none;\n color: #9F9F9F !important;\n cursor: default;\n}\n.btn.disabled:hover,\n.btn-floating.disabled:hover,\n.btn-large.disabled:hover,\n.btn-small.disabled:hover,\n.btn-flat.disabled:hover,\n.btn:disabled:hover,\n.btn-floating:disabled:hover,\n.btn-large:disabled:hover,\n.btn-small:disabled:hover,\n.btn-flat:disabled:hover,\n.btn[disabled]:hover,\n.btn-floating[disabled]:hover,\n.btn-large[disabled]:hover,\n.btn-small[disabled]:hover,\n.btn-flat[disabled]:hover {\n background-color: #DFDFDF !important;\n color: #9F9F9F !important;\n}\n\n.btn,\n.btn-small,\n.btn-large,\n.btn-floating,\n.btn-flat {\n font-size: 14px;\n outline: 0;\n}\n.btn i,\n.btn-floating i,\n.btn-large i,\n.btn-small i,\n.btn-flat i {\n font-size: 1.3rem;\n line-height: inherit;\n}\n\n.btn:focus, .btn-small:focus, .btn-large:focus,\n.btn-floating:focus {\n background-color: #1b1b1b;\n}\n\n.btn, .btn-small, .btn-large {\n text-decoration: none;\n color: #fff;\n background-color: #343434;\n text-align: center;\n letter-spacing: 0.5px;\n transition: background-color 0.2s ease-out;\n cursor: pointer;\n}\n.btn:hover, .btn-small:hover, .btn-large:hover {\n background-color: #414141;\n}\n\n.btn-floating {\n display: inline-block;\n color: #fff;\n position: relative;\n overflow: hidden;\n z-index: 1;\n width: 40px;\n height: 40px;\n line-height: 40px;\n padding: 0;\n background-color: #26a69a;\n border-radius: 50%;\n transition: background-color 0.3s;\n cursor: pointer;\n vertical-align: middle;\n}\n.btn-floating:hover {\n background-color: #26a69a;\n}\n.btn-floating:before {\n border-radius: 0;\n}\n.btn-floating.btn-large {\n width: 56px;\n height: 56px;\n padding: 0;\n}\n.btn-floating.btn-large.halfway-fab {\n bottom: 28px;\n}\n.btn-floating.btn-large i {\n line-height: 56px;\n}\n.btn-floating.btn-small {\n width: 32.4px;\n height: 32.4px;\n}\n.btn-floating.btn-small.halfway-fab {\n bottom: 16.2px;\n}\n.btn-floating.btn-small i {\n line-height: 32.4px;\n}\n.btn-floating.halfway-fab {\n position: absolute;\n right: 24px;\n bottom: 20px;\n}\n.btn-floating.halfway-fab.left {\n right: auto;\n left: 24px;\n}\n.btn-floating i {\n width: inherit;\n display: inline-block;\n text-align: center;\n color: #fff;\n font-size: 1.6rem;\n line-height: 40px;\n}\n\nbutton.btn-floating {\n border: none;\n}\n\n.fixed-action-btn {\n position: fixed;\n right: 23px;\n bottom: 23px;\n padding-top: 15px;\n margin-bottom: 0;\n z-index: 997;\n}\n.fixed-action-btn.active ul {\n visibility: visible;\n}\n.fixed-action-btn.direction-left, .fixed-action-btn.direction-right {\n padding: 0 0 0 15px;\n}\n.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul {\n text-align: right;\n right: 64px;\n top: 50%;\n transform: translateY(-50%);\n height: 100%;\n left: auto;\n /*width 100% only goes to width of button container */\n width: 500px;\n}\n.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li {\n display: inline-block;\n margin: 7.5px 15px 0 0;\n}\n.fixed-action-btn.direction-right {\n padding: 0 15px 0 0;\n}\n.fixed-action-btn.direction-right ul {\n text-align: left;\n direction: rtl;\n left: 64px;\n right: auto;\n}\n.fixed-action-btn.direction-right ul li {\n margin: 7.5px 0 0 15px;\n}\n.fixed-action-btn.direction-bottom {\n padding: 0 0 15px 0;\n}\n.fixed-action-btn.direction-bottom ul {\n top: 64px;\n bottom: auto;\n display: flex;\n flex-direction: column-reverse;\n}\n.fixed-action-btn.direction-bottom ul li {\n margin: 15px 0 0 0;\n}\n.fixed-action-btn.toolbar {\n padding: 0;\n height: 56px;\n}\n.fixed-action-btn.toolbar.active > a i {\n opacity: 0;\n}\n.fixed-action-btn.toolbar ul {\n display: flex;\n top: 0;\n bottom: 0;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li {\n flex: 1;\n display: inline-block;\n margin: 0;\n height: 100%;\n transition: none;\n}\n.fixed-action-btn.toolbar ul li a {\n display: block;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n background-color: transparent;\n box-shadow: none;\n color: #fff;\n line-height: 56px;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li a i {\n line-height: inherit;\n}\n.fixed-action-btn ul {\n left: 0;\n right: 0;\n text-align: center;\n position: absolute;\n bottom: 64px;\n margin: 0;\n visibility: hidden;\n}\n.fixed-action-btn ul li {\n margin-bottom: 15px;\n}\n.fixed-action-btn ul a.btn-floating {\n opacity: 0;\n}\n.fixed-action-btn .fab-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 40px;\n height: 40px;\n background-color: #26a69a;\n border-radius: 50%;\n transform: scale(0);\n}\n\n.btn-flat {\n box-shadow: none;\n background-color: transparent;\n color: #343434;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n.btn-flat:focus, .btn-flat:hover {\n box-shadow: none;\n}\n.btn-flat:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.btn-flat.disabled, .btn-flat.btn-flat[disabled] {\n background-color: transparent !important;\n color: #b3b3b3 !important;\n cursor: default;\n}\n\n.btn-large {\n height: 54px;\n line-height: 54px;\n font-size: 15px;\n padding: 0 28px;\n}\n.btn-large i {\n font-size: 1.6rem;\n}\n\n.btn-small {\n height: 32.4px;\n line-height: 32.4px;\n font-size: 13px;\n}\n.btn-small i {\n font-size: 1.2rem;\n}\n\n.btn-block {\n display: block;\n}\n\n.communTabHeader, .tabs.activeTab-2 .tab-header-over2 .tab-header, .tabs.activeTab-2 .tab-header-over1 .tab-header, .tabs.activeTab-2 .tab-header-over0 .tab-header, .tabs.activeTab-1 .tab-header-over2 .tab-header, .tabs.activeTab-1 .tab-header-over1 .tab-header, .tabs.activeTab-1 .tab-header-over0 .tab-header, .tabs.activeTab-0 .tab-header-over2 .tab-header, .tabs.activeTab-0 .tab-header-over1 .tab-header, .tabs.activeTab-0 .tab-header-over0 .tab-header {\n height: 100px;\n padding: 40px;\n}\n\n.tabs {\n min-height: calc(100% - 150px);\n margin-top: 30px;\n padding: 0 !important;\n border-radius: 40px !important;\n}\n.tabs .innerpage {\n min-height: 70VH !important;\n}\n.tabs .tabs-header-overlay {\n display: flex;\n height: 100px;\n}\n.tabs.activeTab-0 .tab-header-over0 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over0 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #cbe7fe, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 .tab-header {\n background-color: #80c4fd;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-0 .tab-header-over2 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-1 .tab-header-over0 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-1 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over1 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-2 .tab-header-over0 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #cbe7fe);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over1 .tab-header {\n background-color: #35a2fb;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over2 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-2 .tab-header-over2 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs .tab-content {\n background-color: #cbe7fe;\n padding: 10px;\n border-top: 0;\n min-height: 70vh;\n border-radius: 0 0 40px 40px;\n padding-bottom: 20px;\n}\n\n.loader-overlay {\n z-index: 999;\n position: absolute;\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n background-color: rgba(102, 100, 100, 0.603);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n.loader-overlay .loader {\n border: 7px solid #f3f3f3; /* Light grey */\n border-top: 7px solid #2ea2cc; /* Blue */\n border-radius: 50%;\n width: 70px;\n height: 70px;\n animation: spin 2s linear infinite;\n}\n.loader-overlay .loader-text {\n margin-top: 20px;\n font-size: 25px;\n color: #2ea2cc;\n}\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.card-panel {\n transition: box-shadow 0.25s;\n padding: 24px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border-radius: 2px;\n background-color: #fff;\n}\n\n.card {\n position: relative;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n background-color: #fff;\n transition: box-shadow 0.25s;\n border-radius: 2px;\n}\n.card .card-title {\n font-size: 24px;\n font-weight: 300;\n}\n.card .card-title.activator {\n cursor: pointer;\n}\n.card.small, .card.medium, .card.large {\n position: relative;\n}\n.card.small .card-image, .card.medium .card-image, .card.large .card-image {\n max-height: 60%;\n overflow: hidden;\n}\n.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content {\n max-height: 40%;\n}\n.card.small .card-content, .card.medium .card-content, .card.large .card-content {\n max-height: 100%;\n overflow: hidden;\n}\n.card.small .card-action, .card.medium .card-action, .card.large .card-action {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.card.small {\n height: 300px;\n}\n.card.medium {\n height: 400px;\n}\n.card.large {\n height: 500px;\n}\n.card.horizontal {\n display: flex;\n}\n.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image {\n height: 100%;\n max-height: none;\n overflow: visible;\n}\n.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img {\n height: 100%;\n}\n.card.horizontal .card-image {\n max-width: 50%;\n}\n.card.horizontal .card-image img {\n border-radius: 2px 0 0 2px;\n max-width: 100%;\n width: auto;\n}\n.card.horizontal .card-stacked {\n display: flex;\n flex-direction: column;\n flex: 1;\n position: relative;\n}\n.card.horizontal .card-stacked .card-content {\n flex-grow: 1;\n}\n.card.sticky-action .card-action {\n z-index: 2;\n}\n.card.sticky-action .card-reveal {\n z-index: 1;\n padding-bottom: 64px;\n}\n.card .card-image {\n position: relative;\n}\n.card .card-image img {\n display: block;\n border-radius: 2px 2px 0 0;\n position: relative;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n}\n.card .card-image .card-title {\n color: #fff;\n position: absolute;\n bottom: 0;\n left: 0;\n max-width: 100%;\n padding: 24px;\n}\n.card .card-content {\n padding: 24px;\n border-radius: 0 0 2px 2px;\n}\n.card .card-content p {\n margin: 0;\n}\n.card .card-content .card-title {\n display: block;\n line-height: 32px;\n margin-bottom: 8px;\n}\n.card .card-content .card-title i {\n line-height: 32px;\n}\n.card .card-action {\n background-color: inherit;\n border-top: 1px solid rgba(160, 160, 160, 0.2);\n position: relative;\n padding: 16px 24px;\n}\n.card .card-action:last-child {\n border-radius: 0 0 2px 2px;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) {\n color: #ffab40;\n margin-right: 24px;\n transition: color 0.3s ease;\n text-transform: uppercase;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover {\n color: #ffd8a6;\n}\n.card .card-reveal {\n padding: 24px;\n position: absolute;\n background-color: #fff;\n width: 100%;\n overflow-y: auto;\n left: 0;\n top: 100%;\n height: 100%;\n z-index: 3;\n display: none;\n}\n.card .card-reveal .card-title {\n cursor: pointer;\n display: block;\n}\n\n/*\n @license\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**************************/\n/* STYLES FOR THE SPINNER */\n/**************************/\n/*\n * Constants:\n * STROKEWIDTH = 3px\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\n * should rotate each time, 216 gives us a\n * 5 pointed star shape (it's 360/5 * 3).\n * For a 7 pointed star, we might do\n * 360/7 * 3 = 154.286)\n * CONTAINERWIDTH = 28px\n * SHRINK_TIME = 400ms\n */\n.preloader-wrapper {\n display: inline-block;\n position: relative;\n width: 50px;\n height: 50px;\n}\n.preloader-wrapper.small {\n width: 36px;\n height: 36px;\n}\n.preloader-wrapper.big {\n width: 64px;\n height: 64px;\n}\n.preloader-wrapper.active {\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\n -webkit-animation: container-rotate 1568ms linear infinite;\n animation: container-rotate 1568ms linear infinite;\n}\n\n@-webkit-keyframes container-rotate {\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes container-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n.spinner-layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0;\n border-color: #26a69a;\n}\n\n.spinner-blue,\n.spinner-blue-only {\n border-color: #4285f4;\n}\n\n.spinner-red,\n.spinner-red-only {\n border-color: #db4437;\n}\n\n.spinner-yellow,\n.spinner-yellow-only {\n border-color: #f4b400;\n}\n\n.spinner-green,\n.spinner-green-only {\n border-color: #0f9d58;\n}\n\n/**\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\n *\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\n * animation-delay and instead set custom keyframes for each color (as redundant as it\n * seems).\n *\n * We write out each animation in full (instead of separating animation-name,\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\n * specific properties properly, treats them as -webkit-animation, and overrides the\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\n */\n.active .spinner-layer.spinner-blue {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-red {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-yellow {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-green {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer,\n.active .spinner-layer.spinner-blue-only,\n.active .spinner-layer.spinner-red-only,\n.active .spinner-layer.spinner-yellow-only,\n.active .spinner-layer.spinner-green-only {\n /* durations: 4 * ARCTIME */\n opacity: 1;\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes fill-unfill-rotate {\n 12.5% {\n -webkit-transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n -webkit-transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n -webkit-transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n -webkit-transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n -webkit-transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n -webkit-transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n -webkit-transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n -webkit-transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@keyframes fill-unfill-rotate {\n 12.5% {\n transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@-webkit-keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@-webkit-keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@-webkit-keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n/**\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\n */\n.gap-patch {\n position: absolute;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n\n.gap-patch .circle {\n width: 1000%;\n left: -450%;\n}\n\n.circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n.circle-clipper .circle {\n width: 200%;\n height: 100%;\n border-width: 3px; /* STROKEWIDTH */\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n -webkit-animation: none;\n animation: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n}\n.circle-clipper.left .circle {\n left: 0;\n border-right-color: transparent !important;\n -webkit-transform: rotate(129deg);\n transform: rotate(129deg);\n}\n.circle-clipper.right .circle {\n left: -100%;\n border-left-color: transparent !important;\n -webkit-transform: rotate(-129deg);\n transform: rotate(-129deg);\n}\n\n.active .circle-clipper.left .circle {\n /* duration: ARCTIME */\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .circle-clipper.right .circle {\n /* duration: ARCTIME */\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes left-spin {\n from {\n -webkit-transform: rotate(130deg);\n }\n 50% {\n -webkit-transform: rotate(-5deg);\n }\n to {\n -webkit-transform: rotate(130deg);\n }\n}\n@keyframes left-spin {\n from {\n transform: rotate(130deg);\n }\n 50% {\n transform: rotate(-5deg);\n }\n to {\n transform: rotate(130deg);\n }\n}\n@-webkit-keyframes right-spin {\n from {\n -webkit-transform: rotate(-130deg);\n }\n 50% {\n -webkit-transform: rotate(5deg);\n }\n to {\n -webkit-transform: rotate(-130deg);\n }\n}\n@keyframes right-spin {\n from {\n transform: rotate(-130deg);\n }\n 50% {\n transform: rotate(5deg);\n }\n to {\n transform: rotate(-130deg);\n }\n}\n#spinnerContainer.cooldown {\n /* duration: SHRINK_TIME */\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@-webkit-keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n.progress {\n position: relative;\n height: 4px;\n display: block;\n width: 100%;\n background-color: #acece6;\n border-radius: 2px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n overflow: hidden;\n}\n.progress .determinate {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n background-color: #26a69a;\n transition: width 0.3s linear;\n}\n.progress .indeterminate {\n background-color: #26a69a;\n}\n.progress .indeterminate:before {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n}\n.progress .indeterminate:after {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;\n animation-delay: 1.15s;\n}\n\n@keyframes indeterminate {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n@keyframes indeterminate-short {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n.flash-message {\n position: absolute;\n padding: 2px 10px;\n border-radius: 5px;\n z-index: 99999;\n right: 0;\n bottom: 0;\n font-size: 14px;\n}\n.flash-message.info {\n background-color: #beddbe;\n border: 1px solid #728f72;\n}\n.flash-message.warn {\n background-color: #f5e6d0;\n border: 1px solid #ea7d17;\n}\n.flash-message.error {\n background-color: #e5b2bc;\n border: 1px solid #e33257;\n}\n\n@keyframes messageIn {\n from {\n right: 80%;\n }\n to {\n right: 0;\n }\n}\n.pulse {\n overflow: visible;\n position: relative;\n}\n.pulse::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: inherit;\n border-radius: inherit;\n transition: opacity 0.3s, transform 0.3s;\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\n}\n\n@keyframes pulse-animation {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0;\n transform: scale(1.5);\n }\n 100% {\n opacity: 0;\n transform: scale(1.5);\n }\n}\n.dropdown-content {\n background-color: #fff;\n margin: 0;\n display: flow;\n min-width: 100px;\n overflow-y: auto;\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9999;\n transform-origin: 0 0;\n}\n.dropdown-content:focus {\n outline: 0;\n}\n.dropdown-content li {\n clear: both;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n min-height: 50px;\n line-height: 1.5rem;\n width: 100%;\n text-align: left;\n}\n.dropdown-content li:hover, .dropdown-content li.active {\n background-color: #eee;\n}\n.dropdown-content li:focus {\n outline: none;\n}\n.dropdown-content li.divider {\n min-height: 0;\n height: 1px;\n}\n.dropdown-content li > a, .dropdown-content li > span {\n font-size: 16px;\n color: #26a69a;\n display: block;\n line-height: 22px;\n padding: 14px 16px;\n}\n.dropdown-content li > span > label {\n top: 1px;\n left: 0;\n height: 18px;\n}\n.dropdown-content li > a > i {\n height: inherit;\n line-height: inherit;\n float: left;\n margin: 0 24px 0 0;\n width: 24px;\n}\n\nbody.keyboard-focused .dropdown-content li:focus {\n background-color: #dadada;\n}\n\n.input-field.col .dropdown-content [type=checkbox] + label {\n top: 1px;\n left: 0;\n height: 18px;\n transform: none;\n}\n\n.dropdown-trigger {\n cursor: pointer;\n}\n\nnav {\n color: #fff;\n background-color: #90caf9;\n width: 100%;\n height: 56px;\n line-height: 56px;\n}\nnav.nav-extended {\n height: auto;\n}\nnav.nav-extended .nav-wrapper {\n display: flex;\n align-items: center;\n min-height: 56px;\n height: auto;\n}\nnav.nav-extended .nav-content {\n position: relative;\n line-height: normal;\n}\nnav a {\n color: #fff;\n}\nnav i,\nnav [class^=mdi-], nav [class*=mdi-],\nnav i.s-icons {\n display: block;\n font-size: 24px;\n height: 56px;\n line-height: 56px;\n}\nnav .nav-wrapper {\n position: relative;\n height: 100%;\n}\n@media only screen and (min-width : 993px) {\n nav a.sidenav-trigger {\n display: none;\n }\n}\nnav .sidenav-trigger {\n float: left;\n position: relative;\n z-index: 1;\n height: 56px;\n margin: 0 18px;\n}\nnav .sidenav-trigger i {\n height: 56px;\n line-height: 56px;\n}\nnav .brand-logo {\n position: absolute;\n color: #fff;\n display: inline-block;\n font-size: 2.1rem;\n padding: 0;\n}\nnav .brand-logo img.circle {\n height: 32px;\n width: 32px;\n}\nnav .brand-logo.center {\n left: 50%;\n transform: translateX(-50%);\n}\n@media only screen and (max-width : 992px) {\n nav .brand-logo {\n left: 50%;\n transform: translateX(-50%);\n }\n nav .brand-logo.left, nav .brand-logo.right {\n padding: 0;\n transform: none;\n }\n nav .brand-logo.left {\n left: 0.5rem;\n }\n nav .brand-logo.right {\n right: 0.5rem;\n left: auto;\n }\n}\nnav .brand-logo.right {\n right: 0.5rem;\n padding: 0;\n}\nnav .brand-logo i,\nnav .brand-logo [class^=mdi-], nav .brand-logo [class*=mdi-],\nnav .brand-logo i.s-icons {\n float: left;\n margin-right: 15px;\n}\nnav .nav-title {\n display: inline-block;\n font-size: 32px;\n padding: 28px 0;\n}\nnav ul {\n margin: 0;\n}\nnav ul li {\n transition: background-color 0.3s;\n float: left;\n padding: 0;\n}\nnav ul li.active {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul a {\n transition: background-color 0.3s;\n font-size: 1rem;\n color: #fff;\n display: block;\n padding: 0 15px;\n cursor: pointer;\n}\nnav ul a.btn, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating {\n margin-top: -2px;\n margin-left: 15px;\n margin-right: 15px;\n}\nnav ul a.btn > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons {\n height: inherit;\n line-height: inherit;\n}\nnav ul a:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul.left {\n float: left;\n}\nnav form {\n height: 100%;\n}\nnav .input-field {\n margin: 0;\n height: 100%;\n}\nnav .input-field input {\n height: 100%;\n font-size: 1.2rem;\n border: none;\n padding-left: 2rem;\n}\nnav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {\n border: none;\n box-shadow: none;\n}\nnav .input-field label {\n top: 0;\n left: 0;\n}\nnav .input-field label i {\n color: rgba(255, 255, 255, 0.7);\n transition: color 0.3s;\n}\nnav .input-field label.active i {\n color: #fff;\n}\n\n.navbar-fixed {\n position: relative;\n height: 56px;\n z-index: 997;\n}\n.navbar-fixed nav {\n position: fixed;\n}\n\n@media only screen and (min-width : 601px) {\n nav.nav-extended .nav-wrapper {\n min-height: 64px;\n }\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\n height: 64px;\n line-height: 64px;\n }\n .navbar-fixed {\n height: 64px;\n }\n}","@font-face {\r\n font-family: sweeticons;\r\n font-style: normal;\r\n font-weight: 400;\r\n src: url(\"./icons/assets/SweetIcons-Regular.eot\");\r\n src: url(\"./icons/assets/SweetIcons-Regular.woff2\") format(\"woff2\"),\r\n url(\"./icons/assets/SweetIcons-Regular.woff\") format(\"woff\"),\r\n url(\"./icons/assets/SweetIcons-Regular.ttf\") format(\"truetype\");\r\n}\r\n\r\n\r\n\r\n\r\n.s-icon,\r\n.s-icons,\r\n.sweet-icons,\r\n.sweet-icon {\r\n font-family: sweeticons, sans-serif;\r\n font-weight: normal;\r\n font-style: normal;\r\n font-size: 28px;\r\n line-height: 1;\r\n letter-spacing: normal;\r\n text-transform: none;\r\n display: inline-block;\r\n white-space: nowrap;\r\n word-wrap: normal;\r\n direction: ltr;\r\n -webkit-font-smoothing: antialiased;\r\n text-rendering: optimizeLegibility;\r\n -moz-osx-font-smoothing: grayscale;\r\n -webkit-font-feature-settings: \"liga\";\r\n -moz-font-feature-settings: \"liga=1\";\r\n -moz-font-feature-settings: \"liga\";\r\n font-feature-settings: \"liga\";\r\n text-align: center;\r\n}\r\n","@import \"./colorsVars\";\r\n\r\n@each $color_name, $color in $colors {\r\n @each $color_type, $color_value in $color {\r\n @if $color_type == \"base\" {\r\n .#{$color_name} {\r\n background-color: $color_value !important;\r\n }\r\n .#{$color_name}-text {\r\n color: $color_value !important;\r\n }\r\n .#{$color_name}-waves .waves-ripple {\r\n background-color: $color_value !important;\r\n }\r\n } @else {\r\n .#{$color_name}.#{$color_type} {\r\n background-color: $color_value !important;\r\n }\r\n .#{$color_name}-text.text-#{$color_type} {\r\n color: $color_value !important;\r\n }\r\n .#{$color_name}-waves.waves-#{$color_type} .waves-ripple {\r\n background-color: $color_value !important;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ShadeVars classes\r\n$shades: (\r\n \"black\": #000000,\r\n \"white\": #ffffff,\r\n \"transparent\": transparent\r\n);\r\n// Shade classes\r\n@each $color, $color_value in $shades {\r\n .#{$color} {\r\n background-color: $color_value !important;\r\n }\r\n .#{$color}-text {\r\n color: $color_value !important;\r\n }\r\n}\r\n\r\n\r\n\r\n// usage: color(\"name_of_color\", \"type_of_color\")\r\n// to avoid to repeating map-get($colors, ...)\r\n\r\n@function color($color, $type) {\r\n @if map-has-key($colors, $color) {\r\n $curr_color: map-get($colors, $color);\r\n @if map-has-key($curr_color, $type) {\r\n @return map-get($curr_color, $type);\r\n }\r\n }\r\n @warn \"Unknown `#{$color}` - `#{$type}` in $colors.\";\r\n @return null;\r\n}\r\n","/**\r\n * prism.js Twilight theme\r\n * Based (more or less) on the Twilight theme originally of Textmate fame.\r\n * @author Remy Bach\r\n */\r\n code[class*=\"language-\"],\r\n pre[class*=\"language-\"] {\r\n\t color: white;\r\n\t background: none;\r\n\t font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\r\n\t text-align: left;\r\n\t text-shadow: 0 -.1em .2em black;\r\n\t white-space: pre;\r\n\t word-spacing: normal;\r\n\t word-break: normal;\r\n\t word-wrap: normal;\r\n\t line-height: 1.5;\r\n \r\n\t -moz-tab-size: 4;\r\n\t -o-tab-size: 4;\r\n\t tab-size: 4;\r\n \r\n\t -webkit-hyphens: none;\r\n\t -moz-hyphens: none;\r\n\t -ms-hyphens: none;\r\n\t hyphens: none;\r\n }\r\n \r\n pre[class*=\"language-\"],\r\n :not(pre) > code[class*=\"language-\"] {\r\n\t background: hsl(0, 0%, 8%); /* #141414 */\r\n }\r\n \r\n /* Code blocks */\r\n pre[class*=\"language-\"] {\r\n\t border-radius: .5em;\r\n\t border: .3em solid hsl(0, 0%, 33%); /* #282A2B */\r\n\t box-shadow: 1px 1px .5em black inset;\r\n\t margin: .5em 0;\r\n\t overflow: auto;\r\n\t padding: 1em;\r\n }\r\n \r\n pre[class*=\"language-\"]::-moz-selection {\r\n\t /* Firefox */\r\n\t background: hsl(200, 4%, 16%); /* #282A2B */\r\n }\r\n \r\n pre[class*=\"language-\"]::selection {\r\n\t /* Safari */\r\n\t background: hsl(200, 4%, 16%); /* #282A2B */\r\n }\r\n \r\n /* Text Selection colour */\r\n pre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\r\n code[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\r\n\t text-shadow: none;\r\n\t background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\r\n }\r\n \r\n pre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\r\n code[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\r\n\t text-shadow: none;\r\n\t background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\r\n }\r\n \r\n /* Inline code */\r\n :not(pre) > code[class*=\"language-\"] {\r\n\t border-radius: .3em;\r\n\t border: .13em solid hsl(0, 0%, 33%); /* #545454 */\r\n\t box-shadow: 1px 1px .3em -.1em black inset;\r\n\t padding: .15em .2em .05em;\r\n\t white-space: normal;\r\n }\r\n \r\n .token.comment,\r\n .token.prolog,\r\n .token.doctype,\r\n .token.cdata {\r\n\t color: hsl(0, 0%, 47%); /* #777777 */\r\n }\r\n \r\n .token.punctuation {\r\n\t opacity: .7;\r\n }\r\n \r\n .namespace {\r\n\t opacity: .7;\r\n }\r\n \r\n .token.tag,\r\n .token.boolean,\r\n .token.number,\r\n .token.deleted {\r\n\t color: hsl(14, 58%, 55%); /* #CF6A4C */\r\n }\r\n \r\n .token.keyword,\r\n .token.property,\r\n .token.selector,\r\n .token.constant,\r\n .token.symbol,\r\n .token.builtin {\r\n\t color: hsl(53, 89%, 79%); /* #F9EE98 */\r\n }\r\n \r\n .token.attr-name,\r\n .token.attr-value,\r\n .token.string,\r\n .token.char,\r\n .token.operator,\r\n .token.entity,\r\n .token.url,\r\n .language-css .token.string,\r\n .style .token.string,\r\n .token.variable,\r\n .token.inserted {\r\n\t color: hsl(76, 21%, 52%); /* #8F9D6A */\r\n }\r\n \r\n .token.atrule {\r\n\t color: hsl(218, 22%, 55%); /* #7587A6 */\r\n }\r\n \r\n .token.regex,\r\n .token.important {\r\n\t color: hsl(42, 75%, 65%); /* #E9C062 */\r\n }\r\n \r\n .token.important,\r\n .token.bold {\r\n\t font-weight: bold;\r\n }\r\n .token.italic {\r\n\t font-style: italic;\r\n }\r\n \r\n .token.entity {\r\n\t cursor: help;\r\n }\r\n \r\n pre[data-line] {\r\n\t padding: 1em 0 1em 3em;\r\n\t position: relative;\r\n }\r\n \r\n /* Markup */\r\n .language-markup .token.tag,\r\n .language-markup .token.attr-name,\r\n .language-markup .token.punctuation {\r\n\t color: hsl(33, 33%, 52%); /* #AC885B */\r\n }\r\n \r\n /* Make the tokens sit above the line highlight so the colours don't look faded. */\r\n .token {\r\n\t position: relative;\r\n\t z-index: 1;\r\n }\r\n \r\n .line-highlight {\r\n\t background: hsla(0, 0%, 33%, 0.25); /* #545454 */\r\n\t background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */\r\n\t border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */\r\n\t border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */\r\n\t left: 0;\r\n\t line-height: inherit;\r\n\t margin-top: 0.75em; /* Same as .prism’s padding-top */\r\n\t padding: inherit 0;\r\n\t pointer-events: none;\r\n\t position: absolute;\r\n\t right: 0;\r\n\t white-space: pre;\r\n\t z-index: 0;\r\n }\r\n \r\n .line-highlight:before,\r\n .line-highlight[data-end]:after {\r\n\t background-color: hsl(215, 15%, 59%); /* #8794A6 */\r\n\t border-radius: 999px;\r\n\t box-shadow: 0 1px white;\r\n\t color: hsl(24, 20%, 95%); /* #F5F2F0 */\r\n\t content: attr(data-start);\r\n\t font: bold 65%/1.5 sans-serif;\r\n\t left: .6em;\r\n\t min-width: 1em;\r\n\t padding: 0 .5em;\r\n\t position: absolute;\r\n\t text-align: center;\r\n\t text-shadow: none;\r\n\t top: .4em;\r\n\t vertical-align: .3em;\r\n }\r\n \r\n .line-highlight[data-end]:after {\r\n\t bottom: .4em;\r\n\t content: attr(data-end);\r\n\t top: auto;\r\n }\r\n ","@import 'https://fonts.googleapis.com/css?family=Ubuntu';\r\n\r\n\r\n\r\n.window {\r\n font-family: 'Ubuntu', sans-serif; \r\n font-size : 17px ;\r\n width : 600px ; \r\n margin : 75px auto ; \r\n background : #2c3e50; \r\n height : 350px ; \r\n border-radius : 5px ;\r\n display : relative ; \r\n box-shadow: 10px 10px 10px #888888;\r\n}\r\n\r\n.afterclose {\r\n color : #34495e ; \r\n display: none ; \r\n text-align: center ; \r\n}\r\n\r\n.open {\r\n color : #fff ; \r\n padding : 15px ; \r\n background: #2ecc71 ; \r\n border-radius: 4px ; \r\n border: none ; \r\n}\r\n\r\n.bash {\r\n width : 600px ; \r\n background : #34495e; \r\n height : 310px ; \r\n border-radius : 5px ;\r\n top: 40px;\r\n display : absolute; \r\n color : #fff ;\r\n text-align: left;\r\n .command{\r\n &::before{\r\n content: \"user@machine $ : \";\r\n color: #2ecc71;\r\n }\r\n\r\n }\r\n .resulta{\r\n &::before{\r\n content: \">>\";\r\n color: #2ecc71;\r\n }\r\n\r\n }\r\n}\r\n\r\n/* effected by controllers */\r\n\r\n.windowmax {\r\n width : 100% ; \r\n margin : auto ; \r\n background : #2c3e50; \r\n height : 1000px; \r\n border-radius : 5px ;\r\n display : relative ; \r\n}\r\n\r\n.windowmin {\r\n width : 300px ; \r\n height : 45px ;\r\n background : #2c3e50; \r\n border-radius : 5px ; \r\n bottom : 0 ; \r\n position: fixed;\r\n}\r\n\r\n.bashmax {\r\n display : absolute ; \r\n width : 100% ; \r\n background : #34495e; \r\n height : 960px ; \r\n border-radius : 5px ;\r\n bottom: 0;\r\n color : #fff ;\r\n}\r\n\r\n/* !--end--! */\r\n\r\n.buttons {\r\n width : 15px ;\r\n height : 15px ; \r\n border-radius : 50% ;\r\n float : right ; \r\n margin : 13px 4px;\r\n border: none ; \r\n}\r\n\r\n.close {\r\n background : #e74c3c ;\r\n}\r\n\r\n.maximize{\r\n background : #f1c40f ;\r\n}\r\n\r\n.minimize{\r\n background : #2ecc71 ;\r\n}\r\n\r\n.result {\r\n display : none ;\r\n}\r\n\r\n.controls {\r\n height : 40px ; \r\n top : 0 ; \r\n}\r\n\r\n.title {\r\n color : #fff ; \r\n font-weight: bold ; \r\n padding : 10px;\r\n}\r\n",".material-tooltip {\r\n padding: 10px 8px;\r\n font-size: 1rem;\r\n z-index: 2000;\r\n border-radius: 2px;\r\n color: #fff;\r\n min-height: 36px;\r\n line-height: 120%;\r\n opacity: 0;\r\n position: absolute;\r\n text-align: center;\r\n max-width: calc(100% - 4px);\r\n overflow: hidden;\r\n left: 0;\r\n top: 0;\r\n pointer-events: none;\r\n visibility: hidden;\r\n background-color: #323232;\r\n}\r\n\r\n.backdrop {\r\n position: absolute;\r\n opacity: 0;\r\n height: 7px;\r\n width: 14px;\r\n border-radius: 0 0 50% 50%;\r\n background-color: #323232;\r\n z-index: -1;\r\n transform-origin: 50% 0%;\r\n visibility: hidden;\r\n}\r\n","// Z-levels\r\n.shadow-0 {\r\n box-shadow: none !important;\r\n}\r\n\r\n/* 2dp elevation modified*/\r\n.shadow-1 {\r\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\r\n 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\r\n}\r\n.shadow-1-half {\r\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12),\r\n 0 3px 1px -1px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* 6dp elevation modified*/\r\n.shadow-2 {\r\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12),\r\n 0 2px 4px -1px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n/* 12dp elevation modified*/\r\n.shadow-3 {\r\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14),\r\n 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* 16dp elevation */\r\n.shadow-4 {\r\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),\r\n 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* 24dp elevation */\r\n.shadow-5 {\r\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14),\r\n 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* 24dp elevation */\r\n.invert-shadow-5 {\r\n box-shadow: \r\n 38px 0 0 0 rgba(0, 0, 0, 0.14),\r\n 46px 0 0 0 rgba(0, 0, 0, 0.12), \r\n 15px 0 0 0 rgba(0, 0, 0, 0.2);\r\n }\r\n\r\n.hoverable {\r\n transition: box-shadow 0.25s;\r\n\r\n &:hover {\r\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),\r\n 0 6px 20px 0 rgba(0, 0, 0, 0.19);\r\n }\r\n}\r\n","\r\n/*!\r\n * Waves v0.6.0\r\n * http://fian.my.id/Waves\r\n *\r\n * Copyright 2014 Alfiana E. Sibuea and other contributors\r\n * Released under the MIT license\r\n * https://github.com/fians/Waves/blob/master/LICENSE\r\n */\r\n\r\n\r\n.waves-effect {\r\n position: relative;\r\n cursor: pointer;\r\n display: inline-block;\r\n overflow: hidden;\r\n user-select: none;\r\n -webkit-tap-highlight-color: transparent;\r\n vertical-align: middle;\r\n z-index: 1;\r\n transition: .3s ease-out;\r\n\r\n .waves-ripple {\r\n position: absolute;\r\n border-radius: 50%;\r\n width: 20px;\r\n height: 20px;\r\n margin-top:-10px;\r\n margin-left:-10px;\r\n opacity: 0;\r\n\r\n background: rgba(0,0,0,0.2);\r\n transition: all 0.7s ease-out;\r\n transition-property: transform, opacity;\r\n transform: scale(0);\r\n pointer-events: none;\r\n }\r\n\r\n // Waves Colors\r\n &.waves-light .waves-ripple {\r\n background-color: rgba(255, 255, 255, 0.45);\r\n }\r\n &.waves-red .waves-ripple {\r\n background-color: rgba(244, 67, 54, .70);\r\n }\r\n &.waves-yellow .waves-ripple {\r\n background-color: rgba(255, 235, 59, .70);\r\n }\r\n &.waves-orange .waves-ripple {\r\n background-color: rgba(255, 152, 0, .70);\r\n }\r\n &.waves-purple .waves-ripple {\r\n background-color: rgba(156, 39, 176, 0.70);\r\n }\r\n &.waves-green .waves-ripple {\r\n background-color: rgba(76, 175, 80, 0.70);\r\n }\r\n &.waves-teal .waves-ripple {\r\n background-color: rgba(0, 150, 136, 0.70);\r\n }\r\n\r\n // Style input button bug.\r\n input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] {\r\n border: 0;\r\n font-style: normal;\r\n font-size: inherit;\r\n text-transform: inherit;\r\n background: none;\r\n }\r\n\r\n img {\r\n position: relative;\r\n z-index: -1;\r\n }\r\n}\r\n\r\n.waves-notransition {\r\n transition: none #{\"!important\"};\r\n}\r\n\r\n.waves-circle {\r\n transform: translateZ(0);\r\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\r\n}\r\n\r\n.waves-input-wrapper {\r\n border-radius: 0.2em;\r\n vertical-align: bottom;\r\n\r\n .waves-button-input {\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n z-index: 1;\r\n }\r\n}\r\n\r\n.waves-circle {\r\n text-align: center;\r\n width: 2.5em;\r\n height: 2.5em;\r\n line-height: 2.5em;\r\n border-radius: 50%;\r\n -webkit-mask-image: none;\r\n}\r\n\r\n.waves-block {\r\n display: block;\r\n}\r\n\r\n/* Firefox Bug: link not triggered */\r\n.waves-effect .waves-ripple {\r\n z-index: -1;\r\n}",".modal {\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n @extend .shadow-5;\r\n\r\n //display: none;\r\n position: fixed;\r\n left: 0;\r\n right: 0;\r\n background-color: #fafafa;\r\n padding: 0;\r\n max-height: 70%;\r\n width: 55%;\r\n margin: auto;\r\n overflow-y: auto;\r\n\r\n border-radius: 2px;\r\n will-change: top, opacity;\r\n\r\n @media #{$medium-and-down} {\r\n width: 80%;\r\n }\r\n\r\n h1,h2,h3,h4 {\r\n margin-top: 0;\r\n }\r\n\r\n .modal-content {\r\n padding: 24px;\r\n }\r\n .modal-close {\r\n cursor: pointer;\r\n }\r\n\r\n .modal-footer {\r\n border-radius: 0 0 2px 2px;\r\n background-color: #fafafa;\r\n padding: 4px 6px;\r\n height: 56px;\r\n width: 100%;\r\n text-align: right;\r\n\r\n .btn, .btn-flat {\r\n margin: 6px 0;\r\n }\r\n }\r\n .modal-header {\r\n border-radius: 2px 2px 0 0 ;\r\n background-color: #fafafa;\r\n padding: 6px 4px;\r\n height: 56px;\r\n width: 100%;\r\n text-align: right;\r\n\r\n .btn, .btn-flat {\r\n margin: 6px 0;\r\n }\r\n }\r\n}\r\n.modal-overlay {\r\n position: fixed;\r\n z-index: 999;\r\n top: -25%;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n height: 125%;\r\n width: 100%;\r\n background: #000;\r\n display: none;\r\n\r\n will-change: opacity;\r\n}\r\n\r\n// Modal with fixed action footer\r\n.modal.modal-fixed-footer {\r\n padding: 0;\r\n height: 70%;\r\n\r\n .modal-content {\r\n position: absolute;\r\n height: calc(100% - 56px);\r\n max-height: 100%;\r\n width: 100%;\r\n overflow-y: auto;\r\n }\r\n\r\n .modal-footer {\r\n border-top: 1px solid rgba(0,0,0,.1);\r\n position: absolute;\r\n bottom: 0;\r\n }\r\n}\r\n\r\n// Modal Bottom Sheet Style\r\n.modal.bottom-sheet {\r\n top: auto;\r\n bottom: -100%;\r\n margin: 0;\r\n width: 100%;\r\n max-height: 45%;\r\n border-radius: 0;\r\n will-change: bottom, opacity;\r\n}\r\n","html,\r\nbody,\r\n#root {\r\n margin: 0;\r\n height: 100%;\r\n}\r\n\r\n\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n.noselect {\r\n -webkit-touch-callout: none; /* iOS Safari */\r\n -webkit-user-select: none; /* Safari */\r\n -khtml-user-select: none; /* Konqueror HTML */\r\n -moz-user-select: none; /* Old versions of Firefox */\r\n -ms-user-select: none; /* Internet Explorer/Edge */\r\n user-select: none;\r\n /* Non-prefixed version, currently\r\n supported by Chrome, Edge, Opera and Firefox */\r\n}\r\n\r\nul {\r\n &:not(.browser-default) {\r\n padding-left: 0;\r\n list-style-type: none;\r\n\r\n & > li {\r\n list-style-type: none;\r\n }\r\n }\r\n}\r\n\r\na {\r\n\tcolor: $link-color;\r\n\ttext-decoration: none;\r\n\r\n // Gets rid of tap active state\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.w-100 {\r\n width: 100%;\r\n}\r\n\r\n.right-align {\r\n text-align: right;\r\n}\r\n.center-align{\r\n text-align: center;\r\n}\r\n\r\n.v-center {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n\r\n.mb1 {\r\n margin-bottom: 10px;\r\n}\r\n\r\n\r\n// Collections\r\n.collection {\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n border: 1px solid $collection-border-color;\r\n border-radius: 2px;\r\n overflow: hidden;\r\n position: relative;\r\n .collection-item {\r\n background-color: $collection-bg-color;\r\n line-height: $collection-line-height;\r\n padding: 10px 20px;\r\n margin: 0;\r\n border-bottom: 1px solid $collection-border-color;\r\n\r\n &.hover {\r\n &:hover {\r\n background-color: $collection-hover-bg-color;\r\n }\r\n }\r\n\r\n // Avatar Collection\r\n &.avatar {\r\n min-height: 84px;\r\n padding-left: 72px;\r\n position: relative;\r\n\r\n\r\n // Don't style circles inside preloader classes.\r\n &:not(.circle-clipper) > .circle,\r\n :not(.circle-clipper) > .circle {\r\n position: absolute;\r\n width: 42px;\r\n height: 42px;\r\n overflow: hidden;\r\n left: 15px;\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n\r\n i.circle {\r\n font-size: 18px;\r\n line-height: 42px;\r\n color: #fff;\r\n background-color: #999;\r\n text-align: center;\r\n }\r\n\r\n\r\n .title {\r\n font-size: 16px;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n }\r\n\r\n .secondary-content {\r\n position: absolute;\r\n top: 16px;\r\n right: 16px;\r\n }\r\n\r\n }\r\n\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n &.active {\r\n background-color: $collection-active-bg-color;\r\n color: $collection-active-color;\r\n\r\n .secondary-content {\r\n color: #fff;\r\n }\r\n }\r\n }\r\n\r\n a.collection-item {\r\n display: block;\r\n transition: .25s;\r\n color: $collection-link-color;\r\n\r\n &:not(.active) {\r\n &:hover {\r\n background-color: $collection-hover-bg-color;\r\n }\r\n }\r\n }\r\n\r\n &.with-header {\r\n .collection-header {\r\n background-color: $collection-bg-color;\r\n border-bottom: 1px solid $collection-border-color;\r\n padding: 10px 20px;\r\n }\r\n\r\n .collection-item {\r\n padding-left: 30px;\r\n }\r\n\r\n .collection-item.avatar {\r\n padding-left: 72px;\r\n }\r\n }\r\n\r\n}\r\n\r\n// Made less specific to allow easier overriding\r\n.secondary-content {\r\n float: right;\r\n color: $secondary-color;\r\n}\r\n\r\n.collapsible .collection {\r\n margin: 0;\r\n border: none;\r\n}\r\n\r\n\r\n.modal-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n height: 100vh;\r\n width: 100vw;\r\n padding: 20px 0 20px 0;\r\n background-color: rgba(0, 0, 0, .5);\r\n z-index: 999;\r\n display: flex;\r\n justify-content: center;\r\n //align-items: center;\r\n .innerform{\r\n max-width: 650px;\r\n form{\r\n overflow: hidden;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/*********************\r\n Media Query Classes\r\n**********************/\r\n.hide-on-small-only, .hide-on-small-and-down {\r\n @media #{$small-and-down} {\r\n display: none !important;\r\n }\r\n}\r\n.hide-on-med-and-down {\r\n @media #{$medium-and-down} {\r\n display: none !important;\r\n }\r\n}\r\n.hide-on-med-and-up {\r\n @media #{$medium-and-up} {\r\n display: none !important;\r\n }\r\n}\r\n.hide-on-med-only {\r\n @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {\r\n display: none !important;\r\n }\r\n}\r\n.hide-on-large-only {\r\n @media #{$large-and-up} {\r\n display: none !important;\r\n }\r\n}\r\n.hide-on-extra-large-only {\r\n @media #{$extra-large-and-up} {\r\n display: none !important;\r\n }\r\n}\r\n.show-on-extra-large {\r\n @media #{$extra-large-and-up} {\r\n display: block !important;\r\n }\r\n}\r\n.show-on-large {\r\n @media #{$large-and-up} {\r\n display: block !important;\r\n }\r\n}\r\n.show-on-medium {\r\n @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {\r\n display: block !important;\r\n }\r\n}\r\n.show-on-small {\r\n @media #{$small-and-down} {\r\n display: block !important;\r\n }\r\n}\r\n.show-on-medium-and-up {\r\n @media #{$medium-and-up} {\r\n display: block !important;\r\n }\r\n}\r\n.show-on-medium-and-down {\r\n @media #{$medium-and-down} {\r\n display: block !important;\r\n }\r\n}\r\n\r\n\r\n// Center text on mobile\r\n.center-on-small-only {\r\n @media #{$small-and-down} {\r\n text-align: center;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/*******************\r\n Utility Classes\r\n*******************/\r\n\r\n.hide {\r\n display: none !important;\r\n}\r\n\r\n// Text Align\r\n.left-align {\r\n text-align: left;\r\n}\r\n.right-align {\r\n text-align: right\r\n}\r\n.center, .center-align {\r\n text-align: center;\r\n}\r\n\r\n.left {\r\n float: left !important;\r\n}\r\n.right {\r\n float: right !important;\r\n}\r\n\r\n// No Text Select\r\n.no-select {\r\n user-select: none;\r\n}\r\n\r\n.circle {\r\n border-radius: 50%;\r\n}\r\n\r\n.center-block {\r\n display: block;\r\n margin-left: auto;\r\n margin-right: auto;\r\n}\r\n\r\n.truncate {\r\n display: block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.no-padding {\r\n padding: 0 !important;\r\n}\r\n","@use \"sass:math\";\r\n$primary-color: color(\"blue\", \"lighten-3\") !default;\r\n$primary-color-light: lighten($primary-color, 15%) !default;\r\n$primary-color-dark: darken($primary-color, 15%) !default;\r\n\r\n$secondary-color: color(\"teal\", \"lighten-1\") !default;\r\n$success-color: color(\"green\", \"base\") !default;\r\n$error-color: color(\"red\", \"base\") !default;\r\n$link-color: color(\"light-blue\", \"darken-1\") !default;\r\n\r\n\r\n\r\n// 2. Badges\r\n// ==========================================================================\r\n\r\n$badge-bg-color: $secondary-color !default;\r\n$badge-height: 22px !default;\r\n\r\n\r\n\r\n// 7. Chips\r\n// ==========================================================================\r\n\r\n$chip-bg-color: #e4e4e4 !default;\r\n$chip-border-color: #9e9e9e !default;\r\n$chip-selected-color: #26a69a !default;\r\n$chip-margin: 5px !default;\r\n\r\n\r\n// 16. Spinners | Loaders\r\n// ==========================================================================\r\n\r\n$spinner-default-color: $secondary-color !default;\r\n\r\n// 24. Progress Bar\r\n// ==========================================================================\r\n\r\n$progress-bar-color: $secondary-color !default;\r\n\r\n\r\n\r\n\r\n\r\n//inputs\r\n\r\n$input-height: 56px;\r\n\r\n// 6. Collapsible\r\n// ==========================================================================\r\n\r\n$collapsible-height: 3rem !default;\r\n$collapsible-line-height: $collapsible-height !default;\r\n$collapsible-header-color: #fff !default;\r\n$collapsible-border-color: #ddd !default;\r\n\r\n// 10. Forms\r\n// ==========================================================================\r\n\r\n// Text Inputs + Textarea\r\n$input-height: 3rem !default;\r\n$input-border-color: color(\"grey\", \"base\") !default;\r\n$input-border: 1px solid $input-border-color !default;\r\n$input-background: #fff !default;\r\n$input-error-color: $error-color !default;\r\n$input-success-color: $success-color !default;\r\n$input-focus-color: $secondary-color !default;\r\n$input-font-size: 16px !default;\r\n$input-margin-bottom: 8px;\r\n$input-margin: 0 0 $input-margin-bottom 0 !default;\r\n$input-padding: 0 !default;\r\n$label-font-size: .8rem !default;\r\n$input-disabled-color: rgba(0,0,0, .42) !default;\r\n$input-disabled-solid-color: #949494 !default;\r\n$input-disabled-border: 1px dotted $input-disabled-color !default;\r\n$input-invalid-border: 1px solid $input-error-color !default;\r\n$input-icon-size: 2rem;\r\n$placeholder-text-color: lighten($input-border-color, 20%) !default;\r\n\r\n// Radio Buttons\r\n$radio-fill-color: $secondary-color !default;\r\n$radio-empty-color: #5a5a5a !default;\r\n$radio-border: 2px solid $radio-fill-color !default;\r\n\r\n// Range\r\n$range-height: 14px !default;\r\n$range-width: 14px !default;\r\n$track-height: 3px !default;\r\n\r\n// Select\r\n$select-border: 1px solid #f2f2f2 !default;\r\n$select-background: rgba(255, 255, 255, 0.90) !default;\r\n$select-focus: 1px solid lighten($secondary-color, 47%) !default;\r\n$select-option-hover: rgba(0,0,0,.08) !default;\r\n$select-option-focus: rgba(0,0,0,.08) !default;\r\n$select-option-selected: rgba(0,0,0,.03) !default;\r\n$select-padding: 5px !default;\r\n$select-radius: 2px !default;\r\n$select-disabled-color: rgba(0,0,0,.3) !default;\r\n\r\n// Switches\r\n$switch-bg-color: $secondary-color !default;\r\n$switch-checked-lever-bg: desaturate(lighten($switch-bg-color, 25%), 25%) !default;\r\n$switch-unchecked-bg: #F1F1F1 !default;\r\n$switch-unchecked-lever-bg: rgba(0,0,0,.38) !default;\r\n$switch-radius: 15px !default;\r\n\r\n// 11. Global\r\n// ==========================================================================\r\n\r\n// Media Query Ranges\r\n$small-screen-up: 601px !default;\r\n$medium-screen-up: 993px !default;\r\n$large-screen-up: 1201px !default;\r\n$small-screen: 600px !default;\r\n$medium-screen: 992px !default;\r\n$large-screen: 1200px !default;\r\n\r\n$medium-and-up: \"only screen and (min-width : #{$small-screen-up})\" !default;\r\n$large-and-up: \"only screen and (min-width : #{$medium-screen-up})\" !default;\r\n$extra-large-and-up: \"only screen and (min-width : #{$large-screen-up})\" !default;\r\n$small-and-down: \"only screen and (max-width : #{$small-screen})\" !default;\r\n$medium-and-down: \"only screen and (max-width : #{$medium-screen})\" !default;\r\n$medium-only: \"only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})\" !default;\r\n\r\n\r\n\r\n// 12. Grid\r\n// ==========================================================================\r\n\r\n$num-cols: 12 !default;\r\n$gutter-width: 1rem !default;\r\n$element-top-margin: math.div($gutter-width, 3) !default;\r\n$element-bottom-margin: math.div($gutter-width * 2, 3) !default;\r\n\r\n// 13. Navigation Bar\r\n// ==========================================================================\r\n\r\n$navbar-height: 64px !default;\r\n$navbar-line-height: $navbar-height !default;\r\n$navbar-height-mobile: 56px !default;\r\n$navbar-line-height-mobile: $navbar-height-mobile !default;\r\n$navbar-font-size: 1rem !default;\r\n$navbar-font-color: #fff !default;\r\n$navbar-brand-font-size: 2.1rem !default;\r\n\r\n\r\n// 14. Side Navigation\r\n// ==========================================================================\r\n$button-raised-color: #fff !default;\r\n$button-flat-color: #343434 !default;\r\n$button-raised-background: #343434 !default;\r\n$primary-color:#343434 !default;\r\n\r\n\r\n \r\n$sidenav-width: 300px !default;\r\n$sidenav-font-size: 14px !default;\r\n$sidenav-font-color: rgba(0,0,0,.87) !default;\r\n$sidenav-bg-color: #fff !default;\r\n$sidenav-padding: 15px !default;\r\n$sidenav-item-height: 45px !default;\r\n$sidenav-line-height: $sidenav-item-height !default;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// 3. Buttons\r\n// ==========================================================================\r\n\r\n$primary-color: green !default;\r\n$primary-color-light: lighten($primary-color, 15%) !default;\r\n$primary-color-dark: darken($primary-color, 15%) !default;\r\n$secondary-color: red !default;\r\n\r\n\r\n// Shared styles\r\n$button-border: none !default;\r\n$button-background-focus: lighten($secondary-color, 4%) !default;\r\n$button-font-size: 14px !default;\r\n$button-icon-font-size: 1.3rem !default;\r\n$button-height: 36px !default;\r\n$button-padding: 0 16px !default;\r\n$button-radius: 2px !default;\r\n\r\n// Disabled styles\r\n$button-disabled-background: #DFDFDF !default;\r\n$button-disabled-color: #9F9F9F !default;\r\n\r\n// Raised buttons\r\n$button-raised-background: $secondary-color !default;\r\n$button-raised-background-hover: lighten($button-raised-background, 5%) !default;\r\n$button-raised-color: #fff !default;\r\n\r\n// Large buttons\r\n$button-large-font-size: 15px !default;\r\n$button-large-icon-font-size: 1.6rem !default;\r\n$button-large-height: $button-height * 1.5 !default;\r\n$button-floating-large-size: 56px !default;\r\n\r\n// Small buttons\r\n$button-small-font-size: 13px !default;\r\n$button-small-icon-font-size: 1.2rem !default;\r\n$button-small-height: $button-height * .9 !default;\r\n$button-floating-small-size: $button-height * .9 !default;\r\n\r\n// Flat buttons\r\n$button-flat-color: #343434 !default;\r\n$button-flat-disabled-color: lighten(#999, 10%) !default;\r\n\r\n// Floating buttons\r\n$button-floating-background: $secondary-color !default;\r\n$button-floating-background-hover: $button-floating-background !default;\r\n$button-floating-color: #fff !default;\r\n$button-floating-size: 40px !default;\r\n$button-floating-radius: 50% !default;\r\n\r\n\r\n\r\n\r\n// 4. Cards\r\n// ==========================================================================\r\n\r\n$card-padding: 24px !default;\r\n$card-bg-color: #fff !default;\r\n$card-link-color: color(\"orange\", \"accent-2\") !default;\r\n$card-link-color-light: lighten($card-link-color, 20%) !default;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// 23. Collections\r\n// ==========================================================================\r\n\r\n$collection-border-color: #e0e0e0 !default;\r\n$collection-bg-color: #fff !default;\r\n$collection-active-bg-color: $secondary-color !default;\r\n$collection-active-color: lighten($secondary-color, 55%) !default;\r\n$collection-hover-bg-color: #ddd !default;\r\n$collection-link-color: $secondary-color !default;\r\n$collection-line-height: 1.5rem !default;\r\n\r\n\r\n\r\n\r\n\r\n// 9. Dropdown\r\n// ==========================================================================\r\n\r\n$dropdown-bg-color: #fff !default;\r\n$dropdown-hover-bg-color: #eee !default;\r\n$dropdown-color: $secondary-color !default;\r\n$dropdown-item-height: 50px !default;\r\n\r\n\r\n$off-black: rgba(0, 0, 0, 0.87) !default;","// Badges\r\nspan.badge {\r\n min-width: 3rem;\r\n padding: 0 6px;\r\n margin-left: 14px;\r\n text-align: center;\r\n font-size: 1rem;\r\n line-height: $badge-height;\r\n height: $badge-height;\r\n color: color('grey', 'darken-1');\r\n float: right;\r\n box-sizing: border-box;\r\n\r\n &.new {\r\n font-weight: 300;\r\n font-size: 0.8rem;\r\n color: #fff;\r\n background-color: $badge-bg-color;\r\n border-radius: 2px;\r\n }\r\n\r\n &.new:after {\r\n content: \" new\";\r\n }\r\n\r\n &[data-badge-caption]::after {\r\n content: \" \" attr(data-badge-caption);\r\n }\r\n}\r\n\r\n// Special cases\r\nnav ul a span.badge {\r\n display: inline-block;\r\n float: none;\r\n margin-left: 4px;\r\n line-height: $badge-height;\r\n height: $badge-height;\r\n -webkit-font-smoothing: auto;\r\n}\r\n\r\n// Line height centering\r\n.collection-item span.badge {\r\n margin-top: calc(calc($collection-line-height / 2) - calc($badge-height / 2));\r\n}\r\n\r\n.collapsible span.badge {\r\n margin-left: auto;\r\n}\r\n\r\n.sidenav span.badge {\r\n margin-top: calc(calc($sidenav-line-height / 2) - calc($badge-height / 2));\r\n}\r\n\r\ntable span.badge {\r\n display: inline-block;\r\n float: none;\r\n margin-left: auto;\r\n}\r\n",".chip {\r\n &:focus {\r\n outline: none;\r\n background-color: $chip-selected-color;\r\n color: #fff;\r\n }\r\n\r\n display: inline-block;\r\n height: 32px;\r\n font-size: 13px;\r\n font-weight: 500;\r\n color: rgba(0,0,0,.6);\r\n line-height: 32px;\r\n padding: 0 12px;\r\n border-radius: 16px;\r\n background-color: $chip-bg-color;\r\n margin-bottom: $chip-margin;\r\n margin-right: $chip-margin;\r\n\r\n > img {\r\n float: left;\r\n margin: 0 8px 0 -12px;\r\n height: 32px;\r\n width: 32px;\r\n border-radius: 50%;\r\n }\r\n\r\n .close {\r\n cursor: pointer;\r\n float: right;\r\n font-size: 16px;\r\n line-height: 32px;\r\n padding-left: 8px;\r\n }\r\n}\r\n\r\n.chips {\r\n border: none;\r\n border-bottom: 1px solid $chip-border-color;\r\n box-shadow: none;\r\n margin: $input-margin;\r\n min-height: 45px;\r\n outline: none;\r\n transition: all .3s;\r\n\r\n &.focus {\r\n border-bottom: 1px solid $chip-selected-color;\r\n box-shadow: 0 1px 0 0 $chip-selected-color;\r\n }\r\n\r\n &:hover {\r\n cursor: text;\r\n }\r\n\r\n .input {\r\n background: none;\r\n border: 0;\r\n color: rgba(0,0,0,.6);\r\n display: inline-block;\r\n font-size: $input-font-size;\r\n height: $input-height;\r\n line-height: 32px;\r\n outline: 0;\r\n margin: 0;\r\n padding: 0 !important;\r\n width: 120px !important;\r\n }\r\n\r\n .input:focus {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n }\r\n\r\n // Autocomplete\r\n .autocomplete-content {\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n }\r\n}\r\n\r\n// Form prefix\r\n.prefix ~ .chips {\r\n margin-left: 3rem;\r\n width: 92%;\r\n width: calc(100% - 3rem);\r\n}\r\n.chips:empty ~ label {\r\n font-size: 0.8rem;\r\n transform: translateY(-140%);\r\n}\r\n",".collapsible {\r\n border-top: 1px solid $collapsible-border-color;\r\n border-right: 1px solid $collapsible-border-color;\r\n border-left: 1px solid $collapsible-border-color;\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n @extend .shadow-1;\r\n}\r\n\r\n.collapsible-header {\r\n &:focus {\r\n outline: 0\r\n }\r\n\r\n display: flex;\r\n cursor: pointer;\r\n -webkit-tap-highlight-color: transparent;\r\n line-height: 1.5;\r\n padding: 1rem;\r\n background-color: $collapsible-header-color;\r\n border-bottom: 1px solid $collapsible-border-color;\r\n\r\n i {\r\n width: 2rem;\r\n font-size: 1.6rem;\r\n display: inline-block;\r\n text-align: center;\r\n margin-right: 1rem;\r\n }\r\n}\r\n.keyboard-focused .collapsible-header:focus {\r\n background-color: #eee;\r\n}\r\n\r\n.collapsible-body {\r\n display: none;\r\n border-bottom: 1px solid $collapsible-border-color;\r\n box-sizing: border-box;\r\n padding: 2rem;\r\n}\r\n\r\n// Sidenav collapsible styling\r\n.sidenav,\r\n.sidenav.fixed {\r\n\r\n .collapsible {\r\n border: none;\r\n box-shadow: none;\r\n\r\n li { padding: 0; }\r\n }\r\n\r\n .collapsible-header {\r\n background-color: transparent;\r\n border: none;\r\n line-height: inherit;\r\n height: inherit;\r\n padding: 0 $sidenav-padding;\r\n\r\n &:hover { background-color: rgba(0,0,0,.05); }\r\n i { line-height: inherit; }\r\n }\r\n\r\n .collapsible-body {\r\n border: 0;\r\n background-color: $collapsible-header-color;\r\n\r\n li a {\r\n padding: 0 (7.5px + $sidenav-padding)\r\n 0 (15px + $sidenav-padding);\r\n }\r\n }\r\n\r\n}\r\n\r\n// Popout Collapsible\r\n\r\n.collapsible.popout {\r\n border: none;\r\n box-shadow: none;\r\n > li {\r\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\r\n // transform: scaleX(.92);\r\n margin: 0 24px;\r\n transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940);\r\n }\r\n > li.active {\r\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\r\n margin: 16px 0;\r\n // transform: scaleX(1);\r\n }\r\n}\r\n","// 23. Collections - variables\r\n// ==========================================================================\r\n\r\n$collection-border-color: #e0e0e0 !default;\r\n$collection-bg-color: #fff !default;\r\n$collection-active-bg-color: $secondary-color !default;\r\n$collection-active-color: lighten($secondary-color, 55%) !default;\r\n$collection-hover-bg-color: #ddd !default;\r\n$collection-link-color: $secondary-color !default;\r\n$collection-line-height: 1.5rem !default;\r\n// 23. Collections\r\n// ==========================================================================\r\n\r\n.collection {\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n border: 1px solid $collection-border-color;\r\n border-radius: 2px;\r\n overflow: hidden;\r\n position: relative;\r\n \r\n .collection-item {\r\n background-color: $collection-bg-color;\r\n line-height: $collection-line-height;\r\n padding: 10px 20px;\r\n margin: 0;\r\n border-bottom: 1px solid $collection-border-color;\r\n \r\n // Avatar Collection\r\n &.avatar {\r\n min-height: 84px;\r\n padding-left: 72px;\r\n position: relative;\r\n \r\n // Don't style circles inside preloader classes.\r\n &:not(.circle-clipper) > .circle,\r\n :not(.circle-clipper) > .circle {\r\n position: absolute;\r\n width: 42px;\r\n height: 42px;\r\n overflow: hidden;\r\n left: 15px;\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n i.circle {\r\n font-size: 18px;\r\n line-height: 42px;\r\n color: #fff;\r\n background-color: #999;\r\n text-align: center;\r\n }\r\n \r\n \r\n .title {\r\n font-size: 16px;\r\n }\r\n \r\n p {\r\n margin: 0;\r\n }\r\n \r\n .secondary-content {\r\n position: absolute;\r\n top: 16px;\r\n right: 16px;\r\n }\r\n \r\n }\r\n \r\n \r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n \r\n &.active {\r\n background-color: $collection-active-bg-color;\r\n color: $collection-active-color;\r\n \r\n .secondary-content {\r\n color: #fff;\r\n }\r\n }\r\n }\r\n a.collection-item{\r\n display: block;\r\n transition: .25s;\r\n color: $collection-link-color;\r\n &:not(.active) {\r\n &:hover {\r\n background-color: $collection-hover-bg-color;\r\n }\r\n }\r\n }\r\n \r\n &.with-header {\r\n .collection-header {\r\n background-color: $collection-bg-color;\r\n border-bottom: 1px solid $collection-border-color;\r\n padding: 10px 20px;\r\n }\r\n .collection-item {\r\n padding-left: 30px;\r\n }\r\n .collection-item.avatar {\r\n padding-left: 72px;\r\n }\r\n }\r\n .secondary-content {\r\n float: right;\r\n color: $secondary-color;\r\n }\r\n }","// Remove Focus Boxes\r\nselect:focus {\r\n outline: $select-focus;\r\n}\r\n\r\nbutton:focus {\r\n outline: none;\r\n background-color: $button-background-focus;\r\n}\r\n\r\nlabel {\r\n font-size: $label-font-size;\r\n color: $input-border-color;\r\n}\r\n\r\n@import 'input-fields';\r\n@import 'radio-buttons';\r\n@import 'checkboxes';\r\n@import 'switches';\r\n@import 'select';\r\n@import 'file-input';\r\n@import 'range';\r\n","/* Text Inputs + Textarea\r\n ========================================================================== */\r\n\r\n/* Style Placeholders */\r\n@use \"sass:math\";\r\n::placeholder {\r\n color: $placeholder-text-color;\r\n}\r\n\r\n/* Text inputs */\r\n\r\ninput:not([type]),\r\ninput[type=text]:not(.browser-default),\r\ninput[type=password]:not(.browser-default),\r\ninput[type=email]:not(.browser-default),\r\ninput[type=url]:not(.browser-default),\r\ninput[type=time]:not(.browser-default),\r\ninput[type=date]:not(.browser-default),\r\ninput[type=datetime]:not(.browser-default),\r\ninput[type=datetime-local]:not(.browser-default),\r\ninput[type=tel]:not(.browser-default),\r\ninput[type=number]:not(.browser-default),\r\ninput[type=search]:not(.browser-default),\r\ntextarea.textarea {\r\n\r\n // General Styles\r\n background-color: transparent;\r\n border: none;\r\n border-bottom: $input-border;\r\n border-radius: 0;\r\n outline: none;\r\n height: $input-height;\r\n width: 100%;\r\n font-size: $input-font-size;\r\n margin: $input-margin;\r\n padding: $input-padding;\r\n box-shadow: none;\r\n box-sizing: content-box;\r\n transition: box-shadow .3s, border .3s;\r\n\r\n // Disabled input style\r\n &:disabled,\r\n &[readonly=\"readonly\"] {\r\n color: $input-disabled-color;\r\n border-bottom: $input-disabled-border;\r\n }\r\n\r\n // Disabled label style\r\n &:disabled+label,\r\n &[readonly=\"readonly\"]+label {\r\n color: $input-disabled-color;\r\n }\r\n\r\n // Focused input style\r\n &:focus:not([readonly]) {\r\n border-bottom: 1px solid $input-focus-color;\r\n box-shadow: 0 1px 0 0 $input-focus-color;\r\n }\r\n\r\n // Focused label style\r\n &:focus:not([readonly])+label {\r\n color: $input-focus-color;\r\n }\r\n\r\n // Hide helper text on data message\r\n &.valid ~ .helper-text[data-success],\r\n &:focus.valid ~ .helper-text[data-success],\r\n &.invalid ~ .helper-text[data-error],\r\n &:focus.invalid ~ .helper-text[data-error] {\r\n @extend %hidden-text;\r\n }\r\n\r\n // Valid Input Style\r\n &.valid,\r\n &:focus.valid {\r\n @extend %valid-input-style;\r\n }\r\n\r\n // Custom Success Message\r\n &.valid ~ .helper-text:after,\r\n &:focus.valid ~ .helper-text:after {\r\n @extend %custom-success-message;\r\n }\r\n &:focus.valid ~ label {\r\n color: $input-success-color;\r\n }\r\n\r\n // Invalid Input Style\r\n &.invalid,\r\n &:focus.invalid {\r\n @extend %invalid-input-style;\r\n }\r\n\r\n // Custom Error message\r\n &.invalid ~ .helper-text:after,\r\n &:focus.invalid ~ .helper-text:after {\r\n @extend %custom-error-message;\r\n }\r\n &:focus.invalid ~ label {\r\n color: $input-error-color;\r\n }\r\n\r\n // Full width label when using validate for error messages\r\n &.validate + label {\r\n width: 100%;\r\n }\r\n\r\n // Form Message Shared Styles\r\n & + label:after {\r\n @extend %input-after-style;\r\n }\r\n}\r\n\r\n\r\n/* Validation Sass Placeholders */\r\n%valid-input-style {\r\n border-bottom: 1px solid $input-success-color;\r\n box-shadow: 0 1px 0 0 $input-success-color;\r\n}\r\n%invalid-input-style {\r\n border-bottom: $input-invalid-border;\r\n box-shadow: 0 1px 0 0 $input-error-color;\r\n}\r\n%hidden-text {\r\n color: transparent;\r\n user-select: none;\r\n pointer-events: none;\r\n}\r\n%custom-success-message {\r\n content: attr(data-success);\r\n color: $input-success-color;\r\n}\r\n%custom-error-message {\r\n content: attr(data-error);\r\n color: $input-error-color;\r\n}\r\n%input-after-style {\r\n display: block;\r\n content: \"\";\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n opacity: 0;\r\n transition: .2s opacity ease-out, .2s color ease-out;\r\n}\r\n\r\n\r\n// Styling for input field wrapper\r\n.input-field {\r\n // Inline styles\r\n &.inline {\r\n display: inline-block;\r\n vertical-align: middle;\r\n margin-left: 5px;\r\n\r\n input,\r\n .select-dropdown {\r\n margin-bottom: 1rem;\r\n }\r\n }\r\n\r\n // Gutter spacing\r\n &.col {\r\n label {\r\n left: math.div($gutter-width, 2);\r\n }\r\n\r\n .prefix ~ label,\r\n .prefix ~ .validate ~ label {\r\n width: calc(100% - 3rem - #{$gutter-width});\r\n }\r\n }\r\n\r\n position: relative;\r\n margin-top: 1rem;\r\n margin-bottom: 1rem;\r\n\r\n & > label {\r\n color: $input-border-color;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n font-size: 1rem;\r\n cursor: text;\r\n transition: transform .2s ease-out, color .2s ease-out;\r\n transform-origin: 0% 100%;\r\n text-align: initial;\r\n transform: translateY(12px);\r\n\r\n &:not(.label-icon).active {\r\n transform: translateY(-14px) scale(.8);\r\n transform-origin: 0 0;\r\n }\r\n }\r\n\r\n // Autofill + date + time inputs\r\n & > input[type]:-webkit-autofill:not(.browser-default):not([type=\"search\"]) + label,\r\n & > input[type=date]:not(.browser-default) + label,\r\n & > input[type=time]:not(.browser-default) + label {\r\n transform: translateY(-14px) scale(.8);\r\n transform-origin: 0 0;\r\n }\r\n\r\n .helper-text {\r\n &::after {\r\n opacity: 1;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n }\r\n\r\n position: relative;\r\n min-height: 18px;\r\n display: block;\r\n font-size: 12px;\r\n color: rgba(0,0,0,.54);\r\n }\r\n\r\n // Prefix Icons\r\n .prefix {\r\n position: absolute;\r\n width: $input-height;\r\n font-size: $input-icon-size;\r\n transition: color .2s;\r\n // top: ($input-height - $input-icon-size) / 2;\r\n\r\n &.active { color: $input-focus-color; }\r\n }\r\n\r\n .prefix ~ input,\r\n .prefix ~ textarea,\r\n .prefix ~ label,\r\n .prefix ~ .validate ~ label,\r\n .prefix ~ .helper-text,\r\n .prefix ~ .autocomplete-content {\r\n margin-left: 3rem;\r\n width: 92%;\r\n width: calc(100% - 3rem);\r\n }\r\n\r\n .prefix ~ label { margin-left: 3rem; }\r\n\r\n @media #{$medium-and-down} {\r\n .prefix ~ input {\r\n width: 86%;\r\n width: calc(100% - 3rem);\r\n }\r\n }\r\n\r\n @media #{$small-and-down} {\r\n .prefix ~ input {\r\n width: 80%;\r\n width: calc(100% - 3rem);\r\n }\r\n }\r\n}\r\n\r\n\r\n/* Search Field */\r\n\r\n.input-field input[type=search] {\r\n display: block;\r\n line-height: inherit;\r\n transition: .3s background-color;\r\n\r\n .nav-wrapper & {\r\n height: inherit;\r\n padding-left: 4rem;\r\n width: calc(100% - 4rem);\r\n border: 0;\r\n box-shadow: none;\r\n }\r\n\r\n &:focus:not(.browser-default) {\r\n background-color: $input-background;\r\n border: 0;\r\n box-shadow: none;\r\n color: #444;\r\n\r\n & + label i,\r\n & ~ .mdi-navigation-close,\r\n & ~ .material-icons {\r\n color: #444;\r\n }\r\n }\r\n\r\n & + .label-icon {\r\n transform: none;\r\n left: 1rem;\r\n }\r\n\r\n & ~ .mdi-navigation-close,\r\n & ~ .material-icons {\r\n position: absolute;\r\n top: 0;\r\n right: 1rem;\r\n color: transparent;\r\n cursor: pointer;\r\n font-size: $input-icon-size;\r\n transition: .3s color;\r\n }\r\n}\r\n\r\n\r\n/* Textarea */\r\n\r\n// Default textarea\r\ntextarea {\r\n width: 100%;\r\n height: $input-height;\r\n background-color: transparent;\r\n\r\n &.textarea {\r\n line-height: normal;\r\n overflow-y: hidden; /* prevents scroll bar flash */\r\n padding: .8rem 0 .8rem 0; /* prevents text jump on Enter keypress */\r\n resize: none;\r\n min-height: $input-height;\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n// For textarea autoresize\r\n\r\n.hiddendiv {\r\n visibility: hidden;\r\n white-space: pre-wrap;\r\n word-wrap: break-word;\r\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\r\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\r\n\r\n // Reduces repaints\r\n position: absolute;\r\n top: 0;\r\n z-index: -1;\r\n}\r\n\r\n\r\n/* Autocomplete */\r\n.autocomplete-content {\r\n li {\r\n .highlight { color: #444; }\r\n\r\n img {\r\n // height: $dropdown-item-height - 10;\r\n // width: $dropdown-item-height - 10;\r\n margin: 5px 15px;\r\n }\r\n }\r\n}\r\n\r\n/* Character Counter */\r\n.character-counter {\r\n min-height: 18px;\r\n}\r\n","/* Radio Buttons\r\n ========================================================================== */\r\n\r\n// Remove default Radio Buttons\r\n[type=\"radio\"]:not(:checked),\r\n[type=\"radio\"]:checked {\r\n position: absolute;\r\n opacity: 0;\r\n pointer-events: none;\r\n}\r\n\r\n[type=\"radio\"]:not(:checked) + span,\r\n[type=\"radio\"]:checked + span {\r\n position: relative;\r\n padding-left: 35px;\r\n cursor: pointer;\r\n display: inline-block;\r\n height: 25px;\r\n line-height: 25px;\r\n font-size: 1rem;\r\n transition: .28s ease;\r\n user-select: none;\r\n}\r\n\r\n[type=\"radio\"] + span:before,\r\n[type=\"radio\"] + span:after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n margin: 4px;\r\n width: 16px;\r\n height: 16px;\r\n z-index: 0;\r\n transition: .28s ease;\r\n}\r\n\r\n/* Unchecked styles */\r\n[type=\"radio\"]:not(:checked) + span:before,\r\n[type=\"radio\"]:not(:checked) + span:after,\r\n[type=\"radio\"]:checked + span:before,\r\n[type=\"radio\"]:checked + span:after,\r\n[type=\"radio\"].with-gap:checked + span:before,\r\n[type=\"radio\"].with-gap:checked + span:after {\r\n border-radius: 50%;\r\n}\r\n\r\n[type=\"radio\"]:not(:checked) + span:before,\r\n[type=\"radio\"]:not(:checked) + span:after {\r\n border: 2px solid $radio-empty-color;\r\n}\r\n\r\n[type=\"radio\"]:not(:checked) + span:after {\r\n transform: scale(0);\r\n}\r\n\r\n/* Checked styles */\r\n[type=\"radio\"]:checked + span:before {\r\n border: 2px solid transparent;\r\n}\r\n\r\n[type=\"radio\"]:checked + span:after,\r\n[type=\"radio\"].with-gap:checked + span:before,\r\n[type=\"radio\"].with-gap:checked + span:after {\r\n border: $radio-border;\r\n}\r\n\r\n[type=\"radio\"]:checked + span:after,\r\n[type=\"radio\"].with-gap:checked + span:after {\r\n background-color: $radio-fill-color;\r\n}\r\n\r\n[type=\"radio\"]:checked + span:after {\r\n transform: scale(1.02);\r\n}\r\n\r\n/* Radio With gap */\r\n[type=\"radio\"].with-gap:checked + span:after {\r\n transform: scale(.5);\r\n}\r\n\r\n/* Focused styles */\r\n[type=\"radio\"].tabbed:focus + span:before {\r\n box-shadow: 0 0 0 10px rgba(0,0,0,.1);\r\n}\r\n\r\n/* Disabled Radio With gap */\r\n[type=\"radio\"].with-gap:disabled:checked + span:before {\r\n border: 2px solid $input-disabled-color;\r\n}\r\n\r\n[type=\"radio\"].with-gap:disabled:checked + span:after {\r\n border: none;\r\n background-color: $input-disabled-color;\r\n}\r\n\r\n/* Disabled style */\r\n[type=\"radio\"]:disabled:not(:checked) + span:before,\r\n[type=\"radio\"]:disabled:checked + span:before {\r\n background-color: transparent;\r\n border-color: $input-disabled-color;\r\n}\r\n\r\n[type=\"radio\"]:disabled + span {\r\n color: $input-disabled-color;\r\n}\r\n\r\n[type=\"radio\"]:disabled:not(:checked) + span:before {\r\n border-color: $input-disabled-color;\r\n}\r\n\r\n[type=\"radio\"]:disabled:checked + span:after {\r\n background-color: $input-disabled-color;\r\n border-color: $input-disabled-solid-color;\r\n}\r\n","/* Checkboxes\r\n ========================================================================== */\r\n\r\n/* Remove default checkbox */\r\n[type=\"checkbox\"]:not(:checked),\r\n[type=\"checkbox\"]:checked {\r\n position: absolute;\r\n opacity: 0;\r\n pointer-events: none;\r\n}\r\n\r\n// Checkbox Styles\r\n[type=\"checkbox\"] {\r\n // Text Label Style\r\n + span:not(.lever) {\r\n position: relative;\r\n padding-left: 35px;\r\n cursor: pointer;\r\n display: inline-block;\r\n height: 25px;\r\n line-height: 25px;\r\n font-size: 1rem;\r\n user-select: none;\r\n }\r\n\r\n /* checkbox aspect */\r\n + span:not(.lever):before,\r\n &:not(.filled-in) + span:not(.lever):after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 18px;\r\n height: 18px;\r\n z-index: 0;\r\n border: 2px solid $radio-empty-color;\r\n border-radius: 1px;\r\n margin-top: 3px;\r\n transition: .2s;\r\n }\r\n\r\n &:not(.filled-in) + span:not(.lever):after {\r\n border: 0;\r\n transform: scale(0);\r\n }\r\n\r\n &:not(:checked):disabled + span:not(.lever):before {\r\n border: none;\r\n background-color: $input-disabled-color;\r\n }\r\n\r\n // Focused styles\r\n &.tabbed:focus + span:not(.lever):after {\r\n transform: scale(1);\r\n border: 0;\r\n border-radius: 50%;\r\n box-shadow: 0 0 0 10px rgba(0,0,0,.1);\r\n background-color: rgba(0,0,0,.1);\r\n }\r\n}\r\n\r\n[type=\"checkbox\"]:checked {\r\n + span:not(.lever):before {\r\n top: -4px;\r\n left: -5px;\r\n width: 12px;\r\n height: 22px;\r\n border-top: 2px solid transparent;\r\n border-left: 2px solid transparent;\r\n border-right: $radio-border;\r\n border-bottom: $radio-border;\r\n transform: rotate(40deg);\r\n backface-visibility: hidden;\r\n transform-origin: 100% 100%;\r\n }\r\n\r\n &:disabled + span:before {\r\n border-right: 2px solid $input-disabled-color;\r\n border-bottom: 2px solid $input-disabled-color;\r\n }\r\n}\r\n\r\n/* Indeterminate checkbox */\r\n[type=\"checkbox\"]:indeterminate {\r\n + span:not(.lever):before {\r\n top: -11px;\r\n left: -12px;\r\n width: 10px;\r\n height: 22px;\r\n border-top: none;\r\n border-left: none;\r\n border-right: $radio-border;\r\n border-bottom: none;\r\n transform: rotate(90deg);\r\n backface-visibility: hidden;\r\n transform-origin: 100% 100%;\r\n }\r\n\r\n // Disabled indeterminate\r\n &:disabled + span:not(.lever):before {\r\n border-right: 2px solid $input-disabled-color;\r\n background-color: transparent;\r\n }\r\n}\r\n\r\n// Filled in Style\r\n[type=\"checkbox\"].filled-in {\r\n // General\r\n + span:not(.lever):after {\r\n border-radius: 2px;\r\n }\r\n\r\n + span:not(.lever):before,\r\n + span:not(.lever):after {\r\n content: '';\r\n left: 0;\r\n position: absolute;\r\n /* .1s delay is for check animation */\r\n transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;\r\n z-index: 1;\r\n }\r\n\r\n // Unchecked style\r\n &:not(:checked) + span:not(.lever):before {\r\n width: 0;\r\n height: 0;\r\n border: 3px solid transparent;\r\n left: 6px;\r\n top: 10px;\r\n transform: rotateZ(37deg);\r\n transform-origin: 100% 100%;\r\n }\r\n\r\n &:not(:checked) + span:not(.lever):after {\r\n height: 20px;\r\n width: 20px;\r\n background-color: transparent;\r\n border: 2px solid $radio-empty-color;\r\n top: 0px;\r\n z-index: 0;\r\n }\r\n\r\n // Checked style\r\n &:checked {\r\n + span:not(.lever):before {\r\n top: 0;\r\n left: 1px;\r\n width: 8px;\r\n height: 13px;\r\n border-top: 2px solid transparent;\r\n border-left: 2px solid transparent;\r\n border-right: 2px solid $input-background;\r\n border-bottom: 2px solid $input-background;\r\n transform: rotateZ(37deg);\r\n transform-origin: 100% 100%;\r\n }\r\n\r\n + span:not(.lever):after {\r\n top: 0;\r\n width: 20px;\r\n height: 20px;\r\n border: 2px solid $secondary-color;\r\n background-color: $secondary-color;\r\n z-index: 0;\r\n }\r\n }\r\n\r\n // Focused styles\r\n &.tabbed:focus + span:not(.lever):after {\r\n border-radius: 2px;\r\n border-color: $radio-empty-color;\r\n background-color: rgba(0,0,0,.1);\r\n }\r\n\r\n &.tabbed:checked:focus + span:not(.lever):after {\r\n border-radius: 2px;\r\n background-color: $secondary-color;\r\n border-color: $secondary-color;\r\n }\r\n\r\n // Disabled style\r\n &:disabled:not(:checked) + span:not(.lever):before {\r\n background-color: transparent;\r\n border: 2px solid transparent;\r\n }\r\n\r\n &:disabled:not(:checked) + span:not(.lever):after {\r\n border-color: transparent;\r\n background-color: $input-disabled-solid-color;\r\n }\r\n\r\n &:disabled:checked + span:not(.lever):before {\r\n background-color: transparent;\r\n }\r\n\r\n &:disabled:checked + span:not(.lever):after {\r\n background-color: $input-disabled-solid-color;\r\n border-color: $input-disabled-solid-color;\r\n }\r\n}\r\n","/* Switch\r\n ========================================================================== */\r\n\r\n.switch,\r\n.switch * {\r\n -webkit-tap-highlight-color: transparent;\r\n user-select: none;\r\n}\r\n\r\n.switch label {\r\n cursor: pointer;\r\n}\r\n\r\n.switch label input[type=checkbox] {\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n\r\n &:checked + .lever {\r\n background-color: $switch-checked-lever-bg;\r\n\r\n &:before, &:after {\r\n left: 18px;\r\n }\r\n\r\n &:after {\r\n background-color: $switch-bg-color;\r\n }\r\n }\r\n}\r\n\r\n.switch label .lever {\r\n content: \"\";\r\n display: inline-block;\r\n position: relative;\r\n width: 36px;\r\n height: 14px;\r\n background-color: $switch-unchecked-lever-bg;\r\n border-radius: $switch-radius;\r\n //margin-right: 10px;\r\n transition: background 0.3s ease;\r\n vertical-align: middle;\r\n margin: 0 16px;\r\n\r\n &:before, &:after {\r\n content: \"\";\r\n position: absolute;\r\n display: inline-block;\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 50%;\r\n left: 0;\r\n top: -3px;\r\n transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;\r\n }\r\n\r\n &:before {\r\n background-color: transparentize($switch-bg-color, .85);\r\n }\r\n\r\n &:after {\r\n background-color: $switch-unchecked-bg;\r\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\r\n }\r\n}\r\n\r\n// Switch active style\r\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\r\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\r\n transform: scale(2.4);\r\n background-color: transparentize($switch-bg-color, .85);\r\n}\r\n\r\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\r\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\r\n transform: scale(2.4);\r\n background-color: rgba(0,0,0,.08);\r\n}\r\n\r\n// Disabled Styles\r\n.switch input[type=checkbox][disabled] + .lever {\r\n cursor: default;\r\n background-color: rgba(0,0,0,.12);\r\n}\r\n\r\n.switch label input[type=checkbox][disabled] + .lever:after,\r\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\r\n background-color: $input-disabled-solid-color;\r\n}\r\n","/* Select Field\r\n ========================================================================== */\r\n\r\nselect { display: none; }\r\nselect.browser-default { display: block; }\r\n\r\nselect {\r\n background-color: $select-background;\r\n width: 100%;\r\n padding: $select-padding;\r\n border: $select-border;\r\n border-radius: $select-radius;\r\n height: $input-height;\r\n}\r\n\r\n.select-label {\r\n position: absolute;\r\n}\r\n\r\n.select-wrapper {\r\n &.valid .helper-text[data-success],\r\n &.invalid ~ .helper-text[data-error] {\r\n @extend %hidden-text;\r\n }\r\n\r\n &.valid {\r\n & > input.select-dropdown {\r\n @extend %valid-input-style;\r\n }\r\n\r\n & ~ .helper-text:after {\r\n @extend %custom-success-message;\r\n }\r\n }\r\n\r\n &.invalid {\r\n & > input.select-dropdown,\r\n & > input.select-dropdown:focus {\r\n @extend %invalid-input-style;\r\n }\r\n\r\n & ~ .helper-text:after {\r\n @extend %custom-error-message;\r\n }\r\n }\r\n\r\n &.valid + label,\r\n &.invalid + label {\r\n width: 100%;\r\n pointer-events: none;\r\n }\r\n\r\n & + label:after {\r\n @extend %input-after-style;\r\n }\r\n\r\n position: relative;\r\n\r\n input.select-dropdown {\r\n &:focus {\r\n border-bottom: 1px solid $input-focus-color;\r\n }\r\n position: relative;\r\n cursor: pointer;\r\n background-color: transparent;\r\n border: none;\r\n border-bottom: $input-border;\r\n outline: none;\r\n height: $input-height;\r\n line-height: $input-height;\r\n width: 100%;\r\n font-size: $input-font-size;\r\n margin: $input-margin;\r\n padding: 0;\r\n display: block;\r\n user-select:none;\r\n z-index: 1;\r\n }\r\n\r\n .caret {\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n bottom: 0;\r\n margin: auto 0;\r\n z-index: 0;\r\n fill: rgba(0,0,0,.87);\r\n }\r\n\r\n & + label {\r\n position: absolute;\r\n top: -26px;\r\n font-size: $label-font-size;\r\n }\r\n}\r\n\r\n// Disabled styles\r\nselect:disabled {\r\n color: $input-disabled-color;\r\n}\r\n\r\n.select-wrapper.disabled {\r\n + label {\r\n color: $input-disabled-color;\r\n }\r\n .caret {\r\n fill: $input-disabled-color;\r\n }\r\n}\r\n\r\n.select-wrapper input.select-dropdown:disabled {\r\n color: $input-disabled-color;\r\n cursor: default;\r\n user-select: none;\r\n}\r\n\r\n.select-wrapper i {\r\n color: $select-disabled-color;\r\n}\r\n\r\n.select-dropdown li.disabled,\r\n.select-dropdown li.disabled > span,\r\n.select-dropdown li.optgroup {\r\n color: $select-disabled-color;\r\n background-color: transparent;\r\n}\r\n\r\nbody.keyboard-focused {\r\n .select-dropdown.dropdown-content li:focus {\r\n background-color: $select-option-focus;\r\n }\r\n}\r\n\r\n.select-dropdown.dropdown-content {\r\n li {\r\n &:hover {\r\n background-color: $select-option-hover;\r\n }\r\n\r\n &.selected {\r\n background-color: $select-option-selected;\r\n }\r\n }\r\n}\r\n\r\n// Prefix Icons\r\n.prefix ~ .select-wrapper {\r\n margin-left: 3rem;\r\n width: 92%;\r\n width: calc(100% - 3rem);\r\n}\r\n\r\n.prefix ~ label { margin-left: 3rem; }\r\n\r\n// Icons\r\n.select-dropdown li {\r\n img {\r\n // height: $dropdown-item-height - 10;\r\n // width: $dropdown-item-height - 10;\r\n margin: 5px 15px;\r\n float: right;\r\n }\r\n}\r\n\r\n// Optgroup styles\r\n.select-dropdown li.optgroup {\r\n // border-top: 1px solid $dropdown-hover-bg-color;\r\n\r\n &.selected > span {\r\n color: rgba(0, 0, 0, .7);\r\n }\r\n\r\n & > span {\r\n color: rgba(0, 0, 0, .4);\r\n }\r\n\r\n & ~ li.optgroup-option {\r\n padding-left: 1rem;\r\n }\r\n}\r\n","/* File Input\r\n ========================================================================== */\r\n\r\n.file-field {\r\n position: relative;\r\n\r\n .file-path-wrapper {\r\n overflow: hidden;\r\n padding-left: 10px;\r\n }\r\n\r\n input.file-path { width: 100%; }\r\n\r\n .btn {\r\n float: left;\r\n height: $input-height;\r\n line-height: $input-height;\r\n }\r\n\r\n span {\r\n cursor: pointer;\r\n }\r\n\r\n input[type=file] {\r\n\r\n // Needed to override webkit button\r\n &::-webkit-file-upload-button {\r\n display: none;\r\n }\r\n\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n left: 0;\r\n bottom: 0;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n font-size: 20px;\r\n cursor: pointer;\r\n opacity: 0;\r\n filter: alpha(opacity=0);\r\n }\r\n}\r\n","/* Range\r\n ========================================================================== */\r\n\r\n.range-field {\r\n position: relative;\r\n}\r\n\r\ninput[type=range],\r\ninput[type=range] + .thumb {\r\n // @extend .no-select;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=range] {\r\n position: relative;\r\n background-color: transparent;\r\n border: none;\r\n outline: none;\r\n width: 100%;\r\n margin: 15px 0;\r\n padding: 0;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n}\r\n\r\ninput[type=range] + .thumb {\r\n position: absolute;\r\n top: 10px;\r\n left: 0;\r\n border: none;\r\n height: 0;\r\n width: 0;\r\n border-radius: 50%;\r\n background-color: $radio-fill-color;\r\n margin-left: 7px;\r\n\r\n transform-origin: 50% 50%;\r\n transform: rotate(-45deg);\r\n\r\n .value {\r\n display: block;\r\n width: 30px;\r\n text-align: center;\r\n color: $radio-fill-color;\r\n font-size: 0;\r\n transform: rotate(45deg);\r\n }\r\n\r\n &.active {\r\n border-radius: 50% 50% 50% 0;\r\n\r\n .value {\r\n color: $input-background;\r\n margin-left: -1px;\r\n margin-top: 8px;\r\n font-size: 10px;\r\n }\r\n }\r\n}\r\n\r\n// Shared\r\n@mixin range-track {\r\n height: $track-height;\r\n background: #c2c0c2;\r\n border: none;\r\n}\r\n\r\n@mixin range-thumb {\r\n border: none;\r\n height: $range-height;\r\n width: $range-width;\r\n border-radius: 50%;\r\n background: $radio-fill-color;\r\n transition: box-shadow .3s;\r\n}\r\n\r\n// WebKit\r\ninput[type=range] {\r\n -webkit-appearance: none;\r\n}\r\n\r\ninput[type=range]::-webkit-slider-runnable-track {\r\n @include range-track;\r\n}\r\n\r\ninput[type=range]::-webkit-slider-thumb {\r\n @include range-thumb;\r\n -webkit-appearance: none;\r\n background-color: $radio-fill-color;\r\n transform-origin: 50% 50%;\r\n margin: -5px 0 0 0;\r\n\r\n}\r\n\r\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\r\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\r\n}\r\n\r\n// FireFox\r\ninput[type=range] {\r\n /* fix for FF unable to apply focus style bug */\r\n border: 1px solid white;\r\n\r\n /*required for proper track sizing in FF*/\r\n}\r\n\r\ninput[type=range]::-moz-range-track {\r\n @include range-track;\r\n}\r\n\r\ninput[type=range]::-moz-focus-inner {\r\n border: 0;\r\n}\r\n\r\ninput[type=range]::-moz-range-thumb {\r\n @include range-thumb;\r\n margin-top: -5px;\r\n}\r\n\r\n// hide the outline behind the border\r\ninput[type=range]:-moz-focusring {\r\n outline: 1px solid #fff;\r\n outline-offset: -1px;\r\n}\r\n\r\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\r\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\r\n}\r\n\r\n// IE 10+\r\ninput[type=range]::-ms-track {\r\n height: $track-height;\r\n\r\n // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead\r\n background: transparent;\r\n\r\n // leave room for the larger thumb to overflow with a transparent border */\r\n border-color: transparent;\r\n border-width: 6px 0;\r\n\r\n /*remove default tick marks*/\r\n color: transparent;\r\n}\r\n\r\ninput[type=range]::-ms-fill-lower {\r\n background: #777;\r\n}\r\n\r\ninput[type=range]::-ms-fill-upper {\r\n background: #ddd;\r\n}\r\n\r\ninput[type=range]::-ms-thumb {\r\n @include range-thumb;\r\n}\r\n\r\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\r\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\r\n}\r\n",".parallax {\r\n\r\n /* Set a specific height */\r\n min-height: 500px;\r\n\r\n /* Create the parallax scrolling effect */\r\n background-attachment: fixed;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n}","$cube-height:200px;\r\n* { box-sizing: border-box; }\r\n\r\nbody { font-family: sans-serif; }\r\n\r\n.scene {\r\n width: $cube-height;\r\n height: $cube-height;\r\n border: 1px solid #CCC;\r\n margin: 80px;\r\n perspective: 400px;\r\n}\r\n\r\n.cube {\r\n width: $cube-height;\r\n height: $cube-height;\r\n position: relative;\r\n transform-style: preserve-3d;\r\n transform: translateZ(-400px);\r\n transition: transform 1s;\r\n}\r\n\r\n.cube.show-front { transform: translateZ(-10px) rotateY( 0deg); }\r\n.cube.show-right { transform: translateZ(-10px) rotateY( -90deg); }\r\n.cube.show-back { transform: translateZ(-10px) rotateY(-180deg); }\r\n.cube.show-left { transform: translateZ(-10px) rotateY( 90deg); }\r\n.cube.show-top { transform: translateZ(-10px) rotateX( -90deg); }\r\n.cube.show-bottom { transform: translateZ(-10px) rotateX( 90deg); }\r\n\r\n.cube__face {\r\n position: absolute;\r\n width: $cube-height;\r\n height: $cube-height;\r\n border: 2px solid black;\r\n line-height: $cube-height;\r\n font-size: 40px;\r\n font-weight: bold;\r\n color: white;\r\n text-align: center;\r\n}\r\n\r\n.cube__face--front { background: hsla( 0, 100%, 50%, 0.7); }\r\n.cube__face--right { background: hsla( 60, 100%, 50%, 0.7); }\r\n.cube__face--back { background: hsla(120, 100%, 50%, 0.7); }\r\n.cube__face--left { background: hsla(180, 100%, 50%, 0.7); }\r\n.cube__face--top { background: hsla(240, 100%, 50%, 0.7); }\r\n.cube__face--bottom { background: hsla(300, 100%, 50%, 0.7); }\r\n\r\n.cube__face--front { transform: rotateY( 0deg) translateZ(100px); }\r\n.cube__face--right { transform: rotateY( 90deg) translateZ(100px); }\r\n.cube__face--back { transform: rotateY(180deg) translateZ(100px); }\r\n.cube__face--left { transform: rotateY(-90deg) translateZ(100px); }\r\n.cube__face--top { transform: rotateX( 90deg) translateZ(100px); }\r\n.cube__face--bottom { transform: rotateX(-90deg) translateZ(100px); }\r\n\r\nlabel { margin-right: 10px; }","@use \"sass:math\";\r\n.container {\r\n margin: 0 auto;\r\n max-width: 1280px;\r\n width: 90%;\r\n}\r\n@media #{$medium-and-up} {\r\n .container {\r\n width: 85%;\r\n }\r\n}\r\n@media #{$large-and-up} {\r\n .container {\r\n width: 70%;\r\n }\r\n}\r\n.col .row {\r\n margin-left: math.div(-1 * $gutter-width , 2);\r\n margin-right: math.div(-1 * $gutter-width , 2);\r\n}\r\n\r\n.section {\r\n padding-top: 1rem;\r\n padding-bottom: 1rem;\r\n\r\n &.no-pad {\r\n padding: 0;\r\n }\r\n &.no-pad-bot {\r\n padding-bottom: 0;\r\n }\r\n &.no-pad-top {\r\n padding-top: 0;\r\n }\r\n}\r\n\r\n\r\n// Mixins to eliminate code repitition\r\n@mixin reset-offset {\r\n margin-left: auto;\r\n left: auto;\r\n right: auto;\r\n}\r\n@mixin grid-classes($size, $i, $perc) {\r\n &.offset-#{$size}#{$i} {\r\n margin-left: $perc;\r\n }\r\n &.pull-#{$size}#{$i} {\r\n right: $perc;\r\n }\r\n &.push-#{$size}#{$i} {\r\n left: $perc;\r\n }\r\n}\r\n\r\n\r\n.row {\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-bottom: 20px;\r\n\r\n // Clear floating children\r\n &:after {\r\n content: \"\";\r\n display: table;\r\n clear: both;\r\n }\r\n\r\n .col {\r\n float: left;\r\n box-sizing: border-box;\r\n padding: 0 math.div($gutter-width , 2);\r\n min-height: 1px;\r\n\r\n &[class*=\"push-\"],\r\n &[class*=\"pull-\"] {\r\n position: relative;\r\n }\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n &.s#{$i} {\r\n width: $perc;\r\n @include reset-offset;\r\n }\r\n $i: $i + 1;\r\n }\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n @include grid-classes(\"s\", $i, $perc);\r\n $i: $i + 1;\r\n }\r\n\r\n @media #{$medium-and-up} {\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n &.m#{$i} {\r\n width: $perc;\r\n @include reset-offset;\r\n }\r\n $i: $i + 1\r\n }\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n @include grid-classes(\"m\", $i, $perc);\r\n $i: $i + 1;\r\n }\r\n }\r\n\r\n @media #{$large-and-up} {\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n &.l#{$i} {\r\n width: $perc;\r\n @include reset-offset;\r\n }\r\n $i: $i + 1;\r\n }\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n @include grid-classes(\"l\", $i, $perc);\r\n $i: $i + 1;\r\n }\r\n }\r\n\r\n @media #{$extra-large-and-up} {\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n &.xl#{$i} {\r\n width: $perc;\r\n @include reset-offset;\r\n }\r\n $i: $i + 1;\r\n }\r\n\r\n $i: 1;\r\n @while $i <= $num-cols {\r\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\r\n @include grid-classes(\"xl\", $i, $perc);\r\n $i: $i + 1;\r\n }\r\n }\r\n }\r\n}\r\n","@use \"sass:math\";\r\nsvg{\r\n //fill:red;\r\n}\r\n.sidenav {\r\n position: fixed;\r\n width: $sidenav-width;\r\n left: 0;\r\n top: 0;\r\n margin: 0;\r\n //transform: translateX(-100%);\r\n height: 100%;\r\n height: calc(100% + 60px);\r\n height: -moz-calc(100%); //Temporary Firefox Fix\r\n padding-bottom: 60px;\r\n background-color: $sidenav-bg-color;\r\n z-index: 999;\r\n overflow-y: auto;\r\n will-change: transform;\r\n backface-visibility: hidden;\r\n transform: translateX(-105%);\r\n transition: transform 1s;\r\n\r\n //@extend .shadow-1;\r\n\r\n // Right Align\r\n &.right-aligned {\r\n right: 0;\r\n //transform: translateX(105%);\r\n left: auto;\r\n transform: translateX(100%);\r\n }\r\n\r\n .collapsible {\r\n margin: 0;\r\n }\r\n\r\n\r\n li {\r\n float: none;\r\n //line-height: $sidenav-line-height;\r\n // margin: 15px 0;\r\n // height: 45px;\r\n .iconSideLink {\r\n display: flex;\r\n align-items: center;\r\n \r\n svg {\r\n //stroke:rgba(0, 0, 0, 0.2);\r\n // fill: white;\r\n stroke:rgba(0, 0, 0, 0.2);\r\n width: 30px;\r\n }\r\n \r\n }\r\n &.active {\r\n background-color: rgba(0, 0, 0, 0.05);\r\n svg {\r\n stroke: white!important;\r\n //fill: white!important;\r\n width: 30px;\r\n }\r\n }\r\n\r\n &.last {\r\n position: sticky;\r\n top: calc(100% - #{$sidenav-item-height} - 35px);\r\n }\r\n }\r\n\r\n li > a {\r\n color: $sidenav-font-color;\r\n display: flex;\r\n font-size: $sidenav-font-size;\r\n font-weight: 700;\r\n height: $sidenav-item-height;\r\n line-height: $sidenav-line-height;\r\n padding: 0 ($sidenav-padding * 2);\r\n\r\n &:hover {\r\n background-color: rgba(0, 0, 0, 0.05);\r\n }\r\n\r\n &.btn,\r\n &.btn-large,\r\n &.btn-flat,\r\n &.btn-floating {\r\n margin: 10px 15px;\r\n }\r\n\r\n &.btn,\r\n &.btn-large,\r\n &.btn-floating {\r\n color: $button-raised-color;\r\n }\r\n\r\n &.btn-flat {\r\n color: $button-flat-color;\r\n }\r\n\r\n &.btn:hover,\r\n &.btn-large:hover {\r\n background-color: lighten($button-raised-background, 5%);\r\n }\r\n\r\n &.btn-floating:hover {\r\n background-color: $button-raised-background;\r\n }\r\n\r\n & > i,\r\n & > [class^=\"mdi-\"],\r\n li > a > [class*=\"mdi-\"],\r\n & > i.s-icon {\r\n float: left;\r\n height: $sidenav-item-height;\r\n line-height: $sidenav-line-height;\r\n margin: 0 ($sidenav-padding * 2) 0 0;\r\n width: math.div($sidenav-item-height, 2);\r\n color: rgba(0, 0, 0, 0.54);\r\n }\r\n }\r\n\r\n .divider {\r\n margin: math.div($sidenav-padding, 2) 0 0 0;\r\n }\r\n\r\n .subheader {\r\n &:hover {\r\n background-color: transparent;\r\n }\r\n\r\n cursor: initial;\r\n pointer-events: none;\r\n color: rgba(0, 0, 0, 0.54);\r\n font-size: $sidenav-font-size;\r\n font-weight: 500;\r\n line-height: $sidenav-line-height;\r\n }\r\n\r\n .user-view {\r\n position: relative;\r\n padding: ($sidenav-padding * 2) ($sidenav-padding * 2) 0;\r\n margin-bottom: math.div($sidenav-padding, 2);\r\n\r\n & > a {\r\n &:hover {\r\n background-color: transparent;\r\n }\r\n\r\n height: auto;\r\n padding: 0;\r\n }\r\n\r\n .background {\r\n overflow: hidden;\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: -1;\r\n }\r\n\r\n .circle,\r\n .name,\r\n .email {\r\n display: block;\r\n }\r\n\r\n .circle {\r\n height: 64px;\r\n width: 64px;\r\n }\r\n\r\n .name,\r\n .email {\r\n font-size: $sidenav-font-size;\r\n line-height: math.div($sidenav-line-height, 2);\r\n }\r\n\r\n .name {\r\n margin-top: 16px;\r\n font-weight: 500;\r\n }\r\n\r\n .email {\r\n padding-bottom: 16px;\r\n font-weight: 400;\r\n }\r\n }\r\n}\r\n\r\n// Touch interaction\r\n.drag-target {\r\n // Right Align\r\n &.right-aligned {\r\n right: 0;\r\n }\r\n\r\n height: 100%;\r\n width: 10px;\r\n position: fixed;\r\n top: 0;\r\n z-index: 998;\r\n}\r\n\r\n// Fixed Sidenav shown\r\n.sidenav.sidenav-fixed {\r\n // Right Align\r\n &.right-aligned {\r\n right: 0;\r\n left: auto;\r\n }\r\n\r\n left: 0;\r\n transform: translateX(0);\r\n position: fixed;\r\n}\r\n\r\n// Fixed Sidenav hide on smaller\r\n@media #{$medium-and-down} {\r\n .sidenav {\r\n &.sidenav-fixed {\r\n transform: translateX(-105%);\r\n\r\n &.right-aligned {\r\n transform: translateX(105%);\r\n }\r\n }\r\n\r\n > a {\r\n padding: 0 $sidenav-padding;\r\n }\r\n\r\n .user-view {\r\n padding: $sidenav-padding $sidenav-padding 0;\r\n }\r\n }\r\n}\r\n\r\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\r\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\r\n background-color: $primary-color;\r\n\r\n a {\r\n color: $sidenav-bg-color;\r\n }\r\n}\r\n\r\n.sidenav .collapsible-body {\r\n padding: 0;\r\n}\r\n\r\n.sidenav-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n opacity: 0;\r\n height: 120vh;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n z-index: 997;\r\n display: none;\r\n}\r\n\r\n\r\n\r\n\r\n .with-side-nav-open{\r\n padding-left: 300px;\r\n transition: padding 1s;\r\n }\r\n","// shared styles\r\n\r\n.btn,\r\n.btn-flat {\r\n border: $button-border;\r\n border-radius: $button-radius;\r\n display: inline-block;\r\n height: $button-height;\r\n line-height: $button-height;\r\n padding: $button-padding;\r\n text-transform: uppercase;\r\n vertical-align: middle;\r\n -webkit-tap-highlight-color: transparent; // Gets rid of tap active state\r\n}\r\n\r\n// Disabled shared style\r\n.btn.disabled,\r\n.btn-floating.disabled,\r\n.btn-large.disabled,\r\n.btn-small.disabled,\r\n.btn-flat.disabled,\r\n.btn:disabled,\r\n.btn-floating:disabled,\r\n.btn-large:disabled,\r\n.btn-small:disabled,\r\n.btn-flat:disabled,\r\n.btn[disabled],\r\n.btn-floating[disabled],\r\n.btn-large[disabled],\r\n.btn-small[disabled],\r\n.btn-flat[disabled] {\r\n pointer-events: none;\r\n background-color: $button-disabled-background !important;\r\n box-shadow: none;\r\n color: $button-disabled-color !important;\r\n cursor: default;\r\n &:hover {\r\n background-color: $button-disabled-background !important;\r\n color: $button-disabled-color !important;\r\n }\r\n}\r\n\r\n// Shared icon styles\r\n.btn,\r\n.btn-floating,\r\n.btn-large,\r\n.btn-small,\r\n.btn-flat {\r\n font-size: $button-font-size;\r\n outline: 0;\r\n i {\r\n font-size: $button-icon-font-size;\r\n line-height: inherit;\r\n }\r\n}\r\n\r\n// Shared focus button style\r\n.btn,\r\n.btn-floating {\r\n &:focus {\r\n background-color: darken($button-raised-background, 10%);\r\n }\r\n}\r\n\r\n// Raised Button\r\n.btn {\r\n text-decoration: none;\r\n color: $button-raised-color;\r\n background-color: $button-raised-background;\r\n text-align: center;\r\n letter-spacing: .5px;\r\n @extend .shadow-1;\r\n transition: background-color .2s ease-out;\r\n cursor: pointer;\r\n &:hover {\r\n background-color: $button-raised-background-hover;\r\n @extend .shadow-1-half;\r\n }\r\n}\r\n\r\n// Floating button\r\n.btn-floating {\r\n &:hover {\r\n background-color: $button-floating-background-hover;\r\n @extend .shadow-1-half;\r\n }\r\n &:before {\r\n border-radius: 0;\r\n }\r\n &.btn-large {\r\n &.halfway-fab {\r\n bottom: calc($button-floating-large-size / 2);\r\n }\r\n width: $button-floating-large-size;\r\n height: $button-floating-large-size;\r\n padding: 0;\r\n i {\r\n line-height: $button-floating-large-size;\r\n }\r\n }\r\n\r\n &.btn-small {\r\n &.halfway-fab {\r\n bottom: calc($button-floating-small-size / 2);\r\n }\r\n width: $button-floating-small-size;\r\n height: $button-floating-small-size;\r\n i {\r\n line-height: $button-floating-small-size;\r\n }\r\n }\r\n\r\n &.halfway-fab {\r\n &.left {\r\n right: auto;\r\n left: 24px;\r\n }\r\n position: absolute;\r\n right: 24px;\r\n bottom: calc($button-floating-size / 2);\r\n }\r\n display: inline-block;\r\n color: $button-floating-color;\r\n position: relative;\r\n overflow: hidden;\r\n z-index: 1;\r\n width: $button-floating-size;\r\n height: $button-floating-size;\r\n line-height: $button-floating-size;\r\n padding: 0;\r\n background-color: $button-floating-background;\r\n border-radius: $button-floating-radius;\r\n @extend .shadow-1;\r\n transition: background-color .3s;\r\n cursor: pointer;\r\n vertical-align: middle;\r\n i {\r\n width: inherit;\r\n display: inline-block;\r\n text-align: center;\r\n color: $button-floating-color;\r\n font-size: $button-large-icon-font-size;\r\n line-height: $button-floating-size;\r\n }\r\n}\r\n\r\n// button fix\r\nbutton.btn-floating {\r\n border: $button-border;\r\n}\r\n\r\n// Fixed Action Button\r\n.fixed-action-btn {\r\n &.active {\r\n ul {\r\n visibility: visible;\r\n }\r\n }\r\n\r\n // Directions\r\n &.direction-left,\r\n &.direction-right {\r\n padding: 0 0 0 15px;\r\n ul {\r\n text-align: right;\r\n right: 64px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n height: 100%;\r\n left: auto;\r\n /*width 100% only goes to width of button container */\r\n width: 500px;\r\n li {\r\n display: inline-block;\r\n margin: 7.5px 15px 0 0;\r\n }\r\n }\r\n }\r\n &.direction-right {\r\n padding: 0 15px 0 0;\r\n ul {\r\n text-align: left;\r\n direction: rtl;\r\n left: 64px;\r\n right: auto;\r\n li {\r\n margin: 7.5px 0 0 15px;\r\n }\r\n }\r\n }\r\n &.direction-bottom {\r\n padding: 0 0 15px 0;\r\n ul {\r\n top: 64px;\r\n bottom: auto;\r\n display: flex;\r\n flex-direction: column-reverse;\r\n li {\r\n margin: 15px 0 0 0;\r\n }\r\n }\r\n }\r\n &.toolbar {\r\n &.active {\r\n &>a i {\r\n opacity: 0;\r\n }\r\n }\r\n padding: 0;\r\n height: $button-floating-large-size;\r\n ul {\r\n display: flex;\r\n top: 0;\r\n bottom: 0;\r\n z-index: 1;\r\n li {\r\n flex: 1;\r\n display: inline-block;\r\n margin: 0;\r\n height: 100%;\r\n transition: none;\r\n a {\r\n display: block;\r\n overflow: hidden;\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n background-color: transparent;\r\n box-shadow: none;\r\n color: #fff;\r\n line-height: $button-floating-large-size;\r\n z-index: 1;\r\n i {\r\n line-height: inherit;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n position: fixed;\r\n right: 23px;\r\n bottom: 23px;\r\n padding-top: 15px;\r\n margin-bottom: 0;\r\n z-index: 997;\r\n ul {\r\n left: 0;\r\n right: 0;\r\n text-align: center;\r\n position: absolute;\r\n bottom: 64px;\r\n margin: 0;\r\n visibility: hidden;\r\n li {\r\n margin-bottom: 15px;\r\n }\r\n a.btn-floating {\r\n opacity: 0;\r\n }\r\n }\r\n .fab-backdrop {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n width: $button-floating-size;\r\n height: $button-floating-size;\r\n background-color: $button-floating-background;\r\n border-radius: $button-floating-radius;\r\n transform: scale(0);\r\n }\r\n}\r\n\r\n// Flat button\r\n.btn-flat {\r\n box-shadow: none;\r\n background-color: transparent;\r\n color: $button-flat-color;\r\n cursor: pointer;\r\n transition: background-color .2s;\r\n &:focus,\r\n &:hover {\r\n box-shadow: none;\r\n }\r\n &:focus {\r\n background-color: rgba(0, 0, 0, .1);\r\n }\r\n &.disabled,\r\n &.btn-flat[disabled] {\r\n background-color: transparent !important;\r\n color: $button-flat-disabled-color !important;\r\n cursor: default;\r\n }\r\n}\r\n\r\n// Large button\r\n.btn-large {\r\n @extend .btn;\r\n height: $button-large-height;\r\n line-height: $button-large-height;\r\n font-size: $button-large-font-size;\r\n padding: 0 28px;\r\n\r\n i {\r\n font-size: $button-large-icon-font-size;\r\n }\r\n}\r\n\r\n// Small button\r\n.btn-small {\r\n @extend .btn;\r\n height: $button-small-height;\r\n line-height: $button-small-height;\r\n font-size: $button-small-font-size;\r\n i {\r\n font-size: $button-small-icon-font-size;\r\n }\r\n}\r\n\r\n// Block button\r\n.btn-block {\r\n display: block;\r\n}\r\n","$mainColor:#0062d6;\r\n$othermain:#034d82;\r\n$secondColor:#0077FA;\r\n$thirdColor:#09bddd;\r\n$forthColor:#cbe7fe;\r\n\r\n$tab1: $forthColor;\r\n$tab2: darken($forthColor,15%);\r\n$tab3: darken($forthColor,30%);\r\n\r\n.communTabHeader {\r\n height: 100px;\r\n padding: 40px;\r\n}\r\n\r\n.tabs {\r\n min-height: calc(100% - 150px);\r\n margin-top: 30px;\r\n padding:0!important;\r\n border-radius: 40px!important;\r\n.innerpage{\r\n min-height: 70VH!important;\r\n}\r\n .tabs-header-overlay {\r\n display: flex;\r\n height: 100px;\r\n }\r\n\r\n &.activeTab-0 {\r\n .tab-header-over0 {\r\n flex: 1;\r\n background-color: $tab2;\r\n border-radius: 40px 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab1;\r\n border-radius: 40px 40px 0 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over1 {\r\n flex: 1;\r\n background: linear-gradient(0.25turn, $tab1, $tab3);\r\n border-radius: 0 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab2;\r\n border-radius: 0 40px 0 40px;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over2 {\r\n flex: 1;\r\n background-color: $tab2;\r\n border-radius: 0 40px 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab3;\r\n border-radius: 0 40px 0 40px;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n }\r\n\r\n &.activeTab-1 {\r\n .tab-header-over0 {\r\n flex: 1;\r\n background-color: $tab1;\r\n //linear-gradient(0.25turn, $tab1, $tab1);\r\n //linear-gradient(0.25turn, $tab1, $tab1);\r\n border-radius: 40px 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab2;\r\n // border-radius: 40px 40px 0 0;\r\n border-radius: 40px 0 40px 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over1 {\r\n flex: 1;\r\n background: linear-gradient(0.25turn, $tab2, $tab3);\r\n //$tab2;\r\n //border-radius: 40px 0 0;\r\n border-radius: 0 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab1;\r\n border-radius: 40px 40px 0 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over2 {\r\n flex: 1;\r\n background-color: $tab1;\r\n border-radius: 0 40px 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab3;\r\n border-radius: 0 40px 0 40px;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n }\r\n\r\n\r\n &.activeTab-2 {\r\n .tab-header-over0 {\r\n flex: 1;\r\n background-color: $tab3;\r\n //linear-gradient(0.25turn, $tab1, $tab1);\r\n //linear-gradient(0.25turn, $tab1, $tab1);\r\n border-radius: 40px 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab2;\r\n // border-radius: 40px 40px 0 0;\r\n border-radius: 40px 0 40px 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over1 {\r\n flex: 1;\r\n background: linear-gradient(0.25turn, $tab2, $tab1);\r\n //$tab2;\r\n //border-radius: 40px 0 0;\r\n border-radius: 0 0 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab3;\r\n border-radius: 40px 0 40px 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n\r\n .tab-header-over2 {\r\n flex: 1;\r\n background-color: $tab3;\r\n border-radius: 0 40px 0 0;\r\n\r\n .tab-header {\r\n background-color: $tab1;\r\n border-radius: 40px 40px 0 0;\r\n @extend .communTabHeader;\r\n }\r\n }\r\n }\r\n\r\n .tab-content {\r\n background-color: $tab1;\r\n padding: 10px;\r\n //border: 1px solid rgb(207, 205, 205);\r\n border-top: 0;\r\n min-height: 70vh;\r\n border-radius: 0 0 40px 40px;\r\n padding-bottom: 20px;\r\n \r\n }\r\n}\r\n\r\n// .tabs {\r\n// // display: flex;\r\n// // flex-direction: column;\r\n// .tabs-header-overlay {\r\n// display: flex;\r\n// height: 100px;\r\n\r\n// .tab-header-over {\r\n// flex: 1;\r\n// background-color: hotpink;\r\n// border-radius: 0 40px 0 0;\r\n// &.active {\r\n// background-color: rgb(155, 152, 153);\r\n// border-radius: 40px 0 0 0;\r\n// }\r\n// .tab-header {\r\n// &.active {\r\n// background-color: hotpink;\r\n// border-radius: 40px 40px 0 0;\r\n// }\r\n// border-radius: 0px 40px 0 40px;\r\n// padding: 40px;\r\n// background-color: rgb(155, 152, 153);\r\n// }\r\n// }\r\n// }\r\n\r\n// .tab-content {\r\n// background-color: hotpink;\r\n// padding: 10px;\r\n// border: 1px solid rgb(207, 205, 205);\r\n// border-top: 0;\r\n// }\r\n// }\r\n",".loader-overlay {\r\n z-index: 999;\r\n position: absolute;\r\n height: 100vh;\r\n width: 100vw;\r\n top: 0;\r\n left: 0;\r\n background-color: rgba(102, 100, 100, 0.603);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n .loader {\r\n border: 7px solid #f3f3f3; /* Light grey */\r\n border-top: 7px solid #2ea2cc; /* Blue */\r\n border-radius: 50%;\r\n width: 70px;\r\n height: 70px;\r\n animation: spin 2s linear infinite;\r\n }\r\n .loader-text{\r\n margin-top: 20px;\r\n font-size: 25px;\r\n color: #2ea2cc;\r\n }\r\n\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n}\r\n","\r\n\r\n.card-panel {\r\n transition: box-shadow .25s;\r\n padding: $card-padding;\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n border-radius: 2px;\r\n @extend .shadow-1;\r\n background-color: $card-bg-color;\r\n}\r\n\r\n.card {\r\n position: relative;\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n background-color: $card-bg-color;\r\n transition: box-shadow .25s;\r\n border-radius: 2px;\r\n @extend .shadow-1;\r\n\r\n\r\n .card-title {\r\n font-size: 24px;\r\n font-weight: 300;\r\n &.activator {\r\n cursor: pointer;\r\n }\r\n }\r\n\r\n // Card Sizes\r\n &.small, &.medium, &.large {\r\n position: relative;\r\n\r\n .card-image {\r\n max-height: 60%;\r\n overflow: hidden;\r\n }\r\n .card-image + .card-content {\r\n max-height: 40%;\r\n }\r\n .card-content {\r\n max-height: 100%;\r\n overflow: hidden;\r\n }\r\n .card-action {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n }\r\n }\r\n\r\n &.small {\r\n height: 300px;\r\n }\r\n\r\n &.medium {\r\n height: 400px;\r\n }\r\n\r\n &.large {\r\n height: 500px;\r\n }\r\n\r\n // Horizontal Cards\r\n &.horizontal {\r\n &.small, &.medium, &.large {\r\n .card-image {\r\n height: 100%;\r\n max-height: none;\r\n overflow: visible;\r\n\r\n img {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n\r\n display: flex;\r\n\r\n .card-image {\r\n max-width: 50%;\r\n img {\r\n border-radius: 2px 0 0 2px;\r\n max-width: 100%;\r\n width: auto;\r\n }\r\n }\r\n\r\n .card-stacked {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n position: relative;\r\n\r\n .card-content {\r\n flex-grow: 1;\r\n }\r\n }\r\n }\r\n\r\n // Sticky Action Section\r\n &.sticky-action {\r\n .card-action {\r\n z-index: 2;\r\n }\r\n\r\n .card-reveal {\r\n z-index: 1;\r\n padding-bottom: 64px;\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n .card-image {\r\n position: relative;\r\n\r\n // Image background for content\r\n img {\r\n display: block;\r\n border-radius: 2px 2px 0 0;\r\n position: relative;\r\n left: 0;\r\n right: 0;\r\n top: 0;\r\n bottom: 0;\r\n width: 100%;\r\n }\r\n\r\n .card-title {\r\n color: $card-bg-color;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n max-width: 100%;\r\n padding: $card-padding;\r\n }\r\n }\r\n\r\n .card-content {\r\n padding: $card-padding;\r\n border-radius: 0 0 2px 2px;\r\n\r\n p {\r\n margin: 0;\r\n }\r\n .card-title {\r\n display: block;\r\n line-height: 32px;\r\n margin-bottom: 8px;\r\n\r\n i {\r\n line-height: 32px;\r\n }\r\n }\r\n }\r\n\r\n .card-action {\r\n &:last-child {\r\n border-radius: 0 0 2px 2px;\r\n }\r\n background-color: inherit; // Use inherit to inherit color classes\r\n border-top: 1px solid rgba(160,160,160,.2);\r\n position: relative;\r\n padding: 16px $card-padding;\r\n\r\n a:not(.btn):not(.btn-large):not(.btn-floating) {\r\n color: $card-link-color;\r\n margin-right: $card-padding;\r\n transition: color .3s ease;\r\n text-transform: uppercase;\r\n\r\n &:hover { color: $card-link-color-light; }\r\n }\r\n }\r\n\r\n .card-reveal {\r\n padding: $card-padding;\r\n position: absolute;\r\n background-color: $card-bg-color;\r\n width: 100%;\r\n overflow-y: auto;\r\n left: 0;\r\n top: 100%;\r\n height: 100%;\r\n z-index: 3;\r\n display: none;\r\n\r\n .card-title {\r\n cursor: pointer;\r\n display: block;\r\n }\r\n }\r\n}\r\n","/*\r\n @license\r\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\r\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n Code distributed by Google as part of the polymer project is also\r\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n/**************************/\r\n/* STYLES FOR THE SPINNER */\r\n/**************************/\r\n\r\n/*\r\n * Constants:\r\n * STROKEWIDTH = 3px\r\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\r\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\r\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\r\n * should rotate each time, 216 gives us a\r\n * 5 pointed star shape (it's 360/5 * 3).\r\n * For a 7 pointed star, we might do\r\n * 360/7 * 3 = 154.286)\r\n * CONTAINERWIDTH = 28px\r\n * SHRINK_TIME = 400ms\r\n */\r\n\r\n\r\n.preloader-wrapper {\r\n display: inline-block;\r\n position: relative;\r\n width: 50px;\r\n height: 50px;\r\n\r\n &.small {\r\n width: 36px;\r\n height: 36px;\r\n }\r\n\r\n &.big {\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n &.active {\r\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\r\n -webkit-animation: container-rotate 1568ms linear infinite;\r\n animation: container-rotate 1568ms linear infinite;\r\n }\r\n}\r\n\r\n@-webkit-keyframes container-rotate {\r\n to { -webkit-transform: rotate(360deg) }\r\n}\r\n\r\n@keyframes container-rotate {\r\n to { transform: rotate(360deg) }\r\n}\r\n\r\n.spinner-layer {\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n opacity: 0;\r\n border-color: $spinner-default-color;\r\n}\r\n\r\n.spinner-blue,\r\n.spinner-blue-only {\r\n border-color: #4285f4;\r\n}\r\n\r\n.spinner-red,\r\n.spinner-red-only {\r\n border-color: #db4437;\r\n}\r\n\r\n.spinner-yellow,\r\n.spinner-yellow-only {\r\n border-color: #f4b400;\r\n}\r\n\r\n.spinner-green,\r\n.spinner-green-only {\r\n border-color: #0f9d58;\r\n}\r\n\r\n/**\r\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\r\n *\r\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\r\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\r\n * animation-delay and instead set custom keyframes for each color (as redundant as it\r\n * seems).\r\n *\r\n * We write out each animation in full (instead of separating animation-name,\r\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\r\n * specific properties properly, treats them as -webkit-animation, and overrides the\r\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\r\n */\r\n.active .spinner-layer.spinner-blue {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-red {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-yellow {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-green {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer,\r\n.active .spinner-layer.spinner-blue-only,\r\n.active .spinner-layer.spinner-red-only,\r\n.active .spinner-layer.spinner-yellow-only,\r\n.active .spinner-layer.spinner-green-only {\r\n /* durations: 4 * ARCTIME */\r\n opacity: 1;\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n@-webkit-keyframes fill-unfill-rotate {\r\n 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */\r\n 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */\r\n 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */\r\n 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */\r\n 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */\r\n 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */\r\n 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */\r\n to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */\r\n}\r\n\r\n@keyframes fill-unfill-rotate {\r\n 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */\r\n 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */\r\n 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */\r\n 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */\r\n 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */\r\n 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */\r\n 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */\r\n to { transform: rotate(1080deg); } /* 4 * ARCSIZE */\r\n}\r\n\r\n@-webkit-keyframes blue-fade-in-out {\r\n from { opacity: 1; }\r\n 25% { opacity: 1; }\r\n 26% { opacity: 0; }\r\n 89% { opacity: 0; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 1; }\r\n}\r\n\r\n@keyframes blue-fade-in-out {\r\n from { opacity: 1; }\r\n 25% { opacity: 1; }\r\n 26% { opacity: 0; }\r\n 89% { opacity: 0; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 1; }\r\n}\r\n\r\n@-webkit-keyframes red-fade-in-out {\r\n from { opacity: 0; }\r\n 15% { opacity: 0; }\r\n 25% { opacity: 1; }\r\n 50% { opacity: 1; }\r\n 51% { opacity: 0; }\r\n}\r\n\r\n@keyframes red-fade-in-out {\r\n from { opacity: 0; }\r\n 15% { opacity: 0; }\r\n 25% { opacity: 1; }\r\n 50% { opacity: 1; }\r\n 51% { opacity: 0; }\r\n}\r\n\r\n@-webkit-keyframes yellow-fade-in-out {\r\n from { opacity: 0; }\r\n 40% { opacity: 0; }\r\n 50% { opacity: 1; }\r\n 75% { opacity: 1; }\r\n 76% { opacity: 0; }\r\n}\r\n\r\n@keyframes yellow-fade-in-out {\r\n from { opacity: 0; }\r\n 40% { opacity: 0; }\r\n 50% { opacity: 1; }\r\n 75% { opacity: 1; }\r\n 76% { opacity: 0; }\r\n}\r\n\r\n@-webkit-keyframes green-fade-in-out {\r\n from { opacity: 0; }\r\n 65% { opacity: 0; }\r\n 75% { opacity: 1; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n@keyframes green-fade-in-out {\r\n from { opacity: 0; }\r\n 65% { opacity: 0; }\r\n 75% { opacity: 1; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n/**\r\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\r\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\r\n */\r\n.gap-patch {\r\n position: absolute;\r\n top: 0;\r\n left: 45%;\r\n width: 10%;\r\n height: 100%;\r\n overflow: hidden;\r\n border-color: inherit;\r\n}\r\n\r\n.gap-patch .circle {\r\n width: 1000%;\r\n left: -450%;\r\n}\r\n\r\n.circle-clipper {\r\n display: inline-block;\r\n position: relative;\r\n width: 50%;\r\n height: 100%;\r\n overflow: hidden;\r\n border-color: inherit;\r\n\r\n .circle {\r\n width: 200%;\r\n height: 100%;\r\n border-width: 3px; /* STROKEWIDTH */\r\n border-style: solid;\r\n border-color: inherit;\r\n border-bottom-color: transparent !important;\r\n border-radius: 50%;\r\n -webkit-animation: none;\r\n animation: none;\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n }\r\n\r\n &.left .circle {\r\n left: 0;\r\n border-right-color: transparent !important;\r\n -webkit-transform: rotate(129deg);\r\n transform: rotate(129deg);\r\n }\r\n &.right .circle {\r\n left: -100%;\r\n border-left-color: transparent !important;\r\n -webkit-transform: rotate(-129deg);\r\n transform: rotate(-129deg);\r\n }\r\n}\r\n\r\n\r\n\r\n.active .circle-clipper.left .circle {\r\n /* duration: ARCTIME */\r\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .circle-clipper.right .circle {\r\n /* duration: ARCTIME */\r\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n@-webkit-keyframes left-spin {\r\n from { -webkit-transform: rotate(130deg); }\r\n 50% { -webkit-transform: rotate(-5deg); }\r\n to { -webkit-transform: rotate(130deg); }\r\n}\r\n\r\n@keyframes left-spin {\r\n from { transform: rotate(130deg); }\r\n 50% { transform: rotate(-5deg); }\r\n to { transform: rotate(130deg); }\r\n}\r\n\r\n@-webkit-keyframes right-spin {\r\n from { -webkit-transform: rotate(-130deg); }\r\n 50% { -webkit-transform: rotate(5deg); }\r\n to { -webkit-transform: rotate(-130deg); }\r\n}\r\n\r\n@keyframes right-spin {\r\n from { transform: rotate(-130deg); }\r\n 50% { transform: rotate(5deg); }\r\n to { transform: rotate(-130deg); }\r\n}\r\n\r\n#spinnerContainer.cooldown {\r\n /* duration: SHRINK_TIME */\r\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);\r\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);\r\n}\r\n\r\n@-webkit-keyframes fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n}\r\n\r\n@keyframes fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n}\r\n","\r\n// Progress Bar\r\n.progress {\r\n position: relative;\r\n height: 4px;\r\n display: block;\r\n width: 100%;\r\n background-color: lighten($progress-bar-color, 40%);\r\n border-radius: 2px;\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n overflow: hidden;\r\n .determinate {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n background-color: $progress-bar-color;\r\n transition: width .3s linear;\r\n }\r\n .indeterminate {\r\n background-color: $progress-bar-color;\r\n &:before {\r\n content: '';\r\n position: absolute;\r\n background-color: inherit;\r\n top: 0;\r\n left:0;\r\n bottom: 0;\r\n will-change: left, right;\r\n // Custom bezier\r\n animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite;\r\n\r\n }\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n background-color: inherit;\r\n top: 0;\r\n left:0;\r\n bottom: 0;\r\n will-change: left, right;\r\n // Custom bezier\r\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite;\r\n animation-delay: 1.15s;\r\n }\r\n }\r\n}\r\n@keyframes indeterminate {\r\n 0% {\r\n left: -35%;\r\n right:100%;\r\n }\r\n 60% {\r\n left: 100%;\r\n right: -90%;\r\n }\r\n 100% {\r\n left: 100%;\r\n right: -90%;\r\n }\r\n}\r\n\r\n@keyframes indeterminate-short {\r\n 0% {\r\n left: -200%;\r\n right: 100%;\r\n }\r\n 60% {\r\n left: 107%;\r\n right: -8%;\r\n }\r\n 100% {\r\n left: 107%;\r\n right: -8%;\r\n }\r\n}\r\n\r\n",".flash-message {\r\n position: absolute;\r\n padding: 2px 10px;\r\n border-radius: 5px;\r\n z-index: 99999;\r\n right: 0;\r\n bottom: 0;\r\n font-size: 14px;\r\n\r\n\r\n &.info {\r\n background-color: #beddbe;\r\n border: 1px solid #728f72;\r\n }\r\n\r\n &.warn {\r\n background-color: #f5e6d0;\r\n border: 1px solid #ea7d17;\r\n }\r\n &.error {\r\n background-color: #e5b2bc;\r\n border: 1px solid #e33257;\r\n }\r\n}\r\n\r\n@keyframes messageIn {\r\n from {\r\n right: 80%;\r\n }\r\n\r\n to {\r\n right: 0;\r\n\r\n }\r\n}",".pulse {\r\n &::before {\r\n content: '';\r\n display: block;\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n top: 0;\r\n left: 0;\r\n background-color: inherit;\r\n border-radius: inherit;\r\n transition: opacity .3s, transform .3s;\r\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\r\n //z-index: -1;\r\n }\r\n\r\n overflow: visible;\r\n position: relative;\r\n}\r\n\r\n@keyframes pulse-animation {\r\n 0% {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n 50% {\r\n opacity: 0;\r\n transform: scale(1.5);\r\n }\r\n 100% {\r\n opacity: 0;\r\n transform: scale(1.5);\r\n }\r\n}\r\n",".dropdown-content {\r\n &:focus {\r\n outline: 0;\r\n }\r\n\r\n\r\n @extend .shadow-1;\r\n background-color: $dropdown-bg-color;\r\n margin: 0;\r\n display: flow;\r\n min-width: 100px;\r\n overflow-y: auto;\r\n //opacity: 0;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 9999; // TODO: Check if this doesn't break other things\r\n transform-origin: 0 0;\r\n\r\n\r\n li {\r\n &:hover, &.active {\r\n background-color: $dropdown-hover-bg-color;\r\n }\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n &.divider {\r\n min-height: 0;\r\n height: 1px;\r\n }\r\n\r\n & > a, & > span {\r\n font-size: 16px;\r\n color: $dropdown-color;\r\n display: block;\r\n line-height: 22px;\r\n padding: calc(($dropdown-item-height - 22px) / 2) 16px;\r\n }\r\n\r\n & > span > label {\r\n top: 1px;\r\n left: 0;\r\n height: 18px;\r\n }\r\n\r\n // Icon alignment override\r\n & > a > i {\r\n height: inherit;\r\n line-height: inherit;\r\n float: left;\r\n margin: 0 24px 0 0;\r\n width: 24px;\r\n }\r\n\r\n\r\n clear: both;\r\n color: $off-black;\r\n cursor: pointer;\r\n min-height: $dropdown-item-height;\r\n line-height: 1.5rem;\r\n width: 100%;\r\n text-align: left;\r\n }\r\n}\r\n\r\nbody.keyboard-focused {\r\n .dropdown-content li:focus {\r\n background-color: darken($dropdown-hover-bg-color, 8%);\r\n }\r\n}\r\n\r\n// Input field specificity bugfix\r\n.input-field.col .dropdown-content [type=\"checkbox\"] + label {\r\n top: 1px;\r\n left: 0;\r\n height: 18px;\r\n transform: none;\r\n}\r\n\r\n.dropdown-trigger {\r\n cursor: pointer;\r\n}","nav {\r\n &.nav-extended {\r\n height: auto;\r\n\r\n .nav-wrapper {\r\n display: flex;\r\n align-items: center;\r\n min-height: $navbar-height-mobile;\r\n height: auto;\r\n }\r\n\r\n .nav-content {\r\n position: relative;\r\n line-height: normal;\r\n }\r\n }\r\n\r\n color: $navbar-font-color;\r\n @extend .shadow-1;\r\n background-color: $primary-color;\r\n width: 100%;\r\n height: $navbar-height-mobile;\r\n line-height: $navbar-line-height-mobile;\r\n\r\n a { color: $navbar-font-color; }\r\n\r\n i,\r\n [class^=\"mdi-\"], [class*=\"mdi-\"],\r\n i.s-icons {\r\n display: block;\r\n font-size: 24px;\r\n height: $navbar-height-mobile;\r\n line-height: $navbar-line-height-mobile;\r\n }\r\n\r\n .nav-wrapper {\r\n position: relative;\r\n height: 100%;\r\n }\r\n\r\n @media #{$large-and-up} {\r\n a.sidenav-trigger { display: none; }\r\n }\r\n\r\n\r\n // Collapse button\r\n .sidenav-trigger {\r\n float: left;\r\n position: relative;\r\n z-index: 1;\r\n height: $navbar-height-mobile;\r\n margin: 0 18px;\r\n\r\n i {\r\n height: $navbar-height-mobile;\r\n line-height: $navbar-line-height-mobile;\r\n }\r\n }\r\n\r\n\r\n // Logo\r\n .brand-logo {\r\n position: absolute;\r\n color: $navbar-font-color;\r\n display: inline-block;\r\n font-size: $navbar-brand-font-size;\r\n padding: 0;\r\n img.circle {\r\n height: 32px;\r\n width: 32px;\r\n }\r\n\r\n &.center {\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n @media #{$medium-and-down} {\r\n left: 50%;\r\n transform: translateX(-50%);\r\n\r\n &.left, &.right {\r\n padding: 0;\r\n transform: none;\r\n }\r\n\r\n &.left { left: 0.5rem; }\r\n &.right {\r\n right: 0.5rem;\r\n left: auto;\r\n }\r\n }\r\n\r\n &.right {\r\n right: 0.5rem;\r\n padding: 0;\r\n }\r\n\r\n i,\r\n [class^=\"mdi-\"], [class*=\"mdi-\"],\r\n i.s-icons {\r\n float: left;\r\n margin-right: 15px;\r\n }\r\n }\r\n\r\n\r\n // Title\r\n .nav-title {\r\n display: inline-block;\r\n font-size: 32px;\r\n padding: 28px 0;\r\n }\r\n\r\n\r\n // Navbar Links\r\n ul {\r\n margin: 0;\r\n\r\n li {\r\n transition: background-color .3s;\r\n float: left;\r\n padding: 0;\r\n\r\n &.active {\r\n background-color: rgba(0,0,0,.1);\r\n }\r\n }\r\n a {\r\n transition: background-color .3s;\r\n font-size: $navbar-font-size;\r\n color: $navbar-font-color;\r\n display: block;\r\n padding: 0 15px;\r\n cursor: pointer;\r\n\r\n &.btn, &.btn-large, &.btn-flat, &.btn-floating {\r\n margin-top: -2px;\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n\r\n & > .material-icons {\r\n height: inherit;\r\n line-height: inherit;\r\n }\r\n }\r\n\r\n &:hover {\r\n background-color: rgba(0,0,0,.1);\r\n }\r\n }\r\n\r\n &.left {\r\n float: left;\r\n }\r\n }\r\n\r\n // Navbar Search Form\r\n form {\r\n height: 100%;\r\n }\r\n\r\n .input-field {\r\n margin: 0;\r\n height: 100%;\r\n\r\n input {\r\n height: 100%;\r\n font-size: 1.2rem;\r\n border: none;\r\n padding-left: 2rem;\r\n\r\n &:focus, &[type=text]:valid, &[type=password]:valid,\r\n &[type=email]:valid, &[type=url]:valid, &[type=date]:valid {\r\n border: none;\r\n box-shadow: none;\r\n }\r\n }\r\n\r\n label {\r\n top: 0;\r\n left: 0;\r\n\r\n i {\r\n color: rgba(255,255,255,.7);\r\n transition: color .3s;\r\n }\r\n &.active i { color: $navbar-font-color; }\r\n }\r\n }\r\n}\r\n\r\n// Fixed Navbar\r\n.navbar-fixed {\r\n position: relative;\r\n height: $navbar-height-mobile;\r\n z-index: 997;\r\n\r\n nav {\r\n position: fixed;\r\n }\r\n}\r\n@media #{$medium-and-up} {\r\n nav.nav-extended .nav-wrapper {\r\n min-height: $navbar-height;\r\n }\r\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\r\n height: $navbar-height;\r\n line-height: $navbar-line-height;\r\n }\r\n .navbar-fixed {\r\n height: $navbar-height;\r\n }\r\n}\r\n"],"sourceRoot":""}]);
  3151. // Exports
  3152. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
  3153. /***/ }),
  3154. /***/ "./node_modules/css-loader/dist/runtime/api.js":
  3155. /*!*****************************************************!*\
  3156. !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  3157. \*****************************************************/
  3158. /***/ ((module) => {
  3159. "use strict";
  3160. /*
  3161. MIT License http://www.opensource.org/licenses/mit-license.php
  3162. Author Tobias Koppers @sokra
  3163. */
  3164. module.exports = function (cssWithMappingToString) {
  3165. var list = [];
  3166. // return the list of modules as css string
  3167. list.toString = function toString() {
  3168. return this.map(function (item) {
  3169. var content = "";
  3170. var needLayer = typeof item[5] !== "undefined";
  3171. if (item[4]) {
  3172. content += "@supports (".concat(item[4], ") {");
  3173. }
  3174. if (item[2]) {
  3175. content += "@media ".concat(item[2], " {");
  3176. }
  3177. if (needLayer) {
  3178. content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
  3179. }
  3180. content += cssWithMappingToString(item);
  3181. if (needLayer) {
  3182. content += "}";
  3183. }
  3184. if (item[2]) {
  3185. content += "}";
  3186. }
  3187. if (item[4]) {
  3188. content += "}";
  3189. }
  3190. return content;
  3191. }).join("");
  3192. };
  3193. // import a list of modules into the list
  3194. list.i = function i(modules, media, dedupe, supports, layer) {
  3195. if (typeof modules === "string") {
  3196. modules = [[null, modules, undefined]];
  3197. }
  3198. var alreadyImportedModules = {};
  3199. if (dedupe) {
  3200. for (var k = 0; k < this.length; k++) {
  3201. var id = this[k][0];
  3202. if (id != null) {
  3203. alreadyImportedModules[id] = true;
  3204. }
  3205. }
  3206. }
  3207. for (var _k = 0; _k < modules.length; _k++) {
  3208. var item = [].concat(modules[_k]);
  3209. if (dedupe && alreadyImportedModules[item[0]]) {
  3210. continue;
  3211. }
  3212. if (typeof layer !== "undefined") {
  3213. if (typeof item[5] === "undefined") {
  3214. item[5] = layer;
  3215. } else {
  3216. item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
  3217. item[5] = layer;
  3218. }
  3219. }
  3220. if (media) {
  3221. if (!item[2]) {
  3222. item[2] = media;
  3223. } else {
  3224. item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
  3225. item[2] = media;
  3226. }
  3227. }
  3228. if (supports) {
  3229. if (!item[4]) {
  3230. item[4] = "".concat(supports);
  3231. } else {
  3232. item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
  3233. item[4] = supports;
  3234. }
  3235. }
  3236. list.push(item);
  3237. }
  3238. };
  3239. return list;
  3240. };
  3241. /***/ }),
  3242. /***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
  3243. /*!********************************************************!*\
  3244. !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
  3245. \********************************************************/
  3246. /***/ ((module) => {
  3247. "use strict";
  3248. module.exports = function (url, options) {
  3249. if (!options) {
  3250. options = {};
  3251. }
  3252. if (!url) {
  3253. return url;
  3254. }
  3255. url = String(url.__esModule ? url.default : url);
  3256. // If url is already wrapped in quotes, remove them
  3257. if (/^['"].*['"]$/.test(url)) {
  3258. url = url.slice(1, -1);
  3259. }
  3260. if (options.hash) {
  3261. url += options.hash;
  3262. }
  3263. // Should url be wrapped?
  3264. // See https://drafts.csswg.org/css-values-3/#urls
  3265. if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) {
  3266. return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\"");
  3267. }
  3268. return url;
  3269. };
  3270. /***/ }),
  3271. /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
  3272. /*!************************************************************!*\
  3273. !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
  3274. \************************************************************/
  3275. /***/ ((module) => {
  3276. "use strict";
  3277. module.exports = function (item) {
  3278. var content = item[1];
  3279. var cssMapping = item[3];
  3280. if (!cssMapping) {
  3281. return content;
  3282. }
  3283. if (typeof btoa === "function") {
  3284. var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
  3285. var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
  3286. var sourceMapping = "/*# ".concat(data, " */");
  3287. var sourceURLs = cssMapping.sources.map(function (source) {
  3288. return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");
  3289. });
  3290. return [content].concat(sourceURLs).concat([sourceMapping]).join("\n");
  3291. }
  3292. return [content].join("\n");
  3293. };
  3294. /***/ }),
  3295. /***/ "./node_modules/object-assign/index.js":
  3296. /*!*********************************************!*\
  3297. !*** ./node_modules/object-assign/index.js ***!
  3298. \*********************************************/
  3299. /***/ ((module) => {
  3300. "use strict";
  3301. /*
  3302. object-assign
  3303. (c) Sindre Sorhus
  3304. @license MIT
  3305. */
  3306. /* eslint-disable no-unused-vars */
  3307. var getOwnPropertySymbols = Object.getOwnPropertySymbols;
  3308. var hasOwnProperty = Object.prototype.hasOwnProperty;
  3309. var propIsEnumerable = Object.prototype.propertyIsEnumerable;
  3310. function toObject(val) {
  3311. if (val === null || val === undefined) {
  3312. throw new TypeError('Object.assign cannot be called with null or undefined');
  3313. }
  3314. return Object(val);
  3315. }
  3316. function shouldUseNative() {
  3317. try {
  3318. if (!Object.assign) {
  3319. return false;
  3320. }
  3321. // Detect buggy property enumeration order in older V8 versions.
  3322. // https://bugs.chromium.org/p/v8/issues/detail?id=4118
  3323. var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
  3324. test1[5] = 'de';
  3325. if (Object.getOwnPropertyNames(test1)[0] === '5') {
  3326. return false;
  3327. }
  3328. // https://bugs.chromium.org/p/v8/issues/detail?id=3056
  3329. var test2 = {};
  3330. for (var i = 0; i < 10; i++) {
  3331. test2['_' + String.fromCharCode(i)] = i;
  3332. }
  3333. var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
  3334. return test2[n];
  3335. });
  3336. if (order2.join('') !== '0123456789') {
  3337. return false;
  3338. }
  3339. // https://bugs.chromium.org/p/v8/issues/detail?id=3056
  3340. var test3 = {};
  3341. 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
  3342. test3[letter] = letter;
  3343. });
  3344. if (Object.keys(Object.assign({}, test3)).join('') !==
  3345. 'abcdefghijklmnopqrst') {
  3346. return false;
  3347. }
  3348. return true;
  3349. } catch (err) {
  3350. // We don't expect any of the above to throw, but better to be safe.
  3351. return false;
  3352. }
  3353. }
  3354. module.exports = shouldUseNative() ? Object.assign : function (target, source) {
  3355. var from;
  3356. var to = toObject(target);
  3357. var symbols;
  3358. for (var s = 1; s < arguments.length; s++) {
  3359. from = Object(arguments[s]);
  3360. for (var key in from) {
  3361. if (hasOwnProperty.call(from, key)) {
  3362. to[key] = from[key];
  3363. }
  3364. }
  3365. if (getOwnPropertySymbols) {
  3366. symbols = getOwnPropertySymbols(from);
  3367. for (var i = 0; i < symbols.length; i++) {
  3368. if (propIsEnumerable.call(from, symbols[i])) {
  3369. to[symbols[i]] = from[symbols[i]];
  3370. }
  3371. }
  3372. }
  3373. }
  3374. return to;
  3375. };
  3376. /***/ }),
  3377. /***/ "./node_modules/prop-types/checkPropTypes.js":
  3378. /*!***************************************************!*\
  3379. !*** ./node_modules/prop-types/checkPropTypes.js ***!
  3380. \***************************************************/
  3381. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  3382. "use strict";
  3383. /**
  3384. * Copyright (c) 2013-present, Facebook, Inc.
  3385. *
  3386. * This source code is licensed under the MIT license found in the
  3387. * LICENSE file in the root directory of this source tree.
  3388. */
  3389. var printWarning = function() {};
  3390. if (true) {
  3391. var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
  3392. var loggedTypeFailures = {};
  3393. var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
  3394. printWarning = function(text) {
  3395. var message = 'Warning: ' + text;
  3396. if (typeof console !== 'undefined') {
  3397. console.error(message);
  3398. }
  3399. try {
  3400. // --- Welcome to debugging React ---
  3401. // This error was thrown as a convenience so that you can use this stack
  3402. // to find the callsite that caused this warning to fire.
  3403. throw new Error(message);
  3404. } catch (x) { /**/ }
  3405. };
  3406. }
  3407. /**
  3408. * Assert that the values match with the type specs.
  3409. * Error messages are memorized and will only be shown once.
  3410. *
  3411. * @param {object} typeSpecs Map of name to a ReactPropType
  3412. * @param {object} values Runtime values that need to be type-checked
  3413. * @param {string} location e.g. "prop", "context", "child context"
  3414. * @param {string} componentName Name of the component for error messages.
  3415. * @param {?Function} getStack Returns the component stack.
  3416. * @private
  3417. */
  3418. function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
  3419. if (true) {
  3420. for (var typeSpecName in typeSpecs) {
  3421. if (has(typeSpecs, typeSpecName)) {
  3422. var error;
  3423. // Prop type validation may throw. In case they do, we don't want to
  3424. // fail the render phase where it didn't fail before. So we log it.
  3425. // After these have been cleaned up, we'll let them throw.
  3426. try {
  3427. // This is intentionally an invariant that gets caught. It's the same
  3428. // behavior as without this statement except with a better message.
  3429. if (typeof typeSpecs[typeSpecName] !== 'function') {
  3430. var err = Error(
  3431. (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
  3432. 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
  3433. 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
  3434. );
  3435. err.name = 'Invariant Violation';
  3436. throw err;
  3437. }
  3438. error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
  3439. } catch (ex) {
  3440. error = ex;
  3441. }
  3442. if (error && !(error instanceof Error)) {
  3443. printWarning(
  3444. (componentName || 'React class') + ': type specification of ' +
  3445. location + ' `' + typeSpecName + '` is invalid; the type checker ' +
  3446. 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
  3447. 'You may have forgotten to pass an argument to the type checker ' +
  3448. 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
  3449. 'shape all require an argument).'
  3450. );
  3451. }
  3452. if (error instanceof Error && !(error.message in loggedTypeFailures)) {
  3453. // Only monitor this failure once because there tends to be a lot of the
  3454. // same error.
  3455. loggedTypeFailures[error.message] = true;
  3456. var stack = getStack ? getStack() : '';
  3457. printWarning(
  3458. 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
  3459. );
  3460. }
  3461. }
  3462. }
  3463. }
  3464. }
  3465. /**
  3466. * Resets warning cache when testing.
  3467. *
  3468. * @private
  3469. */
  3470. checkPropTypes.resetWarningCache = function() {
  3471. if (true) {
  3472. loggedTypeFailures = {};
  3473. }
  3474. }
  3475. module.exports = checkPropTypes;
  3476. /***/ }),
  3477. /***/ "./node_modules/prop-types/factoryWithTypeCheckers.js":
  3478. /*!************************************************************!*\
  3479. !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!
  3480. \************************************************************/
  3481. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  3482. "use strict";
  3483. /**
  3484. * Copyright (c) 2013-present, Facebook, Inc.
  3485. *
  3486. * This source code is licensed under the MIT license found in the
  3487. * LICENSE file in the root directory of this source tree.
  3488. */
  3489. var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
  3490. var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
  3491. var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
  3492. var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
  3493. var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js");
  3494. var printWarning = function() {};
  3495. if (true) {
  3496. printWarning = function(text) {
  3497. var message = 'Warning: ' + text;
  3498. if (typeof console !== 'undefined') {
  3499. console.error(message);
  3500. }
  3501. try {
  3502. // --- Welcome to debugging React ---
  3503. // This error was thrown as a convenience so that you can use this stack
  3504. // to find the callsite that caused this warning to fire.
  3505. throw new Error(message);
  3506. } catch (x) {}
  3507. };
  3508. }
  3509. function emptyFunctionThatReturnsNull() {
  3510. return null;
  3511. }
  3512. module.exports = function(isValidElement, throwOnDirectAccess) {
  3513. /* global Symbol */
  3514. var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  3515. var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
  3516. /**
  3517. * Returns the iterator method function contained on the iterable object.
  3518. *
  3519. * Be sure to invoke the function with the iterable as context:
  3520. *
  3521. * var iteratorFn = getIteratorFn(myIterable);
  3522. * if (iteratorFn) {
  3523. * var iterator = iteratorFn.call(myIterable);
  3524. * ...
  3525. * }
  3526. *
  3527. * @param {?object} maybeIterable
  3528. * @return {?function}
  3529. */
  3530. function getIteratorFn(maybeIterable) {
  3531. var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
  3532. if (typeof iteratorFn === 'function') {
  3533. return iteratorFn;
  3534. }
  3535. }
  3536. /**
  3537. * Collection of methods that allow declaration and validation of props that are
  3538. * supplied to React components. Example usage:
  3539. *
  3540. * var Props = require('ReactPropTypes');
  3541. * var MyArticle = React.createClass({
  3542. * propTypes: {
  3543. * // An optional string prop named "description".
  3544. * description: Props.string,
  3545. *
  3546. * // A required enum prop named "category".
  3547. * category: Props.oneOf(['News','Photos']).isRequired,
  3548. *
  3549. * // A prop named "dialog" that requires an instance of Dialog.
  3550. * dialog: Props.instanceOf(Dialog).isRequired
  3551. * },
  3552. * render: function() { ... }
  3553. * });
  3554. *
  3555. * A more formal specification of how these methods are used:
  3556. *
  3557. * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
  3558. * decl := ReactPropTypes.{type}(.isRequired)?
  3559. *
  3560. * Each and every declaration produces a function with the same signature. This
  3561. * allows the creation of custom validation functions. For example:
  3562. *
  3563. * var MyLink = React.createClass({
  3564. * propTypes: {
  3565. * // An optional string or URI prop named "href".
  3566. * href: function(props, propName, componentName) {
  3567. * var propValue = props[propName];
  3568. * if (propValue != null && typeof propValue !== 'string' &&
  3569. * !(propValue instanceof URI)) {
  3570. * return new Error(
  3571. * 'Expected a string or an URI for ' + propName + ' in ' +
  3572. * componentName
  3573. * );
  3574. * }
  3575. * }
  3576. * },
  3577. * render: function() {...}
  3578. * });
  3579. *
  3580. * @internal
  3581. */
  3582. var ANONYMOUS = '<<anonymous>>';
  3583. // Important!
  3584. // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
  3585. var ReactPropTypes = {
  3586. array: createPrimitiveTypeChecker('array'),
  3587. bigint: createPrimitiveTypeChecker('bigint'),
  3588. bool: createPrimitiveTypeChecker('boolean'),
  3589. func: createPrimitiveTypeChecker('function'),
  3590. number: createPrimitiveTypeChecker('number'),
  3591. object: createPrimitiveTypeChecker('object'),
  3592. string: createPrimitiveTypeChecker('string'),
  3593. symbol: createPrimitiveTypeChecker('symbol'),
  3594. any: createAnyTypeChecker(),
  3595. arrayOf: createArrayOfTypeChecker,
  3596. element: createElementTypeChecker(),
  3597. elementType: createElementTypeTypeChecker(),
  3598. instanceOf: createInstanceTypeChecker,
  3599. node: createNodeChecker(),
  3600. objectOf: createObjectOfTypeChecker,
  3601. oneOf: createEnumTypeChecker,
  3602. oneOfType: createUnionTypeChecker,
  3603. shape: createShapeTypeChecker,
  3604. exact: createStrictShapeTypeChecker,
  3605. };
  3606. /**
  3607. * inlined Object.is polyfill to avoid requiring consumers ship their own
  3608. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
  3609. */
  3610. /*eslint-disable no-self-compare*/
  3611. function is(x, y) {
  3612. // SameValue algorithm
  3613. if (x === y) {
  3614. // Steps 1-5, 7-10
  3615. // Steps 6.b-6.e: +0 != -0
  3616. return x !== 0 || 1 / x === 1 / y;
  3617. } else {
  3618. // Step 6.a: NaN == NaN
  3619. return x !== x && y !== y;
  3620. }
  3621. }
  3622. /*eslint-enable no-self-compare*/
  3623. /**
  3624. * We use an Error-like object for backward compatibility as people may call
  3625. * PropTypes directly and inspect their output. However, we don't use real
  3626. * Errors anymore. We don't inspect their stack anyway, and creating them
  3627. * is prohibitively expensive if they are created too often, such as what
  3628. * happens in oneOfType() for any type before the one that matched.
  3629. */
  3630. function PropTypeError(message, data) {
  3631. this.message = message;
  3632. this.data = data && typeof data === 'object' ? data: {};
  3633. this.stack = '';
  3634. }
  3635. // Make `instanceof Error` still work for returned errors.
  3636. PropTypeError.prototype = Error.prototype;
  3637. function createChainableTypeChecker(validate) {
  3638. if (true) {
  3639. var manualPropTypeCallCache = {};
  3640. var manualPropTypeWarningCount = 0;
  3641. }
  3642. function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
  3643. componentName = componentName || ANONYMOUS;
  3644. propFullName = propFullName || propName;
  3645. if (secret !== ReactPropTypesSecret) {
  3646. if (throwOnDirectAccess) {
  3647. // New behavior only for users of `prop-types` package
  3648. var err = new Error(
  3649. 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
  3650. 'Use `PropTypes.checkPropTypes()` to call them. ' +
  3651. 'Read more at http://fb.me/use-check-prop-types'
  3652. );
  3653. err.name = 'Invariant Violation';
  3654. throw err;
  3655. } else if ( true && typeof console !== 'undefined') {
  3656. // Old behavior for people using React.PropTypes
  3657. var cacheKey = componentName + ':' + propName;
  3658. if (
  3659. !manualPropTypeCallCache[cacheKey] &&
  3660. // Avoid spamming the console because they are often not actionable except for lib authors
  3661. manualPropTypeWarningCount < 3
  3662. ) {
  3663. printWarning(
  3664. 'You are manually calling a React.PropTypes validation ' +
  3665. 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
  3666. 'and will throw in the standalone `prop-types` package. ' +
  3667. 'You may be seeing this warning due to a third-party PropTypes ' +
  3668. 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
  3669. );
  3670. manualPropTypeCallCache[cacheKey] = true;
  3671. manualPropTypeWarningCount++;
  3672. }
  3673. }
  3674. }
  3675. if (props[propName] == null) {
  3676. if (isRequired) {
  3677. if (props[propName] === null) {
  3678. return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
  3679. }
  3680. return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
  3681. }
  3682. return null;
  3683. } else {
  3684. return validate(props, propName, componentName, location, propFullName);
  3685. }
  3686. }
  3687. var chainedCheckType = checkType.bind(null, false);
  3688. chainedCheckType.isRequired = checkType.bind(null, true);
  3689. return chainedCheckType;
  3690. }
  3691. function createPrimitiveTypeChecker(expectedType) {
  3692. function validate(props, propName, componentName, location, propFullName, secret) {
  3693. var propValue = props[propName];
  3694. var propType = getPropType(propValue);
  3695. if (propType !== expectedType) {
  3696. // `propValue` being instance of, say, date/regexp, pass the 'object'
  3697. // check, but we can offer a more precise error message here rather than
  3698. // 'of type `object`'.
  3699. var preciseType = getPreciseType(propValue);
  3700. return new PropTypeError(
  3701. 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
  3702. {expectedType: expectedType}
  3703. );
  3704. }
  3705. return null;
  3706. }
  3707. return createChainableTypeChecker(validate);
  3708. }
  3709. function createAnyTypeChecker() {
  3710. return createChainableTypeChecker(emptyFunctionThatReturnsNull);
  3711. }
  3712. function createArrayOfTypeChecker(typeChecker) {
  3713. function validate(props, propName, componentName, location, propFullName) {
  3714. if (typeof typeChecker !== 'function') {
  3715. return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
  3716. }
  3717. var propValue = props[propName];
  3718. if (!Array.isArray(propValue)) {
  3719. var propType = getPropType(propValue);
  3720. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
  3721. }
  3722. for (var i = 0; i < propValue.length; i++) {
  3723. var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
  3724. if (error instanceof Error) {
  3725. return error;
  3726. }
  3727. }
  3728. return null;
  3729. }
  3730. return createChainableTypeChecker(validate);
  3731. }
  3732. function createElementTypeChecker() {
  3733. function validate(props, propName, componentName, location, propFullName) {
  3734. var propValue = props[propName];
  3735. if (!isValidElement(propValue)) {
  3736. var propType = getPropType(propValue);
  3737. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
  3738. }
  3739. return null;
  3740. }
  3741. return createChainableTypeChecker(validate);
  3742. }
  3743. function createElementTypeTypeChecker() {
  3744. function validate(props, propName, componentName, location, propFullName) {
  3745. var propValue = props[propName];
  3746. if (!ReactIs.isValidElementType(propValue)) {
  3747. var propType = getPropType(propValue);
  3748. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
  3749. }
  3750. return null;
  3751. }
  3752. return createChainableTypeChecker(validate);
  3753. }
  3754. function createInstanceTypeChecker(expectedClass) {
  3755. function validate(props, propName, componentName, location, propFullName) {
  3756. if (!(props[propName] instanceof expectedClass)) {
  3757. var expectedClassName = expectedClass.name || ANONYMOUS;
  3758. var actualClassName = getClassName(props[propName]);
  3759. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
  3760. }
  3761. return null;
  3762. }
  3763. return createChainableTypeChecker(validate);
  3764. }
  3765. function createEnumTypeChecker(expectedValues) {
  3766. if (!Array.isArray(expectedValues)) {
  3767. if (true) {
  3768. if (arguments.length > 1) {
  3769. printWarning(
  3770. 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
  3771. 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
  3772. );
  3773. } else {
  3774. printWarning('Invalid argument supplied to oneOf, expected an array.');
  3775. }
  3776. }
  3777. return emptyFunctionThatReturnsNull;
  3778. }
  3779. function validate(props, propName, componentName, location, propFullName) {
  3780. var propValue = props[propName];
  3781. for (var i = 0; i < expectedValues.length; i++) {
  3782. if (is(propValue, expectedValues[i])) {
  3783. return null;
  3784. }
  3785. }
  3786. var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
  3787. var type = getPreciseType(value);
  3788. if (type === 'symbol') {
  3789. return String(value);
  3790. }
  3791. return value;
  3792. });
  3793. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
  3794. }
  3795. return createChainableTypeChecker(validate);
  3796. }
  3797. function createObjectOfTypeChecker(typeChecker) {
  3798. function validate(props, propName, componentName, location, propFullName) {
  3799. if (typeof typeChecker !== 'function') {
  3800. return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
  3801. }
  3802. var propValue = props[propName];
  3803. var propType = getPropType(propValue);
  3804. if (propType !== 'object') {
  3805. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
  3806. }
  3807. for (var key in propValue) {
  3808. if (has(propValue, key)) {
  3809. var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  3810. if (error instanceof Error) {
  3811. return error;
  3812. }
  3813. }
  3814. }
  3815. return null;
  3816. }
  3817. return createChainableTypeChecker(validate);
  3818. }
  3819. function createUnionTypeChecker(arrayOfTypeCheckers) {
  3820. if (!Array.isArray(arrayOfTypeCheckers)) {
  3821. true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
  3822. return emptyFunctionThatReturnsNull;
  3823. }
  3824. for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  3825. var checker = arrayOfTypeCheckers[i];
  3826. if (typeof checker !== 'function') {
  3827. printWarning(
  3828. 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
  3829. 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
  3830. );
  3831. return emptyFunctionThatReturnsNull;
  3832. }
  3833. }
  3834. function validate(props, propName, componentName, location, propFullName) {
  3835. var expectedTypes = [];
  3836. for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  3837. var checker = arrayOfTypeCheckers[i];
  3838. var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
  3839. if (checkerResult == null) {
  3840. return null;
  3841. }
  3842. if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
  3843. expectedTypes.push(checkerResult.data.expectedType);
  3844. }
  3845. }
  3846. var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
  3847. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
  3848. }
  3849. return createChainableTypeChecker(validate);
  3850. }
  3851. function createNodeChecker() {
  3852. function validate(props, propName, componentName, location, propFullName) {
  3853. if (!isNode(props[propName])) {
  3854. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
  3855. }
  3856. return null;
  3857. }
  3858. return createChainableTypeChecker(validate);
  3859. }
  3860. function invalidValidatorError(componentName, location, propFullName, key, type) {
  3861. return new PropTypeError(
  3862. (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
  3863. 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
  3864. );
  3865. }
  3866. function createShapeTypeChecker(shapeTypes) {
  3867. function validate(props, propName, componentName, location, propFullName) {
  3868. var propValue = props[propName];
  3869. var propType = getPropType(propValue);
  3870. if (propType !== 'object') {
  3871. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  3872. }
  3873. for (var key in shapeTypes) {
  3874. var checker = shapeTypes[key];
  3875. if (typeof checker !== 'function') {
  3876. return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
  3877. }
  3878. var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  3879. if (error) {
  3880. return error;
  3881. }
  3882. }
  3883. return null;
  3884. }
  3885. return createChainableTypeChecker(validate);
  3886. }
  3887. function createStrictShapeTypeChecker(shapeTypes) {
  3888. function validate(props, propName, componentName, location, propFullName) {
  3889. var propValue = props[propName];
  3890. var propType = getPropType(propValue);
  3891. if (propType !== 'object') {
  3892. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  3893. }
  3894. // We need to check all keys in case some are required but missing from props.
  3895. var allKeys = assign({}, props[propName], shapeTypes);
  3896. for (var key in allKeys) {
  3897. var checker = shapeTypes[key];
  3898. if (has(shapeTypes, key) && typeof checker !== 'function') {
  3899. return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
  3900. }
  3901. if (!checker) {
  3902. return new PropTypeError(
  3903. 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
  3904. '\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
  3905. '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
  3906. );
  3907. }
  3908. var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  3909. if (error) {
  3910. return error;
  3911. }
  3912. }
  3913. return null;
  3914. }
  3915. return createChainableTypeChecker(validate);
  3916. }
  3917. function isNode(propValue) {
  3918. switch (typeof propValue) {
  3919. case 'number':
  3920. case 'string':
  3921. case 'undefined':
  3922. return true;
  3923. case 'boolean':
  3924. return !propValue;
  3925. case 'object':
  3926. if (Array.isArray(propValue)) {
  3927. return propValue.every(isNode);
  3928. }
  3929. if (propValue === null || isValidElement(propValue)) {
  3930. return true;
  3931. }
  3932. var iteratorFn = getIteratorFn(propValue);
  3933. if (iteratorFn) {
  3934. var iterator = iteratorFn.call(propValue);
  3935. var step;
  3936. if (iteratorFn !== propValue.entries) {
  3937. while (!(step = iterator.next()).done) {
  3938. if (!isNode(step.value)) {
  3939. return false;
  3940. }
  3941. }
  3942. } else {
  3943. // Iterator will provide entry [k,v] tuples rather than values.
  3944. while (!(step = iterator.next()).done) {
  3945. var entry = step.value;
  3946. if (entry) {
  3947. if (!isNode(entry[1])) {
  3948. return false;
  3949. }
  3950. }
  3951. }
  3952. }
  3953. } else {
  3954. return false;
  3955. }
  3956. return true;
  3957. default:
  3958. return false;
  3959. }
  3960. }
  3961. function isSymbol(propType, propValue) {
  3962. // Native Symbol.
  3963. if (propType === 'symbol') {
  3964. return true;
  3965. }
  3966. // falsy value can't be a Symbol
  3967. if (!propValue) {
  3968. return false;
  3969. }
  3970. // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
  3971. if (propValue['@@toStringTag'] === 'Symbol') {
  3972. return true;
  3973. }
  3974. // Fallback for non-spec compliant Symbols which are polyfilled.
  3975. if (typeof Symbol === 'function' && propValue instanceof Symbol) {
  3976. return true;
  3977. }
  3978. return false;
  3979. }
  3980. // Equivalent of `typeof` but with special handling for array and regexp.
  3981. function getPropType(propValue) {
  3982. var propType = typeof propValue;
  3983. if (Array.isArray(propValue)) {
  3984. return 'array';
  3985. }
  3986. if (propValue instanceof RegExp) {
  3987. // Old webkits (at least until Android 4.0) return 'function' rather than
  3988. // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
  3989. // passes PropTypes.object.
  3990. return 'object';
  3991. }
  3992. if (isSymbol(propType, propValue)) {
  3993. return 'symbol';
  3994. }
  3995. return propType;
  3996. }
  3997. // This handles more types than `getPropType`. Only used for error messages.
  3998. // See `createPrimitiveTypeChecker`.
  3999. function getPreciseType(propValue) {
  4000. if (typeof propValue === 'undefined' || propValue === null) {
  4001. return '' + propValue;
  4002. }
  4003. var propType = getPropType(propValue);
  4004. if (propType === 'object') {
  4005. if (propValue instanceof Date) {
  4006. return 'date';
  4007. } else if (propValue instanceof RegExp) {
  4008. return 'regexp';
  4009. }
  4010. }
  4011. return propType;
  4012. }
  4013. // Returns a string that is postfixed to a warning about an invalid type.
  4014. // For example, "undefined" or "of type array"
  4015. function getPostfixForTypeWarning(value) {
  4016. var type = getPreciseType(value);
  4017. switch (type) {
  4018. case 'array':
  4019. case 'object':
  4020. return 'an ' + type;
  4021. case 'boolean':
  4022. case 'date':
  4023. case 'regexp':
  4024. return 'a ' + type;
  4025. default:
  4026. return type;
  4027. }
  4028. }
  4029. // Returns class name of the object, if any.
  4030. function getClassName(propValue) {
  4031. if (!propValue.constructor || !propValue.constructor.name) {
  4032. return ANONYMOUS;
  4033. }
  4034. return propValue.constructor.name;
  4035. }
  4036. ReactPropTypes.checkPropTypes = checkPropTypes;
  4037. ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
  4038. ReactPropTypes.PropTypes = ReactPropTypes;
  4039. return ReactPropTypes;
  4040. };
  4041. /***/ }),
  4042. /***/ "./node_modules/prop-types/index.js":
  4043. /*!******************************************!*\
  4044. !*** ./node_modules/prop-types/index.js ***!
  4045. \******************************************/
  4046. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  4047. /**
  4048. * Copyright (c) 2013-present, Facebook, Inc.
  4049. *
  4050. * This source code is licensed under the MIT license found in the
  4051. * LICENSE file in the root directory of this source tree.
  4052. */
  4053. if (true) {
  4054. var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
  4055. // By explicitly using `prop-types` you are opting into new development behavior.
  4056. // http://fb.me/prop-types-in-prod
  4057. var throwOnDirectAccess = true;
  4058. module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
  4059. } else {}
  4060. /***/ }),
  4061. /***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js":
  4062. /*!*************************************************************!*\
  4063. !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
  4064. \*************************************************************/
  4065. /***/ ((module) => {
  4066. "use strict";
  4067. /**
  4068. * Copyright (c) 2013-present, Facebook, Inc.
  4069. *
  4070. * This source code is licensed under the MIT license found in the
  4071. * LICENSE file in the root directory of this source tree.
  4072. */
  4073. var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
  4074. module.exports = ReactPropTypesSecret;
  4075. /***/ }),
  4076. /***/ "./node_modules/prop-types/lib/has.js":
  4077. /*!********************************************!*\
  4078. !*** ./node_modules/prop-types/lib/has.js ***!
  4079. \********************************************/
  4080. /***/ ((module) => {
  4081. module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
  4082. /***/ }),
  4083. /***/ "./node_modules/react-is/cjs/react-is.development.js":
  4084. /*!***********************************************************!*\
  4085. !*** ./node_modules/react-is/cjs/react-is.development.js ***!
  4086. \***********************************************************/
  4087. /***/ ((__unused_webpack_module, exports) => {
  4088. "use strict";
  4089. /** @license React v16.13.1
  4090. * react-is.development.js
  4091. *
  4092. * Copyright (c) Facebook, Inc. and its affiliates.
  4093. *
  4094. * This source code is licensed under the MIT license found in the
  4095. * LICENSE file in the root directory of this source tree.
  4096. */
  4097. if (true) {
  4098. (function() {
  4099. 'use strict';
  4100. // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  4101. // nor polyfill, then a plain number is used for performance.
  4102. var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  4103. var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
  4104. var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  4105. var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  4106. var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  4107. var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  4108. var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  4109. var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  4110. // (unstable) APIs that have been removed. Can we remove the symbols?
  4111. var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
  4112. var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  4113. var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  4114. var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  4115. var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  4116. var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  4117. var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  4118. var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  4119. var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  4120. var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
  4121. var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
  4122. function isValidElementType(type) {
  4123. return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
  4124. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
  4125. }
  4126. function typeOf(object) {
  4127. if (typeof object === 'object' && object !== null) {
  4128. var $$typeof = object.$$typeof;
  4129. switch ($$typeof) {
  4130. case REACT_ELEMENT_TYPE:
  4131. var type = object.type;
  4132. switch (type) {
  4133. case REACT_ASYNC_MODE_TYPE:
  4134. case REACT_CONCURRENT_MODE_TYPE:
  4135. case REACT_FRAGMENT_TYPE:
  4136. case REACT_PROFILER_TYPE:
  4137. case REACT_STRICT_MODE_TYPE:
  4138. case REACT_SUSPENSE_TYPE:
  4139. return type;
  4140. default:
  4141. var $$typeofType = type && type.$$typeof;
  4142. switch ($$typeofType) {
  4143. case REACT_CONTEXT_TYPE:
  4144. case REACT_FORWARD_REF_TYPE:
  4145. case REACT_LAZY_TYPE:
  4146. case REACT_MEMO_TYPE:
  4147. case REACT_PROVIDER_TYPE:
  4148. return $$typeofType;
  4149. default:
  4150. return $$typeof;
  4151. }
  4152. }
  4153. case REACT_PORTAL_TYPE:
  4154. return $$typeof;
  4155. }
  4156. }
  4157. return undefined;
  4158. } // AsyncMode is deprecated along with isAsyncMode
  4159. var AsyncMode = REACT_ASYNC_MODE_TYPE;
  4160. var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
  4161. var ContextConsumer = REACT_CONTEXT_TYPE;
  4162. var ContextProvider = REACT_PROVIDER_TYPE;
  4163. var Element = REACT_ELEMENT_TYPE;
  4164. var ForwardRef = REACT_FORWARD_REF_TYPE;
  4165. var Fragment = REACT_FRAGMENT_TYPE;
  4166. var Lazy = REACT_LAZY_TYPE;
  4167. var Memo = REACT_MEMO_TYPE;
  4168. var Portal = REACT_PORTAL_TYPE;
  4169. var Profiler = REACT_PROFILER_TYPE;
  4170. var StrictMode = REACT_STRICT_MODE_TYPE;
  4171. var Suspense = REACT_SUSPENSE_TYPE;
  4172. var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
  4173. function isAsyncMode(object) {
  4174. {
  4175. if (!hasWarnedAboutDeprecatedIsAsyncMode) {
  4176. hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
  4177. console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
  4178. }
  4179. }
  4180. return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
  4181. }
  4182. function isConcurrentMode(object) {
  4183. return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
  4184. }
  4185. function isContextConsumer(object) {
  4186. return typeOf(object) === REACT_CONTEXT_TYPE;
  4187. }
  4188. function isContextProvider(object) {
  4189. return typeOf(object) === REACT_PROVIDER_TYPE;
  4190. }
  4191. function isElement(object) {
  4192. return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  4193. }
  4194. function isForwardRef(object) {
  4195. return typeOf(object) === REACT_FORWARD_REF_TYPE;
  4196. }
  4197. function isFragment(object) {
  4198. return typeOf(object) === REACT_FRAGMENT_TYPE;
  4199. }
  4200. function isLazy(object) {
  4201. return typeOf(object) === REACT_LAZY_TYPE;
  4202. }
  4203. function isMemo(object) {
  4204. return typeOf(object) === REACT_MEMO_TYPE;
  4205. }
  4206. function isPortal(object) {
  4207. return typeOf(object) === REACT_PORTAL_TYPE;
  4208. }
  4209. function isProfiler(object) {
  4210. return typeOf(object) === REACT_PROFILER_TYPE;
  4211. }
  4212. function isStrictMode(object) {
  4213. return typeOf(object) === REACT_STRICT_MODE_TYPE;
  4214. }
  4215. function isSuspense(object) {
  4216. return typeOf(object) === REACT_SUSPENSE_TYPE;
  4217. }
  4218. exports.AsyncMode = AsyncMode;
  4219. exports.ConcurrentMode = ConcurrentMode;
  4220. exports.ContextConsumer = ContextConsumer;
  4221. exports.ContextProvider = ContextProvider;
  4222. exports.Element = Element;
  4223. exports.ForwardRef = ForwardRef;
  4224. exports.Fragment = Fragment;
  4225. exports.Lazy = Lazy;
  4226. exports.Memo = Memo;
  4227. exports.Portal = Portal;
  4228. exports.Profiler = Profiler;
  4229. exports.StrictMode = StrictMode;
  4230. exports.Suspense = Suspense;
  4231. exports.isAsyncMode = isAsyncMode;
  4232. exports.isConcurrentMode = isConcurrentMode;
  4233. exports.isContextConsumer = isContextConsumer;
  4234. exports.isContextProvider = isContextProvider;
  4235. exports.isElement = isElement;
  4236. exports.isForwardRef = isForwardRef;
  4237. exports.isFragment = isFragment;
  4238. exports.isLazy = isLazy;
  4239. exports.isMemo = isMemo;
  4240. exports.isPortal = isPortal;
  4241. exports.isProfiler = isProfiler;
  4242. exports.isStrictMode = isStrictMode;
  4243. exports.isSuspense = isSuspense;
  4244. exports.isValidElementType = isValidElementType;
  4245. exports.typeOf = typeOf;
  4246. })();
  4247. }
  4248. /***/ }),
  4249. /***/ "./node_modules/react-is/index.js":
  4250. /*!****************************************!*\
  4251. !*** ./node_modules/react-is/index.js ***!
  4252. \****************************************/
  4253. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  4254. "use strict";
  4255. if (false) {} else {
  4256. module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js");
  4257. }
  4258. /***/ }),
  4259. /***/ "./node_modules/react-router-dom/dist/index.js":
  4260. /*!*****************************************************!*\
  4261. !*** ./node_modules/react-router-dom/dist/index.js ***!
  4262. \*****************************************************/
  4263. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4264. "use strict";
  4265. __webpack_require__.r(__webpack_exports__);
  4266. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4267. /* harmony export */ "AbortedDeferredError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError),
  4268. /* harmony export */ "Await": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Await),
  4269. /* harmony export */ "BrowserRouter": () => (/* binding */ BrowserRouter),
  4270. /* harmony export */ "Form": () => (/* binding */ Form),
  4271. /* harmony export */ "HashRouter": () => (/* binding */ HashRouter),
  4272. /* harmony export */ "Link": () => (/* binding */ Link),
  4273. /* harmony export */ "MemoryRouter": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.MemoryRouter),
  4274. /* harmony export */ "NavLink": () => (/* binding */ NavLink),
  4275. /* harmony export */ "Navigate": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Navigate),
  4276. /* harmony export */ "NavigationType": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.Action),
  4277. /* harmony export */ "Outlet": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Outlet),
  4278. /* harmony export */ "Route": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Route),
  4279. /* harmony export */ "Router": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Router),
  4280. /* harmony export */ "RouterProvider": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.RouterProvider),
  4281. /* harmony export */ "Routes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Routes),
  4282. /* harmony export */ "ScrollRestoration": () => (/* binding */ ScrollRestoration),
  4283. /* harmony export */ "UNSAFE_DataRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterContext),
  4284. /* harmony export */ "UNSAFE_DataRouterStateContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext),
  4285. /* harmony export */ "UNSAFE_DataStaticRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataStaticRouterContext),
  4286. /* harmony export */ "UNSAFE_LocationContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_LocationContext),
  4287. /* harmony export */ "UNSAFE_NavigationContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_NavigationContext),
  4288. /* harmony export */ "UNSAFE_RouteContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext),
  4289. /* harmony export */ "UNSAFE_enhanceManualRouteObjects": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects),
  4290. /* harmony export */ "createBrowserRouter": () => (/* binding */ createBrowserRouter),
  4291. /* harmony export */ "createHashRouter": () => (/* binding */ createHashRouter),
  4292. /* harmony export */ "createMemoryRouter": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createMemoryRouter),
  4293. /* harmony export */ "createPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.createPath),
  4294. /* harmony export */ "createRoutesFromChildren": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createRoutesFromChildren),
  4295. /* harmony export */ "createRoutesFromElements": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createRoutesFromElements),
  4296. /* harmony export */ "createSearchParams": () => (/* binding */ createSearchParams),
  4297. /* harmony export */ "defer": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.defer),
  4298. /* harmony export */ "generatePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.generatePath),
  4299. /* harmony export */ "isRouteErrorResponse": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse),
  4300. /* harmony export */ "json": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.json),
  4301. /* harmony export */ "matchPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.matchPath),
  4302. /* harmony export */ "matchRoutes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes),
  4303. /* harmony export */ "parsePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.parsePath),
  4304. /* harmony export */ "redirect": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.redirect),
  4305. /* harmony export */ "renderMatches": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.renderMatches),
  4306. /* harmony export */ "resolvePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.resolvePath),
  4307. /* harmony export */ "unstable_HistoryRouter": () => (/* binding */ HistoryRouter),
  4308. /* harmony export */ "useActionData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useActionData),
  4309. /* harmony export */ "useAsyncError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useAsyncError),
  4310. /* harmony export */ "useAsyncValue": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useAsyncValue),
  4311. /* harmony export */ "useFetcher": () => (/* binding */ useFetcher),
  4312. /* harmony export */ "useFetchers": () => (/* binding */ useFetchers),
  4313. /* harmony export */ "useFormAction": () => (/* binding */ useFormAction),
  4314. /* harmony export */ "useHref": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useHref),
  4315. /* harmony export */ "useInRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useInRouterContext),
  4316. /* harmony export */ "useLinkClickHandler": () => (/* binding */ useLinkClickHandler),
  4317. /* harmony export */ "useLoaderData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useLoaderData),
  4318. /* harmony export */ "useLocation": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation),
  4319. /* harmony export */ "useMatch": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useMatch),
  4320. /* harmony export */ "useMatches": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useMatches),
  4321. /* harmony export */ "useNavigate": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate),
  4322. /* harmony export */ "useNavigation": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigation),
  4323. /* harmony export */ "useNavigationType": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigationType),
  4324. /* harmony export */ "useOutlet": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useOutlet),
  4325. /* harmony export */ "useOutletContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useOutletContext),
  4326. /* harmony export */ "useParams": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useParams),
  4327. /* harmony export */ "useResolvedPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath),
  4328. /* harmony export */ "useRevalidator": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRevalidator),
  4329. /* harmony export */ "useRouteError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRouteError),
  4330. /* harmony export */ "useRouteLoaderData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRouteLoaderData),
  4331. /* harmony export */ "useRoutes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRoutes),
  4332. /* harmony export */ "useSearchParams": () => (/* binding */ useSearchParams),
  4333. /* harmony export */ "useSubmit": () => (/* binding */ useSubmit)
  4334. /* harmony export */ });
  4335. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  4336. /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ "./node_modules/react-router/dist/index.js");
  4337. /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
  4338. /**
  4339. * React Router DOM v6.4.3
  4340. *
  4341. * Copyright (c) Remix Software Inc.
  4342. *
  4343. * This source code is licensed under the MIT license found in the
  4344. * LICENSE.md file in the root directory of this source tree.
  4345. *
  4346. * @license MIT
  4347. */
  4348. function _extends() {
  4349. _extends = Object.assign ? Object.assign.bind() : function (target) {
  4350. for (var i = 1; i < arguments.length; i++) {
  4351. var source = arguments[i];
  4352. for (var key in source) {
  4353. if (Object.prototype.hasOwnProperty.call(source, key)) {
  4354. target[key] = source[key];
  4355. }
  4356. }
  4357. }
  4358. return target;
  4359. };
  4360. return _extends.apply(this, arguments);
  4361. }
  4362. function _objectWithoutPropertiesLoose(source, excluded) {
  4363. if (source == null) return {};
  4364. var target = {};
  4365. var sourceKeys = Object.keys(source);
  4366. var key, i;
  4367. for (i = 0; i < sourceKeys.length; i++) {
  4368. key = sourceKeys[i];
  4369. if (excluded.indexOf(key) >= 0) continue;
  4370. target[key] = source[key];
  4371. }
  4372. return target;
  4373. }
  4374. const defaultMethod = "get";
  4375. const defaultEncType = "application/x-www-form-urlencoded";
  4376. function isHtmlElement(object) {
  4377. return object != null && typeof object.tagName === "string";
  4378. }
  4379. function isButtonElement(object) {
  4380. return isHtmlElement(object) && object.tagName.toLowerCase() === "button";
  4381. }
  4382. function isFormElement(object) {
  4383. return isHtmlElement(object) && object.tagName.toLowerCase() === "form";
  4384. }
  4385. function isInputElement(object) {
  4386. return isHtmlElement(object) && object.tagName.toLowerCase() === "input";
  4387. }
  4388. function isModifiedEvent(event) {
  4389. return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
  4390. }
  4391. function shouldProcessLinkClick(event, target) {
  4392. return event.button === 0 && ( // Ignore everything but left clicks
  4393. !target || target === "_self") && // Let browser handle "target=_blank" etc.
  4394. !isModifiedEvent(event) // Ignore clicks with modifier keys
  4395. ;
  4396. }
  4397. /**
  4398. * Creates a URLSearchParams object using the given initializer.
  4399. *
  4400. * This is identical to `new URLSearchParams(init)` except it also
  4401. * supports arrays as values in the object form of the initializer
  4402. * instead of just strings. This is convenient when you need multiple
  4403. * values for a given key, but don't want to use an array initializer.
  4404. *
  4405. * For example, instead of:
  4406. *
  4407. * let searchParams = new URLSearchParams([
  4408. * ['sort', 'name'],
  4409. * ['sort', 'price']
  4410. * ]);
  4411. *
  4412. * you can do:
  4413. *
  4414. * let searchParams = createSearchParams({
  4415. * sort: ['name', 'price']
  4416. * });
  4417. */
  4418. function createSearchParams(init) {
  4419. if (init === void 0) {
  4420. init = "";
  4421. }
  4422. return new URLSearchParams(typeof init === "string" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {
  4423. let value = init[key];
  4424. return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);
  4425. }, []));
  4426. }
  4427. function getSearchParamsForLocation(locationSearch, defaultSearchParams) {
  4428. let searchParams = createSearchParams(locationSearch);
  4429. for (let key of defaultSearchParams.keys()) {
  4430. if (!searchParams.has(key)) {
  4431. defaultSearchParams.getAll(key).forEach(value => {
  4432. searchParams.append(key, value);
  4433. });
  4434. }
  4435. }
  4436. return searchParams;
  4437. }
  4438. function getFormSubmissionInfo(target, defaultAction, options) {
  4439. let method;
  4440. let action;
  4441. let encType;
  4442. let formData;
  4443. if (isFormElement(target)) {
  4444. let submissionTrigger = options.submissionTrigger;
  4445. method = options.method || target.getAttribute("method") || defaultMethod;
  4446. action = options.action || target.getAttribute("action") || defaultAction;
  4447. encType = options.encType || target.getAttribute("enctype") || defaultEncType;
  4448. formData = new FormData(target);
  4449. if (submissionTrigger && submissionTrigger.name) {
  4450. formData.append(submissionTrigger.name, submissionTrigger.value);
  4451. }
  4452. } else if (isButtonElement(target) || isInputElement(target) && (target.type === "submit" || target.type === "image")) {
  4453. let form = target.form;
  4454. if (form == null) {
  4455. throw new Error("Cannot submit a <button> or <input type=\"submit\"> without a <form>");
  4456. } // <button>/<input type="submit"> may override attributes of <form>
  4457. method = options.method || target.getAttribute("formmethod") || form.getAttribute("method") || defaultMethod;
  4458. action = options.action || target.getAttribute("formaction") || form.getAttribute("action") || defaultAction;
  4459. encType = options.encType || target.getAttribute("formenctype") || form.getAttribute("enctype") || defaultEncType;
  4460. formData = new FormData(form); // Include name + value from a <button>, appending in case the button name
  4461. // matches an existing input name
  4462. if (target.name) {
  4463. formData.append(target.name, target.value);
  4464. }
  4465. } else if (isHtmlElement(target)) {
  4466. throw new Error("Cannot submit element that is not <form>, <button>, or " + "<input type=\"submit|image\">");
  4467. } else {
  4468. method = options.method || defaultMethod;
  4469. action = options.action || defaultAction;
  4470. encType = options.encType || defaultEncType;
  4471. if (target instanceof FormData) {
  4472. formData = target;
  4473. } else {
  4474. formData = new FormData();
  4475. if (target instanceof URLSearchParams) {
  4476. for (let [name, value] of target) {
  4477. formData.append(name, value);
  4478. }
  4479. } else if (target != null) {
  4480. for (let name of Object.keys(target)) {
  4481. formData.append(name, target[name]);
  4482. }
  4483. }
  4484. }
  4485. }
  4486. let {
  4487. protocol,
  4488. host
  4489. } = window.location;
  4490. let url = new URL(action, protocol + "//" + host);
  4491. return {
  4492. url,
  4493. method,
  4494. encType,
  4495. formData
  4496. };
  4497. }
  4498. const _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset"],
  4499. _excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "children"],
  4500. _excluded3 = ["reloadDocument", "replace", "method", "action", "onSubmit", "fetcherKey", "routeId", "relative"];
  4501. //#region Routers
  4502. ////////////////////////////////////////////////////////////////////////////////
  4503. function createBrowserRouter(routes, opts) {
  4504. var _window;
  4505. return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({
  4506. basename: opts == null ? void 0 : opts.basename,
  4507. history: (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createBrowserHistory)({
  4508. window: opts == null ? void 0 : opts.window
  4509. }),
  4510. hydrationData: (opts == null ? void 0 : opts.hydrationData) || ((_window = window) == null ? void 0 : _window.__staticRouterHydrationData),
  4511. routes: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects)(routes)
  4512. }).initialize();
  4513. }
  4514. function createHashRouter(routes, opts) {
  4515. var _window2;
  4516. return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({
  4517. basename: opts == null ? void 0 : opts.basename,
  4518. history: (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createHashHistory)({
  4519. window: opts == null ? void 0 : opts.window
  4520. }),
  4521. hydrationData: (opts == null ? void 0 : opts.hydrationData) || ((_window2 = window) == null ? void 0 : _window2.__staticRouterHydrationData),
  4522. routes: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects)(routes)
  4523. }).initialize();
  4524. }
  4525. /**
  4526. * A `<Router>` for use in web browsers. Provides the cleanest URLs.
  4527. */
  4528. function BrowserRouter(_ref) {
  4529. let {
  4530. basename,
  4531. children,
  4532. window
  4533. } = _ref;
  4534. let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
  4535. if (historyRef.current == null) {
  4536. historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createBrowserHistory)({
  4537. window,
  4538. v5Compat: true
  4539. });
  4540. }
  4541. let history = historyRef.current;
  4542. let [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
  4543. action: history.action,
  4544. location: history.location
  4545. });
  4546. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
  4547. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
  4548. basename: basename,
  4549. children: children,
  4550. location: state.location,
  4551. navigationType: state.action,
  4552. navigator: history
  4553. });
  4554. }
  4555. /**
  4556. * A `<Router>` for use in web browsers. Stores the location in the hash
  4557. * portion of the URL so it is not sent to the server.
  4558. */
  4559. function HashRouter(_ref2) {
  4560. let {
  4561. basename,
  4562. children,
  4563. window
  4564. } = _ref2;
  4565. let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
  4566. if (historyRef.current == null) {
  4567. historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createHashHistory)({
  4568. window,
  4569. v5Compat: true
  4570. });
  4571. }
  4572. let history = historyRef.current;
  4573. let [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
  4574. action: history.action,
  4575. location: history.location
  4576. });
  4577. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
  4578. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
  4579. basename: basename,
  4580. children: children,
  4581. location: state.location,
  4582. navigationType: state.action,
  4583. navigator: history
  4584. });
  4585. }
  4586. /**
  4587. * A `<Router>` that accepts a pre-instantiated history object. It's important
  4588. * to note that using your own history object is highly discouraged and may add
  4589. * two versions of the history library to your bundles unless you use the same
  4590. * version of the history library that React Router uses internally.
  4591. */
  4592. function HistoryRouter(_ref3) {
  4593. let {
  4594. basename,
  4595. children,
  4596. history
  4597. } = _ref3;
  4598. const [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
  4599. action: history.action,
  4600. location: history.location
  4601. });
  4602. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
  4603. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
  4604. basename: basename,
  4605. children: children,
  4606. location: state.location,
  4607. navigationType: state.action,
  4608. navigator: history
  4609. });
  4610. }
  4611. if (true) {
  4612. HistoryRouter.displayName = "unstable_HistoryRouter";
  4613. }
  4614. /**
  4615. * The public API for rendering a history-aware <a>.
  4616. */
  4617. const Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function LinkWithRef(_ref4, ref) {
  4618. let {
  4619. onClick,
  4620. relative,
  4621. reloadDocument,
  4622. replace,
  4623. state,
  4624. target,
  4625. to,
  4626. preventScrollReset
  4627. } = _ref4,
  4628. rest = _objectWithoutPropertiesLoose(_ref4, _excluded);
  4629. let href = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useHref)(to, {
  4630. relative
  4631. });
  4632. let internalOnClick = useLinkClickHandler(to, {
  4633. replace,
  4634. state,
  4635. target,
  4636. preventScrollReset,
  4637. relative
  4638. });
  4639. function handleClick(event) {
  4640. if (onClick) onClick(event);
  4641. if (!event.defaultPrevented) {
  4642. internalOnClick(event);
  4643. }
  4644. }
  4645. return (
  4646. /*#__PURE__*/
  4647. // eslint-disable-next-line jsx-a11y/anchor-has-content
  4648. react__WEBPACK_IMPORTED_MODULE_0__.createElement("a", _extends({}, rest, {
  4649. href: href,
  4650. onClick: reloadDocument ? onClick : handleClick,
  4651. ref: ref,
  4652. target: target
  4653. }))
  4654. );
  4655. });
  4656. if (true) {
  4657. Link.displayName = "Link";
  4658. }
  4659. /**
  4660. * A <Link> wrapper that knows if it's "active" or not.
  4661. */
  4662. const NavLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function NavLinkWithRef(_ref5, ref) {
  4663. let {
  4664. "aria-current": ariaCurrentProp = "page",
  4665. caseSensitive = false,
  4666. className: classNameProp = "",
  4667. end = false,
  4668. style: styleProp,
  4669. to,
  4670. children
  4671. } = _ref5,
  4672. rest = _objectWithoutPropertiesLoose(_ref5, _excluded2);
  4673. let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(to, {
  4674. relative: rest.relative
  4675. });
  4676. let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
  4677. let routerState = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext);
  4678. let toPathname = path.pathname;
  4679. let locationPathname = location.pathname;
  4680. let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;
  4681. if (!caseSensitive) {
  4682. locationPathname = locationPathname.toLowerCase();
  4683. nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;
  4684. toPathname = toPathname.toLowerCase();
  4685. }
  4686. let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(toPathname.length) === "/";
  4687. let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === "/");
  4688. let ariaCurrent = isActive ? ariaCurrentProp : undefined;
  4689. let className;
  4690. if (typeof classNameProp === "function") {
  4691. className = classNameProp({
  4692. isActive,
  4693. isPending
  4694. });
  4695. } else {
  4696. // If the className prop is not a function, we use a default `active`
  4697. // class for <NavLink />s that are active. In v5 `active` was the default
  4698. // value for `activeClassName`, but we are removing that API and can still
  4699. // use the old default behavior for a cleaner upgrade path and keep the
  4700. // simple styling rules working as they currently do.
  4701. className = [classNameProp, isActive ? "active" : null, isPending ? "pending" : null].filter(Boolean).join(" ");
  4702. }
  4703. let style = typeof styleProp === "function" ? styleProp({
  4704. isActive,
  4705. isPending
  4706. }) : styleProp;
  4707. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Link, _extends({}, rest, {
  4708. "aria-current": ariaCurrent,
  4709. className: className,
  4710. ref: ref,
  4711. style: style,
  4712. to: to
  4713. }), typeof children === "function" ? children({
  4714. isActive,
  4715. isPending
  4716. }) : children);
  4717. });
  4718. if (true) {
  4719. NavLink.displayName = "NavLink";
  4720. }
  4721. /**
  4722. * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except
  4723. * that the interaction with the server is with `fetch` instead of new document
  4724. * requests, allowing components to add nicer UX to the page as the form is
  4725. * submitted and returns with data.
  4726. */
  4727. const Form = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {
  4728. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FormImpl, _extends({}, props, {
  4729. ref: ref
  4730. }));
  4731. });
  4732. if (true) {
  4733. Form.displayName = "Form";
  4734. }
  4735. const FormImpl = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((_ref6, forwardedRef) => {
  4736. let {
  4737. reloadDocument,
  4738. replace,
  4739. method = defaultMethod,
  4740. action,
  4741. onSubmit,
  4742. fetcherKey,
  4743. routeId,
  4744. relative
  4745. } = _ref6,
  4746. props = _objectWithoutPropertiesLoose(_ref6, _excluded3);
  4747. let submit = useSubmitImpl(fetcherKey, routeId);
  4748. let formMethod = method.toLowerCase() === "get" ? "get" : "post";
  4749. let formAction = useFormAction(action, {
  4750. relative
  4751. });
  4752. let submitHandler = event => {
  4753. onSubmit && onSubmit(event);
  4754. if (event.defaultPrevented) return;
  4755. event.preventDefault();
  4756. let submitter = event.nativeEvent.submitter;
  4757. submit(submitter || event.currentTarget, {
  4758. method,
  4759. replace,
  4760. relative
  4761. });
  4762. };
  4763. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("form", _extends({
  4764. ref: forwardedRef,
  4765. method: formMethod,
  4766. action: formAction,
  4767. onSubmit: reloadDocument ? onSubmit : submitHandler
  4768. }, props));
  4769. });
  4770. if (true) {
  4771. Form.displayName = "Form";
  4772. }
  4773. /**
  4774. * This component will emulate the browser's scroll restoration on location
  4775. * changes.
  4776. */
  4777. function ScrollRestoration(_ref7) {
  4778. let {
  4779. getKey,
  4780. storageKey
  4781. } = _ref7;
  4782. useScrollRestoration({
  4783. getKey,
  4784. storageKey
  4785. });
  4786. return null;
  4787. }
  4788. if (true) {
  4789. ScrollRestoration.displayName = "ScrollRestoration";
  4790. } //#endregion
  4791. ////////////////////////////////////////////////////////////////////////////////
  4792. //#region Hooks
  4793. ////////////////////////////////////////////////////////////////////////////////
  4794. var DataRouterHook;
  4795. (function (DataRouterHook) {
  4796. DataRouterHook["UseScrollRestoration"] = "useScrollRestoration";
  4797. DataRouterHook["UseSubmitImpl"] = "useSubmitImpl";
  4798. DataRouterHook["UseFetcher"] = "useFetcher";
  4799. })(DataRouterHook || (DataRouterHook = {}));
  4800. var DataRouterStateHook;
  4801. (function (DataRouterStateHook) {
  4802. DataRouterStateHook["UseFetchers"] = "useFetchers";
  4803. DataRouterStateHook["UseScrollRestoration"] = "useScrollRestoration";
  4804. })(DataRouterStateHook || (DataRouterStateHook = {}));
  4805. function getDataRouterConsoleError(hookName) {
  4806. return hookName + " must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.";
  4807. }
  4808. function useDataRouterContext(hookName) {
  4809. let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterContext);
  4810. !ctx ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
  4811. return ctx;
  4812. }
  4813. function useDataRouterState(hookName) {
  4814. let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext);
  4815. !state ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
  4816. return state;
  4817. }
  4818. /**
  4819. * Handles the click behavior for router `<Link>` components. This is useful if
  4820. * you need to create custom `<Link>` components with the same click behavior we
  4821. * use in our exported `<Link>`.
  4822. */
  4823. function useLinkClickHandler(to, _temp) {
  4824. let {
  4825. target,
  4826. replace: replaceProp,
  4827. state,
  4828. preventScrollReset,
  4829. relative
  4830. } = _temp === void 0 ? {} : _temp;
  4831. let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
  4832. let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
  4833. let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(to, {
  4834. relative
  4835. });
  4836. return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(event => {
  4837. if (shouldProcessLinkClick(event, target)) {
  4838. event.preventDefault(); // If the URL hasn't changed, a regular <a> will do a replace instead of
  4839. // a push, so do the same here unless the replace prop is explicitly set
  4840. let replace = replaceProp !== undefined ? replaceProp : (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(location) === (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(path);
  4841. navigate(to, {
  4842. replace,
  4843. state,
  4844. preventScrollReset,
  4845. relative
  4846. });
  4847. }
  4848. }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative]);
  4849. }
  4850. /**
  4851. * A convenient wrapper for reading and writing search parameters via the
  4852. * URLSearchParams interface.
  4853. */
  4854. function useSearchParams(defaultInit) {
  4855. true ? warning(typeof URLSearchParams !== "undefined", "You cannot use the `useSearchParams` hook in a browser that does not " + "support the URLSearchParams API. If you need to support Internet " + "Explorer 11, we recommend you load a polyfill such as " + "https://github.com/ungap/url-search-params\n\n" + "If you're unsure how to load polyfills, we recommend you check out " + "https://polyfill.io/v3/ which provides some recommendations about how " + "to load polyfills only for users that need them, instead of for every " + "user.") : 0;
  4856. let defaultSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(createSearchParams(defaultInit));
  4857. let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
  4858. let searchParams = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => getSearchParamsForLocation(location.search, defaultSearchParamsRef.current), [location.search]);
  4859. let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
  4860. let setSearchParams = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((nextInit, navigateOptions) => {
  4861. const newSearchParams = createSearchParams(typeof nextInit === "function" ? nextInit(searchParams) : nextInit);
  4862. navigate("?" + newSearchParams, navigateOptions);
  4863. }, [navigate, searchParams]);
  4864. return [searchParams, setSearchParams];
  4865. }
  4866. /**
  4867. * Returns a function that may be used to programmatically submit a form (or
  4868. * some arbitrary data) to the server.
  4869. */
  4870. function useSubmit() {
  4871. return useSubmitImpl();
  4872. }
  4873. function useSubmitImpl(fetcherKey, routeId) {
  4874. let {
  4875. router
  4876. } = useDataRouterContext(DataRouterHook.UseSubmitImpl);
  4877. let defaultAction = useFormAction();
  4878. return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (target, options) {
  4879. if (options === void 0) {
  4880. options = {};
  4881. }
  4882. if (typeof document === "undefined") {
  4883. throw new Error("You are calling submit during the server render. " + "Try calling submit within a `useEffect` or callback instead.");
  4884. }
  4885. let {
  4886. method,
  4887. encType,
  4888. formData,
  4889. url
  4890. } = getFormSubmissionInfo(target, defaultAction, options);
  4891. let href = url.pathname + url.search;
  4892. let opts = {
  4893. replace: options.replace,
  4894. formData,
  4895. formMethod: method,
  4896. formEncType: encType
  4897. };
  4898. if (fetcherKey) {
  4899. !(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for useFetcher()") : 0 : void 0;
  4900. router.fetch(fetcherKey, routeId, href, opts);
  4901. } else {
  4902. router.navigate(href, opts);
  4903. }
  4904. }, [defaultAction, router, fetcherKey, routeId]);
  4905. }
  4906. function useFormAction(action, _temp2) {
  4907. let {
  4908. relative
  4909. } = _temp2 === void 0 ? {} : _temp2;
  4910. let {
  4911. basename
  4912. } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_NavigationContext);
  4913. let routeContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext);
  4914. !routeContext ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFormAction must be used inside a RouteContext") : 0 : void 0;
  4915. let [match] = routeContext.matches.slice(-1);
  4916. let resolvedAction = action != null ? action : "."; // Shallow clone path so we can modify it below, otherwise we modify the
  4917. // object referenced by useMemo inside useResolvedPath
  4918. let path = _extends({}, (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(resolvedAction, {
  4919. relative
  4920. })); // Previously we set the default action to ".". The problem with this is that
  4921. // `useResolvedPath(".")` excludes search params and the hash of the resolved
  4922. // URL. This is the intended behavior of when "." is specifically provided as
  4923. // the form action, but inconsistent w/ browsers when the action is omitted.
  4924. // https://github.com/remix-run/remix/issues/927
  4925. let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
  4926. if (action == null) {
  4927. // Safe to write to these directly here since if action was undefined, we
  4928. // would have called useResolvedPath(".") which will never include a search
  4929. // or hash
  4930. path.search = location.search;
  4931. path.hash = location.hash; // When grabbing search params from the URL, remove the automatically
  4932. // inserted ?index param so we match the useResolvedPath search behavior
  4933. // which would not include ?index
  4934. if (match.route.index) {
  4935. let params = new URLSearchParams(path.search);
  4936. params.delete("index");
  4937. path.search = params.toString() ? "?" + params.toString() : "";
  4938. }
  4939. }
  4940. if ((!action || action === ".") && match.route.index) {
  4941. path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index";
  4942. } // If we're operating within a basename, prepend it to the pathname prior
  4943. // to creating the form action. If this is a root navigation, then just use
  4944. // the raw basename which allows the basename to have full control over the
  4945. // presence of a trailing slash on root actions
  4946. if (basename !== "/") {
  4947. path.pathname = path.pathname === "/" ? basename : (0,react_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, path.pathname]);
  4948. }
  4949. return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(path);
  4950. }
  4951. function createFetcherForm(fetcherKey, routeId) {
  4952. let FetcherForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {
  4953. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FormImpl, _extends({}, props, {
  4954. ref: ref,
  4955. fetcherKey: fetcherKey,
  4956. routeId: routeId
  4957. }));
  4958. });
  4959. if (true) {
  4960. FetcherForm.displayName = "fetcher.Form";
  4961. }
  4962. return FetcherForm;
  4963. }
  4964. let fetcherId = 0;
  4965. /**
  4966. * Interacts with route loaders and actions without causing a navigation. Great
  4967. * for any interaction that stays on the same page.
  4968. */
  4969. function useFetcher() {
  4970. var _route$matches;
  4971. let {
  4972. router
  4973. } = useDataRouterContext(DataRouterHook.UseFetcher);
  4974. let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext);
  4975. !route ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFetcher must be used inside a RouteContext") : 0 : void 0;
  4976. let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;
  4977. !(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFetcher can only be used on routes that contain a unique \"id\"") : 0 : void 0;
  4978. let [fetcherKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => String(++fetcherId));
  4979. let [Form] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => {
  4980. !routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for fetcher.Form()") : 0 : void 0;
  4981. return createFetcherForm(fetcherKey, routeId);
  4982. });
  4983. let [load] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => href => {
  4984. !router ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No router available for fetcher.load()") : 0 : void 0;
  4985. !routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for fetcher.load()") : 0 : void 0;
  4986. router.fetch(fetcherKey, routeId, href);
  4987. });
  4988. let submit = useSubmitImpl(fetcherKey, routeId);
  4989. let fetcher = router.getFetcher(fetcherKey);
  4990. let fetcherWithComponents = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => _extends({
  4991. Form,
  4992. submit,
  4993. load
  4994. }, fetcher), [fetcher, Form, submit, load]);
  4995. react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
  4996. // Is this busted when the React team gets real weird and calls effects
  4997. // twice on mount? We really just need to garbage collect here when this
  4998. // fetcher is no longer around.
  4999. return () => {
  5000. if (!router) {
  5001. console.warn("No fetcher available to clean up from useFetcher()");
  5002. return;
  5003. }
  5004. router.deleteFetcher(fetcherKey);
  5005. };
  5006. }, [router, fetcherKey]);
  5007. return fetcherWithComponents;
  5008. }
  5009. /**
  5010. * Provides all fetchers currently on the page. Useful for layouts and parent
  5011. * routes that need to provide pending/optimistic UI regarding the fetch.
  5012. */
  5013. function useFetchers() {
  5014. let state = useDataRouterState(DataRouterStateHook.UseFetchers);
  5015. return [...state.fetchers.values()];
  5016. }
  5017. const SCROLL_RESTORATION_STORAGE_KEY = "react-router-scroll-positions";
  5018. let savedScrollPositions = {};
  5019. /**
  5020. * When rendered inside a RouterProvider, will restore scroll positions on navigations
  5021. */
  5022. function useScrollRestoration(_temp3) {
  5023. let {
  5024. getKey,
  5025. storageKey
  5026. } = _temp3 === void 0 ? {} : _temp3;
  5027. let {
  5028. router
  5029. } = useDataRouterContext(DataRouterHook.UseScrollRestoration);
  5030. let {
  5031. restoreScrollPosition,
  5032. preventScrollReset
  5033. } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);
  5034. let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
  5035. let matches = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useMatches)();
  5036. let navigation = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigation)(); // Trigger manual scroll restoration while we're active
  5037. react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
  5038. window.history.scrollRestoration = "manual";
  5039. return () => {
  5040. window.history.scrollRestoration = "auto";
  5041. };
  5042. }, []); // Save positions on unload
  5043. useBeforeUnload(react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => {
  5044. if (navigation.state === "idle") {
  5045. let key = (getKey ? getKey(location, matches) : null) || location.key;
  5046. savedScrollPositions[key] = window.scrollY;
  5047. }
  5048. sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));
  5049. window.history.scrollRestoration = "auto";
  5050. }, [storageKey, getKey, navigation.state, location, matches])); // Read in any saved scroll locations
  5051. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
  5052. try {
  5053. let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);
  5054. if (sessionPositions) {
  5055. savedScrollPositions = JSON.parse(sessionPositions);
  5056. }
  5057. } catch (e) {// no-op, use default empty object
  5058. }
  5059. }, [storageKey]); // Enable scroll restoration in the router
  5060. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
  5061. let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKey);
  5062. return () => disableScrollRestoration && disableScrollRestoration();
  5063. }, [router, getKey]); // Restore scrolling when state.restoreScrollPosition changes
  5064. react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
  5065. // Explicit false means don't do anything (used for submissions)
  5066. if (restoreScrollPosition === false) {
  5067. return;
  5068. } // been here before, scroll to it
  5069. if (typeof restoreScrollPosition === "number") {
  5070. window.scrollTo(0, restoreScrollPosition);
  5071. return;
  5072. } // try to scroll to the hash
  5073. if (location.hash) {
  5074. let el = document.getElementById(location.hash.slice(1));
  5075. if (el) {
  5076. el.scrollIntoView();
  5077. return;
  5078. }
  5079. } // Opt out of scroll reset if this link requested it
  5080. if (preventScrollReset === true) {
  5081. return;
  5082. } // otherwise go to the top on new locations
  5083. window.scrollTo(0, 0);
  5084. }, [location, restoreScrollPosition, preventScrollReset]);
  5085. }
  5086. function useBeforeUnload(callback) {
  5087. react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
  5088. window.addEventListener("beforeunload", callback);
  5089. return () => {
  5090. window.removeEventListener("beforeunload", callback);
  5091. };
  5092. }, [callback]);
  5093. } //#endregion
  5094. ////////////////////////////////////////////////////////////////////////////////
  5095. //#region Utils
  5096. ////////////////////////////////////////////////////////////////////////////////
  5097. function warning(cond, message) {
  5098. if (!cond) {
  5099. // eslint-disable-next-line no-console
  5100. if (typeof console !== "undefined") console.warn(message);
  5101. try {
  5102. // Welcome to debugging React Router!
  5103. //
  5104. // This error is thrown as a convenience so you can more easily
  5105. // find the source for a warning that appears in the console by
  5106. // enabling "pause on exceptions" in your JavaScript debugger.
  5107. throw new Error(message); // eslint-disable-next-line no-empty
  5108. } catch (e) {}
  5109. }
  5110. } //#endregion
  5111. //# sourceMappingURL=index.js.map
  5112. /***/ }),
  5113. /***/ "./node_modules/react-router/dist/index.js":
  5114. /*!*************************************************!*\
  5115. !*** ./node_modules/react-router/dist/index.js ***!
  5116. \*************************************************/
  5117. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5118. "use strict";
  5119. var react__WEBPACK_IMPORTED_MODULE_1___namespace_cache;
  5120. __webpack_require__.r(__webpack_exports__);
  5121. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5122. /* harmony export */ "AbortedDeferredError": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.AbortedDeferredError),
  5123. /* harmony export */ "Await": () => (/* binding */ Await),
  5124. /* harmony export */ "MemoryRouter": () => (/* binding */ MemoryRouter),
  5125. /* harmony export */ "Navigate": () => (/* binding */ Navigate),
  5126. /* harmony export */ "NavigationType": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action),
  5127. /* harmony export */ "Outlet": () => (/* binding */ Outlet),
  5128. /* harmony export */ "Route": () => (/* binding */ Route),
  5129. /* harmony export */ "Router": () => (/* binding */ Router),
  5130. /* harmony export */ "RouterProvider": () => (/* binding */ RouterProvider),
  5131. /* harmony export */ "Routes": () => (/* binding */ Routes),
  5132. /* harmony export */ "UNSAFE_DataRouterContext": () => (/* binding */ DataRouterContext),
  5133. /* harmony export */ "UNSAFE_DataRouterStateContext": () => (/* binding */ DataRouterStateContext),
  5134. /* harmony export */ "UNSAFE_DataStaticRouterContext": () => (/* binding */ DataStaticRouterContext),
  5135. /* harmony export */ "UNSAFE_LocationContext": () => (/* binding */ LocationContext),
  5136. /* harmony export */ "UNSAFE_NavigationContext": () => (/* binding */ NavigationContext),
  5137. /* harmony export */ "UNSAFE_RouteContext": () => (/* binding */ RouteContext),
  5138. /* harmony export */ "UNSAFE_enhanceManualRouteObjects": () => (/* binding */ enhanceManualRouteObjects),
  5139. /* harmony export */ "createMemoryRouter": () => (/* binding */ createMemoryRouter),
  5140. /* harmony export */ "createPath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createPath),
  5141. /* harmony export */ "createRoutesFromChildren": () => (/* binding */ createRoutesFromChildren),
  5142. /* harmony export */ "createRoutesFromElements": () => (/* binding */ createRoutesFromChildren),
  5143. /* harmony export */ "defer": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.defer),
  5144. /* harmony export */ "generatePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.generatePath),
  5145. /* harmony export */ "isRouteErrorResponse": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.isRouteErrorResponse),
  5146. /* harmony export */ "json": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.json),
  5147. /* harmony export */ "matchPath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchPath),
  5148. /* harmony export */ "matchRoutes": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchRoutes),
  5149. /* harmony export */ "parsePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath),
  5150. /* harmony export */ "redirect": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.redirect),
  5151. /* harmony export */ "renderMatches": () => (/* binding */ renderMatches),
  5152. /* harmony export */ "resolvePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolvePath),
  5153. /* harmony export */ "useActionData": () => (/* binding */ useActionData),
  5154. /* harmony export */ "useAsyncError": () => (/* binding */ useAsyncError),
  5155. /* harmony export */ "useAsyncValue": () => (/* binding */ useAsyncValue),
  5156. /* harmony export */ "useHref": () => (/* binding */ useHref),
  5157. /* harmony export */ "useInRouterContext": () => (/* binding */ useInRouterContext),
  5158. /* harmony export */ "useLoaderData": () => (/* binding */ useLoaderData),
  5159. /* harmony export */ "useLocation": () => (/* binding */ useLocation),
  5160. /* harmony export */ "useMatch": () => (/* binding */ useMatch),
  5161. /* harmony export */ "useMatches": () => (/* binding */ useMatches),
  5162. /* harmony export */ "useNavigate": () => (/* binding */ useNavigate),
  5163. /* harmony export */ "useNavigation": () => (/* binding */ useNavigation),
  5164. /* harmony export */ "useNavigationType": () => (/* binding */ useNavigationType),
  5165. /* harmony export */ "useOutlet": () => (/* binding */ useOutlet),
  5166. /* harmony export */ "useOutletContext": () => (/* binding */ useOutletContext),
  5167. /* harmony export */ "useParams": () => (/* binding */ useParams),
  5168. /* harmony export */ "useResolvedPath": () => (/* binding */ useResolvedPath),
  5169. /* harmony export */ "useRevalidator": () => (/* binding */ useRevalidator),
  5170. /* harmony export */ "useRouteError": () => (/* binding */ useRouteError),
  5171. /* harmony export */ "useRouteLoaderData": () => (/* binding */ useRouteLoaderData),
  5172. /* harmony export */ "useRoutes": () => (/* binding */ useRoutes)
  5173. /* harmony export */ });
  5174. /* harmony import */ var _remix_run_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
  5175. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  5176. /**
  5177. * React Router v6.4.3
  5178. *
  5179. * Copyright (c) Remix Software Inc.
  5180. *
  5181. * This source code is licensed under the MIT license found in the
  5182. * LICENSE.md file in the root directory of this source tree.
  5183. *
  5184. * @license MIT
  5185. */
  5186. function _extends() {
  5187. _extends = Object.assign ? Object.assign.bind() : function (target) {
  5188. for (var i = 1; i < arguments.length; i++) {
  5189. var source = arguments[i];
  5190. for (var key in source) {
  5191. if (Object.prototype.hasOwnProperty.call(source, key)) {
  5192. target[key] = source[key];
  5193. }
  5194. }
  5195. }
  5196. return target;
  5197. };
  5198. return _extends.apply(this, arguments);
  5199. }
  5200. /**
  5201. * Copyright (c) Facebook, Inc. and its affiliates.
  5202. *
  5203. * This source code is licensed under the MIT license found in the
  5204. * LICENSE file in the root directory of this source tree.
  5205. */
  5206. /**
  5207. * inlined Object.is polyfill to avoid requiring consumers ship their own
  5208. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
  5209. */
  5210. function isPolyfill(x, y) {
  5211. return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
  5212. ;
  5213. }
  5214. const is = typeof Object.is === "function" ? Object.is : isPolyfill; // Intentionally not using named imports because Rollup uses dynamic
  5215. // dispatch for CommonJS interop named imports.
  5216. const {
  5217. useState,
  5218. useEffect,
  5219. useLayoutEffect,
  5220. useDebugValue
  5221. } = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)));
  5222. let didWarnOld18Alpha = false;
  5223. let didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works
  5224. // because of a very particular set of implementation details and assumptions
  5225. // -- change any one of them and it will break. The most important assumption
  5226. // is that updates are always synchronous, because concurrent rendering is
  5227. // only available in versions of React that also have a built-in
  5228. // useSyncExternalStore API. And we only use this shim when the built-in API
  5229. // does not exist.
  5230. //
  5231. // Do not assume that the clever hacks used by this hook also work in general.
  5232. // The point of this shim is to replace the need for hacks by other libraries.
  5233. function useSyncExternalStore$2(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of
  5234. // React do not expose a way to check if we're hydrating. So users of the shim
  5235. // will need to track that themselves and return the correct value
  5236. // from `getSnapshot`.
  5237. getServerSnapshot) {
  5238. if (true) {
  5239. if (!didWarnOld18Alpha) {
  5240. if ( false) {
  5241. didWarnOld18Alpha = true;
  5242. console.error("You are using an outdated, pre-release alpha of React 18 that " + "does not support useSyncExternalStore. The " + "use-sync-external-store shim will not work correctly. Upgrade " + "to a newer pre-release.");
  5243. }
  5244. }
  5245. } // Read the current snapshot from the store on every render. Again, this
  5246. // breaks the rules of React, and only works here because of specific
  5247. // implementation details, most importantly that updates are
  5248. // always synchronous.
  5249. const value = getSnapshot();
  5250. if (true) {
  5251. if (!didWarnUncachedGetSnapshot) {
  5252. const cachedValue = getSnapshot();
  5253. if (!is(value, cachedValue)) {
  5254. console.error("The result of getSnapshot should be cached to avoid an infinite loop");
  5255. didWarnUncachedGetSnapshot = true;
  5256. }
  5257. }
  5258. } // Because updates are synchronous, we don't queue them. Instead we force a
  5259. // re-render whenever the subscribed state changes by updating an some
  5260. // arbitrary useState hook. Then, during render, we call getSnapshot to read
  5261. // the current value.
  5262. //
  5263. // Because we don't actually use the state returned by the useState hook, we
  5264. // can save a bit of memory by storing other stuff in that slot.
  5265. //
  5266. // To implement the early bailout, we need to track some things on a mutable
  5267. // object. Usually, we would put that in a useRef hook, but we can stash it in
  5268. // our useState hook instead.
  5269. //
  5270. // To force a re-render, we call forceUpdate({inst}). That works because the
  5271. // new object always fails an equality check.
  5272. const [{
  5273. inst
  5274. }, forceUpdate] = useState({
  5275. inst: {
  5276. value,
  5277. getSnapshot
  5278. }
  5279. }); // Track the latest getSnapshot function with a ref. This needs to be updated
  5280. // in the layout phase so we can access it during the tearing check that
  5281. // happens on subscribe.
  5282. useLayoutEffect(() => {
  5283. inst.value = value;
  5284. inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the
  5285. // commit phase if there was an interleaved mutation. In concurrent mode
  5286. // this can happen all the time, but even in synchronous mode, an earlier
  5287. // effect may have mutated the store.
  5288. if (checkIfSnapshotChanged(inst)) {
  5289. // Force a re-render.
  5290. forceUpdate({
  5291. inst
  5292. });
  5293. } // eslint-disable-next-line react-hooks/exhaustive-deps
  5294. }, [subscribe, value, getSnapshot]);
  5295. useEffect(() => {
  5296. // Check for changes right before subscribing. Subsequent changes will be
  5297. // detected in the subscription handler.
  5298. if (checkIfSnapshotChanged(inst)) {
  5299. // Force a re-render.
  5300. forceUpdate({
  5301. inst
  5302. });
  5303. }
  5304. const handleStoreChange = () => {
  5305. // TODO: Because there is no cross-renderer API for batching updates, it's
  5306. // up to the consumer of this library to wrap their subscription event
  5307. // with unstable_batchedUpdates. Should we try to detect when this isn't
  5308. // the case and print a warning in development?
  5309. // The store changed. Check if the snapshot changed since the last time we
  5310. // read from the store.
  5311. if (checkIfSnapshotChanged(inst)) {
  5312. // Force a re-render.
  5313. forceUpdate({
  5314. inst
  5315. });
  5316. }
  5317. }; // Subscribe to the store and return a clean-up function.
  5318. return subscribe(handleStoreChange); // eslint-disable-next-line react-hooks/exhaustive-deps
  5319. }, [subscribe]);
  5320. useDebugValue(value);
  5321. return value;
  5322. }
  5323. function checkIfSnapshotChanged(inst) {
  5324. const latestGetSnapshot = inst.getSnapshot;
  5325. const prevValue = inst.value;
  5326. try {
  5327. const nextValue = latestGetSnapshot();
  5328. return !is(prevValue, nextValue);
  5329. } catch (error) {
  5330. return true;
  5331. }
  5332. }
  5333. /**
  5334. * Copyright (c) Facebook, Inc. and its affiliates.
  5335. *
  5336. * This source code is licensed under the MIT license found in the
  5337. * LICENSE file in the root directory of this source tree.
  5338. *
  5339. * @flow
  5340. */
  5341. function useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {
  5342. // Note: The shim does not use getServerSnapshot, because pre-18 versions of
  5343. // React do not expose a way to check if we're hydrating. So users of the shim
  5344. // will need to track that themselves and return the correct value
  5345. // from `getSnapshot`.
  5346. return getSnapshot();
  5347. }
  5348. /**
  5349. * Inlined into the react-router repo since use-sync-external-store does not
  5350. * provide a UMD-compatible package, so we need this to be able to distribute
  5351. * UMD react-router bundles
  5352. */
  5353. const canUseDOM = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
  5354. const isServerEnvironment = !canUseDOM;
  5355. const shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore$2;
  5356. const useSyncExternalStore = false ? (module => module.useSyncExternalStore)(/*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)))) : shim;
  5357. // Contexts for data routers
  5358. const DataStaticRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5359. if (true) {
  5360. DataStaticRouterContext.displayName = "DataStaticRouterContext";
  5361. }
  5362. const DataRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5363. if (true) {
  5364. DataRouterContext.displayName = "DataRouter";
  5365. }
  5366. const DataRouterStateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5367. if (true) {
  5368. DataRouterStateContext.displayName = "DataRouterState";
  5369. }
  5370. const AwaitContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5371. if (true) {
  5372. AwaitContext.displayName = "Await";
  5373. }
  5374. const NavigationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5375. if (true) {
  5376. NavigationContext.displayName = "Navigation";
  5377. }
  5378. const LocationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5379. if (true) {
  5380. LocationContext.displayName = "Location";
  5381. }
  5382. const RouteContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({
  5383. outlet: null,
  5384. matches: []
  5385. });
  5386. if (true) {
  5387. RouteContext.displayName = "Route";
  5388. }
  5389. const RouteErrorContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5390. if (true) {
  5391. RouteErrorContext.displayName = "RouteError";
  5392. }
  5393. /**
  5394. * Returns the full href for the given "to" value. This is useful for building
  5395. * custom links that are also accessible and preserve right-click behavior.
  5396. *
  5397. * @see https://reactrouter.com/docs/en/v6/hooks/use-href
  5398. */
  5399. function useHref(to, _temp) {
  5400. let {
  5401. relative
  5402. } = _temp === void 0 ? {} : _temp;
  5403. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
  5404. // router loaded. We can help them understand how to avoid that.
  5405. "useHref() may be used only in the context of a <Router> component.") : 0 : void 0;
  5406. let {
  5407. basename,
  5408. navigator
  5409. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext);
  5410. let {
  5411. hash,
  5412. pathname,
  5413. search
  5414. } = useResolvedPath(to, {
  5415. relative
  5416. });
  5417. let joinedPathname = pathname; // If we're operating within a basename, prepend it to the pathname prior
  5418. // to creating the href. If this is a root navigation, then just use the raw
  5419. // basename which allows the basename to have full control over the presence
  5420. // of a trailing slash on root links
  5421. if (basename !== "/") {
  5422. joinedPathname = pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([basename, pathname]);
  5423. }
  5424. return navigator.createHref({
  5425. pathname: joinedPathname,
  5426. search,
  5427. hash
  5428. });
  5429. }
  5430. /**
  5431. * Returns true if this component is a descendant of a <Router>.
  5432. *
  5433. * @see https://reactrouter.com/docs/en/v6/hooks/use-in-router-context
  5434. */
  5435. function useInRouterContext() {
  5436. return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext) != null;
  5437. }
  5438. /**
  5439. * Returns the current location object, which represents the current URL in web
  5440. * browsers.
  5441. *
  5442. * Note: If you're using this it may mean you're doing some of your own
  5443. * "routing" in your app, and we'd like to know what your use case is. We may
  5444. * be able to provide something higher-level to better suit your needs.
  5445. *
  5446. * @see https://reactrouter.com/docs/en/v6/hooks/use-location
  5447. */
  5448. function useLocation() {
  5449. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
  5450. // router loaded. We can help them understand how to avoid that.
  5451. "useLocation() may be used only in the context of a <Router> component.") : 0 : void 0;
  5452. return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext).location;
  5453. }
  5454. /**
  5455. * Returns the current navigation action which describes how the router came to
  5456. * the current location, either by a pop, push, or replace on the history stack.
  5457. *
  5458. * @see https://reactrouter.com/docs/en/v6/hooks/use-navigation-type
  5459. */
  5460. function useNavigationType() {
  5461. return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext).navigationType;
  5462. }
  5463. /**
  5464. * Returns true if the URL for the given "to" value matches the current URL.
  5465. * This is useful for components that need to know "active" state, e.g.
  5466. * <NavLink>.
  5467. *
  5468. * @see https://reactrouter.com/docs/en/v6/hooks/use-match
  5469. */
  5470. function useMatch(pattern) {
  5471. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
  5472. // router loaded. We can help them understand how to avoid that.
  5473. "useMatch() may be used only in the context of a <Router> component.") : 0 : void 0;
  5474. let {
  5475. pathname
  5476. } = useLocation();
  5477. return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchPath)(pattern, pathname), [pathname, pattern]);
  5478. }
  5479. /**
  5480. * The interface for the navigate() function returned from useNavigate().
  5481. */
  5482. /**
  5483. * Returns an imperative method for changing the location. Used by <Link>s, but
  5484. * may also be used by other elements to change the location.
  5485. *
  5486. * @see https://reactrouter.com/docs/en/v6/hooks/use-navigate
  5487. */
  5488. function useNavigate() {
  5489. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
  5490. // router loaded. We can help them understand how to avoid that.
  5491. "useNavigate() may be used only in the context of a <Router> component.") : 0 : void 0;
  5492. let {
  5493. basename,
  5494. navigator
  5495. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext);
  5496. let {
  5497. matches
  5498. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5499. let {
  5500. pathname: locationPathname
  5501. } = useLocation();
  5502. let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.UNSAFE_getPathContributingMatches)(matches).map(match => match.pathnameBase));
  5503. let activeRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(false);
  5504. react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {
  5505. activeRef.current = true;
  5506. });
  5507. let navigate = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (to, options) {
  5508. if (options === void 0) {
  5509. options = {};
  5510. }
  5511. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(activeRef.current, "You should call navigate() in a React.useEffect(), not when " + "your component is first rendered.") : 0;
  5512. if (!activeRef.current) return;
  5513. if (typeof to === "number") {
  5514. navigator.go(to);
  5515. return;
  5516. }
  5517. let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === "path"); // If we're operating within a basename, prepend it to the pathname prior
  5518. // to handing off to history. If this is a root navigation, then we
  5519. // navigate to the raw basename which allows the basename to have full
  5520. // control over the presence of a trailing slash on root links
  5521. if (basename !== "/") {
  5522. path.pathname = path.pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([basename, path.pathname]);
  5523. }
  5524. (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);
  5525. }, [basename, navigator, routePathnamesJson, locationPathname]);
  5526. return navigate;
  5527. }
  5528. const OutletContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
  5529. /**
  5530. * Returns the context (if provided) for the child route at this level of the route
  5531. * hierarchy.
  5532. * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet-context
  5533. */
  5534. function useOutletContext() {
  5535. return react__WEBPACK_IMPORTED_MODULE_1__.useContext(OutletContext);
  5536. }
  5537. /**
  5538. * Returns the element for the child route at this level of the route
  5539. * hierarchy. Used internally by <Outlet> to render child routes.
  5540. *
  5541. * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet
  5542. */
  5543. function useOutlet(context) {
  5544. let outlet = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext).outlet;
  5545. if (outlet) {
  5546. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(OutletContext.Provider, {
  5547. value: context
  5548. }, outlet);
  5549. }
  5550. return outlet;
  5551. }
  5552. /**
  5553. * Returns an object of key/value pairs of the dynamic params from the current
  5554. * URL that were matched by the route path.
  5555. *
  5556. * @see https://reactrouter.com/docs/en/v6/hooks/use-params
  5557. */
  5558. function useParams() {
  5559. let {
  5560. matches
  5561. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5562. let routeMatch = matches[matches.length - 1];
  5563. return routeMatch ? routeMatch.params : {};
  5564. }
  5565. /**
  5566. * Resolves the pathname of the given `to` value against the current location.
  5567. *
  5568. * @see https://reactrouter.com/docs/en/v6/hooks/use-resolved-path
  5569. */
  5570. function useResolvedPath(to, _temp2) {
  5571. let {
  5572. relative
  5573. } = _temp2 === void 0 ? {} : _temp2;
  5574. let {
  5575. matches
  5576. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5577. let {
  5578. pathname: locationPathname
  5579. } = useLocation();
  5580. let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.UNSAFE_getPathContributingMatches)(matches).map(match => match.pathnameBase));
  5581. return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, relative === "path"), [to, routePathnamesJson, locationPathname, relative]);
  5582. }
  5583. /**
  5584. * Returns the element of the route that matched the current location, prepared
  5585. * with the correct context to render the remainder of the route tree. Route
  5586. * elements in the tree must render an <Outlet> to render their child route's
  5587. * element.
  5588. *
  5589. * @see https://reactrouter.com/docs/en/v6/hooks/use-routes
  5590. */
  5591. function useRoutes(routes, locationArg) {
  5592. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
  5593. // router loaded. We can help them understand how to avoid that.
  5594. "useRoutes() may be used only in the context of a <Router> component.") : 0 : void 0;
  5595. let dataRouterStateContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
  5596. let {
  5597. matches: parentMatches
  5598. } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5599. let routeMatch = parentMatches[parentMatches.length - 1];
  5600. let parentParams = routeMatch ? routeMatch.params : {};
  5601. let parentPathname = routeMatch ? routeMatch.pathname : "/";
  5602. let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : "/";
  5603. let parentRoute = routeMatch && routeMatch.route;
  5604. if (true) {
  5605. // You won't get a warning about 2 different <Routes> under a <Route>
  5606. // without a trailing *, but this is a best-effort warning anyway since we
  5607. // cannot even give the warning unless they land at the parent route.
  5608. //
  5609. // Example:
  5610. //
  5611. // <Routes>
  5612. // {/* This route path MUST end with /* because otherwise
  5613. // it will never match /blog/post/123 */}
  5614. // <Route path="blog" element={<Blog />} />
  5615. // <Route path="blog/feed" element={<BlogFeed />} />
  5616. // </Routes>
  5617. //
  5618. // function Blog() {
  5619. // return (
  5620. // <Routes>
  5621. // <Route path="post/:id" element={<Post />} />
  5622. // </Routes>
  5623. // );
  5624. // }
  5625. let parentPath = parentRoute && parentRoute.path || "";
  5626. warningOnce(parentPathname, !parentRoute || parentPath.endsWith("*"), "You rendered descendant <Routes> (or called `useRoutes()`) at " + ("\"" + parentPathname + "\" (under <Route path=\"" + parentPath + "\">) but the ") + "parent route path has no trailing \"*\". This means if you navigate " + "deeper, the parent won't match anymore and therefore the child " + "routes will never render.\n\n" + ("Please change the parent <Route path=\"" + parentPath + "\"> to <Route ") + ("path=\"" + (parentPath === "/" ? "*" : parentPath + "/*") + "\">."));
  5627. }
  5628. let locationFromContext = useLocation();
  5629. let location;
  5630. if (locationArg) {
  5631. var _parsedLocationArg$pa;
  5632. let parsedLocationArg = typeof locationArg === "string" ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath)(locationArg) : locationArg;
  5633. !(parentPathnameBase === "/" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, " + "the location pathname must begin with the portion of the URL pathname that was " + ("matched by all parent routes. The current pathname base is \"" + parentPathnameBase + "\" ") + ("but pathname \"" + parsedLocationArg.pathname + "\" was given in the `location` prop.")) : 0 : void 0;
  5634. location = parsedLocationArg;
  5635. } else {
  5636. location = locationFromContext;
  5637. }
  5638. let pathname = location.pathname || "/";
  5639. let remainingPathname = parentPathnameBase === "/" ? pathname : pathname.slice(parentPathnameBase.length) || "/";
  5640. let matches = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchRoutes)(routes, {
  5641. pathname: remainingPathname
  5642. });
  5643. if (true) {
  5644. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(parentRoute || matches != null, "No routes matched location \"" + location.pathname + location.search + location.hash + "\" ") : 0;
  5645. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(matches == null || matches[matches.length - 1].route.element !== undefined, "Matched leaf route at location \"" + location.pathname + location.search + location.hash + "\" does not have an element. " + "This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.") : 0;
  5646. }
  5647. let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {
  5648. params: Object.assign({}, parentParams, match.params),
  5649. pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([parentPathnameBase, match.pathname]),
  5650. pathnameBase: match.pathnameBase === "/" ? parentPathnameBase : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([parentPathnameBase, match.pathnameBase])
  5651. })), parentMatches, dataRouterStateContext || undefined); // When a user passes in a `locationArg`, the associated routes need to
  5652. // be wrapped in a new `LocationContext.Provider` in order for `useLocation`
  5653. // to use the scoped location instead of the global location.
  5654. if (locationArg && renderedMatches) {
  5655. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(LocationContext.Provider, {
  5656. value: {
  5657. location: _extends({
  5658. pathname: "/",
  5659. search: "",
  5660. hash: "",
  5661. state: null,
  5662. key: "default"
  5663. }, location),
  5664. navigationType: _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action.Pop
  5665. }
  5666. }, renderedMatches);
  5667. }
  5668. return renderedMatches;
  5669. }
  5670. function DefaultErrorElement() {
  5671. let error = useRouteError();
  5672. let message = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.isRouteErrorResponse)(error) ? error.status + " " + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);
  5673. let stack = error instanceof Error ? error.stack : null;
  5674. let lightgrey = "rgba(200,200,200, 0.5)";
  5675. let preStyles = {
  5676. padding: "0.5rem",
  5677. backgroundColor: lightgrey
  5678. };
  5679. let codeStyles = {
  5680. padding: "2px 4px",
  5681. backgroundColor: lightgrey
  5682. };
  5683. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("h2", null, "Unhandled Thrown Error!"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("h3", {
  5684. style: {
  5685. fontStyle: "italic"
  5686. }
  5687. }, message), stack ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("pre", {
  5688. style: preStyles
  5689. }, stack) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("p", null, "\uD83D\uDCBF Hey developer \uD83D\uDC4B"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("p", null, "You can provide a way better UX than this when your app throws errors by providing your own\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("code", {
  5690. style: codeStyles
  5691. }, "errorElement"), " props on\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("code", {
  5692. style: codeStyles
  5693. }, "<Route>")));
  5694. }
  5695. class RenderErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
  5696. constructor(props) {
  5697. super(props);
  5698. this.state = {
  5699. location: props.location,
  5700. error: props.error
  5701. };
  5702. }
  5703. static getDerivedStateFromError(error) {
  5704. return {
  5705. error: error
  5706. };
  5707. }
  5708. static getDerivedStateFromProps(props, state) {
  5709. // When we get into an error state, the user will likely click "back" to the
  5710. // previous page that didn't have an error. Because this wraps the entire
  5711. // application, that will have no effect--the error page continues to display.
  5712. // This gives us a mechanism to recover from the error when the location changes.
  5713. //
  5714. // Whether we're in an error state or not, we update the location in state
  5715. // so that when we are in an error state, it gets reset when a new location
  5716. // comes in and the user recovers from the error.
  5717. if (state.location !== props.location) {
  5718. return {
  5719. error: props.error,
  5720. location: props.location
  5721. };
  5722. } // If we're not changing locations, preserve the location but still surface
  5723. // any new errors that may come through. We retain the existing error, we do
  5724. // this because the error provided from the app state may be cleared without
  5725. // the location changing.
  5726. return {
  5727. error: props.error || state.error,
  5728. location: state.location
  5729. };
  5730. }
  5731. componentDidCatch(error, errorInfo) {
  5732. console.error("React Router caught the following error during render", error, errorInfo);
  5733. }
  5734. render() {
  5735. return this.state.error ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RouteErrorContext.Provider, {
  5736. value: this.state.error,
  5737. children: this.props.component
  5738. }) : this.props.children;
  5739. }
  5740. }
  5741. function RenderedRoute(_ref) {
  5742. let {
  5743. routeContext,
  5744. match,
  5745. children
  5746. } = _ref;
  5747. let dataStaticRouterContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataStaticRouterContext); // Track how deep we got in our render pass to emulate SSR componentDidCatch
  5748. // in a DataStaticRouter
  5749. if (dataStaticRouterContext && match.route.errorElement) {
  5750. dataStaticRouterContext._deepestRenderedBoundaryId = match.route.id;
  5751. }
  5752. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RouteContext.Provider, {
  5753. value: routeContext
  5754. }, children);
  5755. }
  5756. function _renderMatches(matches, parentMatches, dataRouterState) {
  5757. if (parentMatches === void 0) {
  5758. parentMatches = [];
  5759. }
  5760. if (matches == null) {
  5761. if (dataRouterState != null && dataRouterState.errors) {
  5762. // Don't bail if we have data router errors so we can render them in the
  5763. // boundary. Use the pre-matched (or shimmed) matches
  5764. matches = dataRouterState.matches;
  5765. } else {
  5766. return null;
  5767. }
  5768. }
  5769. let renderedMatches = matches; // If we have data errors, trim matches to the highest error boundary
  5770. let errors = dataRouterState == null ? void 0 : dataRouterState.errors;
  5771. if (errors != null) {
  5772. let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]));
  5773. !(errorIndex >= 0) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "Could not find a matching route for the current errors: " + errors) : 0 : void 0;
  5774. renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));
  5775. }
  5776. return renderedMatches.reduceRight((outlet, match, index) => {
  5777. let error = match.route.id ? errors == null ? void 0 : errors[match.route.id] : null; // Only data routers handle errors
  5778. let errorElement = dataRouterState ? match.route.errorElement || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DefaultErrorElement, null) : null;
  5779. let getChildren = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RenderedRoute, {
  5780. match: match,
  5781. routeContext: {
  5782. outlet,
  5783. matches: parentMatches.concat(renderedMatches.slice(0, index + 1))
  5784. }
  5785. }, error ? errorElement : match.route.element !== undefined ? match.route.element : outlet); // Only wrap in an error boundary within data router usages when we have an
  5786. // errorElement on this route. Otherwise let it bubble up to an ancestor
  5787. // errorElement
  5788. return dataRouterState && (match.route.errorElement || index === 0) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RenderErrorBoundary, {
  5789. location: dataRouterState.location,
  5790. component: errorElement,
  5791. error: error,
  5792. children: getChildren()
  5793. }) : getChildren();
  5794. }, null);
  5795. }
  5796. var DataRouterHook;
  5797. (function (DataRouterHook) {
  5798. DataRouterHook["UseRevalidator"] = "useRevalidator";
  5799. })(DataRouterHook || (DataRouterHook = {}));
  5800. var DataRouterStateHook;
  5801. (function (DataRouterStateHook) {
  5802. DataRouterStateHook["UseLoaderData"] = "useLoaderData";
  5803. DataRouterStateHook["UseActionData"] = "useActionData";
  5804. DataRouterStateHook["UseRouteError"] = "useRouteError";
  5805. DataRouterStateHook["UseNavigation"] = "useNavigation";
  5806. DataRouterStateHook["UseRouteLoaderData"] = "useRouteLoaderData";
  5807. DataRouterStateHook["UseMatches"] = "useMatches";
  5808. DataRouterStateHook["UseRevalidator"] = "useRevalidator";
  5809. })(DataRouterStateHook || (DataRouterStateHook = {}));
  5810. function getDataRouterConsoleError(hookName) {
  5811. return hookName + " must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.";
  5812. }
  5813. function useDataRouterContext(hookName) {
  5814. let ctx = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterContext);
  5815. !ctx ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
  5816. return ctx;
  5817. }
  5818. function useDataRouterState(hookName) {
  5819. let state = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
  5820. !state ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
  5821. return state;
  5822. }
  5823. /**
  5824. * Returns the current navigation, defaulting to an "idle" navigation when
  5825. * no navigation is in progress
  5826. */
  5827. function useNavigation() {
  5828. let state = useDataRouterState(DataRouterStateHook.UseNavigation);
  5829. return state.navigation;
  5830. }
  5831. /**
  5832. * Returns a revalidate function for manually triggering revalidation, as well
  5833. * as the current state of any manual revalidations
  5834. */
  5835. function useRevalidator() {
  5836. let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);
  5837. let state = useDataRouterState(DataRouterStateHook.UseRevalidator);
  5838. return {
  5839. revalidate: dataRouterContext.router.revalidate,
  5840. state: state.revalidation
  5841. };
  5842. }
  5843. /**
  5844. * Returns the active route matches, useful for accessing loaderData for
  5845. * parent/child routes or the route "handle" property
  5846. */
  5847. function useMatches() {
  5848. let {
  5849. matches,
  5850. loaderData
  5851. } = useDataRouterState(DataRouterStateHook.UseMatches);
  5852. return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => matches.map(match => {
  5853. let {
  5854. pathname,
  5855. params
  5856. } = match; // Note: This structure matches that created by createUseMatchesMatch
  5857. // in the @remix-run/router , so if you change this please also change
  5858. // that :) Eventually we'll DRY this up
  5859. return {
  5860. id: match.route.id,
  5861. pathname,
  5862. params,
  5863. data: loaderData[match.route.id],
  5864. handle: match.route.handle
  5865. };
  5866. }), [matches, loaderData]);
  5867. }
  5868. /**
  5869. * Returns the loader data for the nearest ancestor Route loader
  5870. */
  5871. function useLoaderData() {
  5872. let state = useDataRouterState(DataRouterStateHook.UseLoaderData);
  5873. let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5874. !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useLoaderData must be used inside a RouteContext") : 0 : void 0;
  5875. let thisRoute = route.matches[route.matches.length - 1];
  5876. !thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useLoaderData can only be used on routes that contain a unique \"id\"") : 0 : void 0;
  5877. return state.loaderData[thisRoute.route.id];
  5878. }
  5879. /**
  5880. * Returns the loaderData for the given routeId
  5881. */
  5882. function useRouteLoaderData(routeId) {
  5883. let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);
  5884. return state.loaderData[routeId];
  5885. }
  5886. /**
  5887. * Returns the action data for the nearest ancestor Route action
  5888. */
  5889. function useActionData() {
  5890. let state = useDataRouterState(DataRouterStateHook.UseActionData);
  5891. let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5892. !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useActionData must be used inside a RouteContext") : 0 : void 0;
  5893. return Object.values((state == null ? void 0 : state.actionData) || {})[0];
  5894. }
  5895. /**
  5896. * Returns the nearest ancestor Route error, which could be a loader/action
  5897. * error or a render error. This is intended to be called from your
  5898. * errorElement to display a proper error message.
  5899. */
  5900. function useRouteError() {
  5901. var _state$errors;
  5902. let error = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteErrorContext);
  5903. let state = useDataRouterState(DataRouterStateHook.UseRouteError);
  5904. let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
  5905. let thisRoute = route.matches[route.matches.length - 1]; // If this was a render error, we put it in a RouteError context inside
  5906. // of RenderErrorBoundary
  5907. if (error) {
  5908. return error;
  5909. }
  5910. !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useRouteError must be used inside a RouteContext") : 0 : void 0;
  5911. !thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useRouteError can only be used on routes that contain a unique \"id\"") : 0 : void 0; // Otherwise look for errors from our data router state
  5912. return (_state$errors = state.errors) == null ? void 0 : _state$errors[thisRoute.route.id];
  5913. }
  5914. /**
  5915. * Returns the happy-path data from the nearest ancestor <Await /> value
  5916. */
  5917. function useAsyncValue() {
  5918. let value = react__WEBPACK_IMPORTED_MODULE_1__.useContext(AwaitContext);
  5919. return value == null ? void 0 : value._data;
  5920. }
  5921. /**
  5922. * Returns the error from the nearest ancestor <Await /> value
  5923. */
  5924. function useAsyncError() {
  5925. let value = react__WEBPACK_IMPORTED_MODULE_1__.useContext(AwaitContext);
  5926. return value == null ? void 0 : value._error;
  5927. }
  5928. const alreadyWarned = {};
  5929. function warningOnce(key, cond, message) {
  5930. if (!cond && !alreadyWarned[key]) {
  5931. alreadyWarned[key] = true;
  5932. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(false, message) : 0;
  5933. }
  5934. }
  5935. /**
  5936. * Given a Remix Router instance, render the appropriate UI
  5937. */
  5938. function RouterProvider(_ref) {
  5939. let {
  5940. fallbackElement,
  5941. router
  5942. } = _ref;
  5943. // Sync router state to our component state to force re-renders
  5944. let state = useSyncExternalStore(router.subscribe, () => router.state, // We have to provide this so React@18 doesn't complain during hydration,
  5945. // but we pass our serialized hydration data into the router so state here
  5946. // is already synced with what the server saw
  5947. () => router.state);
  5948. let navigator = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {
  5949. return {
  5950. createHref: router.createHref,
  5951. go: n => router.navigate(n),
  5952. push: (to, state, opts) => router.navigate(to, {
  5953. state,
  5954. preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
  5955. }),
  5956. replace: (to, state, opts) => router.navigate(to, {
  5957. replace: true,
  5958. state,
  5959. preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
  5960. })
  5961. };
  5962. }, [router]);
  5963. let basename = router.basename || "/";
  5964. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DataRouterContext.Provider, {
  5965. value: {
  5966. router,
  5967. navigator,
  5968. static: false,
  5969. // Do we need this?
  5970. basename
  5971. }
  5972. }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DataRouterStateContext.Provider, {
  5973. value: state
  5974. }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, {
  5975. basename: router.basename,
  5976. location: router.state.location,
  5977. navigationType: router.state.historyAction,
  5978. navigator: navigator
  5979. }, router.state.initialized ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Routes, null) : fallbackElement)));
  5980. }
  5981. /**
  5982. * A <Router> that stores all entries in memory.
  5983. *
  5984. * @see https://reactrouter.com/docs/en/v6/routers/memory-router
  5985. */
  5986. function MemoryRouter(_ref2) {
  5987. let {
  5988. basename,
  5989. children,
  5990. initialEntries,
  5991. initialIndex
  5992. } = _ref2;
  5993. let historyRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef();
  5994. if (historyRef.current == null) {
  5995. historyRef.current = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createMemoryHistory)({
  5996. initialEntries,
  5997. initialIndex,
  5998. v5Compat: true
  5999. });
  6000. }
  6001. let history = historyRef.current;
  6002. let [state, setState] = react__WEBPACK_IMPORTED_MODULE_1__.useState({
  6003. action: history.action,
  6004. location: history.location
  6005. });
  6006. react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect(() => history.listen(setState), [history]);
  6007. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, {
  6008. basename: basename,
  6009. children: children,
  6010. location: state.location,
  6011. navigationType: state.action,
  6012. navigator: history
  6013. });
  6014. }
  6015. /**
  6016. * Changes the current location.
  6017. *
  6018. * Note: This API is mostly useful in React.Component subclasses that are not
  6019. * able to use hooks. In functional components, we recommend you use the
  6020. * `useNavigate` hook instead.
  6021. *
  6022. * @see https://reactrouter.com/docs/en/v6/components/navigate
  6023. */
  6024. function Navigate(_ref3) {
  6025. let {
  6026. to,
  6027. replace,
  6028. state,
  6029. relative
  6030. } = _ref3;
  6031. !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of
  6032. // the router loaded. We can help them understand how to avoid that.
  6033. "<Navigate> may be used only in the context of a <Router> component.") : 0 : void 0;
  6034. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(!react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext).static, "<Navigate> must not be used on the initial render in a <StaticRouter>. " + "This is a no-op, but you should modify your code so the <Navigate> is " + "only ever rendered in response to some user interaction or state change.") : 0;
  6035. let dataRouterState = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
  6036. let navigate = useNavigate();
  6037. react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {
  6038. // Avoid kicking off multiple navigations if we're in the middle of a
  6039. // data-router navigation, since components get re-rendered when we enter
  6040. // a submitting/loading state
  6041. if (dataRouterState && dataRouterState.navigation.state !== "idle") {
  6042. return;
  6043. }
  6044. navigate(to, {
  6045. replace,
  6046. state,
  6047. relative
  6048. });
  6049. });
  6050. return null;
  6051. }
  6052. /**
  6053. * Renders the child route's element, if there is one.
  6054. *
  6055. * @see https://reactrouter.com/docs/en/v6/components/outlet
  6056. */
  6057. function Outlet(props) {
  6058. return useOutlet(props.context);
  6059. }
  6060. /**
  6061. * Declares an element that should be rendered at a certain URL path.
  6062. *
  6063. * @see https://reactrouter.com/docs/en/v6/components/route
  6064. */
  6065. function Route(_props) {
  6066. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "A <Route> is only ever to be used as the child of <Routes> element, " + "never rendered directly. Please wrap your <Route> in a <Routes>.") : 0 ;
  6067. }
  6068. /**
  6069. * Provides location context for the rest of the app.
  6070. *
  6071. * Note: You usually won't render a <Router> directly. Instead, you'll render a
  6072. * router that is more specific to your environment such as a <BrowserRouter>
  6073. * in web browsers or a <StaticRouter> for server rendering.
  6074. *
  6075. * @see https://reactrouter.com/docs/en/v6/routers/router
  6076. */
  6077. function Router(_ref4) {
  6078. let {
  6079. basename: basenameProp = "/",
  6080. children = null,
  6081. location: locationProp,
  6082. navigationType = _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action.Pop,
  6083. navigator,
  6084. static: staticProp = false
  6085. } = _ref4;
  6086. !!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "You cannot render a <Router> inside another <Router>." + " You should never have more than one in your app.") : 0 : void 0; // Preserve trailing slashes on basename, so we can let the user control
  6087. // the enforcement of trailing slashes throughout the app
  6088. let basename = basenameProp.replace(/^\/*/, "/");
  6089. let navigationContext = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => ({
  6090. basename,
  6091. navigator,
  6092. static: staticProp
  6093. }), [basename, navigator, staticProp]);
  6094. if (typeof locationProp === "string") {
  6095. locationProp = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath)(locationProp);
  6096. }
  6097. let {
  6098. pathname = "/",
  6099. search = "",
  6100. hash = "",
  6101. state = null,
  6102. key = "default"
  6103. } = locationProp;
  6104. let location = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {
  6105. let trailingPathname = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.stripBasename)(pathname, basename);
  6106. if (trailingPathname == null) {
  6107. return null;
  6108. }
  6109. return {
  6110. pathname: trailingPathname,
  6111. search,
  6112. hash,
  6113. state,
  6114. key
  6115. };
  6116. }, [basename, pathname, search, hash, state, key]);
  6117. true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(location != null, "<Router basename=\"" + basename + "\"> is not able to match the URL " + ("\"" + pathname + search + hash + "\" because it does not start with the ") + "basename, so the <Router> won't render anything.") : 0;
  6118. if (location == null) {
  6119. return null;
  6120. }
  6121. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(NavigationContext.Provider, {
  6122. value: navigationContext
  6123. }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(LocationContext.Provider, {
  6124. children: children,
  6125. value: {
  6126. location,
  6127. navigationType
  6128. }
  6129. }));
  6130. }
  6131. /**
  6132. * A container for a nested tree of <Route> elements that renders the branch
  6133. * that best matches the current location.
  6134. *
  6135. * @see https://reactrouter.com/docs/en/v6/components/routes
  6136. */
  6137. function Routes(_ref5) {
  6138. let {
  6139. children,
  6140. location
  6141. } = _ref5;
  6142. let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterContext); // When in a DataRouterContext _without_ children, we use the router routes
  6143. // directly. If we have children, then we're in a descendant tree and we
  6144. // need to use child routes.
  6145. let routes = dataRouterContext && !children ? dataRouterContext.router.routes : createRoutesFromChildren(children);
  6146. return useRoutes(routes, location);
  6147. }
  6148. /**
  6149. * Component to use for rendering lazily loaded data from returning defer()
  6150. * in a loader function
  6151. */
  6152. function Await(_ref6) {
  6153. let {
  6154. children,
  6155. errorElement,
  6156. resolve
  6157. } = _ref6;
  6158. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitErrorBoundary, {
  6159. resolve: resolve,
  6160. errorElement: errorElement
  6161. }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(ResolveAwait, null, children));
  6162. }
  6163. var AwaitRenderStatus;
  6164. (function (AwaitRenderStatus) {
  6165. AwaitRenderStatus[AwaitRenderStatus["pending"] = 0] = "pending";
  6166. AwaitRenderStatus[AwaitRenderStatus["success"] = 1] = "success";
  6167. AwaitRenderStatus[AwaitRenderStatus["error"] = 2] = "error";
  6168. })(AwaitRenderStatus || (AwaitRenderStatus = {}));
  6169. const neverSettledPromise = new Promise(() => {});
  6170. class AwaitErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
  6171. constructor(props) {
  6172. super(props);
  6173. this.state = {
  6174. error: null
  6175. };
  6176. }
  6177. static getDerivedStateFromError(error) {
  6178. return {
  6179. error
  6180. };
  6181. }
  6182. componentDidCatch(error, errorInfo) {
  6183. console.error("<Await> caught the following error during render", error, errorInfo);
  6184. }
  6185. render() {
  6186. let {
  6187. children,
  6188. errorElement,
  6189. resolve
  6190. } = this.props;
  6191. let promise = null;
  6192. let status = AwaitRenderStatus.pending;
  6193. if (!(resolve instanceof Promise)) {
  6194. // Didn't get a promise - provide as a resolved promise
  6195. status = AwaitRenderStatus.success;
  6196. promise = Promise.resolve();
  6197. Object.defineProperty(promise, "_tracked", {
  6198. get: () => true
  6199. });
  6200. Object.defineProperty(promise, "_data", {
  6201. get: () => resolve
  6202. });
  6203. } else if (this.state.error) {
  6204. // Caught a render error, provide it as a rejected promise
  6205. status = AwaitRenderStatus.error;
  6206. let renderError = this.state.error;
  6207. promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings
  6208. Object.defineProperty(promise, "_tracked", {
  6209. get: () => true
  6210. });
  6211. Object.defineProperty(promise, "_error", {
  6212. get: () => renderError
  6213. });
  6214. } else if (resolve._tracked) {
  6215. // Already tracked promise - check contents
  6216. promise = resolve;
  6217. status = promise._error !== undefined ? AwaitRenderStatus.error : promise._data !== undefined ? AwaitRenderStatus.success : AwaitRenderStatus.pending;
  6218. } else {
  6219. // Raw (untracked) promise - track it
  6220. status = AwaitRenderStatus.pending;
  6221. Object.defineProperty(resolve, "_tracked", {
  6222. get: () => true
  6223. });
  6224. promise = resolve.then(data => Object.defineProperty(resolve, "_data", {
  6225. get: () => data
  6226. }), error => Object.defineProperty(resolve, "_error", {
  6227. get: () => error
  6228. }));
  6229. }
  6230. if (status === AwaitRenderStatus.error && promise._error instanceof _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.AbortedDeferredError) {
  6231. // Freeze the UI by throwing a never resolved promise
  6232. throw neverSettledPromise;
  6233. }
  6234. if (status === AwaitRenderStatus.error && !errorElement) {
  6235. // No errorElement, throw to the nearest route-level error boundary
  6236. throw promise._error;
  6237. }
  6238. if (status === AwaitRenderStatus.error) {
  6239. // Render via our errorElement
  6240. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitContext.Provider, {
  6241. value: promise,
  6242. children: errorElement
  6243. });
  6244. }
  6245. if (status === AwaitRenderStatus.success) {
  6246. // Render children with resolved value
  6247. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitContext.Provider, {
  6248. value: promise,
  6249. children: children
  6250. });
  6251. } // Throw to the suspense boundary
  6252. throw promise;
  6253. }
  6254. }
  6255. /**
  6256. * @private
  6257. * Indirection to leverage useAsyncValue for a render-prop API on <Await>
  6258. */
  6259. function ResolveAwait(_ref7) {
  6260. let {
  6261. children
  6262. } = _ref7;
  6263. let data = useAsyncValue();
  6264. if (typeof children === "function") {
  6265. return children(data);
  6266. }
  6267. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, children);
  6268. } ///////////////////////////////////////////////////////////////////////////////
  6269. // UTILS
  6270. ///////////////////////////////////////////////////////////////////////////////
  6271. /**
  6272. * Creates a route config from a React "children" object, which is usually
  6273. * either a `<Route>` element or an array of them. Used internally by
  6274. * `<Routes>` to create a route config from its children.
  6275. *
  6276. * @see https://reactrouter.com/docs/en/v6/utils/create-routes-from-children
  6277. */
  6278. function createRoutesFromChildren(children, parentPath) {
  6279. if (parentPath === void 0) {
  6280. parentPath = [];
  6281. }
  6282. let routes = [];
  6283. react__WEBPACK_IMPORTED_MODULE_1__.Children.forEach(children, (element, index) => {
  6284. if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.isValidElement(element)) {
  6285. // Ignore non-elements. This allows people to more easily inline
  6286. // conditionals in their route config.
  6287. return;
  6288. }
  6289. if (element.type === react__WEBPACK_IMPORTED_MODULE_1__.Fragment) {
  6290. // Transparently support React.Fragment and its children.
  6291. routes.push.apply(routes, createRoutesFromChildren(element.props.children, parentPath));
  6292. return;
  6293. }
  6294. !(element.type === Route) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "[" + (typeof element.type === "string" ? element.type : element.type.name) + "] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>") : 0 : void 0;
  6295. !(!element.props.index || !element.props.children) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "An index route cannot have child routes.") : 0 : void 0;
  6296. let treePath = [...parentPath, index];
  6297. let route = {
  6298. id: element.props.id || treePath.join("-"),
  6299. caseSensitive: element.props.caseSensitive,
  6300. element: element.props.element,
  6301. index: element.props.index,
  6302. path: element.props.path,
  6303. loader: element.props.loader,
  6304. action: element.props.action,
  6305. errorElement: element.props.errorElement,
  6306. hasErrorBoundary: element.props.errorElement != null,
  6307. shouldRevalidate: element.props.shouldRevalidate,
  6308. handle: element.props.handle
  6309. };
  6310. if (element.props.children) {
  6311. route.children = createRoutesFromChildren(element.props.children, treePath);
  6312. }
  6313. routes.push(route);
  6314. });
  6315. return routes;
  6316. }
  6317. /**
  6318. * Renders the result of `matchRoutes()` into a React element.
  6319. */
  6320. function renderMatches(matches) {
  6321. return _renderMatches(matches);
  6322. }
  6323. /**
  6324. * @private
  6325. * Walk the route tree and add hasErrorBoundary if it's not provided, so that
  6326. * users providing manual route arrays can just specify errorElement
  6327. */
  6328. function enhanceManualRouteObjects(routes) {
  6329. return routes.map(route => {
  6330. let routeClone = _extends({}, route);
  6331. if (routeClone.hasErrorBoundary == null) {
  6332. routeClone.hasErrorBoundary = routeClone.errorElement != null;
  6333. }
  6334. if (routeClone.children) {
  6335. routeClone.children = enhanceManualRouteObjects(routeClone.children);
  6336. }
  6337. return routeClone;
  6338. });
  6339. }
  6340. function createMemoryRouter(routes, opts) {
  6341. return (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createRouter)({
  6342. basename: opts == null ? void 0 : opts.basename,
  6343. history: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createMemoryHistory)({
  6344. initialEntries: opts == null ? void 0 : opts.initialEntries,
  6345. initialIndex: opts == null ? void 0 : opts.initialIndex
  6346. }),
  6347. hydrationData: opts == null ? void 0 : opts.hydrationData,
  6348. routes: enhanceManualRouteObjects(routes)
  6349. }).initialize();
  6350. } ///////////////////////////////////////////////////////////////////////////////
  6351. //# sourceMappingURL=index.js.map
  6352. /***/ }),
  6353. /***/ "./node_modules/react/cjs/react.development.js":
  6354. /*!*****************************************************!*\
  6355. !*** ./node_modules/react/cjs/react.development.js ***!
  6356. \*****************************************************/
  6357. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  6358. "use strict";
  6359. /** @license React v17.0.2
  6360. * react.development.js
  6361. *
  6362. * Copyright (c) Facebook, Inc. and its affiliates.
  6363. *
  6364. * This source code is licensed under the MIT license found in the
  6365. * LICENSE file in the root directory of this source tree.
  6366. */
  6367. if (true) {
  6368. (function() {
  6369. 'use strict';
  6370. var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
  6371. // TODO: this is special because it gets imported during build.
  6372. var ReactVersion = '17.0.2';
  6373. // ATTENTION
  6374. // When adding new symbols to this file,
  6375. // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
  6376. // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  6377. // nor polyfill, then a plain number is used for performance.
  6378. var REACT_ELEMENT_TYPE = 0xeac7;
  6379. var REACT_PORTAL_TYPE = 0xeaca;
  6380. exports.Fragment = 0xeacb;
  6381. exports.StrictMode = 0xeacc;
  6382. exports.Profiler = 0xead2;
  6383. var REACT_PROVIDER_TYPE = 0xeacd;
  6384. var REACT_CONTEXT_TYPE = 0xeace;
  6385. var REACT_FORWARD_REF_TYPE = 0xead0;
  6386. exports.Suspense = 0xead1;
  6387. var REACT_SUSPENSE_LIST_TYPE = 0xead8;
  6388. var REACT_MEMO_TYPE = 0xead3;
  6389. var REACT_LAZY_TYPE = 0xead4;
  6390. var REACT_BLOCK_TYPE = 0xead9;
  6391. var REACT_SERVER_BLOCK_TYPE = 0xeada;
  6392. var REACT_FUNDAMENTAL_TYPE = 0xead5;
  6393. var REACT_SCOPE_TYPE = 0xead7;
  6394. var REACT_OPAQUE_ID_TYPE = 0xeae0;
  6395. var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
  6396. var REACT_OFFSCREEN_TYPE = 0xeae2;
  6397. var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
  6398. if (typeof Symbol === 'function' && Symbol.for) {
  6399. var symbolFor = Symbol.for;
  6400. REACT_ELEMENT_TYPE = symbolFor('react.element');
  6401. REACT_PORTAL_TYPE = symbolFor('react.portal');
  6402. exports.Fragment = symbolFor('react.fragment');
  6403. exports.StrictMode = symbolFor('react.strict_mode');
  6404. exports.Profiler = symbolFor('react.profiler');
  6405. REACT_PROVIDER_TYPE = symbolFor('react.provider');
  6406. REACT_CONTEXT_TYPE = symbolFor('react.context');
  6407. REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
  6408. exports.Suspense = symbolFor('react.suspense');
  6409. REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
  6410. REACT_MEMO_TYPE = symbolFor('react.memo');
  6411. REACT_LAZY_TYPE = symbolFor('react.lazy');
  6412. REACT_BLOCK_TYPE = symbolFor('react.block');
  6413. REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
  6414. REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
  6415. REACT_SCOPE_TYPE = symbolFor('react.scope');
  6416. REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');
  6417. REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
  6418. REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');
  6419. REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
  6420. }
  6421. var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  6422. var FAUX_ITERATOR_SYMBOL = '@@iterator';
  6423. function getIteratorFn(maybeIterable) {
  6424. if (maybeIterable === null || typeof maybeIterable !== 'object') {
  6425. return null;
  6426. }
  6427. var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
  6428. if (typeof maybeIterator === 'function') {
  6429. return maybeIterator;
  6430. }
  6431. return null;
  6432. }
  6433. /**
  6434. * Keeps track of the current dispatcher.
  6435. */
  6436. var ReactCurrentDispatcher = {
  6437. /**
  6438. * @internal
  6439. * @type {ReactComponent}
  6440. */
  6441. current: null
  6442. };
  6443. /**
  6444. * Keeps track of the current batch's configuration such as how long an update
  6445. * should suspend for if it needs to.
  6446. */
  6447. var ReactCurrentBatchConfig = {
  6448. transition: 0
  6449. };
  6450. /**
  6451. * Keeps track of the current owner.
  6452. *
  6453. * The current owner is the component who should own any components that are
  6454. * currently being constructed.
  6455. */
  6456. var ReactCurrentOwner = {
  6457. /**
  6458. * @internal
  6459. * @type {ReactComponent}
  6460. */
  6461. current: null
  6462. };
  6463. var ReactDebugCurrentFrame = {};
  6464. var currentExtraStackFrame = null;
  6465. function setExtraStackFrame(stack) {
  6466. {
  6467. currentExtraStackFrame = stack;
  6468. }
  6469. }
  6470. {
  6471. ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {
  6472. {
  6473. currentExtraStackFrame = stack;
  6474. }
  6475. }; // Stack implementation injected by the current renderer.
  6476. ReactDebugCurrentFrame.getCurrentStack = null;
  6477. ReactDebugCurrentFrame.getStackAddendum = function () {
  6478. var stack = ''; // Add an extra top frame while an element is being validated
  6479. if (currentExtraStackFrame) {
  6480. stack += currentExtraStackFrame;
  6481. } // Delegate to the injected renderer-specific implementation
  6482. var impl = ReactDebugCurrentFrame.getCurrentStack;
  6483. if (impl) {
  6484. stack += impl() || '';
  6485. }
  6486. return stack;
  6487. };
  6488. }
  6489. /**
  6490. * Used by act() to track whether you're inside an act() scope.
  6491. */
  6492. var IsSomeRendererActing = {
  6493. current: false
  6494. };
  6495. var ReactSharedInternals = {
  6496. ReactCurrentDispatcher: ReactCurrentDispatcher,
  6497. ReactCurrentBatchConfig: ReactCurrentBatchConfig,
  6498. ReactCurrentOwner: ReactCurrentOwner,
  6499. IsSomeRendererActing: IsSomeRendererActing,
  6500. // Used by renderers to avoid bundling object-assign twice in UMD bundles:
  6501. assign: _assign
  6502. };
  6503. {
  6504. ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
  6505. }
  6506. // by calls to these methods by a Babel plugin.
  6507. //
  6508. // In PROD (or in packages without access to React internals),
  6509. // they are left as they are instead.
  6510. function warn(format) {
  6511. {
  6512. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  6513. args[_key - 1] = arguments[_key];
  6514. }
  6515. printWarning('warn', format, args);
  6516. }
  6517. }
  6518. function error(format) {
  6519. {
  6520. for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  6521. args[_key2 - 1] = arguments[_key2];
  6522. }
  6523. printWarning('error', format, args);
  6524. }
  6525. }
  6526. function printWarning(level, format, args) {
  6527. // When changing this logic, you might want to also
  6528. // update consoleWithStackDev.www.js as well.
  6529. {
  6530. var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
  6531. var stack = ReactDebugCurrentFrame.getStackAddendum();
  6532. if (stack !== '') {
  6533. format += '%s';
  6534. args = args.concat([stack]);
  6535. }
  6536. var argsWithFormat = args.map(function (item) {
  6537. return '' + item;
  6538. }); // Careful: RN currently depends on this prefix
  6539. argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
  6540. // breaks IE9: https://github.com/facebook/react/issues/13610
  6541. // eslint-disable-next-line react-internal/no-production-logging
  6542. Function.prototype.apply.call(console[level], console, argsWithFormat);
  6543. }
  6544. }
  6545. var didWarnStateUpdateForUnmountedComponent = {};
  6546. function warnNoop(publicInstance, callerName) {
  6547. {
  6548. var _constructor = publicInstance.constructor;
  6549. var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
  6550. var warningKey = componentName + "." + callerName;
  6551. if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
  6552. return;
  6553. }
  6554. error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
  6555. didWarnStateUpdateForUnmountedComponent[warningKey] = true;
  6556. }
  6557. }
  6558. /**
  6559. * This is the abstract API for an update queue.
  6560. */
  6561. var ReactNoopUpdateQueue = {
  6562. /**
  6563. * Checks whether or not this composite component is mounted.
  6564. * @param {ReactClass} publicInstance The instance we want to test.
  6565. * @return {boolean} True if mounted, false otherwise.
  6566. * @protected
  6567. * @final
  6568. */
  6569. isMounted: function (publicInstance) {
  6570. return false;
  6571. },
  6572. /**
  6573. * Forces an update. This should only be invoked when it is known with
  6574. * certainty that we are **not** in a DOM transaction.
  6575. *
  6576. * You may want to call this when you know that some deeper aspect of the
  6577. * component's state has changed but `setState` was not called.
  6578. *
  6579. * This will not invoke `shouldComponentUpdate`, but it will invoke
  6580. * `componentWillUpdate` and `componentDidUpdate`.
  6581. *
  6582. * @param {ReactClass} publicInstance The instance that should rerender.
  6583. * @param {?function} callback Called after component is updated.
  6584. * @param {?string} callerName name of the calling function in the public API.
  6585. * @internal
  6586. */
  6587. enqueueForceUpdate: function (publicInstance, callback, callerName) {
  6588. warnNoop(publicInstance, 'forceUpdate');
  6589. },
  6590. /**
  6591. * Replaces all of the state. Always use this or `setState` to mutate state.
  6592. * You should treat `this.state` as immutable.
  6593. *
  6594. * There is no guarantee that `this.state` will be immediately updated, so
  6595. * accessing `this.state` after calling this method may return the old value.
  6596. *
  6597. * @param {ReactClass} publicInstance The instance that should rerender.
  6598. * @param {object} completeState Next state.
  6599. * @param {?function} callback Called after component is updated.
  6600. * @param {?string} callerName name of the calling function in the public API.
  6601. * @internal
  6602. */
  6603. enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
  6604. warnNoop(publicInstance, 'replaceState');
  6605. },
  6606. /**
  6607. * Sets a subset of the state. This only exists because _pendingState is
  6608. * internal. This provides a merging strategy that is not available to deep
  6609. * properties which is confusing. TODO: Expose pendingState or don't use it
  6610. * during the merge.
  6611. *
  6612. * @param {ReactClass} publicInstance The instance that should rerender.
  6613. * @param {object} partialState Next partial state to be merged with state.
  6614. * @param {?function} callback Called after component is updated.
  6615. * @param {?string} Name of the calling function in the public API.
  6616. * @internal
  6617. */
  6618. enqueueSetState: function (publicInstance, partialState, callback, callerName) {
  6619. warnNoop(publicInstance, 'setState');
  6620. }
  6621. };
  6622. var emptyObject = {};
  6623. {
  6624. Object.freeze(emptyObject);
  6625. }
  6626. /**
  6627. * Base class helpers for the updating state of a component.
  6628. */
  6629. function Component(props, context, updater) {
  6630. this.props = props;
  6631. this.context = context; // If a component has string refs, we will assign a different object later.
  6632. this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
  6633. // renderer.
  6634. this.updater = updater || ReactNoopUpdateQueue;
  6635. }
  6636. Component.prototype.isReactComponent = {};
  6637. /**
  6638. * Sets a subset of the state. Always use this to mutate
  6639. * state. You should treat `this.state` as immutable.
  6640. *
  6641. * There is no guarantee that `this.state` will be immediately updated, so
  6642. * accessing `this.state` after calling this method may return the old value.
  6643. *
  6644. * There is no guarantee that calls to `setState` will run synchronously,
  6645. * as they may eventually be batched together. You can provide an optional
  6646. * callback that will be executed when the call to setState is actually
  6647. * completed.
  6648. *
  6649. * When a function is provided to setState, it will be called at some point in
  6650. * the future (not synchronously). It will be called with the up to date
  6651. * component arguments (state, props, context). These values can be different
  6652. * from this.* because your function may be called after receiveProps but before
  6653. * shouldComponentUpdate, and this new state, props, and context will not yet be
  6654. * assigned to this.
  6655. *
  6656. * @param {object|function} partialState Next partial state or function to
  6657. * produce next partial state to be merged with current state.
  6658. * @param {?function} callback Called after state is updated.
  6659. * @final
  6660. * @protected
  6661. */
  6662. Component.prototype.setState = function (partialState, callback) {
  6663. if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {
  6664. {
  6665. throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." );
  6666. }
  6667. }
  6668. this.updater.enqueueSetState(this, partialState, callback, 'setState');
  6669. };
  6670. /**
  6671. * Forces an update. This should only be invoked when it is known with
  6672. * certainty that we are **not** in a DOM transaction.
  6673. *
  6674. * You may want to call this when you know that some deeper aspect of the
  6675. * component's state has changed but `setState` was not called.
  6676. *
  6677. * This will not invoke `shouldComponentUpdate`, but it will invoke
  6678. * `componentWillUpdate` and `componentDidUpdate`.
  6679. *
  6680. * @param {?function} callback Called after update is complete.
  6681. * @final
  6682. * @protected
  6683. */
  6684. Component.prototype.forceUpdate = function (callback) {
  6685. this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
  6686. };
  6687. /**
  6688. * Deprecated APIs. These APIs used to exist on classic React classes but since
  6689. * we would like to deprecate them, we're not going to move them over to this
  6690. * modern base class. Instead, we define a getter that warns if it's accessed.
  6691. */
  6692. {
  6693. var deprecatedAPIs = {
  6694. isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
  6695. replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
  6696. };
  6697. var defineDeprecationWarning = function (methodName, info) {
  6698. Object.defineProperty(Component.prototype, methodName, {
  6699. get: function () {
  6700. warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
  6701. return undefined;
  6702. }
  6703. });
  6704. };
  6705. for (var fnName in deprecatedAPIs) {
  6706. if (deprecatedAPIs.hasOwnProperty(fnName)) {
  6707. defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
  6708. }
  6709. }
  6710. }
  6711. function ComponentDummy() {}
  6712. ComponentDummy.prototype = Component.prototype;
  6713. /**
  6714. * Convenience component with default shallow equality check for sCU.
  6715. */
  6716. function PureComponent(props, context, updater) {
  6717. this.props = props;
  6718. this.context = context; // If a component has string refs, we will assign a different object later.
  6719. this.refs = emptyObject;
  6720. this.updater = updater || ReactNoopUpdateQueue;
  6721. }
  6722. var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
  6723. pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
  6724. _assign(pureComponentPrototype, Component.prototype);
  6725. pureComponentPrototype.isPureReactComponent = true;
  6726. // an immutable object with a single mutable value
  6727. function createRef() {
  6728. var refObject = {
  6729. current: null
  6730. };
  6731. {
  6732. Object.seal(refObject);
  6733. }
  6734. return refObject;
  6735. }
  6736. function getWrappedName(outerType, innerType, wrapperName) {
  6737. var functionName = innerType.displayName || innerType.name || '';
  6738. return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
  6739. }
  6740. function getContextName(type) {
  6741. return type.displayName || 'Context';
  6742. }
  6743. function getComponentName(type) {
  6744. if (type == null) {
  6745. // Host root, text node or just invalid type.
  6746. return null;
  6747. }
  6748. {
  6749. if (typeof type.tag === 'number') {
  6750. error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
  6751. }
  6752. }
  6753. if (typeof type === 'function') {
  6754. return type.displayName || type.name || null;
  6755. }
  6756. if (typeof type === 'string') {
  6757. return type;
  6758. }
  6759. switch (type) {
  6760. case exports.Fragment:
  6761. return 'Fragment';
  6762. case REACT_PORTAL_TYPE:
  6763. return 'Portal';
  6764. case exports.Profiler:
  6765. return 'Profiler';
  6766. case exports.StrictMode:
  6767. return 'StrictMode';
  6768. case exports.Suspense:
  6769. return 'Suspense';
  6770. case REACT_SUSPENSE_LIST_TYPE:
  6771. return 'SuspenseList';
  6772. }
  6773. if (typeof type === 'object') {
  6774. switch (type.$$typeof) {
  6775. case REACT_CONTEXT_TYPE:
  6776. var context = type;
  6777. return getContextName(context) + '.Consumer';
  6778. case REACT_PROVIDER_TYPE:
  6779. var provider = type;
  6780. return getContextName(provider._context) + '.Provider';
  6781. case REACT_FORWARD_REF_TYPE:
  6782. return getWrappedName(type, type.render, 'ForwardRef');
  6783. case REACT_MEMO_TYPE:
  6784. return getComponentName(type.type);
  6785. case REACT_BLOCK_TYPE:
  6786. return getComponentName(type._render);
  6787. case REACT_LAZY_TYPE:
  6788. {
  6789. var lazyComponent = type;
  6790. var payload = lazyComponent._payload;
  6791. var init = lazyComponent._init;
  6792. try {
  6793. return getComponentName(init(payload));
  6794. } catch (x) {
  6795. return null;
  6796. }
  6797. }
  6798. }
  6799. }
  6800. return null;
  6801. }
  6802. var hasOwnProperty = Object.prototype.hasOwnProperty;
  6803. var RESERVED_PROPS = {
  6804. key: true,
  6805. ref: true,
  6806. __self: true,
  6807. __source: true
  6808. };
  6809. var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
  6810. {
  6811. didWarnAboutStringRefs = {};
  6812. }
  6813. function hasValidRef(config) {
  6814. {
  6815. if (hasOwnProperty.call(config, 'ref')) {
  6816. var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
  6817. if (getter && getter.isReactWarning) {
  6818. return false;
  6819. }
  6820. }
  6821. }
  6822. return config.ref !== undefined;
  6823. }
  6824. function hasValidKey(config) {
  6825. {
  6826. if (hasOwnProperty.call(config, 'key')) {
  6827. var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
  6828. if (getter && getter.isReactWarning) {
  6829. return false;
  6830. }
  6831. }
  6832. }
  6833. return config.key !== undefined;
  6834. }
  6835. function defineKeyPropWarningGetter(props, displayName) {
  6836. var warnAboutAccessingKey = function () {
  6837. {
  6838. if (!specialPropKeyWarningShown) {
  6839. specialPropKeyWarningShown = true;
  6840. error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
  6841. }
  6842. }
  6843. };
  6844. warnAboutAccessingKey.isReactWarning = true;
  6845. Object.defineProperty(props, 'key', {
  6846. get: warnAboutAccessingKey,
  6847. configurable: true
  6848. });
  6849. }
  6850. function defineRefPropWarningGetter(props, displayName) {
  6851. var warnAboutAccessingRef = function () {
  6852. {
  6853. if (!specialPropRefWarningShown) {
  6854. specialPropRefWarningShown = true;
  6855. error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
  6856. }
  6857. }
  6858. };
  6859. warnAboutAccessingRef.isReactWarning = true;
  6860. Object.defineProperty(props, 'ref', {
  6861. get: warnAboutAccessingRef,
  6862. configurable: true
  6863. });
  6864. }
  6865. function warnIfStringRefCannotBeAutoConverted(config) {
  6866. {
  6867. if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
  6868. var componentName = getComponentName(ReactCurrentOwner.current.type);
  6869. if (!didWarnAboutStringRefs[componentName]) {
  6870. error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);
  6871. didWarnAboutStringRefs[componentName] = true;
  6872. }
  6873. }
  6874. }
  6875. }
  6876. /**
  6877. * Factory method to create a new React element. This no longer adheres to
  6878. * the class pattern, so do not use new to call it. Also, instanceof check
  6879. * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
  6880. * if something is a React Element.
  6881. *
  6882. * @param {*} type
  6883. * @param {*} props
  6884. * @param {*} key
  6885. * @param {string|object} ref
  6886. * @param {*} owner
  6887. * @param {*} self A *temporary* helper to detect places where `this` is
  6888. * different from the `owner` when React.createElement is called, so that we
  6889. * can warn. We want to get rid of owner and replace string `ref`s with arrow
  6890. * functions, and as long as `this` and owner are the same, there will be no
  6891. * change in behavior.
  6892. * @param {*} source An annotation object (added by a transpiler or otherwise)
  6893. * indicating filename, line number, and/or other information.
  6894. * @internal
  6895. */
  6896. var ReactElement = function (type, key, ref, self, source, owner, props) {
  6897. var element = {
  6898. // This tag allows us to uniquely identify this as a React Element
  6899. $$typeof: REACT_ELEMENT_TYPE,
  6900. // Built-in properties that belong on the element
  6901. type: type,
  6902. key: key,
  6903. ref: ref,
  6904. props: props,
  6905. // Record the component responsible for creating this element.
  6906. _owner: owner
  6907. };
  6908. {
  6909. // The validation flag is currently mutative. We put it on
  6910. // an external backing store so that we can freeze the whole object.
  6911. // This can be replaced with a WeakMap once they are implemented in
  6912. // commonly used development environments.
  6913. element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
  6914. // the validation flag non-enumerable (where possible, which should
  6915. // include every environment we run tests in), so the test framework
  6916. // ignores it.
  6917. Object.defineProperty(element._store, 'validated', {
  6918. configurable: false,
  6919. enumerable: false,
  6920. writable: true,
  6921. value: false
  6922. }); // self and source are DEV only properties.
  6923. Object.defineProperty(element, '_self', {
  6924. configurable: false,
  6925. enumerable: false,
  6926. writable: false,
  6927. value: self
  6928. }); // Two elements created in two different places should be considered
  6929. // equal for testing purposes and therefore we hide it from enumeration.
  6930. Object.defineProperty(element, '_source', {
  6931. configurable: false,
  6932. enumerable: false,
  6933. writable: false,
  6934. value: source
  6935. });
  6936. if (Object.freeze) {
  6937. Object.freeze(element.props);
  6938. Object.freeze(element);
  6939. }
  6940. }
  6941. return element;
  6942. };
  6943. /**
  6944. * Create and return a new ReactElement of the given type.
  6945. * See https://reactjs.org/docs/react-api.html#createelement
  6946. */
  6947. function createElement(type, config, children) {
  6948. var propName; // Reserved names are extracted
  6949. var props = {};
  6950. var key = null;
  6951. var ref = null;
  6952. var self = null;
  6953. var source = null;
  6954. if (config != null) {
  6955. if (hasValidRef(config)) {
  6956. ref = config.ref;
  6957. {
  6958. warnIfStringRefCannotBeAutoConverted(config);
  6959. }
  6960. }
  6961. if (hasValidKey(config)) {
  6962. key = '' + config.key;
  6963. }
  6964. self = config.__self === undefined ? null : config.__self;
  6965. source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
  6966. for (propName in config) {
  6967. if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  6968. props[propName] = config[propName];
  6969. }
  6970. }
  6971. } // Children can be more than one argument, and those are transferred onto
  6972. // the newly allocated props object.
  6973. var childrenLength = arguments.length - 2;
  6974. if (childrenLength === 1) {
  6975. props.children = children;
  6976. } else if (childrenLength > 1) {
  6977. var childArray = Array(childrenLength);
  6978. for (var i = 0; i < childrenLength; i++) {
  6979. childArray[i] = arguments[i + 2];
  6980. }
  6981. {
  6982. if (Object.freeze) {
  6983. Object.freeze(childArray);
  6984. }
  6985. }
  6986. props.children = childArray;
  6987. } // Resolve default props
  6988. if (type && type.defaultProps) {
  6989. var defaultProps = type.defaultProps;
  6990. for (propName in defaultProps) {
  6991. if (props[propName] === undefined) {
  6992. props[propName] = defaultProps[propName];
  6993. }
  6994. }
  6995. }
  6996. {
  6997. if (key || ref) {
  6998. var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
  6999. if (key) {
  7000. defineKeyPropWarningGetter(props, displayName);
  7001. }
  7002. if (ref) {
  7003. defineRefPropWarningGetter(props, displayName);
  7004. }
  7005. }
  7006. }
  7007. return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
  7008. }
  7009. function cloneAndReplaceKey(oldElement, newKey) {
  7010. var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
  7011. return newElement;
  7012. }
  7013. /**
  7014. * Clone and return a new ReactElement using element as the starting point.
  7015. * See https://reactjs.org/docs/react-api.html#cloneelement
  7016. */
  7017. function cloneElement(element, config, children) {
  7018. if (!!(element === null || element === undefined)) {
  7019. {
  7020. throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." );
  7021. }
  7022. }
  7023. var propName; // Original props are copied
  7024. var props = _assign({}, element.props); // Reserved names are extracted
  7025. var key = element.key;
  7026. var ref = element.ref; // Self is preserved since the owner is preserved.
  7027. var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
  7028. // transpiler, and the original source is probably a better indicator of the
  7029. // true owner.
  7030. var source = element._source; // Owner will be preserved, unless ref is overridden
  7031. var owner = element._owner;
  7032. if (config != null) {
  7033. if (hasValidRef(config)) {
  7034. // Silently steal the ref from the parent.
  7035. ref = config.ref;
  7036. owner = ReactCurrentOwner.current;
  7037. }
  7038. if (hasValidKey(config)) {
  7039. key = '' + config.key;
  7040. } // Remaining properties override existing props
  7041. var defaultProps;
  7042. if (element.type && element.type.defaultProps) {
  7043. defaultProps = element.type.defaultProps;
  7044. }
  7045. for (propName in config) {
  7046. if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  7047. if (config[propName] === undefined && defaultProps !== undefined) {
  7048. // Resolve default props
  7049. props[propName] = defaultProps[propName];
  7050. } else {
  7051. props[propName] = config[propName];
  7052. }
  7053. }
  7054. }
  7055. } // Children can be more than one argument, and those are transferred onto
  7056. // the newly allocated props object.
  7057. var childrenLength = arguments.length - 2;
  7058. if (childrenLength === 1) {
  7059. props.children = children;
  7060. } else if (childrenLength > 1) {
  7061. var childArray = Array(childrenLength);
  7062. for (var i = 0; i < childrenLength; i++) {
  7063. childArray[i] = arguments[i + 2];
  7064. }
  7065. props.children = childArray;
  7066. }
  7067. return ReactElement(element.type, key, ref, self, source, owner, props);
  7068. }
  7069. /**
  7070. * Verifies the object is a ReactElement.
  7071. * See https://reactjs.org/docs/react-api.html#isvalidelement
  7072. * @param {?object} object
  7073. * @return {boolean} True if `object` is a ReactElement.
  7074. * @final
  7075. */
  7076. function isValidElement(object) {
  7077. return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  7078. }
  7079. var SEPARATOR = '.';
  7080. var SUBSEPARATOR = ':';
  7081. /**
  7082. * Escape and wrap key so it is safe to use as a reactid
  7083. *
  7084. * @param {string} key to be escaped.
  7085. * @return {string} the escaped key.
  7086. */
  7087. function escape(key) {
  7088. var escapeRegex = /[=:]/g;
  7089. var escaperLookup = {
  7090. '=': '=0',
  7091. ':': '=2'
  7092. };
  7093. var escapedString = key.replace(escapeRegex, function (match) {
  7094. return escaperLookup[match];
  7095. });
  7096. return '$' + escapedString;
  7097. }
  7098. /**
  7099. * TODO: Test that a single child and an array with one item have the same key
  7100. * pattern.
  7101. */
  7102. var didWarnAboutMaps = false;
  7103. var userProvidedKeyEscapeRegex = /\/+/g;
  7104. function escapeUserProvidedKey(text) {
  7105. return text.replace(userProvidedKeyEscapeRegex, '$&/');
  7106. }
  7107. /**
  7108. * Generate a key string that identifies a element within a set.
  7109. *
  7110. * @param {*} element A element that could contain a manual key.
  7111. * @param {number} index Index that is used if a manual key is not provided.
  7112. * @return {string}
  7113. */
  7114. function getElementKey(element, index) {
  7115. // Do some typechecking here since we call this blindly. We want to ensure
  7116. // that we don't block potential future ES APIs.
  7117. if (typeof element === 'object' && element !== null && element.key != null) {
  7118. // Explicit key
  7119. return escape('' + element.key);
  7120. } // Implicit key determined by the index in the set
  7121. return index.toString(36);
  7122. }
  7123. function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
  7124. var type = typeof children;
  7125. if (type === 'undefined' || type === 'boolean') {
  7126. // All of the above are perceived as null.
  7127. children = null;
  7128. }
  7129. var invokeCallback = false;
  7130. if (children === null) {
  7131. invokeCallback = true;
  7132. } else {
  7133. switch (type) {
  7134. case 'string':
  7135. case 'number':
  7136. invokeCallback = true;
  7137. break;
  7138. case 'object':
  7139. switch (children.$$typeof) {
  7140. case REACT_ELEMENT_TYPE:
  7141. case REACT_PORTAL_TYPE:
  7142. invokeCallback = true;
  7143. }
  7144. }
  7145. }
  7146. if (invokeCallback) {
  7147. var _child = children;
  7148. var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array
  7149. // so that it's consistent if the number of children grows:
  7150. var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;
  7151. if (Array.isArray(mappedChild)) {
  7152. var escapedChildKey = '';
  7153. if (childKey != null) {
  7154. escapedChildKey = escapeUserProvidedKey(childKey) + '/';
  7155. }
  7156. mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {
  7157. return c;
  7158. });
  7159. } else if (mappedChild != null) {
  7160. if (isValidElement(mappedChild)) {
  7161. mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
  7162. // traverseAllChildren used to do for objects as children
  7163. escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
  7164. mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
  7165. escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);
  7166. }
  7167. array.push(mappedChild);
  7168. }
  7169. return 1;
  7170. }
  7171. var child;
  7172. var nextName;
  7173. var subtreeCount = 0; // Count of children found in the current subtree.
  7174. var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
  7175. if (Array.isArray(children)) {
  7176. for (var i = 0; i < children.length; i++) {
  7177. child = children[i];
  7178. nextName = nextNamePrefix + getElementKey(child, i);
  7179. subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
  7180. }
  7181. } else {
  7182. var iteratorFn = getIteratorFn(children);
  7183. if (typeof iteratorFn === 'function') {
  7184. var iterableChildren = children;
  7185. {
  7186. // Warn about using Maps as children
  7187. if (iteratorFn === iterableChildren.entries) {
  7188. if (!didWarnAboutMaps) {
  7189. warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
  7190. }
  7191. didWarnAboutMaps = true;
  7192. }
  7193. }
  7194. var iterator = iteratorFn.call(iterableChildren);
  7195. var step;
  7196. var ii = 0;
  7197. while (!(step = iterator.next()).done) {
  7198. child = step.value;
  7199. nextName = nextNamePrefix + getElementKey(child, ii++);
  7200. subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
  7201. }
  7202. } else if (type === 'object') {
  7203. var childrenString = '' + children;
  7204. {
  7205. {
  7206. throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). If you meant to render a collection of children, use an array instead." );
  7207. }
  7208. }
  7209. }
  7210. }
  7211. return subtreeCount;
  7212. }
  7213. /**
  7214. * Maps children that are typically specified as `props.children`.
  7215. *
  7216. * See https://reactjs.org/docs/react-api.html#reactchildrenmap
  7217. *
  7218. * The provided mapFunction(child, index) will be called for each
  7219. * leaf child.
  7220. *
  7221. * @param {?*} children Children tree container.
  7222. * @param {function(*, int)} func The map function.
  7223. * @param {*} context Context for mapFunction.
  7224. * @return {object} Object containing the ordered map of results.
  7225. */
  7226. function mapChildren(children, func, context) {
  7227. if (children == null) {
  7228. return children;
  7229. }
  7230. var result = [];
  7231. var count = 0;
  7232. mapIntoArray(children, result, '', '', function (child) {
  7233. return func.call(context, child, count++);
  7234. });
  7235. return result;
  7236. }
  7237. /**
  7238. * Count the number of children that are typically specified as
  7239. * `props.children`.
  7240. *
  7241. * See https://reactjs.org/docs/react-api.html#reactchildrencount
  7242. *
  7243. * @param {?*} children Children tree container.
  7244. * @return {number} The number of children.
  7245. */
  7246. function countChildren(children) {
  7247. var n = 0;
  7248. mapChildren(children, function () {
  7249. n++; // Don't return anything
  7250. });
  7251. return n;
  7252. }
  7253. /**
  7254. * Iterates through children that are typically specified as `props.children`.
  7255. *
  7256. * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
  7257. *
  7258. * The provided forEachFunc(child, index) will be called for each
  7259. * leaf child.
  7260. *
  7261. * @param {?*} children Children tree container.
  7262. * @param {function(*, int)} forEachFunc
  7263. * @param {*} forEachContext Context for forEachContext.
  7264. */
  7265. function forEachChildren(children, forEachFunc, forEachContext) {
  7266. mapChildren(children, function () {
  7267. forEachFunc.apply(this, arguments); // Don't return anything.
  7268. }, forEachContext);
  7269. }
  7270. /**
  7271. * Flatten a children object (typically specified as `props.children`) and
  7272. * return an array with appropriately re-keyed children.
  7273. *
  7274. * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
  7275. */
  7276. function toArray(children) {
  7277. return mapChildren(children, function (child) {
  7278. return child;
  7279. }) || [];
  7280. }
  7281. /**
  7282. * Returns the first child in a collection of children and verifies that there
  7283. * is only one child in the collection.
  7284. *
  7285. * See https://reactjs.org/docs/react-api.html#reactchildrenonly
  7286. *
  7287. * The current implementation of this function assumes that a single child gets
  7288. * passed without a wrapper, but the purpose of this helper function is to
  7289. * abstract away the particular structure of children.
  7290. *
  7291. * @param {?object} children Child collection structure.
  7292. * @return {ReactElement} The first and only `ReactElement` contained in the
  7293. * structure.
  7294. */
  7295. function onlyChild(children) {
  7296. if (!isValidElement(children)) {
  7297. {
  7298. throw Error( "React.Children.only expected to receive a single React element child." );
  7299. }
  7300. }
  7301. return children;
  7302. }
  7303. function createContext(defaultValue, calculateChangedBits) {
  7304. if (calculateChangedBits === undefined) {
  7305. calculateChangedBits = null;
  7306. } else {
  7307. {
  7308. if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {
  7309. error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);
  7310. }
  7311. }
  7312. }
  7313. var context = {
  7314. $$typeof: REACT_CONTEXT_TYPE,
  7315. _calculateChangedBits: calculateChangedBits,
  7316. // As a workaround to support multiple concurrent renderers, we categorize
  7317. // some renderers as primary and others as secondary. We only expect
  7318. // there to be two concurrent renderers at most: React Native (primary) and
  7319. // Fabric (secondary); React DOM (primary) and React ART (secondary).
  7320. // Secondary renderers store their context values on separate fields.
  7321. _currentValue: defaultValue,
  7322. _currentValue2: defaultValue,
  7323. // Used to track how many concurrent renderers this context currently
  7324. // supports within in a single renderer. Such as parallel server rendering.
  7325. _threadCount: 0,
  7326. // These are circular
  7327. Provider: null,
  7328. Consumer: null
  7329. };
  7330. context.Provider = {
  7331. $$typeof: REACT_PROVIDER_TYPE,
  7332. _context: context
  7333. };
  7334. var hasWarnedAboutUsingNestedContextConsumers = false;
  7335. var hasWarnedAboutUsingConsumerProvider = false;
  7336. var hasWarnedAboutDisplayNameOnConsumer = false;
  7337. {
  7338. // A separate object, but proxies back to the original context object for
  7339. // backwards compatibility. It has a different $$typeof, so we can properly
  7340. // warn for the incorrect usage of Context as a Consumer.
  7341. var Consumer = {
  7342. $$typeof: REACT_CONTEXT_TYPE,
  7343. _context: context,
  7344. _calculateChangedBits: context._calculateChangedBits
  7345. }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
  7346. Object.defineProperties(Consumer, {
  7347. Provider: {
  7348. get: function () {
  7349. if (!hasWarnedAboutUsingConsumerProvider) {
  7350. hasWarnedAboutUsingConsumerProvider = true;
  7351. error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
  7352. }
  7353. return context.Provider;
  7354. },
  7355. set: function (_Provider) {
  7356. context.Provider = _Provider;
  7357. }
  7358. },
  7359. _currentValue: {
  7360. get: function () {
  7361. return context._currentValue;
  7362. },
  7363. set: function (_currentValue) {
  7364. context._currentValue = _currentValue;
  7365. }
  7366. },
  7367. _currentValue2: {
  7368. get: function () {
  7369. return context._currentValue2;
  7370. },
  7371. set: function (_currentValue2) {
  7372. context._currentValue2 = _currentValue2;
  7373. }
  7374. },
  7375. _threadCount: {
  7376. get: function () {
  7377. return context._threadCount;
  7378. },
  7379. set: function (_threadCount) {
  7380. context._threadCount = _threadCount;
  7381. }
  7382. },
  7383. Consumer: {
  7384. get: function () {
  7385. if (!hasWarnedAboutUsingNestedContextConsumers) {
  7386. hasWarnedAboutUsingNestedContextConsumers = true;
  7387. error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
  7388. }
  7389. return context.Consumer;
  7390. }
  7391. },
  7392. displayName: {
  7393. get: function () {
  7394. return context.displayName;
  7395. },
  7396. set: function (displayName) {
  7397. if (!hasWarnedAboutDisplayNameOnConsumer) {
  7398. warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName);
  7399. hasWarnedAboutDisplayNameOnConsumer = true;
  7400. }
  7401. }
  7402. }
  7403. }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
  7404. context.Consumer = Consumer;
  7405. }
  7406. {
  7407. context._currentRenderer = null;
  7408. context._currentRenderer2 = null;
  7409. }
  7410. return context;
  7411. }
  7412. var Uninitialized = -1;
  7413. var Pending = 0;
  7414. var Resolved = 1;
  7415. var Rejected = 2;
  7416. function lazyInitializer(payload) {
  7417. if (payload._status === Uninitialized) {
  7418. var ctor = payload._result;
  7419. var thenable = ctor(); // Transition to the next state.
  7420. var pending = payload;
  7421. pending._status = Pending;
  7422. pending._result = thenable;
  7423. thenable.then(function (moduleObject) {
  7424. if (payload._status === Pending) {
  7425. var defaultExport = moduleObject.default;
  7426. {
  7427. if (defaultExport === undefined) {
  7428. error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
  7429. 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject);
  7430. }
  7431. } // Transition to the next state.
  7432. var resolved = payload;
  7433. resolved._status = Resolved;
  7434. resolved._result = defaultExport;
  7435. }
  7436. }, function (error) {
  7437. if (payload._status === Pending) {
  7438. // Transition to the next state.
  7439. var rejected = payload;
  7440. rejected._status = Rejected;
  7441. rejected._result = error;
  7442. }
  7443. });
  7444. }
  7445. if (payload._status === Resolved) {
  7446. return payload._result;
  7447. } else {
  7448. throw payload._result;
  7449. }
  7450. }
  7451. function lazy(ctor) {
  7452. var payload = {
  7453. // We use these fields to store the result.
  7454. _status: -1,
  7455. _result: ctor
  7456. };
  7457. var lazyType = {
  7458. $$typeof: REACT_LAZY_TYPE,
  7459. _payload: payload,
  7460. _init: lazyInitializer
  7461. };
  7462. {
  7463. // In production, this would just set it on the object.
  7464. var defaultProps;
  7465. var propTypes; // $FlowFixMe
  7466. Object.defineProperties(lazyType, {
  7467. defaultProps: {
  7468. configurable: true,
  7469. get: function () {
  7470. return defaultProps;
  7471. },
  7472. set: function (newDefaultProps) {
  7473. error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
  7474. defaultProps = newDefaultProps; // Match production behavior more closely:
  7475. // $FlowFixMe
  7476. Object.defineProperty(lazyType, 'defaultProps', {
  7477. enumerable: true
  7478. });
  7479. }
  7480. },
  7481. propTypes: {
  7482. configurable: true,
  7483. get: function () {
  7484. return propTypes;
  7485. },
  7486. set: function (newPropTypes) {
  7487. error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
  7488. propTypes = newPropTypes; // Match production behavior more closely:
  7489. // $FlowFixMe
  7490. Object.defineProperty(lazyType, 'propTypes', {
  7491. enumerable: true
  7492. });
  7493. }
  7494. }
  7495. });
  7496. }
  7497. return lazyType;
  7498. }
  7499. function forwardRef(render) {
  7500. {
  7501. if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
  7502. error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
  7503. } else if (typeof render !== 'function') {
  7504. error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
  7505. } else {
  7506. if (render.length !== 0 && render.length !== 2) {
  7507. error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
  7508. }
  7509. }
  7510. if (render != null) {
  7511. if (render.defaultProps != null || render.propTypes != null) {
  7512. error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
  7513. }
  7514. }
  7515. }
  7516. var elementType = {
  7517. $$typeof: REACT_FORWARD_REF_TYPE,
  7518. render: render
  7519. };
  7520. {
  7521. var ownName;
  7522. Object.defineProperty(elementType, 'displayName', {
  7523. enumerable: false,
  7524. configurable: true,
  7525. get: function () {
  7526. return ownName;
  7527. },
  7528. set: function (name) {
  7529. ownName = name;
  7530. if (render.displayName == null) {
  7531. render.displayName = name;
  7532. }
  7533. }
  7534. });
  7535. }
  7536. return elementType;
  7537. }
  7538. // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
  7539. var enableScopeAPI = false; // Experimental Create Event Handle API.
  7540. function isValidElementType(type) {
  7541. if (typeof type === 'string' || typeof type === 'function') {
  7542. return true;
  7543. } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
  7544. if (type === exports.Fragment || type === exports.Profiler || type === REACT_DEBUG_TRACING_MODE_TYPE || type === exports.StrictMode || type === exports.Suspense || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {
  7545. return true;
  7546. }
  7547. if (typeof type === 'object' && type !== null) {
  7548. if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {
  7549. return true;
  7550. }
  7551. }
  7552. return false;
  7553. }
  7554. function memo(type, compare) {
  7555. {
  7556. if (!isValidElementType(type)) {
  7557. error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
  7558. }
  7559. }
  7560. var elementType = {
  7561. $$typeof: REACT_MEMO_TYPE,
  7562. type: type,
  7563. compare: compare === undefined ? null : compare
  7564. };
  7565. {
  7566. var ownName;
  7567. Object.defineProperty(elementType, 'displayName', {
  7568. enumerable: false,
  7569. configurable: true,
  7570. get: function () {
  7571. return ownName;
  7572. },
  7573. set: function (name) {
  7574. ownName = name;
  7575. if (type.displayName == null) {
  7576. type.displayName = name;
  7577. }
  7578. }
  7579. });
  7580. }
  7581. return elementType;
  7582. }
  7583. function resolveDispatcher() {
  7584. var dispatcher = ReactCurrentDispatcher.current;
  7585. if (!(dispatcher !== null)) {
  7586. {
  7587. throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." );
  7588. }
  7589. }
  7590. return dispatcher;
  7591. }
  7592. function useContext(Context, unstable_observedBits) {
  7593. var dispatcher = resolveDispatcher();
  7594. {
  7595. if (unstable_observedBits !== undefined) {
  7596. error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://reactjs.org/link/rules-of-hooks' : '');
  7597. } // TODO: add a more generic warning for invalid values.
  7598. if (Context._context !== undefined) {
  7599. var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
  7600. // and nobody should be using this in existing code.
  7601. if (realContext.Consumer === Context) {
  7602. error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
  7603. } else if (realContext.Provider === Context) {
  7604. error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
  7605. }
  7606. }
  7607. }
  7608. return dispatcher.useContext(Context, unstable_observedBits);
  7609. }
  7610. function useState(initialState) {
  7611. var dispatcher = resolveDispatcher();
  7612. return dispatcher.useState(initialState);
  7613. }
  7614. function useReducer(reducer, initialArg, init) {
  7615. var dispatcher = resolveDispatcher();
  7616. return dispatcher.useReducer(reducer, initialArg, init);
  7617. }
  7618. function useRef(initialValue) {
  7619. var dispatcher = resolveDispatcher();
  7620. return dispatcher.useRef(initialValue);
  7621. }
  7622. function useEffect(create, deps) {
  7623. var dispatcher = resolveDispatcher();
  7624. return dispatcher.useEffect(create, deps);
  7625. }
  7626. function useLayoutEffect(create, deps) {
  7627. var dispatcher = resolveDispatcher();
  7628. return dispatcher.useLayoutEffect(create, deps);
  7629. }
  7630. function useCallback(callback, deps) {
  7631. var dispatcher = resolveDispatcher();
  7632. return dispatcher.useCallback(callback, deps);
  7633. }
  7634. function useMemo(create, deps) {
  7635. var dispatcher = resolveDispatcher();
  7636. return dispatcher.useMemo(create, deps);
  7637. }
  7638. function useImperativeHandle(ref, create, deps) {
  7639. var dispatcher = resolveDispatcher();
  7640. return dispatcher.useImperativeHandle(ref, create, deps);
  7641. }
  7642. function useDebugValue(value, formatterFn) {
  7643. {
  7644. var dispatcher = resolveDispatcher();
  7645. return dispatcher.useDebugValue(value, formatterFn);
  7646. }
  7647. }
  7648. // Helpers to patch console.logs to avoid logging during side-effect free
  7649. // replaying on render function. This currently only patches the object
  7650. // lazily which won't cover if the log function was extracted eagerly.
  7651. // We could also eagerly patch the method.
  7652. var disabledDepth = 0;
  7653. var prevLog;
  7654. var prevInfo;
  7655. var prevWarn;
  7656. var prevError;
  7657. var prevGroup;
  7658. var prevGroupCollapsed;
  7659. var prevGroupEnd;
  7660. function disabledLog() {}
  7661. disabledLog.__reactDisabledLog = true;
  7662. function disableLogs() {
  7663. {
  7664. if (disabledDepth === 0) {
  7665. /* eslint-disable react-internal/no-production-logging */
  7666. prevLog = console.log;
  7667. prevInfo = console.info;
  7668. prevWarn = console.warn;
  7669. prevError = console.error;
  7670. prevGroup = console.group;
  7671. prevGroupCollapsed = console.groupCollapsed;
  7672. prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
  7673. var props = {
  7674. configurable: true,
  7675. enumerable: true,
  7676. value: disabledLog,
  7677. writable: true
  7678. }; // $FlowFixMe Flow thinks console is immutable.
  7679. Object.defineProperties(console, {
  7680. info: props,
  7681. log: props,
  7682. warn: props,
  7683. error: props,
  7684. group: props,
  7685. groupCollapsed: props,
  7686. groupEnd: props
  7687. });
  7688. /* eslint-enable react-internal/no-production-logging */
  7689. }
  7690. disabledDepth++;
  7691. }
  7692. }
  7693. function reenableLogs() {
  7694. {
  7695. disabledDepth--;
  7696. if (disabledDepth === 0) {
  7697. /* eslint-disable react-internal/no-production-logging */
  7698. var props = {
  7699. configurable: true,
  7700. enumerable: true,
  7701. writable: true
  7702. }; // $FlowFixMe Flow thinks console is immutable.
  7703. Object.defineProperties(console, {
  7704. log: _assign({}, props, {
  7705. value: prevLog
  7706. }),
  7707. info: _assign({}, props, {
  7708. value: prevInfo
  7709. }),
  7710. warn: _assign({}, props, {
  7711. value: prevWarn
  7712. }),
  7713. error: _assign({}, props, {
  7714. value: prevError
  7715. }),
  7716. group: _assign({}, props, {
  7717. value: prevGroup
  7718. }),
  7719. groupCollapsed: _assign({}, props, {
  7720. value: prevGroupCollapsed
  7721. }),
  7722. groupEnd: _assign({}, props, {
  7723. value: prevGroupEnd
  7724. })
  7725. });
  7726. /* eslint-enable react-internal/no-production-logging */
  7727. }
  7728. if (disabledDepth < 0) {
  7729. error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
  7730. }
  7731. }
  7732. }
  7733. var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;
  7734. var prefix;
  7735. function describeBuiltInComponentFrame(name, source, ownerFn) {
  7736. {
  7737. if (prefix === undefined) {
  7738. // Extract the VM specific prefix used by each line.
  7739. try {
  7740. throw Error();
  7741. } catch (x) {
  7742. var match = x.stack.trim().match(/\n( *(at )?)/);
  7743. prefix = match && match[1] || '';
  7744. }
  7745. } // We use the prefix to ensure our stacks line up with native stack frames.
  7746. return '\n' + prefix + name;
  7747. }
  7748. }
  7749. var reentry = false;
  7750. var componentFrameCache;
  7751. {
  7752. var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
  7753. componentFrameCache = new PossiblyWeakMap();
  7754. }
  7755. function describeNativeComponentFrame(fn, construct) {
  7756. // If something asked for a stack inside a fake render, it should get ignored.
  7757. if (!fn || reentry) {
  7758. return '';
  7759. }
  7760. {
  7761. var frame = componentFrameCache.get(fn);
  7762. if (frame !== undefined) {
  7763. return frame;
  7764. }
  7765. }
  7766. var control;
  7767. reentry = true;
  7768. var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
  7769. Error.prepareStackTrace = undefined;
  7770. var previousDispatcher;
  7771. {
  7772. previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function
  7773. // for warnings.
  7774. ReactCurrentDispatcher$1.current = null;
  7775. disableLogs();
  7776. }
  7777. try {
  7778. // This should throw.
  7779. if (construct) {
  7780. // Something should be setting the props in the constructor.
  7781. var Fake = function () {
  7782. throw Error();
  7783. }; // $FlowFixMe
  7784. Object.defineProperty(Fake.prototype, 'props', {
  7785. set: function () {
  7786. // We use a throwing setter instead of frozen or non-writable props
  7787. // because that won't throw in a non-strict mode function.
  7788. throw Error();
  7789. }
  7790. });
  7791. if (typeof Reflect === 'object' && Reflect.construct) {
  7792. // We construct a different control for this case to include any extra
  7793. // frames added by the construct call.
  7794. try {
  7795. Reflect.construct(Fake, []);
  7796. } catch (x) {
  7797. control = x;
  7798. }
  7799. Reflect.construct(fn, [], Fake);
  7800. } else {
  7801. try {
  7802. Fake.call();
  7803. } catch (x) {
  7804. control = x;
  7805. }
  7806. fn.call(Fake.prototype);
  7807. }
  7808. } else {
  7809. try {
  7810. throw Error();
  7811. } catch (x) {
  7812. control = x;
  7813. }
  7814. fn();
  7815. }
  7816. } catch (sample) {
  7817. // This is inlined manually because closure doesn't do it for us.
  7818. if (sample && control && typeof sample.stack === 'string') {
  7819. // This extracts the first frame from the sample that isn't also in the control.
  7820. // Skipping one frame that we assume is the frame that calls the two.
  7821. var sampleLines = sample.stack.split('\n');
  7822. var controlLines = control.stack.split('\n');
  7823. var s = sampleLines.length - 1;
  7824. var c = controlLines.length - 1;
  7825. while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
  7826. // We expect at least one stack frame to be shared.
  7827. // Typically this will be the root most one. However, stack frames may be
  7828. // cut off due to maximum stack limits. In this case, one maybe cut off
  7829. // earlier than the other. We assume that the sample is longer or the same
  7830. // and there for cut off earlier. So we should find the root most frame in
  7831. // the sample somewhere in the control.
  7832. c--;
  7833. }
  7834. for (; s >= 1 && c >= 0; s--, c--) {
  7835. // Next we find the first one that isn't the same which should be the
  7836. // frame that called our sample function and the control.
  7837. if (sampleLines[s] !== controlLines[c]) {
  7838. // In V8, the first line is describing the message but other VMs don't.
  7839. // If we're about to return the first line, and the control is also on the same
  7840. // line, that's a pretty good indicator that our sample threw at same line as
  7841. // the control. I.e. before we entered the sample frame. So we ignore this result.
  7842. // This can happen if you passed a class to function component, or non-function.
  7843. if (s !== 1 || c !== 1) {
  7844. do {
  7845. s--;
  7846. c--; // We may still have similar intermediate frames from the construct call.
  7847. // The next one that isn't the same should be our match though.
  7848. if (c < 0 || sampleLines[s] !== controlLines[c]) {
  7849. // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
  7850. var _frame = '\n' + sampleLines[s].replace(' at new ', ' at ');
  7851. {
  7852. if (typeof fn === 'function') {
  7853. componentFrameCache.set(fn, _frame);
  7854. }
  7855. } // Return the line we found.
  7856. return _frame;
  7857. }
  7858. } while (s >= 1 && c >= 0);
  7859. }
  7860. break;
  7861. }
  7862. }
  7863. }
  7864. } finally {
  7865. reentry = false;
  7866. {
  7867. ReactCurrentDispatcher$1.current = previousDispatcher;
  7868. reenableLogs();
  7869. }
  7870. Error.prepareStackTrace = previousPrepareStackTrace;
  7871. } // Fallback to just using the name if we couldn't make it throw.
  7872. var name = fn ? fn.displayName || fn.name : '';
  7873. var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
  7874. {
  7875. if (typeof fn === 'function') {
  7876. componentFrameCache.set(fn, syntheticFrame);
  7877. }
  7878. }
  7879. return syntheticFrame;
  7880. }
  7881. function describeFunctionComponentFrame(fn, source, ownerFn) {
  7882. {
  7883. return describeNativeComponentFrame(fn, false);
  7884. }
  7885. }
  7886. function shouldConstruct(Component) {
  7887. var prototype = Component.prototype;
  7888. return !!(prototype && prototype.isReactComponent);
  7889. }
  7890. function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
  7891. if (type == null) {
  7892. return '';
  7893. }
  7894. if (typeof type === 'function') {
  7895. {
  7896. return describeNativeComponentFrame(type, shouldConstruct(type));
  7897. }
  7898. }
  7899. if (typeof type === 'string') {
  7900. return describeBuiltInComponentFrame(type);
  7901. }
  7902. switch (type) {
  7903. case exports.Suspense:
  7904. return describeBuiltInComponentFrame('Suspense');
  7905. case REACT_SUSPENSE_LIST_TYPE:
  7906. return describeBuiltInComponentFrame('SuspenseList');
  7907. }
  7908. if (typeof type === 'object') {
  7909. switch (type.$$typeof) {
  7910. case REACT_FORWARD_REF_TYPE:
  7911. return describeFunctionComponentFrame(type.render);
  7912. case REACT_MEMO_TYPE:
  7913. // Memo may contain any component type so we recursively resolve it.
  7914. return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
  7915. case REACT_BLOCK_TYPE:
  7916. return describeFunctionComponentFrame(type._render);
  7917. case REACT_LAZY_TYPE:
  7918. {
  7919. var lazyComponent = type;
  7920. var payload = lazyComponent._payload;
  7921. var init = lazyComponent._init;
  7922. try {
  7923. // Lazy may contain any component type so we recursively resolve it.
  7924. return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
  7925. } catch (x) {}
  7926. }
  7927. }
  7928. }
  7929. return '';
  7930. }
  7931. var loggedTypeFailures = {};
  7932. var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
  7933. function setCurrentlyValidatingElement(element) {
  7934. {
  7935. if (element) {
  7936. var owner = element._owner;
  7937. var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
  7938. ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
  7939. } else {
  7940. ReactDebugCurrentFrame$1.setExtraStackFrame(null);
  7941. }
  7942. }
  7943. }
  7944. function checkPropTypes(typeSpecs, values, location, componentName, element) {
  7945. {
  7946. // $FlowFixMe This is okay but Flow doesn't know it.
  7947. var has = Function.call.bind(Object.prototype.hasOwnProperty);
  7948. for (var typeSpecName in typeSpecs) {
  7949. if (has(typeSpecs, typeSpecName)) {
  7950. var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
  7951. // fail the render phase where it didn't fail before. So we log it.
  7952. // After these have been cleaned up, we'll let them throw.
  7953. try {
  7954. // This is intentionally an invariant that gets caught. It's the same
  7955. // behavior as without this statement except with a better message.
  7956. if (typeof typeSpecs[typeSpecName] !== 'function') {
  7957. var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
  7958. err.name = 'Invariant Violation';
  7959. throw err;
  7960. }
  7961. error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
  7962. } catch (ex) {
  7963. error$1 = ex;
  7964. }
  7965. if (error$1 && !(error$1 instanceof Error)) {
  7966. setCurrentlyValidatingElement(element);
  7967. error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
  7968. setCurrentlyValidatingElement(null);
  7969. }
  7970. if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
  7971. // Only monitor this failure once because there tends to be a lot of the
  7972. // same error.
  7973. loggedTypeFailures[error$1.message] = true;
  7974. setCurrentlyValidatingElement(element);
  7975. error('Failed %s type: %s', location, error$1.message);
  7976. setCurrentlyValidatingElement(null);
  7977. }
  7978. }
  7979. }
  7980. }
  7981. }
  7982. function setCurrentlyValidatingElement$1(element) {
  7983. {
  7984. if (element) {
  7985. var owner = element._owner;
  7986. var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
  7987. setExtraStackFrame(stack);
  7988. } else {
  7989. setExtraStackFrame(null);
  7990. }
  7991. }
  7992. }
  7993. var propTypesMisspellWarningShown;
  7994. {
  7995. propTypesMisspellWarningShown = false;
  7996. }
  7997. function getDeclarationErrorAddendum() {
  7998. if (ReactCurrentOwner.current) {
  7999. var name = getComponentName(ReactCurrentOwner.current.type);
  8000. if (name) {
  8001. return '\n\nCheck the render method of `' + name + '`.';
  8002. }
  8003. }
  8004. return '';
  8005. }
  8006. function getSourceInfoErrorAddendum(source) {
  8007. if (source !== undefined) {
  8008. var fileName = source.fileName.replace(/^.*[\\\/]/, '');
  8009. var lineNumber = source.lineNumber;
  8010. return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
  8011. }
  8012. return '';
  8013. }
  8014. function getSourceInfoErrorAddendumForProps(elementProps) {
  8015. if (elementProps !== null && elementProps !== undefined) {
  8016. return getSourceInfoErrorAddendum(elementProps.__source);
  8017. }
  8018. return '';
  8019. }
  8020. /**
  8021. * Warn if there's no key explicitly set on dynamic arrays of children or
  8022. * object keys are not valid. This allows us to keep track of children between
  8023. * updates.
  8024. */
  8025. var ownerHasKeyUseWarning = {};
  8026. function getCurrentComponentErrorInfo(parentType) {
  8027. var info = getDeclarationErrorAddendum();
  8028. if (!info) {
  8029. var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
  8030. if (parentName) {
  8031. info = "\n\nCheck the top-level render call using <" + parentName + ">.";
  8032. }
  8033. }
  8034. return info;
  8035. }
  8036. /**
  8037. * Warn if the element doesn't have an explicit key assigned to it.
  8038. * This element is in an array. The array could grow and shrink or be
  8039. * reordered. All children that haven't already been validated are required to
  8040. * have a "key" property assigned to it. Error statuses are cached so a warning
  8041. * will only be shown once.
  8042. *
  8043. * @internal
  8044. * @param {ReactElement} element Element that requires a key.
  8045. * @param {*} parentType element's parent's type.
  8046. */
  8047. function validateExplicitKey(element, parentType) {
  8048. if (!element._store || element._store.validated || element.key != null) {
  8049. return;
  8050. }
  8051. element._store.validated = true;
  8052. var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
  8053. if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
  8054. return;
  8055. }
  8056. ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
  8057. // property, it may be the creator of the child that's responsible for
  8058. // assigning it a key.
  8059. var childOwner = '';
  8060. if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
  8061. // Give the component that originally created this child.
  8062. childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
  8063. }
  8064. {
  8065. setCurrentlyValidatingElement$1(element);
  8066. error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
  8067. setCurrentlyValidatingElement$1(null);
  8068. }
  8069. }
  8070. /**
  8071. * Ensure that every element either is passed in a static location, in an
  8072. * array with an explicit keys property defined, or in an object literal
  8073. * with valid key property.
  8074. *
  8075. * @internal
  8076. * @param {ReactNode} node Statically passed child of any type.
  8077. * @param {*} parentType node's parent's type.
  8078. */
  8079. function validateChildKeys(node, parentType) {
  8080. if (typeof node !== 'object') {
  8081. return;
  8082. }
  8083. if (Array.isArray(node)) {
  8084. for (var i = 0; i < node.length; i++) {
  8085. var child = node[i];
  8086. if (isValidElement(child)) {
  8087. validateExplicitKey(child, parentType);
  8088. }
  8089. }
  8090. } else if (isValidElement(node)) {
  8091. // This element was passed in a valid location.
  8092. if (node._store) {
  8093. node._store.validated = true;
  8094. }
  8095. } else if (node) {
  8096. var iteratorFn = getIteratorFn(node);
  8097. if (typeof iteratorFn === 'function') {
  8098. // Entry iterators used to provide implicit keys,
  8099. // but now we print a separate warning for them later.
  8100. if (iteratorFn !== node.entries) {
  8101. var iterator = iteratorFn.call(node);
  8102. var step;
  8103. while (!(step = iterator.next()).done) {
  8104. if (isValidElement(step.value)) {
  8105. validateExplicitKey(step.value, parentType);
  8106. }
  8107. }
  8108. }
  8109. }
  8110. }
  8111. }
  8112. /**
  8113. * Given an element, validate that its props follow the propTypes definition,
  8114. * provided by the type.
  8115. *
  8116. * @param {ReactElement} element
  8117. */
  8118. function validatePropTypes(element) {
  8119. {
  8120. var type = element.type;
  8121. if (type === null || type === undefined || typeof type === 'string') {
  8122. return;
  8123. }
  8124. var propTypes;
  8125. if (typeof type === 'function') {
  8126. propTypes = type.propTypes;
  8127. } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
  8128. // Inner props are checked in the reconciler.
  8129. type.$$typeof === REACT_MEMO_TYPE)) {
  8130. propTypes = type.propTypes;
  8131. } else {
  8132. return;
  8133. }
  8134. if (propTypes) {
  8135. // Intentionally inside to avoid triggering lazy initializers:
  8136. var name = getComponentName(type);
  8137. checkPropTypes(propTypes, element.props, 'prop', name, element);
  8138. } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
  8139. propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
  8140. var _name = getComponentName(type);
  8141. error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
  8142. }
  8143. if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
  8144. error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
  8145. }
  8146. }
  8147. }
  8148. /**
  8149. * Given a fragment, validate that it can only be provided with fragment props
  8150. * @param {ReactElement} fragment
  8151. */
  8152. function validateFragmentProps(fragment) {
  8153. {
  8154. var keys = Object.keys(fragment.props);
  8155. for (var i = 0; i < keys.length; i++) {
  8156. var key = keys[i];
  8157. if (key !== 'children' && key !== 'key') {
  8158. setCurrentlyValidatingElement$1(fragment);
  8159. error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
  8160. setCurrentlyValidatingElement$1(null);
  8161. break;
  8162. }
  8163. }
  8164. if (fragment.ref !== null) {
  8165. setCurrentlyValidatingElement$1(fragment);
  8166. error('Invalid attribute `ref` supplied to `React.Fragment`.');
  8167. setCurrentlyValidatingElement$1(null);
  8168. }
  8169. }
  8170. }
  8171. function createElementWithValidation(type, props, children) {
  8172. var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
  8173. // succeed and there will likely be errors in render.
  8174. if (!validType) {
  8175. var info = '';
  8176. if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
  8177. info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
  8178. }
  8179. var sourceInfo = getSourceInfoErrorAddendumForProps(props);
  8180. if (sourceInfo) {
  8181. info += sourceInfo;
  8182. } else {
  8183. info += getDeclarationErrorAddendum();
  8184. }
  8185. var typeString;
  8186. if (type === null) {
  8187. typeString = 'null';
  8188. } else if (Array.isArray(type)) {
  8189. typeString = 'array';
  8190. } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
  8191. typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
  8192. info = ' Did you accidentally export a JSX literal instead of a component?';
  8193. } else {
  8194. typeString = typeof type;
  8195. }
  8196. {
  8197. error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
  8198. }
  8199. }
  8200. var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
  8201. // TODO: Drop this when these are no longer allowed as the type argument.
  8202. if (element == null) {
  8203. return element;
  8204. } // Skip key warning if the type isn't valid since our key validation logic
  8205. // doesn't expect a non-string/function type and can throw confusing errors.
  8206. // We don't want exception behavior to differ between dev and prod.
  8207. // (Rendering will throw with a helpful message and as soon as the type is
  8208. // fixed, the key warnings will appear.)
  8209. if (validType) {
  8210. for (var i = 2; i < arguments.length; i++) {
  8211. validateChildKeys(arguments[i], type);
  8212. }
  8213. }
  8214. if (type === exports.Fragment) {
  8215. validateFragmentProps(element);
  8216. } else {
  8217. validatePropTypes(element);
  8218. }
  8219. return element;
  8220. }
  8221. var didWarnAboutDeprecatedCreateFactory = false;
  8222. function createFactoryWithValidation(type) {
  8223. var validatedFactory = createElementWithValidation.bind(null, type);
  8224. validatedFactory.type = type;
  8225. {
  8226. if (!didWarnAboutDeprecatedCreateFactory) {
  8227. didWarnAboutDeprecatedCreateFactory = true;
  8228. warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
  8229. } // Legacy hook: remove it
  8230. Object.defineProperty(validatedFactory, 'type', {
  8231. enumerable: false,
  8232. get: function () {
  8233. warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
  8234. Object.defineProperty(this, 'type', {
  8235. value: type
  8236. });
  8237. return type;
  8238. }
  8239. });
  8240. }
  8241. return validatedFactory;
  8242. }
  8243. function cloneElementWithValidation(element, props, children) {
  8244. var newElement = cloneElement.apply(this, arguments);
  8245. for (var i = 2; i < arguments.length; i++) {
  8246. validateChildKeys(arguments[i], newElement.type);
  8247. }
  8248. validatePropTypes(newElement);
  8249. return newElement;
  8250. }
  8251. {
  8252. try {
  8253. var frozenObject = Object.freeze({});
  8254. /* eslint-disable no-new */
  8255. new Map([[frozenObject, null]]);
  8256. new Set([frozenObject]);
  8257. /* eslint-enable no-new */
  8258. } catch (e) {
  8259. }
  8260. }
  8261. var createElement$1 = createElementWithValidation ;
  8262. var cloneElement$1 = cloneElementWithValidation ;
  8263. var createFactory = createFactoryWithValidation ;
  8264. var Children = {
  8265. map: mapChildren,
  8266. forEach: forEachChildren,
  8267. count: countChildren,
  8268. toArray: toArray,
  8269. only: onlyChild
  8270. };
  8271. exports.Children = Children;
  8272. exports.Component = Component;
  8273. exports.PureComponent = PureComponent;
  8274. exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
  8275. exports.cloneElement = cloneElement$1;
  8276. exports.createContext = createContext;
  8277. exports.createElement = createElement$1;
  8278. exports.createFactory = createFactory;
  8279. exports.createRef = createRef;
  8280. exports.forwardRef = forwardRef;
  8281. exports.isValidElement = isValidElement;
  8282. exports.lazy = lazy;
  8283. exports.memo = memo;
  8284. exports.useCallback = useCallback;
  8285. exports.useContext = useContext;
  8286. exports.useDebugValue = useDebugValue;
  8287. exports.useEffect = useEffect;
  8288. exports.useImperativeHandle = useImperativeHandle;
  8289. exports.useLayoutEffect = useLayoutEffect;
  8290. exports.useMemo = useMemo;
  8291. exports.useReducer = useReducer;
  8292. exports.useRef = useRef;
  8293. exports.useState = useState;
  8294. exports.version = ReactVersion;
  8295. })();
  8296. }
  8297. /***/ }),
  8298. /***/ "./node_modules/react/index.js":
  8299. /*!*************************************!*\
  8300. !*** ./node_modules/react/index.js ***!
  8301. \*************************************/
  8302. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  8303. "use strict";
  8304. if (false) {} else {
  8305. module.exports = __webpack_require__(/*! ./cjs/react.development.js */ "./node_modules/react/cjs/react.development.js");
  8306. }
  8307. /***/ }),
  8308. /***/ "./src/sass/d3v4pp.scss":
  8309. /*!******************************!*\
  8310. !*** ./src/sass/d3v4pp.scss ***!
  8311. \******************************/
  8312. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8313. "use strict";
  8314. __webpack_require__.r(__webpack_exports__);
  8315. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8316. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8317. /* harmony export */ });
  8318. /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
  8319. /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
  8320. /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
  8321. /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
  8322. /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
  8323. /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
  8324. /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
  8325. /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
  8326. /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
  8327. /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
  8328. /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
  8329. /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
  8330. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./d3v4pp.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss");
  8331. var options = {};
  8332. options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
  8333. options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
  8334. options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
  8335. options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
  8336. options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
  8337. var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"], options);
  8338. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
  8339. /***/ }),
  8340. /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
  8341. /*!****************************************************************************!*\
  8342. !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  8343. \****************************************************************************/
  8344. /***/ ((module) => {
  8345. "use strict";
  8346. var stylesInDOM = [];
  8347. function getIndexByIdentifier(identifier) {
  8348. var result = -1;
  8349. for (var i = 0; i < stylesInDOM.length; i++) {
  8350. if (stylesInDOM[i].identifier === identifier) {
  8351. result = i;
  8352. break;
  8353. }
  8354. }
  8355. return result;
  8356. }
  8357. function modulesToDom(list, options) {
  8358. var idCountMap = {};
  8359. var identifiers = [];
  8360. for (var i = 0; i < list.length; i++) {
  8361. var item = list[i];
  8362. var id = options.base ? item[0] + options.base : item[0];
  8363. var count = idCountMap[id] || 0;
  8364. var identifier = "".concat(id, " ").concat(count);
  8365. idCountMap[id] = count + 1;
  8366. var indexByIdentifier = getIndexByIdentifier(identifier);
  8367. var obj = {
  8368. css: item[1],
  8369. media: item[2],
  8370. sourceMap: item[3],
  8371. supports: item[4],
  8372. layer: item[5]
  8373. };
  8374. if (indexByIdentifier !== -1) {
  8375. stylesInDOM[indexByIdentifier].references++;
  8376. stylesInDOM[indexByIdentifier].updater(obj);
  8377. } else {
  8378. var updater = addElementStyle(obj, options);
  8379. options.byIndex = i;
  8380. stylesInDOM.splice(i, 0, {
  8381. identifier: identifier,
  8382. updater: updater,
  8383. references: 1
  8384. });
  8385. }
  8386. identifiers.push(identifier);
  8387. }
  8388. return identifiers;
  8389. }
  8390. function addElementStyle(obj, options) {
  8391. var api = options.domAPI(options);
  8392. api.update(obj);
  8393. var updater = function updater(newObj) {
  8394. if (newObj) {
  8395. if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
  8396. return;
  8397. }
  8398. api.update(obj = newObj);
  8399. } else {
  8400. api.remove();
  8401. }
  8402. };
  8403. return updater;
  8404. }
  8405. module.exports = function (list, options) {
  8406. options = options || {};
  8407. list = list || [];
  8408. var lastIdentifiers = modulesToDom(list, options);
  8409. return function update(newList) {
  8410. newList = newList || [];
  8411. for (var i = 0; i < lastIdentifiers.length; i++) {
  8412. var identifier = lastIdentifiers[i];
  8413. var index = getIndexByIdentifier(identifier);
  8414. stylesInDOM[index].references--;
  8415. }
  8416. var newLastIdentifiers = modulesToDom(newList, options);
  8417. for (var _i = 0; _i < lastIdentifiers.length; _i++) {
  8418. var _identifier = lastIdentifiers[_i];
  8419. var _index = getIndexByIdentifier(_identifier);
  8420. if (stylesInDOM[_index].references === 0) {
  8421. stylesInDOM[_index].updater();
  8422. stylesInDOM.splice(_index, 1);
  8423. }
  8424. }
  8425. lastIdentifiers = newLastIdentifiers;
  8426. };
  8427. };
  8428. /***/ }),
  8429. /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
  8430. /*!********************************************************************!*\
  8431. !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
  8432. \********************************************************************/
  8433. /***/ ((module) => {
  8434. "use strict";
  8435. var memo = {};
  8436. /* istanbul ignore next */
  8437. function getTarget(target) {
  8438. if (typeof memo[target] === "undefined") {
  8439. var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
  8440. if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
  8441. try {
  8442. // This will throw an exception if access to iframe is blocked
  8443. // due to cross-origin restrictions
  8444. styleTarget = styleTarget.contentDocument.head;
  8445. } catch (e) {
  8446. // istanbul ignore next
  8447. styleTarget = null;
  8448. }
  8449. }
  8450. memo[target] = styleTarget;
  8451. }
  8452. return memo[target];
  8453. }
  8454. /* istanbul ignore next */
  8455. function insertBySelector(insert, style) {
  8456. var target = getTarget(insert);
  8457. if (!target) {
  8458. throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
  8459. }
  8460. target.appendChild(style);
  8461. }
  8462. module.exports = insertBySelector;
  8463. /***/ }),
  8464. /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
  8465. /*!**********************************************************************!*\
  8466. !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
  8467. \**********************************************************************/
  8468. /***/ ((module) => {
  8469. "use strict";
  8470. /* istanbul ignore next */
  8471. function insertStyleElement(options) {
  8472. var element = document.createElement("style");
  8473. options.setAttributes(element, options.attributes);
  8474. options.insert(element, options.options);
  8475. return element;
  8476. }
  8477. module.exports = insertStyleElement;
  8478. /***/ }),
  8479. /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
  8480. /*!**********************************************************************************!*\
  8481. !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
  8482. \**********************************************************************************/
  8483. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  8484. "use strict";
  8485. /* istanbul ignore next */
  8486. function setAttributesWithoutAttributes(styleElement) {
  8487. var nonce = true ? __webpack_require__.nc : 0;
  8488. if (nonce) {
  8489. styleElement.setAttribute("nonce", nonce);
  8490. }
  8491. }
  8492. module.exports = setAttributesWithoutAttributes;
  8493. /***/ }),
  8494. /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
  8495. /*!***************************************************************!*\
  8496. !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
  8497. \***************************************************************/
  8498. /***/ ((module) => {
  8499. "use strict";
  8500. /* istanbul ignore next */
  8501. function apply(styleElement, options, obj) {
  8502. var css = "";
  8503. if (obj.supports) {
  8504. css += "@supports (".concat(obj.supports, ") {");
  8505. }
  8506. if (obj.media) {
  8507. css += "@media ".concat(obj.media, " {");
  8508. }
  8509. var needLayer = typeof obj.layer !== "undefined";
  8510. if (needLayer) {
  8511. css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
  8512. }
  8513. css += obj.css;
  8514. if (needLayer) {
  8515. css += "}";
  8516. }
  8517. if (obj.media) {
  8518. css += "}";
  8519. }
  8520. if (obj.supports) {
  8521. css += "}";
  8522. }
  8523. var sourceMap = obj.sourceMap;
  8524. if (sourceMap && typeof btoa !== "undefined") {
  8525. css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
  8526. } // For old IE
  8527. /* istanbul ignore if */
  8528. options.styleTagTransform(css, styleElement, options.options);
  8529. }
  8530. function removeStyleElement(styleElement) {
  8531. // istanbul ignore if
  8532. if (styleElement.parentNode === null) {
  8533. return false;
  8534. }
  8535. styleElement.parentNode.removeChild(styleElement);
  8536. }
  8537. /* istanbul ignore next */
  8538. function domAPI(options) {
  8539. var styleElement = options.insertStyleElement(options);
  8540. return {
  8541. update: function update(obj) {
  8542. apply(styleElement, options, obj);
  8543. },
  8544. remove: function remove() {
  8545. removeStyleElement(styleElement);
  8546. }
  8547. };
  8548. }
  8549. module.exports = domAPI;
  8550. /***/ }),
  8551. /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
  8552. /*!*********************************************************************!*\
  8553. !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
  8554. \*********************************************************************/
  8555. /***/ ((module) => {
  8556. "use strict";
  8557. /* istanbul ignore next */
  8558. function styleTagTransform(css, styleElement) {
  8559. if (styleElement.styleSheet) {
  8560. styleElement.styleSheet.cssText = css;
  8561. } else {
  8562. while (styleElement.firstChild) {
  8563. styleElement.removeChild(styleElement.firstChild);
  8564. }
  8565. styleElement.appendChild(document.createTextNode(css));
  8566. }
  8567. }
  8568. module.exports = styleTagTransform;
  8569. /***/ }),
  8570. /***/ "./src/cmps/badge/Badge.tsx":
  8571. /*!**********************************!*\
  8572. !*** ./src/cmps/badge/Badge.tsx ***!
  8573. \**********************************/
  8574. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  8575. "use strict";
  8576. var __extends = (this && this.__extends) || (function () {
  8577. var extendStatics = function (d, b) {
  8578. extendStatics = Object.setPrototypeOf ||
  8579. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  8580. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  8581. return extendStatics(d, b);
  8582. };
  8583. return function (d, b) {
  8584. if (typeof b !== "function" && b !== null)
  8585. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  8586. extendStatics(d, b);
  8587. function __() { this.constructor = d; }
  8588. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  8589. };
  8590. })();
  8591. var __assign = (this && this.__assign) || function () {
  8592. __assign = Object.assign || function(t) {
  8593. for (var s, i = 1, n = arguments.length; i < n; i++) {
  8594. s = arguments[i];
  8595. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  8596. t[p] = s[p];
  8597. }
  8598. return t;
  8599. };
  8600. return __assign.apply(this, arguments);
  8601. };
  8602. Object.defineProperty(exports, "__esModule", ({ value: true }));
  8603. exports.Badge = void 0;
  8604. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  8605. var Badge = /** @class */ (function (_super) {
  8606. __extends(Badge, _super);
  8607. function Badge() {
  8608. return _super !== null && _super.apply(this, arguments) || this;
  8609. }
  8610. Badge.prototype.render = function () {
  8611. return React.createElement("span", __assign({}, this.props, { className: 'badge ' + this.props.className }));
  8612. };
  8613. return Badge;
  8614. }(React.Component));
  8615. exports.Badge = Badge;
  8616. /***/ }),
  8617. /***/ "./src/cmps/button/Button.tsx":
  8618. /*!************************************!*\
  8619. !*** ./src/cmps/button/Button.tsx ***!
  8620. \************************************/
  8621. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  8622. "use strict";
  8623. var __extends = (this && this.__extends) || (function () {
  8624. var extendStatics = function (d, b) {
  8625. extendStatics = Object.setPrototypeOf ||
  8626. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  8627. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  8628. return extendStatics(d, b);
  8629. };
  8630. return function (d, b) {
  8631. if (typeof b !== "function" && b !== null)
  8632. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  8633. extendStatics(d, b);
  8634. function __() { this.constructor = d; }
  8635. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  8636. };
  8637. })();
  8638. var __assign = (this && this.__assign) || function () {
  8639. __assign = Object.assign || function(t) {
  8640. for (var s, i = 1, n = arguments.length; i < n; i++) {
  8641. s = arguments[i];
  8642. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  8643. t[p] = s[p];
  8644. }
  8645. return t;
  8646. };
  8647. return __assign.apply(this, arguments);
  8648. };
  8649. Object.defineProperty(exports, "__esModule", ({ value: true }));
  8650. exports.Button = void 0;
  8651. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  8652. var Waves_1 = __webpack_require__(/*! ./Waves */ "./src/cmps/button/Waves.js");
  8653. var Button = /** @class */ (function (_super) {
  8654. __extends(Button, _super);
  8655. function Button(props) {
  8656. var _this = _super.call(this, props) || this;
  8657. _this.el = null;
  8658. return _this;
  8659. }
  8660. /**
  8661. * Initialisation of the wave effect after the component did mount
  8662. */
  8663. Button.prototype.componentDidMount = function () {
  8664. if (this.el) {
  8665. new Waves_1.default(this.el, { duration: 950 });
  8666. }
  8667. };
  8668. Button.prototype.render = function () {
  8669. var _this = this;
  8670. var className = "btn waves-effect ";
  8671. // if (this.props.model == "circle") {
  8672. // className += "btn-floating ";
  8673. // }
  8674. // if (this.props.size == "large") {
  8675. // className += "btn-large ";
  8676. // }
  8677. // if (this.props.size == "small") {
  8678. // className += "btn-small ";
  8679. // }
  8680. return (React.createElement("a", __assign({}, this.props, { ref: function (el) {
  8681. _this.el = el;
  8682. }, className: className + this.props.className })));
  8683. };
  8684. return Button;
  8685. }(React.Component));
  8686. exports.Button = Button;
  8687. /***/ }),
  8688. /***/ "./src/cmps/button/Waves.js":
  8689. /*!**********************************!*\
  8690. !*** ./src/cmps/button/Waves.js ***!
  8691. \**********************************/
  8692. /***/ ((__unused_webpack_module, exports) => {
  8693. "use strict";
  8694. Object.defineProperty(exports, "__esModule", ({ value: true }));
  8695. var Waves = /** @class */ (function () {
  8696. function Waves(cmp, options) {
  8697. var _this = this;
  8698. this.el = cmp;
  8699. this.options = options || {};
  8700. //Wrap input inside <i> tag
  8701. this.wrapInput();
  8702. if ('ontouchstart' in window) {
  8703. this.el.addEventListener('touchstart', function (e) {
  8704. _this.triggerEffect.bind(_this)(e);
  8705. }, false);
  8706. }
  8707. this.el.addEventListener('mousedown', function (e) {
  8708. _this.triggerEffect.bind(_this)(e);
  8709. }, false);
  8710. }
  8711. Waves.prototype.showEffect = function (e) {
  8712. // Disable right click
  8713. if (e.button === 2) {
  8714. return false;
  8715. }
  8716. // Create ripple
  8717. var ripple = document.createElement('div');
  8718. ripple.className = 'waves-ripple';
  8719. this.el.appendChild(ripple);
  8720. this.ripple = ripple;
  8721. // Get click coordinate and element witdh
  8722. var pos = this.offset();
  8723. var relativeY = (e.pageY - pos.top);
  8724. var relativeX = (e.pageX - pos.left);
  8725. var scale = 'scale(' + ((this.el.clientWidth / 100) * 10) + ')';
  8726. // Support for touch devices
  8727. if ('touches' in e) {
  8728. relativeY = (e.touches[0].pageY - pos.top);
  8729. relativeX = (e.touches[0].pageX - pos.left);
  8730. }
  8731. // Attach data to element
  8732. this.ripple.setAttribute('data-hold', Date.now());
  8733. this.ripple.setAttribute('data-scale', scale);
  8734. this.ripple.setAttribute('data-x', relativeX);
  8735. this.ripple.setAttribute('data-y', relativeY);
  8736. // Set ripple position
  8737. var rippleStyle = {
  8738. 'top': relativeY + 'px',
  8739. 'left': relativeX + 'px'
  8740. };
  8741. //this.ripple.className = this.ripple.className + ' waves-notransition';
  8742. this.ripple.setAttribute('style', this.convertStyle(rippleStyle));
  8743. this.ripple.className = this.ripple.className.replace('waves-notransition', '');
  8744. // Scale the ripple
  8745. rippleStyle['-webkit-transform'] = scale;
  8746. rippleStyle['-moz-transform'] = scale;
  8747. rippleStyle['-ms-transform'] = scale;
  8748. rippleStyle['-o-transform'] = scale;
  8749. rippleStyle.transform = scale;
  8750. rippleStyle.opacity = '1';
  8751. rippleStyle['-webkit-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
  8752. rippleStyle['-moz-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
  8753. rippleStyle['-o-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
  8754. rippleStyle['transition-duration'] = 2 * this.options.duration / 3 + 'ms';
  8755. rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
  8756. rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
  8757. rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
  8758. rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
  8759. this.ripple.setAttribute('style', this.convertStyle(rippleStyle));
  8760. };
  8761. Waves.prototype.hideEffect = function (e) {
  8762. //Effect.hide
  8763. var ripple = this.el.lastElementChild;
  8764. if (ripple && ripple.classList.contains("waves-ripple")) {
  8765. var relativeX = ripple.getAttribute('data-x');
  8766. var relativeY = ripple.getAttribute('data-y');
  8767. var scale = ripple.getAttribute('data-scale');
  8768. // Get delay beetween mousedown and mouse leave
  8769. var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
  8770. var delay = this.options.duration / 2 - diff;
  8771. if (delay < 0) {
  8772. delay = 0;
  8773. }
  8774. var me = this;
  8775. // Fade out ripple after delay
  8776. setTimeout(function () {
  8777. var style = {
  8778. 'top': relativeY + 'px',
  8779. 'left': relativeX + 'px',
  8780. 'opacity': '0',
  8781. // Duration
  8782. '-webkit-transition-duration': me.options.duration / 3 + 'ms',
  8783. '-moz-transition-duration': me.options.duration / 3 + 'ms',
  8784. '-o-transition-duration': me.options.duration / 3 + 'ms',
  8785. 'transition-duration': me.options.duration / 3 + 'ms',
  8786. '-webkit-transform': scale,
  8787. '-moz-transform': scale,
  8788. '-ms-transform': scale,
  8789. '-o-transform': scale,
  8790. 'transform': scale,
  8791. };
  8792. ripple.setAttribute('style', me.convertStyle(style));
  8793. setTimeout(function () {
  8794. try {
  8795. me.el.removeChild(ripple);
  8796. }
  8797. catch (e) {
  8798. return false;
  8799. }
  8800. }, me.options.duration);
  8801. }, delay);
  8802. }
  8803. };
  8804. Waves.prototype.wrapInput = function () {
  8805. var el = this.el;
  8806. if (el.tagName.toLowerCase() === 'input') {
  8807. var parent = el.parentNode;
  8808. // If input already have parent just pass through
  8809. if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
  8810. return;
  8811. }
  8812. // Put element class and style to the specified parent
  8813. var wrapper = document.createElement('i');
  8814. wrapper.className = el.className + ' waves-input-wrapper';
  8815. var elementStyle = el.getAttribute('style');
  8816. if (!elementStyle) {
  8817. elementStyle = '';
  8818. }
  8819. wrapper.setAttribute('style', elementStyle);
  8820. el.className = 'waves-button-input';
  8821. el.removeAttribute('style');
  8822. // Put element as child
  8823. parent.replaceChild(wrapper, el);
  8824. wrapper.appendChild(el);
  8825. }
  8826. };
  8827. Waves.prototype.triggerEffect = function (e) {
  8828. var _this = this;
  8829. this.showEffect(e);
  8830. if ('ontouchstart' in window) {
  8831. this.el.addEventListener('touchend', function (e) {
  8832. _this.hideEffect.bind(_this)(e);
  8833. }, false);
  8834. this.el.addEventListener('touchcancel', function (e) {
  8835. _this.hideEffect.bind(_this)(e);
  8836. }, false);
  8837. }
  8838. this.el.addEventListener('mouseup', function (e) {
  8839. _this.hideEffect.bind(_this)(e);
  8840. }, false);
  8841. this.el.addEventListener('mouseleave', function (e) {
  8842. _this.hideEffect.bind(_this)(e);
  8843. }, false);
  8844. this.el.addEventListener('dragend', function (e) {
  8845. _this.hideEffect.bind(_this)(e);
  8846. }, false);
  8847. };
  8848. Waves.prototype.isWindow = function (obj) {
  8849. return obj !== null && obj === obj.window;
  8850. };
  8851. Waves.prototype.getWindow = function (elem) {
  8852. return this.isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
  8853. };
  8854. Waves.prototype.offset = function () {
  8855. var docElem, win, box = { top: 0, left: 0 }, doc = this.el && this.el.ownerDocument;
  8856. docElem = doc.documentElement;
  8857. if (typeof this.el.getBoundingClientRect !== typeof undefined) {
  8858. box = this.el.getBoundingClientRect();
  8859. }
  8860. win = this.getWindow(doc);
  8861. return {
  8862. top: box.top + win.pageYOffset - docElem.clientTop,
  8863. left: box.left + win.pageXOffset - docElem.clientLeft
  8864. };
  8865. };
  8866. Waves.prototype.convertStyle = function (obj) {
  8867. var style = '';
  8868. for (var a in obj) {
  8869. if (obj.hasOwnProperty(a)) {
  8870. style += (a + ':' + obj[a] + ';');
  8871. }
  8872. }
  8873. return style;
  8874. };
  8875. return Waves;
  8876. }());
  8877. exports["default"] = Waves;
  8878. /***/ }),
  8879. /***/ "./src/cmps/card/Card.tsx":
  8880. /*!********************************!*\
  8881. !*** ./src/cmps/card/Card.tsx ***!
  8882. \********************************/
  8883. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  8884. "use strict";
  8885. var __extends = (this && this.__extends) || (function () {
  8886. var extendStatics = function (d, b) {
  8887. extendStatics = Object.setPrototypeOf ||
  8888. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  8889. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  8890. return extendStatics(d, b);
  8891. };
  8892. return function (d, b) {
  8893. if (typeof b !== "function" && b !== null)
  8894. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  8895. extendStatics(d, b);
  8896. function __() { this.constructor = d; }
  8897. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  8898. };
  8899. })();
  8900. var __assign = (this && this.__assign) || function () {
  8901. __assign = Object.assign || function(t) {
  8902. for (var s, i = 1, n = arguments.length; i < n; i++) {
  8903. s = arguments[i];
  8904. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  8905. t[p] = s[p];
  8906. }
  8907. return t;
  8908. };
  8909. return __assign.apply(this, arguments);
  8910. };
  8911. Object.defineProperty(exports, "__esModule", ({ value: true }));
  8912. exports.CardAction = exports.CardTitle = exports.CardContent = exports.Card = void 0;
  8913. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  8914. var Card = /** @class */ (function (_super) {
  8915. __extends(Card, _super);
  8916. function Card() {
  8917. return _super !== null && _super.apply(this, arguments) || this;
  8918. }
  8919. Card.prototype.render = function () {
  8920. return React.createElement("div", __assign({}, this.props, { className: "card " + this.props.className }));
  8921. };
  8922. return Card;
  8923. }(React.Component));
  8924. exports.Card = Card;
  8925. var CardContent = /** @class */ (function (_super) {
  8926. __extends(CardContent, _super);
  8927. function CardContent() {
  8928. return _super !== null && _super.apply(this, arguments) || this;
  8929. }
  8930. CardContent.prototype.render = function () {
  8931. return (React.createElement("div", __assign({}, this.props, { className: "card-content " + this.props.className })));
  8932. };
  8933. return CardContent;
  8934. }(React.Component));
  8935. exports.CardContent = CardContent;
  8936. var CardTitle = /** @class */ (function (_super) {
  8937. __extends(CardTitle, _super);
  8938. function CardTitle() {
  8939. return _super !== null && _super.apply(this, arguments) || this;
  8940. }
  8941. CardTitle.prototype.render = function () {
  8942. return (React.createElement("span", __assign({}, this.props, { className: "card-title " + this.props.className })));
  8943. };
  8944. return CardTitle;
  8945. }(React.Component));
  8946. exports.CardTitle = CardTitle;
  8947. var CardAction = /** @class */ (function (_super) {
  8948. __extends(CardAction, _super);
  8949. function CardAction() {
  8950. return _super !== null && _super.apply(this, arguments) || this;
  8951. }
  8952. CardAction.prototype.render = function () {
  8953. return (React.createElement("div", __assign({}, this.props, { className: "card-action " + this.props.className })));
  8954. };
  8955. return CardAction;
  8956. }(React.Component));
  8957. exports.CardAction = CardAction;
  8958. /***/ }),
  8959. /***/ "./src/cmps/chip/Chip.tsx":
  8960. /*!********************************!*\
  8961. !*** ./src/cmps/chip/Chip.tsx ***!
  8962. \********************************/
  8963. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  8964. "use strict";
  8965. var __extends = (this && this.__extends) || (function () {
  8966. var extendStatics = function (d, b) {
  8967. extendStatics = Object.setPrototypeOf ||
  8968. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  8969. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  8970. return extendStatics(d, b);
  8971. };
  8972. return function (d, b) {
  8973. if (typeof b !== "function" && b !== null)
  8974. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  8975. extendStatics(d, b);
  8976. function __() { this.constructor = d; }
  8977. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  8978. };
  8979. })();
  8980. var __assign = (this && this.__assign) || function () {
  8981. __assign = Object.assign || function(t) {
  8982. for (var s, i = 1, n = arguments.length; i < n; i++) {
  8983. s = arguments[i];
  8984. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  8985. t[p] = s[p];
  8986. }
  8987. return t;
  8988. };
  8989. return __assign.apply(this, arguments);
  8990. };
  8991. Object.defineProperty(exports, "__esModule", ({ value: true }));
  8992. exports.Chip = void 0;
  8993. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  8994. var Chip = /** @class */ (function (_super) {
  8995. __extends(Chip, _super);
  8996. function Chip() {
  8997. return _super !== null && _super.apply(this, arguments) || this;
  8998. }
  8999. Chip.prototype.render = function () { return React.createElement("div", __assign({}, this.props, { className: 'chip ' + this.props.className })); };
  9000. return Chip;
  9001. }(React.Component));
  9002. exports.Chip = Chip;
  9003. exports["default"] = Chip;
  9004. /***/ }),
  9005. /***/ "./src/cmps/collapsible/Collapsible.tsx":
  9006. /*!**********************************************!*\
  9007. !*** ./src/cmps/collapsible/Collapsible.tsx ***!
  9008. \**********************************************/
  9009. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9010. "use strict";
  9011. var __extends = (this && this.__extends) || (function () {
  9012. var extendStatics = function (d, b) {
  9013. extendStatics = Object.setPrototypeOf ||
  9014. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9015. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9016. return extendStatics(d, b);
  9017. };
  9018. return function (d, b) {
  9019. if (typeof b !== "function" && b !== null)
  9020. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9021. extendStatics(d, b);
  9022. function __() { this.constructor = d; }
  9023. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9024. };
  9025. })();
  9026. var __assign = (this && this.__assign) || function () {
  9027. __assign = Object.assign || function(t) {
  9028. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9029. s = arguments[i];
  9030. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9031. t[p] = s[p];
  9032. }
  9033. return t;
  9034. };
  9035. return __assign.apply(this, arguments);
  9036. };
  9037. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9038. exports.CollapsTrigger = exports.CollapsBody = exports.Collapsible = void 0;
  9039. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9040. var Icon_1 = __webpack_require__(/*! ../icons/Icon */ "./src/cmps/icons/Icon.tsx");
  9041. var Collapsible = /** @class */ (function (_super) {
  9042. __extends(Collapsible, _super);
  9043. function Collapsible() {
  9044. return _super !== null && _super.apply(this, arguments) || this;
  9045. }
  9046. Collapsible.prototype.render = function () {
  9047. return (React.createElement("ul", __assign({}, this.props, { className: "collapsible " + this.props.className })));
  9048. };
  9049. return Collapsible;
  9050. }(React.Component));
  9051. exports.Collapsible = Collapsible;
  9052. var CollapsBody = /** @class */ (function (_super) {
  9053. __extends(CollapsBody, _super);
  9054. function CollapsBody() {
  9055. var _this = _super !== null && _super.apply(this, arguments) || this;
  9056. _this.el = null;
  9057. return _this;
  9058. }
  9059. CollapsBody.prototype.render = function () {
  9060. var _this = this;
  9061. return (React.createElement("div", __assign({}, this.props, { ref: function (ref) {
  9062. _this.el = ref;
  9063. }, className: "collapsible-body " + this.props.className })));
  9064. };
  9065. return CollapsBody;
  9066. }(React.Component));
  9067. exports.CollapsBody = CollapsBody;
  9068. var CollapsTrigger = /** @class */ (function (_super) {
  9069. __extends(CollapsTrigger, _super);
  9070. function CollapsTrigger() {
  9071. var _this = _super !== null && _super.apply(this, arguments) || this;
  9072. _this.state = {
  9073. isOpen: false
  9074. };
  9075. _this.el = null;
  9076. return _this;
  9077. }
  9078. CollapsTrigger.prototype.componentDidMount = function () {
  9079. // new Waves(this.el, { duration: 1050 });
  9080. };
  9081. CollapsTrigger.prototype.showHideBody = function (e) {
  9082. if (this.isOpen()) {
  9083. this.collapse(e);
  9084. }
  9085. else {
  9086. this.expand(e);
  9087. }
  9088. };
  9089. CollapsTrigger.prototype.collapse = function (e) {
  9090. e.stopPropagation();
  9091. var collapsible = this.findCollapsible.bind(this)();
  9092. if (collapsible) {
  9093. var bodyEl = collapsible.querySelector(".collapsible-body");
  9094. if (bodyEl) {
  9095. bodyEl.style.display = 'none';
  9096. this.setState({
  9097. isOpen: false
  9098. });
  9099. }
  9100. }
  9101. };
  9102. CollapsTrigger.prototype.findCollapsible = function () {
  9103. var parentEl = this.el && this.el.parentElement;
  9104. if (parentEl && !parentEl.classList.contains("collapsible")) {
  9105. parentEl = parentEl && parentEl.parentElement;
  9106. }
  9107. return parentEl;
  9108. };
  9109. CollapsTrigger.prototype.expand = function (e) {
  9110. e.stopPropagation();
  9111. var collapsible = this.findCollapsible.bind(this)();
  9112. if (collapsible) {
  9113. var bodyEl = collapsible.querySelector(".collapsible-body");
  9114. if (bodyEl) {
  9115. bodyEl.style.display = 'block';
  9116. this.setState({
  9117. isOpen: true
  9118. });
  9119. }
  9120. }
  9121. };
  9122. CollapsTrigger.prototype.isOpen = function () {
  9123. return this.state.isOpen;
  9124. };
  9125. CollapsTrigger.prototype.render = function () {
  9126. var _this = this;
  9127. var icon = (this.state.isOpen == true) ? React.createElement(Icon_1.Icon, { style: { float: "right" } }, "chevron_down") :
  9128. React.createElement(Icon_1.Icon, { style: { float: "right" } }, "chevron_right");
  9129. return (React.createElement("div", __assign({}, this.props, { ref: function (ref) {
  9130. _this.el = ref;
  9131. }, className: "collapsible-header " + this.props.className, onClick: function (e) { return _this.showHideBody.bind(_this)(e); } }),
  9132. icon,
  9133. this.props.children));
  9134. };
  9135. return CollapsTrigger;
  9136. }(React.Component));
  9137. exports.CollapsTrigger = CollapsTrigger;
  9138. /***/ }),
  9139. /***/ "./src/cmps/collections/Collection.tsx":
  9140. /*!*********************************************!*\
  9141. !*** ./src/cmps/collections/Collection.tsx ***!
  9142. \*********************************************/
  9143. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9144. "use strict";
  9145. var __extends = (this && this.__extends) || (function () {
  9146. var extendStatics = function (d, b) {
  9147. extendStatics = Object.setPrototypeOf ||
  9148. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9149. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9150. return extendStatics(d, b);
  9151. };
  9152. return function (d, b) {
  9153. if (typeof b !== "function" && b !== null)
  9154. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9155. extendStatics(d, b);
  9156. function __() { this.constructor = d; }
  9157. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9158. };
  9159. })();
  9160. var __assign = (this && this.__assign) || function () {
  9161. __assign = Object.assign || function(t) {
  9162. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9163. s = arguments[i];
  9164. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9165. t[p] = s[p];
  9166. }
  9167. return t;
  9168. };
  9169. return __assign.apply(this, arguments);
  9170. };
  9171. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9172. exports.CollectionItem = exports.Collection = void 0;
  9173. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9174. var Collection = /** @class */ (function (_super) {
  9175. __extends(Collection, _super);
  9176. function Collection() {
  9177. return _super !== null && _super.apply(this, arguments) || this;
  9178. }
  9179. Collection.prototype.render = function () {
  9180. var _this = this;
  9181. var className = this.props.className;
  9182. return React.createElement("ul", __assign({}, this.props, { ref: function (r) { return _this.el = r; }, className: "collection " + (className || "") }));
  9183. };
  9184. return Collection;
  9185. }(React.Component));
  9186. exports.Collection = Collection;
  9187. var CollectionItem = /** @class */ (function (_super) {
  9188. __extends(CollectionItem, _super);
  9189. function CollectionItem() {
  9190. return _super !== null && _super.apply(this, arguments) || this;
  9191. }
  9192. CollectionItem.prototype.render = function () {
  9193. var _this = this;
  9194. var className = this.props.className;
  9195. return React.createElement("li", __assign({}, this.props, { ref: function (r) { return _this.el = r; }, className: "collection-item " + (className || "") }));
  9196. };
  9197. return CollectionItem;
  9198. }(React.Component));
  9199. exports.CollectionItem = CollectionItem;
  9200. /***/ }),
  9201. /***/ "./src/cmps/forms/Field.tsx":
  9202. /*!**********************************!*\
  9203. !*** ./src/cmps/forms/Field.tsx ***!
  9204. \**********************************/
  9205. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9206. "use strict";
  9207. var __extends = (this && this.__extends) || (function () {
  9208. var extendStatics = function (d, b) {
  9209. extendStatics = Object.setPrototypeOf ||
  9210. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9211. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9212. return extendStatics(d, b);
  9213. };
  9214. return function (d, b) {
  9215. if (typeof b !== "function" && b !== null)
  9216. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9217. extendStatics(d, b);
  9218. function __() { this.constructor = d; }
  9219. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9220. };
  9221. })();
  9222. var __assign = (this && this.__assign) || function () {
  9223. __assign = Object.assign || function(t) {
  9224. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9225. s = arguments[i];
  9226. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9227. t[p] = s[p];
  9228. }
  9229. return t;
  9230. };
  9231. return __assign.apply(this, arguments);
  9232. };
  9233. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9234. exports.Field = void 0;
  9235. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9236. // @ts-ignore
  9237. var V = __webpack_require__(/*! ./rex */ "./src/cmps/forms/rex.tsx");
  9238. var Field = /** @class */ (function (_super) {
  9239. __extends(Field, _super);
  9240. function Field(props) {
  9241. var _this = _super.call(this, props) || this;
  9242. _this.state = {
  9243. labelClassName: '',
  9244. focusCount: 0,
  9245. errmsg: ""
  9246. };
  9247. _this.id = _this.uuidv4();
  9248. return _this;
  9249. }
  9250. Field.prototype.getDefaults = function () {
  9251. return {
  9252. placeholder: '',
  9253. id: Date.now(),
  9254. className: 'validate',
  9255. label: 'Text',
  9256. type: 'text',
  9257. icon: 'account_circle'
  9258. };
  9259. };
  9260. Field.prototype.getValue = function () {
  9261. return this.el && this.el.value;
  9262. };
  9263. Field.prototype.setValue = function (val) {
  9264. if (this.el) {
  9265. this.el.value = val;
  9266. if (val !== "") {
  9267. this.label && this.label.classList.add('active');
  9268. }
  9269. }
  9270. };
  9271. Field.prototype.isValid = function () {
  9272. return this.validate(true);
  9273. };
  9274. Field.prototype.onBlur = function (e) {
  9275. e.stopPropagation();
  9276. e.preventDefault();
  9277. if (this.label && ((this.props.placeholder !== '') || (this.el && this.el.value !== ""))) {
  9278. if (!this.label.classList.contains("active")) {
  9279. this.label.classList.add('active');
  9280. }
  9281. }
  9282. else {
  9283. this.label && this.label.classList.remove('active');
  9284. }
  9285. if (this.props.onBlur && typeof this.props.onBlur === "function") {
  9286. this.props.onBlur(e);
  9287. }
  9288. this.validate(true);
  9289. this.setState({ focusCount: this.state.focusCount + 1 });
  9290. };
  9291. Field.prototype.onFocus = function (e) {
  9292. if (this.label && !this.label.classList.contains("active")) {
  9293. this.label.classList.add('active');
  9294. }
  9295. if (this.props.onFocus && typeof this.props.onFocus === "function") {
  9296. this.props.onFocus(e);
  9297. }
  9298. };
  9299. Field.prototype.validate = function (blure) {
  9300. if (blure === void 0) { blure = false; }
  9301. if (blure) {
  9302. this.setState({ focusCount: this.state.focusCount + 1 });
  9303. }
  9304. if (this.state.focusCount > 0 || blure) {
  9305. var _a = this.props, min = _a.min, max = _a.max, required = _a.required, vtype = _a.vtype, vtypeMsg = _a.vtypeMsg;
  9306. if (this.el && this.el.value && this.el.value !== '') {
  9307. var length_1 = this.el.value.length;
  9308. if (min && max && (length_1 < min || length_1 > max)) {
  9309. this.setState({ errmsg: min != max ? "doit avoir une longeur comprise entre ".concat(min, " et ").concat(max, ".") : "doit avoir une longeur de ".concat(min, " caract\u00E8res") });
  9310. this.el.classList.remove('valid');
  9311. this.el.classList.add('invalid');
  9312. this.makeInValid();
  9313. return false;
  9314. }
  9315. else if (!min && max && length_1 > max) {
  9316. this.setState({ errmsg: "doit avoir une longeur maximal de ".concat(max, ".") });
  9317. this.el.classList.remove('valid');
  9318. this.el.classList.add('invalid');
  9319. this.makeInValid();
  9320. return false;
  9321. }
  9322. else if (min && !max && length_1 < min) {
  9323. this.setState({ errmsg: "doit avoir une longeur minimal de ".concat(min, ".") });
  9324. this.el.classList.remove('valid');
  9325. this.el.classList.add('invalid');
  9326. this.makeInValid();
  9327. return false;
  9328. }
  9329. else if (vtype && !V[vtype].test(this.el.value)) {
  9330. this.setState({ errmsg: vtypeMsg || "Doit \u00EAtre un ".concat(vtype, " valide.") });
  9331. this.el.classList.remove('valid');
  9332. this.el.classList.add('invalid');
  9333. this.makeInValid();
  9334. return false;
  9335. }
  9336. else {
  9337. this.setState({ errmsg: "" });
  9338. this.el.classList.remove('invalid');
  9339. this.el.classList.add('valid');
  9340. return true;
  9341. }
  9342. }
  9343. else {
  9344. if (required) {
  9345. this.setState({ errmsg: "Ne peu pas etre vide." });
  9346. this.makeInValid();
  9347. return false;
  9348. }
  9349. else {
  9350. this.setState({ errmsg: "" });
  9351. this.makeValid();
  9352. //this.el.classList.add('valid');
  9353. return true;
  9354. }
  9355. }
  9356. }
  9357. return false;
  9358. };
  9359. Field.prototype.makeInValid = function () {
  9360. if (this.el) {
  9361. this.el.classList.remove('valid');
  9362. this.el.classList.add('invalid');
  9363. }
  9364. };
  9365. Field.prototype.makeValid = function () {
  9366. if (this.el) {
  9367. this.el.classList.add('valid');
  9368. this.el.classList.remove('invalid');
  9369. }
  9370. };
  9371. Field.prototype.componentDidMount = function () {
  9372. if (this.label && ((this.props.placeholder !== '') || (this.el && this.el.value !== ""))) {
  9373. this.label.classList.add('active');
  9374. this.setState({
  9375. labelClassName: 'active'
  9376. });
  9377. }
  9378. };
  9379. Field.prototype.onKeyUp = function (e) {
  9380. if (e && "Enter" === e.key && this.props.onEnterKey) {
  9381. e.preventDefault();
  9382. e.stopPropagation();
  9383. this.props.onEnterKey(e, this);
  9384. }
  9385. this.validate();
  9386. };
  9387. Field.prototype.uuidv4 = function () {
  9388. // @ts-ignore
  9389. return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
  9390. return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16);
  9391. });
  9392. };
  9393. Field.prototype.getErrorView = function () {
  9394. if (this.state.errmsg != null && this.state.errmsg !== "") {
  9395. return React.createElement("div", { className: "helper-text" }, this.state.errmsg);
  9396. }
  9397. };
  9398. Field.prototype.render = function () {
  9399. var _this = this;
  9400. var props = __assign({}, this.props);
  9401. // @ts-ignore
  9402. delete props.vtypeMsg;
  9403. // @ts-ignore
  9404. delete props.onEnterKey;
  9405. return React.createElement("div", { className: "input-field" },
  9406. React.createElement("label", { ref: function (ref) { return (_this.label = ref); }, htmlFor: this.id, className: this.state.labelClassName }, this.props.label + (this.props.required === true ? ' *' : '')),
  9407. React.createElement("input", __assign({}, props, { ref: function (ref) {
  9408. _this.el = ref;
  9409. }, value: this.props.value || '', onChange: this.props.onChange || (function () {
  9410. }), onFocus: function (e) { return _this.onFocus.bind(_this)(e); }, type: this.props.type || "text", onBlur: function (e) { return _this.onBlur.bind(_this)(e); }, onKeyUp: function (e) { return _this.onKeyUp.bind(_this)(e); }, id: this.id, className: "validate " + this.props.className })),
  9411. this.getErrorView());
  9412. };
  9413. return Field;
  9414. }(React.Component));
  9415. exports.Field = Field;
  9416. /***/ }),
  9417. /***/ "./src/cmps/forms/Textarea.tsx":
  9418. /*!*************************************!*\
  9419. !*** ./src/cmps/forms/Textarea.tsx ***!
  9420. \*************************************/
  9421. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9422. "use strict";
  9423. var __extends = (this && this.__extends) || (function () {
  9424. var extendStatics = function (d, b) {
  9425. extendStatics = Object.setPrototypeOf ||
  9426. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9427. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9428. return extendStatics(d, b);
  9429. };
  9430. return function (d, b) {
  9431. if (typeof b !== "function" && b !== null)
  9432. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9433. extendStatics(d, b);
  9434. function __() { this.constructor = d; }
  9435. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9436. };
  9437. })();
  9438. var __assign = (this && this.__assign) || function () {
  9439. __assign = Object.assign || function(t) {
  9440. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9441. s = arguments[i];
  9442. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9443. t[p] = s[p];
  9444. }
  9445. return t;
  9446. };
  9447. return __assign.apply(this, arguments);
  9448. };
  9449. var __rest = (this && this.__rest) || function (s, e) {
  9450. var t = {};
  9451. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
  9452. t[p] = s[p];
  9453. if (s != null && typeof Object.getOwnPropertySymbols === "function")
  9454. for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  9455. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
  9456. t[p[i]] = s[p[i]];
  9457. }
  9458. return t;
  9459. };
  9460. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9461. exports.TextareaAutosize = void 0;
  9462. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9463. var PropTypes = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
  9464. var autosize = __webpack_require__(/*! autosize */ "./node_modules/autosize/dist/autosize.js");
  9465. var line_height_1 = __webpack_require__(/*! ./line-height */ "./src/cmps/forms/line-height.tsx");
  9466. var getLineHeight = line_height_1.default;
  9467. var RESIZED = "autosize:resized";
  9468. /**
  9469. * A light replacement for built-in textarea component
  9470. * which automaticaly adjusts its height to match the content
  9471. */
  9472. var TextareaAutosizeClass = /** @class */ (function (_super) {
  9473. __extends(TextareaAutosizeClass, _super);
  9474. function TextareaAutosizeClass() {
  9475. var _this = _super !== null && _super.apply(this, arguments) || this;
  9476. _this.state = {
  9477. lineHeight: null
  9478. };
  9479. _this.textarea = null;
  9480. _this.onResize = function (e) {
  9481. if (_this.props.onResize) {
  9482. _this.props.onResize(e);
  9483. }
  9484. };
  9485. _this.updateLineHeight = function () {
  9486. if (_this.textarea) {
  9487. _this.setState({
  9488. lineHeight: getLineHeight(_this.textarea)
  9489. });
  9490. }
  9491. };
  9492. _this.onChange = function (e) {
  9493. var onChange = _this.props.onChange;
  9494. _this.currentValue = e.currentTarget.value;
  9495. onChange && onChange(e);
  9496. };
  9497. return _this;
  9498. }
  9499. TextareaAutosizeClass.prototype.componentDidMount = function () {
  9500. var _this = this;
  9501. var _a = this.props, maxRows = _a.maxRows, async = _a.async;
  9502. if (typeof maxRows === "number") {
  9503. this.updateLineHeight();
  9504. }
  9505. if (typeof maxRows === "number" || async) {
  9506. /*
  9507. the defer is needed to:
  9508. - force "autosize" to activate the scrollbar when this.props.maxRows is passed
  9509. - support StyledComponents (see #71)
  9510. */
  9511. setTimeout(
  9512. // @ts-ignore
  9513. function () { return _this.textarea && autosize(_this.textarea); });
  9514. }
  9515. else {
  9516. // @ts-ignore
  9517. this.textarea && autosize(this.textarea);
  9518. }
  9519. if (this.textarea) {
  9520. this.textarea.addEventListener(RESIZED, this.onResize);
  9521. }
  9522. };
  9523. TextareaAutosizeClass.prototype.componentWillUnmount = function () {
  9524. if (this.textarea) {
  9525. this.textarea.removeEventListener(RESIZED, this.onResize);
  9526. autosize.destroy(this.textarea);
  9527. }
  9528. };
  9529. TextareaAutosizeClass.prototype.render = function () {
  9530. var _this = this;
  9531. var _a = this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, children = _b.children, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef", "children"]), lineHeight = _a.state.lineHeight;
  9532. var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;
  9533. return (React.createElement("textarea", __assign({}, props, { onChange: this.onChange, className: "textarea " + (this.props.className || ""), style: maxHeight ? __assign(__assign({}, style), { maxHeight: maxHeight }) : style, ref: function (element) {
  9534. _this.textarea = element;
  9535. if (typeof _this.props.innerRef === 'function') {
  9536. _this.props.innerRef(element);
  9537. }
  9538. else if (_this.props.innerRef) {
  9539. _this.props.innerRef.current = element;
  9540. }
  9541. } }), children));
  9542. };
  9543. TextareaAutosizeClass.prototype.componentDidUpdate = function () {
  9544. this.textarea && autosize.update(this.textarea);
  9545. };
  9546. TextareaAutosizeClass.defaultProps = {
  9547. rows: 1,
  9548. async: false
  9549. };
  9550. TextareaAutosizeClass.propTypes = {
  9551. rows: PropTypes.number,
  9552. maxRows: PropTypes.number,
  9553. onResize: PropTypes.func,
  9554. innerRef: PropTypes.any,
  9555. async: PropTypes.bool
  9556. };
  9557. return TextareaAutosizeClass;
  9558. }(React.Component));
  9559. exports.TextareaAutosize = React.forwardRef(function (props, ref) {
  9560. return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref }));
  9561. });
  9562. /***/ }),
  9563. /***/ "./src/cmps/forms/line-height.tsx":
  9564. /*!****************************************!*\
  9565. !*** ./src/cmps/forms/line-height.tsx ***!
  9566. \****************************************/
  9567. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  9568. "use strict";
  9569. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9570. // Load in dependencies
  9571. var computedStyle = __webpack_require__(/*! computed-style */ "./node_modules/computed-style/dist/computedStyle.commonjs.js");
  9572. /**
  9573. * Calculate the `line-height` of a given node
  9574. * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
  9575. * @returns {Number} `line-height` of the element in pixels
  9576. */
  9577. function lineHeight(node) {
  9578. // Grab the line-height via style
  9579. var lnHeightStr = computedStyle(node, 'line-height');
  9580. var lnHeight = parseFloat(lnHeightStr);
  9581. // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
  9582. if (lnHeightStr === lnHeight + '') {
  9583. // Save the old lineHeight style and update the em unit to the element
  9584. var _lnHeightStyle = node.style.lineHeight;
  9585. node.style.lineHeight = lnHeightStr + 'em';
  9586. // Calculate the em based height
  9587. lnHeightStr = computedStyle(node, 'line-height');
  9588. lnHeight = parseFloat(lnHeightStr);
  9589. // Revert the lineHeight style
  9590. if (_lnHeightStyle) {
  9591. node.style.lineHeight = _lnHeightStyle;
  9592. }
  9593. else {
  9594. //delete node.style.lineHeight;
  9595. }
  9596. }
  9597. // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
  9598. // DEV: `em` units are converted to `pt` in IE6
  9599. // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
  9600. if (lnHeightStr.indexOf('pt') !== -1) {
  9601. lnHeight *= 4;
  9602. lnHeight /= 3;
  9603. // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
  9604. }
  9605. else if (lnHeightStr.indexOf('mm') !== -1) {
  9606. lnHeight *= 96;
  9607. lnHeight /= 25.4;
  9608. // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
  9609. }
  9610. else if (lnHeightStr.indexOf('cm') !== -1) {
  9611. lnHeight *= 96;
  9612. lnHeight /= 2.54;
  9613. // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
  9614. }
  9615. else if (lnHeightStr.indexOf('in') !== -1) {
  9616. lnHeight *= 96;
  9617. // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
  9618. }
  9619. else if (lnHeightStr.indexOf('pc') !== -1) {
  9620. lnHeight *= 16;
  9621. }
  9622. // Continue our computation
  9623. lnHeight = Math.round(lnHeight);
  9624. // If the line-height is "normal", calculate by font-size
  9625. if (lnHeightStr === 'normal') {
  9626. // Create a temporary node
  9627. var nodeName = node.nodeName;
  9628. var _node = document.createElement(nodeName);
  9629. _node.innerHTML = '&nbsp;';
  9630. // If we have a text area, reset it to only 1 row
  9631. // https://github.com/twolfson/line-height/issues/4
  9632. if (nodeName.toUpperCase() === 'TEXTAREA') {
  9633. _node.setAttribute('rows', '1');
  9634. }
  9635. // Set the font-size of the element
  9636. var fontSizeStr = computedStyle(node, 'font-size');
  9637. _node.style.fontSize = fontSizeStr;
  9638. // Remove default padding/border which can affect offset height
  9639. // https://github.com/twolfson/line-height/issues/4
  9640. // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
  9641. _node.style.padding = '0px';
  9642. _node.style.border = '0px';
  9643. // Append it to the body
  9644. var body = document.body;
  9645. body.appendChild(_node);
  9646. // Assume the line height of the element is the height
  9647. var height = _node.offsetHeight;
  9648. lnHeight = height;
  9649. // Remove our child from the DOM
  9650. body.removeChild(_node);
  9651. }
  9652. // Return the calculated height
  9653. return lnHeight;
  9654. }
  9655. exports["default"] = lineHeight;
  9656. /***/ }),
  9657. /***/ "./src/cmps/forms/rex.tsx":
  9658. /*!********************************!*\
  9659. !*** ./src/cmps/forms/rex.tsx ***!
  9660. \********************************/
  9661. /***/ ((module) => {
  9662. "use strict";
  9663. module.exports = {
  9664. "num": /^[0-9]+$/,
  9665. "numeric": /^[0-9]+$/,
  9666. "alpha": /^[a-zA-Z_]+$/,
  9667. "alphabetic": /^[a-zA-Z_]+$/,
  9668. "alphanum": /^[a-zA-Z0-9_]+$/,
  9669. "alphanumeric": /^[a-zA-Z0-9_]+$/,
  9670. "email": /^(")?(?:[^\."\s])(?:(?:[\.])?(?:[\w\-!#$%&'*+/=?^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/,
  9671. "url": /(((^https?)|(^ftp)):\/\/((([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*)|(localhost|LOCALHOST))\/?)/i,
  9672. "ipAddress": /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
  9673. "phone": /^(?:(?:\+|00)33|0)\s*[1-9](?:\d{2}){4}$/,
  9674. "codePost": /^(((?!(96|97|98|99|00)))[0-9]{5})$|(2A|2B|2a|2b)[0-9]{3}$|(971|972|973|974|975|976)[0-9]{2}$/,
  9675. "codePostal": /^(((?!(96|97|98|99|00)))[0-9]{5})$|(2A|2B|2a|2b)[0-9]{3}$|(971|972|973|974|975|976)[0-9]{2}$/,
  9676. "time": /^([1-9]|1[0-9]):([0-5][0-9])(\s[a|p]m)$/,
  9677. "price": /^\d+(\.\d{2})?$/,
  9678. "prix": /^\d+(\.\d{2})?$/,
  9679. "date": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
  9680. "tva": /^(5\.5|10|20)$/,
  9681. "password": /(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
  9682. "motDePasse": /(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
  9683. "matricule": /(^\d{1,4}[A-Za-z]{1,4}\d{1,2}$)|(^[A-Za-z]{1,2}\s*\d{1,3}\s*[A-Za-z]{1,2})$/,
  9684. "tvaIntercom": /^(FR)([0-9]{11}$)/,
  9685. "iban": /^FR\d{12}[A-Z0-9]{11}\d{2}$/,
  9686. "timeMask": /[\d\s:amp]/i,
  9687. 'numMask': /[0-9]/i,
  9688. 'alphaMask': /[a-z_]/i,
  9689. 'alphanumMask': /[a-z0-9_]/i,
  9690. 'emailMask': /[\w.\-@'"!#$%&'*+/=?^_`{|}~]/i,
  9691. 'urlMask': /[a-z0-9_]/i,
  9692. 'ipAddressMask': /[\d\.]/i,
  9693. "phoneMask": /[0-9\+]/i,
  9694. "codePostMask": /[0-9ABab]/i,
  9695. 'passwordMask': /[\w.\-@'"!#$%&'*+/=?^_`{|}~]/i,
  9696. };
  9697. /***/ }),
  9698. /***/ "./src/cmps/icons/Icon.tsx":
  9699. /*!*********************************!*\
  9700. !*** ./src/cmps/icons/Icon.tsx ***!
  9701. \*********************************/
  9702. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9703. "use strict";
  9704. var __extends = (this && this.__extends) || (function () {
  9705. var extendStatics = function (d, b) {
  9706. extendStatics = Object.setPrototypeOf ||
  9707. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9708. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9709. return extendStatics(d, b);
  9710. };
  9711. return function (d, b) {
  9712. if (typeof b !== "function" && b !== null)
  9713. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9714. extendStatics(d, b);
  9715. function __() { this.constructor = d; }
  9716. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9717. };
  9718. })();
  9719. var __assign = (this && this.__assign) || function () {
  9720. __assign = Object.assign || function(t) {
  9721. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9722. s = arguments[i];
  9723. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9724. t[p] = s[p];
  9725. }
  9726. return t;
  9727. };
  9728. return __assign.apply(this, arguments);
  9729. };
  9730. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9731. exports.Icon = void 0;
  9732. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9733. var Icon = /** @class */ (function (_super) {
  9734. __extends(Icon, _super);
  9735. function Icon() {
  9736. return _super !== null && _super.apply(this, arguments) || this;
  9737. }
  9738. Icon.prototype.render = function () {
  9739. return React.createElement("span", __assign({}, this.props, { className: "s-icon " + this.props.className }));
  9740. };
  9741. return Icon;
  9742. }(React.Component));
  9743. exports.Icon = Icon;
  9744. /***/ }),
  9745. /***/ "./src/cmps/layouts/Layouts.tsx":
  9746. /*!**************************************!*\
  9747. !*** ./src/cmps/layouts/Layouts.tsx ***!
  9748. \**************************************/
  9749. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9750. "use strict";
  9751. var __extends = (this && this.__extends) || (function () {
  9752. var extendStatics = function (d, b) {
  9753. extendStatics = Object.setPrototypeOf ||
  9754. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9755. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9756. return extendStatics(d, b);
  9757. };
  9758. return function (d, b) {
  9759. if (typeof b !== "function" && b !== null)
  9760. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9761. extendStatics(d, b);
  9762. function __() { this.constructor = d; }
  9763. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9764. };
  9765. })();
  9766. var __assign = (this && this.__assign) || function () {
  9767. __assign = Object.assign || function(t) {
  9768. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9769. s = arguments[i];
  9770. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9771. t[p] = s[p];
  9772. }
  9773. return t;
  9774. };
  9775. return __assign.apply(this, arguments);
  9776. };
  9777. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9778. exports.Overlay = exports.Divider = exports.Parallax = exports.Row = exports.Col = void 0;
  9779. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9780. var Col = /** @class */ (function (_super) {
  9781. __extends(Col, _super);
  9782. function Col() {
  9783. var _this = _super !== null && _super.apply(this, arguments) || this;
  9784. _this.el = null;
  9785. return _this;
  9786. }
  9787. Col.prototype.render = function () {
  9788. var _this = this;
  9789. return (React.createElement("div", __assign({}, this.props, { ref: function (ref) { return _this.el = ref; }, className: "col " + this.props.className })));
  9790. };
  9791. return Col;
  9792. }(React.Component));
  9793. exports.Col = Col;
  9794. var Row = /** @class */ (function (_super) {
  9795. __extends(Row, _super);
  9796. function Row() {
  9797. var _this = _super !== null && _super.apply(this, arguments) || this;
  9798. _this.el = null;
  9799. return _this;
  9800. }
  9801. Row.prototype.render = function () {
  9802. var _this = this;
  9803. return (React.createElement("div", __assign({}, this.props, { ref: function (ref) { return _this.el = ref; }, className: "row " + this.props.className })));
  9804. };
  9805. return Row;
  9806. }(React.Component));
  9807. exports.Row = Row;
  9808. var Parallax = /** @class */ (function (_super) {
  9809. __extends(Parallax, _super);
  9810. function Parallax() {
  9811. return _super !== null && _super.apply(this, arguments) || this;
  9812. }
  9813. Parallax.prototype.render = function () {
  9814. var st = __assign({}, this.props.style);
  9815. st.backgroundImage = "url(" + this.props.src + ")";
  9816. return React.createElement("div", { className: "parallax", style: st }, this.props.children);
  9817. };
  9818. return Parallax;
  9819. }(React.Component));
  9820. exports.Parallax = Parallax;
  9821. var Divider = /** @class */ (function (_super) {
  9822. __extends(Divider, _super);
  9823. function Divider() {
  9824. return _super !== null && _super.apply(this, arguments) || this;
  9825. }
  9826. Divider.prototype.render = function () {
  9827. return (React.createElement("div", { className: "divider" }));
  9828. };
  9829. return Divider;
  9830. }(React.Component));
  9831. exports.Divider = Divider;
  9832. var Overlay = /** @class */ (function (_super) {
  9833. __extends(Overlay, _super);
  9834. function Overlay() {
  9835. var _this = _super !== null && _super.apply(this, arguments) || this;
  9836. _this.state = {
  9837. visible: false
  9838. };
  9839. _this.el = null;
  9840. return _this;
  9841. }
  9842. Overlay.prototype.show = function () {
  9843. this.setState({
  9844. visible: true
  9845. });
  9846. };
  9847. Overlay.prototype.open = function () {
  9848. return this.show();
  9849. };
  9850. Overlay.prototype.isVisible = function () {
  9851. return this.state.visible;
  9852. };
  9853. Overlay.prototype.hide = function () {
  9854. this.setState({
  9855. visible: false
  9856. });
  9857. };
  9858. Overlay.prototype.close = function () {
  9859. return this.hide();
  9860. };
  9861. Overlay.prototype.render = function () {
  9862. var _this = this;
  9863. if (this.state.visible) {
  9864. return (React.createElement("div", __assign({ ref: function (ref) {
  9865. _this.el = ref;
  9866. } }, this.props, { className: "modal-overlay " + this.props.className })));
  9867. }
  9868. return null;
  9869. };
  9870. return Overlay;
  9871. }(React.Component));
  9872. exports.Overlay = Overlay;
  9873. /***/ }),
  9874. /***/ "./src/cmps/modal/Modal.tsx":
  9875. /*!**********************************!*\
  9876. !*** ./src/cmps/modal/Modal.tsx ***!
  9877. \**********************************/
  9878. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9879. "use strict";
  9880. var __extends = (this && this.__extends) || (function () {
  9881. var extendStatics = function (d, b) {
  9882. extendStatics = Object.setPrototypeOf ||
  9883. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9884. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9885. return extendStatics(d, b);
  9886. };
  9887. return function (d, b) {
  9888. if (typeof b !== "function" && b !== null)
  9889. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9890. extendStatics(d, b);
  9891. function __() { this.constructor = d; }
  9892. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9893. };
  9894. })();
  9895. var __assign = (this && this.__assign) || function () {
  9896. __assign = Object.assign || function(t) {
  9897. for (var s, i = 1, n = arguments.length; i < n; i++) {
  9898. s = arguments[i];
  9899. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  9900. t[p] = s[p];
  9901. }
  9902. return t;
  9903. };
  9904. return __assign.apply(this, arguments);
  9905. };
  9906. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9907. exports.ModalHeader = exports.ModalFooter = exports.ModalContent = exports.Modal = void 0;
  9908. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  9909. var Modal = /** @class */ (function (_super) {
  9910. __extends(Modal, _super);
  9911. function Modal() {
  9912. var _this = _super !== null && _super.apply(this, arguments) || this;
  9913. _this.state = {
  9914. isOpen: false
  9915. };
  9916. return _this;
  9917. }
  9918. Modal.prototype.open = function () {
  9919. this.setState({
  9920. isOpen: true
  9921. });
  9922. };
  9923. Modal.prototype.close = function () {
  9924. this.setState({
  9925. isOpen: false
  9926. });
  9927. };
  9928. Modal.prototype.show = function () {
  9929. return this.open();
  9930. };
  9931. Modal.prototype.hide = function () {
  9932. return this.close();
  9933. };
  9934. Modal.prototype.render = function () {
  9935. if (this.state.isOpen) {
  9936. return (React.createElement("div", { className: "modal-overlay" },
  9937. React.createElement("div", __assign({}, this.props, { className: "modal " + (this.props.className || "") }))));
  9938. }
  9939. return null;
  9940. };
  9941. return Modal;
  9942. }(React.Component));
  9943. exports.Modal = Modal;
  9944. var ModalContent = /** @class */ (function (_super) {
  9945. __extends(ModalContent, _super);
  9946. function ModalContent() {
  9947. return _super !== null && _super.apply(this, arguments) || this;
  9948. }
  9949. ModalContent.prototype.render = function () {
  9950. return (React.createElement("div", __assign({}, this.props, { className: "modal-content " + (this.props.className || "") })));
  9951. };
  9952. return ModalContent;
  9953. }(React.Component));
  9954. exports.ModalContent = ModalContent;
  9955. var ModalFooter = /** @class */ (function (_super) {
  9956. __extends(ModalFooter, _super);
  9957. function ModalFooter() {
  9958. return _super !== null && _super.apply(this, arguments) || this;
  9959. }
  9960. ModalFooter.prototype.render = function () {
  9961. return (React.createElement("div", __assign({}, this.props, { className: "modal-footer " + (this.props.className || "") })));
  9962. };
  9963. return ModalFooter;
  9964. }(React.Component));
  9965. exports.ModalFooter = ModalFooter;
  9966. var ModalHeader = /** @class */ (function (_super) {
  9967. __extends(ModalHeader, _super);
  9968. function ModalHeader() {
  9969. return _super !== null && _super.apply(this, arguments) || this;
  9970. }
  9971. ModalHeader.prototype.render = function () {
  9972. return (React.createElement("div", __assign({}, this.props, { className: "modal-header " + (this.props.className || "") })));
  9973. };
  9974. return ModalHeader;
  9975. }(React.Component));
  9976. exports.ModalHeader = ModalHeader;
  9977. /***/ }),
  9978. /***/ "./src/cmps/navigation/NavBar.tsx":
  9979. /*!****************************************!*\
  9980. !*** ./src/cmps/navigation/NavBar.tsx ***!
  9981. \****************************************/
  9982. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  9983. "use strict";
  9984. var __extends = (this && this.__extends) || (function () {
  9985. var extendStatics = function (d, b) {
  9986. extendStatics = Object.setPrototypeOf ||
  9987. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  9988. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  9989. return extendStatics(d, b);
  9990. };
  9991. return function (d, b) {
  9992. if (typeof b !== "function" && b !== null)
  9993. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  9994. extendStatics(d, b);
  9995. function __() { this.constructor = d; }
  9996. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9997. };
  9998. })();
  9999. var __assign = (this && this.__assign) || function () {
  10000. __assign = Object.assign || function(t) {
  10001. for (var s, i = 1, n = arguments.length; i < n; i++) {
  10002. s = arguments[i];
  10003. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  10004. t[p] = s[p];
  10005. }
  10006. return t;
  10007. };
  10008. return __assign.apply(this, arguments);
  10009. };
  10010. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10011. exports.NavBarBrand = exports.NavBarItem = exports.NavBarGroup = exports.NavBar = void 0;
  10012. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  10013. var NavBar = /** @class */ (function (_super) {
  10014. __extends(NavBar, _super);
  10015. function NavBar() {
  10016. return _super !== null && _super.apply(this, arguments) || this;
  10017. }
  10018. NavBar.prototype.render = function () {
  10019. return React.createElement("nav", null,
  10020. React.createElement("div", __assign({}, this.props, { className: "nav-wrapper" })));
  10021. };
  10022. return NavBar;
  10023. }(React.Component));
  10024. exports.NavBar = NavBar;
  10025. var NavBarGroup = /** @class */ (function (_super) {
  10026. __extends(NavBarGroup, _super);
  10027. function NavBarGroup() {
  10028. return _super !== null && _super.apply(this, arguments) || this;
  10029. }
  10030. NavBarGroup.prototype.render = function () {
  10031. return React.createElement("ul", __assign({}, this.props, { className: "right hide-on-med-and-down ·" + (this.props.className || "") }));
  10032. };
  10033. return NavBarGroup;
  10034. }(React.Component));
  10035. exports.NavBarGroup = NavBarGroup;
  10036. var NavBarItem = /** @class */ (function (_super) {
  10037. __extends(NavBarItem, _super);
  10038. function NavBarItem() {
  10039. return _super !== null && _super.apply(this, arguments) || this;
  10040. }
  10041. NavBarItem.prototype.render = function () {
  10042. return React.createElement("li", __assign({}, this.props));
  10043. };
  10044. return NavBarItem;
  10045. }(React.Component));
  10046. exports.NavBarItem = NavBarItem;
  10047. var NavBarBrand = /** @class */ (function (_super) {
  10048. __extends(NavBarBrand, _super);
  10049. function NavBarBrand() {
  10050. return _super !== null && _super.apply(this, arguments) || this;
  10051. }
  10052. NavBarBrand.prototype.render = function () {
  10053. return React.createElement("a", __assign({}, this.props, { className: "brand-logo" }));
  10054. };
  10055. return NavBarBrand;
  10056. }(React.Component));
  10057. exports.NavBarBrand = NavBarBrand;
  10058. /***/ }),
  10059. /***/ "./src/cmps/navigation/Navigation.tsx":
  10060. /*!********************************************!*\
  10061. !*** ./src/cmps/navigation/Navigation.tsx ***!
  10062. \********************************************/
  10063. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  10064. "use strict";
  10065. var __extends = (this && this.__extends) || (function () {
  10066. var extendStatics = function (d, b) {
  10067. extendStatics = Object.setPrototypeOf ||
  10068. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  10069. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  10070. return extendStatics(d, b);
  10071. };
  10072. return function (d, b) {
  10073. if (typeof b !== "function" && b !== null)
  10074. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  10075. extendStatics(d, b);
  10076. function __() { this.constructor = d; }
  10077. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  10078. };
  10079. })();
  10080. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10081. exports.Navigation = void 0;
  10082. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  10083. var NavBar_1 = __webpack_require__(/*! ./NavBar */ "./src/cmps/navigation/NavBar.tsx");
  10084. var SideNav_1 = __webpack_require__(/*! ./SideNav */ "./src/cmps/navigation/SideNav.tsx");
  10085. var Navigation = /** @class */ (function (_super) {
  10086. __extends(Navigation, _super);
  10087. function Navigation(props) {
  10088. return _super.call(this, props) || this;
  10089. }
  10090. Navigation.prototype.componentDidMount = function () {
  10091. // console.log(this.navbar);
  10092. // console.log(this.sidenav);
  10093. };
  10094. Navigation.prototype.render = function () {
  10095. var _this = this;
  10096. return React.createElement(React.Fragment, null,
  10097. React.createElement(NavBar_1.NavBar, { ref: function (ref) {
  10098. _this.navbar = ref;
  10099. } },
  10100. React.createElement("a", { className: "sidenav-trigger", onClick: function (e) {
  10101. e.stopPropagation();
  10102. _this.sidenav && _this.sidenav.toggle();
  10103. } },
  10104. React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", style: { width: "20px" }, fill: "white", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "2" },
  10105. React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }))),
  10106. React.createElement(NavBar_1.NavBarBrand, null,
  10107. React.createElement("img", { src: this.props.logo || "https://statics.d3v4pp.fr/logo.png", className: "circle", alt: "Brand" })),
  10108. React.createElement(NavBar_1.NavBarGroup, null, this.props.routes && this.props.routes.map(function (route, i) {
  10109. return React.createElement(NavBar_1.NavBarItem, { key: i }, route.element);
  10110. }))),
  10111. React.createElement(SideNav_1.SideNav, { ref: function (ref) {
  10112. _this.sidenav = ref;
  10113. } },
  10114. React.createElement(SideNav_1.SideNavUser, { username: 'ayoub hassani', email: 'ayoub@d3v4pp.fr', src: "https://statics.d3v4pp.fr/logo.png", bg_src: "https://imgs.search.brave.com/yX0vgamsYEbsOU9XlyPGUM8DdmqxXpAKyzBM4s3wolA/rs:fit:1200:1030:1/g:ce/aHR0cHM6Ly93d3cu/YXZpYXNpbS5jb20v/d3AtY29udGVudC91/cGxvYWRzL2F2aWFz/aW0taW1hZ2UtbnVh/Z2VzLmpwZw" }),
  10115. this.props.routes && this.props.routes.map(function (route, i) {
  10116. return React.createElement(SideNav_1.SideNavEl, { onClick: function () { return _this.sidenav && _this.sidenav.hide(); }, key: i }, route.element);
  10117. })));
  10118. };
  10119. return Navigation;
  10120. }(React.Component));
  10121. exports.Navigation = Navigation;
  10122. /***/ }),
  10123. /***/ "./src/cmps/navigation/SideNav.tsx":
  10124. /*!*****************************************!*\
  10125. !*** ./src/cmps/navigation/SideNav.tsx ***!
  10126. \*****************************************/
  10127. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  10128. "use strict";
  10129. var __extends = (this && this.__extends) || (function () {
  10130. var extendStatics = function (d, b) {
  10131. extendStatics = Object.setPrototypeOf ||
  10132. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  10133. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  10134. return extendStatics(d, b);
  10135. };
  10136. return function (d, b) {
  10137. if (typeof b !== "function" && b !== null)
  10138. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  10139. extendStatics(d, b);
  10140. function __() { this.constructor = d; }
  10141. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  10142. };
  10143. })();
  10144. var __assign = (this && this.__assign) || function () {
  10145. __assign = Object.assign || function(t) {
  10146. for (var s, i = 1, n = arguments.length; i < n; i++) {
  10147. s = arguments[i];
  10148. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  10149. t[p] = s[p];
  10150. }
  10151. return t;
  10152. };
  10153. return __assign.apply(this, arguments);
  10154. };
  10155. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10156. exports.SideNavEl = exports.SideNavUser = exports.SideNav = void 0;
  10157. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  10158. var SideNav = /** @class */ (function (_super) {
  10159. __extends(SideNav, _super);
  10160. function SideNav() {
  10161. var _this = _super !== null && _super.apply(this, arguments) || this;
  10162. _this.state = {
  10163. open: false,
  10164. };
  10165. return _this;
  10166. }
  10167. SideNav.prototype.open = function () {
  10168. this.setState({ open: true });
  10169. };
  10170. SideNav.prototype.toggle = function () {
  10171. this.setState({ open: !this.state.open });
  10172. };
  10173. SideNav.prototype.hide = function () {
  10174. this.setState({ open: false });
  10175. };
  10176. SideNav.prototype.render = function () {
  10177. return React.createElement("ul", __assign({}, this.props, { className: "sidenav " + (this.props.className || ""), style: { transform: this.state.open ? "translateX(0)" : "translateX(-105%)" } }));
  10178. };
  10179. return SideNav;
  10180. }(React.Component));
  10181. exports.SideNav = SideNav;
  10182. var SideNavUser = /** @class */ (function (_super) {
  10183. __extends(SideNavUser, _super);
  10184. function SideNavUser() {
  10185. return _super !== null && _super.apply(this, arguments) || this;
  10186. }
  10187. SideNavUser.prototype.render = function () {
  10188. return React.createElement("li", __assign({}, this.props),
  10189. React.createElement("div", { className: "user-view" },
  10190. React.createElement("div", { className: "background" },
  10191. React.createElement("img", { src: this.props.bg_src })),
  10192. React.createElement("a", null,
  10193. React.createElement("img", { className: "circle", src: this.props.src })),
  10194. React.createElement("a", null,
  10195. React.createElement("span", { className: "black-text name" }, this.props.username)),
  10196. React.createElement("a", null,
  10197. React.createElement("span", { className: "black-text email" }, this.props.email))));
  10198. };
  10199. return SideNavUser;
  10200. }(React.Component));
  10201. exports.SideNavUser = SideNavUser;
  10202. var SideNavEl = /** @class */ (function (_super) {
  10203. __extends(SideNavEl, _super);
  10204. function SideNavEl() {
  10205. return _super !== null && _super.apply(this, arguments) || this;
  10206. }
  10207. SideNavEl.prototype.render = function () {
  10208. return React.createElement("li", __assign({}, this.props));
  10209. };
  10210. return SideNavEl;
  10211. }(React.Component));
  10212. exports.SideNavEl = SideNavEl;
  10213. /***/ }),
  10214. /***/ "./src/cmps/progress/Progress.tsx":
  10215. /*!****************************************!*\
  10216. !*** ./src/cmps/progress/Progress.tsx ***!
  10217. \****************************************/
  10218. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  10219. "use strict";
  10220. var __extends = (this && this.__extends) || (function () {
  10221. var extendStatics = function (d, b) {
  10222. extendStatics = Object.setPrototypeOf ||
  10223. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  10224. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  10225. return extendStatics(d, b);
  10226. };
  10227. return function (d, b) {
  10228. if (typeof b !== "function" && b !== null)
  10229. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  10230. extendStatics(d, b);
  10231. function __() { this.constructor = d; }
  10232. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  10233. };
  10234. })();
  10235. var __assign = (this && this.__assign) || function () {
  10236. __assign = Object.assign || function(t) {
  10237. for (var s, i = 1, n = arguments.length; i < n; i++) {
  10238. s = arguments[i];
  10239. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  10240. t[p] = s[p];
  10241. }
  10242. return t;
  10243. };
  10244. return __assign.apply(this, arguments);
  10245. };
  10246. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10247. exports.Preloader = exports.Progress = void 0;
  10248. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  10249. var Progress = /** @class */ (function (_super) {
  10250. __extends(Progress, _super);
  10251. function Progress() {
  10252. return _super !== null && _super.apply(this, arguments) || this;
  10253. }
  10254. Progress.prototype.render = function () {
  10255. return React.createElement("div", __assign({}, this.props, { className: (this.props.className || "") + " progress" }),
  10256. React.createElement("div", { className: this.props.value ? "determinate" : "indeterminate", style: { width: this.props.value + "%" } }));
  10257. };
  10258. return Progress;
  10259. }(React.Component));
  10260. exports.Progress = Progress;
  10261. var Preloader = /** @class */ (function (_super) {
  10262. __extends(Preloader, _super);
  10263. function Preloader() {
  10264. return _super !== null && _super.apply(this, arguments) || this;
  10265. }
  10266. Preloader.prototype.render = function () {
  10267. var s = this.props.size == "big" ? "big" : this.props.size == "small" ? "small" : "";
  10268. var ca = this.props.color ? this.props.color.split(",") : ['blue'];
  10269. if (ca.length === 1) {
  10270. return React.createElement("div", { className: "preloader-wrapper " + s + " active" },
  10271. React.createElement("div", { className: "spinner-layer spinner-" + ca[0] + "-only" },
  10272. React.createElement("div", { className: "circle-clipper right" },
  10273. React.createElement("div", { className: "circle" })),
  10274. React.createElement("div", { className: "gap-patch" },
  10275. React.createElement("div", { className: "circle" })),
  10276. React.createElement("div", { className: "circle-clipper left" },
  10277. React.createElement("div", { className: "circle" }))));
  10278. }
  10279. else {
  10280. return React.createElement("div", { className: "preloader-wrapper " + s + " active" }, ca.map(function (scolor) {
  10281. return React.createElement("div", { className: "spinner-layer spinner-" + scolor },
  10282. React.createElement("div", { className: "circle-clipper left" },
  10283. React.createElement("div", { className: "circle" })),
  10284. React.createElement("div", { className: "gap-patch" },
  10285. React.createElement("div", { className: "circle" })),
  10286. React.createElement("div", { className: "circle-clipper right" },
  10287. React.createElement("div", { className: "circle" })));
  10288. }));
  10289. }
  10290. };
  10291. return Preloader;
  10292. }(React.Component));
  10293. exports.Preloader = Preloader;
  10294. /***/ }),
  10295. /***/ "./src/ux/auth/Login.tsx":
  10296. /*!*******************************!*\
  10297. !*** ./src/ux/auth/Login.tsx ***!
  10298. \*******************************/
  10299. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  10300. "use strict";
  10301. var __extends = (this && this.__extends) || (function () {
  10302. var extendStatics = function (d, b) {
  10303. extendStatics = Object.setPrototypeOf ||
  10304. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  10305. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  10306. return extendStatics(d, b);
  10307. };
  10308. return function (d, b) {
  10309. if (typeof b !== "function" && b !== null)
  10310. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  10311. extendStatics(d, b);
  10312. function __() { this.constructor = d; }
  10313. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  10314. };
  10315. })();
  10316. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10317. exports.Login = void 0;
  10318. var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
  10319. var Field_1 = __webpack_require__(/*! ../../cmps/forms/Field */ "./src/cmps/forms/Field.tsx");
  10320. //
  10321. // export function Login ({onLogin, onLoginError, className, checkUrl}: LoginProps) {
  10322. // let emailF: { isValid: () => any; }, passF: { isValid: () => any; };
  10323. // let [emailOk, setEmailOk] = useState(false)
  10324. // let [user, setUser] = useState({
  10325. // password: "",
  10326. // email: ""
  10327. // });
  10328. // let next = () => {
  10329. // if (emailF && emailF.isValid()) {
  10330. // if (checkUrl) {
  10331. // fetch(checkUrl, {
  10332. // method: "POST",
  10333. // headers: {
  10334. // 'Accept': 'application/json',
  10335. // 'Content-Type': 'application/json'
  10336. // },
  10337. // body: JSON.stringify(user)
  10338. // }).then(r => r.json()).then(json => {
  10339. // if (json.success) {
  10340. // setEmailOk(true);
  10341. // } else {
  10342. // onLoginError && onLoginError(json);
  10343. // }
  10344. // }).catch(error => {
  10345. // onLoginError && onLoginError(error);
  10346. // })
  10347. // } else {
  10348. // setEmailOk(true);
  10349. // }
  10350. // }
  10351. // }
  10352. // let login = () => {
  10353. // if (emailF && emailF.isValid() && passF && passF.isValid()) {
  10354. // onLogin && onLogin(user)
  10355. //
  10356. // }
  10357. // }
  10358. // let getPasswordView = () => {
  10359. // if (emailOk) {
  10360. // return <><Field
  10361. // ref={(r: FieldRef | null | any) => {
  10362. // passF = r;
  10363. // }}
  10364. // value={user.password}
  10365. // onChange={(e) => {
  10366. // let u = {...user};
  10367. // // @ts-ignore
  10368. // u.password = e.target.value;
  10369. // setUser(u);
  10370. // }}
  10371. // autoFocus={true}
  10372. // required={true}
  10373. // label={"Password"}
  10374. // type={"password"}
  10375. // vtype={"password"}
  10376. // vtypeMsg={'Need to be a valid Password'}
  10377. // onEnterKey={login}/>
  10378. // </>;
  10379. // } else {
  10380. // return null;
  10381. // }
  10382. // }
  10383. //
  10384. // let getLoginView = () => {
  10385. // if (!emailOk) {
  10386. // return <><Field
  10387. // autoFocus={true}
  10388. // required={true}
  10389. // ref={(r: FieldRef | null | any) => {
  10390. // emailF = r;
  10391. // }}
  10392. // value={user.email}
  10393. // onChange={(e) => {
  10394. // let u = {...user};
  10395. // // @ts-ignore
  10396. // u.email = e.target.value;
  10397. // setUser(u);
  10398. // }}
  10399. // label={"Email"}
  10400. // type={"email"}
  10401. // vtype={"email"}
  10402. // vtypeMsg={'Need to be a valid email'}
  10403. // onEnterKey={next}/>
  10404. // </>;
  10405. // } else {
  10406. // return null;
  10407. // }
  10408. //
  10409. // }
  10410. // return <div
  10411. // ref={el => {
  10412. // el = el;
  10413. // }}
  10414. // className={(className || "") + " login"}
  10415. // >
  10416. // {getLoginView()}
  10417. // {getPasswordView()}
  10418. // </div>
  10419. // }
  10420. var Login = /** @class */ (function (_super) {
  10421. __extends(Login, _super);
  10422. function Login(props) {
  10423. var _this = _super.call(this, props) || this;
  10424. _this.state = {
  10425. emailOk: false,
  10426. email: "",
  10427. password: "",
  10428. passOK: false
  10429. };
  10430. return _this;
  10431. }
  10432. Login.prototype.next = function () {
  10433. var _this = this;
  10434. if (this.emailF && this.emailF.isValid()) {
  10435. if (this.props.checkUrl) {
  10436. fetch(this.props.checkUrl, {
  10437. method: "POST",
  10438. headers: {
  10439. 'Accept': 'application/json',
  10440. 'Content-Type': 'application/json'
  10441. },
  10442. body: JSON.stringify({ email: this.state.email, })
  10443. }).then(function (r) { return r.json(); }).then(function (json) {
  10444. if (json.success) {
  10445. _this.setState({ emailOk: true });
  10446. }
  10447. else {
  10448. _this.props.onLoginError && _this.props.onLoginError(json);
  10449. }
  10450. }).catch(function (error) {
  10451. _this.props.onLoginError && _this.props.onLoginError(error);
  10452. });
  10453. }
  10454. else {
  10455. this.setState({ emailOk: true });
  10456. }
  10457. }
  10458. };
  10459. Login.prototype.login = function () {
  10460. if (this.state.emailOk && this.passwordF && this.passwordF.isValid()) {
  10461. this.props.onLogin && this.props.onLogin({
  10462. email: this.state.email,
  10463. password: this.state.password
  10464. });
  10465. }
  10466. };
  10467. Login.prototype.getLoginView = function () {
  10468. var _this = this;
  10469. if (!this.state.emailOk) {
  10470. return React.createElement(React.Fragment, null,
  10471. React.createElement(Field_1.Field, { autoFocus: true, required: true, ref: function (r) {
  10472. _this.emailF = r;
  10473. }, value: this.state.email, onChange: function (e) {
  10474. // @ts-ignore
  10475. _this.setState({ email: e.target.value });
  10476. }, label: "Email", type: "email", vtype: "email", vtypeMsg: 'Need to be a valid email', onEnterKey: this.next.bind(this) }));
  10477. }
  10478. else {
  10479. return null;
  10480. }
  10481. };
  10482. Login.prototype.getPasswordView = function () {
  10483. var _this = this;
  10484. if (this.state.emailOk) {
  10485. return React.createElement(React.Fragment, null,
  10486. React.createElement(Field_1.Field, { ref: function (r) {
  10487. _this.passwordF = r;
  10488. }, value: this.state.password, onChange: function (e) {
  10489. // @ts-ignore
  10490. _this.setState({ password: e.target.value });
  10491. }, autoFocus: true, required: true, label: "Password", type: "password", vtype: "password", vtypeMsg: 'Need to be a valid Password', onEnterKey: this.login.bind(this) }));
  10492. }
  10493. else {
  10494. return null;
  10495. }
  10496. };
  10497. Login.prototype.render = function () {
  10498. var _this = this;
  10499. return (React.createElement("div", { ref: function (el) {
  10500. _this.el = el;
  10501. }, className: (this.props.className || "") + " login" },
  10502. this.getLoginView(),
  10503. this.getPasswordView()));
  10504. };
  10505. return Login;
  10506. }(React.Component));
  10507. exports.Login = Login;
  10508. /***/ }),
  10509. /***/ "./src/ux/index.ts":
  10510. /*!*************************!*\
  10511. !*** ./src/ux/index.ts ***!
  10512. \*************************/
  10513. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  10514. "use strict";
  10515. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10516. exports.Login = void 0;
  10517. var Login_1 = __webpack_require__(/*! ./auth/Login */ "./src/ux/auth/Login.tsx");
  10518. Object.defineProperty(exports, "Login", ({ enumerable: true, get: function () { return Login_1.Login; } }));
  10519. /***/ }),
  10520. /***/ "./src/sass/icons/assets/SweetIcons-Regular.eot":
  10521. /*!******************************************************!*\
  10522. !*** ./src/sass/icons/assets/SweetIcons-Regular.eot ***!
  10523. \******************************************************/
  10524. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  10525. "use strict";
  10526. module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.eot";
  10527. /***/ }),
  10528. /***/ "./src/sass/icons/assets/SweetIcons-Regular.ttf":
  10529. /*!******************************************************!*\
  10530. !*** ./src/sass/icons/assets/SweetIcons-Regular.ttf ***!
  10531. \******************************************************/
  10532. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  10533. "use strict";
  10534. module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.ttf";
  10535. /***/ }),
  10536. /***/ "./src/sass/icons/assets/SweetIcons-Regular.woff":
  10537. /*!*******************************************************!*\
  10538. !*** ./src/sass/icons/assets/SweetIcons-Regular.woff ***!
  10539. \*******************************************************/
  10540. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  10541. "use strict";
  10542. module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.woff";
  10543. /***/ }),
  10544. /***/ "./src/sass/icons/assets/SweetIcons-Regular.woff2":
  10545. /*!********************************************************!*\
  10546. !*** ./src/sass/icons/assets/SweetIcons-Regular.woff2 ***!
  10547. \********************************************************/
  10548. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  10549. "use strict";
  10550. module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.woff2";
  10551. /***/ })
  10552. /******/ });
  10553. /************************************************************************/
  10554. /******/ // The module cache
  10555. /******/ var __webpack_module_cache__ = {};
  10556. /******/
  10557. /******/ // The require function
  10558. /******/ function __webpack_require__(moduleId) {
  10559. /******/ // Check if module is in cache
  10560. /******/ var cachedModule = __webpack_module_cache__[moduleId];
  10561. /******/ if (cachedModule !== undefined) {
  10562. /******/ return cachedModule.exports;
  10563. /******/ }
  10564. /******/ // Create a new module (and put it into the cache)
  10565. /******/ var module = __webpack_module_cache__[moduleId] = {
  10566. /******/ id: moduleId,
  10567. /******/ // no module.loaded needed
  10568. /******/ exports: {}
  10569. /******/ };
  10570. /******/
  10571. /******/ // Execute the module function
  10572. /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  10573. /******/
  10574. /******/ // Return the exports of the module
  10575. /******/ return module.exports;
  10576. /******/ }
  10577. /******/
  10578. /******/ // expose the modules object (__webpack_modules__)
  10579. /******/ __webpack_require__.m = __webpack_modules__;
  10580. /******/
  10581. /************************************************************************/
  10582. /******/ /* webpack/runtime/compat get default export */
  10583. /******/ (() => {
  10584. /******/ // getDefaultExport function for compatibility with non-harmony modules
  10585. /******/ __webpack_require__.n = (module) => {
  10586. /******/ var getter = module && module.__esModule ?
  10587. /******/ () => (module['default']) :
  10588. /******/ () => (module);
  10589. /******/ __webpack_require__.d(getter, { a: getter });
  10590. /******/ return getter;
  10591. /******/ };
  10592. /******/ })();
  10593. /******/
  10594. /******/ /* webpack/runtime/create fake namespace object */
  10595. /******/ (() => {
  10596. /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
  10597. /******/ var leafPrototypes;
  10598. /******/ // create a fake namespace object
  10599. /******/ // mode & 1: value is a module id, require it
  10600. /******/ // mode & 2: merge all properties of value into the ns
  10601. /******/ // mode & 4: return value when already ns object
  10602. /******/ // mode & 16: return value when it's Promise-like
  10603. /******/ // mode & 8|1: behave like require
  10604. /******/ __webpack_require__.t = function(value, mode) {
  10605. /******/ if(mode & 1) value = this(value);
  10606. /******/ if(mode & 8) return value;
  10607. /******/ if(typeof value === 'object' && value) {
  10608. /******/ if((mode & 4) && value.__esModule) return value;
  10609. /******/ if((mode & 16) && typeof value.then === 'function') return value;
  10610. /******/ }
  10611. /******/ var ns = Object.create(null);
  10612. /******/ __webpack_require__.r(ns);
  10613. /******/ var def = {};
  10614. /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
  10615. /******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
  10616. /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
  10617. /******/ }
  10618. /******/ def['default'] = () => (value);
  10619. /******/ __webpack_require__.d(ns, def);
  10620. /******/ return ns;
  10621. /******/ };
  10622. /******/ })();
  10623. /******/
  10624. /******/ /* webpack/runtime/define property getters */
  10625. /******/ (() => {
  10626. /******/ // define getter functions for harmony exports
  10627. /******/ __webpack_require__.d = (exports, definition) => {
  10628. /******/ for(var key in definition) {
  10629. /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  10630. /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  10631. /******/ }
  10632. /******/ }
  10633. /******/ };
  10634. /******/ })();
  10635. /******/
  10636. /******/ /* webpack/runtime/hasOwnProperty shorthand */
  10637. /******/ (() => {
  10638. /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  10639. /******/ })();
  10640. /******/
  10641. /******/ /* webpack/runtime/make namespace object */
  10642. /******/ (() => {
  10643. /******/ // define __esModule on exports
  10644. /******/ __webpack_require__.r = (exports) => {
  10645. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  10646. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  10647. /******/ }
  10648. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  10649. /******/ };
  10650. /******/ })();
  10651. /******/
  10652. /******/ /* webpack/runtime/publicPath */
  10653. /******/ (() => {
  10654. /******/ __webpack_require__.p = "/";
  10655. /******/ })();
  10656. /******/
  10657. /******/ /* webpack/runtime/jsonp chunk loading */
  10658. /******/ (() => {
  10659. /******/ __webpack_require__.b = document.baseURI || self.location.href;
  10660. /******/
  10661. /******/ // object to store loaded and loading chunks
  10662. /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
  10663. /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
  10664. /******/ var installedChunks = {
  10665. /******/ "main": 0
  10666. /******/ };
  10667. /******/
  10668. /******/ // no chunk on demand loading
  10669. /******/
  10670. /******/ // no prefetching
  10671. /******/
  10672. /******/ // no preloaded
  10673. /******/
  10674. /******/ // no HMR
  10675. /******/
  10676. /******/ // no HMR manifest
  10677. /******/
  10678. /******/ // no on chunks loaded
  10679. /******/
  10680. /******/ // no jsonp function
  10681. /******/ })();
  10682. /******/
  10683. /******/ /* webpack/runtime/nonce */
  10684. /******/ (() => {
  10685. /******/ __webpack_require__.nc = undefined;
  10686. /******/ })();
  10687. /******/
  10688. /************************************************************************/
  10689. var __webpack_exports__ = {};
  10690. // This entry need to be wrapped in an IIFE because it need to be in strict mode.
  10691. (() => {
  10692. "use strict";
  10693. var exports = __webpack_exports__;
  10694. /*!**********************!*\
  10695. !*** ./src/index.ts ***!
  10696. \**********************/
  10697. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10698. exports.Login = exports.Router = exports.ModalHeader = exports.ModalFooter = exports.ModalContent = exports.Modal = exports.Preloader = exports.Progress = exports.SideNavUser = exports.SideNavEl = exports.SideNav = exports.Navigation = exports.NavBarBrand = exports.NavBarItem = exports.NavBarGroup = exports.NavBar = exports.CardAction = exports.CardTitle = exports.CardContent = exports.Card = exports.CollapsBody = exports.Collapsible = exports.CollapsTrigger = exports.Parallax = exports.Divider = exports.Overlay = exports.Col = exports.Row = exports.Icon = exports.Chip = exports.Badge = exports.Button = exports.CollectionItem = exports.Collection = exports.Field = exports.Textarea = void 0;
  10699. __webpack_require__(/*! ./sass/d3v4pp.scss */ "./src/sass/d3v4pp.scss");
  10700. var Textarea_1 = __webpack_require__(/*! ./cmps/forms/Textarea */ "./src/cmps/forms/Textarea.tsx");
  10701. Object.defineProperty(exports, "Textarea", ({ enumerable: true, get: function () { return Textarea_1.TextareaAutosize; } }));
  10702. var Field_1 = __webpack_require__(/*! ./cmps/forms/Field */ "./src/cmps/forms/Field.tsx");
  10703. Object.defineProperty(exports, "Field", ({ enumerable: true, get: function () { return Field_1.Field; } }));
  10704. var Collection_1 = __webpack_require__(/*! ./cmps/collections/Collection */ "./src/cmps/collections/Collection.tsx");
  10705. Object.defineProperty(exports, "Collection", ({ enumerable: true, get: function () { return Collection_1.Collection; } }));
  10706. Object.defineProperty(exports, "CollectionItem", ({ enumerable: true, get: function () { return Collection_1.CollectionItem; } }));
  10707. var Button_1 = __webpack_require__(/*! ./cmps/button/Button */ "./src/cmps/button/Button.tsx");
  10708. Object.defineProperty(exports, "Button", ({ enumerable: true, get: function () { return Button_1.Button; } }));
  10709. var Badge_1 = __webpack_require__(/*! ./cmps/badge/Badge */ "./src/cmps/badge/Badge.tsx");
  10710. Object.defineProperty(exports, "Badge", ({ enumerable: true, get: function () { return Badge_1.Badge; } }));
  10711. var Chip_1 = __webpack_require__(/*! ./cmps/chip/Chip */ "./src/cmps/chip/Chip.tsx");
  10712. Object.defineProperty(exports, "Chip", ({ enumerable: true, get: function () { return Chip_1.Chip; } }));
  10713. var Icon_1 = __webpack_require__(/*! ./cmps/icons/Icon */ "./src/cmps/icons/Icon.tsx");
  10714. Object.defineProperty(exports, "Icon", ({ enumerable: true, get: function () { return Icon_1.Icon; } }));
  10715. var Layouts_1 = __webpack_require__(/*! ./cmps/layouts/Layouts */ "./src/cmps/layouts/Layouts.tsx");
  10716. Object.defineProperty(exports, "Row", ({ enumerable: true, get: function () { return Layouts_1.Row; } }));
  10717. Object.defineProperty(exports, "Col", ({ enumerable: true, get: function () { return Layouts_1.Col; } }));
  10718. Object.defineProperty(exports, "Overlay", ({ enumerable: true, get: function () { return Layouts_1.Overlay; } }));
  10719. Object.defineProperty(exports, "Divider", ({ enumerable: true, get: function () { return Layouts_1.Divider; } }));
  10720. Object.defineProperty(exports, "Parallax", ({ enumerable: true, get: function () { return Layouts_1.Parallax; } }));
  10721. var Collapsible_1 = __webpack_require__(/*! ./cmps/collapsible/Collapsible */ "./src/cmps/collapsible/Collapsible.tsx");
  10722. Object.defineProperty(exports, "CollapsTrigger", ({ enumerable: true, get: function () { return Collapsible_1.CollapsTrigger; } }));
  10723. Object.defineProperty(exports, "Collapsible", ({ enumerable: true, get: function () { return Collapsible_1.Collapsible; } }));
  10724. Object.defineProperty(exports, "CollapsBody", ({ enumerable: true, get: function () { return Collapsible_1.CollapsBody; } }));
  10725. var Card_1 = __webpack_require__(/*! ./cmps/card/Card */ "./src/cmps/card/Card.tsx");
  10726. Object.defineProperty(exports, "Card", ({ enumerable: true, get: function () { return Card_1.Card; } }));
  10727. Object.defineProperty(exports, "CardContent", ({ enumerable: true, get: function () { return Card_1.CardContent; } }));
  10728. Object.defineProperty(exports, "CardTitle", ({ enumerable: true, get: function () { return Card_1.CardTitle; } }));
  10729. Object.defineProperty(exports, "CardAction", ({ enumerable: true, get: function () { return Card_1.CardAction; } }));
  10730. var NavBar_1 = __webpack_require__(/*! ./cmps/navigation/NavBar */ "./src/cmps/navigation/NavBar.tsx");
  10731. Object.defineProperty(exports, "NavBar", ({ enumerable: true, get: function () { return NavBar_1.NavBar; } }));
  10732. Object.defineProperty(exports, "NavBarGroup", ({ enumerable: true, get: function () { return NavBar_1.NavBarGroup; } }));
  10733. Object.defineProperty(exports, "NavBarItem", ({ enumerable: true, get: function () { return NavBar_1.NavBarItem; } }));
  10734. Object.defineProperty(exports, "NavBarBrand", ({ enumerable: true, get: function () { return NavBar_1.NavBarBrand; } }));
  10735. var Navigation_1 = __webpack_require__(/*! ./cmps/navigation/Navigation */ "./src/cmps/navigation/Navigation.tsx");
  10736. Object.defineProperty(exports, "Navigation", ({ enumerable: true, get: function () { return Navigation_1.Navigation; } }));
  10737. var SideNav_1 = __webpack_require__(/*! ./cmps/navigation/SideNav */ "./src/cmps/navigation/SideNav.tsx");
  10738. Object.defineProperty(exports, "SideNav", ({ enumerable: true, get: function () { return SideNav_1.SideNav; } }));
  10739. Object.defineProperty(exports, "SideNavEl", ({ enumerable: true, get: function () { return SideNav_1.SideNavEl; } }));
  10740. Object.defineProperty(exports, "SideNavUser", ({ enumerable: true, get: function () { return SideNav_1.SideNavUser; } }));
  10741. var Progress_1 = __webpack_require__(/*! ./cmps/progress/Progress */ "./src/cmps/progress/Progress.tsx");
  10742. Object.defineProperty(exports, "Progress", ({ enumerable: true, get: function () { return Progress_1.Progress; } }));
  10743. Object.defineProperty(exports, "Preloader", ({ enumerable: true, get: function () { return Progress_1.Preloader; } }));
  10744. var Modal_1 = __webpack_require__(/*! ./cmps/modal/Modal */ "./src/cmps/modal/Modal.tsx");
  10745. Object.defineProperty(exports, "Modal", ({ enumerable: true, get: function () { return Modal_1.Modal; } }));
  10746. Object.defineProperty(exports, "ModalContent", ({ enumerable: true, get: function () { return Modal_1.ModalContent; } }));
  10747. Object.defineProperty(exports, "ModalFooter", ({ enumerable: true, get: function () { return Modal_1.ModalFooter; } }));
  10748. Object.defineProperty(exports, "ModalHeader", ({ enumerable: true, get: function () { return Modal_1.ModalHeader; } }));
  10749. exports.Router = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
  10750. ////////ux
  10751. var ux_1 = __webpack_require__(/*! ./ux */ "./src/ux/index.ts");
  10752. Object.defineProperty(exports, "Login", ({ enumerable: true, get: function () { return ux_1.Login; } }));
  10753. })();
  10754. /******/ return __webpack_exports__;
  10755. /******/ })()
  10756. ;
  10757. });
  10758. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyx3QkFBd0I7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQzs7QUFFakM7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBLE9BQU87O0FBRVA7QUFDQSxNQUFNO0FBQ04seUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isd0NBQXdDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNGQUFzRjtBQUN0Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvRUFBb0U7QUFDcEU7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sR0FBRzs7QUFFVix3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBLFVBQVUsSUFBSTtBQUNkLE9BQU87QUFDUDs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLE1BQU0sSUFBSTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsZ0NBQWdDO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJO0FBQ1osS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxnSUFBZ0k7QUFDaEksb0VBQW9FOztBQUVwRTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekMsMEJBQTBCO0FBQzFCO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkRBQTJEOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUlBQXFJOztBQUVySTtBQUNBO0FBQ0E7QUFDQSxrTUFBa007O0FBRWxNO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUEsdUVBQXVFOztBQUV2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjOztBQUVkO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQSx5R0FBeUc7O0FBRXpHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUhBQXlIOztBQUV6SDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBLE9BQU8sR0FBRztBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLGlEQUFpRDtBQUNqRCxNQUFNO0FBQ04sb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRztBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksMEZBQTBGOztBQUU5RixzQkFBc0IscUNBQXFDO0FBQzNEO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQSxtQ0FBbUMsUUFBUTtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQix3QkFBd0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBLEVBQUU7O0FBRTJpQjtBQUM3aUI7Ozs7Ozs7Ozs7O0FDbHhHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQTBDO0FBQy9DLEVBQUUsaUNBQU8sQ0FBQyxNQUFRLEVBQUUsT0FBUyxDQUFDLG9DQUFFLE9BQU87QUFBQTtBQUFBO0FBQUEsa0dBQUM7QUFDeEMsR0FBRyxLQUFLLFlBUU47QUFDRixDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0ZBQWdGOztBQUVoRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7O0FDL1JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFCQTtBQUM2RztBQUNqQjtBQUNPO0FBQ25HLDRDQUE0Qyw0SkFBd0Q7QUFDcEcsNENBQTRDLGdLQUEwRDtBQUN0Ryw0Q0FBNEMsOEpBQXlEO0FBQ3JHLDRDQUE0Qyw0SkFBd0Q7QUFDcEcsOEJBQThCLG1GQUEyQixDQUFDLDRGQUFxQztBQUMvRixzR0FBc0c7QUFDdEcseUNBQXlDLHNGQUErQjtBQUN4RSx5Q0FBeUMsc0ZBQStCO0FBQ3hFLHlDQUF5QyxzRkFBK0I7QUFDeEUseUNBQXlDLHNGQUErQjtBQUN4RTtBQUNBLDZEQUE2RCxjQUFjLDRCQUE0Qix1QkFBdUIscUJBQXFCLHlEQUF5RCxtTkFBbU4sR0FBRyxtREFBbUQsd0NBQXdDLHdCQUF3Qix1QkFBdUIsb0JBQW9CLG1CQUFtQiwyQkFBMkIseUJBQXlCLDBCQUEwQix3QkFBd0Isc0JBQXNCLG1CQUFtQix3Q0FBd0MsdUNBQXVDLHVDQUF1Qyw0Q0FBNEMsMkNBQTJDLHlDQUF5QyxvQ0FBb0MsdUJBQXVCLEdBQUcsV0FBVyx5Q0FBeUMsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsK0JBQStCLHlDQUF5QyxHQUFHLGtCQUFrQix5Q0FBeUMsR0FBRyw0QkFBNEIsOEJBQThCLEdBQUcsNENBQTRDLHlDQUF5QyxHQUFHLGlCQUFpQix5Q0FBeUMsR0FBRywyQkFBMkIsOEJBQThCLEdBQUcsMkNBQTJDLHlDQUF5QyxHQUFHLGtCQUFrQix5Q0FBeUMsR0FBRyw0QkFBNEIsOEJBQThCLEdBQUcsNENBQTRDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLGNBQWMseUNBQXlDLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdDQUF3Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxVQUFVLHlDQUF5QyxHQUFHLGVBQWUsOEJBQThCLEdBQUcsOEJBQThCLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyw2QkFBNkIsOEJBQThCLEdBQUcsNkNBQTZDLHlDQUF5QyxHQUFHLFdBQVcseUNBQXlDLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLCtCQUErQix5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxhQUFhLHlDQUF5QyxHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxpQ0FBaUMseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsa0JBQWtCLHlDQUF5QyxHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxzQ0FBc0MseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsaUNBQWlDLHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLFdBQVcseUNBQXlDLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLCtCQUErQix5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxpQkFBaUIseUNBQXlDLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHFDQUFxQyx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4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a0IseUNBQXlDLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHNDQUFzQyx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsaUNBQWlDLHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLFlBQVkseUNBQXlDLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGdDQUFnQyx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxhQUFhLHlDQUF5QyxHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxpQ0FBaUMseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsa0JBQWtCLHlDQUF5QyxHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxzQ0FBc0MseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlD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QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLHdCQUF3QixrQkFBa0IsS0FBSyx3QkFBd0IsaUJBQWlCLEtBQUssR0FBRyw4Q0FBOEMsa0JBQWtCLDJCQUEyQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsa0JBQWtCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUsseUJBQXlCLGlDQUFpQyxLQUFLLHVCQUF1QiwyQkFBMkIsS0FBSyx1QkFBdUIsMEJBQTBCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLHdCQUF3QixrQkFBa0IsS0FBSyx3QkFBd0IsaUJBQWlCLEtBQUssR0FBRywrQ0FBK0MsbUJBQW1CLDJCQUEyQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssb0JBQW9CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG9CQUFvQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxvQkFBb0Isa0JBQWtCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssMEJBQTBCLGlDQUFpQyxLQUFLLHdCQUF3QiwyQkFBMkIsS0FBSyx3QkFBd0IsMEJBQTBCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHVCQUF1QixLQUFLLHdCQUF3QixpQkFBaUIsS0FBSyx3QkFBd0IsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHVCQUF1QixLQUFLLHdCQUF3QixpQkFBaUIsS0FBSyx3QkFBd0IsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIs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V0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxRQUFRLE1BQU0sV0FBVyxRQUFRLE1BQU0sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLFVBQVUsS0FBSyxNQUFNLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEscUJBQXFCLFFBQVEsYUFBYSxLQUFLLFdBQVcscUJBQXFCLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUscUJBQXFCLFFBQVEsT0FBTyxVQUFVLHFCQUFxQixRQUFRLGFBQWEsTUFBTSxXQUFXLHFCQUFxQixRQUFRLFFBQVEsV0FBVyxxQkFBcUIsUUFBUSxhQUFhLEtBQUssV0FBVyxxQkFBcUIsV0FBVyxXQUFXLFdBQVcsUUFBUSxVQUFVLHFCQUFxQixRQUFRLE9BQU8sVUFBVSxRQUFRLE9BQU8sVUFBVSxRQUFRLFVBQVUscUJBQXFCLFFBQVEsWUFBWSxxQkFBcUIsUUFBUSxpQkFBaUIscUJBQXFCLFFBQVEsT0FBTyxxQkFBcUIsUUFBUSxRQUFRLHFCQUFxQixRQUFRLFFBQVEsV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsWUFBWSxPQUFPLHFCQUFxQixRQUFRLGFBQWEsS0FBSyxXQUFXLFVBQVUsUUFBUSxPQUFPLHFCQUFxQixxQkFBcUIscUJBQXFCLHFCQUFxQixVQUFVLFdBQVcsc0JBQXNCLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFFBQVEsUUFBUSxxQkFBcUIsV0FBVyxXQUFXLHFCQUFxQixXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxPQUFPLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxVQUFVLE9BQU8sT0FBTyxVQUFVLFVBQVUsUUFBUSxhQUFhLEtBQUssVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxVQUFVLFFBQVEsT0FBTyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxVQUFVLFFBQVEsWUFBWSxLQUFLLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxVQUFVLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUsV0FBVyxVQUFVLFFBQVEsT0FBTyxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsYUFBYSxLQUFLLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxhQUFhLEtBQUssV0FBVyxRQUFRLGFBQWEsS0FBSyxXQUFXLFFBQVEsYUFBYSxLQUFLLFdBQVcsUUFBUSxhQUFhLEtBQUssV0FBVyxRQUFRLGFBQWEsS0FBSyxXQUFXLFFBQVEsT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLFFBQVEsYUFBYSxLQUFLLEtBQUssV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxPQUFPLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFFBQVEsT0FBTyxVQUFVLFFBQVEsYUFBYSxLQUFLLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxPQUFPLE9BQU8sTUFBTSxXQUFXLE9BQU8sS0FBSyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxRQUFRLE9BQU8sVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxXQUFXLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsUUFBUSxTQUFTLFVBQVUsVUFBVSxRQUFRLE9BQU8sVUFBVSxVQUFVLFdBQVcsUUFBUSxPQUFPLHFCQUFxQixxQkFBcUIsc0JBQXNCLHNCQUFzQixzQkFBc0IsV0FBVyxLQUFLLE1BQU0sUUFBUSxPQUFPLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxZQUFZLFdBQVcsUUFBUSxPQUFPLFVBQVUsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxhQUFhLGVBQWUsYUFBYSxVQUFVLFdBQVcsT0FBTyxPQUFPLGFBQWEsUUFBUSxPQUFPLFdBQVcsV0FBVyxXQUFXLE9BQU8sUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxhQUFhLGFBQWEsV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxZQUFZLFNBQVMsT0FBTyxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLFFBQVEsTUFBTSxLQUFLLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sUUFBUSxNQUFNLEtBQUssV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxVQUFVLFdBQVcsWUFBWSxZQUFZLFlBQVksUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsYUFBYSxZQUFZLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxVQUFVLFdBQVcsT0FBTyxPQUFPLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLE9BQU8sVUFBVSxXQUFXLFdBQVcsWUFBWSxZQUFZLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxZQUFZLFVBQVUsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVUsV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsYUFBYSxhQUFhLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxPQUFPLFFBQVEsVUFBVSxPQUFPLFFBQVEsV0FBVyxVQUFVLFdBQVcsVUFBVSxVQUFVLE9BQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxVQUFVLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxhQUFhLGVBQWUsYUFBYSxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLE9BQU8sUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxZQUFZLFlBQVksV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sVUFBVSxXQUFXLFNBQVMsT0FBTyxZQUFZLFFBQVEsT0FBTyxVQUFVLGFBQWEsU0FBUyxPQUFPLGFBQWEsY0FBYyxTQUFTLFFBQVEsTUFBTSxXQUFXLEtBQUssWUFBWSxTQUFTLGNBQWMsaUJBQWlCLFdBQVcsVUFBVSxZQUFZLFlBQVksVUFBVSxVQUFVLFVBQVUsWUFBWSxjQUFjLFlBQVksWUFBWSxXQUFXLFdBQVcsUUFBUSxnQ0FBZ0MsYUFBYSxlQUFlLFFBQVEsZ0NBQWdDLGFBQWEsUUFBUSxvQkFBb0IsV0FBVyxXQUFXLFFBQVEsb0JBQW9CLFdBQVcsUUFBUSxvQkFBb0IsV0FBVyxRQUFRLG9CQUFvQixXQUFXLE9BQU8sb0JBQW9CLFVBQVUsUUFBUSxjQUFjLDZCQUE2QixXQUFXLFdBQVcsU0FBUyxnQ0FBZ0MsYUFBYSxhQUFhLFNBQVMsd0RBQXdELFdBQVcsV0FBVyxXQUFXLFNBQVMsZ0NBQWdDLFdBQVcsV0FBVyxTQUFTLGdDQUFnQyxXQUFXLFdBQVcsUUFBUSxvQkFBb0IsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsV0FBVyxTQUFTLFFBQVEsWUFBWSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFFBQVEsU0FBUyxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsU0FBUyxXQUFXLFFBQVEsUUFBUSxZQUFZLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsWUFBWSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsYUFBYSxXQUFXLFVBQVUsV0FBVyxRQUFRLFFBQVEsWUFBWSxTQUFTLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxNQUFNLGNBQWMsS0FBSyxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxZQUFZLFdBQVcsV0FBVyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFlBQVksU0FBUyxhQUFhLEtBQUssVUFBVSxXQUFXLFlBQVksUUFBUSxRQUFRLFdBQVcsc0JBQXNCLHNCQUFzQixVQUFVLFlBQVksWUFBWSxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsc0JBQXNCLHNCQUFzQixXQUFXLFVBQVUsVUFBVSxTQUFTLGNBQWMsS0FBSyxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsY0FBYyxLQUFLLFdBQVcsU0FBUyxRQUFRLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxTQUFTLFNBQVMsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsU0FBUyxTQUFTLFVBQVUsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFNBQVMsY0FBYyxVQUFVLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxRQUFRLFdBQVcsU0FBUyxjQUFjLEtBQUssV0FBVyxTQUFTLFVBQVUsWUFBWSxRQUFRLFNBQVMsYUFBYSxTQUFTLFFBQVEsV0FBVyxTQUFTLGNBQWMsS0FBSyxXQUFXLFNBQVMsY0FBYyxLQUFLLFdBQVcsU0FBUyxjQUFjLEtBQUssV0FBVyxTQUFTLFFBQVEsVUFBVSxhQUFhLFNBQVMsY0FBYyxNQUFNLFdBQVcsYUFBYSxTQUFTLFFBQVEsYUFBYSxTQUFTLFFBQVEsYUFBYSxTQUFTLFFBQVEsYUFBYSxlQUFlLFNBQVMsUUFBUSxNQUFNLFdBQVcsTUFBTSxXQUFXLFVBQVUsV0FBVyxTQUFTLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxhQUFhLFFBQVEsUUFBUSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFNBQVMsY0FBYyxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFFBQVEsU0FBUyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFdBQVcsWUFBWSxXQUFXLFFBQVEsUUFBUSxXQUFXLGFBQWEsYUFBYSxRQUFRLFFBQVEsV0FBVyxZQUFZLGFBQWEsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxhQUFhLGVBQWUsU0FBUyxRQUFRLE1BQU0sTUFBTSxXQUFXLFdBQVcsU0FBUyxRQUFRLFVBQVUsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxhQUFhLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxZQUFZLFNBQVMsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsYUFBYSxjQUFjLFlBQVksV0FBVyxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsYUFBYSxhQUFhLFNBQVMsU0FBUyxXQUFXLFdBQVcsU0FBUyxTQUFTLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxXQUFXLFNBQVMsU0FBUyxZQUFZLFNBQVMsUUFBUSxNQUFNLEtBQUssVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFFBQVEsYUFBYSxZQUFZLFdBQVcsYUFBYSxhQUFhLFlBQVksUUFBUSxRQUFRLFdBQVcsU0FBUyxRQUFRLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxhQUFhLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxZQUFZLFNBQVMsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFFBQVEsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFlBQVksV0FBVyxTQUFTLFFBQVEsYUFBYSxTQUFTLFVBQVUsYUFBYSxhQUFhLFNBQVMsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFFBQVEsUUFBUSxhQUFhLFNBQVMsUUFBUSxXQUFXLFVBQVUsV0FBVyxTQUFTLFFBQVEsWUFBWSxVQUFVLFFBQVEsV0FBVyxVQUFVLFNBQVMsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFNBQVMsUUFBUSxNQUFNLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFNBQVMsUUFBUSxVQUFVLFdBQVcsYUFBYSxPQUFPLFFBQVEsVUFBVSxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsU0FBUyxRQUFRLE1BQU0sS0FBSyxXQUFXLFNBQVMsU0FBUyxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxZQUFZLFlBQVksVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFVBQVUsV0FBVyxhQUFhLGFBQWEsV0FBVyxhQUFhLGFBQWEsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFlBQVksWUFBWSxVQUFVLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxZQUFZLFNBQVMsUUFBUSxXQUFXLFdBQVcsU0FBUyxRQUFRLFdBQVcsU0FBUyxRQUFRLFdBQVcsWUFBWSxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFNBQVMsUUFBUSxVQUFVLFVBQVUsWUFBWSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsV0FBVyxXQUFXLFlBQVksWUFBWSxZQUFZLFdBQVcsV0FBVyxVQUFVLFdBQVcsU0FBUyxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFdBQVcsU0FBUyxRQUFRLFVBQVUsV0FBVyxVQUFVLFNBQVMsUUFBUSxLQUFLLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsS0FBSyxRQUFRLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLEtBQUssV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxLQUFLLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsTUFBTSxRQUFRLFVBQVUsWUFBWSxZQUFZLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLGNBQWMsYUFBYSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLGNBQWMsYUFBYSxhQUFhLGNBQWMsYUFBYSxpQkFBaUIsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsYUFBYSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsY0FBYyxRQUFRLFNBQVMsVUFBVSxhQUFhLGlCQUFpQixjQUFjLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsYUFBYSxjQUFjLGNBQWMsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFNBQVMsWUFBWSxhQUFhLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxVQUFVLFdBQVcsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFNBQVMsYUFBYSxRQUFRLFNBQVMsWUFBWSxTQUFTLFFBQVEsVUFBVSxTQUFTLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsU0FBUyxRQUFRLFdBQVcsV0FBVyxTQUFTLFNBQVMsWUFBWSxlQUFlLGFBQWEsWUFBWSxlQUFlLGNBQWMsYUFBYSxXQUFXLFdBQVcsU0FBUyxzQkFBc0IsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFFBQVEsc0JBQXNCLFdBQVcsV0FBVyxTQUFTLFlBQVksYUFBYSxhQUFhLFFBQVEsWUFBWSxjQUFjLGNBQWMsU0FBUyxTQUFTLFdBQVcsU0FBUyxRQUFRLFdBQVcsYUFBYSxpQkFBaUIsY0FBYyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsY0FBYyxTQUFTLFFBQVEsWUFBWSxhQUFhLGNBQWMsV0FBVyxVQUFVLGFBQWEsZ0JBQWdCLGlCQUFpQixhQUFhLGNBQWMsaUJBQWlCLGNBQWMsVUFBVSxXQUFXLFFBQVEsUUFBUSxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxhQUFhLGdCQUFnQixhQUFhLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxjQUFjLFFBQVEsUUFBUSxhQUFhLGdCQUFnQixRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsY0FBYyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsYUFBYSxpQkFBaUIsaUJBQWlCLFNBQVMsUUFBUSxZQUFZLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsWUFBWSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLGFBQWEsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsY0FBYyxTQUFTLFFBQVEsV0FBVyxXQUFXLGFBQWEsYUFBYSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsVUFBVSxTQUFTLFFBQVEsYUFBYSxpQkFBaUIsZ0JBQWdCLGFBQWEsUUFBUSxRQUFRLGNBQWMsU0FBUyxRQUFRLGFBQWEsaUJBQWlCLGdCQUFnQixRQUFRLFFBQVEsY0FBYyxTQUFTLFFBQVEsVUFBVSxTQUFTLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFlBQVksV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLHFCQUFxQixxQkFBcUIsV0FBVyxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLE1BQU0sUUFBUSxXQUFXLFlBQVksYUFBYSxXQUFXLGFBQWEsU0FBUyxRQUFRLFdBQVcsV0FBVyxhQUFhLGFBQWEsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsWUFBWSxhQUFhLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxRQUFRLFlBQVksYUFBYSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksZUFBZSxhQUFhLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksYUFBYSxhQUFhLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxTQUFTLGVBQWUsS0FBSyxXQUFXLFdBQVcsV0FBVyxnQkFBZ0IsS0FBSyxLQUFLLFdBQVcsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxXQUFXLFFBQVEsS0FBSyxRQUFRLEtBQUssV0FBVyxRQUFRLEtBQUssUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLGNBQWMsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxtQkFBbUIsS0FBSyxLQUFLLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFdBQVcsV0FBVyxXQUFXLFNBQVMsWUFBWSxXQUFXLFVBQVUsV0FBVyxXQUFXLFNBQVMsUUFBUSxLQUFLLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsU0FBUyxRQUFRLEtBQUssV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixTQUFTLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssVUFBVSxLQUFLLEtBQUssV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLHNCQUFzQixXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxLQUFLLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsS0FBSyxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxLQUFLLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsS0FBSyxRQUFRLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsU0FBUyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxZQUFZLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsS0FBSyxRQUFRLGNBQWMsYUFBYSxVQUFVLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsYUFBYSxZQUFZLGNBQWMsY0FBYyxVQUFVLFdBQVcsUUFBUSxRQUFRLGNBQWMsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFlBQVksV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFVBQVUsV0FBVyxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxVQUFVLFVBQVUsVUFBVSxVQUFVLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUSxjQUFjLGdCQUFnQixZQUFZLGFBQWEsaUJBQWlCLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxVQUFVLFVBQVUsVUFBVSxhQUFhLGlCQUFpQixRQUFRLFFBQVEsV0FBVyxVQUFVLFFBQVEsUUFBUSxLQUFLLFdBQVcsU0FBUyxLQUFLLFFBQVEsVUFBVSxXQUFXLFVBQVUsYUFBYSxhQUFhLFFBQVEsUUFBUSxhQUFhLGlCQUFpQixRQUFRLFFBQVEsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsTUFBTSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsVUFBVSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxZQUFZLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdB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QXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLGFBQWEseUNBQXlDLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGlDQUFpQyx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsaUJBQWlCLHlDQUF5QyxHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxxQ0FBcUMseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsMEJBQTBCLHlDQUF5QyxHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRyxvREFBb0QseUNBQXlDLEdBQUcsV0FBVyx5Q0FBeUMsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsK0JBQStCLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLFdBQVcseUNBQXlDLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLCtCQUErQix5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxZQUFZLHlDQUF5QyxHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxnQ0FBZ0MseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsa0JBQWtCLHlDQUF5QyxHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxzQ0FBc0MseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsV0FBVyx5Q0FBeUMsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsK0JBQStCLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRywrQkFBK0IsOEJBQThCLEdBQUcsK0NBQStDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLG9CQUFvQix5Q0FBeUMsR0FBRyw4QkFBOEIsOEJBQThCLEdBQUcsOENBQThDLHlDQUF5QyxHQUFHLGFBQWEseUNBQXlDLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGlDQUFpQyx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxZQUFZLHlDQUF5QyxHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxnQ0FBZ0MseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsaUNBQWlDLHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLGtCQUFrQix5Q0FBeUMsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsc0NBQXNDLHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLFlBQVkseUNBQXlDLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGdDQUFnQyx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxnQkFBZ0IseUNBQXlDLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLG9DQUFvQyx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRyx5QkFBeUIseUNBQXlDLEdBQUcsbUNBQW1DLDhCQUE4QixHQUFHLG1EQUFtRCx5Q0FBeUMsR0FBRyx5QkFBeUIseUNBQXlDLEdBQUcsbUNBQW1DLDhCQUE4QixHQUFHLG1EQUFtRCx5Q0FBeUMsR0FBRyx5QkFBeUIseUNBQXlDLEdBQUcsbUNBQW1DLDhCQUE4QixHQUFHLG1EQUFtRCx5Q0FBeUMsR0FBRyx5QkFBeUIseUNBQXlDLEdBQUcsbUNBQW1DLDhCQUE4QixHQUFHLG1EQUFtRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsWUFBWSx5Q0FBeUMsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsWUFBWSx5Q0FBeUMsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsa0JBQWtCLDZDQUE2QyxHQUFHLHVCQUF1QixrQ0FBa0MsR0FBRyw0TEFBNEwsaUJBQWlCLHFCQUFxQiwrRUFBK0UscUJBQXFCLHNDQUFzQyxxQkFBcUIseUJBQXlCLHVCQUF1QixzQkFBc0IscUJBQXFCLHFCQUFxQixtQkFBbUIsZ0JBQWdCLDBCQUEwQix1QkFBdUIsc0JBQXNCLGtCQUFrQixHQUFHLGdFQUFnRSxtQ0FBbUMsZ0JBQWdCLDhDQUE4Qyx5QkFBeUIsNENBQTRDLHVEQUF1RCxvQkFBb0IsbUJBQW1CLGlCQUFpQixHQUFHLDJDQUEyQyx1REFBdUQsZ0JBQWdCLHNDQUFzQyxzREFBc0QsZ0JBQWdCLGtNQUFrTSxzQkFBc0IsMkNBQTJDLGdCQUFnQixpSkFBaUosc0JBQXNCLDJDQUEyQyxnQkFBZ0IsMkRBQTJELHlCQUF5Qiw2Q0FBNkMsOERBQThELGlDQUFpQyx3QkFBd0IsR0FBRyxvRUFBb0UsK0JBQStCLGdCQUFnQix3QkFBd0IsaUJBQWlCLEdBQUcsZ0JBQWdCLGlCQUFpQixHQUFHLGtFQUFrRSxpQ0FBaUMsZ0JBQWdCLDJHQUEyRyxpQ0FBaUMsZ0JBQWdCLGdOQUFnTixpQ0FBaUMsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsZ0JBQWdCLHFDQUFxQyxpQ0FBaUMsZ0JBQWdCLG9DQUFvQyxzQkFBc0IsR0FBRyxtQkFBbUIsdUJBQXVCLEdBQUcsbUJBQW1CLGlCQUFpQixHQUFHLG9CQUFvQiwyQkFBMkIsdUJBQXVCLEdBQUcseUhBQXlILGlDQUFpQyxnQkFBZ0IsaUdBQWlHLHVCQUF1QixlQUFlLEdBQUcscUJBQXFCLDJDQUEyQyw4R0FBOEcsK0RBQStELDREQUE0RCx5QkFBeUIseUJBQXlCLHdCQUF3Qix5REFBeUQseUJBQXlCLHVCQUF1QixhQUFhLHFCQUFxQixlQUFlLEdBQUcsOERBQThELDZDQUE2QyxzQ0FBc0MsNEJBQTRCLGlDQUFpQywyQ0FBMkMsa0NBQWtDLGdCQUFnQixtQkFBbUIscUJBQXFCLHVCQUF1Qix1QkFBdUIsc0JBQXNCLGVBQWUsMEJBQTBCLEdBQUcscUNBQXFDLGtCQUFrQiw0QkFBNEIsY0FBYyxHQUFHLGFBQWEsd0NBQXdDLG9CQUFvQixpQkFBaUIsc0JBQXNCLHdCQUF3QixrQkFBa0IsdUJBQXVCLHNCQUFzQix1Q0FBdUMsR0FBRyxpQkFBaUIsbUJBQW1CLGtCQUFrQix1QkFBdUIsR0FBRyxXQUFXLGdCQUFnQixrQkFBa0Isd0JBQXdCLHVCQUF1QixpQkFBaUIsR0FBRyxXQUFXLGlCQUFpQix3QkFBd0Isa0JBQWtCLHVCQUF1QixjQUFjLHNCQUFzQixnQkFBZ0IscUJBQXFCLEdBQUcsMEJBQTBCLG1DQUFtQyxtQkFBbUIsR0FBRywwQkFBMEIsb0JBQW9CLG1CQUFtQixHQUFHLCtDQUErQyxnQkFBZ0IsaUJBQWlCLHdCQUF3QixtQkFBbUIsdUJBQXVCLHNCQUFzQixHQUFHLGdCQUFnQixpQkFBaUIsaUJBQWlCLHdCQUF3Qix1QkFBdUIsY0FBYyxvQkFBb0IsR0FBRyxjQUFjLHNCQUFzQixnQkFBZ0Isd0JBQXdCLGtCQUFrQix1QkFBdUIsY0FBYyxnQkFBZ0IsR0FBRywrQkFBK0IsZ0JBQWdCLGlCQUFpQix1QkFBdUIsaUJBQWlCLHFCQUFxQixpQkFBaUIsR0FBRyxZQUFZLHdCQUF3QixHQUFHLGVBQWUsd0JBQXdCLEdBQUcsZUFBZSx3QkFBd0IsR0FBRyxhQUFhLGtCQUFrQixHQUFHLGVBQWUsaUJBQWlCLFdBQVcsR0FBRyxZQUFZLGdCQUFnQixzQkFBc0Isa0JBQWtCLEdBQUcsdUJBQXVCLHNCQUFzQixvQkFBb0Isa0JBQWtCLHVCQUF1QixnQkFBZ0IscUJBQXFCLHNCQUFzQixlQUFlLHVCQUF1Qix1QkFBdUIsZ0NBQWdDLHFCQUFxQixZQUFZLFdBQVcseUJBQXlCLHVCQUF1Qiw4QkFBOEIsR0FBRyxlQUFlLHVCQUF1QixlQUFlLGdCQUFnQixnQkFBZ0IsK0JBQStCLDhCQUE4QixnQkFBZ0IsNkJBQTZCLHVCQUF1QixHQUFHLGVBQWUsZ0NBQWdDLEdBQUcsbUpBQW1KLG9IQUFvSCxHQUFHLHlGQUF5RixvSEFBb0gsR0FBRyw0Q0FBNEMscUhBQXFILEdBQUcsNkNBQTZDLDBIQUEwSCxHQUFHLHFDQUFxQyw0SEFBNEgsR0FBRyw2Q0FBNkMsNkhBQTZILEdBQUcsNENBQTRDLDhHQUE4RyxHQUFHLGdCQUFnQixpQ0FBaUMsR0FBRyxvQkFBb0Isa0ZBQWtGLEdBQUcsb09BQW9PLHVCQUF1QixvQkFBb0IsMEJBQTBCLHFCQUFxQixzQkFBc0IsNkNBQTZDLDJCQUEyQixlQUFlLDhCQUE4QixHQUFHLCtCQUErQix1QkFBdUIsdUJBQXVCLGdCQUFnQixpQkFBaUIsc0JBQXNCLHVCQUF1QixlQUFlLG1DQUFtQyxrQ0FBa0MsNENBQTRDLHdCQUF3Qix5QkFBeUIsR0FBRywyQ0FBMkMsZ0RBQWdELEdBQUcseUNBQXlDLDZDQUE2QyxHQUFHLDRDQUE0Qyw4Q0FBOEMsR0FBRyw0Q0FBNEMsNkNBQTZDLEdBQUcsNENBQTRDLDhDQUE4QyxHQUFHLDJDQUEyQyw2Q0FBNkMsR0FBRywwQ0FBMEMsNkNBQTZDLEdBQUcsdUdBQXVHLGNBQWMsdUJBQXVCLHVCQUF1Qiw0QkFBNEIscUJBQXFCLEdBQUcscUJBQXFCLHVCQUF1QixnQkFBZ0IsR0FBRyx5QkFBeUIsZ0NBQWdDLEdBQUcsbUJBQW1CLDZCQUE2QixnRkFBZ0YsR0FBRywwQkFBMEIseUJBQXlCLDJCQUEyQixHQUFHLDRDQUE0Qyx1QkFBdUIsV0FBVyxZQUFZLGVBQWUsR0FBRyxtQkFBbUIsdUJBQXVCLGlCQUFpQixrQkFBa0IsdUJBQXVCLHVCQUF1Qiw2QkFBNkIsR0FBRyxrQkFBa0IsbUJBQW1CLEdBQUcsd0VBQXdFLGdCQUFnQixHQUFHLFlBQVksb0JBQW9CLFlBQVksYUFBYSw4QkFBOEIsZUFBZSxvQkFBb0IsZUFBZSxpQkFBaUIscUJBQXFCLHVCQUF1Qiw4QkFBOEIsR0FBRyxnQkFBZ0Isa0JBQWtCLEdBQUcsOENBQThDLFlBQVksaUJBQWlCLEtBQUssR0FBRyw4Q0FBOEMsa0JBQWtCLEdBQUcseUJBQXlCLGtCQUFrQixHQUFHLHVCQUF1QixvQkFBb0IsR0FBRyx3QkFBd0IsK0JBQStCLDhCQUE4QixxQkFBcUIsaUJBQWlCLGdCQUFnQixzQkFBc0IsR0FBRywrSEFBK0gsa0JBQWtCLEdBQUcsd0JBQXdCLCtCQUErQiw4QkFBOEIscUJBQXFCLGlCQUFpQixnQkFBZ0Isc0JBQXNCLEdBQUcsK0hBQStILGtCQUFrQixHQUFHLG9CQUFvQixvQkFBb0IsaUJBQWlCLGNBQWMsWUFBWSxjQUFjLGFBQWEsaUJBQWlCLGdCQUFnQixxQkFBcUIsa0JBQWtCLHlCQUF5QixHQUFHLCtCQUErQixlQUFlLGdCQUFnQixHQUFHLDRDQUE0Qyx1QkFBdUIsOEJBQThCLHFCQUFxQixnQkFBZ0IscUJBQXFCLEdBQUcsMkNBQTJDLDZDQUE2Qyx1QkFBdUIsY0FBYyxHQUFHLHlCQUF5QixjQUFjLGtCQUFrQixjQUFjLGdCQUFnQixvQkFBb0IscUJBQXFCLGlDQUFpQyxHQUFHLHlCQUF5QixjQUFjLGlCQUFpQixHQUFHLE9BQU8sY0FBYyxlQUFlLDJCQUEyQixHQUFHLGVBQWUsaUNBQWlDLCtDQUErQywwQ0FBMEMsZ0RBQWdELHdEQUF3RCxrREFBa0QsNkhBQTZILDhCQUE4QixvQkFBb0IsMEJBQTBCLEdBQUcsaUNBQWlDLDBCQUEwQixHQUFHLE9BQU8sbUJBQW1CLDBCQUEwQiw2Q0FBNkMsR0FBRyxZQUFZLGdCQUFnQixHQUFHLGtCQUFrQixzQkFBc0IsR0FBRyxtQkFBbUIsdUJBQXVCLEdBQUcsZUFBZSxrQkFBa0Isd0JBQXdCLEdBQUcsVUFBVSx3QkFBd0IsR0FBRyxpQkFBaUIsZ0RBQWdELDhCQUE4Qix1QkFBdUIscUJBQXFCLHVCQUF1QixHQUFHLGdDQUFnQywyQkFBMkIsd0JBQXdCLHVCQUF1QixjQUFjLHFDQUFxQyxHQUFHLDRDQUE0QywyQkFBMkIsR0FBRyx1Q0FBdUMscUJBQXFCLHVCQUF1Qix1QkFBdUIsR0FBRyw0SUFBNEksdUJBQXVCLGdCQUFnQixpQkFBaUIscUJBQXFCLGVBQWUsMEJBQTBCLDJCQUEyQixHQUFHLGdEQUFnRCxvQkFBb0Isc0JBQXNCLGdCQUFnQiwyQkFBMkIsdUJBQXVCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLHlDQUF5QyxjQUFjLEdBQUcsMERBQTBELHVCQUF1QixjQUFjLGdCQUFnQixHQUFHLDJDQUEyQyx3QkFBd0IsR0FBRyx1Q0FBdUMsOEJBQThCLG1CQUFtQixHQUFHLDBEQUEwRCxnQkFBZ0IsR0FBRyxpQ0FBaUMsbUJBQW1CLHNCQUFzQixtQkFBbUIsR0FBRyxvREFBb0QsMkJBQTJCLEdBQUcsOENBQThDLDJCQUEyQixxQ0FBcUMsdUJBQXVCLEdBQUcsNENBQTRDLHVCQUF1QixHQUFHLG1EQUFtRCx1QkFBdUIsR0FBRyx3QkFBd0IsaUJBQWlCLG1CQUFtQixHQUFHLDhCQUE4QixjQUFjLGlCQUFpQixHQUFHLG9CQUFvQixvQkFBb0IsV0FBVyxZQUFZLGFBQWEsa0JBQWtCLGlCQUFpQiwyQkFBMkIseUNBQXlDLGlCQUFpQixrQkFBa0IsNEJBQTRCLEdBQUcsNkJBQTZCLHFCQUFxQixHQUFHLGtDQUFrQyxxQkFBcUIsR0FBRyx3SEFBd0gsa0RBQWtELCtCQUErQixLQUFLLEdBQUcsZ0RBQWdELDJCQUEyQiwrQkFBK0IsS0FBSyxHQUFHLGdEQUFnRCx5QkFBeUIsK0JBQStCLEtBQUssR0FBRyxzRUFBc0UsdUJBQXVCLCtCQUErQixLQUFLLEdBQUcsZ0RBQWdELHlCQUF5QiwrQkFBK0IsS0FBSyxHQUFHLGlEQUFpRCwrQkFBK0IsK0JBQStCLEtBQUssR0FBRyxpREFBaUQsMEJBQTBCLGdDQUFnQyxLQUFLLEdBQUcsZ0RBQWdELG9CQUFvQixnQ0FBZ0MsS0FBSyxHQUFHLHNFQUFzRSxxQkFBcUIsZ0NBQWdDLEtBQUssR0FBRyxnREFBZ0Qsb0JBQW9CLGdDQUFnQyxLQUFLLEdBQUcsZ0RBQWdELDRCQUE0QixnQ0FBZ0MsS0FBSyxHQUFHLGdEQUFnRCw4QkFBOEIsZ0NBQWdDLEtBQUssR0FBRyxnREFBZ0QsMkJBQTJCLHlCQUF5QixLQUFLLEdBQUcsMEVBQTBFLDZCQUE2QixHQUFHLGlCQUFpQixxQkFBcUIsR0FBRyxrQkFBa0Isc0JBQXNCLEdBQUcsNEJBQTRCLHVCQUF1QixHQUFHLFdBQVcsMkJBQTJCLEdBQUcsWUFBWSw0QkFBNEIsR0FBRyxnQkFBZ0Isc0JBQXNCLEdBQUcsYUFBYSx1QkFBdUIsR0FBRyxtQkFBbUIsbUJBQW1CLHNCQUFzQix1QkFBdUIsR0FBRyxlQUFlLG1CQUFtQix3QkFBd0IscUJBQXFCLDRCQUE0QixHQUFHLGlCQUFpQiwwQkFBMEIsR0FBRyxnQkFBZ0Isb0JBQW9CLG1CQUFtQixzQkFBc0IsdUJBQXVCLG9CQUFvQixzQkFBc0IsaUJBQWlCLG1CQUFtQixpQkFBaUIsMkJBQTJCLEdBQUcsa0JBQWtCLHFCQUFxQixzQkFBc0IsZ0JBQWdCLDhCQUE4Qix1QkFBdUIsR0FBRyx3QkFBd0Isc0JBQXNCLEdBQUcseUNBQXlDLDRDQUE0QyxHQUFHLHlCQUF5QiwwQkFBMEIsZ0JBQWdCLHFCQUFxQixzQkFBc0IsaUJBQWlCLGlDQUFpQyxHQUFHLGlDQUFpQyxxQ0FBcUMsR0FBRyw2QkFBNkIsc0JBQXNCLEdBQUcseUJBQXlCLHVCQUF1QixHQUFHLHNCQUFzQiwwQkFBMEIsZ0JBQWdCLHNCQUFzQixHQUFHLFdBQVcsMEJBQTBCLGlCQUFpQixvQkFBb0IscUJBQXFCLDhCQUE4QixzQkFBc0Isb0JBQW9CLHdCQUF3Qiw4QkFBOEIsdUJBQXVCLHNCQUFzQixHQUFHLGVBQWUsa0JBQWtCLDhCQUE4QixnQkFBZ0IsR0FBRyxlQUFlLGdCQUFnQiwwQkFBMEIsaUJBQWlCLGdCQUFnQix1QkFBdUIsR0FBRyxnQkFBZ0Isb0JBQW9CLGlCQUFpQixvQkFBb0Isc0JBQXNCLHNCQUFzQixHQUFHLFlBQVksaUJBQWlCLHFDQUFxQyxxQkFBcUIsc0JBQXNCLHFCQUFxQixrQkFBa0IseUJBQXlCLEdBQUcsZ0JBQWdCLHFDQUFxQyxrQ0FBa0MsR0FBRyxnQkFBZ0IsaUJBQWlCLEdBQUcsaUJBQWlCLHFCQUFxQixjQUFjLDhCQUE4QiwwQkFBMEIsb0JBQW9CLGlCQUFpQixzQkFBc0IsZUFBZSxjQUFjLDBCQUEwQiw0QkFBNEIsR0FBRyx1QkFBdUIseUJBQXlCLGdDQUFnQyxHQUFHLGdDQUFnQyxrQkFBa0IscUJBQXFCLEdBQUcsc0JBQXNCLHNCQUFzQixlQUFlLDZCQUE2QixHQUFHLDBCQUEwQixzQkFBc0IsaUNBQWlDLEdBQUcsa0JBQWtCLCtCQUErQixpQ0FBaUMsZ0NBQWdDLGdEQUFnRCxHQUFHLHlCQUF5QixrQkFBa0Isb0JBQW9CLDZDQUE2QyxxQkFBcUIsa0JBQWtCLDJCQUEyQixrQ0FBa0MsR0FBRyw2QkFBNkIsZUFBZSxHQUFHLHlCQUF5QixnQkFBZ0Isc0JBQXNCLDBCQUEwQix1QkFBdUIsdUJBQXVCLEdBQUcsaURBQWlELDJCQUEyQixHQUFHLHVCQUF1QixrQkFBa0Isa0NBQWtDLDJCQUEyQixrQkFBa0IsR0FBRyx5REFBeUQsaUJBQWlCLHFCQUFxQixHQUFHLDZEQUE2RCxlQUFlLEdBQUcscUVBQXFFLGtDQUFrQyxpQkFBaUIseUJBQXlCLG9CQUFvQixvQkFBb0IsR0FBRyxpRkFBaUYsMENBQTBDLEdBQUcseUVBQXlFLHlCQUF5QixHQUFHLGlFQUFpRSxjQUFjLDJCQUEyQixHQUFHLDJFQUEyRSw2QkFBNkIsR0FBRyx5QkFBeUIsaUJBQWlCLHFCQUFxQixHQUFHLDRCQUE0QixrRkFBa0YsbUJBQW1CLGtFQUFrRSxHQUFHLG1DQUFtQyxtRkFBbUYsbUJBQW1CLEdBQUcsaUJBQWlCLGdEQUFnRCw4QkFBOEIsdUJBQXVCLHFCQUFxQix1QkFBdUIsR0FBRyxnQ0FBZ0MsMkJBQTJCLHdCQUF3Qix1QkFBdUIsY0FBYyxxQ0FBcUMsR0FBRyx1Q0FBdUMscUJBQXFCLHVCQUF1Qix1QkFBdUIsR0FBRyw0SUFBNEksdUJBQXVCLGdCQUFnQixpQkFBaUIscUJBQXFCLGVBQWUsMEJBQTBCLDJCQUEyQixHQUFHLGdEQUFnRCxvQkFBb0Isc0JBQXNCLGdCQUFnQiwyQkFBMkIsdUJBQXVCLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLHlDQUF5QyxjQUFjLEdBQUcsMERBQTBELHVCQUF1QixjQUFjLGdCQUFnQixHQUFHLDJDQUEyQyx3QkFBd0IsR0FBRyx1Q0FBdUMsOEJBQThCLG1CQUFtQixHQUFHLDBEQUEwRCxnQkFBZ0IsR0FBRyxpQ0FBaUMsbUJBQW1CLHNCQUFzQixtQkFBbUIsR0FBRyxvREFBb0QsMkJBQTJCLEdBQUcsOENBQThDLDJCQUEyQixxQ0FBcUMsdUJBQXVCLEdBQUcsNENBQTRDLHVCQUF1QixHQUFHLG1EQUFtRCx1QkFBdUIsR0FBRyxrQ0FBa0MsaUJBQWlCLG1CQUFtQixHQUFHLGtCQUFrQiwrQkFBK0IsR0FBRyxrQkFBa0Isa0JBQWtCLDhCQUE4QixHQUFHLFdBQVcsc0JBQXNCLG1CQUFtQixHQUFHLDBKQUEwSixtQkFBbUIsR0FBRyxzaEJBQXNoQixrQ0FBa0MsaUJBQWlCLHFDQUFxQyxxQkFBcUIsa0JBQWtCLGlCQUFpQixnQkFBZ0Isb0JBQW9CLHNCQUFzQixlQUFlLHFCQUFxQiw0QkFBNEIsNkNBQTZDLEdBQUcsNDJDQUE0MkMsK0JBQStCLGtEQUFrRCxHQUFHLDRqREFBNGpELCtCQUErQixHQUFHLCt4QkFBK3hCLHFDQUFxQyxrQ0FBa0MsR0FBRyx1NEJBQXU0QixtQkFBbUIsR0FBRyxxd0JBQXF3QixtQkFBbUIsR0FBRywreEJBQSt4QixtQkFBbUIsR0FBRyw4dEJBQTh0QixnQkFBZ0IsR0FBRyw2ekNBQTZ6QyxxQ0FBcUMsa0NBQWtDLEdBQUcsdzRDQUF3NEMscUNBQXFDLGtDQUFrQyxHQUFHLDhoSUFBOGhJLHVCQUF1QixzQkFBc0IseUJBQXlCLEdBQUcsMHpEQUEwekQsZ0NBQWdDLG1CQUFtQixHQUFHLGczREFBZzNELDhCQUE4QixtQkFBbUIsR0FBRyx3dEJBQXd0QixtQkFBbUIsa0JBQWtCLHVCQUF1QixjQUFjLFlBQVksZUFBZSwyREFBMkQsR0FBRyxrQkFBa0IsdUJBQXVCLHFCQUFxQix3QkFBd0IsR0FBRyx1QkFBdUIsMEJBQTBCLDJCQUEyQixxQkFBcUIsR0FBRyxvRUFBb0Usd0JBQXdCLEdBQUcsMEJBQTBCLGlCQUFpQixHQUFHLG1GQUFtRixvQ0FBb0MsR0FBRyx3QkFBd0IsbUJBQW1CLHVCQUF1QixXQUFXLFlBQVksb0JBQW9CLGlCQUFpQiw2REFBNkQsOEJBQThCLHdCQUF3QixnQ0FBZ0MsR0FBRyxnREFBZ0QsNENBQTRDLDBCQUEwQixHQUFHLDhOQUE4Tiw0Q0FBNEMsMEJBQTBCLEdBQUcsNkJBQTZCLHVCQUF1QixxQkFBcUIsbUJBQW1CLG9CQUFvQiwrQkFBK0IsR0FBRyxvQ0FBb0MsZUFBZSx1QkFBdUIsV0FBVyxZQUFZLEdBQUcsd0JBQXdCLHVCQUF1QixnQkFBZ0Isb0JBQW9CLDJCQUEyQixHQUFHLCtCQUErQixtQkFBbUIsR0FBRyxpT0FBaU8sc0JBQXNCLGVBQWUsNkJBQTZCLEdBQUcsZ0NBQWdDLHNCQUFzQixHQUFHLDhDQUE4QyxrQ0FBa0MsaUJBQWlCLCtCQUErQixLQUFLLEdBQUcsOENBQThDLGtDQUFrQyxpQkFBaUIsK0JBQStCLEtBQUssR0FBRyx5REFBeUQsbUJBQW1CLHlCQUF5QixzQ0FBc0MsR0FBRyxnREFBZ0Qsb0JBQW9CLHVCQUF1Qiw2QkFBNkIsY0FBYyxxQkFBcUIsR0FBRywrREFBK0QsMkJBQTJCLGNBQWMscUJBQXFCLGdCQUFnQixHQUFHLDZPQUE2TyxnQkFBZ0IsR0FBRyxpREFBaUQsb0JBQW9CLGVBQWUsR0FBRyw4R0FBOEcsdUJBQXVCLFdBQVcsZ0JBQWdCLHVCQUF1QixvQkFBb0Isb0JBQW9CLDJCQUEyQixHQUFHLDhCQUE4QixnQkFBZ0IsaUJBQWlCLGtDQUFrQyxHQUFHLHFCQUFxQix3QkFBd0Isd0JBQXdCLCtEQUErRCwyREFBMkQscUJBQXFCLDJCQUEyQixHQUFHLGdCQUFnQix1QkFBdUIsMEJBQTBCLDBCQUEwQiwrQkFBK0IsdUVBQXVFLGlFQUFpRSxXQUFXLGdCQUFnQixHQUFHLDZEQUE2RCxnQkFBZ0IsR0FBRyxnQ0FBZ0MscUJBQXFCLEdBQUcsaURBQWlELHFCQUFxQixHQUFHLDJKQUEySix1QkFBdUIsZUFBZSx5QkFBeUIsR0FBRyxxRUFBcUUsdUJBQXVCLHVCQUF1QixvQkFBb0IsMEJBQTBCLGlCQUFpQixzQkFBc0Isb0JBQW9CLDJCQUEyQixzQkFBc0IsR0FBRyw0REFBNEQsa0JBQWtCLHVCQUF1QixZQUFZLFdBQVcsZ0JBQWdCLGdCQUFnQixpQkFBaUIsZUFBZSwyQkFBMkIsR0FBRyxvUkFBb1IsdUJBQXVCLEdBQUcsd0ZBQXdGLDhCQUE4QixHQUFHLDZDQUE2Qyx3QkFBd0IsR0FBRyw4REFBOEQsa0NBQWtDLEdBQUcsa0lBQWtJLDhCQUE4QixHQUFHLG9GQUFvRiw4QkFBOEIsR0FBRyx1Q0FBdUMsMkJBQTJCLEdBQUcsc0VBQXNFLDBCQUEwQixHQUFHLG1FQUFtRSw4Q0FBOEMsR0FBRyx5RkFBeUYsMENBQTBDLEdBQUcseURBQXlELGlCQUFpQiwwQ0FBMEMsR0FBRywySEFBMkgsa0NBQWtDLHNDQUFzQyxHQUFHLGtDQUFrQywrQkFBK0IsR0FBRyx1REFBdUQsc0NBQXNDLEdBQUcsZ0RBQWdELDBDQUEwQywwQkFBMEIsR0FBRyw2TEFBNkwsdUJBQXVCLGVBQWUseUJBQXlCLEdBQUcscUJBQXFCLDRCQUE0QixzQ0FBc0MsdUJBQXVCLHVCQUF1QixvQkFBb0IsMEJBQTBCLGlCQUFpQixzQkFBc0Isb0JBQW9CLHNCQUFzQixHQUFHLHVHQUF1RyxrQkFBa0IsdUJBQXVCLFdBQVcsWUFBWSxnQkFBZ0IsaUJBQWlCLGVBQWUsOEJBQThCLHVCQUF1QixvQkFBb0IscUJBQXFCLEdBQUcsNERBQTRELGNBQWMsd0JBQXdCLEdBQUcsb0VBQW9FLGlCQUFpQiwwQ0FBMEMsR0FBRyx5REFBeUQsd0JBQXdCLGNBQWMsdUJBQXVCLDhDQUE4Qyx5Q0FBeUMsR0FBRyx1REFBdUQsY0FBYyxlQUFlLGdCQUFnQixpQkFBaUIsc0NBQXNDLHVDQUF1QyxvQ0FBb0MscUNBQXFDLDZCQUE2QixnQ0FBZ0MsZ0NBQWdDLEdBQUcsa0RBQWtELGdEQUFnRCxpREFBaUQsR0FBRywyRkFBMkYsZUFBZSxnQkFBZ0IsZ0JBQWdCLGlCQUFpQixxQkFBcUIsc0JBQXNCLG9DQUFvQyx3QkFBd0IsNkJBQTZCLGdDQUFnQyxnQ0FBZ0MsR0FBRyxvRUFBb0UsZ0RBQWdELGtDQUFrQyxHQUFHLHdEQUF3RCx1QkFBdUIsR0FBRyw0R0FBNEcsa0JBQWtCLFlBQVksdUJBQXVCLGlLQUFpSyxlQUFlLEdBQUcscUVBQXFFLGFBQWEsY0FBYyxrQ0FBa0MsY0FBYyxjQUFjLDhCQUE4QixnQ0FBZ0MsR0FBRyxvRUFBb0UsaUJBQWlCLGdCQUFnQixrQ0FBa0MsOEJBQThCLGFBQWEsZUFBZSxHQUFHLCtEQUErRCxXQUFXLGNBQWMsZUFBZSxpQkFBaUIsc0NBQXNDLHVDQUF1QyxpQ0FBaUMsa0NBQWtDLDhCQUE4QixnQ0FBZ0MsR0FBRyw4REFBOEQsV0FBVyxnQkFBZ0IsaUJBQWlCLDhCQUE4Qiw4QkFBOEIsZUFBZSxHQUFHLG1FQUFtRSx1QkFBdUIsMEJBQTBCLHlDQUF5QyxHQUFHLDJFQUEyRSx1QkFBdUIsOEJBQThCLDBCQUEwQixHQUFHLDhFQUE4RSxrQ0FBa0Msa0NBQWtDLEdBQUcsNkVBQTZFLDhCQUE4Qiw4QkFBOEIsR0FBRyx3RUFBd0Usa0NBQWtDLEdBQUcsdUVBQXVFLDhCQUE4QiwwQkFBMEIsR0FBRyxzSEFBc0gsNkNBQTZDLHNCQUFzQixHQUFHLG1CQUFtQixvQkFBb0IsR0FBRyx3Q0FBd0MsZUFBZSxhQUFhLGNBQWMsR0FBRyx1REFBdUQsOEJBQThCLEdBQUcseUhBQXlILGVBQWUsR0FBRyw2REFBNkQsOEJBQThCLEdBQUcsMEJBQTBCLGtCQUFrQiwwQkFBMEIsdUJBQXVCLGdCQUFnQixpQkFBaUIsMENBQTBDLHdCQUF3QixxQ0FBcUMsMkJBQTJCLG1CQUFtQixHQUFHLDJEQUEyRCxrQkFBa0IsdUJBQXVCLDBCQUEwQixnQkFBZ0IsaUJBQWlCLHVCQUF1QixZQUFZLGNBQWMsZ0dBQWdHLEdBQUcsK0JBQStCLCtDQUErQyxHQUFHLDhCQUE4Qiw4QkFBOEIsOEhBQThILEdBQUcscUpBQXFKLDBCQUEwQiwrQ0FBK0MsR0FBRyxvSUFBb0ksMEJBQTBCLDBDQUEwQyxHQUFHLHFEQUFxRCxvQkFBb0IsMENBQTBDLEdBQUcsdUlBQXVJLDhCQUE4QixHQUFHLCtHQUErRyxrQkFBa0IsR0FBRyw0QkFBNEIsbUJBQW1CLEdBQUcsWUFBWSwrQ0FBK0MsZ0JBQWdCLGlCQUFpQiw4QkFBOEIsdUJBQXVCLGlCQUFpQixHQUFHLG1CQUFtQix1QkFBdUIsR0FBRyxxQkFBcUIsdUJBQXVCLEdBQUcsa0VBQWtFLGdCQUFnQix5QkFBeUIsR0FBRyx5Q0FBeUMsdUJBQXVCLG9CQUFvQixrQ0FBa0MsaUJBQWlCLHFDQUFxQyxrQkFBa0IsaUJBQWlCLHNCQUFzQixnQkFBZ0Isb0JBQW9CLHNCQUFzQixlQUFlLG1CQUFtQixzQkFBc0IsZUFBZSxHQUFHLCtDQUErQyxxQ0FBcUMsR0FBRywwQkFBMEIsdUJBQXVCLGFBQWEsV0FBVyxjQUFjLG1CQUFtQixlQUFlLDhCQUE4QixHQUFHLDJCQUEyQix1QkFBdUIsZUFBZSxzQkFBc0IsR0FBRyxxQkFBcUIsK0JBQStCLEdBQUcsc0NBQXNDLCtCQUErQixHQUFHLG1DQUFtQyw4QkFBOEIsR0FBRyxvREFBb0QsK0JBQStCLG9CQUFvQixzQkFBc0IsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUdBQXVHLDhCQUE4QixrQ0FBa0MsR0FBRyxzRUFBc0UsMENBQTBDLEdBQUcsZ0RBQWdELDBDQUEwQyxHQUFHLGlEQUFpRCwwQ0FBMEMsR0FBRywrQkFBK0Isc0JBQXNCLGVBQWUsNkJBQTZCLEdBQUcscUJBQXFCLHNCQUFzQixHQUFHLDZCQUE2QixxQkFBcUIsaUJBQWlCLEdBQUcsa0RBQWtELDhCQUE4QixHQUFHLHVDQUF1Qyw4QkFBOEIsR0FBRyxxREFBcUQsdUJBQXVCLEdBQUcsa0hBQWtILHVCQUF1QixHQUFHLGtDQUFrQyxxQkFBcUIsdUJBQXVCLEdBQUcsK0JBQStCLGdCQUFnQixHQUFHLG9FQUFvRSxnQkFBZ0IsaUJBQWlCLHNCQUFzQixHQUFHLG9CQUFvQixvQkFBb0IsR0FBRyxnQ0FBZ0MsdUJBQXVCLFdBQVcsYUFBYSxZQUFZLGNBQWMsZ0JBQWdCLGNBQWMsZUFBZSxvQkFBb0Isb0JBQW9CLGVBQWUsNkJBQTZCLEdBQUcsNERBQTRELGtCQUFrQixHQUFHLDhHQUE4Ryx1QkFBdUIsR0FBRyxvREFBb0Qsb0JBQW9CLEdBQUcsdUJBQXVCLHVCQUF1QixrQ0FBa0MsaUJBQWlCLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGVBQWUsR0FBRywyQkFBMkIsa0JBQWtCLEdBQUcsZ0NBQWdDLHVCQUF1QixjQUFjLFlBQVksaUJBQWlCLGNBQWMsYUFBYSx1QkFBdUIsOEJBQThCLHFCQUFxQiw4QkFBOEIsOEJBQThCLEdBQUcscUNBQXFDLG1CQUFtQixnQkFBZ0IsdUJBQXVCLG1CQUFtQixpQkFBaUIsNkJBQTZCLEdBQUcscUNBQXFDLGlDQUFpQyxHQUFHLDRDQUE0QyxnQkFBZ0Isc0JBQXNCLG9CQUFvQixvQkFBb0IsR0FBRyx1QkFBdUIsNkJBQTZCLEdBQUcsc0RBQXNELGdCQUFnQix3QkFBd0IsaUJBQWlCLEdBQUcsNkNBQTZDLGlCQUFpQixpQkFBaUIsZ0JBQWdCLHVCQUF1Qix3QkFBd0IsZ0NBQWdDLDZCQUE2Qiw4QkFBOEIsOEJBQThCLHVCQUF1QixHQUFHLGtGQUFrRixvREFBb0QsR0FBRyx1QkFBdUIsaUZBQWlGLGlEQUFpRCx5Q0FBeUMsZ0JBQWdCLHdCQUF3QixpQkFBaUIsR0FBRyx5Q0FBeUMsY0FBYyxHQUFHLHlDQUF5QyxpQkFBaUIsaUJBQWlCLGdCQUFnQix1QkFBdUIsd0JBQXdCLGdDQUFnQyxxQkFBcUIsR0FBRyxzQ0FBc0MsNEJBQTRCLHlCQUF5QixHQUFHLDhFQUE4RSxvREFBb0QsR0FBRyxrQ0FBa0MsZ0JBQWdCLDRCQUE0Qiw4QkFBOEIsd0JBQXdCLHdEQUF3RCxHQUFHLHVDQUF1QyxxQkFBcUIsR0FBRyx1Q0FBdUMscUJBQXFCLEdBQUcsa0NBQWtDLGlCQUFpQixpQkFBaUIsZ0JBQWdCLHVCQUF1Qix3QkFBd0IsZ0NBQWdDLEdBQUcsdUVBQXVFLG9EQUFvRCxHQUFHLGVBQWUscURBQXFELCtFQUErRSxnQ0FBZ0MsaUNBQWlDLDJCQUEyQixHQUFHLE9BQU8sMkJBQTJCLEdBQUcsVUFBVSw0QkFBNEIsR0FBRyxZQUFZLGlCQUFpQixrQkFBa0IsMkJBQTJCLGlCQUFpQix1QkFBdUIsR0FBRyxXQUFXLGlCQUFpQixrQkFBa0IsdUJBQXVCLGlDQUFpQyxrQ0FBa0MsNkJBQTZCLEdBQUcsc0JBQXNCLCtDQUErQyxHQUFHLHNCQUFzQixpREFBaUQsR0FBRyxxQkFBcUIsa0RBQWtELEdBQUcscUJBQXFCLGdEQUFnRCxHQUFHLG9CQUFvQixpREFBaUQsR0FBRyx1QkFBdUIsZ0RBQWdELEdBQUcsaUJBQWlCLHVCQUF1QixpQkFBaUIsa0JBQWtCLDRCQUE0Qix1QkFBdUIsb0JBQW9CLHNCQUFzQixpQkFBaUIsdUJBQXVCLEdBQUcsd0JBQXdCLDJDQUEyQyxHQUFHLHdCQUF3Qiw0Q0FBNEMsR0FBRyx1QkFBdUIsNkNBQTZDLEdBQUcsdUJBQXVCLDZDQUE2QyxHQUFHLHNCQUFzQiw2Q0FBNkMsR0FBRyx5QkFBeUIsNkNBQTZDLEdBQUcsd0JBQXdCLCtDQUErQyxHQUFHLHdCQUF3QixnREFBZ0QsR0FBRyx1QkFBdUIsaURBQWlELEdBQUcsdUJBQXVCLGlEQUFpRCxHQUFHLHNCQUFzQixnREFBZ0QsR0FBRyx5QkFBeUIsaURBQWlELEdBQUcsV0FBVyx1QkFBdUIsR0FBRyxnQkFBZ0IsbUJBQW1CLHNCQUFzQixlQUFlLEdBQUcsZ0RBQWdELGdCQUFnQixpQkFBaUIsS0FBSyxHQUFHLDhDQUE4QyxnQkFBZ0IsaUJBQWlCLEtBQUssR0FBRyxhQUFhLHlCQUF5QiwwQkFBMEIsR0FBRyxjQUFjLHNCQUFzQix5QkFBeUIsR0FBRyxtQkFBbUIsZUFBZSxHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsbUJBQW1CLEdBQUcsVUFBVSxzQkFBc0IsdUJBQXVCLHdCQUF3QixHQUFHLGNBQWMsa0JBQWtCLG1CQUFtQixnQkFBZ0IsR0FBRyxhQUFhLGdCQUFnQiwyQkFBMkIsc0JBQXNCLG9CQUFvQixHQUFHLG9EQUFvRCx1QkFBdUIsR0FBRyxnQkFBZ0IseUJBQXlCLHNCQUFzQixlQUFlLGdCQUFnQixHQUFHLGdCQUFnQiwwQkFBMEIsc0JBQXNCLGVBQWUsZ0JBQWdCLEdBQUcsZ0JBQWdCLGVBQWUsc0JBQXNCLGVBQWUsZ0JBQWdCLEdBQUcsZ0JBQWdCLDBCQUEwQixzQkFBc0IsZUFBZSxnQkFBZ0IsR0FBRyxnQkFBZ0IsMEJBQTBCLHNCQUFzQixlQUFlLGdCQUFnQixHQUFHLGdCQUFnQixlQUFlLHNCQUFzQixlQUFlLGdCQUFnQixHQUFHLGdCQUFnQiwwQkFBMEIsc0JBQXNCLGVBQWUsZ0JBQWdCLEdBQUcsZ0JBQWdCLDBCQUEwQixzQkFBc0IsZUFBZSxnQkFBZ0IsR0FBRyxnQkFBZ0IsZUFBZSxzQkFBc0IsZUFBZSxnQkFBZ0IsR0FBRyxpQkFBaUIsMEJBQTBCLHNCQUFzQixlQUFlLGdCQUFnQixHQUFHLGlCQUFpQiwwQkFBMEIsc0JBQXNCLGVBQWUsZ0JBQWdCLEdBQUcsaUJBQWlCLGdCQUFnQixzQkFBc0IsZUFBZSxnQkFBZ0IsR0FBRyx1QkFBdUIsK0JBQStCLEdBQUcscUJBQXFCLHlCQUF5QixHQUFHLHFCQUFxQix3QkFBd0IsR0FBRyx1QkFBdUIsZ0NBQWdDLEdBQUcscUJBQXFCLDBCQUEwQixHQUFHLHFCQUFxQix5QkFBeUIsR0FBRyx1QkFBdUIscUJBQXFCLEdBQUcscUJBQXFCLGVBQWUsR0FBRyxxQkFBcUIsY0FBYyxHQUFHLHVCQUF1QixnQ0FBZ0MsR0FBRyxxQkFBcUIsMEJBQTBCLEdBQUcscUJBQXFCLHlCQUF5QixHQUFHLHVCQUF1QixnQ0FBZ0MsR0FBRyxxQkFBcUIsMEJBQTBCLEdBQUcscUJBQXFCLHlCQUF5QixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyxxQkFBcUIsZUFBZSxHQUFHLHFCQUFxQixjQUFjLEdBQUcsdUJBQXVCLGdDQUFnQyxHQUFHLHFCQUFxQiwwQkFBMEIsR0FBRyxxQkFBcUIseUJBQXlCLEdBQUcsdUJBQXVCLGdDQUFnQyxHQUFHLHFCQUFxQiwwQkFBMEIsR0FBRyxxQkFBcUIseUJBQXlCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHFCQUFxQixlQUFlLEdBQUcscUJBQXFCLGNBQWMsR0FBRyx3QkFBd0IsZ0NBQWdDLEdBQUcsc0JBQXNCLDBCQUEwQixHQUFHLHNCQUFzQix5QkFBeUIsR0FBRyx3QkFBd0IsZ0NBQWdDLEdBQUcsc0JBQXNCLDBCQUEwQixHQUFHLHNCQUFzQix5QkFBeUIsR0FBRyx3QkFBd0Isc0JBQXNCLEdBQUcsc0JBQXNCLGdCQUFnQixHQUFHLHNCQUFzQixlQUFlLEdBQUcsOENBQThDLGtCQUFrQiwyQkFBMkIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLGtCQUFrQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLHlCQUF5QixpQ0FBaUMsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUssdUJBQXVCLDBCQUEwQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFLLDBCQUEwQix3QkFBd0IsS0FBSyx3QkFBd0Isa0JBQWtCLEtBQUssd0JBQXdCLGlCQUFpQixLQUFLLEdBQUcsOENBQThDLGtCQUFrQiwyQkFBMkIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLGtCQUFrQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLHlCQUF5QixpQ0FBaUMsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUssdUJBQXVCLDBCQUEwQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFL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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxTQUFTLEtBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0RBQW9EOztBQUVwRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFlBQVksY0FBYztBQUMxQjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwySEFBMkg7QUFDM0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvRUFBb0U7O0FBRXBFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FB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QUFDO0FBQ3BILCtDQUE4QyxFQUFFLHFDQUFxQyxnQ0FBZ0MsRUFBQztBQUN0SCxtQkFBbUIsbUJBQU8sQ0FBQywwRUFBOEI7QUFDekQsOENBQTZDLEVBQUUscUNBQXFDLG1DQUFtQyxFQUFDO0FBQ3hILGdCQUFnQixtQkFBTyxDQUFDLG9FQUEyQjtBQUNuRCwyQ0FBMEMsRUFBRSxxQ0FBcUMsNkJBQTZCLEVBQUM7QUFDL0csNkNBQTRDLEVBQUUscUNBQXFDLCtCQUErQixFQUFDO0FBQ25ILCtDQUE4QyxFQUFFLHFDQUFxQyxpQ0FBaUMsRUFBQztBQUN2SCxpQkFBaUIsbUJBQU8sQ0FBQyxrRUFBMEI7QUFDbkQsNENBQTJDLEVBQUUscUNBQXFDLCtCQUErQixFQUFDO0FBQ2xILDZDQUE0QyxFQUFFLHFDQUFxQyxnQ0FBZ0MsRUFBQztBQUNwSCxjQUFjLG1CQUFPLENBQUMsc0RBQW9CO0FBQzFDLHlDQUF3QyxFQUFFLHFDQUFxQyx5QkFBeUIsRUFBQztBQUN6RyxnREFBK0MsRUFBRSxxQ0FBcUMsZ0NBQWdDLEVBQUM7QUFDdkgsK0NBQThDLEVBQUUscUNBQXFDLCtCQUErQixFQUFDO0FBQ3JILCtDQUE4QyxFQUFFLHFDQUFxQywrQkFBK0IsRUFBQztBQUNySCw2R0FBNEM7QUFDNUM7QUFDQSxXQUFXLG1CQUFPLENBQUMsK0JBQU07QUFDekIseUNBQXdDLEVBQUUscUNBQXFDLHNCQUFzQixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvQHJlbWl4LXJ1bi9yb3V0ZXIvZGlzdC9yb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL2F1dG9zaXplL2Rpc3QvYXV0b3NpemUuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL2NvbXB1dGVkLXN0eWxlL2Rpc3QvY29tcHV0ZWRTdHlsZS5jb21tb25qcy5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvc2Fzcy9kM3Y0cHAuc2NzcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci1kb20vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvcmVhY3Qtcm91dGVyL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL3Nhc3MvZDN2NHBwLnNjc3M/NTQ1OCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2JhZGdlL0JhZGdlLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9idXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9idXR0b24vV2F2ZXMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvY2FyZC9DYXJkLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9jaGlwL0NoaXAudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2NvbGxhcHNpYmxlL0NvbGxhcHNpYmxlLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9jb2xsZWN0aW9ucy9Db2xsZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9mb3Jtcy9GaWVsZC50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvZm9ybXMvVGV4dGFyZWEudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2Zvcm1zL2xpbmUtaGVpZ2h0LnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9mb3Jtcy9yZXgudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2ljb25zL0ljb24udHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2xheW91dHMvTGF5b3V0cy50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvbW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL25hdmlnYXRpb24vTmF2QmFyLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9uYXZpZ2F0aW9uL05hdmlnYXRpb24udHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL25hdmlnYXRpb24vU2lkZU5hdi50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvcHJvZ3Jlc3MvUHJvZ3Jlc3MudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy91eC9hdXRoL0xvZ2luLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvdXgvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL3J1bnRpbWUvbm9uY2UiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImQzdjRwcFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJkM3Y0cHBcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCAoKSA9PiB7XG5yZXR1cm4gIiwiLyoqXG4gKiBAcmVtaXgtcnVuL3JvdXRlciB2MS4wLjNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIFR5cGVzIGFuZCBDb25zdGFudHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQWN0aW9ucyByZXByZXNlbnQgdGhlIHR5cGUgb2YgY2hhbmdlIHRvIGEgbG9jYXRpb24gdmFsdWUuXG4gKi9cbnZhciBBY3Rpb247XG5cbihmdW5jdGlvbiAoQWN0aW9uKSB7XG4gIC8qKlxuICAgKiBBIFBPUCBpbmRpY2F0ZXMgYSBjaGFuZ2UgdG8gYW4gYXJiaXRyYXJ5IGluZGV4IGluIHRoZSBoaXN0b3J5IHN0YWNrLCBzdWNoXG4gICAqIGFzIGEgYmFjayBvciBmb3J3YXJkIG5hdmlnYXRpb24uIEl0IGRvZXMgbm90IGRlc2NyaWJlIHRoZSBkaXJlY3Rpb24gb2YgdGhlXG4gICAqIG5hdmlnYXRpb24sIG9ubHkgdGhhdCB0aGUgY3VycmVudCBpbmRleCBjaGFuZ2VkLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgbmV3bHkgY3JlYXRlZCBoaXN0b3J5IG9iamVjdHMuXG4gICAqL1xuICBBY3Rpb25bXCJQb3BcIl0gPSBcIlBPUFwiO1xuICAvKipcbiAgICogQSBQVVNIIGluZGljYXRlcyBhIG5ldyBlbnRyeSBiZWluZyBhZGRlZCB0byB0aGUgaGlzdG9yeSBzdGFjaywgc3VjaCBhcyB3aGVuXG4gICAqIGEgbGluayBpcyBjbGlja2VkIGFuZCBhIG5ldyBwYWdlIGxvYWRzLiBXaGVuIHRoaXMgaGFwcGVucywgYWxsIHN1YnNlcXVlbnRcbiAgICogZW50cmllcyBpbiB0aGUgc3RhY2sgYXJlIGxvc3QuXG4gICAqL1xuXG4gIEFjdGlvbltcIlB1c2hcIl0gPSBcIlBVU0hcIjtcbiAgLyoqXG4gICAqIEEgUkVQTEFDRSBpbmRpY2F0ZXMgdGhlIGVudHJ5IGF0IHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBoaXN0b3J5IHN0YWNrXG4gICAqIGJlaW5nIHJlcGxhY2VkIGJ5IGEgbmV3IG9uZS5cbiAgICovXG5cbiAgQWN0aW9uW1wiUmVwbGFjZVwiXSA9IFwiUkVQTEFDRVwiO1xufSkoQWN0aW9uIHx8IChBY3Rpb24gPSB7fSkpO1xuXG5jb25zdCBQb3BTdGF0ZUV2ZW50VHlwZSA9IFwicG9wc3RhdGVcIjtcbi8qKlxuICogTWVtb3J5IGhpc3Rvcnkgc3RvcmVzIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIG1lbW9yeS4gSXQgaXMgZGVzaWduZWQgZm9yIHVzZVxuICogaW4gc3RhdGVmdWwgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzIGxpa2UgdGVzdHMgYW5kIFJlYWN0IE5hdGl2ZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVNZW1vcnlIaXN0b3J5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGxldCB7XG4gICAgaW5pdGlhbEVudHJpZXMgPSBbXCIvXCJdLFxuICAgIGluaXRpYWxJbmRleCxcbiAgICB2NUNvbXBhdCA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgZW50cmllczsgLy8gRGVjbGFyZSBzbyB3ZSBjYW4gYWNjZXNzIGZyb20gY3JlYXRlTWVtb3J5TG9jYXRpb25cblxuICBlbnRyaWVzID0gaW5pdGlhbEVudHJpZXMubWFwKChlbnRyeSwgaW5kZXgpID0+IGNyZWF0ZU1lbW9yeUxvY2F0aW9uKGVudHJ5LCB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgPyBudWxsIDogZW50cnkuc3RhdGUsIGluZGV4ID09PSAwID8gXCJkZWZhdWx0XCIgOiB1bmRlZmluZWQpKTtcbiAgbGV0IGluZGV4ID0gY2xhbXBJbmRleChpbml0aWFsSW5kZXggPT0gbnVsbCA/IGVudHJpZXMubGVuZ3RoIC0gMSA6IGluaXRpYWxJbmRleCk7XG4gIGxldCBhY3Rpb24gPSBBY3Rpb24uUG9wO1xuICBsZXQgbGlzdGVuZXIgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGNsYW1wSW5kZXgobikge1xuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChuLCAwKSwgZW50cmllcy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gZW50cmllc1tpbmRleF07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVNZW1vcnlMb2NhdGlvbih0bywgc3RhdGUsIGtleSkge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oZW50cmllcyA/IGdldEN1cnJlbnRMb2NhdGlvbigpLnBhdGhuYW1lIDogXCIvXCIsIHRvLCBzdGF0ZSwga2V5KTtcbiAgICB3YXJuaW5nJDEobG9jYXRpb24ucGF0aG5hbWUuY2hhckF0KDApID09PSBcIi9cIiwgXCJyZWxhdGl2ZSBwYXRobmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbWVtb3J5IGhpc3Rvcnk6IFwiICsgSlNPTi5zdHJpbmdpZnkodG8pKTtcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IHtcbiAgICBnZXQgaW5kZXgoKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfSxcblxuICAgIGdldCBhY3Rpb24oKSB7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgfSxcblxuICAgIGNyZWF0ZUhyZWYodG8pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pO1xuICAgIH0sXG5cbiAgICBlbmNvZGVMb2NhdGlvbihsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgIH0sXG5cbiAgICBwdXNoKHRvLCBzdGF0ZSkge1xuICAgICAgYWN0aW9uID0gQWN0aW9uLlB1c2g7XG4gICAgICBsZXQgbmV4dExvY2F0aW9uID0gY3JlYXRlTWVtb3J5TG9jYXRpb24odG8sIHN0YXRlKTtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgZW50cmllcy5sZW5ndGgsIG5leHRMb2NhdGlvbik7XG5cbiAgICAgIGlmICh2NUNvbXBhdCAmJiBsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGxvY2F0aW9uOiBuZXh0TG9jYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2UodG8sIHN0YXRlKSB7XG4gICAgICBhY3Rpb24gPSBBY3Rpb24uUmVwbGFjZTtcbiAgICAgIGxldCBuZXh0TG9jYXRpb24gPSBjcmVhdGVNZW1vcnlMb2NhdGlvbih0bywgc3RhdGUpO1xuICAgICAgZW50cmllc1tpbmRleF0gPSBuZXh0TG9jYXRpb247XG5cbiAgICAgIGlmICh2NUNvbXBhdCAmJiBsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGxvY2F0aW9uOiBuZXh0TG9jYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdvKGRlbHRhKSB7XG4gICAgICBhY3Rpb24gPSBBY3Rpb24uUG9wO1xuICAgICAgaW5kZXggPSBjbGFtcEluZGV4KGluZGV4ICsgZGVsdGEpO1xuXG4gICAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogZ2V0Q3VycmVudExvY2F0aW9uKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGxpc3Rlbihmbikge1xuICAgICAgbGlzdGVuZXIgPSBmbjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBoaXN0b3J5O1xufVxuLyoqXG4gKiBCcm93c2VyIGhpc3Rvcnkgc3RvcmVzIHRoZSBsb2NhdGlvbiBpbiByZWd1bGFyIFVSTHMuIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGZvclxuICogbW9zdCB3ZWIgYXBwcywgYnV0IGl0IHJlcXVpcmVzIHNvbWUgY29uZmlndXJhdGlvbiBvbiB0aGUgc2VydmVyIHRvIGVuc3VyZSB5b3VcbiAqIHNlcnZlIHRoZSBzYW1lIGFwcCBhdCBtdWx0aXBsZSBVUkxzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlbWl4LXJ1bi9oaXN0b3J5L3RyZWUvbWFpbi9kb2NzL2FwaS1yZWZlcmVuY2UubWQjY3JlYXRlYnJvd3Nlcmhpc3RvcnlcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVCcm93c2VySGlzdG9yeShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCcm93c2VyTG9jYXRpb24od2luZG93LCBnbG9iYWxIaXN0b3J5KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaFxuICAgIH0gPSB3aW5kb3cubG9jYXRpb247XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uKFwiXCIsIHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaFxuICAgIH0sIC8vIHN0YXRlIGRlZmF1bHRzIHRvIGBudWxsYCBiZWNhdXNlIGB3aW5kb3cuaGlzdG9yeS5zdGF0ZWAgZG9lc1xuICAgIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS51c3IgfHwgbnVsbCwgZ2xvYmFsSGlzdG9yeS5zdGF0ZSAmJiBnbG9iYWxIaXN0b3J5LnN0YXRlLmtleSB8fCBcImRlZmF1bHRcIik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCcm93c2VySHJlZih3aW5kb3csIHRvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0byk7XG4gIH1cblxuICByZXR1cm4gZ2V0VXJsQmFzZWRIaXN0b3J5KGNyZWF0ZUJyb3dzZXJMb2NhdGlvbiwgY3JlYXRlQnJvd3NlckhyZWYsIG51bGwsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBIYXNoIGhpc3Rvcnkgc3RvcmVzIHRoZSBsb2NhdGlvbiBpbiB3aW5kb3cubG9jYXRpb24uaGFzaC4gVGhpcyBtYWtlcyBpdCBpZGVhbFxuICogZm9yIHNpdHVhdGlvbnMgd2hlcmUgeW91IGRvbid0IHdhbnQgdG8gc2VuZCB0aGUgbG9jYXRpb24gdG8gdGhlIHNlcnZlciBmb3JcbiAqIHNvbWUgcmVhc29uLCBlaXRoZXIgYmVjYXVzZSB5b3UgZG8gY2Fubm90IGNvbmZpZ3VyZSBpdCBvciB0aGUgVVJMIHNwYWNlIGlzXG4gKiByZXNlcnZlZCBmb3Igc29tZXRoaW5nIGVsc2UuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVtaXgtcnVuL2hpc3RvcnkvdHJlZS9tYWluL2RvY3MvYXBpLXJlZmVyZW5jZS5tZCNjcmVhdGVoYXNoaGlzdG9yeVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUhhc2hIaXN0b3J5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhhc2hMb2NhdGlvbih3aW5kb3csIGdsb2JhbEhpc3RvcnkpIHtcbiAgICBsZXQge1xuICAgICAgcGF0aG5hbWUgPSBcIi9cIixcbiAgICAgIHNlYXJjaCA9IFwiXCIsXG4gICAgICBoYXNoID0gXCJcIlxuICAgIH0gPSBwYXJzZVBhdGgod2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpKTtcbiAgICByZXR1cm4gY3JlYXRlTG9jYXRpb24oXCJcIiwge1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoXG4gICAgfSwgLy8gc3RhdGUgZGVmYXVsdHMgdG8gYG51bGxgIGJlY2F1c2UgYHdpbmRvdy5oaXN0b3J5LnN0YXRlYCBkb2VzXG4gICAgZ2xvYmFsSGlzdG9yeS5zdGF0ZSAmJiBnbG9iYWxIaXN0b3J5LnN0YXRlLnVzciB8fCBudWxsLCBnbG9iYWxIaXN0b3J5LnN0YXRlICYmIGdsb2JhbEhpc3Rvcnkuc3RhdGUua2V5IHx8IFwiZGVmYXVsdFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhhc2hIcmVmKHdpbmRvdywgdG8pIHtcbiAgICBsZXQgYmFzZSA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYmFzZVwiKTtcbiAgICBsZXQgaHJlZiA9IFwiXCI7XG5cbiAgICBpZiAoYmFzZSAmJiBiYXNlLmdldEF0dHJpYnV0ZShcImhyZWZcIikpIHtcbiAgICAgIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGxldCBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG4gICAgICBocmVmID0gaGFzaEluZGV4ID09PSAtMSA/IHVybCA6IHVybC5zbGljZSgwLCBoYXNoSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBocmVmICsgXCIjXCIgKyAodHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gdG8gOiBjcmVhdGVQYXRoKHRvKSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZUhhc2hMb2NhdGlvbihsb2NhdGlvbiwgdG8pIHtcbiAgICB3YXJuaW5nJDEobG9jYXRpb24ucGF0aG5hbWUuY2hhckF0KDApID09PSBcIi9cIiwgXCJyZWxhdGl2ZSBwYXRobmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaGFzaCBoaXN0b3J5LnB1c2goXCIgKyBKU09OLnN0cmluZ2lmeSh0bykgKyBcIilcIik7XG4gIH1cblxuICByZXR1cm4gZ2V0VXJsQmFzZWRIaXN0b3J5KGNyZWF0ZUhhc2hMb2NhdGlvbiwgY3JlYXRlSGFzaEhyZWYsIHZhbGlkYXRlSGFzaExvY2F0aW9uLCBvcHRpb25zKTtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIFVUSUxTXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiB3YXJuaW5nJDEoY29uZCwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIikgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdlbGNvbWUgdG8gZGVidWdnaW5nIGhpc3RvcnkhXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBlcnJvciBpcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB5b3UgY2FuIG1vcmUgZWFzaWx5XG4gICAgICAvLyBmaW5kIHRoZSBzb3VyY2UgZm9yIGEgd2FybmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIGNvbnNvbGUgYnlcbiAgICAgIC8vIGVuYWJsaW5nIFwicGF1c2Ugb24gZXhjZXB0aW9uc1wiIGluIHlvdXIgSmF2YVNjcmlwdCBkZWJ1Z2dlci5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVLZXkoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOCk7XG59XG4vKipcbiAqIEZvciBicm93c2VyLWJhc2VkIGhpc3Rvcmllcywgd2UgY29tYmluZSB0aGUgc3RhdGUgYW5kIGtleSBpbnRvIGFuIG9iamVjdFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SGlzdG9yeVN0YXRlKGxvY2F0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgdXNyOiBsb2NhdGlvbi5zdGF0ZSxcbiAgICBrZXk6IGxvY2F0aW9uLmtleVxuICB9O1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgTG9jYXRpb24gb2JqZWN0IHdpdGggYSB1bmlxdWUga2V5IGZyb20gdGhlIGdpdmVuIFBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGN1cnJlbnQsIHRvLCBzdGF0ZSwga2V5KSB7XG4gIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgc3RhdGUgPSBudWxsO1xuICB9XG5cbiAgbGV0IGxvY2F0aW9uID0gX2V4dGVuZHMoe1xuICAgIHBhdGhuYW1lOiB0eXBlb2YgY3VycmVudCA9PT0gXCJzdHJpbmdcIiA/IGN1cnJlbnQgOiBjdXJyZW50LnBhdGhuYW1lLFxuICAgIHNlYXJjaDogXCJcIixcbiAgICBoYXNoOiBcIlwiXG4gIH0sIHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aCh0bykgOiB0bywge1xuICAgIHN0YXRlLFxuICAgIC8vIFRPRE86IFRoaXMgY291bGQgYmUgY2xlYW5lZCB1cC4gIHB1c2gvcmVwbGFjZSBzaG91bGQgcHJvYmFibHkganVzdCB0YWtlXG4gICAgLy8gZnVsbCBMb2NhdGlvbnMgbm93IGFuZCBhdm9pZCB0aGUgbmVlZCB0byBydW4gdGhyb3VnaCB0aGlzIGZsb3cgYXQgYWxsXG4gICAgLy8gQnV0IHRoYXQncyBhIHByZXR0eSBiaWcgcmVmYWN0b3IgdG8gdGhlIGN1cnJlbnQgdGVzdCBzdWl0ZSBzbyBnb2luZyB0b1xuICAgIC8vIGtlZXAgYXMgaXMgZm9yIHRoZSB0aW1lIGJlaW5nIGFuZCBqdXN0IGxldCBhbnkgaW5jb21pbmcga2V5cyB0YWtlIHByZWNlZGVuY2VcbiAgICBrZXk6IHRvICYmIHRvLmtleSB8fCBrZXkgfHwgY3JlYXRlS2V5KClcbiAgfSk7XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIFVSTCBwYXRoIGZyb20gdGhlIGdpdmVuIHBhdGhuYW1lLCBzZWFyY2gsIGFuZCBoYXNoIGNvbXBvbmVudHMuXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlUGF0aChfcmVmKSB7XG4gIGxldCB7XG4gICAgcGF0aG5hbWUgPSBcIi9cIixcbiAgICBzZWFyY2ggPSBcIlwiLFxuICAgIGhhc2ggPSBcIlwiXG4gIH0gPSBfcmVmO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaCAhPT0gXCI/XCIpIHBhdGhuYW1lICs9IHNlYXJjaC5jaGFyQXQoMCkgPT09IFwiP1wiID8gc2VhcmNoIDogXCI/XCIgKyBzZWFyY2g7XG4gIGlmIChoYXNoICYmIGhhc2ggIT09IFwiI1wiKSBwYXRobmFtZSArPSBoYXNoLmNoYXJBdCgwKSA9PT0gXCIjXCIgPyBoYXNoIDogXCIjXCIgKyBoYXNoO1xuICByZXR1cm4gcGF0aG5hbWU7XG59XG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBVUkwgcGF0aCBpbnRvIGl0cyBzZXBhcmF0ZSBwYXRobmFtZSwgc2VhcmNoLCBhbmQgaGFzaCBjb21wb25lbnRzLlxuICovXG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIGxldCBwYXJzZWRQYXRoID0ge307XG5cbiAgaWYgKHBhdGgpIHtcbiAgICBsZXQgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNoSW5kZXggPj0gMCkge1xuICAgICAgcGFyc2VkUGF0aC5oYXNoID0gcGF0aC5zdWJzdHIoaGFzaEluZGV4KTtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigwLCBoYXNoSW5kZXgpO1xuICAgIH1cblxuICAgIGxldCBzZWFyY2hJbmRleCA9IHBhdGguaW5kZXhPZihcIj9cIik7XG5cbiAgICBpZiAoc2VhcmNoSW5kZXggPj0gMCkge1xuICAgICAgcGFyc2VkUGF0aC5zZWFyY2ggPSBwYXRoLnN1YnN0cihzZWFyY2hJbmRleCk7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChwYXRoKSB7XG4gICAgICBwYXJzZWRQYXRoLnBhdGhuYW1lID0gcGF0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkUGF0aDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVSTChsb2NhdGlvbikge1xuICAvLyB3aW5kb3cubG9jYXRpb24ub3JpZ2luIGlzIFwibnVsbFwiICh0aGUgbGl0ZXJhbCBzdHJpbmcgdmFsdWUpIGluIEZpcmVmb3hcbiAgLy8gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBub3RhYmx5IHdoZW4gc2VydmluZyBmcm9tIGEgbG9jYWwgSFRNTCBmaWxlXG4gIC8vIFNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyOTdcbiAgbGV0IGJhc2UgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpbiAhPT0gXCJudWxsXCIgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luIDogXCJ1bmtub3duOi8vdW5rbm93blwiO1xuICBsZXQgaHJlZiA9IHR5cGVvZiBsb2NhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IGxvY2F0aW9uIDogY3JlYXRlUGF0aChsb2NhdGlvbik7XG4gIHJldHVybiBuZXcgVVJMKGhyZWYsIGJhc2UpO1xufVxuXG5mdW5jdGlvbiBnZXRVcmxCYXNlZEhpc3RvcnkoZ2V0TG9jYXRpb24sIGNyZWF0ZUhyZWYsIHZhbGlkYXRlTG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGxldCB7XG4gICAgd2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcsXG4gICAgdjVDb21wYXQgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgbGV0IGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgbGV0IGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG4gIGxldCBsaXN0ZW5lciA9IG51bGw7XG5cbiAgZnVuY3Rpb24gaGFuZGxlUG9wKCkge1xuICAgIGFjdGlvbiA9IEFjdGlvbi5Qb3A7XG5cbiAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHVzaCh0bywgc3RhdGUpIHtcbiAgICBhY3Rpb24gPSBBY3Rpb24uUHVzaDtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uLCB0bywgc3RhdGUpO1xuICAgIGlmICh2YWxpZGF0ZUxvY2F0aW9uKSB2YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCB0byk7XG4gICAgbGV0IGhpc3RvcnlTdGF0ZSA9IGdldEhpc3RvcnlTdGF0ZShsb2NhdGlvbik7XG4gICAgbGV0IHVybCA9IGhpc3RvcnkuY3JlYXRlSHJlZihsb2NhdGlvbik7IC8vIHRyeS4uLmNhdGNoIGJlY2F1c2UgaU9TIGxpbWl0cyB1cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzIDovXG5cbiAgICB0cnkge1xuICAgICAgZ2xvYmFsSGlzdG9yeS5wdXNoU3RhdGUoaGlzdG9yeVN0YXRlLCBcIlwiLCB1cmwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGV5IGFyZSBnb2luZyB0byBsb3NlIHN0YXRlIGhlcmUsIGJ1dCB0aGVyZSBpcyBubyByZWFsXG4gICAgICAvLyB3YXkgdG8gd2FybiB0aGVtIGFib3V0IGl0IHNpbmNlIHRoZSBwYWdlIHdpbGwgcmVmcmVzaC4uLlxuICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgIH1cblxuICAgIGlmICh2NUNvbXBhdCAmJiBsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlKHRvLCBzdGF0ZSkge1xuICAgIGFjdGlvbiA9IEFjdGlvbi5SZXBsYWNlO1xuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24sIHRvLCBzdGF0ZSk7XG4gICAgaWYgKHZhbGlkYXRlTG9jYXRpb24pIHZhbGlkYXRlTG9jYXRpb24obG9jYXRpb24sIHRvKTtcbiAgICBsZXQgaGlzdG9yeVN0YXRlID0gZ2V0SGlzdG9yeVN0YXRlKGxvY2F0aW9uKTtcbiAgICBsZXQgdXJsID0gaGlzdG9yeS5jcmVhdGVIcmVmKGxvY2F0aW9uKTtcbiAgICBnbG9iYWxIaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIHVybCk7XG5cbiAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSB7XG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfSxcblxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBnZXRMb2NhdGlvbih3aW5kb3csIGdsb2JhbEhpc3RvcnkpO1xuICAgIH0sXG5cbiAgICBsaXN0ZW4oZm4pIHtcbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGhpc3Rvcnkgb25seSBhY2NlcHRzIG9uZSBhY3RpdmUgbGlzdGVuZXJcIik7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFBvcFN0YXRlRXZlbnRUeXBlLCBoYW5kbGVQb3ApO1xuICAgICAgbGlzdGVuZXIgPSBmbjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFBvcFN0YXRlRXZlbnRUeXBlLCBoYW5kbGVQb3ApO1xuICAgICAgICBsaXN0ZW5lciA9IG51bGw7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVIcmVmKHRvKSB7XG4gICAgICByZXR1cm4gY3JlYXRlSHJlZih3aW5kb3csIHRvKTtcbiAgICB9LFxuXG4gICAgZW5jb2RlTG9jYXRpb24obG9jYXRpb24pIHtcbiAgICAgIC8vIEVuY29kZSBhIExvY2F0aW9uIHRoZSBzYW1lIHdheSB3aW5kb3cubG9jYXRpb24gd291bGRcbiAgICAgIGxldCB1cmwgPSBjcmVhdGVVUkwoY3JlYXRlUGF0aChsb2NhdGlvbikpO1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBsb2NhdGlvbiwge1xuICAgICAgICBwYXRobmFtZTogdXJsLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IHVybC5zZWFyY2gsXG4gICAgICAgIGhhc2g6IHVybC5oYXNoXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcHVzaCxcbiAgICByZXBsYWNlLFxuXG4gICAgZ28obikge1xuICAgICAgcmV0dXJuIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBoaXN0b3J5O1xufSAvLyNlbmRyZWdpb25cblxudmFyIFJlc3VsdFR5cGU7XG5cbihmdW5jdGlvbiAoUmVzdWx0VHlwZSkge1xuICBSZXN1bHRUeXBlW1wiZGF0YVwiXSA9IFwiZGF0YVwiO1xuICBSZXN1bHRUeXBlW1wiZGVmZXJyZWRcIl0gPSBcImRlZmVycmVkXCI7XG4gIFJlc3VsdFR5cGVbXCJyZWRpcmVjdFwiXSA9IFwicmVkaXJlY3RcIjtcbiAgUmVzdWx0VHlwZVtcImVycm9yXCJdID0gXCJlcnJvclwiO1xufSkoUmVzdWx0VHlwZSB8fCAoUmVzdWx0VHlwZSA9IHt9KSk7XG5cbmZ1bmN0aW9uIGlzSW5kZXhSb3V0ZShyb3V0ZSkge1xuICByZXR1cm4gcm91dGUuaW5kZXggPT09IHRydWU7XG59IC8vIFdhbGsgdGhlIHJvdXRlIHRyZWUgZ2VuZXJhdGluZyB1bmlxdWUgSURzIHdoZXJlIG5lY2Vzc2FyeSBzbyB3ZSBhcmUgd29ya2luZ1xuLy8gc29sZWx5IHdpdGggQWdub3N0aWNEYXRhUm91dGVPYmplY3QncyB3aXRoaW4gdGhlIFJvdXRlclxuXG5cbmZ1bmN0aW9uIGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGVzLCBwYXJlbnRQYXRoLCBhbGxJZHMpIHtcbiAgaWYgKHBhcmVudFBhdGggPT09IHZvaWQgMCkge1xuICAgIHBhcmVudFBhdGggPSBbXTtcbiAgfVxuXG4gIGlmIChhbGxJZHMgPT09IHZvaWQgMCkge1xuICAgIGFsbElkcyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXMubWFwKChyb3V0ZSwgaW5kZXgpID0+IHtcbiAgICBsZXQgdHJlZVBhdGggPSBbLi4ucGFyZW50UGF0aCwgaW5kZXhdO1xuICAgIGxldCBpZCA9IHR5cGVvZiByb3V0ZS5pZCA9PT0gXCJzdHJpbmdcIiA/IHJvdXRlLmlkIDogdHJlZVBhdGguam9pbihcIi1cIik7XG4gICAgaW52YXJpYW50KHJvdXRlLmluZGV4ICE9PSB0cnVlIHx8ICFyb3V0ZS5jaGlsZHJlbiwgXCJDYW5ub3Qgc3BlY2lmeSBjaGlsZHJlbiBvbiBhbiBpbmRleCByb3V0ZVwiKTtcbiAgICBpbnZhcmlhbnQoIWFsbElkcy5oYXMoaWQpLCBcIkZvdW5kIGEgcm91dGUgaWQgY29sbGlzaW9uIG9uIGlkIFxcXCJcIiArIGlkICsgXCJcXFwiLiAgUm91dGUgXCIgKyBcImlkJ3MgbXVzdCBiZSBnbG9iYWxseSB1bmlxdWUgd2l0aGluIERhdGEgUm91dGVyIHVzYWdlc1wiKTtcbiAgICBhbGxJZHMuYWRkKGlkKTtcblxuICAgIGlmIChpc0luZGV4Um91dGUocm91dGUpKSB7XG4gICAgICBsZXQgaW5kZXhSb3V0ZSA9IF9leHRlbmRzKHt9LCByb3V0ZSwge1xuICAgICAgICBpZFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpbmRleFJvdXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcGF0aE9yTGF5b3V0Um91dGUgPSBfZXh0ZW5kcyh7fSwgcm91dGUsIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNoaWxkcmVuOiByb3V0ZS5jaGlsZHJlbiA/IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGUuY2hpbGRyZW4sIHRyZWVQYXRoLCBhbGxJZHMpIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHBhdGhPckxheW91dFJvdXRlO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIE1hdGNoZXMgdGhlIGdpdmVuIHJvdXRlcyB0byBhIGxvY2F0aW9uIGFuZCByZXR1cm5zIHRoZSBtYXRjaCBkYXRhLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni91dGlscy9tYXRjaC1yb3V0ZXNcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaFJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uQXJnLCBiYXNlbmFtZSkge1xuICBpZiAoYmFzZW5hbWUgPT09IHZvaWQgMCkge1xuICAgIGJhc2VuYW1lID0gXCIvXCI7XG4gIH1cblxuICBsZXQgbG9jYXRpb24gPSB0eXBlb2YgbG9jYXRpb25BcmcgPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgobG9jYXRpb25BcmcpIDogbG9jYXRpb25Bcmc7XG4gIGxldCBwYXRobmFtZSA9IHN0cmlwQmFzZW5hbWUobG9jYXRpb24ucGF0aG5hbWUgfHwgXCIvXCIsIGJhc2VuYW1lKTtcblxuICBpZiAocGF0aG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IGJyYW5jaGVzID0gZmxhdHRlblJvdXRlcyhyb3V0ZXMpO1xuICByYW5rUm91dGVCcmFuY2hlcyhicmFuY2hlcyk7XG4gIGxldCBtYXRjaGVzID0gbnVsbDtcblxuICBmb3IgKGxldCBpID0gMDsgbWF0Y2hlcyA9PSBudWxsICYmIGkgPCBicmFuY2hlcy5sZW5ndGg7ICsraSkge1xuICAgIG1hdGNoZXMgPSBtYXRjaFJvdXRlQnJhbmNoKGJyYW5jaGVzW2ldLCAvLyBJbmNvbWluZyBwYXRobmFtZXMgYXJlIGdlbmVyYWxseSBlbmNvZGVkIGZyb20gZWl0aGVyIHdpbmRvdy5sb2NhdGlvblxuICAgIC8vIG9yIGZyb20gcm91dGVyLm5hdmlnYXRlLCBidXQgd2Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IHRoZSB1bmVuY29kZWRcbiAgICAvLyBwYXRocyBpbiB0aGUgcm91dGUgZGVmaW5pdGlvbnMuICBNZW1vcnkgcm91dGVyIGxvY2F0aW9ucyB3b24ndCBiZVxuICAgIC8vIGVuY29kZWQgaGVyZSBidXQgdGhlcmUgYWxzbyBzaG91bGRuJ3QgYmUgYW55dGhpbmcgdG8gZGVjb2RlIHNvIHRoaXNcbiAgICAvLyBzaG91bGQgYmUgYSBzYWZlIG9wZXJhdGlvbi4gIFRoaXMgYXZvaWRzIG5lZWRpbmcgbWF0Y2hSb3V0ZXMgdG8gYmVcbiAgICAvLyBoaXN0b3J5LWF3YXJlLlxuICAgIHNhZmVseURlY29kZVVSSShwYXRobmFtZSkpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5Sb3V0ZXMocm91dGVzLCBicmFuY2hlcywgcGFyZW50c01ldGEsIHBhcmVudFBhdGgpIHtcbiAgaWYgKGJyYW5jaGVzID09PSB2b2lkIDApIHtcbiAgICBicmFuY2hlcyA9IFtdO1xuICB9XG5cbiAgaWYgKHBhcmVudHNNZXRhID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRzTWV0YSA9IFtdO1xuICB9XG5cbiAgaWYgKHBhcmVudFBhdGggPT09IHZvaWQgMCkge1xuICAgIHBhcmVudFBhdGggPSBcIlwiO1xuICB9XG5cbiAgcm91dGVzLmZvckVhY2goKHJvdXRlLCBpbmRleCkgPT4ge1xuICAgIGxldCBtZXRhID0ge1xuICAgICAgcmVsYXRpdmVQYXRoOiByb3V0ZS5wYXRoIHx8IFwiXCIsXG4gICAgICBjYXNlU2Vuc2l0aXZlOiByb3V0ZS5jYXNlU2Vuc2l0aXZlID09PSB0cnVlLFxuICAgICAgY2hpbGRyZW5JbmRleDogaW5kZXgsXG4gICAgICByb3V0ZVxuICAgIH07XG5cbiAgICBpZiAobWV0YS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGludmFyaWFudChtZXRhLnJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKHBhcmVudFBhdGgpLCBcIkFic29sdXRlIHJvdXRlIHBhdGggXFxcIlwiICsgbWV0YS5yZWxhdGl2ZVBhdGggKyBcIlxcXCIgbmVzdGVkIHVuZGVyIHBhdGggXCIgKyAoXCJcXFwiXCIgKyBwYXJlbnRQYXRoICsgXCJcXFwiIGlzIG5vdCB2YWxpZC4gQW4gYWJzb2x1dGUgY2hpbGQgcm91dGUgcGF0aCBcIikgKyBcIm11c3Qgc3RhcnQgd2l0aCB0aGUgY29tYmluZWQgcGF0aCBvZiBhbGwgaXRzIHBhcmVudCByb3V0ZXMuXCIpO1xuICAgICAgbWV0YS5yZWxhdGl2ZVBhdGggPSBtZXRhLnJlbGF0aXZlUGF0aC5zbGljZShwYXJlbnRQYXRoLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgbGV0IHBhdGggPSBqb2luUGF0aHMoW3BhcmVudFBhdGgsIG1ldGEucmVsYXRpdmVQYXRoXSk7XG4gICAgbGV0IHJvdXRlc01ldGEgPSBwYXJlbnRzTWV0YS5jb25jYXQobWV0YSk7IC8vIEFkZCB0aGUgY2hpbGRyZW4gYmVmb3JlIGFkZGluZyB0aGlzIHJvdXRlIHRvIHRoZSBhcnJheSBzbyB3ZSB0cmF2ZXJzZSB0aGVcbiAgICAvLyByb3V0ZSB0cmVlIGRlcHRoLWZpcnN0IGFuZCBjaGlsZCByb3V0ZXMgYXBwZWFyIGJlZm9yZSB0aGVpciBwYXJlbnRzIGluXG4gICAgLy8gdGhlIFwiZmxhdHRlbmVkXCIgdmVyc2lvbi5cblxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbiAmJiByb3V0ZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBpbnZhcmlhbnQoIC8vIE91ciB0eXBlcyBrbm93IGJldHRlciwgYnV0IHJ1bnRpbWUgSlMgbWF5IG5vdCFcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJvdXRlLmluZGV4ICE9PSB0cnVlLCBcIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSBcIiArIChcImFsbCBjaGlsZCByb3V0ZXMgZnJvbSByb3V0ZSBwYXRoIFxcXCJcIiArIHBhdGggKyBcIlxcXCIuXCIpKTtcbiAgICAgIGZsYXR0ZW5Sb3V0ZXMocm91dGUuY2hpbGRyZW4sIGJyYW5jaGVzLCByb3V0ZXNNZXRhLCBwYXRoKTtcbiAgICB9IC8vIFJvdXRlcyB3aXRob3V0IGEgcGF0aCBzaG91bGRuJ3QgZXZlciBtYXRjaCBieSB0aGVtc2VsdmVzIHVubGVzcyB0aGV5IGFyZVxuICAgIC8vIGluZGV4IHJvdXRlcywgc28gZG9uJ3QgYWRkIHRoZW0gdG8gdGhlIGxpc3Qgb2YgcG9zc2libGUgYnJhbmNoZXMuXG5cblxuICAgIGlmIChyb3V0ZS5wYXRoID09IG51bGwgJiYgIXJvdXRlLmluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnJhbmNoZXMucHVzaCh7XG4gICAgICBwYXRoLFxuICAgICAgc2NvcmU6IGNvbXB1dGVTY29yZShwYXRoLCByb3V0ZS5pbmRleCksXG4gICAgICByb3V0ZXNNZXRhXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gYnJhbmNoZXM7XG59XG5cbmZ1bmN0aW9uIHJhbmtSb3V0ZUJyYW5jaGVzKGJyYW5jaGVzKSB7XG4gIGJyYW5jaGVzLnNvcnQoKGEsIGIpID0+IGEuc2NvcmUgIT09IGIuc2NvcmUgPyBiLnNjb3JlIC0gYS5zY29yZSAvLyBIaWdoZXIgc2NvcmUgZmlyc3RcbiAgOiBjb21wYXJlSW5kZXhlcyhhLnJvdXRlc01ldGEubWFwKG1ldGEgPT4gbWV0YS5jaGlsZHJlbkluZGV4KSwgYi5yb3V0ZXNNZXRhLm1hcChtZXRhID0+IG1ldGEuY2hpbGRyZW5JbmRleCkpKTtcbn1cblxuY29uc3QgcGFyYW1SZSA9IC9eOlxcdyskLztcbmNvbnN0IGR5bmFtaWNTZWdtZW50VmFsdWUgPSAzO1xuY29uc3QgaW5kZXhSb3V0ZVZhbHVlID0gMjtcbmNvbnN0IGVtcHR5U2VnbWVudFZhbHVlID0gMTtcbmNvbnN0IHN0YXRpY1NlZ21lbnRWYWx1ZSA9IDEwO1xuY29uc3Qgc3BsYXRQZW5hbHR5ID0gLTI7XG5cbmNvbnN0IGlzU3BsYXQgPSBzID0+IHMgPT09IFwiKlwiO1xuXG5mdW5jdGlvbiBjb21wdXRlU2NvcmUocGF0aCwgaW5kZXgpIHtcbiAgbGV0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gIGxldCBpbml0aWFsU2NvcmUgPSBzZWdtZW50cy5sZW5ndGg7XG5cbiAgaWYgKHNlZ21lbnRzLnNvbWUoaXNTcGxhdCkpIHtcbiAgICBpbml0aWFsU2NvcmUgKz0gc3BsYXRQZW5hbHR5O1xuICB9XG5cbiAgaWYgKGluZGV4KSB7XG4gICAgaW5pdGlhbFNjb3JlICs9IGluZGV4Um91dGVWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cy5maWx0ZXIocyA9PiAhaXNTcGxhdChzKSkucmVkdWNlKChzY29yZSwgc2VnbWVudCkgPT4gc2NvcmUgKyAocGFyYW1SZS50ZXN0KHNlZ21lbnQpID8gZHluYW1pY1NlZ21lbnRWYWx1ZSA6IHNlZ21lbnQgPT09IFwiXCIgPyBlbXB0eVNlZ21lbnRWYWx1ZSA6IHN0YXRpY1NlZ21lbnRWYWx1ZSksIGluaXRpYWxTY29yZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVJbmRleGVzKGEsIGIpIHtcbiAgbGV0IHNpYmxpbmdzID0gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuc2xpY2UoMCwgLTEpLmV2ZXJ5KChuLCBpKSA9PiBuID09PSBiW2ldKTtcbiAgcmV0dXJuIHNpYmxpbmdzID8gLy8gSWYgdHdvIHJvdXRlcyBhcmUgc2libGluZ3MsIHdlIHNob3VsZCB0cnkgdG8gbWF0Y2ggdGhlIGVhcmxpZXIgc2libGluZ1xuICAvLyBmaXJzdC4gVGhpcyBhbGxvd3MgcGVvcGxlIHRvIGhhdmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgbWF0Y2hpbmdcbiAgLy8gYmVoYXZpb3IgYnkgc2ltcGx5IHB1dHRpbmcgcm91dGVzIHdpdGggaWRlbnRpY2FsIHBhdGhzIGluIHRoZSBvcmRlciB0aGV5XG4gIC8vIHdhbnQgdGhlbSB0cmllZC5cbiAgYVthLmxlbmd0aCAtIDFdIC0gYltiLmxlbmd0aCAtIDFdIDogLy8gT3RoZXJ3aXNlLCBpdCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIHJhbmsgbm9uLXNpYmxpbmdzIGJ5IGluZGV4LFxuICAvLyBzbyB0aGV5IHNvcnQgZXF1YWxseS5cbiAgMDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZUJyYW5jaChicmFuY2gsIHBhdGhuYW1lKSB7XG4gIGxldCB7XG4gICAgcm91dGVzTWV0YVxuICB9ID0gYnJhbmNoO1xuICBsZXQgbWF0Y2hlZFBhcmFtcyA9IHt9O1xuICBsZXQgbWF0Y2hlZFBhdGhuYW1lID0gXCIvXCI7XG4gIGxldCBtYXRjaGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXNNZXRhLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IG1ldGEgPSByb3V0ZXNNZXRhW2ldO1xuICAgIGxldCBlbmQgPSBpID09PSByb3V0ZXNNZXRhLmxlbmd0aCAtIDE7XG4gICAgbGV0IHJlbWFpbmluZ1BhdGhuYW1lID0gbWF0Y2hlZFBhdGhuYW1lID09PSBcIi9cIiA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UobWF0Y2hlZFBhdGhuYW1lLmxlbmd0aCkgfHwgXCIvXCI7XG4gICAgbGV0IG1hdGNoID0gbWF0Y2hQYXRoKHtcbiAgICAgIHBhdGg6IG1ldGEucmVsYXRpdmVQYXRoLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogbWV0YS5jYXNlU2Vuc2l0aXZlLFxuICAgICAgZW5kXG4gICAgfSwgcmVtYWluaW5nUGF0aG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICAgIE9iamVjdC5hc3NpZ24obWF0Y2hlZFBhcmFtcywgbWF0Y2gucGFyYW1zKTtcbiAgICBsZXQgcm91dGUgPSBtZXRhLnJvdXRlO1xuICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcyBhcyBiZSBhdm9pZGVkP1xuICAgICAgcGFyYW1zOiBtYXRjaGVkUGFyYW1zLFxuICAgICAgcGF0aG5hbWU6IGpvaW5QYXRocyhbbWF0Y2hlZFBhdGhuYW1lLCBtYXRjaC5wYXRobmFtZV0pLFxuICAgICAgcGF0aG5hbWVCYXNlOiBub3JtYWxpemVQYXRobmFtZShqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVCYXNlXSkpLFxuICAgICAgcm91dGVcbiAgICB9KTtcblxuICAgIGlmIChtYXRjaC5wYXRobmFtZUJhc2UgIT09IFwiL1wiKSB7XG4gICAgICBtYXRjaGVkUGF0aG5hbWUgPSBqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVCYXNlXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHdpdGggcGFyYW1zIGludGVycG9sYXRlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvZ2VuZXJhdGUtcGF0aFxuICovXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVQYXRoKHBhdGgsIHBhcmFtcykge1xuICBpZiAocGFyYW1zID09PSB2b2lkIDApIHtcbiAgICBwYXJhbXMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBwYXRoLnJlcGxhY2UoLzooXFx3KykvZywgKF8sIGtleSkgPT4ge1xuICAgIGludmFyaWFudChwYXJhbXNba2V5XSAhPSBudWxsLCBcIk1pc3NpbmcgXFxcIjpcIiArIGtleSArIFwiXFxcIiBwYXJhbVwiKTtcbiAgICByZXR1cm4gcGFyYW1zW2tleV07XG4gIH0pLnJlcGxhY2UoLyhcXC8/KVxcKi8sIChfLCBwcmVmaXgsIF9fLCBzdHIpID0+IHtcbiAgICBjb25zdCBzdGFyID0gXCIqXCI7XG5cbiAgICBpZiAocGFyYW1zW3N0YXJdID09IG51bGwpIHtcbiAgICAgIC8vIElmIG5vIHNwbGF0IHdhcyBwcm92aWRlZCwgdHJpbSB0aGUgdHJhaWxpbmcgc2xhc2ggX3VubGVzc18gaXQnc1xuICAgICAgLy8gdGhlIGVudGlyZSBwYXRoXG4gICAgICByZXR1cm4gc3RyID09PSBcIi8qXCIgPyBcIi9cIiA6IFwiXCI7XG4gICAgfSAvLyBBcHBseSB0aGUgc3BsYXRcblxuXG4gICAgcmV0dXJuIFwiXCIgKyBwcmVmaXggKyBwYXJhbXNbc3Rhcl07XG4gIH0pO1xufVxuLyoqXG4gKiBQZXJmb3JtcyBwYXR0ZXJuIG1hdGNoaW5nIG9uIGEgVVJMIHBhdGhuYW1lIGFuZCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0XG4gKiB0aGUgbWF0Y2guXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL21hdGNoLXBhdGhcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaFBhdGgocGF0dGVybiwgcGF0aG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiKSB7XG4gICAgcGF0dGVybiA9IHtcbiAgICAgIHBhdGg6IHBhdHRlcm4sXG4gICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIGVuZDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBsZXQgW21hdGNoZXIsIHBhcmFtTmFtZXNdID0gY29tcGlsZVBhdGgocGF0dGVybi5wYXRoLCBwYXR0ZXJuLmNhc2VTZW5zaXRpdmUsIHBhdHRlcm4uZW5kKTtcbiAgbGV0IG1hdGNoID0gcGF0aG5hbWUubWF0Y2gobWF0Y2hlcik7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICBsZXQgbWF0Y2hlZFBhdGhuYW1lID0gbWF0Y2hbMF07XG4gIGxldCBwYXRobmFtZUJhc2UgPSBtYXRjaGVkUGF0aG5hbWUucmVwbGFjZSgvKC4pXFwvKyQvLCBcIiQxXCIpO1xuICBsZXQgY2FwdHVyZUdyb3VwcyA9IG1hdGNoLnNsaWNlKDEpO1xuICBsZXQgcGFyYW1zID0gcGFyYW1OYW1lcy5yZWR1Y2UoKG1lbW8sIHBhcmFtTmFtZSwgaW5kZXgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgdGhlIHBhdGhuYW1lQmFzZSBoZXJlIHVzaW5nIHRoZSByYXcgc3BsYXQgdmFsdWVcbiAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIHBhcmFtc1tcIipcIl0gbGF0ZXIgYmVjYXVzZSBpdCB3aWxsIGJlIGRlY29kZWQgdGhlblxuICAgIGlmIChwYXJhbU5hbWUgPT09IFwiKlwiKSB7XG4gICAgICBsZXQgc3BsYXRWYWx1ZSA9IGNhcHR1cmVHcm91cHNbaW5kZXhdIHx8IFwiXCI7XG4gICAgICBwYXRobmFtZUJhc2UgPSBtYXRjaGVkUGF0aG5hbWUuc2xpY2UoMCwgbWF0Y2hlZFBhdGhuYW1lLmxlbmd0aCAtIHNwbGF0VmFsdWUubGVuZ3RoKS5yZXBsYWNlKC8oLilcXC8rJC8sIFwiJDFcIik7XG4gICAgfVxuXG4gICAgbWVtb1twYXJhbU5hbWVdID0gc2FmZWx5RGVjb2RlVVJJQ29tcG9uZW50KGNhcHR1cmVHcm91cHNbaW5kZXhdIHx8IFwiXCIsIHBhcmFtTmFtZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgcmV0dXJuIHtcbiAgICBwYXJhbXMsXG4gICAgcGF0aG5hbWU6IG1hdGNoZWRQYXRobmFtZSxcbiAgICBwYXRobmFtZUJhc2UsXG4gICAgcGF0dGVyblxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21waWxlUGF0aChwYXRoLCBjYXNlU2Vuc2l0aXZlLCBlbmQpIHtcbiAgaWYgKGNhc2VTZW5zaXRpdmUgPT09IHZvaWQgMCkge1xuICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbmQgPT09IHZvaWQgMCkge1xuICAgIGVuZCA9IHRydWU7XG4gIH1cblxuICB3YXJuaW5nKHBhdGggPT09IFwiKlwiIHx8ICFwYXRoLmVuZHNXaXRoKFwiKlwiKSB8fCBwYXRoLmVuZHNXaXRoKFwiLypcIiksIFwiUm91dGUgcGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlIFwiICsgKFwiXFxcIlwiICsgcGF0aC5yZXBsYWNlKC9cXCokLywgXCIvKlwiKSArIFwiXFxcIiBiZWNhdXNlIHRoZSBgKmAgY2hhcmFjdGVyIG11c3QgXCIpICsgXCJhbHdheXMgZm9sbG93IGEgYC9gIGluIHRoZSBwYXR0ZXJuLiBUbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgXCIgKyAoXCJwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvIFxcXCJcIiArIHBhdGgucmVwbGFjZSgvXFwqJC8sIFwiLypcIikgKyBcIlxcXCIuXCIpKTtcbiAgbGV0IHBhcmFtTmFtZXMgPSBbXTtcbiAgbGV0IHJlZ2V4cFNvdXJjZSA9IFwiXlwiICsgcGF0aC5yZXBsYWNlKC9cXC8qXFwqPyQvLCBcIlwiKSAvLyBJZ25vcmUgdHJhaWxpbmcgLyBhbmQgLyosIHdlJ2xsIGhhbmRsZSBpdCBiZWxvd1xuICAucmVwbGFjZSgvXlxcLyovLCBcIi9cIikgLy8gTWFrZSBzdXJlIGl0IGhhcyBhIGxlYWRpbmcgL1xuICAucmVwbGFjZSgvW1xcXFwuKiteJD97fXwoKVtcXF1dL2csIFwiXFxcXCQmXCIpIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJzXG4gIC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBwYXJhbU5hbWUpID0+IHtcbiAgICBwYXJhbU5hbWVzLnB1c2gocGFyYW1OYW1lKTtcbiAgICByZXR1cm4gXCIoW15cXFxcL10rKVwiO1xuICB9KTtcblxuICBpZiAocGF0aC5lbmRzV2l0aChcIipcIikpIHtcbiAgICBwYXJhbU5hbWVzLnB1c2goXCIqXCIpO1xuICAgIHJlZ2V4cFNvdXJjZSArPSBwYXRoID09PSBcIipcIiB8fCBwYXRoID09PSBcIi8qXCIgPyBcIiguKikkXCIgLy8gQWxyZWFkeSBtYXRjaGVkIHRoZSBpbml0aWFsIC8sIGp1c3QgbWF0Y2ggdGhlIHJlc3RcbiAgICA6IFwiKD86XFxcXC8oLispfFxcXFwvKikkXCI7IC8vIERvbid0IGluY2x1ZGUgdGhlIC8gaW4gcGFyYW1zW1wiKlwiXVxuICB9IGVsc2UgaWYgKGVuZCkge1xuICAgIC8vIFdoZW4gbWF0Y2hpbmcgdG8gdGhlIGVuZCwgaWdub3JlIHRyYWlsaW5nIHNsYXNoZXNcbiAgICByZWdleHBTb3VyY2UgKz0gXCJcXFxcLyokXCI7XG4gIH0gZWxzZSBpZiAocGF0aCAhPT0gXCJcIiAmJiBwYXRoICE9PSBcIi9cIikge1xuICAgIC8vIElmIG91ciBwYXRoIGlzIG5vbi1lbXB0eSBhbmQgY29udGFpbnMgYW55dGhpbmcgYmV5b25kIGFuIGluaXRpYWwgc2xhc2gsXG4gICAgLy8gdGhlbiB3ZSBoYXZlIF9zb21lXyBmb3JtIG9mIHBhdGggaW4gb3VyIHJlZ2V4IHNvIHdlIHNob3VsZCBleHBlY3QgdG9cbiAgICAvLyBtYXRjaCBvbmx5IGlmIHdlIGZpbmQgdGhlIGVuZCBvZiB0aGlzIHBhdGggc2VnbWVudC4gIExvb2sgZm9yIGFuIG9wdGlvbmFsXG4gICAgLy8gbm9uLWNhcHR1cmVkIHRyYWlsaW5nIHNsYXNoICh0byBtYXRjaCBhIHBvcnRpb24gb2YgdGhlIFVSTCkgb3IgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBwYXRoIChpZiB3ZSd2ZSBtYXRjaGVkIHRvIHRoZSBlbmQpLiAgV2UgdXNlZCB0byBkbyB0aGlzIHdpdGggYVxuICAgIC8vIHdvcmQgYm91bmRhcnkgYnV0IHRoYXQgZ2l2ZXMgZmFsc2UgcG9zaXRpdmVzIG9uIHJvdXRlcyBsaWtlXG4gICAgLy8gL3VzZXItcHJlZmVyZW5jZXMgc2luY2UgYC1gIGNvdW50cyBhcyBhIHdvcmQgYm91bmRhcnkuXG4gICAgcmVnZXhwU291cmNlICs9IFwiKD86KD89XFxcXC98JCkpXCI7XG4gIH0gZWxzZSA7XG5cbiAgbGV0IG1hdGNoZXIgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgY2FzZVNlbnNpdGl2ZSA/IHVuZGVmaW5lZCA6IFwiaVwiKTtcbiAgcmV0dXJuIFttYXRjaGVyLCBwYXJhbU5hbWVzXTtcbn1cblxuZnVuY3Rpb24gc2FmZWx5RGVjb2RlVVJJKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybmluZyhmYWxzZSwgXCJUaGUgVVJMIHBhdGggXFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgY291bGQgbm90IGJlIGRlY29kZWQgYmVjYXVzZSBpdCBpcyBpcyBhIFwiICsgXCJtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEgYmFkIHBlcmNlbnQgXCIgKyAoXCJlbmNvZGluZyAoXCIgKyBlcnJvciArIFwiKS5cIikpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZWNvZGVVUklDb21wb25lbnQodmFsdWUsIHBhcmFtTmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm5pbmcoZmFsc2UsIFwiVGhlIHZhbHVlIGZvciB0aGUgVVJMIHBhcmFtIFxcXCJcIiArIHBhcmFtTmFtZSArIFwiXFxcIiB3aWxsIG5vdCBiZSBkZWNvZGVkIGJlY2F1c2VcIiArIChcIiB0aGUgc3RyaW5nIFxcXCJcIiArIHZhbHVlICsgXCJcXFwiIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5XCIpICsgKFwiIGR1ZSB0byBhIGJhZCBwZXJjZW50IGVuY29kaW5nIChcIiArIGVycm9yICsgXCIpLlwiKSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBzdHJpcEJhc2VuYW1lKHBhdGhuYW1lLCBiYXNlbmFtZSkge1xuICBpZiAoYmFzZW5hbWUgPT09IFwiL1wiKSByZXR1cm4gcGF0aG5hbWU7XG5cbiAgaWYgKCFwYXRobmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYmFzZW5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBXZSB3YW50IHRvIGxlYXZlIHRyYWlsaW5nIHNsYXNoIGJlaGF2aW9yIGluIHRoZSB1c2VyJ3MgY29udHJvbCwgc28gaWYgdGhleVxuICAvLyBzcGVjaWZ5IGEgYmFzZW5hbWUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLCB3ZSBzaG91bGQgc3VwcG9ydCBpdFxuXG5cbiAgbGV0IHN0YXJ0SW5kZXggPSBiYXNlbmFtZS5lbmRzV2l0aChcIi9cIikgPyBiYXNlbmFtZS5sZW5ndGggLSAxIDogYmFzZW5hbWUubGVuZ3RoO1xuICBsZXQgbmV4dENoYXIgPSBwYXRobmFtZS5jaGFyQXQoc3RhcnRJbmRleCk7XG5cbiAgaWYgKG5leHRDaGFyICYmIG5leHRDaGFyICE9PSBcIi9cIikge1xuICAgIC8vIHBhdGhuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggYmFzZW5hbWUvXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcGF0aG5hbWUuc2xpY2Uoc3RhcnRJbmRleCkgfHwgXCIvXCI7XG59XG5mdW5jdGlvbiBpbnZhcmlhbnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB3YXJuaW5nKGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCBSb3V0ZXIhXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBlcnJvciBpcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB5b3UgY2FuIG1vcmUgZWFzaWx5XG4gICAgICAvLyBmaW5kIHRoZSBzb3VyY2UgZm9yIGEgd2FybmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIGNvbnNvbGUgYnlcbiAgICAgIC8vIGVuYWJsaW5nIFwicGF1c2Ugb24gZXhjZXB0aW9uc1wiIGluIHlvdXIgSmF2YVNjcmlwdCBkZWJ1Z2dlci5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmVzb2x2ZWQgcGF0aCBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHBhdGhuYW1lLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni91dGlscy9yZXNvbHZlLXBhdGhcbiAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGF0aCh0bywgZnJvbVBhdGhuYW1lKSB7XG4gIGlmIChmcm9tUGF0aG5hbWUgPT09IHZvaWQgMCkge1xuICAgIGZyb21QYXRobmFtZSA9IFwiL1wiO1xuICB9XG5cbiAgbGV0IHtcbiAgICBwYXRobmFtZTogdG9QYXRobmFtZSxcbiAgICBzZWFyY2ggPSBcIlwiLFxuICAgIGhhc2ggPSBcIlwiXG4gIH0gPSB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgodG8pIDogdG87XG4gIGxldCBwYXRobmFtZSA9IHRvUGF0aG5hbWUgPyB0b1BhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gdG9QYXRobmFtZSA6IHJlc29sdmVQYXRobmFtZSh0b1BhdGhuYW1lLCBmcm9tUGF0aG5hbWUpIDogZnJvbVBhdGhuYW1lO1xuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lLFxuICAgIHNlYXJjaDogbm9ybWFsaXplU2VhcmNoKHNlYXJjaCksXG4gICAgaGFzaDogbm9ybWFsaXplSGFzaChoYXNoKVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUGF0aG5hbWUocmVsYXRpdmVQYXRoLCBmcm9tUGF0aG5hbWUpIHtcbiAgbGV0IHNlZ21lbnRzID0gZnJvbVBhdGhuYW1lLnJlcGxhY2UoL1xcLyskLywgXCJcIikuc3BsaXQoXCIvXCIpO1xuICBsZXQgcmVsYXRpdmVTZWdtZW50cyA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG4gIHJlbGF0aXZlU2VnbWVudHMuZm9yRWFjaChzZWdtZW50ID0+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gXCIuLlwiKSB7XG4gICAgICAvLyBLZWVwIHRoZSByb290IFwiXCIgc2VnbWVudCBzbyB0aGUgcGF0aG5hbWUgc3RhcnRzIGF0IC9cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPiAxKSBzZWdtZW50cy5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgIT09IFwiLlwiKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAxID8gc2VnbWVudHMuam9pbihcIi9cIikgOiBcIi9cIjtcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFBhdGhFcnJvcihjaGFyLCBmaWVsZCwgZGVzdCwgcGF0aCkge1xuICByZXR1cm4gXCJDYW5ub3QgaW5jbHVkZSBhICdcIiArIGNoYXIgKyBcIicgY2hhcmFjdGVyIGluIGEgbWFudWFsbHkgc3BlY2lmaWVkIFwiICsgKFwiYHRvLlwiICsgZmllbGQgKyBcImAgZmllbGQgW1wiICsgSlNPTi5zdHJpbmdpZnkocGF0aCkgKyBcIl0uICBQbGVhc2Ugc2VwYXJhdGUgaXQgb3V0IHRvIHRoZSBcIikgKyAoXCJgdG8uXCIgKyBkZXN0ICsgXCJgIGZpZWxkLiBBbHRlcm5hdGl2ZWx5IHlvdSBtYXkgcHJvdmlkZSB0aGUgZnVsbCBwYXRoIGFzIFwiKSArIFwiYSBzdHJpbmcgaW4gPExpbmsgdG89XFxcIi4uLlxcXCI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS5cIjtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqXG4gKiBXaGVuIHByb2Nlc3NpbmcgcmVsYXRpdmUgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIGlnbm9yZSBhbmNlc3RvciByb3V0ZXMgdGhhdFxuICogZG8gbm90IGNvbnRyaWJ1dGUgdG8gdGhlIHBhdGgsIHN1Y2ggdGhhdCBpbmRleC9wYXRobGVzcyBsYXlvdXQgcm91dGVzIGRvbid0XG4gKiBpbnRlcmZlcmUuXG4gKlxuICogRm9yIGV4YW1wbGUsIHdoZW4gbW92aW5nIGEgcm91dGUgZWxlbWVudCBpbnRvIGFuIGluZGV4IHJvdXRlIGFuZC9vciBhXG4gKiBwYXRobGVzcyBsYXlvdXQgcm91dGUsIHJlbGF0aXZlIGxpbmsgYmVoYXZpb3IgY29udGFpbmVkIHdpdGhpbiBzaG91bGQgc3RheVxuICogdGhlIHNhbWUuICBCb3RoIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdWxkIGxpbmsgYmFjayB0byB0aGUgcm9vdDpcbiAqXG4gKiAgIDxSb3V0ZSBwYXRoPVwiL1wiPlxuICogICAgIDxSb3V0ZSBwYXRoPVwiYWNjb3VudHNcIiBlbGVtZW50PXs8TGluayB0bz1cIi4uXCJ9PlxuICogICA8L1JvdXRlPlxuICpcbiAqICAgPFJvdXRlIHBhdGg9XCIvXCI+XG4gKiAgICAgPFJvdXRlIHBhdGg9XCJhY2NvdW50c1wiPlxuICogICAgICAgPFJvdXRlIGVsZW1lbnQ9ezxBY2NvdW50c0xheW91dCAvPn0+ICAgICAgIC8vIDwtLSBEb2VzIG5vdCBjb250cmlidXRlXG4gKiAgICAgICAgIDxSb3V0ZSBpbmRleCBlbGVtZW50PXs8TGluayB0bz1cIi4uXCJ9IC8+ICAvLyA8LS0gRG9lcyBub3QgY29udHJpYnV0ZVxuICogICAgICAgPC9Sb3V0ZVxuICogICAgIDwvUm91dGU+XG4gKiAgIDwvUm91dGU+XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcyhtYXRjaGVzKSB7XG4gIHJldHVybiBtYXRjaGVzLmZpbHRlcigobWF0Y2gsIGluZGV4KSA9PiBpbmRleCA9PT0gMCB8fCBtYXRjaC5yb3V0ZS5wYXRoICYmIG1hdGNoLnJvdXRlLnBhdGgubGVuZ3RoID4gMCk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRvKHRvQXJnLCByb3V0ZVBhdGhuYW1lcywgbG9jYXRpb25QYXRobmFtZSwgaXNQYXRoUmVsYXRpdmUpIHtcbiAgaWYgKGlzUGF0aFJlbGF0aXZlID09PSB2b2lkIDApIHtcbiAgICBpc1BhdGhSZWxhdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHRvO1xuXG4gIGlmICh0eXBlb2YgdG9BcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICB0byA9IHBhcnNlUGF0aCh0b0FyZyk7XG4gIH0gZWxzZSB7XG4gICAgdG8gPSBfZXh0ZW5kcyh7fSwgdG9BcmcpO1xuICAgIGludmFyaWFudCghdG8ucGF0aG5hbWUgfHwgIXRvLnBhdGhuYW1lLmluY2x1ZGVzKFwiP1wiKSwgZ2V0SW52YWxpZFBhdGhFcnJvcihcIj9cIiwgXCJwYXRobmFtZVwiLCBcInNlYXJjaFwiLCB0bykpO1xuICAgIGludmFyaWFudCghdG8ucGF0aG5hbWUgfHwgIXRvLnBhdGhuYW1lLmluY2x1ZGVzKFwiI1wiKSwgZ2V0SW52YWxpZFBhdGhFcnJvcihcIiNcIiwgXCJwYXRobmFtZVwiLCBcImhhc2hcIiwgdG8pKTtcbiAgICBpbnZhcmlhbnQoIXRvLnNlYXJjaCB8fCAhdG8uc2VhcmNoLmluY2x1ZGVzKFwiI1wiKSwgZ2V0SW52YWxpZFBhdGhFcnJvcihcIiNcIiwgXCJzZWFyY2hcIiwgXCJoYXNoXCIsIHRvKSk7XG4gIH1cblxuICBsZXQgaXNFbXB0eVBhdGggPSB0b0FyZyA9PT0gXCJcIiB8fCB0by5wYXRobmFtZSA9PT0gXCJcIjtcbiAgbGV0IHRvUGF0aG5hbWUgPSBpc0VtcHR5UGF0aCA/IFwiL1wiIDogdG8ucGF0aG5hbWU7XG4gIGxldCBmcm9tOyAvLyBSb3V0aW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBhdGhuYW1lIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICAvL1xuICAvLyBJZiBhIHBhdGhuYW1lIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQgaW4gYHRvYCwgaXQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZVxuICAvLyByb3V0ZSBjb250ZXh0LiBUaGlzIGlzIGV4cGxhaW5lZCBpbiBgTm90ZSBvbiBgPExpbmsgdG8+YCB2YWx1ZXNgIGluIG91clxuICAvLyBtaWdyYXRpb24gZ3VpZGUgZnJvbSB2NSBhcyBhIG1lYW5zIG9mIGRpc2FtYmlndWF0aW9uIGJldHdlZW4gYHRvYCB2YWx1ZXNcbiAgLy8gdGhhdCBiZWdpbiB3aXRoIGAvYCBhbmQgdGhvc2UgdGhhdCBkbyBub3QuIEhvd2V2ZXIsIHRoaXMgaXMgcHJvYmxlbWF0aWMgZm9yXG4gIC8vIGB0b2AgdmFsdWVzIHRoYXQgZG8gbm90IHByb3ZpZGUgYSBwYXRobmFtZS4gYHRvYCBjYW4gc2ltcGx5IGJlIGEgc2VhcmNoIG9yXG4gIC8vIGhhc2ggc3RyaW5nLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgbmF2aWdhdGlvbiBpcyByZWxhdGl2ZVxuICAvLyB0byB0aGUgY3VycmVudCBsb2NhdGlvbidzIHBhdGhuYW1lIGFuZCAqbm90KiB0aGUgcm91dGUgcGF0aG5hbWUuXG5cbiAgaWYgKGlzUGF0aFJlbGF0aXZlIHx8IHRvUGF0aG5hbWUgPT0gbnVsbCkge1xuICAgIGZyb20gPSBsb2NhdGlvblBhdGhuYW1lO1xuICB9IGVsc2Uge1xuICAgIGxldCByb3V0ZVBhdGhuYW1lSW5kZXggPSByb3V0ZVBhdGhuYW1lcy5sZW5ndGggLSAxO1xuXG4gICAgaWYgKHRvUGF0aG5hbWUuc3RhcnRzV2l0aChcIi4uXCIpKSB7XG4gICAgICBsZXQgdG9TZWdtZW50cyA9IHRvUGF0aG5hbWUuc3BsaXQoXCIvXCIpOyAvLyBFYWNoIGxlYWRpbmcgLi4gc2VnbWVudCBtZWFucyBcImdvIHVwIG9uZSByb3V0ZVwiIGluc3RlYWQgb2YgXCJnbyB1cCBvbmVcbiAgICAgIC8vIFVSTCBzZWdtZW50XCIuICBUaGlzIGlzIGEga2V5IGRpZmZlcmVuY2UgZnJvbSBob3cgPGEgaHJlZj4gd29ya3MgYW5kIGFcbiAgICAgIC8vIG1ham9yIHJlYXNvbiB3ZSBjYWxsIHRoaXMgYSBcInRvXCIgdmFsdWUgaW5zdGVhZCBvZiBhIFwiaHJlZlwiLlxuXG4gICAgICB3aGlsZSAodG9TZWdtZW50c1swXSA9PT0gXCIuLlwiKSB7XG4gICAgICAgIHRvU2VnbWVudHMuc2hpZnQoKTtcbiAgICAgICAgcm91dGVQYXRobmFtZUluZGV4IC09IDE7XG4gICAgICB9XG5cbiAgICAgIHRvLnBhdGhuYW1lID0gdG9TZWdtZW50cy5qb2luKFwiL1wiKTtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBtb3JlIFwiLi5cIiBzZWdtZW50cyB0aGFuIHBhcmVudCByb3V0ZXMsIHJlc29sdmUgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgcm9vdCAvIFVSTC5cblxuXG4gICAgZnJvbSA9IHJvdXRlUGF0aG5hbWVJbmRleCA+PSAwID8gcm91dGVQYXRobmFtZXNbcm91dGVQYXRobmFtZUluZGV4XSA6IFwiL1wiO1xuICB9XG5cbiAgbGV0IHBhdGggPSByZXNvbHZlUGF0aCh0bywgZnJvbSk7IC8vIEVuc3VyZSB0aGUgcGF0aG5hbWUgaGFzIGEgdHJhaWxpbmcgc2xhc2ggaWYgdGhlIG9yaWdpbmFsIFwidG9cIiBoYWQgb25lXG5cbiAgbGV0IGhhc0V4cGxpY2l0VHJhaWxpbmdTbGFzaCA9IHRvUGF0aG5hbWUgJiYgdG9QYXRobmFtZSAhPT0gXCIvXCIgJiYgdG9QYXRobmFtZS5lbmRzV2l0aChcIi9cIik7IC8vIE9yIGlmIHRoaXMgd2FzIGEgbGluayB0byB0aGUgY3VycmVudCBwYXRoIHdoaWNoIGhhcyBhIHRyYWlsaW5nIHNsYXNoXG5cbiAgbGV0IGhhc0N1cnJlbnRUcmFpbGluZ1NsYXNoID0gKGlzRW1wdHlQYXRoIHx8IHRvUGF0aG5hbWUgPT09IFwiLlwiKSAmJiBsb2NhdGlvblBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKTtcblxuICBpZiAoIXBhdGgucGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpICYmIChoYXNFeHBsaWNpdFRyYWlsaW5nU2xhc2ggfHwgaGFzQ3VycmVudFRyYWlsaW5nU2xhc2gpKSB7XG4gICAgcGF0aC5wYXRobmFtZSArPSBcIi9cIjtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldFRvUGF0aG5hbWUodG8pIHtcbiAgLy8gRW1wdHkgc3RyaW5ncyBzaG91bGQgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyAvIHBhdGhzXG4gIHJldHVybiB0byA9PT0gXCJcIiB8fCB0by5wYXRobmFtZSA9PT0gXCJcIiA/IFwiL1wiIDogdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKHRvKS5wYXRobmFtZSA6IHRvLnBhdGhuYW1lO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IGpvaW5QYXRocyA9IHBhdGhzID0+IHBhdGhzLmpvaW4oXCIvXCIpLnJlcGxhY2UoL1xcL1xcLysvZywgXCIvXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG5vcm1hbGl6ZVBhdGhuYW1lID0gcGF0aG5hbWUgPT4gcGF0aG5hbWUucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS5yZXBsYWNlKC9eXFwvKi8sIFwiL1wiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBub3JtYWxpemVTZWFyY2ggPSBzZWFyY2ggPT4gIXNlYXJjaCB8fCBzZWFyY2ggPT09IFwiP1wiID8gXCJcIiA6IHNlYXJjaC5zdGFydHNXaXRoKFwiP1wiKSA/IHNlYXJjaCA6IFwiP1wiICsgc2VhcmNoO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG5vcm1hbGl6ZUhhc2ggPSBoYXNoID0+ICFoYXNoIHx8IGhhc2ggPT09IFwiI1wiID8gXCJcIiA6IGhhc2guc3RhcnRzV2l0aChcIiNcIikgPyBoYXNoIDogXCIjXCIgKyBoYXNoO1xuLyoqXG4gKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIGNyZWF0aW5nIGBhcHBsaWNhdGlvbi9qc29uYCByZXNwb25zZXMuIENvbnZlcnRzIGBkYXRhYFxuICogdG8gSlNPTiBhbmQgc2V0cyB0aGUgYENvbnRlbnQtVHlwZWAgaGVhZGVyLlxuICovXG5cbmNvbnN0IGpzb24gPSBmdW5jdGlvbiBqc29uKGRhdGEsIGluaXQpIHtcbiAgaWYgKGluaXQgPT09IHZvaWQgMCkge1xuICAgIGluaXQgPSB7fTtcbiAgfVxuXG4gIGxldCByZXNwb25zZUluaXQgPSB0eXBlb2YgaW5pdCA9PT0gXCJudW1iZXJcIiA/IHtcbiAgICBzdGF0dXM6IGluaXRcbiAgfSA6IGluaXQ7XG4gIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVzcG9uc2VJbml0LmhlYWRlcnMpO1xuXG4gIGlmICghaGVhZGVycy5oYXMoXCJDb250ZW50LVR5cGVcIikpIHtcbiAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIik7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpLCBfZXh0ZW5kcyh7fSwgcmVzcG9uc2VJbml0LCB7XG4gICAgaGVhZGVyc1xuICB9KSk7XG59O1xuY2xhc3MgQWJvcnRlZERlZmVycmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuY2xhc3MgRGVmZXJyZWREYXRhIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMucGVuZGluZ0tleXMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gdW5kZWZpbmVkO1xuICAgIGludmFyaWFudChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRhdGEpLCBcImRlZmVyKCkgb25seSBhY2NlcHRzIHBsYWluIG9iamVjdHNcIik7IC8vIFNldCB1cCBhbiBBYm9ydENvbnRyb2xsZXIgKyBQcm9taXNlIHdlIGNhbiByYWNlIGFnYWluc3QgdG8gZXhpdCBlYXJseVxuICAgIC8vIGNhbmNlbGxhdGlvblxuXG4gICAgbGV0IHJlamVjdDtcbiAgICB0aGlzLmFib3J0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByKSA9PiByZWplY3QgPSByKTtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgb25BYm9ydCA9ICgpID0+IHJlamVjdChuZXcgQWJvcnRlZERlZmVycmVkRXJyb3IoXCJEZWZlcnJlZCBkYXRhIGFib3J0ZWRcIikpO1xuXG4gICAgdGhpcy51bmxpc3RlbkFib3J0U2lnbmFsID0gKCkgPT4gdGhpcy5jb250cm9sbGVyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG5cbiAgICB0aGlzLmNvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICB0aGlzLmRhdGEgPSBPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgX3JlZikgPT4ge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IF9yZWY7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgW2tleV06IHRoaXMudHJhY2tQcm9taXNlKGtleSwgdmFsdWUpXG4gICAgICB9KTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICB0cmFja1Byb21pc2Uoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdLZXlzLmFkZChrZXkpOyAvLyBXZSBzdG9yZSBhIGxpdHRsZSB3cmFwcGVyIHByb21pc2UgdGhhdCB3aWxsIGJlIGV4dGVuZGVkIHdpdGhcbiAgICAvLyBfZGF0YS9fZXJyb3IgcHJvcHMgdXBvbiByZXNvbHZlL3JlamVjdFxuXG4gICAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJhY2UoW3ZhbHVlLCB0aGlzLmFib3J0UHJvbWlzZV0pLnRoZW4oZGF0YSA9PiB0aGlzLm9uU2V0dGxlKHByb21pc2UsIGtleSwgbnVsbCwgZGF0YSksIGVycm9yID0+IHRoaXMub25TZXR0bGUocHJvbWlzZSwga2V5LCBlcnJvcikpOyAvLyBSZWdpc3RlciByZWplY3Rpb24gbGlzdGVuZXJzIHRvIGF2b2lkIHVuY2F1Z2h0IHByb21pc2UgcmVqZWN0aW9ucyBvblxuICAgIC8vIGVycm9ycyBvciBhYm9ydGVkIGRlZmVycmVkIHZhbHVlc1xuXG4gICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX3RyYWNrZWRcIiwge1xuICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBvblNldHRsZShwcm9taXNlLCBrZXksIGVycm9yLCBkYXRhKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCAmJiBlcnJvciBpbnN0YW5jZW9mIEFib3J0ZWREZWZlcnJlZEVycm9yKSB7XG4gICAgICB0aGlzLnVubGlzdGVuQWJvcnRTaWduYWwoKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZXJyb3JcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdLZXlzLmRlbGV0ZShrZXkpO1xuXG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgLy8gTm90aGluZyBsZWZ0IHRvIGFib3J0IVxuICAgICAgdGhpcy51bmxpc3RlbkFib3J0U2lnbmFsKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2NyaWJlciA9IHRoaXMuc3Vic2NyaWJlcjtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2Vycm9yXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiBlcnJvclxuICAgICAgfSk7XG4gICAgICBzdWJzY3JpYmVyICYmIHN1YnNjcmliZXIoZmFsc2UpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZGF0YVwiLCB7XG4gICAgICBnZXQ6ICgpID0+IGRhdGFcbiAgICB9KTtcbiAgICBzdWJzY3JpYmVyICYmIHN1YnNjcmliZXIoZmFsc2UpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3Vic2NyaWJlKGZuKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gZm47XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhpcy5wZW5kaW5nS2V5cy5mb3JFYWNoKCh2LCBrKSA9PiB0aGlzLnBlbmRpbmdLZXlzLmRlbGV0ZShrKSk7XG4gICAgbGV0IHN1YnNjcmliZXIgPSB0aGlzLnN1YnNjcmliZXI7XG4gICAgc3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZURhdGEoc2lnbmFsKSB7XG4gICAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBsZXQgb25BYm9ydCA9ICgpID0+IHRoaXMuY2FuY2VsKCk7XG5cbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBhYm9ydGVkID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0ZWQgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG5cbiAgICAgICAgICBpZiAoYWJvcnRlZCB8fCB0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJlc29sdmUoYWJvcnRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhYm9ydGVkO1xuICB9XG5cbiAgZ2V0IGRvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ0tleXMuc2l6ZSA9PT0gMDtcbiAgfVxuXG4gIGdldCB1bndyYXBwZWREYXRhKCkge1xuICAgIGludmFyaWFudCh0aGlzLmRhdGEgIT09IG51bGwgJiYgdGhpcy5kb25lLCBcIkNhbiBvbmx5IHVud3JhcCBkYXRhIG9uIGluaXRpYWxpemVkIGFuZCBzZXR0bGVkIGRlZmVycmVkc1wiKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5yZWR1Y2UoKGFjYywgX3JlZjIpID0+IHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBfcmVmMjtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICBba2V5XTogdW53cmFwVHJhY2tlZFByb21pc2UodmFsdWUpXG4gICAgICB9KTtcbiAgICB9LCB7fSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBpc1RyYWNrZWRQcm9taXNlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgJiYgdmFsdWUuX3RyYWNrZWQgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIHVud3JhcFRyYWNrZWRQcm9taXNlKHZhbHVlKSB7XG4gIGlmICghaXNUcmFja2VkUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAodmFsdWUuX2Vycm9yKSB7XG4gICAgdGhyb3cgdmFsdWUuX2Vycm9yO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLl9kYXRhO1xufVxuXG5mdW5jdGlvbiBkZWZlcihkYXRhKSB7XG4gIHJldHVybiBuZXcgRGVmZXJyZWREYXRhKGRhdGEpO1xufVxuLyoqXG4gKiBBIHJlZGlyZWN0IHJlc3BvbnNlLiBTZXRzIHRoZSBzdGF0dXMgY29kZSBhbmQgdGhlIGBMb2NhdGlvbmAgaGVhZGVyLlxuICogRGVmYXVsdHMgdG8gXCIzMDIgRm91bmRcIi5cbiAqL1xuXG5jb25zdCByZWRpcmVjdCA9IGZ1bmN0aW9uIHJlZGlyZWN0KHVybCwgaW5pdCkge1xuICBpZiAoaW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgaW5pdCA9IDMwMjtcbiAgfVxuXG4gIGxldCByZXNwb25zZUluaXQgPSBpbml0O1xuXG4gIGlmICh0eXBlb2YgcmVzcG9uc2VJbml0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZUluaXRcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZUluaXQuc3RhdHVzID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2VJbml0LnN0YXR1cyA9IDMwMjtcbiAgfVxuXG4gIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVzcG9uc2VJbml0LmhlYWRlcnMpO1xuICBoZWFkZXJzLnNldChcIkxvY2F0aW9uXCIsIHVybCk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgX2V4dGVuZHMoe30sIHJlc3BvbnNlSW5pdCwge1xuICAgIGhlYWRlcnNcbiAgfSkpO1xufTtcbi8qKlxuICogQHByaXZhdGVcbiAqIFV0aWxpdHkgY2xhc3Mgd2UgdXNlIHRvIGhvbGQgYXV0by11bndyYXBwZWQgNHh4LzV4eCBSZXNwb25zZSBib2RpZXNcbiAqL1xuXG5jbGFzcyBFcnJvclJlc3BvbnNlIHtcbiAgY29uc3RydWN0b3Ioc3RhdHVzLCBzdGF0dXNUZXh0LCBkYXRhKSB7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dCB8fCBcIlwiO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgYW4gRXJyb3JSZXNwb25zZSBnZW5lcmF0ZWQgZnJvbSBhIDR4eC81eHhcbiAqIFJlc3BvbnNlIHRocm93IGZyb20gYW4gYWN0aW9uL2xvYWRlclxuICovXG5cbmZ1bmN0aW9uIGlzUm91dGVFcnJvclJlc3BvbnNlKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlO1xufVxuXG5jb25zdCBJRExFX05BVklHQVRJT04gPSB7XG4gIHN0YXRlOiBcImlkbGVcIixcbiAgbG9jYXRpb246IHVuZGVmaW5lZCxcbiAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gIGZvcm1EYXRhOiB1bmRlZmluZWRcbn07XG5jb25zdCBJRExFX0ZFVENIRVIgPSB7XG4gIHN0YXRlOiBcImlkbGVcIixcbiAgZGF0YTogdW5kZWZpbmVkLFxuICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgZm9ybURhdGE6IHVuZGVmaW5lZFxufTtcbmNvbnN0IGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBpc1NlcnZlciA9ICFpc0Jyb3dzZXI7IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBjcmVhdGVSb3V0ZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyIGFuZCBsaXN0ZW4gdG8gaGlzdG9yeSBQT1AgbmF2aWdhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZXIoaW5pdCkge1xuICBpbnZhcmlhbnQoaW5pdC5yb3V0ZXMubGVuZ3RoID4gMCwgXCJZb3UgbXVzdCBwcm92aWRlIGEgbm9uLWVtcHR5IHJvdXRlcyBhcnJheSB0byBjcmVhdGVSb3V0ZXJcIik7XG4gIGxldCBkYXRhUm91dGVzID0gY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcyhpbml0LnJvdXRlcyk7IC8vIENsZWFudXAgZnVuY3Rpb24gZm9yIGhpc3RvcnlcblxuICBsZXQgdW5saXN0ZW5IaXN0b3J5ID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbnMgdG8gY2FsbCBvbiBhbGwgc3RhdGUgY2hhbmdlc1xuXG4gIGxldCBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBvYmplY3QgdG8gaG9sZCBzY3JvbGwgcmVzdG9yYXRpb24gbG9jYXRpb25zIGR1cmluZyByb3V0aW5nXG5cbiAgbGV0IHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbiB0byBnZXQgc2Nyb2xsIHJlc3RvcmF0aW9uIGtleXNcblxuICBsZXQgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBudWxsOyAvLyBFeHRlcm5hbGx5LXByb3ZpZGVkIGZ1bmN0aW9uIHRvIGdldCBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxuXG4gIGxldCBnZXRTY3JvbGxQb3NpdGlvbiA9IG51bGw7IC8vIE9uZS10aW1lIGZsYWcgdG8gY29udHJvbCB0aGUgaW5pdGlhbCBoeWRyYXRpb24gc2Nyb2xsIHJlc3RvcmF0aW9uLiAgQmVjYXVzZVxuICAvLyB3ZSBkb24ndCBnZXQgdGhlIHNhdmVkIHBvc2l0aW9ucyBmcm9tIDxTY3JvbGxSZXN0b3JhdGlvbiAvPiB1bnRpbCBfYWZ0ZXJfXG4gIC8vIHRoZSBpbml0aWFsIHJlbmRlciwgd2UgbmVlZCB0byBtYW51YWxseSB0cmlnZ2VyIGEgc2VwYXJhdGUgdXBkYXRlU3RhdGUgdG9cbiAgLy8gc2VuZCBhbG9uZyB0aGUgcmVzdG9yZVNjcm9sbFBvc2l0aW9uXG5cbiAgbGV0IGluaXRpYWxTY3JvbGxSZXN0b3JlZCA9IGZhbHNlO1xuICBsZXQgaW5pdGlhbE1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBpbml0Lmhpc3RvcnkubG9jYXRpb24sIGluaXQuYmFzZW5hbWUpO1xuICBsZXQgaW5pdGlhbEVycm9ycyA9IG51bGw7XG5cbiAgaWYgKGluaXRpYWxNYXRjaGVzID09IG51bGwpIHtcbiAgICAvLyBJZiB3ZSBkbyBub3QgbWF0Y2ggYSB1c2VyLXByb3ZpZGVkLXJvdXRlLCBmYWxsIGJhY2sgdG8gdGhlIHJvb3RcbiAgICAvLyB0byBhbGxvdyB0aGUgZXJyb3IgYm91bmRhcnkgdG8gdGFrZSBvdmVyXG4gICAgbGV0IHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICByb3V0ZSxcbiAgICAgIGVycm9yXG4gICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTtcbiAgICBpbml0aWFsTWF0Y2hlcyA9IG1hdGNoZXM7XG4gICAgaW5pdGlhbEVycm9ycyA9IHtcbiAgICAgIFtyb3V0ZS5pZF06IGVycm9yXG4gICAgfTtcbiAgfVxuXG4gIGxldCBpbml0aWFsaXplZCA9ICFpbml0aWFsTWF0Y2hlcy5zb21lKG0gPT4gbS5yb3V0ZS5sb2FkZXIpIHx8IGluaXQuaHlkcmF0aW9uRGF0YSAhPSBudWxsO1xuICBsZXQgcm91dGVyO1xuICBsZXQgc3RhdGUgPSB7XG4gICAgaGlzdG9yeUFjdGlvbjogaW5pdC5oaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaW5pdC5oaXN0b3J5LmxvY2F0aW9uLFxuICAgIG1hdGNoZXM6IGluaXRpYWxNYXRjaGVzLFxuICAgIGluaXRpYWxpemVkLFxuICAgIG5hdmlnYXRpb246IElETEVfTkFWSUdBVElPTixcbiAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb246IG51bGwsXG4gICAgcHJldmVudFNjcm9sbFJlc2V0OiBmYWxzZSxcbiAgICByZXZhbGlkYXRpb246IFwiaWRsZVwiLFxuICAgIGxvYWRlckRhdGE6IGluaXQuaHlkcmF0aW9uRGF0YSAmJiBpbml0Lmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YSB8fCB7fSxcbiAgICBhY3Rpb25EYXRhOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmFjdGlvbkRhdGEgfHwgbnVsbCxcbiAgICBlcnJvcnM6IGluaXQuaHlkcmF0aW9uRGF0YSAmJiBpbml0Lmh5ZHJhdGlvbkRhdGEuZXJyb3JzIHx8IGluaXRpYWxFcnJvcnMsXG4gICAgZmV0Y2hlcnM6IG5ldyBNYXAoKVxuICB9OyAvLyAtLSBTdGF0ZWZ1bCBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gbWFuYWdlIG5hdmlnYXRpb25zIC0tXG4gIC8vIEN1cnJlbnQgbmF2aWdhdGlvbiBpbiBwcm9ncmVzcyAodG8gYmUgY29tbWl0dGVkIGluIGNvbXBsZXRlTmF2aWdhdGlvbilcblxuICBsZXQgcGVuZGluZ0FjdGlvbiA9IEFjdGlvbi5Qb3A7IC8vIFNob3VsZCB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHByZXZlbnQgdGhlIHNjcm9sbCByZXNldCBpZiBzY3JvbGwgY2Fubm90XG4gIC8vIGJlIHJlc3RvcmVkP1xuXG4gIGxldCBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gZmFsc2U7IC8vIEFib3J0Q29udHJvbGxlciBmb3IgdGhlIGFjdGl2ZSBuYXZpZ2F0aW9uXG5cbiAgbGV0IHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlcjsgLy8gV2UgdXNlIHRoaXMgdG8gYXZvaWQgdG91Y2hpbmcgaGlzdG9yeSBpbiBjb21wbGV0ZU5hdmlnYXRpb24gaWYgYVxuICAvLyByZXZhbGlkYXRpb24gaXMgZW50aXJlbHkgdW5pbnRlcnJ1cHRlZFxuXG4gIGxldCBpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24gPSBmYWxzZTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgZmxhZyB0byBmb3JjZSByZXZhbGlkYXRpb24gb2YgYWxsIGxvYWRlcnM6XG4gIC8vICAtIHN1Ym1pc3Npb25zIChjb21wbGV0ZWQgb3IgaW50ZXJydXB0ZWQpXG4gIC8vICAtIHVzZVJldmFsaWRhdGUoKVxuICAvLyAgLSBYLVJlbWl4LVJldmFsaWRhdGUgKGZyb20gcmVkaXJlY3QpXG5cbiAgbGV0IGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSBmYWxzZTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgYXJyYXkgdG8gY2FwdHVyZSByb3V0ZXMgdGhhdCByZXF1aXJlIHJldmFsaWRhdGlvbiBkdWVcbiAgLy8gdG8gYSBjYW5jZWxsZWQgZGVmZXJyZWQgb24gYWN0aW9uIHN1Ym1pc3Npb25cblxuICBsZXQgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMgPSBbXTsgLy8gVXNlIHRoaXMgaW50ZXJuYWwgYXJyYXkgdG8gY2FwdHVyZSBmZXRjaGVyIGxvYWRzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYnkgYW5cbiAgLy8gYWN0aW9uIG5hdmlnYXRpb24gYW5kIHJlcXVpcmUgcmV2YWxpZGF0aW9uXG5cbiAgbGV0IGNhbmNlbGxlZEZldGNoZXJMb2FkcyA9IFtdOyAvLyBBYm9ydENvbnRyb2xsZXJzIGZvciBhbnkgaW4tZmxpZ2h0IGZldGNoZXJzXG5cbiAgbGV0IGZldGNoQ29udHJvbGxlcnMgPSBuZXcgTWFwKCk7IC8vIFRyYWNrIGxvYWRzIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHN0YXJ0ZWRcblxuICBsZXQgaW5jcmVtZW50aW5nTG9hZElkID0gMDsgLy8gVHJhY2sgdGhlIG91dHN0YW5kaW5nIHBlbmRpbmcgbmF2aWdhdGlvbiBkYXRhIGxvYWQgdG8gYmUgY29tcGFyZWQgYWdhaW5zdFxuICAvLyB0aGUgZ2xvYmFsbHkgaW5jcmVtZW50aW5nIGxvYWQgd2hlbiBhIGZldGNoZXIgbG9hZCBsYW5kcyBhZnRlciBhIGNvbXBsZXRlZFxuICAvLyBuYXZpZ2F0aW9uXG5cbiAgbGV0IHBlbmRpbmdOYXZpZ2F0aW9uTG9hZElkID0gLTE7IC8vIEZldGNoZXJzIHRoYXQgdHJpZ2dlcmVkIGRhdGEgcmVsb2FkcyBhcyBhIHJlc3VsdCBvZiB0aGVpciBhY3Rpb25zXG5cbiAgbGV0IGZldGNoUmVsb2FkSWRzID0gbmV3IE1hcCgpOyAvLyBGZXRjaGVycyB0aGF0IHRyaWdnZXJlZCByZWRpcmVjdCBuYXZpZ2F0aW9ucyBmcm9tIHRoZWlyIGFjdGlvbnNcblxuICBsZXQgZmV0Y2hSZWRpcmVjdElkcyA9IG5ldyBTZXQoKTsgLy8gTW9zdCByZWNlbnQgaHJlZi9tYXRjaCBmb3IgZmV0Y2hlci5sb2FkIGNhbGxzIGZvciBmZXRjaGVyc1xuXG4gIGxldCBmZXRjaExvYWRNYXRjaGVzID0gbmV3IE1hcCgpOyAvLyBTdG9yZSBEZWZlcnJlZERhdGEgaW5zdGFuY2VzIGZvciBhY3RpdmUgcm91dGUgbWF0Y2hlcy4gIFdoZW4gYVxuICAvLyByb3V0ZSBsb2FkZXIgcmV0dXJucyBkZWZlcigpIHdlIHN0aWNrIG9uZSBpbiBoZXJlLiAgVGhlbiwgd2hlbiBhIG5lc3RlZFxuICAvLyBwcm9taXNlIHJlc29sdmVzIHdlIHVwZGF0ZSBsb2FkZXJEYXRhLiAgSWYgYSBuZXcgbmF2aWdhdGlvbiBzdGFydHMgd2VcbiAgLy8gY2FuY2VsIGFjdGl2ZSBkZWZlcnJlZHMgZm9yIGVsaW1pbmF0ZWQgcm91dGVzLlxuXG4gIGxldCBhY3RpdmVEZWZlcnJlZHMgPSBuZXcgTWFwKCk7IC8vIEluaXRpYWxpemUgdGhlIHJvdXRlciwgYWxsIHNpZGUgZWZmZWN0cyBzaG91bGQgYmUga2lja2VkIG9mZiBmcm9tIGhlcmUuXG4gIC8vIEltcGxlbWVudGVkIGFzIGEgRmx1ZW50IEFQSSBmb3IgZWFzZSBvZjpcbiAgLy8gICBsZXQgcm91dGVyID0gY3JlYXRlUm91dGVyKGluaXQpLmluaXRpYWxpemUoKTtcblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIC8vIElmIGhpc3RvcnkgaW5mb3JtcyB1cyBvZiBhIFBPUCBuYXZpZ2F0aW9uLCBzdGFydCB0aGUgbmF2aWdhdGlvbiBidXQgZG8gbm90IHVwZGF0ZVxuICAgIC8vIHN0YXRlLiAgV2UnbGwgdXBkYXRlIG91ciBvd24gc3RhdGUgb25jZSB0aGUgbmF2aWdhdGlvbiBjb21wbGV0ZXNcbiAgICB1bmxpc3Rlbkhpc3RvcnkgPSBpbml0Lmhpc3RvcnkubGlzdGVuKF9yZWYgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgYWN0aW9uOiBoaXN0b3J5QWN0aW9uLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gc3RhcnROYXZpZ2F0aW9uKGhpc3RvcnlBY3Rpb24sIGxvY2F0aW9uKTtcbiAgICB9KTsgLy8gS2ljayBvZmYgaW5pdGlhbCBkYXRhIGxvYWQgaWYgbmVlZGVkLiAgVXNlIFBvcCB0byBhdm9pZCBtb2RpZnlpbmcgaGlzdG9yeVxuXG4gICAgaWYgKCFzdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgc3RhcnROYXZpZ2F0aW9uKEFjdGlvbi5Qb3AsIHN0YXRlLmxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVyO1xuICB9IC8vIENsZWFuIHVwIGEgcm91dGVyIGFuZCBpdCdzIHNpZGUgZWZmZWN0c1xuXG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBpZiAodW5saXN0ZW5IaXN0b3J5KSB7XG4gICAgICB1bmxpc3Rlbkhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciAmJiBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBzdGF0ZS5mZXRjaGVycy5mb3JFYWNoKChfLCBrZXkpID0+IGRlbGV0ZUZldGNoZXIoa2V5KSk7XG4gIH0gLy8gU3Vic2NyaWJlIHRvIHN0YXRlIHVwZGF0ZXMgZm9yIHRoZSByb3V0ZXJcblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShmbikge1xuICAgIHN1YnNjcmliZXJzLmFkZChmbik7XG4gICAgcmV0dXJuICgpID0+IHN1YnNjcmliZXJzLmRlbGV0ZShmbik7XG4gIH0gLy8gVXBkYXRlIG91ciBzdGF0ZSBhbmQgbm90aWZ5IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgdGhlIGNoYW5nZVxuXG5cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdGUobmV3U3RhdGUpIHtcbiAgICBzdGF0ZSA9IF9leHRlbmRzKHt9LCBzdGF0ZSwgbmV3U3RhdGUpO1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goc3Vic2NyaWJlciA9PiBzdWJzY3JpYmVyKHN0YXRlKSk7XG4gIH0gLy8gQ29tcGxldGUgYSBuYXZpZ2F0aW9uIHJldHVybmluZyB0aGUgc3RhdGUubmF2aWdhdGlvbiBiYWNrIHRvIHRoZSBJRExFX05BVklHQVRJT05cbiAgLy8gYW5kIHNldHRpbmcgc3RhdGUuW2hpc3RvcnlBY3Rpb24vbG9jYXRpb24vbWF0Y2hlc10gdG8gdGhlIG5ldyByb3V0ZS5cbiAgLy8gLSBMb2NhdGlvbiBpcyBhIHJlcXVpcmVkIHBhcmFtXG4gIC8vIC0gTmF2aWdhdGlvbiB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gSURMRV9OQVZJR0FUSU9OXG4gIC8vIC0gQ2FuIHBhc3MgYW55IG90aGVyIHN0YXRlIGluIG5ld1N0YXRlXG5cblxuICBmdW5jdGlvbiBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIG5ld1N0YXRlKSB7XG4gICAgdmFyIF9zdGF0ZSRuYXZpZ2F0aW9uJGZvcjtcblxuICAgIC8vIERlZHVjZSBpZiB3ZSdyZSBpbiBhIGxvYWRpbmcvYWN0aW9uUmVsb2FkIHN0YXRlOlxuICAgIC8vIC0gV2UgaGF2ZSBjb21taXR0ZWQgYWN0aW9uRGF0YSBpbiB0aGUgc3RvcmVcbiAgICAvLyAtIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gd2FzIGEgc3VibWlzc2lvblxuICAgIC8vIC0gV2UncmUgcGFzdCB0aGUgc3VibWl0dGluZyBzdGF0ZSBhbmQgaW50byB0aGUgbG9hZGluZyBzdGF0ZVxuICAgIC8vIC0gVGhlIGxvY2F0aW9uIHdlJ3ZlIGZpbmlzaGVkIGxvYWRpbmcgaXMgZGlmZmVyZW50IGZyb20gdGhlIHN1Ym1pc3Npb25cbiAgICAvLyAgIGxvY2F0aW9uLCBpbmRpY2F0aW5nIHdlIHJlZGlyZWN0ZWQgZnJvbSB0aGUgYWN0aW9uIChhdm9pZHMgZmFsc2VcbiAgICAvLyAgIHBvc2l0aXZlcyBmb3IgbG9hZGluZy9zdWJtaXNzaW9uUmVkaXJlY3Qgd2hlbiBhY3Rpb25EYXRhIHJldHVybmVkXG4gICAgLy8gICBvbiBhIHByaW9yIHN1Ym1pc3Npb24pXG4gICAgbGV0IGlzQWN0aW9uUmVsb2FkID0gc3RhdGUuYWN0aW9uRGF0YSAhPSBudWxsICYmIHN0YXRlLm5hdmlnYXRpb24uZm9ybU1ldGhvZCAhPSBudWxsICYmIHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwibG9hZGluZ1wiICYmICgoX3N0YXRlJG5hdmlnYXRpb24kZm9yID0gc3RhdGUubmF2aWdhdGlvbi5mb3JtQWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3N0YXRlJG5hdmlnYXRpb24kZm9yLnNwbGl0KFwiP1wiKVswXSkgPT09IGxvY2F0aW9uLnBhdGhuYW1lOyAvLyBBbHdheXMgcHJlc2VydmUgYW55IGV4aXN0aW5nIGxvYWRlckRhdGEgZnJvbSByZS11c2VkIHJvdXRlc1xuXG4gICAgbGV0IG5ld0xvYWRlckRhdGEgPSBuZXdTdGF0ZS5sb2FkZXJEYXRhID8ge1xuICAgICAgbG9hZGVyRGF0YTogbWVyZ2VMb2FkZXJEYXRhKHN0YXRlLmxvYWRlckRhdGEsIG5ld1N0YXRlLmxvYWRlckRhdGEsIG5ld1N0YXRlLm1hdGNoZXMgfHwgW10pXG4gICAgfSA6IHt9O1xuICAgIHVwZGF0ZVN0YXRlKF9leHRlbmRzKHt9LCBpc0FjdGlvblJlbG9hZCA/IHt9IDoge1xuICAgICAgYWN0aW9uRGF0YTogbnVsbFxuICAgIH0sIG5ld1N0YXRlLCBuZXdMb2FkZXJEYXRhLCB7XG4gICAgICBoaXN0b3J5QWN0aW9uOiBwZW5kaW5nQWN0aW9uLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBpbml0aWFsaXplZDogdHJ1ZSxcbiAgICAgIG5hdmlnYXRpb246IElETEVfTkFWSUdBVElPTixcbiAgICAgIHJldmFsaWRhdGlvbjogXCJpZGxlXCIsXG4gICAgICAvLyBEb24ndCByZXN0b3JlIG9uIHN1Ym1pc3Npb24gbmF2aWdhdGlvbnNcbiAgICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbjogc3RhdGUubmF2aWdhdGlvbi5mb3JtRGF0YSA/IGZhbHNlIDogZ2V0U2F2ZWRTY3JvbGxQb3NpdGlvbihsb2NhdGlvbiwgbmV3U3RhdGUubWF0Y2hlcyB8fCBzdGF0ZS5tYXRjaGVzKSxcbiAgICAgIHByZXZlbnRTY3JvbGxSZXNldDogcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldFxuICAgIH0pKTtcblxuICAgIGlmIChpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24pIDsgZWxzZSBpZiAocGVuZGluZ0FjdGlvbiA9PT0gQWN0aW9uLlBvcCkgOyBlbHNlIGlmIChwZW5kaW5nQWN0aW9uID09PSBBY3Rpb24uUHVzaCkge1xuICAgICAgaW5pdC5oaXN0b3J5LnB1c2gobG9jYXRpb24sIGxvY2F0aW9uLnN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHBlbmRpbmdBY3Rpb24gPT09IEFjdGlvbi5SZXBsYWNlKSB7XG4gICAgICBpbml0Lmhpc3RvcnkucmVwbGFjZShsb2NhdGlvbiwgbG9jYXRpb24uc3RhdGUpO1xuICAgIH0gLy8gUmVzZXQgc3RhdGVmdWwgbmF2aWdhdGlvbiB2YXJzXG5cblxuICAgIHBlbmRpbmdBY3Rpb24gPSBBY3Rpb24uUG9wO1xuICAgIHBlbmRpbmdQcmV2ZW50U2Nyb2xsUmVzZXQgPSBmYWxzZTtcbiAgICBpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMgPSBbXTtcbiAgICBjYW5jZWxsZWRGZXRjaGVyTG9hZHMgPSBbXTtcbiAgfSAvLyBUcmlnZ2VyIGEgbmF2aWdhdGlvbiBldmVudCwgd2hpY2ggY2FuIGVpdGhlciBiZSBhIG51bWVyaWNhbCBQT1Agb3IgYSBQVVNIXG4gIC8vIHJlcGxhY2Ugd2l0aCBhbiBvcHRpb25hbCBzdWJtaXNzaW9uXG5cblxuICBhc3luYyBmdW5jdGlvbiBuYXZpZ2F0ZSh0bywgb3B0cykge1xuICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGluaXQuaGlzdG9yeS5nbyh0byk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIHBhdGgsXG4gICAgICBzdWJtaXNzaW9uLFxuICAgICAgZXJyb3JcbiAgICB9ID0gbm9ybWFsaXplTmF2aWdhdGVPcHRpb25zKHRvLCBvcHRzKTtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihzdGF0ZS5sb2NhdGlvbiwgcGF0aCwgb3B0cyAmJiBvcHRzLnN0YXRlKTsgLy8gV2hlbiB1c2luZyBuYXZpZ2F0ZSBhcyBhIFBVU0gvUkVQTEFDRSB3ZSBhcmVuJ3QgcmVhZGluZyBhbiBhbHJlYWR5LWVuY29kZWRcbiAgICAvLyBVUkwgZnJvbSB3aW5kb3cubG9jYXRpb24sIHNvIHdlIG5lZWQgdG8gZW5jb2RlIGl0IGhlcmUgc28gdGhlIGJlaGF2aW9yXG4gICAgLy8gcmVtYWlucyB0aGUgc2FtZSBhcyBQT1AgYW5kIG5vbi1kYXRhLXJvdXRlciB1c2FnZXMuICBuZXcgVVJMKCkgZG9lcyBhbGxcbiAgICAvLyB0aGUgc2FtZSBlbmNvZGluZyB3ZSdkIGdldCBmcm9tIGEgaGlzdG9yeS5wdXNoU3RhdGUvd2luZG93LmxvY2F0aW9uIHJlYWRcbiAgICAvLyB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBoaXN0b3J5XG5cbiAgICBsb2NhdGlvbiA9IGluaXQuaGlzdG9yeS5lbmNvZGVMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgbGV0IGhpc3RvcnlBY3Rpb24gPSAob3B0cyAmJiBvcHRzLnJlcGxhY2UpID09PSB0cnVlIHx8IHN1Ym1pc3Npb24gIT0gbnVsbCA/IEFjdGlvbi5SZXBsYWNlIDogQWN0aW9uLlB1c2g7XG4gICAgbGV0IHByZXZlbnRTY3JvbGxSZXNldCA9IG9wdHMgJiYgXCJwcmV2ZW50U2Nyb2xsUmVzZXRcIiBpbiBvcHRzID8gb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXQgPT09IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGF3YWl0IHN0YXJ0TmF2aWdhdGlvbihoaXN0b3J5QWN0aW9uLCBsb2NhdGlvbiwge1xuICAgICAgc3VibWlzc2lvbixcbiAgICAgIC8vIFNlbmQgdGhyb3VnaCB0aGUgZm9ybURhdGEgc2VyaWFsaXphdGlvbiBlcnJvciBpZiB3ZSBoYXZlIG9uZSBzbyB3ZSBjYW5cbiAgICAgIC8vIHJlbmRlciBhdCB0aGUgcmlnaHQgZXJyb3IgYm91bmRhcnkgYWZ0ZXIgd2UgbWF0Y2ggcm91dGVzXG4gICAgICBwZW5kaW5nRXJyb3I6IGVycm9yLFxuICAgICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgICAgcmVwbGFjZTogb3B0cyAmJiBvcHRzLnJlcGxhY2VcbiAgICB9KTtcbiAgfSAvLyBSZXZhbGlkYXRlIGFsbCBjdXJyZW50IGxvYWRlcnMuICBJZiBhIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3Mgb3IgaWYgdGhpc1xuICAvLyBpcyBpbnRlcnJ1cHRlZCBieSBhIG5hdmlnYXRpb24sIGFsbG93IHRoaXMgdG8gXCJzdWNjZWVkXCIgYnkgY2FsbGluZyBhbGxcbiAgLy8gbG9hZGVycyBkdXJpbmcgdGhlIG5leHQgbG9hZGVyIHJvdW5kXG5cblxuICBmdW5jdGlvbiByZXZhbGlkYXRlKCkge1xuICAgIGludGVycnVwdEFjdGl2ZUxvYWRzKCk7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgcmV2YWxpZGF0aW9uOiBcImxvYWRpbmdcIlxuICAgIH0pOyAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgc3VibWl0dGluZyBhbiBhY3Rpb24sIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXdcbiAgICAvLyBuYXZpZ2F0aW9uLCB3ZSdsbCBqdXN0IGxldCB0aGUgZm9sbG93IHVwIGxvYWRlciBleGVjdXRpb24gY2FsbCBhbGwgbG9hZGVyc1xuXG4gICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwic3VibWl0dGluZ1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaW4gYW4gaWRsZSBzdGF0ZSwgc3RhcnQgYSBuZXcgbmF2aWdhdGlvbiBmb3IgdGhlIGN1cnJlbnRcbiAgICAvLyBhY3Rpb24vbG9jYXRpb24gYW5kIG1hcmsgaXQgYXMgdW5pbnRlcnJ1cHRlZCwgd2hpY2ggd2lsbCBza2lwIHRoZSBoaXN0b3J5XG4gICAgLy8gdXBkYXRlIGluIGNvbXBsZXRlTmF2aWdhdGlvblxuXG5cbiAgICBpZiAoc3RhdGUubmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJpZGxlXCIpIHtcbiAgICAgIHN0YXJ0TmF2aWdhdGlvbihzdGF0ZS5oaXN0b3J5QWN0aW9uLCBzdGF0ZS5sb2NhdGlvbiwge1xuICAgICAgICBzdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb246IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBsb2FkaW5nIHN0YXRlLCBqdXN0IHN0YXJ0IGEgbmV3XG4gICAgLy8gbmF2aWdhdGlvbiB0byB0aGUgbmF2aWdhdGlvbi5sb2NhdGlvbiBidXQgZG8gbm90IHRyaWdnZXIgYW4gdW5pbnRlcnJ1cHRlZFxuICAgIC8vIHJldmFsaWRhdGlvbiBzbyB0aGF0IGhpc3RvcnkgY29ycmVjdGx5IHVwZGF0ZXMgb25jZSB0aGUgbmF2aWdhdGlvbiBjb21wbGV0ZXNcblxuXG4gICAgc3RhcnROYXZpZ2F0aW9uKHBlbmRpbmdBY3Rpb24gfHwgc3RhdGUuaGlzdG9yeUFjdGlvbiwgc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiwge1xuICAgICAgb3ZlcnJpZGVOYXZpZ2F0aW9uOiBzdGF0ZS5uYXZpZ2F0aW9uXG4gICAgfSk7XG4gIH0gLy8gU3RhcnQgYSBuYXZpZ2F0aW9uIHRvIHRoZSBnaXZlbiBhY3Rpb24vbG9jYXRpb24uICBDYW4gb3B0aW9uYWxseSBwcm92aWRlIGFcbiAgLy8gb3ZlcnJpZGVOYXZpZ2F0aW9uIHdoaWNoIHdpbGwgb3ZlcnJpZGUgdGhlIG5vcm1hbExvYWQgaW4gdGhlIGNhc2Ugb2YgYSByZWRpcmVjdFxuICAvLyBuYXZpZ2F0aW9uXG5cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydE5hdmlnYXRpb24oaGlzdG9yeUFjdGlvbiwgbG9jYXRpb24sIG9wdHMpIHtcbiAgICAvLyBBYm9ydCBhbnkgaW4tcHJvZ3Jlc3MgbmF2aWdhdGlvbnMgYW5kIHN0YXJ0IGEgbmV3IG9uZS4gVW5zZXQgYW55IG9uZ29pbmdcbiAgICAvLyB1bmludGVycnVwdGVkIHJldmFsaWRhdGlvbnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLCBzaW5jZSB3ZSB3YW50IHRoaXNcbiAgICAvLyBuZXcgbmF2aWdhdGlvbiB0byB1cGRhdGUgaGlzdG9yeSBub3JtYWxseVxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciAmJiBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBudWxsO1xuICAgIHBlbmRpbmdBY3Rpb24gPSBoaXN0b3J5QWN0aW9uO1xuICAgIGlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbiA9IChvcHRzICYmIG9wdHMuc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKSA9PT0gdHJ1ZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gZXZlcnkgdGltZSB3ZSBzdGFydCBhIG5ldyBuYXZpZ2F0aW9uLFxuICAgIC8vIGFuZCB0cmFjayB3aGV0aGVyIHdlIHNob3VsZCByZXNldCBzY3JvbGwgb24gY29tcGxldGlvblxuXG4gICAgc2F2ZVNjcm9sbFBvc2l0aW9uKHN0YXRlLmxvY2F0aW9uLCBzdGF0ZS5tYXRjaGVzKTtcbiAgICBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gKG9wdHMgJiYgb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXQpID09PSB0cnVlO1xuICAgIGxldCBsb2FkaW5nTmF2aWdhdGlvbiA9IG9wdHMgJiYgb3B0cy5vdmVycmlkZU5hdmlnYXRpb247XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBsb2NhdGlvbiwgaW5pdC5iYXNlbmFtZSk7IC8vIFNob3J0IGNpcmN1aXQgd2l0aCBhIDQwNCBvbiB0aGUgcm9vdCBlcnJvciBib3VuZGFyeSBpZiB3ZSBtYXRjaCBub3RoaW5nXG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIG1hdGNoZXM6IG5vdEZvdW5kTWF0Y2hlcyxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gZ2V0Tm90Rm91bmRNYXRjaGVzKGRhdGFSb3V0ZXMpOyAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZGVmZXJyZWQgb24gNDA0cyBzaW5jZSB3ZSBkb24ndCBrZWVwIGFueSByb3V0ZXNcblxuICAgICAgY2FuY2VsQWN0aXZlRGVmZXJyZWRzKCk7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgW3JvdXRlLmlkXTogZXJyb3JcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTaG9ydCBjaXJjdWl0IGlmIGl0J3Mgb25seSBhIGhhc2ggY2hhbmdlXG5cblxuICAgIGlmIChpc0hhc2hDaGFuZ2VPbmx5KHN0YXRlLmxvY2F0aW9uLCBsb2NhdGlvbikpIHtcbiAgICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBhIGNvbnRyb2xsZXIvUmVxdWVzdCBmb3IgdGhpcyBuYXZpZ2F0aW9uXG5cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgcmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QobG9jYXRpb24sIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlci5zaWduYWwsIG9wdHMgJiYgb3B0cy5zdWJtaXNzaW9uKTtcbiAgICBsZXQgcGVuZGluZ0FjdGlvbkRhdGE7XG4gICAgbGV0IHBlbmRpbmdFcnJvcjtcblxuICAgIGlmIChvcHRzICYmIG9wdHMucGVuZGluZ0Vycm9yKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgcGVuZGluZ0Vycm9yLCBpdCBtZWFucyB0aGUgdXNlciBhdHRlbXB0ZWQgYSBHRVQgc3VibWlzc2lvblxuICAgICAgLy8gd2l0aCBiaW5hcnkgRm9ybURhdGEgc28gYXNzaWduIGhlcmUgYW5kIHNraXAgdG8gaGFuZGxlTG9hZGVycy4gIFRoYXRcbiAgICAgIC8vIHdheSB3ZSBoYW5kbGUgY2FsbGluZyBsb2FkZXJzIGFib3ZlIHRoZSBib3VuZGFyeSBldGMuICBJdCdzIG5vdCByZWFsbHlcbiAgICAgIC8vIGRpZmZlcmVudCBmcm9tIGFuIGFjdGlvbkVycm9yIGluIHRoYXQgc2Vuc2UuXG4gICAgICBwZW5kaW5nRXJyb3IgPSB7XG4gICAgICAgIFtmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMpLnJvdXRlLmlkXTogb3B0cy5wZW5kaW5nRXJyb3JcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRzICYmIG9wdHMuc3VibWlzc2lvbikge1xuICAgICAgLy8gQ2FsbCBhY3Rpb24gaWYgd2UgcmVjZWl2ZWQgYW4gYWN0aW9uIHN1Ym1pc3Npb25cbiAgICAgIGxldCBhY3Rpb25PdXRwdXQgPSBhd2FpdCBoYW5kbGVBY3Rpb24ocmVxdWVzdCwgbG9jYXRpb24sIG9wdHMuc3VibWlzc2lvbiwgbWF0Y2hlcywge1xuICAgICAgICByZXBsYWNlOiBvcHRzLnJlcGxhY2VcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0aW9uT3V0cHV0LnNob3J0Q2lyY3VpdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGVuZGluZ0FjdGlvbkRhdGEgPSBhY3Rpb25PdXRwdXQucGVuZGluZ0FjdGlvbkRhdGE7XG4gICAgICBwZW5kaW5nRXJyb3IgPSBhY3Rpb25PdXRwdXQucGVuZGluZ0FjdGlvbkVycm9yO1xuXG4gICAgICBsZXQgbmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwgb3B0cy5zdWJtaXNzaW9uKTtcblxuICAgICAgbG9hZGluZ05hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgIH0gLy8gQ2FsbCBsb2FkZXJzXG5cblxuICAgIGxldCB7XG4gICAgICBzaG9ydENpcmN1aXRlZCxcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gYXdhaXQgaGFuZGxlTG9hZGVycyhyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgbG9hZGluZ05hdmlnYXRpb24sIG9wdHMgJiYgb3B0cy5zdWJtaXNzaW9uLCBvcHRzICYmIG9wdHMucmVwbGFjZSwgcGVuZGluZ0FjdGlvbkRhdGEsIHBlbmRpbmdFcnJvcik7XG5cbiAgICBpZiAoc2hvcnRDaXJjdWl0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENsZWFuIHVwIG5vdyB0aGF0IHRoZSBhY3Rpb24vbG9hZGVycyBoYXZlIGNvbXBsZXRlZC4gIERvbid0IGNsZWFuIHVwIGlmXG4gICAgLy8gd2Ugc2hvcnQgY2lyY3VpdGVkIGJlY2F1c2UgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyIHdpbGwgaGF2ZSBhbHJlYWR5XG4gICAgLy8gYmVlbiBhc3NpZ25lZCB0byBhIG5ldyBjb250cm9sbGVyIGZvciB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGw7XG4gICAgY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgbG9hZGVyRGF0YSxcbiAgICAgIGVycm9yc1xuICAgIH0pO1xuICB9IC8vIENhbGwgdGhlIGFjdGlvbiBtYXRjaGVkIGJ5IHRoZSBsZWFmIHJvdXRlIGZvciB0aGlzIG5hdmlnYXRpb24gYW5kIGhhbmRsZVxuICAvLyByZWRpcmVjdHMvZXJyb3JzXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBY3Rpb24ocmVxdWVzdCwgbG9jYXRpb24sIHN1Ym1pc3Npb24sIG1hdGNoZXMsIG9wdHMpIHtcbiAgICBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpOyAvLyBQdXQgdXMgaW4gYSBzdWJtaXR0aW5nIHN0YXRlXG5cbiAgICBsZXQgbmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgIHN0YXRlOiBcInN1Ym1pdHRpbmdcIixcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBuYXZpZ2F0aW9uXG4gICAgfSk7IC8vIENhbGwgb3VyIGFjdGlvbiBhbmQgZ2V0IHRoZSByZXN1bHRcblxuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGFjdGlvbk1hdGNoID0gZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pO1xuXG4gICAgaWYgKCFhY3Rpb25NYXRjaC5yb3V0ZS5hY3Rpb24pIHtcbiAgICAgIHJlc3VsdCA9IGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQobG9jYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJhY3Rpb25cIiwgcmVxdWVzdCwgYWN0aW9uTWF0Y2gsIG1hdGNoZXMsIHJvdXRlci5iYXNlbmFtZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gX2V4dGVuZHMoe1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgIGxvY2F0aW9uOiBjcmVhdGVMb2NhdGlvbihzdGF0ZS5sb2NhdGlvbiwgcmVzdWx0LmxvY2F0aW9uKVxuICAgICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlc3VsdCwgcmVkaXJlY3ROYXZpZ2F0aW9uLCBvcHRzICYmIG9wdHMucmVwbGFjZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaG9ydENpcmN1aXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNFcnJvclJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAvLyBTdG9yZSBvZmYgdGhlIHBlbmRpbmcgZXJyb3IgLSB3ZSB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxvYWRlcnNcbiAgICAgIC8vIHRvIGNhbGwgYW5kIHdpbGwgY29tbWl0IGl0IHdoZW4gd2UgY29tcGxldGUgdGhlIG5hdmlnYXRpb25cbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzLCBhY3Rpb25NYXRjaC5yb3V0ZS5pZCk7IC8vIEJ5IGRlZmF1bHQsIGFsbCBzdWJtaXNzaW9ucyBhcmUgUkVQTEFDRSBuYXZpZ2F0aW9ucywgYnV0IGlmIHRoZVxuICAgICAgLy8gYWN0aW9uIHRocmV3IGFuIGVycm9yIHRoYXQnbGwgYmUgcmVuZGVyZWQgaW4gYW4gZXJyb3JFbGVtZW50LCB3ZSBmYWxsXG4gICAgICAvLyBiYWNrIHRvIFBVU0ggc28gdGhhdCB0aGUgdXNlciBjYW4gdXNlIHRoZSBiYWNrIGJ1dHRvbiB0byBnZXQgYmFjayB0b1xuICAgICAgLy8gdGhlIHByZS1zdWJtaXNzaW9uIGZvcm0gbG9jYXRpb24gdG8gdHJ5IGFnYWluXG5cbiAgICAgIGlmICgob3B0cyAmJiBvcHRzLnJlcGxhY2UpICE9PSB0cnVlKSB7XG4gICAgICAgIHBlbmRpbmdBY3Rpb24gPSBBY3Rpb24uUHVzaDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVuZGluZ0FjdGlvbkVycm9yOiB7XG4gICAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkZWZlcigpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYWN0aW9uc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGVuZGluZ0FjdGlvbkRhdGE6IHtcbiAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IC8vIENhbGwgYWxsIGFwcGxpY2FibGUgbG9hZGVycyBmb3IgdGhlIGdpdmVuIG1hdGNoZXMsIGhhbmRsaW5nIHJlZGlyZWN0cyxcbiAgLy8gZXJyb3JzLCBldGMuXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVMb2FkZXJzKHJlcXVlc3QsIGxvY2F0aW9uLCBtYXRjaGVzLCBvdmVycmlkZU5hdmlnYXRpb24sIHN1Ym1pc3Npb24sIHJlcGxhY2UsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHRoZSByaWdodCBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gdXNlIGZvciBkYXRhIGxvYWRpbmdcbiAgICBsZXQgbG9hZGluZ05hdmlnYXRpb24gPSBvdmVycmlkZU5hdmlnYXRpb247XG5cbiAgICBpZiAoIWxvYWRpbmdOYXZpZ2F0aW9uKSB7XG4gICAgICBsZXQgbmF2aWdhdGlvbiA9IHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBsb2FkaW5nTmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgbGV0IFttYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVyc10gPSBnZXRNYXRjaGVzVG9Mb2FkKHN0YXRlLCBtYXRjaGVzLCBzdWJtaXNzaW9uLCBsb2NhdGlvbiwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMsIGNhbmNlbGxlZEZldGNoZXJMb2FkcywgcGVuZGluZ0FjdGlvbkRhdGEsIHBlbmRpbmdFcnJvciwgZmV0Y2hMb2FkTWF0Y2hlcyk7IC8vIENhbmNlbCBwZW5kaW5nIGRlZmVycmVkcyBmb3Igbm8tbG9uZ2VyLW1hdGNoZWQgcm91dGVzIG9yIHJvdXRlcyB3ZSdyZVxuICAgIC8vIGFib3V0IHRvIHJlbG9hZC4gIE5vdGUgdGhhdCBpZiB0aGlzIGlzIGFuIGFjdGlvbiByZWxvYWQgd2Ugd291bGQgaGF2ZVxuICAgIC8vIGFscmVhZHkgY2FuY2VsbGVkIGFsbCBwZW5kaW5nIGRlZmVycmVkcyBzbyB0aGlzIHdvdWxkIGJlIGEgbm8tb3BcblxuICAgIGNhbmNlbEFjdGl2ZURlZmVycmVkcyhyb3V0ZUlkID0+ICEobWF0Y2hlcyAmJiBtYXRjaGVzLnNvbWUobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKSkgfHwgbWF0Y2hlc1RvTG9hZCAmJiBtYXRjaGVzVG9Mb2FkLnNvbWUobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKSk7IC8vIFNob3J0IGNpcmN1aXQgaWYgd2UgaGF2ZSBubyBsb2FkZXJzIHRvIHJ1blxuXG4gICAgaWYgKG1hdGNoZXNUb0xvYWQubGVuZ3RoID09PSAwICYmIHJldmFsaWRhdGluZ0ZldGNoZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCB7XG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGE6IG1lcmdlTG9hZGVyRGF0YShzdGF0ZS5sb2FkZXJEYXRhLCB7fSwgbWF0Y2hlcyksXG4gICAgICAgIC8vIENvbW1pdCBwZW5kaW5nIGVycm9yIGlmIHdlJ3JlIHNob3J0IGNpcmN1aXRpbmdcbiAgICAgICAgZXJyb3JzOiBwZW5kaW5nRXJyb3IgfHwgbnVsbCxcbiAgICAgICAgYWN0aW9uRGF0YTogcGVuZGluZ0FjdGlvbkRhdGEgfHwgbnVsbFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaG9ydENpcmN1aXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9IC8vIElmIHRoaXMgaXMgYW4gdW5pbnRlcnJ1cHRlZCByZXZhbGlkYXRpb24sIHdlIHJlbWFpbiBpbiBvdXIgY3VycmVudCBpZGxlXG4gICAgLy8gc3RhdGUuICBJZiBub3QsIHdlIG5lZWQgdG8gc3dpdGNoIHRvIG91ciBsb2FkaW5nIHN0YXRlIGFuZCBsb2FkIGRhdGEsXG4gICAgLy8gcHJlc2VydmluZyBhbnkgbmV3IGFjdGlvbiBkYXRhIG9yIGV4aXN0aW5nIGFjdGlvbiBkYXRhIChpbiB0aGUgY2FzZSBvZlxuICAgIC8vIGEgcmV2YWxpZGF0aW9uIGludGVycnVwdGluZyBhbiBhY3Rpb25SZWxvYWQpXG5cblxuICAgIGlmICghaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKSB7XG4gICAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5mb3JFYWNoKF9yZWYyID0+IHtcbiAgICAgICAgbGV0IFtrZXldID0gX3JlZjI7XG4gICAgICAgIGxldCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICAgIGxldCByZXZhbGlkYXRpbmdGZXRjaGVyID0ge1xuICAgICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgICBkYXRhOiBmZXRjaGVyICYmIGZldGNoZXIuZGF0YSxcbiAgICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCByZXZhbGlkYXRpbmdGZXRjaGVyKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlU3RhdGUoX2V4dGVuZHMoe1xuICAgICAgICBuYXZpZ2F0aW9uOiBsb2FkaW5nTmF2aWdhdGlvbixcbiAgICAgICAgYWN0aW9uRGF0YTogcGVuZGluZ0FjdGlvbkRhdGEgfHwgc3RhdGUuYWN0aW9uRGF0YSB8fCBudWxsXG4gICAgICB9LCByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGggPiAwID8ge1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICAgIH0gOiB7fSkpO1xuICAgIH1cblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uTG9hZElkID0gKytpbmNyZW1lbnRpbmdMb2FkSWQ7XG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmMyA9PiB7XG4gICAgICBsZXQgW2tleV0gPSBfcmVmMztcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLnNldChrZXksIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlcik7XG4gICAgfSk7XG4gICAgbGV0IHtcbiAgICAgIHJlc3VsdHMsXG4gICAgICBsb2FkZXJSZXN1bHRzLFxuICAgICAgZmV0Y2hlclJlc3VsdHNcbiAgICB9ID0gYXdhaXQgY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKHN0YXRlLm1hdGNoZXMsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzLCByZXF1ZXN0KTtcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaG9ydENpcmN1aXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9IC8vIENsZWFuIHVwIF9hZnRlcl8gbG9hZGVycyBoYXZlIGNvbXBsZXRlZC4gIERvbid0IGNsZWFuIHVwIGlmIHdlIHNob3J0XG4gICAgLy8gY2lyY3VpdGVkIGJlY2F1c2UgZmV0Y2hDb250cm9sbGVycyB3b3VsZCBoYXZlIGJlZW4gYWJvcnRlZCBhbmRcbiAgICAvLyByZWFzc2lnbmVkIHRvIG5ldyBjb250cm9sbGVycyBmb3IgdGhlIG5leHQgbmF2aWdhdGlvblxuXG5cbiAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5mb3JFYWNoKF9yZWY0ID0+IHtcbiAgICAgIGxldCBba2V5XSA9IF9yZWY0O1xuICAgICAgcmV0dXJuIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgfSk7IC8vIElmIGFueSBsb2FkZXJzIHJldHVybmVkIGEgcmVkaXJlY3QgUmVzcG9uc2UsIHN0YXJ0IGEgbmV3IFJFUExBQ0UgbmF2aWdhdGlvblxuXG4gICAgbGV0IHJlZGlyZWN0ID0gZmluZFJlZGlyZWN0KHJlc3VsdHMpO1xuXG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlZGlyZWN0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlZGlyZWN0LCByZWRpcmVjdE5hdmlnYXRpb24sIHJlcGxhY2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBQcm9jZXNzIGFuZCBjb21taXQgb3V0cHV0IGZyb20gbG9hZGVyc1xuXG5cbiAgICBsZXQge1xuICAgICAgbG9hZGVyRGF0YSxcbiAgICAgIGVycm9yc1xuICAgIH0gPSBwcm9jZXNzTG9hZGVyRGF0YShzdGF0ZSwgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgbG9hZGVyUmVzdWx0cywgcGVuZGluZ0Vycm9yLCByZXZhbGlkYXRpbmdGZXRjaGVycywgZmV0Y2hlclJlc3VsdHMsIGFjdGl2ZURlZmVycmVkcyk7IC8vIFdpcmUgdXAgc3Vic2NyaWJlcnMgdG8gdXBkYXRlIGxvYWRlckRhdGEgYXMgcHJvbWlzZXMgc2V0dGxlXG5cbiAgICBhY3RpdmVEZWZlcnJlZHMuZm9yRWFjaCgoZGVmZXJyZWREYXRhLCByb3V0ZUlkKSA9PiB7XG4gICAgICBkZWZlcnJlZERhdGEuc3Vic2NyaWJlKGFib3J0ZWQgPT4ge1xuICAgICAgICAvLyBOb3RlOiBObyBuZWVkIHRvIHVwZGF0ZVN0YXRlIGhlcmUgc2luY2UgdGhlIFRyYWNrZWRQcm9taXNlIG9uXG4gICAgICAgIC8vIGxvYWRlckRhdGEgaXMgc3RhYmxlIGFjcm9zcyByZXNvbHZlL3JlamVjdFxuICAgICAgICAvLyBSZW1vdmUgdGhpcyBpbnN0YW5jZSBpZiB3ZSB3ZXJlIGFib3J0ZWQgb3IgaWYgcHJvbWlzZXMgaGF2ZSBzZXR0bGVkXG4gICAgICAgIGlmIChhYm9ydGVkIHx8IGRlZmVycmVkRGF0YS5kb25lKSB7XG4gICAgICAgICAgYWN0aXZlRGVmZXJyZWRzLmRlbGV0ZShyb3V0ZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbWFya0ZldGNoUmVkaXJlY3RzRG9uZSgpO1xuICAgIGxldCBkaWRBYm9ydEZldGNoTG9hZHMgPSBhYm9ydFN0YWxlRmV0Y2hMb2FkcyhwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9LCBkaWRBYm9ydEZldGNoTG9hZHMgfHwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0gOiB7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGZXRjaGVyKGtleSkge1xuICAgIHJldHVybiBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KSB8fCBJRExFX0ZFVENIRVI7XG4gIH0gLy8gVHJpZ2dlciBhIGZldGNoZXIgbG9hZC9zdWJtaXQgZm9yIHRoZSBnaXZlbiBmZXRjaGVyIGtleVxuXG5cbiAgZnVuY3Rpb24gZmV0Y2goa2V5LCByb3V0ZUlkLCBocmVmLCBvcHRzKSB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3V0ZXIuZmV0Y2goKSB3YXMgY2FsbGVkIGR1cmluZyB0aGUgc2VydmVyIHJlbmRlciwgYnV0IGl0IHNob3VsZG4ndCBiZS4gXCIgKyBcIllvdSBhcmUgbGlrZWx5IGNhbGxpbmcgYSB1c2VGZXRjaGVyKCkgbWV0aG9kIGluIHRoZSBib2R5IG9mIHlvdXIgY29tcG9uZW50LiBcIiArIFwiVHJ5IG1vdmluZyBpdCB0byBhIHVzZUVmZmVjdCBvciBhIGNhbGxiYWNrLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBocmVmLCBpbml0LmJhc2VuYW1lKTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgbmV3IEVycm9yUmVzcG9uc2UoNDA0LCBcIk5vdCBGb3VuZFwiLCBudWxsKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIHBhdGgsXG4gICAgICBzdWJtaXNzaW9uXG4gICAgfSA9IG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyhocmVmLCBvcHRzLCB0cnVlKTtcbiAgICBsZXQgbWF0Y2ggPSBnZXRUYXJnZXRNYXRjaChtYXRjaGVzLCBwYXRoKTtcblxuICAgIGlmIChzdWJtaXNzaW9uKSB7XG4gICAgICBoYW5kbGVGZXRjaGVyQWN0aW9uKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gsIG1hdGNoZXMsIHN1Ym1pc3Npb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU3RvcmUgb2ZmIHRoZSBtYXRjaCBzbyB3ZSBjYW4gY2FsbCBpdCdzIHNob3VsZFJldmFsaWRhdGUgb24gc3Vic2VxdWVudFxuICAgIC8vIHJldmFsaWRhdGlvbnNcblxuXG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5zZXQoa2V5LCBbcGF0aCwgbWF0Y2gsIG1hdGNoZXNdKTtcbiAgICBoYW5kbGVGZXRjaGVyTG9hZGVyKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gsIG1hdGNoZXMpO1xuICB9IC8vIENhbGwgdGhlIGFjdGlvbiBmb3IgdGhlIG1hdGNoZWQgZmV0Y2hlci5zdWJtaXQoKSwgYW5kIHRoZW4gaGFuZGxlIHJlZGlyZWN0cyxcbiAgLy8gZXJyb3JzLCBhbmQgcmV2YWxpZGF0aW9uXG5cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVGZXRjaGVyQWN0aW9uKGtleSwgcm91dGVJZCwgcGF0aCwgbWF0Y2gsIHJlcXVlc3RNYXRjaGVzLCBzdWJtaXNzaW9uKSB7XG4gICAgaW50ZXJydXB0QWN0aXZlTG9hZHMoKTtcbiAgICBmZXRjaExvYWRNYXRjaGVzLmRlbGV0ZShrZXkpO1xuXG4gICAgaWYgKCFtYXRjaC5yb3V0ZS5hY3Rpb24pIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gZ2V0TWV0aG9kTm90QWxsb3dlZFJlc3VsdChwYXRoKTtcbiAgICAgIHNldEZldGNoZXJFcnJvcihrZXksIHJvdXRlSWQsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFB1dCB0aGlzIGZldGNoZXIgaW50byBpdCdzIHN1Ym1pdHRpbmcgc3RhdGVcblxuXG4gICAgbGV0IGV4aXN0aW5nRmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpO1xuXG4gICAgbGV0IGZldGNoZXIgPSBfZXh0ZW5kcyh7XG4gICAgICBzdGF0ZTogXCJzdWJtaXR0aW5nXCJcbiAgICB9LCBzdWJtaXNzaW9uLCB7XG4gICAgICBkYXRhOiBleGlzdGluZ0ZldGNoZXIgJiYgZXhpc3RpbmdGZXRjaGVyLmRhdGFcbiAgICB9KTtcblxuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGZldGNoZXIpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pOyAvLyBDYWxsIHRoZSBhY3Rpb24gZm9yIHRoZSBmZXRjaGVyXG5cbiAgICBsZXQgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGxldCBmZXRjaFJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KHBhdGgsIGFib3J0Q29udHJvbGxlci5zaWduYWwsIHN1Ym1pc3Npb24pO1xuICAgIGZldGNoQ29udHJvbGxlcnMuc2V0KGtleSwgYWJvcnRDb250cm9sbGVyKTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gYXdhaXQgY2FsbExvYWRlck9yQWN0aW9uKFwiYWN0aW9uXCIsIGZldGNoUmVxdWVzdCwgbWF0Y2gsIHJlcXVlc3RNYXRjaGVzLCByb3V0ZXIuYmFzZW5hbWUpO1xuXG4gICAgaWYgKGZldGNoUmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNvIGxvbmcgYXMgd2Ugd2VyZW4ndCBhYm9ydGVkIGJ5IG91IG91ciBvd24gZmV0Y2hlclxuICAgICAgLy8gcmUtc3VibWl0IHdoaWNoIHdvdWxkIGhhdmUgcHV0IF9uZXdfIGNvbnRyb2xsZXIgaXMgaW4gZmV0Y2hDb250cm9sbGVyc1xuICAgICAgaWYgKGZldGNoQ29udHJvbGxlcnMuZ2V0KGtleSkgPT09IGFib3J0Q29udHJvbGxlcikge1xuICAgICAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQoYWN0aW9uUmVzdWx0KSkge1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgICAgIGZldGNoUmVkaXJlY3RJZHMuYWRkKGtleSk7XG5cbiAgICAgIGxldCBsb2FkaW5nRmV0Y2hlciA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiXG4gICAgICB9LCBzdWJtaXNzaW9uLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGxvYWRpbmdGZXRjaGVyKTtcbiAgICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgICB9KTtcblxuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvbjogY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIGFjdGlvblJlc3VsdC5sb2NhdGlvbilcbiAgICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihhY3Rpb25SZXN1bHQsIHJlZGlyZWN0TmF2aWdhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQcm9jZXNzIGFueSBub24tcmVkaXJlY3QgZXJyb3JzIHRocm93blxuXG5cbiAgICBpZiAoaXNFcnJvclJlc3VsdChhY3Rpb25SZXN1bHQpKSB7XG4gICAgICBzZXRGZXRjaGVyRXJyb3Ioa2V5LCByb3V0ZUlkLCBhY3Rpb25SZXN1bHQuZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KGFjdGlvblJlc3VsdCkpIHtcbiAgICAgIGludmFyaWFudChmYWxzZSwgXCJkZWZlcigpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYWN0aW9uc1wiKTtcbiAgICB9IC8vIFN0YXJ0IHRoZSBkYXRhIGxvYWQgZm9yIGN1cnJlbnQgbWF0Y2hlcywgb3IgdGhlIG5leHQgbG9jYXRpb24gaWYgd2UncmVcbiAgICAvLyBpbiB0aGUgbWlkZGxlIG9mIGEgbmF2aWdhdGlvblxuXG5cbiAgICBsZXQgbmV4dExvY2F0aW9uID0gc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiB8fCBzdGF0ZS5sb2NhdGlvbjtcbiAgICBsZXQgcmV2YWxpZGF0aW9uUmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QobmV4dExvY2F0aW9uLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICBsZXQgbWF0Y2hlcyA9IHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgIT09IFwiaWRsZVwiID8gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiwgaW5pdC5iYXNlbmFtZSkgOiBzdGF0ZS5tYXRjaGVzO1xuICAgIGludmFyaWFudChtYXRjaGVzLCBcIkRpZG4ndCBmaW5kIGFueSBtYXRjaGVzIGFmdGVyIGZldGNoZXIgYWN0aW9uXCIpO1xuICAgIGxldCBsb2FkSWQgPSArK2luY3JlbWVudGluZ0xvYWRJZDtcbiAgICBmZXRjaFJlbG9hZElkcy5zZXQoa2V5LCBsb2FkSWQpO1xuXG4gICAgbGV0IGxvYWRGZXRjaGVyID0gX2V4dGVuZHMoe1xuICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgZGF0YTogYWN0aW9uUmVzdWx0LmRhdGFcbiAgICB9LCBzdWJtaXNzaW9uKTtcblxuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGxvYWRGZXRjaGVyKTtcbiAgICBsZXQgW21hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzXSA9IGdldE1hdGNoZXNUb0xvYWQoc3RhdGUsIG1hdGNoZXMsIHN1Ym1pc3Npb24sIG5leHRMb2NhdGlvbiwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMsIGNhbmNlbGxlZEZldGNoZXJMb2Fkcywge1xuICAgICAgW21hdGNoLnJvdXRlLmlkXTogYWN0aW9uUmVzdWx0LmRhdGFcbiAgICB9LCB1bmRlZmluZWQsIC8vIE5vIG5lZWQgdG8gc2VuZCB0aHJvdWdoIGVycm9ycyBzaW5jZSB3ZSBzaG9ydCBjaXJjdWl0IGFib3ZlXG4gICAgZmV0Y2hMb2FkTWF0Y2hlcyk7IC8vIFB1dCBhbGwgcmV2YWxpZGF0aW5nIGZldGNoZXJzIGludG8gdGhlIGxvYWRpbmcgc3RhdGUsIGV4Y2VwdCBmb3IgdGhlXG4gICAgLy8gY3VycmVudCBmZXRjaGVyIHdoaWNoIHdlIHdhbnQgdG8ga2VlcCBpbiBpdCdzIGN1cnJlbnQgbG9hZGluZyBzdGF0ZSB3aGljaFxuICAgIC8vIGNvbnRhaW5zIGl0J3MgYWN0aW9uIHN1Ym1pc3Npb24gaW5mbyArIGFjdGlvbiBkYXRhXG5cbiAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5maWx0ZXIoX3JlZjUgPT4ge1xuICAgICAgbGV0IFtzdGFsZUtleV0gPSBfcmVmNTtcbiAgICAgIHJldHVybiBzdGFsZUtleSAhPT0ga2V5O1xuICAgIH0pLmZvckVhY2goX3JlZjYgPT4ge1xuICAgICAgbGV0IFtzdGFsZUtleV0gPSBfcmVmNjtcbiAgICAgIGxldCBleGlzdGluZ0ZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoc3RhbGVLZXkpO1xuICAgICAgbGV0IHJldmFsaWRhdGluZ0ZldGNoZXIgPSB7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgZGF0YTogZXhpc3RpbmdGZXRjaGVyICYmIGV4aXN0aW5nRmV0Y2hlci5kYXRhLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChzdGFsZUtleSwgcmV2YWxpZGF0aW5nRmV0Y2hlcik7XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnNldChzdGFsZUtleSwgYWJvcnRDb250cm9sbGVyKTtcbiAgICB9KTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTtcbiAgICBsZXQge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGxvYWRlclJlc3VsdHMsXG4gICAgICBmZXRjaGVyUmVzdWx0c1xuICAgIH0gPSBhd2FpdCBjYWxsTG9hZGVyc0FuZE1heWJlUmVzb2x2ZURhdGEoc3RhdGUubWF0Y2hlcywgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIHJldmFsaWRhdGlvblJlcXVlc3QpO1xuXG4gICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZldGNoUmVsb2FkSWRzLmRlbGV0ZShrZXkpO1xuICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmNyA9PiB7XG4gICAgICBsZXQgW3N0YWxlS2V5XSA9IF9yZWY3O1xuICAgICAgcmV0dXJuIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKHN0YWxlS2V5KTtcbiAgICB9KTtcbiAgICBsZXQgcmVkaXJlY3QgPSBmaW5kUmVkaXJlY3QocmVzdWx0cyk7XG5cbiAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBnZXRMb2FkZXJSZWRpcmVjdChzdGF0ZSwgcmVkaXJlY3QpO1xuICAgICAgYXdhaXQgc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24ocmVkaXJlY3QsIHJlZGlyZWN0TmF2aWdhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQcm9jZXNzIGFuZCBjb21taXQgb3V0cHV0IGZyb20gbG9hZGVyc1xuXG5cbiAgICBsZXQge1xuICAgICAgbG9hZGVyRGF0YSxcbiAgICAgIGVycm9yc1xuICAgIH0gPSBwcm9jZXNzTG9hZGVyRGF0YShzdGF0ZSwgc3RhdGUubWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgbG9hZGVyUmVzdWx0cywgdW5kZWZpbmVkLCByZXZhbGlkYXRpbmdGZXRjaGVycywgZmV0Y2hlclJlc3VsdHMsIGFjdGl2ZURlZmVycmVkcyk7XG4gICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgZGF0YTogYWN0aW9uUmVzdWx0LmRhdGEsXG4gICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgZG9uZUZldGNoZXIpO1xuICAgIGxldCBkaWRBYm9ydEZldGNoTG9hZHMgPSBhYm9ydFN0YWxlRmV0Y2hMb2Fkcyhsb2FkSWQpOyAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluIGEgbmF2aWdhdGlvbiBsb2FkaW5nIHN0YXRlIGFuZCB0aGlzIGZldGNoZXIgaXNcbiAgICAvLyBtb3JlIHJlY2VudCB0aGFuIHRoZSBuYXZpZ2F0aW9uLCB3ZSB3YW50IHRoZSBuZXdlciBkYXRhIHNvIGFib3J0IHRoZVxuICAgIC8vIG5hdmlnYXRpb24gYW5kIGNvbXBsZXRlIGl0IHdpdGggdGhlIGZldGNoZXIgZGF0YVxuXG4gICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwibG9hZGluZ1wiICYmIGxvYWRJZCA+IHBlbmRpbmdOYXZpZ2F0aW9uTG9hZElkKSB7XG4gICAgICBpbnZhcmlhbnQocGVuZGluZ0FjdGlvbiwgXCJFeHBlY3RlZCBwZW5kaW5nIGFjdGlvblwiKTtcbiAgICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciAmJiBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGNvbXBsZXRlTmF2aWdhdGlvbihzdGF0ZS5uYXZpZ2F0aW9uLmxvY2F0aW9uLCB7XG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGEsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXBkYXRlIHdpdGggdGhlIGZldGNoZXIgZGF0YSwgcHJlc2VydmluZyBhbnkgZXhpc3RpbmdcbiAgICAgIC8vIGxvYWRlckRhdGEgZm9yIGxvYWRlcnMgdGhhdCBkaWQgbm90IG5lZWQgdG8gcmVsb2FkLiAgV2UgaGF2ZSB0b1xuICAgICAgLy8gbWFudWFsbHkgbWVyZ2UgaGVyZSBzaW5jZSB3ZSBhcmVuJ3QgZ29pbmcgdGhyb3VnaCBjb21wbGV0ZU5hdmlnYXRpb25cbiAgICAgIHVwZGF0ZVN0YXRlKF9leHRlbmRzKHtcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBsb2FkZXJEYXRhOiBtZXJnZUxvYWRlckRhdGEoc3RhdGUubG9hZGVyRGF0YSwgbG9hZGVyRGF0YSwgbWF0Y2hlcylcbiAgICAgIH0sIGRpZEFib3J0RmV0Y2hMb2FkcyA/IHtcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgICB9IDoge30pKTtcbiAgICAgIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0gLy8gQ2FsbCB0aGUgbWF0Y2hlZCBsb2FkZXIgZm9yIGZldGNoZXIubG9hZCgpLCBoYW5kbGluZyByZWRpcmVjdHMsIGVycm9ycywgZXRjLlxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlRmV0Y2hlckxvYWRlcihrZXksIHJvdXRlSWQsIHBhdGgsIG1hdGNoLCBtYXRjaGVzKSB7XG4gICAgbGV0IGV4aXN0aW5nRmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpOyAvLyBQdXQgdGhpcyBmZXRjaGVyIGludG8gaXQncyBsb2FkaW5nIHN0YXRlXG5cbiAgICBsZXQgbG9hZGluZ0ZldGNoZXIgPSB7XG4gICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGRhdGE6IGV4aXN0aW5nRmV0Y2hlciAmJiBleGlzdGluZ0ZldGNoZXIuZGF0YVxuICAgIH07XG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgbG9hZGluZ0ZldGNoZXIpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pOyAvLyBDYWxsIHRoZSBsb2FkZXIgZm9yIHRoaXMgZmV0Y2hlciByb3V0ZSBtYXRjaFxuXG4gICAgbGV0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgZmV0Y2hSZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdChwYXRoLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLnNldChrZXksIGFib3J0Q29udHJvbGxlcik7XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNhbGxMb2FkZXJPckFjdGlvbihcImxvYWRlclwiLCBmZXRjaFJlcXVlc3QsIG1hdGNoLCBtYXRjaGVzLCByb3V0ZXIuYmFzZW5hbWUpOyAvLyBEZWZlcnJlZCBpc24ndCBzdXBwb3J0ZWQgb3IgZmV0Y2hlciBsb2FkcywgYXdhaXQgZXZlcnl0aGluZyBhbmQgdHJlYXQgaXRcbiAgICAvLyBhcyBhIG5vcm1hbCBsb2FkLiAgcmVzb2x2ZURlZmVycmVkRGF0YSB3aWxsIHJldHVybiB1bmRlZmluZWQgaWYgdGhpc1xuICAgIC8vIGZldGNoZXIgZ2V0cyBhYm9ydGVkLCBzbyB3ZSBqdXN0IGxlYXZlIHJlc3VsdCB1bnRvdWNoZWQgYW5kIHNob3J0IGNpcmN1aXRcbiAgICAvLyBiZWxvdyBpZiB0aGF0IGhhcHBlbnNcblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHJlc3VsdCA9IChhd2FpdCByZXNvbHZlRGVmZXJyZWREYXRhKHJlc3VsdCwgZmV0Y2hSZXF1ZXN0LnNpZ25hbCwgdHJ1ZSkpIHx8IHJlc3VsdDtcbiAgICB9IC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzbyBsb25nIGFzIHdlIHdlcmVuJ3QgYWJvcnRlZCBieSBvdSBvdXIgb3duIGZldGNoZXJcbiAgICAvLyByZS1sb2FkIHdoaWNoIHdvdWxkIGhhdmUgcHV0IF9uZXdfIGNvbnRyb2xsZXIgaXMgaW4gZmV0Y2hDb250cm9sbGVyc1xuXG5cbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5nZXQoa2V5KSA9PT0gYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChmZXRjaFJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBsb2FkZXIgdGhyZXcgYSByZWRpcmVjdCBSZXNwb25zZSwgc3RhcnQgYSBuZXcgUkVQTEFDRSBuYXZpZ2F0aW9uXG5cblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBnZXRMb2FkZXJSZWRpcmVjdChzdGF0ZSwgcmVzdWx0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlc3VsdCwgcmVkaXJlY3ROYXZpZ2F0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByb2Nlc3MgYW55IG5vbi1yZWRpcmVjdCBlcnJvcnMgdGhyb3duXG5cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShzdGF0ZS5tYXRjaGVzLCByb3V0ZUlkKTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLmRlbGV0ZShrZXkpOyAvLyBUT0RPOiBJbiByZW1peCwgdGhpcyB3b3VsZCByZXNldCB0byBJRExFX05BVklHQVRJT04gaWYgaXQgd2FzIGEgY2F0Y2ggLVxuICAgICAgLy8gZG8gd2UgbmVlZCB0byBiZWhhdmUgYW55IGRpZmZlcmVudGx5IHdpdGggb3VyIG5vbi1yZWRpcmVjdCBlcnJvcnM/XG4gICAgICAvLyBXaGF0IGlmIGl0IHdhcyBhIG5vbi1yZWRpcmVjdCBSZXNwb25zZT9cblxuICAgICAgdXBkYXRlU3RhdGUoe1xuICAgICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycyksXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludmFyaWFudCghaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpLCBcIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGFcIik7IC8vIFB1dCB0aGUgZmV0Y2hlciBiYWNrIGludG8gYW4gaWRsZSBzdGF0ZVxuXG4gICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGEsXG4gICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgZG9uZUZldGNoZXIpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGhhbmRsZSByZWRpcmVjdHMgcmV0dXJuZWQgZnJvbSBhbiBhY3Rpb24gb3IgbG9hZGVyLlxuICAgKiBOb3JtYWxseSwgYSByZWRpcmVjdCBcInJlcGxhY2VzXCIgdGhlIG5hdmlnYXRpb24gdGhhdCB0cmlnZ2VyZWQgaXQuICBTbywgZm9yXG4gICAqIGV4YW1wbGU6XG4gICAqXG4gICAqICAtIHVzZXIgaXMgb24gL2FcbiAgICogIC0gdXNlciBjbGlja3MgYSBsaW5rIHRvIC9iXG4gICAqICAtIGxvYWRlciBmb3IgL2IgcmVkaXJlY3RzIHRvIC9jXG4gICAqXG4gICAqIEluIGEgbm9uLUpTIGFwcCB0aGUgYnJvd3NlciB3b3VsZCB0cmFjayB0aGUgaW4tZmxpZ2h0IG5hdmlnYXRpb24gdG8gL2IgYW5kXG4gICAqIHRoZW4gcmVwbGFjZSBpdCB3aXRoIC9jIHdoZW4gaXQgZW5jb3VudGVyZWQgdGhlIHJlZGlyZWN0IHJlc3BvbnNlLiAgSW5cbiAgICogdGhlIGVuZCBpdCB3b3VsZCBvbmx5IGV2ZXIgdXBkYXRlIHRoZSBVUkwgYmFyIHdpdGggL2MuXG4gICAqXG4gICAqIEluIGNsaWVudC1zaWRlIHJvdXRpbmcgdXNpbmcgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSwgd2UgYWltIHRvIGVtdWxhdGVcbiAgICogdGhpcyBiZWhhdmlvciBhbmQgd2UgYWxzbyBkbyBub3QgdXBkYXRlIGhpc3RvcnkgdW50aWwgdGhlIGVuZCBvZiB0aGVcbiAgICogbmF2aWdhdGlvbiAoaW5jbHVkaW5nIHByb2Nlc3NlZCByZWRpcmVjdHMpLiAgVGhpcyBtZWFucyB0aGF0IHdlIG5ldmVyXG4gICAqIGFjdHVhbGx5IHRvdWNoIGhpc3RvcnkgdW50aWwgd2UndmUgcHJvY2Vzc2VkIHJlZGlyZWN0cywgc28gd2UganVzdCB1c2VcbiAgICogdGhlIGhpc3RvcnkgYWN0aW9uIGZyb20gdGhlIG9yaWdpbmFsIG5hdmlnYXRpb24gKFBVU0ggb3IgUkVQTEFDRSkuXG4gICAqL1xuXG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24ocmVkaXJlY3QsIG5hdmlnYXRpb24sIHJlcGxhY2UpIHtcbiAgICBpZiAocmVkaXJlY3QucmV2YWxpZGF0ZSkge1xuICAgICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaW52YXJpYW50KG5hdmlnYXRpb24ubG9jYXRpb24sIFwiRXhwZWN0ZWQgYSBsb2NhdGlvbiBvbiB0aGUgcmVkaXJlY3QgbmF2aWdhdGlvblwiKTsgLy8gVGhlcmUncyBubyBuZWVkIHRvIGFib3J0IG9uIHJlZGlyZWN0cywgc2luY2Ugd2UgZG9uJ3QgZGV0ZWN0IHRoZVxuICAgIC8vIHJlZGlyZWN0IHVudGlsIHRoZSBhY3Rpb24vbG9hZGVycyBoYXZlIHNldHRsZWRcblxuICAgIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciA9IG51bGw7XG4gICAgbGV0IHJlZGlyZWN0SGlzdG9yeUFjdGlvbiA9IHJlcGxhY2UgPT09IHRydWUgPyBBY3Rpb24uUmVwbGFjZSA6IEFjdGlvbi5QdXNoO1xuICAgIGF3YWl0IHN0YXJ0TmF2aWdhdGlvbihyZWRpcmVjdEhpc3RvcnlBY3Rpb24sIG5hdmlnYXRpb24ubG9jYXRpb24sIHtcbiAgICAgIG92ZXJyaWRlTmF2aWdhdGlvbjogbmF2aWdhdGlvblxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKGN1cnJlbnRNYXRjaGVzLCBtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCBmZXRjaGVyc1RvTG9hZCwgcmVxdWVzdCkge1xuICAgIC8vIENhbGwgYWxsIG5hdmlnYXRpb24gbG9hZGVycyBhbmQgcmV2YWxpZGF0aW5nIGZldGNoZXIgbG9hZGVycyBpbiBwYXJhbGxlbCxcbiAgICAvLyB0aGVuIHNsaWNlIG9mZiB0aGUgcmVzdWx0cyBpbnRvIHNlcGFyYXRlIGFycmF5cyBzbyB3ZSBjYW4gaGFuZGxlIHRoZW1cbiAgICAvLyBhY2NvcmRpbmdseVxuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1hdGNoZXNUb0xvYWQubWFwKG1hdGNoID0+IGNhbGxMb2FkZXJPckFjdGlvbihcImxvYWRlclwiLCByZXF1ZXN0LCBtYXRjaCwgbWF0Y2hlcywgcm91dGVyLmJhc2VuYW1lKSksIC4uLmZldGNoZXJzVG9Mb2FkLm1hcChfcmVmOCA9PiB7XG4gICAgICBsZXQgWywgaHJlZiwgbWF0Y2gsIGZldGNoTWF0Y2hlc10gPSBfcmVmODtcbiAgICAgIHJldHVybiBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgY3JlYXRlUmVxdWVzdChocmVmLCByZXF1ZXN0LnNpZ25hbCksIG1hdGNoLCBmZXRjaE1hdGNoZXMsIHJvdXRlci5iYXNlbmFtZSk7XG4gICAgfSldKTtcbiAgICBsZXQgbG9hZGVyUmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UoMCwgbWF0Y2hlc1RvTG9hZC5sZW5ndGgpO1xuICAgIGxldCBmZXRjaGVyUmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UobWF0Y2hlc1RvTG9hZC5sZW5ndGgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtyZXNvbHZlRGVmZXJyZWRSZXN1bHRzKGN1cnJlbnRNYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCBsb2FkZXJSZXN1bHRzLCByZXF1ZXN0LnNpZ25hbCwgZmFsc2UsIHN0YXRlLmxvYWRlckRhdGEpLCByZXNvbHZlRGVmZXJyZWRSZXN1bHRzKGN1cnJlbnRNYXRjaGVzLCBmZXRjaGVyc1RvTG9hZC5tYXAoX3JlZjkgPT4ge1xuICAgICAgbGV0IFssLCBtYXRjaF0gPSBfcmVmOTtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KSwgZmV0Y2hlclJlc3VsdHMsIHJlcXVlc3Quc2lnbmFsLCB0cnVlKV0pO1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHRzLFxuICAgICAgbG9hZGVyUmVzdWx0cyxcbiAgICAgIGZldGNoZXJSZXN1bHRzXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVycnVwdEFjdGl2ZUxvYWRzKCkge1xuICAgIC8vIEV2ZXJ5IGludGVycnVwdGlvbiB0cmlnZ2VycyBhIHJldmFsaWRhdGlvblxuICAgIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSB0cnVlOyAvLyBDYW5jZWwgcGVuZGluZyByb3V0ZS1sZXZlbCBkZWZlcnJlZHMgYW5kIG1hcmsgY2FuY2VsbGVkIHJvdXRlcyBmb3JcbiAgICAvLyByZXZhbGlkYXRpb25cblxuICAgIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLnB1c2goLi4uY2FuY2VsQWN0aXZlRGVmZXJyZWRzKCkpOyAvLyBBYm9ydCBpbi1mbGlnaHQgZmV0Y2hlciBsb2Fkc1xuXG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNhbmNlbGxlZEZldGNoZXJMb2Fkcy5wdXNoKGtleSk7XG4gICAgICAgIGFib3J0RmV0Y2hlcihrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgZXJyb3IpIHtcbiAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkoc3RhdGUubWF0Y2hlcywgcm91dGVJZCk7XG4gICAgZGVsZXRlRmV0Y2hlcihrZXkpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGVycm9yczoge1xuICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IGVycm9yXG4gICAgICB9LFxuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVGZXRjaGVyKGtleSkge1xuICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmhhcyhrZXkpKSBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICBmZXRjaExvYWRNYXRjaGVzLmRlbGV0ZShrZXkpO1xuICAgIGZldGNoUmVsb2FkSWRzLmRlbGV0ZShrZXkpO1xuICAgIGZldGNoUmVkaXJlY3RJZHMuZGVsZXRlKGtleSk7XG4gICAgc3RhdGUuZmV0Y2hlcnMuZGVsZXRlKGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBhYm9ydEZldGNoZXIoa2V5KSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBmZXRjaENvbnRyb2xsZXJzLmdldChrZXkpO1xuICAgIGludmFyaWFudChjb250cm9sbGVyLCBcIkV4cGVjdGVkIGZldGNoIGNvbnRyb2xsZXI6IFwiICsga2V5KTtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtGZXRjaGVyc0RvbmUoa2V5cykge1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICBsZXQgZmV0Y2hlciA9IGdldEZldGNoZXIoa2V5KTtcbiAgICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgICBkYXRhOiBmZXRjaGVyLmRhdGEsXG4gICAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgZG9uZUZldGNoZXIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtGZXRjaFJlZGlyZWN0c0RvbmUoKSB7XG4gICAgbGV0IGRvbmVLZXlzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgb2YgZmV0Y2hSZWRpcmVjdElkcykge1xuICAgICAgbGV0IGZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTtcbiAgICAgIGludmFyaWFudChmZXRjaGVyLCBcIkV4cGVjdGVkIGZldGNoZXI6IFwiICsga2V5KTtcblxuICAgICAgaWYgKGZldGNoZXIuc3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgIGZldGNoUmVkaXJlY3RJZHMuZGVsZXRlKGtleSk7XG4gICAgICAgIGRvbmVLZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrRmV0Y2hlcnNEb25lKGRvbmVLZXlzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFib3J0U3RhbGVGZXRjaExvYWRzKGxhbmRlZElkKSB7XG4gICAgbGV0IHllZXRlZEtleXMgPSBbXTtcblxuICAgIGZvciAobGV0IFtrZXksIGlkXSBvZiBmZXRjaFJlbG9hZElkcykge1xuICAgICAgaWYgKGlkIDwgbGFuZGVkSWQpIHtcbiAgICAgICAgbGV0IGZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTtcbiAgICAgICAgaW52YXJpYW50KGZldGNoZXIsIFwiRXhwZWN0ZWQgZmV0Y2hlcjogXCIgKyBrZXkpO1xuXG4gICAgICAgIGlmIChmZXRjaGVyLnN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICAgIGFib3J0RmV0Y2hlcihrZXkpO1xuICAgICAgICAgIGZldGNoUmVsb2FkSWRzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgIHllZXRlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya0ZldGNoZXJzRG9uZSh5ZWV0ZWRLZXlzKTtcbiAgICByZXR1cm4geWVldGVkS2V5cy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsQWN0aXZlRGVmZXJyZWRzKHByZWRpY2F0ZSkge1xuICAgIGxldCBjYW5jZWxsZWRSb3V0ZUlkcyA9IFtdO1xuICAgIGFjdGl2ZURlZmVycmVkcy5mb3JFYWNoKChkZmQsIHJvdXRlSWQpID0+IHtcbiAgICAgIGlmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShyb3V0ZUlkKSkge1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGRlZmVycmVkIC0gYnV0IGRvIG5vdCByZW1vdmUgZnJvbSBhY3RpdmVEZWZlcnJlZHMgaGVyZSAtXG4gICAgICAgIC8vIHdlIHJlbHkgb24gdGhlIHN1YnNjcmliZXJzIHRvIGRvIHRoYXQgc28gb3VyIHRlc3RzIGNhbiBhc3NlcnQgcHJvcGVyXG4gICAgICAgIC8vIGNsZWFudXAgdmlhIF9pbnRlcm5hbEFjdGl2ZURlZmVycmVkc1xuICAgICAgICBkZmQuY2FuY2VsKCk7XG4gICAgICAgIGNhbmNlbGxlZFJvdXRlSWRzLnB1c2gocm91dGVJZCk7XG4gICAgICAgIGFjdGl2ZURlZmVycmVkcy5kZWxldGUocm91dGVJZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNhbmNlbGxlZFJvdXRlSWRzO1xuICB9IC8vIE9wdCBpbiB0byBjYXB0dXJpbmcgYW5kIHJlcG9ydGluZyBzY3JvbGwgcG9zaXRpb25zIGR1cmluZyBuYXZpZ2F0aW9ucyxcbiAgLy8gdXNlZCBieSB0aGUgPFNjcm9sbFJlc3RvcmF0aW9uPiBjb21wb25lbnRcblxuXG4gIGZ1bmN0aW9uIGVuYWJsZVNjcm9sbFJlc3RvcmF0aW9uKHBvc2l0aW9ucywgZ2V0UG9zaXRpb24sIGdldEtleSkge1xuICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gcG9zaXRpb25zO1xuICAgIGdldFNjcm9sbFBvc2l0aW9uID0gZ2V0UG9zaXRpb247XG5cbiAgICBnZXRTY3JvbGxSZXN0b3JhdGlvbktleSA9IGdldEtleSB8fCAobG9jYXRpb24gPT4gbG9jYXRpb24ua2V5KTsgLy8gUGVyZm9ybSBpbml0aWFsIGh5ZHJhdGlvbiBzY3JvbGwgcmVzdG9yYXRpb24sIHNpbmNlIHdlIG1pc3MgdGhlIGJvYXQgb25cbiAgICAvLyB0aGUgaW5pdGlhbCB1cGRhdGVTdGF0ZSgpIGJlY2F1c2Ugd2UndmUgbm90IHlldCByZW5kZXJlZCA8U2Nyb2xsUmVzdG9yYXRpb24vPlxuICAgIC8vIGFuZCB0aGVyZWZvcmUgaGF2ZSBubyBzYXZlZFNjcm9sbFBvc2l0aW9ucyBhdmFpbGFibGVcblxuXG4gICAgaWYgKCFpbml0aWFsU2Nyb2xsUmVzdG9yZWQgJiYgc3RhdGUubmF2aWdhdGlvbiA9PT0gSURMRV9OQVZJR0FUSU9OKSB7XG4gICAgICBpbml0aWFsU2Nyb2xsUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgbGV0IHkgPSBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uKHN0YXRlLmxvY2F0aW9uLCBzdGF0ZS5tYXRjaGVzKTtcblxuICAgICAgaWYgKHkgIT0gbnVsbCkge1xuICAgICAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uOiB5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzYXZlZFNjcm9sbFBvc2l0aW9ucyA9IG51bGw7XG4gICAgICBnZXRTY3JvbGxQb3NpdGlvbiA9IG51bGw7XG4gICAgICBnZXRTY3JvbGxSZXN0b3JhdGlvbktleSA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmVTY3JvbGxQb3NpdGlvbihsb2NhdGlvbiwgbWF0Y2hlcykge1xuICAgIGlmIChzYXZlZFNjcm9sbFBvc2l0aW9ucyAmJiBnZXRTY3JvbGxSZXN0b3JhdGlvbktleSAmJiBnZXRTY3JvbGxQb3NpdGlvbikge1xuICAgICAgbGV0IHVzZXJNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiBjcmVhdGVVc2VNYXRjaGVzTWF0Y2gobSwgc3RhdGUubG9hZGVyRGF0YSkpO1xuICAgICAgbGV0IGtleSA9IGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5KGxvY2F0aW9uLCB1c2VyTWF0Y2hlcykgfHwgbG9jYXRpb24ua2V5O1xuICAgICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnNba2V5XSA9IGdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2F2ZWRTY3JvbGxQb3NpdGlvbihsb2NhdGlvbiwgbWF0Y2hlcykge1xuICAgIGlmIChzYXZlZFNjcm9sbFBvc2l0aW9ucyAmJiBnZXRTY3JvbGxSZXN0b3JhdGlvbktleSAmJiBnZXRTY3JvbGxQb3NpdGlvbikge1xuICAgICAgbGV0IHVzZXJNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiBjcmVhdGVVc2VNYXRjaGVzTWF0Y2gobSwgc3RhdGUubG9hZGVyRGF0YSkpO1xuICAgICAgbGV0IGtleSA9IGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5KGxvY2F0aW9uLCB1c2VyTWF0Y2hlcykgfHwgbG9jYXRpb24ua2V5O1xuICAgICAgbGV0IHkgPSBzYXZlZFNjcm9sbFBvc2l0aW9uc1trZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb3V0ZXIgPSB7XG4gICAgZ2V0IGJhc2VuYW1lKCkge1xuICAgICAgcmV0dXJuIGluaXQuYmFzZW5hbWU7XG4gICAgfSxcblxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuXG4gICAgZ2V0IHJvdXRlcygpIHtcbiAgICAgIHJldHVybiBkYXRhUm91dGVzO1xuICAgIH0sXG5cbiAgICBpbml0aWFsaXplLFxuICAgIHN1YnNjcmliZSxcbiAgICBlbmFibGVTY3JvbGxSZXN0b3JhdGlvbixcbiAgICBuYXZpZ2F0ZSxcbiAgICBmZXRjaCxcbiAgICByZXZhbGlkYXRlLFxuICAgIC8vIFBhc3N0aHJvdWdoIHRvIGhpc3RvcnktYXdhcmUgY3JlYXRlSHJlZiB1c2VkIGJ5IHVzZUhyZWYgc28gd2UgZ2V0IHByb3BlclxuICAgIC8vIGhhc2gtYXdhcmUgVVJMcyBpbiBET00gcGF0aHNcbiAgICBjcmVhdGVIcmVmOiB0byA9PiBpbml0Lmhpc3RvcnkuY3JlYXRlSHJlZih0byksXG4gICAgZ2V0RmV0Y2hlcixcbiAgICBkZWxldGVGZXRjaGVyLFxuICAgIGRpc3Bvc2UsXG4gICAgX2ludGVybmFsRmV0Y2hDb250cm9sbGVyczogZmV0Y2hDb250cm9sbGVycyxcbiAgICBfaW50ZXJuYWxBY3RpdmVEZWZlcnJlZHM6IGFjdGl2ZURlZmVycmVkc1xuICB9O1xuICByZXR1cm4gcm91dGVyO1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gY3JlYXRlU3RhdGljSGFuZGxlclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuY29uc3QgdmFsaWRBY3Rpb25NZXRob2RzID0gbmV3IFNldChbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIiwgXCJERUxFVEVcIl0pO1xuY29uc3QgdmFsaWRSZXF1ZXN0TWV0aG9kcyA9IG5ldyBTZXQoW1wiR0VUXCIsIFwiSEVBRFwiLCAuLi52YWxpZEFjdGlvbk1ldGhvZHNdKTtcbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0YXRpY0hhbmRsZXIocm91dGVzKSB7XG4gIGludmFyaWFudChyb3V0ZXMubGVuZ3RoID4gMCwgXCJZb3UgbXVzdCBwcm92aWRlIGEgbm9uLWVtcHR5IHJvdXRlcyBhcnJheSB0byB1bnN0YWJsZV9jcmVhdGVTdGF0aWNIYW5kbGVyXCIpO1xuICBsZXQgZGF0YVJvdXRlcyA9IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMocm91dGVzKTtcbiAgLyoqXG4gICAqIFRoZSBxdWVyeSgpIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZG9jdW1lbnQgcmVxdWVzdHMsIGluIHdoaWNoIHdlIHdhbnQgdG9cbiAgICogY2FsbCBhbiBvcHRpb25hbCBhY3Rpb24gYW5kIHBvdGVudGlhbGx5IG11bHRpcGxlIGxvYWRlcnMgZm9yIGFsbCBuZXN0ZWRcbiAgICogcm91dGVzLiAgSXQgcmV0dXJucyBhIFN0YXRpY0hhbmRsZXJDb250ZXh0IG9iamVjdCwgd2hpY2ggaXMgdmVyeSBzaW1pbGFyXG4gICAqIHRvIHRoZSByb3V0ZXIgc3RhdGUgKGxvY2F0aW9uLCBsb2FkZXJEYXRhLCBhY3Rpb25EYXRhLCBlcnJvcnMsIGV0Yy4pIGFuZFxuICAgKiBhbHNvIGFkZHMgU1NSLXNwZWNpZmljIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIHN0YXR1c0NvZGUgYW5kIGhlYWRlcnNcbiAgICogZnJvbSBhY3Rpb24vbG9hZGVycyBSZXNwb25zZXMuXG4gICAqXG4gICAqIEl0IF9zaG91bGRfIG5ldmVyIHRocm93IGFuZCBzaG91bGQgcmVwb3J0IGFsbCBlcnJvcnMgdGhyb3VnaCB0aGVcbiAgICogcmV0dXJuZWQgY29udGV4dC5lcnJvcnMgb2JqZWN0LCBwcm9wZXJseSBhc3NvY2lhdGluZyBlcnJvcnMgdG8gdGhlaXIgZXJyb3JcbiAgICogYm91bmRhcnkuICBBZGRpdGlvbmFsbHksIGl0IHRyYWNrcyBfZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZCB3aGljaCBjYW4gYmVcbiAgICogdXNlZCB0byBlbXVsYXRlIFJlYWN0IGVycm9yIGJvdW5kYXJpZXMgZHVyaW5nIFNTciBieSBwZXJmb3JtaW5nIGEgc2Vjb25kXG4gICAqIHBhc3Mgb25seSBkb3duIHRvIHRoZSBib3VuZGFyeUlkLlxuICAgKlxuICAgKiBUaGUgb25lIGV4Y2VwdGlvbiB3aGVyZSB3ZSBkbyBub3QgcmV0dXJuIGEgU3RhdGljSGFuZGxlckNvbnRleHQgaXMgd2hlbiBhXG4gICAqIHJlZGlyZWN0IHJlc3BvbnNlIGlzIHJldHVybmVkIG9yIHRocm93biBmcm9tIGFueSBhY3Rpb24vbG9hZGVyLiAgV2VcbiAgICogcHJvcGFnYXRlIHRoYXQgb3V0IGFuZCByZXR1cm4gdGhlIHJhdyBSZXNwb25zZSBzbyB0aGUgSFRUUCBzZXJ2ZXIgY2FuXG4gICAqIHJldHVybiBpdCBkaXJlY3RseS5cbiAgICovXG5cbiAgYXN5bmMgZnVuY3Rpb24gcXVlcnkocmVxdWVzdCkge1xuICAgIGxldCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihcIlwiLCBjcmVhdGVQYXRoKHVybCksIG51bGwsIFwiZGVmYXVsdFwiKTtcbiAgICBsZXQgbWF0Y2hlcyA9IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmICghdmFsaWRSZXF1ZXN0TWV0aG9kcy5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYXRjaGVzOiBtZXRob2ROb3RBbGxvd2VkTWF0Y2hlcyxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gZ2V0TWV0aG9kTm90QWxsb3dlZE1hdGNoZXMoZGF0YVJvdXRlcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgbWF0Y2hlczogbWV0aG9kTm90QWxsb3dlZE1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICBbcm91dGUuaWRdOiBlcnJvclxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXNDb2RlOiBlcnJvci5zdGF0dXMsXG4gICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICBhY3Rpb25IZWFkZXJzOiB7fVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICBbcm91dGUuaWRdOiBlcnJvclxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXNDb2RlOiBlcnJvci5zdGF0dXMsXG4gICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICBhY3Rpb25IZWFkZXJzOiB7fVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgcXVlcnlJbXBsKHJlcXVlc3QsIGxvY2F0aW9uLCBtYXRjaGVzKTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFdoZW4gcmV0dXJuaW5nIFN0YXRpY0hhbmRsZXJDb250ZXh0LCB3ZSBwYXRjaCBiYWNrIGluIHRoZSBsb2NhdGlvbiBoZXJlXG4gICAgLy8gc2luY2Ugd2UgbmVlZCBpdCBmb3IgUmVhY3QgQ29udGV4dC4gIEJ1dCB0aGlzIGhlbHBzIGtlZXAgb3VyIHN1Ym1pdCBhbmRcbiAgICAvLyBsb2FkUm91dGVEYXRhIG9wZXJhdGluZyBvbiBhIFJlcXVlc3QgaW5zdGVhZCBvZiBhIExvY2F0aW9uXG5cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBsb2NhdGlvblxuICAgIH0sIHJlc3VsdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBxdWVyeVJvdXRlKCkgbWV0aG9kIGlzIGludGVuZGVkIGZvciB0YXJnZXRlZCByb3V0ZSByZXF1ZXN0cywgZWl0aGVyXG4gICAqIGZvciBmZXRjaCA/X2RhdGEgcmVxdWVzdHMgb3IgcmVzb3VyY2Ugcm91dGUgcmVxdWVzdHMuICBJbiB0aGlzIGNhc2UsIHdlXG4gICAqIGFyZSBvbmx5IGV2ZXIgY2FsbGluZyBhIHNpbmdsZSBhY3Rpb24gb3IgbG9hZGVyLCBhbmQgd2UgYXJlIHJldHVybmluZyB0aGVcbiAgICogcmV0dXJuZWQgdmFsdWUgZGlyZWN0bHkuICBJbiBtb3N0IGNhc2VzLCB0aGlzIHdpbGwgYmUgYSBSZXNwb25zZSByZXR1cm5lZFxuICAgKiBmcm9tIHRoZSBhY3Rpb24vbG9hZGVyLCBidXQgaXQgbWF5IGJlIGEgcHJpbWl0aXZlIG9yIG90aGVyIHZhbHVlIGFzIHdlbGwgLVxuICAgKiBhbmQgaW4gc3VjaCBjYXNlcyB0aGUgY2FsbGluZyBjb250ZXh0IHNob3VsZCBoYW5kbGUgdGhhdCBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogV2UgZG8gcmVzcGVjdCB0aGUgdGhyb3cvcmV0dXJuIGRpZmZlcmVudGlhdGlvbiwgc28gaWYgYW4gYWN0aW9uL2xvYWRlclxuICAgKiB0aHJvd3MsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyB0aGUgdmFsdWUuICBUaGlzIGlzIGltcG9ydGFudCBzbyB3ZVxuICAgKiBjYW4gZG8gcHJvcGVyIGJvdW5kYXJ5IGlkZW50aWZpY2F0aW9uIGluIFJlbWl4IHdoZXJlIGEgdGhyb3duIFJlc3BvbnNlXG4gICAqIG11c3QgZ28gdG8gdGhlIENhdGNoIEJvdW5kYXJ5IGJ1dCBhIHJldHVybmVkIFJlc3BvbnNlIGlzIGhhcHB5LXBhdGguXG4gICAqXG4gICAqIE9uZSB0aGluZyB0byBub3RlIGlzIHRoYXQgYW55IFJvdXRlci1pbml0aWF0ZWQgdGhyb3duIFJlc3BvbnNlIChzdWNoIGFzIGFcbiAgICogNDA0IG9yIDQwNSkgd2lsbCBoYXZlIGEgY3VzdG9tIFgtUmVtaXgtUm91dGVyLUVycm9yOiBcInllc1wiIGhlYWRlciBvbiBpdFxuICAgKiBpbiBvcmRlciB0byBkaWZmZXJlbnRpYXRlIGZyb20gcmVzcG9uc2VzIHRocm93biBmcm9tIHVzZXIgYWN0aW9ucy9sb2FkZXJzLlxuICAgKi9cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5Um91dGUocmVxdWVzdCwgcm91dGVJZCkge1xuICAgIGxldCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihcIlwiLCBjcmVhdGVQYXRoKHVybCksIG51bGwsIFwiZGVmYXVsdFwiKTtcbiAgICBsZXQgbWF0Y2hlcyA9IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmICghdmFsaWRSZXF1ZXN0TWV0aG9kcy5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICB0aHJvdyBjcmVhdGVSb3V0ZXJFcnJvclJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiA0MDUsXG4gICAgICAgIHN0YXR1c1RleHQ6IFwiTWV0aG9kIE5vdCBBbGxvd2VkXCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHRocm93IGNyZWF0ZVJvdXRlckVycm9yUmVzcG9uc2UobnVsbCwge1xuICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgc3RhdHVzVGV4dDogXCJOb3QgRm91bmRcIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IG1hdGNoID0gcm91dGVJZCA/IG1hdGNoZXMuZmluZChtID0+IG0ucm91dGUuaWQgPT09IHJvdXRlSWQpIDogZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgY3JlYXRlUm91dGVyRXJyb3JSZXNwb25zZShudWxsLCB7XG4gICAgICAgIHN0YXR1czogNDA0LFxuICAgICAgICBzdGF0dXNUZXh0OiBcIk5vdCBGb3VuZFwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgcXVlcnlJbXBsKHJlcXVlc3QsIGxvY2F0aW9uLCBtYXRjaGVzLCBtYXRjaCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbGV0IGVycm9yID0gcmVzdWx0LmVycm9ycyA/IE9iamVjdC52YWx1ZXMocmVzdWx0LmVycm9ycylbMF0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgd2UgZ290IGJhY2sgcmVzdWx0LmVycm9ycywgdGhhdCBtZWFucyB0aGUgbG9hZGVyL2FjdGlvbiB0aHJld1xuICAgICAgLy8gX3NvbWV0aGluZ18gdGhhdCB3YXNuJ3QgYSBSZXNwb25zZSwgYnV0IGl0J3Mgbm90IGd1YXJhbnRlZWQvcmVxdWlyZWRcbiAgICAgIC8vIHRvIGJlIGFuIGBpbnN0YW5jZW9mIEVycm9yYCBlaXRoZXIsIHNvIHdlIGhhdmUgdG8gdXNlIHRocm93IGhlcmUgdG9cbiAgICAgIC8vIHByZXNlcnZlIHRoZSBcImVycm9yXCIgc3RhdGUgb3V0c2lkZSBvZiBxdWVyeUltcGwuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IC8vIFBpY2sgb2ZmIHRoZSByaWdodCBzdGF0ZSB2YWx1ZSB0byByZXR1cm5cblxuXG4gICAgbGV0IHJvdXRlRGF0YSA9IFtyZXN1bHQuYWN0aW9uRGF0YSwgcmVzdWx0LmxvYWRlckRhdGFdLmZpbmQodiA9PiB2KTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyb3V0ZURhdGEgfHwge30pWzBdO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcXVlcnlJbXBsKHJlcXVlc3QsIGxvY2F0aW9uLCBtYXRjaGVzLCByb3V0ZU1hdGNoKSB7XG4gICAgaW52YXJpYW50KHJlcXVlc3Quc2lnbmFsLCBcInF1ZXJ5KCkvcXVlcnlSb3V0ZSgpIHJlcXVlc3RzIG11c3QgY29udGFpbiBhbiBBYm9ydENvbnRyb2xsZXIgc2lnbmFsXCIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWxpZEFjdGlvbk1ldGhvZHMuaGFzKHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc3VibWl0KHJlcXVlc3QsIG1hdGNoZXMsIHJvdXRlTWF0Y2ggfHwgZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pLCByb3V0ZU1hdGNoICE9IG51bGwpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbG9hZFJvdXRlRGF0YShyZXF1ZXN0LCBtYXRjaGVzLCByb3V0ZU1hdGNoKTtcbiAgICAgIHJldHVybiByZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSA/IHJlc3VsdCA6IF9leHRlbmRzKHt9LCByZXN1bHQsIHtcbiAgICAgICAgYWN0aW9uRGF0YTogbnVsbCxcbiAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHRocmV3L3JldHVybmVkIGEgUmVzcG9uc2UgaW4gY2FsbExvYWRlck9yQWN0aW9uLCB3ZSB0aHJvd1xuICAgICAgLy8gaXQgdG8gYmFpbCBvdXQgYW5kIHRoZW4gcmV0dXJuIG9yIHRocm93IGhlcmUgYmFzZWQgb24gd2hldGhlciB0aGUgdXNlclxuICAgICAgLy8gcmV0dXJuZWQgb3IgdGhyZXdcbiAgICAgIGlmIChpc1F1ZXJ5Um91dGVSZXNwb25zZShlKSkge1xuICAgICAgICBpZiAoZS50eXBlID09PSBSZXN1bHRUeXBlLmVycm9yICYmICFpc1JlZGlyZWN0UmVzcG9uc2UoZS5yZXNwb25zZSkpIHtcbiAgICAgICAgICB0aHJvdyBlLnJlc3BvbnNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGUucmVzcG9uc2U7XG4gICAgICB9IC8vIFJlZGlyZWN0cyBhcmUgYWx3YXlzIHJldHVybmVkIHNpbmNlIHRoZXkgZG9uJ3QgcHJvcGFnYXRlIHRvIGNhdGNoXG4gICAgICAvLyBib3VuZGFyaWVzXG5cblxuICAgICAgaWYgKGlzUmVkaXJlY3RSZXNwb25zZShlKSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdWJtaXQocmVxdWVzdCwgbWF0Y2hlcywgYWN0aW9uTWF0Y2gsIGlzUm91dGVSZXF1ZXN0KSB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmICghYWN0aW9uTWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICBpZiAoaXNSb3V0ZVJlcXVlc3QpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlUm91dGVyRXJyb3JSZXNwb25zZShudWxsLCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogXCJNZXRob2QgTm90IEFsbG93ZWRcIlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gZ2V0TWV0aG9kTm90QWxsb3dlZFJlc3VsdChyZXF1ZXN0LnVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGNhbGxMb2FkZXJPckFjdGlvbihcImFjdGlvblwiLCByZXF1ZXN0LCBhY3Rpb25NYXRjaCwgbWF0Y2hlcywgdW5kZWZpbmVkLCAvLyBCYXNlbmFtZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBzdGF0aWMgaGFuZGxlcnNcbiAgICAgIHRydWUsIGlzUm91dGVSZXF1ZXN0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlzUm91dGVSZXF1ZXN0ID8gXCJxdWVyeVJvdXRlXCIgOiBcInF1ZXJ5XCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyBcIigpIGNhbGwgYWJvcnRlZFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICAvLyBVaGhoaCAtIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgd2Ugc2hvdWxkIGFsd2F5cyB0aHJvdyB0aGVzZSBmcm9tXG4gICAgICAvLyBjYWxsTG9hZGVyT3JBY3Rpb24sIGJ1dCB0aGUgdHlwZSBuYXJyb3dpbmcgaGVyZSBrZWVwcyBUUyBoYXBweSBhbmQgd2VcbiAgICAgIC8vIGNhbiBnZXQgYmFjayBvbiB0aGUgXCJ0aHJvdyBhbGwgcmVkaXJlY3QgcmVzcG9uc2VzXCIgdHJhaW4gaGVyZSBzaG91bGRcbiAgICAgIC8vIHRoaXMgZXZlciBoYXBwZW4gOi9cbiAgICAgIHRocm93IG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIExvY2F0aW9uOiByZXN1bHQubG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzUm91dGVSZXF1ZXN0KSB7XG4gICAgICAvLyBOb3RlOiBUaGlzIHNob3VsZCBvbmx5IGJlIG5vbi1SZXNwb25zZSB2YWx1ZXMgaWYgd2UgZ2V0IGhlcmUsIHNpbmNlXG4gICAgICAvLyBpc1JvdXRlUmVxdWVzdCBzaG91bGQgdGhyb3cgYW55IFJlc3BvbnNlIHJlY2VpdmVkIGluIGNhbGxMb2FkZXJPckFjdGlvblxuICAgICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgYWN0aW9uTWF0Y2gucm91dGUuaWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoZXM6IFthY3Rpb25NYXRjaF0sXG4gICAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgICAgYWN0aW9uRGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBOb3RlOiBzdGF0dXNDb2RlICsgaGVhZGVycyBhcmUgdW51c2VkIGhlcmUgc2luY2UgcXVlcnlSb3V0ZSB3aWxsXG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSByYXcgUmVzcG9uc2Ugb3IgdmFsdWVcbiAgICAgICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICAgICAgbG9hZGVySGVhZGVyczoge30sXG4gICAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2hlczogW2FjdGlvbk1hdGNoXSxcbiAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgIGFjdGlvbkRhdGE6IHtcbiAgICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZGF0YVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcnM6IG51bGwsXG4gICAgICAgIC8vIE5vdGU6IHN0YXR1c0NvZGUgKyBoZWFkZXJzIGFyZSB1bnVzZWQgaGVyZSBzaW5jZSBxdWVyeVJvdXRlIHdpbGxcbiAgICAgICAgLy8gcmV0dXJuIHRoZSByYXcgUmVzcG9uc2Ugb3IgdmFsdWVcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBsb2FkZXJIZWFkZXJzOiB7fSxcbiAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU3RvcmUgb2ZmIHRoZSBwZW5kaW5nIGVycm9yIC0gd2UgdXNlIGl0IHRvIGRldGVybWluZSB3aGljaCBsb2FkZXJzXG4gICAgICAvLyB0byBjYWxsIGFuZCB3aWxsIGNvbW1pdCBpdCB3aGVuIHdlIGNvbXBsZXRlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgYWN0aW9uTWF0Y2gucm91dGUuaWQpO1xuICAgICAgbGV0IGNvbnRleHQgPSBhd2FpdCBsb2FkUm91dGVEYXRhKHJlcXVlc3QsIG1hdGNoZXMsIHVuZGVmaW5lZCwge1xuICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgfSk7IC8vIGFjdGlvbiBzdGF0dXMgY29kZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG9hZGVyIHN0YXR1cyBjb2Rlc1xuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHQsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogaXNSb3V0ZUVycm9yUmVzcG9uc2UocmVzdWx0LmVycm9yKSA/IHJlc3VsdC5lcnJvci5zdGF0dXMgOiA1MDAsXG4gICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgIGFjdGlvbkhlYWRlcnM6IF9leHRlbmRzKHt9LCByZXN1bHQuaGVhZGVycyA/IHtcbiAgICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuaGVhZGVyc1xuICAgICAgICB9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9IGF3YWl0IGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcyk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0LCByZXN1bHQuc3RhdHVzQ29kZSA/IHtcbiAgICAgIHN0YXR1c0NvZGU6IHJlc3VsdC5zdGF0dXNDb2RlXG4gICAgfSA6IHt9LCB7XG4gICAgICBhY3Rpb25EYXRhOiB7XG4gICAgICAgIFthY3Rpb25NYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5kYXRhXG4gICAgICB9LFxuICAgICAgYWN0aW9uSGVhZGVyczogX2V4dGVuZHMoe30sIHJlc3VsdC5oZWFkZXJzID8ge1xuICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuaGVhZGVyc1xuICAgICAgfSA6IHt9KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbG9hZFJvdXRlRGF0YShyZXF1ZXN0LCBtYXRjaGVzLCByb3V0ZU1hdGNoLCBwZW5kaW5nQWN0aW9uRXJyb3IpIHtcbiAgICBsZXQgaXNSb3V0ZVJlcXVlc3QgPSByb3V0ZU1hdGNoICE9IG51bGw7XG4gICAgbGV0IHJlcXVlc3RNYXRjaGVzID0gcm91dGVNYXRjaCA/IFtyb3V0ZU1hdGNoXSA6IGdldExvYWRlck1hdGNoZXNVbnRpbEJvdW5kYXJ5KG1hdGNoZXMsIE9iamVjdC5rZXlzKHBlbmRpbmdBY3Rpb25FcnJvciB8fCB7fSlbMF0pO1xuICAgIGxldCBtYXRjaGVzVG9Mb2FkID0gcmVxdWVzdE1hdGNoZXMuZmlsdGVyKG0gPT4gbS5yb3V0ZS5sb2FkZXIpOyAvLyBTaG9ydCBjaXJjdWl0IGlmIHdlIGhhdmUgbm8gbG9hZGVycyB0byBydW5cblxuICAgIGlmIChtYXRjaGVzVG9Mb2FkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgIGVycm9yczogcGVuZGluZ0FjdGlvbkVycm9yIHx8IG51bGwsXG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgbG9hZGVySGVhZGVyczoge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbLi4ubWF0Y2hlc1RvTG9hZC5tYXAobWF0Y2ggPT4gY2FsbExvYWRlck9yQWN0aW9uKFwibG9hZGVyXCIsIHJlcXVlc3QsIG1hdGNoLCBtYXRjaGVzLCB1bmRlZmluZWQsIC8vIEJhc2VuYW1lIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIHN0YXRpYyBoYW5kbGVyc1xuICAgIHRydWUsIGlzUm91dGVSZXF1ZXN0KSldKTtcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBsZXQgbWV0aG9kID0gaXNSb3V0ZVJlcXVlc3QgPyBcInF1ZXJ5Um91dGVcIiA6IFwicXVlcnlcIjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyBcIigpIGNhbGwgYWJvcnRlZFwiKTtcbiAgICB9IC8vIENhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlc2Ugd2l0aG91dCB0aGUgUmVtaXggc2lkZSBvZiB0aGluZ3MsIHNvIGp1c3RcbiAgICAvLyBjYW5jZWwgdGhlbSBmb3Igbm93XG5cblxuICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgICByZXN1bHQuZGVmZXJyZWREYXRhLmNhbmNlbCgpO1xuICAgICAgfVxuICAgIH0pOyAvLyBQcm9jZXNzIGFuZCBjb21taXQgb3V0cHV0IGZyb20gbG9hZGVyc1xuXG4gICAgbGV0IGNvbnRleHQgPSBwcm9jZXNzUm91dGVMb2FkZXJEYXRhKG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdBY3Rpb25FcnJvcik7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgICBtYXRjaGVzXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSb3V0ZXJFcnJvclJlc3BvbnNlKGJvZHksIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGJvZHksIF9leHRlbmRzKHt9LCBpbml0LCB7XG4gICAgICBoZWFkZXJzOiBfZXh0ZW5kcyh7fSwgaW5pdC5oZWFkZXJzLCB7XG4gICAgICAgIFwiWC1SZW1peC1Sb3V0ZXItRXJyb3JcIjogXCJ5ZXNcIlxuICAgICAgfSlcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRhdGFSb3V0ZXMsXG4gICAgcXVlcnksXG4gICAgcXVlcnlSb3V0ZVxuICB9O1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gSGVscGVyc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBHaXZlbiBhbiBleGlzdGluZyBTdGF0aWNIYW5kbGVyQ29udGV4dCBhbmQgYW4gZXJyb3IgdGhyb3duIGF0IHJlbmRlciB0aW1lLFxuICogcHJvdmlkZSBhbiB1cGRhdGVkIFN0YXRpY0hhbmRsZXJDb250ZXh0IHN1aXRhYmxlIGZvciBhIHNlY29uZCBTU1IgcmVuZGVyXG4gKi9cblxuZnVuY3Rpb24gZ2V0U3RhdGljQ29udGV4dEZyb21FcnJvcihyb3V0ZXMsIGNvbnRleHQsIGVycm9yKSB7XG4gIGxldCBuZXdDb250ZXh0ID0gX2V4dGVuZHMoe30sIGNvbnRleHQsIHtcbiAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgZXJyb3JzOiB7XG4gICAgICBbY29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZCB8fCByb3V0ZXNbMF0uaWRdOiBlcnJvclxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5ld0NvbnRleHQ7XG59IC8vIE5vcm1hbGl6ZSBuYXZpZ2F0aW9uIG9wdGlvbnMgYnkgY29udmVydGluZyBmb3JtTWV0aG9kPUdFVCBmb3JtRGF0YSBvYmplY3RzIHRvXG4vLyBVUkxTZWFyY2hQYXJhbXMgc28gdGhleSBiZWhhdmUgaWRlbnRpY2FsbHkgdG8gbGlua3Mgd2l0aCBxdWVyeSBwYXJhbXNcblxuZnVuY3Rpb24gbm9ybWFsaXplTmF2aWdhdGVPcHRpb25zKHRvLCBvcHRzLCBpc0ZldGNoZXIpIHtcbiAgaWYgKGlzRmV0Y2hlciA9PT0gdm9pZCAwKSB7XG4gICAgaXNGZXRjaGVyID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcGF0aCA9IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0byk7IC8vIFJldHVybiBsb2NhdGlvbiB2ZXJiYXRpbSBvbiBub24tc3VibWlzc2lvbiBuYXZpZ2F0aW9uc1xuXG4gIGlmICghb3B0cyB8fCAhKFwiZm9ybU1ldGhvZFwiIGluIG9wdHMpICYmICEoXCJmb3JtRGF0YVwiIGluIG9wdHMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhcbiAgICB9O1xuICB9IC8vIENyZWF0ZSBhIFN1Ym1pc3Npb24gb24gbm9uLUdFVCBuYXZpZ2F0aW9uc1xuXG5cbiAgaWYgKG9wdHMuZm9ybU1ldGhvZCAhPSBudWxsICYmIG9wdHMuZm9ybU1ldGhvZCAhPT0gXCJnZXRcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgc3VibWlzc2lvbjoge1xuICAgICAgICBmb3JtTWV0aG9kOiBvcHRzLmZvcm1NZXRob2QsXG4gICAgICAgIGZvcm1BY3Rpb246IHN0cmlwSGFzaEZyb21QYXRoKHBhdGgpLFxuICAgICAgICBmb3JtRW5jVHlwZTogb3B0cyAmJiBvcHRzLmZvcm1FbmNUeXBlIHx8IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICAgIGZvcm1EYXRhOiBvcHRzLmZvcm1EYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSAvLyBObyBmb3JtRGF0YSB0byBmbGF0dGVuIGZvciBHRVQgc3VibWlzc2lvblxuXG5cbiAgaWYgKCFvcHRzLmZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhcbiAgICB9O1xuICB9IC8vIEZsYXR0ZW4gc3VibWlzc2lvbiBvbnRvIFVSTFNlYXJjaFBhcmFtcyBmb3IgR0VUIHN1Ym1pc3Npb25zXG5cblxuICBsZXQgcGFyc2VkUGF0aCA9IHBhcnNlUGF0aChwYXRoKTtcblxuICB0cnkge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBjb252ZXJ0Rm9ybURhdGFUb1NlYXJjaFBhcmFtcyhvcHRzLmZvcm1EYXRhKTsgLy8gU2luY2UgZmV0Y2hlciBHRVQgc3VibWlzc2lvbnMgb25seSBydW4gYSBzaW5nbGUgbG9hZGVyIChhcyBvcHBvc2VkIHRvXG4gICAgLy8gbmF2aWdhdGlvbiBHRVQgc3VibWlzc2lvbnMgd2hpY2ggcnVuIGFsbCBsb2FkZXJzKSwgd2UgbmVlZCB0byBwcmVzZXJ2ZVxuICAgIC8vIGFueSBpbmNvbWluZyA/aW5kZXggcGFyYW1zXG5cbiAgICBpZiAoaXNGZXRjaGVyICYmIHBhcnNlZFBhdGguc2VhcmNoICYmIGhhc05ha2VkSW5kZXhRdWVyeShwYXJzZWRQYXRoLnNlYXJjaCkpIHtcbiAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoXCJpbmRleFwiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBwYXJzZWRQYXRoLnNlYXJjaCA9IFwiP1wiICsgc2VhcmNoUGFyYW1zO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGgsXG4gICAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2UoNDAwLCBcIkJhZCBSZXF1ZXN0XCIsIFwiQ2Fubm90IHN1Ym1pdCBiaW5hcnkgZm9ybSBkYXRhIHVzaW5nIEdFVFwiKVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IGNyZWF0ZVBhdGgocGFyc2VkUGF0aClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlZGlyZWN0KSB7XG4gIGxldCB7XG4gICAgZm9ybU1ldGhvZCxcbiAgICBmb3JtQWN0aW9uLFxuICAgIGZvcm1FbmNUeXBlLFxuICAgIGZvcm1EYXRhXG4gIH0gPSBzdGF0ZS5uYXZpZ2F0aW9uO1xuICBsZXQgbmF2aWdhdGlvbiA9IHtcbiAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgbG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uKHN0YXRlLmxvY2F0aW9uLCByZWRpcmVjdC5sb2NhdGlvbiksXG4gICAgZm9ybU1ldGhvZDogZm9ybU1ldGhvZCB8fCB1bmRlZmluZWQsXG4gICAgZm9ybUFjdGlvbjogZm9ybUFjdGlvbiB8fCB1bmRlZmluZWQsXG4gICAgZm9ybUVuY1R5cGU6IGZvcm1FbmNUeXBlIHx8IHVuZGVmaW5lZCxcbiAgICBmb3JtRGF0YTogZm9ybURhdGEgfHwgdW5kZWZpbmVkXG4gIH07XG4gIHJldHVybiBuYXZpZ2F0aW9uO1xufSAvLyBGaWx0ZXIgb3V0IGFsbCByb3V0ZXMgYmVsb3cgYW55IGNhdWdodCBlcnJvciBhcyB0aGV5IGFyZW4ndCBnb2luZyB0b1xuLy8gcmVuZGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9hZCB0aGVtXG5cblxuZnVuY3Rpb24gZ2V0TG9hZGVyTWF0Y2hlc1VudGlsQm91bmRhcnkobWF0Y2hlcywgYm91bmRhcnlJZCkge1xuICBsZXQgYm91bmRhcnlNYXRjaGVzID0gbWF0Y2hlcztcblxuICBpZiAoYm91bmRhcnlJZCkge1xuICAgIGxldCBpbmRleCA9IG1hdGNoZXMuZmluZEluZGV4KG0gPT4gbS5yb3V0ZS5pZCA9PT0gYm91bmRhcnlJZCk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgYm91bmRhcnlNYXRjaGVzID0gbWF0Y2hlcy5zbGljZSgwLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJvdW5kYXJ5TWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gZ2V0TWF0Y2hlc1RvTG9hZChzdGF0ZSwgbWF0Y2hlcywgc3VibWlzc2lvbiwgbG9jYXRpb24sIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IsIGZldGNoTG9hZE1hdGNoZXMpIHtcbiAgbGV0IGFjdGlvblJlc3VsdCA9IHBlbmRpbmdFcnJvciA/IE9iamVjdC52YWx1ZXMocGVuZGluZ0Vycm9yKVswXSA6IHBlbmRpbmdBY3Rpb25EYXRhID8gT2JqZWN0LnZhbHVlcyhwZW5kaW5nQWN0aW9uRGF0YSlbMF0gOiBudWxsOyAvLyBQaWNrIG5hdmlnYXRpb24gbWF0Y2hlcyB0aGF0IGFyZSBuZXQtbmV3IG9yIHF1YWxpZnkgZm9yIHJldmFsaWRhdGlvblxuXG4gIGxldCBib3VuZGFyeUlkID0gcGVuZGluZ0Vycm9yID8gT2JqZWN0LmtleXMocGVuZGluZ0Vycm9yKVswXSA6IHVuZGVmaW5lZDtcbiAgbGV0IGJvdW5kYXJ5TWF0Y2hlcyA9IGdldExvYWRlck1hdGNoZXNVbnRpbEJvdW5kYXJ5KG1hdGNoZXMsIGJvdW5kYXJ5SWQpO1xuICBsZXQgbmF2aWdhdGlvbk1hdGNoZXMgPSBib3VuZGFyeU1hdGNoZXMuZmlsdGVyKChtYXRjaCwgaW5kZXgpID0+IG1hdGNoLnJvdXRlLmxvYWRlciAhPSBudWxsICYmIChpc05ld0xvYWRlcihzdGF0ZS5sb2FkZXJEYXRhLCBzdGF0ZS5tYXRjaGVzW2luZGV4XSwgbWF0Y2gpIHx8IC8vIElmIHRoaXMgcm91dGUgaGFkIGEgcGVuZGluZyBkZWZlcnJlZCBjYW5jZWxsZWQgaXQgbXVzdCBiZSByZXZhbGlkYXRlZFxuICBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcy5zb21lKGlkID0+IGlkID09PSBtYXRjaC5yb3V0ZS5pZCkgfHwgc2hvdWxkUmV2YWxpZGF0ZUxvYWRlcihzdGF0ZS5sb2NhdGlvbiwgc3RhdGUubWF0Y2hlc1tpbmRleF0sIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBtYXRjaCwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgYWN0aW9uUmVzdWx0KSkpOyAvLyBQaWNrIGZldGNoZXIubG9hZHMgdGhhdCBuZWVkIHRvIGJlIHJldmFsaWRhdGVkXG5cbiAgbGV0IHJldmFsaWRhdGluZ0ZldGNoZXJzID0gW107XG4gIGZldGNoTG9hZE1hdGNoZXMgJiYgZmV0Y2hMb2FkTWF0Y2hlcy5mb3JFYWNoKChfcmVmMTAsIGtleSkgPT4ge1xuICAgIGxldCBbaHJlZiwgbWF0Y2gsIGZldGNoTWF0Y2hlc10gPSBfcmVmMTA7XG5cbiAgICAvLyBUaGlzIGZldGNoZXIgd2FzIGNhbmNlbGxlZCBmcm9tIGEgcHJpb3IgYWN0aW9uIHN1Ym1pc3Npb24gLSBmb3JjZSByZWxvYWRcbiAgICBpZiAoY2FuY2VsbGVkRmV0Y2hlckxvYWRzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLnB1c2goW2tleSwgaHJlZiwgbWF0Y2gsIGZldGNoTWF0Y2hlc10pO1xuICAgIH0gZWxzZSBpZiAoaXNSZXZhbGlkYXRpb25SZXF1aXJlZCkge1xuICAgICAgbGV0IHNob3VsZFJldmFsaWRhdGUgPSBzaG91bGRSZXZhbGlkYXRlTG9hZGVyKGhyZWYsIG1hdGNoLCBzdWJtaXNzaW9uLCBocmVmLCBtYXRjaCwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgYWN0aW9uUmVzdWx0KTtcblxuICAgICAgaWYgKHNob3VsZFJldmFsaWRhdGUpIHtcbiAgICAgICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMucHVzaChba2V5LCBocmVmLCBtYXRjaCwgZmV0Y2hNYXRjaGVzXSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFtuYXZpZ2F0aW9uTWF0Y2hlcywgcmV2YWxpZGF0aW5nRmV0Y2hlcnNdO1xufVxuXG5mdW5jdGlvbiBpc05ld0xvYWRlcihjdXJyZW50TG9hZGVyRGF0YSwgY3VycmVudE1hdGNoLCBtYXRjaCkge1xuICBsZXQgaXNOZXcgPSAvLyBbYV0gLT4gW2EsIGJdXG4gICFjdXJyZW50TWF0Y2ggfHwgLy8gW2EsIGJdIC0+IFthLCBjXVxuICBtYXRjaC5yb3V0ZS5pZCAhPT0gY3VycmVudE1hdGNoLnJvdXRlLmlkOyAvLyBIYW5kbGUgdGhlIGNhc2UgdGhhdCB3ZSBkb24ndCBoYXZlIGRhdGEgZm9yIGEgcmUtdXNlZCByb3V0ZSwgcG90ZW50aWFsbHlcbiAgLy8gZnJvbSBhIHByaW9yIGVycm9yIG9yIGZyb20gYSBjYW5jZWxsZWQgcGVuZGluZyBkZWZlcnJlZFxuXG4gIGxldCBpc01pc3NpbmdEYXRhID0gY3VycmVudExvYWRlckRhdGFbbWF0Y2gucm91dGUuaWRdID09PSB1bmRlZmluZWQ7IC8vIEFsd2F5cyBsb2FkIGlmIHRoaXMgaXMgYSBuZXQtbmV3IHJvdXRlIG9yIHdlIGRvbid0IHlldCBoYXZlIGRhdGFcblxuICByZXR1cm4gaXNOZXcgfHwgaXNNaXNzaW5nRGF0YTtcbn1cblxuZnVuY3Rpb24gaXNOZXdSb3V0ZUluc3RhbmNlKGN1cnJlbnRNYXRjaCwgbWF0Y2gpIHtcbiAgbGV0IGN1cnJlbnRQYXRoID0gY3VycmVudE1hdGNoLnJvdXRlLnBhdGg7XG4gIHJldHVybiAoLy8gcGFyYW0gY2hhbmdlIGZvciB0aGlzIG1hdGNoLCAvdXNlcnMvMTIzIC0+IC91c2Vycy80NTZcbiAgICBjdXJyZW50TWF0Y2gucGF0aG5hbWUgIT09IG1hdGNoLnBhdGhuYW1lIHx8IC8vIHNwbGF0IHBhcmFtIGNoYW5nZWQsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIG1hdGNoLnBhdGhcbiAgICAvLyBlLmcuIC9maWxlcy9pbWFnZXMvYXZhdGFyLmpwZyAtPiBmaWxlcy9maW5hbmNlcy54bHNcbiAgICBjdXJyZW50UGF0aCAmJiBjdXJyZW50UGF0aC5lbmRzV2l0aChcIipcIikgJiYgY3VycmVudE1hdGNoLnBhcmFtc1tcIipcIl0gIT09IG1hdGNoLnBhcmFtc1tcIipcIl1cbiAgKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUmV2YWxpZGF0ZUxvYWRlcihjdXJyZW50TG9jYXRpb24sIGN1cnJlbnRNYXRjaCwgc3VibWlzc2lvbiwgbG9jYXRpb24sIG1hdGNoLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBhY3Rpb25SZXN1bHQpIHtcbiAgbGV0IGN1cnJlbnRVcmwgPSBjcmVhdGVVUkwoY3VycmVudExvY2F0aW9uKTtcbiAgbGV0IGN1cnJlbnRQYXJhbXMgPSBjdXJyZW50TWF0Y2gucGFyYW1zO1xuICBsZXQgbmV4dFVybCA9IGNyZWF0ZVVSTChsb2NhdGlvbik7XG4gIGxldCBuZXh0UGFyYW1zID0gbWF0Y2gucGFyYW1zOyAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFzIHRvIHdoZW4gd2UgcmV2YWxpZGF0ZS4gIElmIHRoZSByb3V0ZVxuICAvLyBwcm92aWRlcyBpdCdzIG93biBpbXBsZW1lbnRhdGlvbiwgdGhlbiB3ZSBnaXZlIHRoZW0gZnVsbCBjb250cm9sIGJ1dFxuICAvLyBwcm92aWRlIHRoaXMgdmFsdWUgc28gdGhleSBjYW4gbGV2ZXJhZ2UgaXQgaWYgbmVlZGVkIGFmdGVyIHRoZXkgY2hlY2tcbiAgLy8gdGhlaXIgb3duIHNwZWNpZmljIHVzZSBjYXNlc1xuICAvLyBOb3RlIHRoYXQgZmV0Y2hlcnMgYWx3YXlzIHByb3ZpZGUgdGhlIHNhbWUgY3VycmVudC9uZXh0IGxvY2F0aW9ucyBzbyB0aGVcbiAgLy8gVVJMLWJhc2VkIGNoZWNrcyBoZXJlIGRvbid0IGFwcGx5IHRvIGZldGNoZXIgc2hvdWxkUmV2YWxpZGF0ZSBjYWxsc1xuXG4gIGxldCBkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZSA9IGlzTmV3Um91dGVJbnN0YW5jZShjdXJyZW50TWF0Y2gsIG1hdGNoKSB8fCAvLyBDbGlja2VkIHRoZSBzYW1lIGxpbmssIHJlc3VibWl0dGVkIGEgR0VUIGZvcm1cbiAgY3VycmVudFVybC50b1N0cmluZygpID09PSBuZXh0VXJsLnRvU3RyaW5nKCkgfHwgLy8gU2VhcmNoIHBhcmFtcyBhZmZlY3QgYWxsIGxvYWRlcnNcbiAgY3VycmVudFVybC5zZWFyY2ggIT09IG5leHRVcmwuc2VhcmNoIHx8IC8vIEZvcmNlZCByZXZhbGlkYXRpb24gZHVlIHRvIHN1Ym1pc3Npb24sIHVzZVJldmFsaWRhdGUsIG9yIFgtUmVtaXgtUmV2YWxpZGF0ZVxuICBpc1JldmFsaWRhdGlvblJlcXVpcmVkO1xuXG4gIGlmIChtYXRjaC5yb3V0ZS5zaG91bGRSZXZhbGlkYXRlKSB7XG4gICAgbGV0IHJvdXRlQ2hvaWNlID0gbWF0Y2gucm91dGUuc2hvdWxkUmV2YWxpZGF0ZShfZXh0ZW5kcyh7XG4gICAgICBjdXJyZW50VXJsLFxuICAgICAgY3VycmVudFBhcmFtcyxcbiAgICAgIG5leHRVcmwsXG4gICAgICBuZXh0UGFyYW1zXG4gICAgfSwgc3VibWlzc2lvbiwge1xuICAgICAgYWN0aW9uUmVzdWx0LFxuICAgICAgZGVmYXVsdFNob3VsZFJldmFsaWRhdGVcbiAgICB9KSk7XG5cbiAgICBpZiAodHlwZW9mIHJvdXRlQ2hvaWNlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHJvdXRlQ2hvaWNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsbExvYWRlck9yQWN0aW9uKHR5cGUsIHJlcXVlc3QsIG1hdGNoLCBtYXRjaGVzLCBiYXNlbmFtZSwgaXNTdGF0aWNSZXF1ZXN0LCBpc1JvdXRlUmVxdWVzdCkge1xuICBpZiAoaXNTdGF0aWNSZXF1ZXN0ID09PSB2b2lkIDApIHtcbiAgICBpc1N0YXRpY1JlcXVlc3QgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1JvdXRlUmVxdWVzdCA9PT0gdm9pZCAwKSB7XG4gICAgaXNSb3V0ZVJlcXVlc3QgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCByZXN1bHRUeXBlO1xuICBsZXQgcmVzdWx0OyAvLyBTZXR1cCBhIHByb21pc2Ugd2UgY2FuIHJhY2UgYWdhaW5zdCBzbyB0aGF0IGFib3J0IHNpZ25hbHMgc2hvcnQgY2lyY3VpdFxuXG4gIGxldCByZWplY3Q7XG4gIGxldCBhYm9ydFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcikgPT4gcmVqZWN0ID0gcik7XG5cbiAgbGV0IG9uUmVqZWN0ID0gKCkgPT4gcmVqZWN0KCk7XG5cbiAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uUmVqZWN0KTtcblxuICB0cnkge1xuICAgIGxldCBoYW5kbGVyID0gbWF0Y2gucm91dGVbdHlwZV07XG4gICAgaW52YXJpYW50KGhhbmRsZXIsIFwiQ291bGQgbm90IGZpbmQgdGhlIFwiICsgdHlwZSArIFwiIHRvIHJ1biBvbiB0aGUgXFxcIlwiICsgbWF0Y2gucm91dGUuaWQgKyBcIlxcXCIgcm91dGVcIik7XG4gICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtoYW5kbGVyKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBwYXJhbXM6IG1hdGNoLnBhcmFtc1xuICAgIH0pLCBhYm9ydFByb21pc2VdKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLmVycm9yO1xuICAgIHJlc3VsdCA9IGU7XG4gIH0gZmluYWxseSB7XG4gICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uUmVqZWN0KTtcbiAgfVxuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgIGxldCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzOyAvLyBQcm9jZXNzIHJlZGlyZWN0c1xuXG4gICAgaWYgKHN0YXR1cyA+PSAzMDAgJiYgc3RhdHVzIDw9IDM5OSkge1xuICAgICAgbGV0IGxvY2F0aW9uID0gcmVzdWx0LmhlYWRlcnMuZ2V0KFwiTG9jYXRpb25cIik7XG4gICAgICBpbnZhcmlhbnQobG9jYXRpb24sIFwiUmVkaXJlY3RzIHJldHVybmVkL3Rocm93biBmcm9tIGxvYWRlcnMvYWN0aW9ucyBtdXN0IGhhdmUgYSBMb2NhdGlvbiBoZWFkZXJcIik7IC8vIFN1cHBvcnQgcmVsYXRpdmUgcm91dGluZyBpbiByZWRpcmVjdHNcblxuICAgICAgbGV0IGFjdGl2ZU1hdGNoZXMgPSBtYXRjaGVzLnNsaWNlKDAsIG1hdGNoZXMuaW5kZXhPZihtYXRjaCkgKyAxKTtcbiAgICAgIGxldCByb3V0ZVBhdGhuYW1lcyA9IGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKGFjdGl2ZU1hdGNoZXMpLm1hcChtYXRjaCA9PiBtYXRjaC5wYXRobmFtZUJhc2UpO1xuICAgICAgbGV0IHJlcXVlc3RQYXRoID0gY3JlYXRlVVJMKHJlcXVlc3QudXJsKS5wYXRobmFtZTtcbiAgICAgIGxldCByZXNvbHZlZExvY2F0aW9uID0gcmVzb2x2ZVRvKGxvY2F0aW9uLCByb3V0ZVBhdGhuYW1lcywgcmVxdWVzdFBhdGgpO1xuICAgICAgaW52YXJpYW50KGNyZWF0ZVBhdGgocmVzb2x2ZWRMb2NhdGlvbiksIFwiVW5hYmxlIHRvIHJlc29sdmUgcmVkaXJlY3QgbG9jYXRpb246IFwiICsgcmVzdWx0LmhlYWRlcnMuZ2V0KFwiTG9jYXRpb25cIikpOyAvLyBQcmVwZW5kIHRoZSBiYXNlbmFtZSB0byB0aGUgcmVkaXJlY3QgbG9jYXRpb24gaWYgd2UgaGF2ZSBvbmVcblxuICAgICAgaWYgKGJhc2VuYW1lKSB7XG4gICAgICAgIGxldCBwYXRoID0gcmVzb2x2ZWRMb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgcmVzb2x2ZWRMb2NhdGlvbi5wYXRobmFtZSA9IHBhdGggPT09IFwiL1wiID8gYmFzZW5hbWUgOiBqb2luUGF0aHMoW2Jhc2VuYW1lLCBwYXRoXSk7XG4gICAgICB9XG5cbiAgICAgIGxvY2F0aW9uID0gY3JlYXRlUGF0aChyZXNvbHZlZExvY2F0aW9uKTsgLy8gRG9uJ3QgcHJvY2VzcyByZWRpcmVjdHMgaW4gdGhlIHJvdXRlciBkdXJpbmcgc3RhdGljIHJlcXVlc3RzIHJlcXVlc3RzLlxuICAgICAgLy8gSW5zdGVhZCwgdGhyb3cgdGhlIFJlc3BvbnNlIGFuZCBsZXQgdGhlIHNlcnZlciBoYW5kbGUgaXQgd2l0aCBhbiBIVFRQXG4gICAgICAvLyByZWRpcmVjdC4gIFdlIGFsc28gdXBkYXRlIHRoZSBMb2NhdGlvbiBoZWFkZXIgaW4gcGxhY2UgaW4gdGhpcyBmbG93IHNvXG4gICAgICAvLyBiYXNlbmFtZSBhbmQgcmVsYXRpdmUgcm91dGluZyBpcyB0YWtlbiBpbnRvIGFjY291bnRcblxuICAgICAgaWYgKGlzU3RhdGljUmVxdWVzdCkge1xuICAgICAgICByZXN1bHQuaGVhZGVycy5zZXQoXCJMb2NhdGlvblwiLCBsb2NhdGlvbik7XG4gICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5yZWRpcmVjdCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmV2YWxpZGF0ZTogcmVzdWx0LmhlYWRlcnMuZ2V0KFwiWC1SZW1peC1SZXZhbGlkYXRlXCIpICE9PSBudWxsXG4gICAgICB9O1xuICAgIH0gLy8gRm9yIFNTUiBzaW5nbGUtcm91dGUgcmVxdWVzdHMsIHdlIHdhbnQgdG8gaGFuZCBSZXNwb25zZXMgYmFjayBkaXJlY3RseVxuICAgIC8vIHdpdGhvdXQgdW53cmFwcGluZy4gIFdlIGRvIHRoaXMgd2l0aCB0aGUgUXVlcnlSb3V0ZVJlc3BvbnNlIHdyYXBwZXJcbiAgICAvLyBpbnRlcmZhY2Ugc28gd2UgY2FuIGtub3cgd2hldGhlciBpdCB3YXMgcmV0dXJuZWQgb3IgdGhyb3duXG5cblxuICAgIGlmIChpc1JvdXRlUmVxdWVzdCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgIHRocm93IHtcbiAgICAgICAgdHlwZTogcmVzdWx0VHlwZSB8fCBSZXN1bHRUeXBlLmRhdGEsXG4gICAgICAgIHJlc3BvbnNlOiByZXN1bHRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVzdWx0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuXG4gICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBkYXRhID0gYXdhaXQgcmVzdWx0Lmpzb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdC50ZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHJlc3VsdFR5cGUsXG4gICAgICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZShzdGF0dXMsIHJlc3VsdC5zdGF0dXNUZXh0LCBkYXRhKSxcbiAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFJlc3VsdFR5cGUuZGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzLFxuICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnNcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogcmVzdWx0VHlwZSxcbiAgICAgIGVycm9yOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIERlZmVycmVkRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBSZXN1bHRUeXBlLmRlZmVycmVkLFxuICAgICAgZGVmZXJyZWREYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgZGF0YTogcmVzdWx0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3QobG9jYXRpb24sIHNpZ25hbCwgc3VibWlzc2lvbikge1xuICBsZXQgdXJsID0gY3JlYXRlVVJMKHN0cmlwSGFzaEZyb21QYXRoKGxvY2F0aW9uKSkudG9TdHJpbmcoKTtcbiAgbGV0IGluaXQgPSB7XG4gICAgc2lnbmFsXG4gIH07XG5cbiAgaWYgKHN1Ym1pc3Npb24pIHtcbiAgICBsZXQge1xuICAgICAgZm9ybU1ldGhvZCxcbiAgICAgIGZvcm1FbmNUeXBlLFxuICAgICAgZm9ybURhdGFcbiAgICB9ID0gc3VibWlzc2lvbjtcbiAgICBpbml0Lm1ldGhvZCA9IGZvcm1NZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICBpbml0LmJvZHkgPSBmb3JtRW5jVHlwZSA9PT0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiA/IGNvbnZlcnRGb3JtRGF0YVRvU2VhcmNoUGFyYW1zKGZvcm1EYXRhKSA6IGZvcm1EYXRhO1xuICB9IC8vIENvbnRlbnQtVHlwZSBpcyBpbmZlcnJlZCAoaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0KVxuXG5cbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHVybCwgaW5pdCk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGb3JtRGF0YVRvU2VhcmNoUGFyYW1zKGZvcm1EYXRhKSB7XG4gIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIsICdGaWxlIGlucHV0cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGVuY1R5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiwgJyArICdwbGVhc2UgdXNlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIGluc3RlYWQuJyk7XG4gICAgc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBzZWFyY2hQYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSb3V0ZUxvYWRlckRhdGEobWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgcGVuZGluZ0Vycm9yLCBhY3RpdmVEZWZlcnJlZHMpIHtcbiAgLy8gRmlsbCBpbiBsb2FkZXJEYXRhL2Vycm9ycyBmcm9tIG91ciBsb2FkZXJzXG4gIGxldCBsb2FkZXJEYXRhID0ge307XG4gIGxldCBlcnJvcnMgPSBudWxsO1xuICBsZXQgc3RhdHVzQ29kZTtcbiAgbGV0IGZvdW5kRXJyb3IgPSBmYWxzZTtcbiAgbGV0IGxvYWRlckhlYWRlcnMgPSB7fTsgLy8gUHJvY2VzcyBsb2FkZXIgcmVzdWx0cyBpbnRvIHN0YXRlLmxvYWRlckRhdGEvc3RhdGUuZXJyb3JzXG5cbiAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgbGV0IGlkID0gbWF0Y2hlc1RvTG9hZFtpbmRleF0ucm91dGUuaWQ7XG4gICAgaW52YXJpYW50KCFpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCksIFwiQ2Fubm90IGhhbmRsZSByZWRpcmVjdCByZXN1bHRzIGluIHByb2Nlc3NMb2FkZXJEYXRhXCIpO1xuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gTG9vayB1cHdhcmRzIGZyb20gdGhlIG1hdGNoZWQgcm91dGUgZm9yIHRoZSBjbG9zZXN0IGFuY2VzdG9yXG4gICAgICAvLyBlcnJvciBib3VuZGFyeSwgZGVmYXVsdGluZyB0byB0aGUgcm9vdCBtYXRjaFxuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGlkKTtcbiAgICAgIGxldCBlcnJvciA9IHJlc3VsdC5lcnJvcjsgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgYWN0aW9uIGVycm9yLCB3ZSByZXBvcnQgaXQgYXQgdGhlIGhpZ2hlc3Qtcm91dGVcbiAgICAgIC8vIHRoYXQgdGhyb3dzIGEgbG9hZGVyIGVycm9yLCBhbmQgdGhlbiBjbGVhciBpdCBvdXQgdG8gaW5kaWNhdGUgdGhhdFxuICAgICAgLy8gaXQgd2FzIGNvbnN1bWVkXG5cbiAgICAgIGlmIChwZW5kaW5nRXJyb3IpIHtcbiAgICAgICAgZXJyb3IgPSBPYmplY3QudmFsdWVzKHBlbmRpbmdFcnJvcilbMF07XG4gICAgICAgIHBlbmRpbmdFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZXJyb3JzID0gT2JqZWN0LmFzc2lnbihlcnJvcnMgfHwge30sIHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiBlcnJvclxuICAgICAgfSk7IC8vIE9uY2Ugd2UgZmluZCBvdXIgZmlyc3QgKGhpZ2hlc3QpIGVycm9yLCB3ZSBzZXQgdGhlIHN0YXR1cyBjb2RlIGFuZFxuICAgICAgLy8gcHJldmVudCBkZWVwZXIgc3RhdHVzIGNvZGVzIGZyb20gb3ZlcnJpZGluZ1xuXG4gICAgICBpZiAoIWZvdW5kRXJyb3IpIHtcbiAgICAgICAgZm91bmRFcnJvciA9IHRydWU7XG4gICAgICAgIHN0YXR1c0NvZGUgPSBpc1JvdXRlRXJyb3JSZXNwb25zZShyZXN1bHQuZXJyb3IpID8gcmVzdWx0LmVycm9yLnN0YXR1cyA6IDUwMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgIGxvYWRlckhlYWRlcnNbaWRdID0gcmVzdWx0LmhlYWRlcnM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGFjdGl2ZURlZmVycmVkcyAmJiBhY3RpdmVEZWZlcnJlZHMuc2V0KGlkLCByZXN1bHQuZGVmZXJyZWREYXRhKTtcbiAgICAgIGxvYWRlckRhdGFbaWRdID0gcmVzdWx0LmRlZmVycmVkRGF0YS5kYXRhOyAvLyBUT0RPOiBBZGQgc3RhdHVzQ29kZS9oZWFkZXJzIG9uY2Ugd2Ugd2lyZSB1cCBzdHJlYW1pbmcgaW4gUmVtaXhcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGVyRGF0YVtpZF0gPSByZXN1bHQuZGF0YTsgLy8gRXJyb3Igc3RhdHVzIGNvZGVzIGFsd2F5cyBvdmVycmlkZSBzdWNjZXNzIHN0YXR1cyBjb2RlcywgYnV0IGlmIGFsbFxuICAgICAgLy8gbG9hZGVycyBhcmUgc3VjY2Vzc2Z1bCB3ZSB0YWtlIHRoZSBkZWVwZXN0IHN0YXR1cyBjb2RlLlxuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1c0NvZGUgIT0gbnVsbCAmJiByZXN1bHQuc3RhdHVzQ29kZSAhPT0gMjAwICYmICFmb3VuZEVycm9yKSB7XG4gICAgICAgIHN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgIGxvYWRlckhlYWRlcnNbaWRdID0gcmVzdWx0LmhlYWRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9KTsgLy8gSWYgd2UgZGlkbid0IGNvbnN1bWUgdGhlIHBlbmRpbmcgYWN0aW9uIGVycm9yIChpLmUuLCBhbGwgbG9hZGVyc1xuICAvLyByZXNvbHZlZCksIHRoZW4gY29uc3VtZSBpdCBoZXJlXG5cbiAgaWYgKHBlbmRpbmdFcnJvcikge1xuICAgIGVycm9ycyA9IHBlbmRpbmdFcnJvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9hZGVyRGF0YSxcbiAgICBlcnJvcnMsXG4gICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSB8fCAyMDAsXG4gICAgbG9hZGVySGVhZGVyc1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTG9hZGVyRGF0YShzdGF0ZSwgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgcGVuZGluZ0Vycm9yLCByZXZhbGlkYXRpbmdGZXRjaGVycywgZmV0Y2hlclJlc3VsdHMsIGFjdGl2ZURlZmVycmVkcykge1xuICBsZXQge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzXG4gIH0gPSBwcm9jZXNzUm91dGVMb2FkZXJEYXRhKG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdFcnJvciwgYWN0aXZlRGVmZXJyZWRzKTsgLy8gUHJvY2VzcyByZXN1bHRzIGZyb20gb3VyIHJldmFsaWRhdGluZyBmZXRjaGVyc1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBsZXQgW2tleSwsIG1hdGNoXSA9IHJldmFsaWRhdGluZ0ZldGNoZXJzW2luZGV4XTtcbiAgICBpbnZhcmlhbnQoZmV0Y2hlclJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBmZXRjaGVyUmVzdWx0c1tpbmRleF0gIT09IHVuZGVmaW5lZCwgXCJEaWQgbm90IGZpbmQgY29ycmVzcG9uZGluZyBmZXRjaGVyIHJlc3VsdFwiKTtcbiAgICBsZXQgcmVzdWx0ID0gZmV0Y2hlclJlc3VsdHNbaW5kZXhdOyAvLyBQcm9jZXNzIGZldGNoZXIgbm9uLXJlZGlyZWN0IGVycm9yc1xuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KHN0YXRlLm1hdGNoZXMsIG1hdGNoLnJvdXRlLmlkKTtcblxuICAgICAgaWYgKCEoZXJyb3JzICYmIGVycm9yc1tib3VuZGFyeU1hdGNoLnJvdXRlLmlkXSkpIHtcbiAgICAgICAgZXJyb3JzID0gX2V4dGVuZHMoe30sIGVycm9ycywge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5mZXRjaGVycy5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLCByZWRpcmVjdHMgc2hvdWxkIGdldCBwcm9jZXNzZWQgYWJvdmUsIGJ1dCB3ZVxuICAgICAgLy8ga2VlcCB0aGlzIHRvIHR5cGUgbmFycm93IHRvIGEgc3VjY2VzcyByZXN1bHQgaW4gdGhlIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBmZXRjaGVyIHJldmFsaWRhdGlvbiByZWRpcmVjdFwiKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLCBkZWZlcnJlZCBkYXRhIHNob3VsZCBiZSBhd2FpdGVkIGZvciBmZXRjaGVyc1xuICAgICAgLy8gaW4gcmVzb2x2ZURlZmVycmVkUmVzdWx0c1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRvbmVGZXRjaGVyID0ge1xuICAgICAgICBzdGF0ZTogXCJpZGxlXCIsXG4gICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlTG9hZGVyRGF0YShsb2FkZXJEYXRhLCBuZXdMb2FkZXJEYXRhLCBtYXRjaGVzKSB7XG4gIGxldCBtZXJnZWRMb2FkZXJEYXRhID0gX2V4dGVuZHMoe30sIG5ld0xvYWRlckRhdGEpO1xuXG4gIG1hdGNoZXMuZm9yRWFjaChtYXRjaCA9PiB7XG4gICAgbGV0IGlkID0gbWF0Y2gucm91dGUuaWQ7XG5cbiAgICBpZiAobmV3TG9hZGVyRGF0YVtpZF0gPT09IHVuZGVmaW5lZCAmJiBsb2FkZXJEYXRhW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXJnZWRMb2FkZXJEYXRhW2lkXSA9IGxvYWRlckRhdGFbaWRdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtZXJnZWRMb2FkZXJEYXRhO1xufSAvLyBGaW5kIHRoZSBuZWFyZXN0IGVycm9yIGJvdW5kYXJ5LCBsb29raW5nIHVwd2FyZHMgZnJvbSB0aGUgbGVhZiByb3V0ZSAob3IgdGhlXG4vLyByb3V0ZSBzcGVjaWZpZWQgYnkgcm91dGVJZCkgZm9yIHRoZSBjbG9zZXN0IGFuY2VzdG9yIGVycm9yIGJvdW5kYXJ5LFxuLy8gZGVmYXVsdGluZyB0byB0aGUgcm9vdCBtYXRjaFxuXG5cbmZ1bmN0aW9uIGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgcm91dGVJZCkge1xuICBsZXQgZWxpZ2libGVNYXRjaGVzID0gcm91dGVJZCA/IG1hdGNoZXMuc2xpY2UoMCwgbWF0Y2hlcy5maW5kSW5kZXgobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKSArIDEpIDogWy4uLm1hdGNoZXNdO1xuICByZXR1cm4gZWxpZ2libGVNYXRjaGVzLnJldmVyc2UoKS5maW5kKG0gPT4gbS5yb3V0ZS5oYXNFcnJvckJvdW5kYXJ5ID09PSB0cnVlKSB8fCBtYXRjaGVzWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRTaG9ydENpcmN1aXRNYXRjaGVzKHJvdXRlcywgc3RhdHVzLCBzdGF0dXNUZXh0KSB7XG4gIC8vIFByZWZlciBhIHJvb3QgbGF5b3V0IHJvdXRlIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzaGltIGluIGEgcm91dGUgb2JqZWN0XG4gIGxldCByb3V0ZSA9IHJvdXRlcy5maW5kKHIgPT4gci5pbmRleCB8fCAhci5wYXRoIHx8IHIucGF0aCA9PT0gXCIvXCIpIHx8IHtcbiAgICBpZDogXCJfX3NoaW0tXCIgKyBzdGF0dXMgKyBcIi1yb3V0ZV9fXCJcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVzOiBbe1xuICAgICAgcGFyYW1zOiB7fSxcbiAgICAgIHBhdGhuYW1lOiBcIlwiLFxuICAgICAgcGF0aG5hbWVCYXNlOiBcIlwiLFxuICAgICAgcm91dGVcbiAgICB9XSxcbiAgICByb3V0ZSxcbiAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2Uoc3RhdHVzLCBzdGF0dXNUZXh0LCBudWxsKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXROb3RGb3VuZE1hdGNoZXMocm91dGVzKSB7XG4gIHJldHVybiBnZXRTaG9ydENpcmN1aXRNYXRjaGVzKHJvdXRlcywgNDA0LCBcIk5vdCBGb3VuZFwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0aG9kTm90QWxsb3dlZE1hdGNoZXMocm91dGVzKSB7XG4gIHJldHVybiBnZXRTaG9ydENpcmN1aXRNYXRjaGVzKHJvdXRlcywgNDA1LCBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0aG9kTm90QWxsb3dlZFJlc3VsdChwYXRoKSB7XG4gIGxldCBocmVmID0gdHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgPyBwYXRoIDogY3JlYXRlUGF0aChwYXRoKTtcbiAgY29uc29sZS53YXJuKFwiWW91J3JlIHRyeWluZyB0byBzdWJtaXQgdG8gYSByb3V0ZSB0aGF0IGRvZXMgbm90IGhhdmUgYW4gYWN0aW9uLiAgVG8gXCIgKyBcImZpeCB0aGlzLCBwbGVhc2UgYWRkIGFuIGBhY3Rpb25gIGZ1bmN0aW9uIHRvIHRoZSByb3V0ZSBmb3IgXCIgKyAoXCJbXCIgKyBocmVmICsgXCJdXCIpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmVycm9yLFxuICAgIGVycm9yOiBuZXcgRXJyb3JSZXNwb25zZSg0MDUsIFwiTWV0aG9kIE5vdCBBbGxvd2VkXCIsIFwiXCIpXG4gIH07XG59IC8vIEZpbmQgYW55IHJldHVybmVkIHJlZGlyZWN0IGVycm9ycywgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IG1hdGNoXG5cblxuZnVuY3Rpb24gZmluZFJlZGlyZWN0KHJlc3VsdHMpIHtcbiAgZm9yIChsZXQgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmlwSGFzaEZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhcnNlZFBhdGggPSB0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChwYXRoKSA6IHBhdGg7XG4gIHJldHVybiBjcmVhdGVQYXRoKF9leHRlbmRzKHt9LCBwYXJzZWRQYXRoLCB7XG4gICAgaGFzaDogXCJcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGlzSGFzaENoYW5nZU9ubHkoYSwgYikge1xuICByZXR1cm4gYS5wYXRobmFtZSA9PT0gYi5wYXRobmFtZSAmJiBhLnNlYXJjaCA9PT0gYi5zZWFyY2ggJiYgYS5oYXNoICE9PSBiLmhhc2g7XG59XG5cbmZ1bmN0aW9uIGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSB7XG4gIHJldHVybiByZXN1bHQudHlwZSA9PT0gUmVzdWx0VHlwZS5kZWZlcnJlZDtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclJlc3VsdChyZXN1bHQpIHtcbiAgcmV0dXJuIHJlc3VsdC50eXBlID09PSBSZXN1bHRUeXBlLmVycm9yO1xufVxuXG5mdW5jdGlvbiBpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkge1xuICByZXR1cm4gKHJlc3VsdCAmJiByZXN1bHQudHlwZSkgPT09IFJlc3VsdFR5cGUucmVkaXJlY3Q7XG59XG5cbmZ1bmN0aW9uIGlzUmVkaXJlY3RSZXNwb25zZShyZXN1bHQpIHtcbiAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IHN0YXR1cyA9IHJlc3VsdC5zdGF0dXM7XG4gIGxldCBsb2NhdGlvbiA9IHJlc3VsdC5oZWFkZXJzLmdldChcIkxvY2F0aW9uXCIpO1xuICByZXR1cm4gc3RhdHVzID49IDMwMCAmJiBzdGF0dXMgPD0gMzk5ICYmIGxvY2F0aW9uICE9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUXVlcnlSb3V0ZVJlc3BvbnNlKG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5yZXNwb25zZSBpbnN0YW5jZW9mIFJlc3BvbnNlICYmIChvYmoudHlwZSA9PT0gUmVzdWx0VHlwZS5kYXRhIHx8IFJlc3VsdFR5cGUuZXJyb3IpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGVmZXJyZWRSZXN1bHRzKGN1cnJlbnRNYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBzaWduYWwsIGlzRmV0Y2hlciwgY3VycmVudExvYWRlckRhdGEpIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlc3VsdHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaW5kZXhdO1xuICAgIGxldCBtYXRjaCA9IG1hdGNoZXNUb0xvYWRbaW5kZXhdO1xuICAgIGxldCBjdXJyZW50TWF0Y2ggPSBjdXJyZW50TWF0Y2hlcy5maW5kKG0gPT4gbS5yb3V0ZS5pZCA9PT0gbWF0Y2gucm91dGUuaWQpO1xuICAgIGxldCBpc1JldmFsaWRhdGluZ0xvYWRlciA9IGN1cnJlbnRNYXRjaCAhPSBudWxsICYmICFpc05ld1JvdXRlSW5zdGFuY2UoY3VycmVudE1hdGNoLCBtYXRjaCkgJiYgKGN1cnJlbnRMb2FkZXJEYXRhICYmIGN1cnJlbnRMb2FkZXJEYXRhW21hdGNoLnJvdXRlLmlkXSkgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkgJiYgKGlzRmV0Y2hlciB8fCBpc1JldmFsaWRhdGluZ0xvYWRlcikpIHtcbiAgICAgIC8vIE5vdGU6IHdlIGRvIG5vdCBoYXZlIHRvIHRvdWNoIGFjdGl2ZURlZmVycmVkcyBoZXJlIHNpbmNlIHdlIHJhY2UgdGhlbVxuICAgICAgLy8gYWdhaW5zdCB0aGUgc2lnbmFsIGluIHJlc29sdmVEZWZlcnJlZERhdGEgYW5kIHRoZXknbGwgZ2V0IGFib3J0ZWRcbiAgICAgIC8vIHRoZXJlIGlmIG5lZWRlZFxuICAgICAgYXdhaXQgcmVzb2x2ZURlZmVycmVkRGF0YShyZXN1bHQsIHNpZ25hbCwgaXNGZXRjaGVyKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHJlc3VsdCB8fCByZXN1bHRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEZWZlcnJlZERhdGEocmVzdWx0LCBzaWduYWwsIHVud3JhcCkge1xuICBpZiAodW53cmFwID09PSB2b2lkIDApIHtcbiAgICB1bndyYXAgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBhYm9ydGVkID0gYXdhaXQgcmVzdWx0LmRlZmVycmVkRGF0YS5yZXNvbHZlRGF0YShzaWduYWwpO1xuXG4gIGlmIChhYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHVud3JhcCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgICAgIGRhdGE6IHJlc3VsdC5kZWZlcnJlZERhdGEudW53cmFwcGVkRGF0YVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBIYW5kbGUgYW55IFRyYWNrZWRQcm9taXNlLl9lcnJvciB2YWx1ZXMgZW5jb3VudGVyZWQgd2hpbGUgdW53cmFwcGluZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5lcnJvcixcbiAgICAgICAgZXJyb3I6IGVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgZGF0YTogcmVzdWx0LmRlZmVycmVkRGF0YS5kYXRhXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc05ha2VkSW5kZXhRdWVyeShzZWFyY2gpIHtcbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKS5nZXRBbGwoXCJpbmRleFwiKS5zb21lKHYgPT4gdiA9PT0gXCJcIik7XG59IC8vIE5vdGU6IFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBmb3JtYXQgZXhwb3J0ZWQgYnkgdXNlTWF0Y2hlcywgc28gaWYgeW91IGNoYW5nZVxuLy8gdGhpcyBwbGVhc2UgYWxzbyBjaGFuZ2UgdGhhdCA6KSAgRXZlbnR1YWxseSB3ZSdsbCBEUlkgdGhpcyB1cFxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVVzZU1hdGNoZXNNYXRjaChtYXRjaCwgbG9hZGVyRGF0YSkge1xuICBsZXQge1xuICAgIHJvdXRlLFxuICAgIHBhdGhuYW1lLFxuICAgIHBhcmFtc1xuICB9ID0gbWF0Y2g7XG4gIHJldHVybiB7XG4gICAgaWQ6IHJvdXRlLmlkLFxuICAgIHBhdGhuYW1lLFxuICAgIHBhcmFtcyxcbiAgICBkYXRhOiBsb2FkZXJEYXRhW3JvdXRlLmlkXSxcbiAgICBoYW5kbGU6IHJvdXRlLmhhbmRsZVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRNYXRjaChtYXRjaGVzLCBsb2NhdGlvbikge1xuICBsZXQgc2VhcmNoID0gdHlwZW9mIGxvY2F0aW9uID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKGxvY2F0aW9uKS5zZWFyY2ggOiBsb2NhdGlvbi5zZWFyY2g7XG5cbiAgaWYgKG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXS5yb3V0ZS5pbmRleCAmJiBoYXNOYWtlZEluZGV4UXVlcnkoc2VhcmNoIHx8IFwiXCIpKSB7XG4gICAgLy8gUmV0dXJuIHRoZSBsZWFmIGluZGV4IHJvdXRlIHdoZW4gaW5kZXggaXMgcHJlc2VudFxuICAgIHJldHVybiBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV07XG4gIH0gLy8gT3RoZXJ3aXNlIGdyYWIgdGhlIGRlZXBlc3QgXCJwYXRoIGNvbnRyaWJ1dGluZ1wiIG1hdGNoIChpZ25vcmluZyBpbmRleCBhbmRcbiAgLy8gcGF0aGxlc3MgbGF5b3V0IHJvdXRlcylcblxuXG4gIGxldCBwYXRoTWF0Y2hlcyA9IGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpO1xuICByZXR1cm4gcGF0aE1hdGNoZXNbcGF0aE1hdGNoZXMubGVuZ3RoIC0gMV07XG59IC8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQWN0aW9uLCBFcnJvclJlc3BvbnNlLCBJRExFX0ZFVENIRVIsIElETEVfTkFWSUdBVElPTiwgY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcyBhcyBVTlNBRkVfY29udmVydFJvdXRlc1RvRGF0YVJvdXRlcywgZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMgYXMgVU5TQUZFX2dldFBhdGhDb250cmlidXRpbmdNYXRjaGVzLCBjcmVhdGVCcm93c2VySGlzdG9yeSwgY3JlYXRlSGFzaEhpc3RvcnksIGNyZWF0ZU1lbW9yeUhpc3RvcnksIGNyZWF0ZVBhdGgsIGNyZWF0ZVJvdXRlciwgZGVmZXIsIGdlbmVyYXRlUGF0aCwgZ2V0U3RhdGljQ29udGV4dEZyb21FcnJvciwgZ2V0VG9QYXRobmFtZSwgaW52YXJpYW50LCBpc1JvdXRlRXJyb3JSZXNwb25zZSwgam9pblBhdGhzLCBqc29uLCBtYXRjaFBhdGgsIG1hdGNoUm91dGVzLCBub3JtYWxpemVQYXRobmFtZSwgcGFyc2VQYXRoLCByZWRpcmVjdCwgcmVzb2x2ZVBhdGgsIHJlc29sdmVUbywgc3RyaXBCYXNlbmFtZSwgdW5zdGFibGVfY3JlYXRlU3RhdGljSGFuZGxlciwgd2FybmluZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLmpzLm1hcFxuIiwiLyohXG5cdGF1dG9zaXplIDQuMC40XG5cdGxpY2Vuc2U6IE1JVFxuXHRodHRwOi8vd3d3LmphY2tsbW9vcmUuY29tL2F1dG9zaXplXG4qL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFsnbW9kdWxlJywgJ2V4cG9ydHMnXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRmYWN0b3J5KG1vZHVsZSwgZXhwb3J0cyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIG1vZCA9IHtcblx0XHRcdGV4cG9ydHM6IHt9XG5cdFx0fTtcblx0XHRmYWN0b3J5KG1vZCwgbW9kLmV4cG9ydHMpO1xuXHRcdGdsb2JhbC5hdXRvc2l6ZSA9IG1vZC5leHBvcnRzO1xuXHR9XG59KSh0aGlzLCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgbWFwID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogZnVuY3Rpb24gKCkge1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuXHRcdFx0XHRyZXR1cm4ga2V5cy5pbmRleE9mKGtleSkgPiAtMTtcblx0XHRcdH0sXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlc1trZXlzLmluZGV4T2Yoa2V5KV07XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRpZiAoa2V5cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcblx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRrZXlzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0dmFsdWVzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9KCk7XG5cblx0dmFyIGNyZWF0ZUV2ZW50ID0gZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuXHRcdHJldHVybiBuZXcgRXZlbnQobmFtZSwgeyBidWJibGVzOiB0cnVlIH0pO1xuXHR9O1xuXHR0cnkge1xuXHRcdG5ldyBFdmVudCgndGVzdCcpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgZG9lcyBub3Qgc3VwcG9ydCBgbmV3IEV2ZW50KClgXG5cdFx0Y3JlYXRlRXZlbnQgPSBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG5cdFx0XHR2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KG5hbWUsIHRydWUsIGZhbHNlKTtcblx0XHRcdHJldHVybiBldnQ7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2lnbih0YSkge1xuXHRcdGlmICghdGEgfHwgIXRhLm5vZGVOYW1lIHx8IHRhLm5vZGVOYW1lICE9PSAnVEVYVEFSRUEnIHx8IG1hcC5oYXModGEpKSByZXR1cm47XG5cblx0XHR2YXIgaGVpZ2h0T2Zmc2V0ID0gbnVsbDtcblx0XHR2YXIgY2xpZW50V2lkdGggPSBudWxsO1xuXHRcdHZhciBjYWNoZWRIZWlnaHQgPSBudWxsO1xuXG5cdFx0ZnVuY3Rpb24gaW5pdCgpIHtcblx0XHRcdHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhLCBudWxsKTtcblxuXHRcdFx0aWYgKHN0eWxlLnJlc2l6ZSA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdFx0XHR0YS5zdHlsZS5yZXNpemUgPSAnbm9uZSc7XG5cdFx0XHR9IGVsc2UgaWYgKHN0eWxlLnJlc2l6ZSA9PT0gJ2JvdGgnKSB7XG5cdFx0XHRcdHRhLnN0eWxlLnJlc2l6ZSA9ICdob3Jpem9udGFsJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN0eWxlLmJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuXHRcdFx0XHRoZWlnaHRPZmZzZXQgPSAtKHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhlaWdodE9mZnNldCA9IHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBGaXggd2hlbiBhIHRleHRhcmVhIGlzIG5vdCBvbiBkb2N1bWVudCBib2R5IGFuZCBoZWlnaHRPZmZzZXQgaXMgTm90IGEgTnVtYmVyXG5cdFx0XHRpZiAoaXNOYU4oaGVpZ2h0T2Zmc2V0KSkge1xuXHRcdFx0XHRoZWlnaHRPZmZzZXQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjaGFuZ2VPdmVyZmxvdyh2YWx1ZSkge1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBDaHJvbWUvU2FmYXJpLXNwZWNpZmljIGZpeDpcblx0XHRcdFx0Ly8gV2hlbiB0aGUgdGV4dGFyZWEgeS1vdmVyZmxvdyBpcyBoaWRkZW4sIENocm9tZS9TYWZhcmkgZG8gbm90IHJlZmxvdyB0aGUgdGV4dCB0byBhY2NvdW50IGZvciB0aGUgc3BhY2Vcblx0XHRcdFx0Ly8gbWFkZSBhdmFpbGFibGUgYnkgcmVtb3ZpbmcgdGhlIHNjcm9sbGJhci4gVGhlIGZvbGxvd2luZyBmb3JjZXMgdGhlIG5lY2Vzc2FyeSB0ZXh0IHJlZmxvdy5cblx0XHRcdFx0dmFyIHdpZHRoID0gdGEuc3R5bGUud2lkdGg7XG5cdFx0XHRcdHRhLnN0eWxlLndpZHRoID0gJzBweCc7XG5cdFx0XHRcdC8vIEZvcmNlIHJlZmxvdzpcblx0XHRcdFx0LyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHRcdFx0XHR0YS5vZmZzZXRXaWR0aDtcblx0XHRcdFx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0XHRcdFx0dGEuc3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdH1cblxuXHRcdFx0dGEuc3R5bGUub3ZlcmZsb3dZID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0UGFyZW50T3ZlcmZsb3dzKGVsKSB7XG5cdFx0XHR2YXIgYXJyID0gW107XG5cblx0XHRcdHdoaWxlIChlbCAmJiBlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG5cdFx0XHRcdGlmIChlbC5wYXJlbnROb2RlLnNjcm9sbFRvcCkge1xuXHRcdFx0XHRcdGFyci5wdXNoKHtcblx0XHRcdFx0XHRcdG5vZGU6IGVsLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRzY3JvbGxUb3A6IGVsLnBhcmVudE5vZGUuc2Nyb2xsVG9wXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWwgPSBlbC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYXJyO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlc2l6ZSgpIHtcblx0XHRcdGlmICh0YS5zY3JvbGxIZWlnaHQgPT09IDApIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNjcm9sbEhlaWdodCBpcyAwLCB0aGVuIHRoZSBlbGVtZW50IHByb2JhYmx5IGhhcyBkaXNwbGF5Om5vbmUgb3IgaXMgZGV0YWNoZWQgZnJvbSB0aGUgRE9NLlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBvdmVyZmxvd3MgPSBnZXRQYXJlbnRPdmVyZmxvd3ModGEpO1xuXHRcdFx0dmFyIGRvY1RvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOyAvLyBOZWVkZWQgZm9yIE1vYmlsZSBJRSAodGlja2V0ICMyNDApXG5cblx0XHRcdHRhLnN0eWxlLmhlaWdodCA9ICcnO1xuXHRcdFx0dGEuc3R5bGUuaGVpZ2h0ID0gdGEuc2Nyb2xsSGVpZ2h0ICsgaGVpZ2h0T2Zmc2V0ICsgJ3B4JztcblxuXHRcdFx0Ly8gdXNlZCB0byBjaGVjayBpZiBhbiB1cGRhdGUgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5IG9uIHdpbmRvdy5yZXNpemVcblx0XHRcdGNsaWVudFdpZHRoID0gdGEuY2xpZW50V2lkdGg7XG5cblx0XHRcdC8vIHByZXZlbnRzIHNjcm9sbC1wb3NpdGlvbiBqdW1waW5nXG5cdFx0XHRvdmVyZmxvd3MuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcblx0XHRcdFx0ZWwubm9kZS5zY3JvbGxUb3AgPSBlbC5zY3JvbGxUb3A7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGRvY1RvcCkge1xuXHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gZG9jVG9wO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblx0XHRcdHJlc2l6ZSgpO1xuXG5cdFx0XHR2YXIgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodGEuc3R5bGUuaGVpZ2h0KSk7XG5cdFx0XHR2YXIgY29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YSwgbnVsbCk7XG5cblx0XHRcdC8vIFVzaW5nIG9mZnNldEhlaWdodCBhcyBhIHJlcGxhY2VtZW50IGZvciBjb21wdXRlZC5oZWlnaHQgaW4gSUUsIGJlY2F1c2UgSUUgZG9lcyBub3QgYWNjb3VudCB1c2Ugb2YgYm9yZGVyLWJveFxuXHRcdFx0dmFyIGFjdHVhbEhlaWdodCA9IGNvbXB1dGVkLmJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94JyA/IE1hdGgucm91bmQocGFyc2VGbG9hdChjb21wdXRlZC5oZWlnaHQpKSA6IHRhLm9mZnNldEhlaWdodDtcblxuXHRcdFx0Ly8gVGhlIGFjdHVhbCBoZWlnaHQgbm90IG1hdGNoaW5nIHRoZSBzdHlsZSBoZWlnaHQgKHNldCB2aWEgdGhlIHJlc2l6ZSBtZXRob2QpIGluZGljYXRlcyB0aGF0IFxuXHRcdFx0Ly8gdGhlIG1heC1oZWlnaHQgaGFzIGJlZW4gZXhjZWVkZWQsIGluIHdoaWNoIGNhc2UgdGhlIG92ZXJmbG93IHNob3VsZCBiZSBhbGxvd2VkLlxuXHRcdFx0aWYgKGFjdHVhbEhlaWdodCA8IHN0eWxlSGVpZ2h0KSB7XG5cdFx0XHRcdGlmIChjb21wdXRlZC5vdmVyZmxvd1kgPT09ICdoaWRkZW4nKSB7XG5cdFx0XHRcdFx0Y2hhbmdlT3ZlcmZsb3coJ3Njcm9sbCcpO1xuXHRcdFx0XHRcdHJlc2l6ZSgpO1xuXHRcdFx0XHRcdGFjdHVhbEhlaWdodCA9IGNvbXB1dGVkLmJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94JyA/IE1hdGgucm91bmQocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YSwgbnVsbCkuaGVpZ2h0KSkgOiB0YS5vZmZzZXRIZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE5vcm1hbGx5IGtlZXAgb3ZlcmZsb3cgc2V0IHRvIGhpZGRlbiwgdG8gYXZvaWQgZmxhc2ggb2Ygc2Nyb2xsYmFyIGFzIHRoZSB0ZXh0YXJlYSBleHBhbmRzLlxuXHRcdFx0XHRpZiAoY29tcHV0ZWQub3ZlcmZsb3dZICE9PSAnaGlkZGVuJykge1xuXHRcdFx0XHRcdGNoYW5nZU92ZXJmbG93KCdoaWRkZW4nKTtcblx0XHRcdFx0XHRyZXNpemUoKTtcblx0XHRcdFx0XHRhY3R1YWxIZWlnaHQgPSBjb21wdXRlZC5ib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcgPyBNYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGEsIG51bGwpLmhlaWdodCkpIDogdGEub2Zmc2V0SGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjYWNoZWRIZWlnaHQgIT09IGFjdHVhbEhlaWdodCkge1xuXHRcdFx0XHRjYWNoZWRIZWlnaHQgPSBhY3R1YWxIZWlnaHQ7XG5cdFx0XHRcdHZhciBldnQgPSBjcmVhdGVFdmVudCgnYXV0b3NpemU6cmVzaXplZCcpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHRhLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gRmlyZWZveCB3aWxsIHRocm93IGFuIGVycm9yIG9uIGRpc3BhdGNoRXZlbnQgZm9yIGEgZGV0YWNoZWQgZWxlbWVudFxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4OTM3NlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhZ2VSZXNpemUgPSBmdW5jdGlvbiBwYWdlUmVzaXplKCkge1xuXHRcdFx0aWYgKHRhLmNsaWVudFdpZHRoICE9PSBjbGllbnRXaWR0aCkge1xuXHRcdFx0XHR1cGRhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiAoc3R5bGUpIHtcblx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBwYWdlUmVzaXplLCBmYWxzZSk7XG5cdFx0XHR0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHVwZGF0ZSwgZmFsc2UpO1xuXHRcdFx0dGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1cGRhdGUsIGZhbHNlKTtcblx0XHRcdHRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2F1dG9zaXplOmRlc3Ryb3knLCBkZXN0cm95LCBmYWxzZSk7XG5cdFx0XHR0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdhdXRvc2l6ZTp1cGRhdGUnLCB1cGRhdGUsIGZhbHNlKTtcblxuXHRcdFx0T2JqZWN0LmtleXMoc3R5bGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHR0YS5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtYXAuZGVsZXRlKHRhKTtcblx0XHR9LmJpbmQodGEsIHtcblx0XHRcdGhlaWdodDogdGEuc3R5bGUuaGVpZ2h0LFxuXHRcdFx0cmVzaXplOiB0YS5zdHlsZS5yZXNpemUsXG5cdFx0XHRvdmVyZmxvd1k6IHRhLnN0eWxlLm92ZXJmbG93WSxcblx0XHRcdG92ZXJmbG93WDogdGEuc3R5bGUub3ZlcmZsb3dYLFxuXHRcdFx0d29yZFdyYXA6IHRhLnN0eWxlLndvcmRXcmFwXG5cdFx0fSk7XG5cblx0XHR0YS5hZGRFdmVudExpc3RlbmVyKCdhdXRvc2l6ZTpkZXN0cm95JywgZGVzdHJveSwgZmFsc2UpO1xuXG5cdFx0Ly8gSUU5IGRvZXMgbm90IGZpcmUgb25wcm9wZXJ0eWNoYW5nZSBvciBvbmlucHV0IGZvciBkZWxldGlvbnMsXG5cdFx0Ly8gc28gYmluZGluZyB0byBvbmtleXVwIHRvIGNhdGNoIG1vc3Qgb2YgdGhvc2UgZXZlbnRzLlxuXHRcdC8vIFRoZXJlIGlzIG5vIHdheSB0aGF0IEkga25vdyBvZiB0byBkZXRlY3Qgc29tZXRoaW5nIGxpa2UgJ2N1dCcgaW4gSUU5LlxuXHRcdGlmICgnb25wcm9wZXJ0eWNoYW5nZScgaW4gdGEgJiYgJ29uaW5wdXQnIGluIHRhKSB7XG5cdFx0XHR0YS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHVwZGF0ZSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBwYWdlUmVzaXplLCBmYWxzZSk7XG5cdFx0dGEuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB1cGRhdGUsIGZhbHNlKTtcblx0XHR0YS5hZGRFdmVudExpc3RlbmVyKCdhdXRvc2l6ZTp1cGRhdGUnLCB1cGRhdGUsIGZhbHNlKTtcblx0XHR0YS5zdHlsZS5vdmVyZmxvd1ggPSAnaGlkZGVuJztcblx0XHR0YS5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcblxuXHRcdG1hcC5zZXQodGEsIHtcblx0XHRcdGRlc3Ryb3k6IGRlc3Ryb3ksXG5cdFx0XHR1cGRhdGU6IHVwZGF0ZVxuXHRcdH0pO1xuXG5cdFx0aW5pdCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVzdHJveSh0YSkge1xuXHRcdHZhciBtZXRob2RzID0gbWFwLmdldCh0YSk7XG5cdFx0aWYgKG1ldGhvZHMpIHtcblx0XHRcdG1ldGhvZHMuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZSh0YSkge1xuXHRcdHZhciBtZXRob2RzID0gbWFwLmdldCh0YSk7XG5cdFx0aWYgKG1ldGhvZHMpIHtcblx0XHRcdG1ldGhvZHMudXBkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGF1dG9zaXplID0gbnVsbDtcblxuXHQvLyBEbyBub3RoaW5nIGluIE5vZGUuanMgZW52aXJvbm1lbnQgYW5kIElFOCAob3IgbG93ZXIpXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmdldENvbXB1dGVkU3R5bGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHRhdXRvc2l6ZSA9IGZ1bmN0aW9uIGF1dG9zaXplKGVsKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0XHRhdXRvc2l6ZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0XHRhdXRvc2l6ZS51cGRhdGUgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdHJldHVybiBlbDtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGF1dG9zaXplID0gZnVuY3Rpb24gYXV0b3NpemUoZWwsIG9wdGlvbnMpIHtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmxlbmd0aCA/IGVsIDogW2VsXSwgZnVuY3Rpb24gKHgpIHtcblx0XHRcdFx0XHRyZXR1cm4gYXNzaWduKHgsIG9wdGlvbnMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbDtcblx0XHR9O1xuXHRcdGF1dG9zaXplLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmxlbmd0aCA/IGVsIDogW2VsXSwgZGVzdHJveSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0XHRhdXRvc2l6ZS51cGRhdGUgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmxlbmd0aCA/IGVsIDogW2VsXSwgdXBkYXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbDtcblx0XHR9O1xuXHR9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gYXV0b3NpemU7XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xufSk7IiwiLy8gREVWOiBXZSBkb24ndCB1c2UgdmFyIGJ1dCBmYXZvciBwYXJhbWV0ZXJzIHNpbmNlIHRoZXNlIHBsYXkgbmljZXIgd2l0aCBtaW5pZmljYXRpb25cbmZ1bmN0aW9uIGNvbXB1dGVkU3R5bGUoZWwsIHByb3AsIGdldENvbXB1dGVkU3R5bGUsIHN0eWxlKSB7XG4gIGdldENvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtcbiAgc3R5bGUgPVxuICAgICAgLy8gSWYgd2UgaGF2ZSBnZXRDb21wdXRlZFN0eWxlXG4gICAgICBnZXRDb21wdXRlZFN0eWxlID9cbiAgICAgICAgLy8gUXVlcnkgaXRcbiAgICAgICAgLy8gVE9ETzogRnJvbSBDU1MtUXVlcnkgbm90ZXMsIHdlIG1pZ2h0IG5lZWQgKG5vZGUsIG51bGwpIGZvciBGRlxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGVsKSA6XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGluIElFIGFuZCB1c2UgY3VycmVudFN0eWxlXG4gICAgICAgIGVsLmN1cnJlbnRTdHlsZTtcbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlXG4gICAgW1xuICAgICAgLy8gU3dpdGNoIHRvIGNhbWVsQ2FzZSBmb3IgQ1NTT01cbiAgICAgIC8vIERFVjogR3JhYmJlZCBmcm9tIGpRdWVyeVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi8xLjktc3RhYmxlL3NyYy9jc3MuanMjTDE5MS1MMTk0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzEuOS1zdGFibGUvc3JjL2NvcmUuanMjTDU5My1MNTk3XG4gICAgICBwcm9wLnJlcGxhY2UoLy0oXFx3KS9naSwgZnVuY3Rpb24gKHdvcmQsIGxldHRlcikge1xuICAgICAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KVxuICAgIF07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wdXRlZFN0eWxlO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci5lb3RcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIud29mZjJcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIud29mZlwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fID0gbmV3IFVSTChcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci50dGZcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9VWJ1bnR1KTtcIl0pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBjaGFyc2V0IFxcXCJVVEYtOFxcXCI7XFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogc3dlZXRpY29ucztcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBzcmM6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxuICBzcmM6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpIGZvcm1hdChcXFwid29mZlxcXCIpLCB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpIGZvcm1hdChcXFwidHJ1ZXR5cGVcXFwiKTtcXG59XFxuLnMtaWNvbixcXG4ucy1pY29ucyxcXG4uc3dlZXQtaWNvbnMsXFxuLnN3ZWV0LWljb24ge1xcbiAgZm9udC1mYW1pbHk6IHN3ZWV0aWNvbnMsIHNhbnMtc2VyaWY7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC1zaXplOiAyOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxuICBkaXJlY3Rpb246IGx0cjtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhPTFcXFwiO1xcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ud2VibyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmQ2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQge1xcbiAgY29sb3I6ICMwMDYyZDYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmQ2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLnNlY29uZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N0ZBICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1zZWNvbmQge1xcbiAgY29sb3I6ICMwMDc3RkEgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtc2Vjb25kIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzdGQSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby50aGlyZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDliZGRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC10aGlyZCB7XFxuICBjb2xvcjogIzA5YmRkZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy10aGlyZCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwOWJkZGQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZm91cnRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWZvdXJ0aCB7XFxuICBjb2xvcjogI2NiZTdmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1mb3VydGggLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwMTgxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNkMDE4MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDAxODFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOTE1MWIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYjkxNTFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5MTUxYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTIxMzE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2EyMTMxOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhMjEzMTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uYi0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ5Y2U1ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtYi0ge1xcbiAgY29sb3I6ICM0OWNlNWYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtYi0gLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDljZTVmICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YjEwMTQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjOGIxMDE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiMTAxNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0IHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWJlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmY2RkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmOWE5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1NzM3MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2VmNTM1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQge1xcbiAgY29sb3I6ICNlOTFlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNlNGVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4YmJkMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDhmYjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA2MjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDgxYjYwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MyMTg1YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZDE0NTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg4MGU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmY4MGFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjQwODEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjYzUxMTYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0IHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2UxYmVlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlOTNkOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JhNjhjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2FiNDdiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dCB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjczYWI3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZTM1YjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNDUyN2EwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzExYjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM4OGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjN2M0ZGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjIwMGVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0IHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZWFmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2M1Y2FlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzlmYThkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzVjNmJjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQge1xcbiAgY29sb3I6ICMyMTk2ZjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNmMmZkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGNhZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRiNWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4OGU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5NzZkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTY1YzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzBkNDdhMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODJiMWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NzlmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMjk2MmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQge1xcbiAgY29sb3I6ICMwM2E5ZjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFmNWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZTVmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MWQ0ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGZjM2Y3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5YjZmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDM5YmU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAyODhkMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjc3YmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxNTc5YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODBkOGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MGM0ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDA5MWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQge1xcbiAgY29sb3I6ICMwMGJjZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmN2ZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZWJmMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGRlZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRkMGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YzZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhY2MxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTdhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDgzOGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjA2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODRmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwZTVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDBiOGQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQge1xcbiAgY29sb3I6ICMwMDk2ODggIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmMmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZGZkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGNiYzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiNmFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4OTdiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzk2YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5NWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNGQ0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjYTdmZmViICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGZmZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkZTliNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDBiZmE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dCB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGNhZjUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM4OGUzYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMmU3ZDMyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWI1ZTIwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjlmNmNhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNjlmMGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dCB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGJjMzRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Y2IzNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY4OWYzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNTU4YjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM2OTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NmZjkwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjYjJmZjU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzZmZjAzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRkZDE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQge1xcbiAgY29sb3I6ICNjZGRjMzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmYmU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjRjMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmVlOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlNzc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZTE1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzBjYTMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmYjQyYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTlkMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyNzcxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZjRmZjgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWZmNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2ZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjYWVlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmRlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmZjljNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjU5ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjE3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmZWU1OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dCB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZmY4ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNTdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmZkNzQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjNDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0IHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmZTBiMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2M4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc0ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmYTcyNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Uge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dCB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1NzIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDUxMWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2NGExOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZDg0MzE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmYzNjBjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ZTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmY2ZTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYzZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGQyYzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dCB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk1NTQ4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2ZDRjNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNGUzNDJlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2UyNzIzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYwN2Q4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWZmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2IwYmVjNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwYTRhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmFmYWZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNlZWVlZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNzU3NTc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjEyMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmxhY2sge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmxhY2stdGV4dCB7XFxuICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2hpdGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2hpdGUtdGV4dCB7XFxuICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udHJhbnNwYXJlbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRyYW5zcGFyZW50LXRleHQge1xcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi8qKlxcbiAqIHByaXNtLmpzIFR3aWxpZ2h0IHRoZW1lXFxuICogQmFzZWQgKG1vcmUgb3IgbGVzcykgb24gdGhlIFR3aWxpZ2h0IHRoZW1lIG9yaWdpbmFsbHkgb2YgVGV4dG1hdGUgZmFtZS5cXG4gKiBAYXV0aG9yIFJlbXkgQmFjaFxcbiAqL1xcbmNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgXFxcIkFuZGFsZSBNb25vXFxcIiwgXFxcIlVidW50dSBNb25vXFxcIiwgbW9ub3NwYWNlO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtc2hhZG93OiAwIC0wLjFlbSAwLjJlbSBibGFjaztcXG4gIHdoaXRlLXNwYWNlOiBwcmU7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIC1tb3otdGFiLXNpemU6IDQ7XFxuICAtby10YWItc2l6ZTogNDtcXG4gIHRhYi1zaXplOiA0O1xcbiAgLXdlYmtpdC1oeXBoZW5zOiBub25lO1xcbiAgLW1vei1oeXBoZW5zOiBub25lO1xcbiAgLW1zLWh5cGhlbnM6IG5vbmU7XFxuICBoeXBoZW5zOiBub25lO1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV0sXFxuOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBiYWNrZ3JvdW5kOiBoc2woMGRlZywgMCUsIDglKTsgLyogIzE0MTQxNCAqL1xcbn1cXG5cXG4vKiBDb2RlIGJsb2NrcyAqL1xcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjVlbTtcXG4gIGJvcmRlcjogMC4zZW0gc29saWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjMjgyQTJCICovXFxuICBib3gtc2hhZG93OiAxcHggMXB4IDAuNWVtIGJsYWNrIGluc2V0O1xcbiAgbWFyZ2luOiAwLjVlbSAwO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBwYWRkaW5nOiAxZW07XFxufVxcblxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgLyogRmlyZWZveCAqL1xcbiAgYmFja2dyb3VuZDogaHNsKDIwMGRlZywgNCUsIDE2JSk7IC8qICMyODJBMkIgKi9cXG59XFxuXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24ge1xcbiAgLyogU2FmYXJpICovXFxuICBiYWNrZ3JvdW5kOiBoc2woMjAwZGVnLCA0JSwgMTYlKTsgLyogIzI4MkEyQiAqL1xcbn1cXG5cXG4vKiBUZXh0IFNlbGVjdGlvbiBjb2xvdXIgKi9cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbixcXG5jb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uIHtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZDogaHNsYSgwZGVnLCAwJSwgOTMlLCAwLjE1KTsgLyogI0VERURFRCAqL1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbiB7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMCUsIDkzJSwgMC4xNSk7IC8qICNFREVERUQgKi9cXG59XFxuXFxuLyogSW5saW5lIGNvZGUgKi9cXG46bm90KHByZSkgPiBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM2VtO1xcbiAgYm9yZGVyOiAwLjEzZW0gc29saWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuICBib3gtc2hhZG93OiAxcHggMXB4IDAuM2VtIC0wLjFlbSBibGFjayBpbnNldDtcXG4gIHBhZGRpbmc6IDAuMTVlbSAwLjJlbSAwLjA1ZW07XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG5cXG4udG9rZW4uY29tbWVudCxcXG4udG9rZW4ucHJvbG9nLFxcbi50b2tlbi5kb2N0eXBlLFxcbi50b2tlbi5jZGF0YSB7XFxuICBjb2xvcjogaHNsKDBkZWcsIDAlLCA0NyUpOyAvKiAjNzc3Nzc3ICovXFxufVxcblxcbi50b2tlbi5wdW5jdHVhdGlvbiB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcblxcbi5uYW1lc3BhY2Uge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG5cXG4udG9rZW4udGFnLFxcbi50b2tlbi5ib29sZWFuLFxcbi50b2tlbi5udW1iZXIsXFxuLnRva2VuLmRlbGV0ZWQge1xcbiAgY29sb3I6IGhzbCgxNGRlZywgNTglLCA1NSUpOyAvKiAjQ0Y2QTRDICovXFxufVxcblxcbi50b2tlbi5rZXl3b3JkLFxcbi50b2tlbi5wcm9wZXJ0eSxcXG4udG9rZW4uc2VsZWN0b3IsXFxuLnRva2VuLmNvbnN0YW50LFxcbi50b2tlbi5zeW1ib2wsXFxuLnRva2VuLmJ1aWx0aW4ge1xcbiAgY29sb3I6IGhzbCg1M2RlZywgODklLCA3OSUpOyAvKiAjRjlFRTk4ICovXFxufVxcblxcbi50b2tlbi5hdHRyLW5hbWUsXFxuLnRva2VuLmF0dHItdmFsdWUsXFxuLnRva2VuLnN0cmluZyxcXG4udG9rZW4uY2hhcixcXG4udG9rZW4ub3BlcmF0b3IsXFxuLnRva2VuLmVudGl0eSxcXG4udG9rZW4udXJsLFxcbi5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZyxcXG4uc3R5bGUgLnRva2VuLnN0cmluZyxcXG4udG9rZW4udmFyaWFibGUsXFxuLnRva2VuLmluc2VydGVkIHtcXG4gIGNvbG9yOiBoc2woNzZkZWcsIDIxJSwgNTIlKTsgLyogIzhGOUQ2QSAqL1xcbn1cXG5cXG4udG9rZW4uYXRydWxlIHtcXG4gIGNvbG9yOiBoc2woMjE4ZGVnLCAyMiUsIDU1JSk7IC8qICM3NTg3QTYgKi9cXG59XFxuXFxuLnRva2VuLnJlZ2V4LFxcbi50b2tlbi5pbXBvcnRhbnQge1xcbiAgY29sb3I6IGhzbCg0MmRlZywgNzUlLCA2NSUpOyAvKiAjRTlDMDYyICovXFxufVxcblxcbi50b2tlbi5pbXBvcnRhbnQsXFxuLnRva2VuLmJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcblxcbi50b2tlbi5pdGFsaWMge1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG5cXG4udG9rZW4uZW50aXR5IHtcXG4gIGN1cnNvcjogaGVscDtcXG59XFxuXFxucHJlW2RhdGEtbGluZV0ge1xcbiAgcGFkZGluZzogMWVtIDAgMWVtIDNlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLyogTWFya3VwICovXFxuLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4udGFnLFxcbi5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLmF0dHItbmFtZSxcXG4ubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5wdW5jdHVhdGlvbiB7XFxuICBjb2xvcjogaHNsKDMzZGVnLCAzMyUsIDUyJSk7IC8qICNBQzg4NUIgKi9cXG59XFxuXFxuLyogTWFrZSB0aGUgdG9rZW5zIHNpdCBhYm92ZSB0aGUgbGluZSBoaWdobGlnaHQgc28gdGhlIGNvbG91cnMgZG9uJ3QgbG9vayBmYWRlZC4gKi9cXG4udG9rZW4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTtcXG59XFxuXFxuLmxpbmUtaGlnaGxpZ2h0IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMCUsIDMzJSwgMC4yNSk7IC8qICM1NDU0NTQgKi9cXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgaHNsYSgwZGVnLCAwJSwgMzMlLCAwLjEpIDcwJSwgaHNsYSgwZGVnLCAwJSwgMzMlLCAwKSk7IC8qICM1NDU0NTQgKi9cXG4gIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGhzbCgwZGVnLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcbiAgbGVmdDogMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgbWFyZ2luLXRvcDogMC43NWVtOyAvKiBTYW1lIGFzIC5wcmlzbeKAmXMgcGFkZGluZy10b3AgKi9cXG4gIHBhZGRpbmc6IGluaGVyaXQgMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB3aGl0ZS1zcGFjZTogcHJlO1xcbiAgei1pbmRleDogMDtcXG59XFxuXFxuLmxpbmUtaGlnaGxpZ2h0OmJlZm9yZSxcXG4ubGluZS1oaWdobGlnaHRbZGF0YS1lbmRdOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgyMTVkZWcsIDE1JSwgNTklKTsgLyogIzg3OTRBNiAqL1xcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XFxuICBib3gtc2hhZG93OiAwIDFweCB3aGl0ZTtcXG4gIGNvbG9yOiBoc2woMjRkZWcsIDIwJSwgOTUlKTsgLyogI0Y1RjJGMCAqL1xcbiAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG4gIGZvbnQ6IGJvbGQgNjUlLzEuNSBzYW5zLXNlcmlmO1xcbiAgbGVmdDogMC42ZW07XFxuICBtaW4td2lkdGg6IDFlbTtcXG4gIHBhZGRpbmc6IDAgMC41ZW07XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRvcDogMC40ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4zZW07XFxufVxcblxcbi5saW5lLWhpZ2hsaWdodFtkYXRhLWVuZF06YWZ0ZXIge1xcbiAgYm90dG9tOiAwLjRlbTtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1lbmQpO1xcbiAgdG9wOiBhdXRvO1xcbn1cXG5cXG4ud2luZG93IHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiVWJ1bnR1XFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTdweDtcXG4gIHdpZHRoOiA2MDBweDtcXG4gIG1hcmdpbjogNzVweCBhdXRvO1xcbiAgYmFja2dyb3VuZDogIzJjM2U1MDtcXG4gIGhlaWdodDogMzUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBkaXNwbGF5OiByZWxhdGl2ZTtcXG4gIGJveC1zaGFkb3c6IDEwcHggMTBweCAxMHB4ICM4ODg4ODg7XFxufVxcblxcbi5hZnRlcmNsb3NlIHtcXG4gIGNvbG9yOiAjMzQ0OTVlO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLm9wZW4ge1xcbiAgY29sb3I6ICNmZmY7XFxuICBwYWRkaW5nOiAxNXB4O1xcbiAgYmFja2dyb3VuZDogIzJlY2M3MTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLmJhc2gge1xcbiAgd2lkdGg6IDYwMHB4O1xcbiAgYmFja2dyb3VuZDogIzM0NDk1ZTtcXG4gIGhlaWdodDogMzEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICB0b3A6IDQwcHg7XFxuICBkaXNwbGF5OiBhYnNvbHV0ZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLmJhc2ggLmNvbW1hbmQ6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwidXNlckBtYWNoaW5lICQgOiBcXFwiO1xcbiAgY29sb3I6ICMyZWNjNzE7XFxufVxcbi5iYXNoIC5yZXN1bHRhOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIj4+XFxcIjtcXG4gIGNvbG9yOiAjMmVjYzcxO1xcbn1cXG5cXG4vKiBlZmZlY3RlZCBieSBjb250cm9sbGVycyAqL1xcbi53aW5kb3dtYXgge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IGF1dG87XFxuICBiYWNrZ3JvdW5kOiAjMmMzZTUwO1xcbiAgaGVpZ2h0OiAxMDAwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBkaXNwbGF5OiByZWxhdGl2ZTtcXG59XFxuXFxuLndpbmRvd21pbiB7XFxuICB3aWR0aDogMzAwcHg7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBiYWNrZ3JvdW5kOiAjMmMzZTUwO1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgYm90dG9tOiAwO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG5cXG4uYmFzaG1heCB7XFxuICBkaXNwbGF5OiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZDogIzM0NDk1ZTtcXG4gIGhlaWdodDogOTYwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3R0b206IDA7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLyogIS0tZW5kLS0hICovXFxuLmJ1dHRvbnMge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBtYXJnaW46IDEzcHggNHB4O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uY2xvc2Uge1xcbiAgYmFja2dyb3VuZDogI2U3NGMzYztcXG59XFxuXFxuLm1heGltaXplIHtcXG4gIGJhY2tncm91bmQ6ICNmMWM0MGY7XFxufVxcblxcbi5taW5pbWl6ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMmVjYzcxO1xcbn1cXG5cXG4ucmVzdWx0IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jb250cm9scyB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICB0b3A6IDA7XFxufVxcblxcbi50aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgcGFkZGluZzogMTBweDtcXG59XFxuXFxuLm1hdGVyaWFsLXRvb2x0aXAge1xcbiAgcGFkZGluZzogMTBweCA4cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB6LWluZGV4OiAyMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBtaW4taGVpZ2h0OiAzNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDEyMCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA0cHgpO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7XFxufVxcblxcbi5iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgaGVpZ2h0OiA3cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA1MCUgNTAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMyMzIzMjtcXG4gIHotaW5kZXg6IC0xO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDAlO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4uc2hhZG93LTAge1xcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4vKiAyZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTEsIG5hdiwgLmRyb3Bkb3duLWNvbnRlbnQsIC5jYXJkLCAuY2FyZC1wYW5lbCwgLmJ0bi1mbG9hdGluZywgLmJ0biwgLmJ0bi1zbWFsbCwgLmJ0bi1sYXJnZSwgLmNvbGxhcHNpYmxlIHtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLnNoYWRvdy0xLWhhbGYsIC5idG4tZmxvYXRpbmc6aG92ZXIsIC5idG46aG92ZXIsIC5idG4tc21hbGw6aG92ZXIsIC5idG4tbGFyZ2U6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAzcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggN3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiA2ZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTIge1xcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG59XFxuXFxuLyogMTJkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcbi5zaGFkb3ctMyB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi8qIDE2ZHAgZWxldmF0aW9uICovXFxuLnNoYWRvdy00IHtcXG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDhweCAxMHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAyNGRwIGVsZXZhdGlvbiAqL1xcbi5zaGFkb3ctNSwgLm1vZGFsIHtcXG4gIGJveC1zaGFkb3c6IDAgMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogMjRkcCBlbGV2YXRpb24gKi9cXG4uaW52ZXJ0LXNoYWRvdy01IHtcXG4gIGJveC1zaGFkb3c6IDM4cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgNDZweCAwIDAgMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAxNXB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLmhvdmVyYWJsZSB7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjVzO1xcbn1cXG4uaG92ZXJhYmxlOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgOHB4IDE3cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgNnB4IDIwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTkpO1xcbn1cXG5cXG4vKiFcXG4gKiBXYXZlcyB2MC42LjBcXG4gKiBodHRwOi8vZmlhbi5teS5pZC9XYXZlc1xcbiAqXFxuICogQ29weXJpZ2h0IDIwMTQgQWxmaWFuYSBFLiBTaWJ1ZWEgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9maWFucy9XYXZlcy9ibG9iL21hc3Rlci9MSUNFTlNFXFxuICovXFxuLndhdmVzLWVmZmVjdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHotaW5kZXg6IDE7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGVhc2Utb3V0O1xcbn1cXG4ud2F2ZXMtZWZmZWN0IC53YXZlcy1yaXBwbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBtYXJnaW4tdG9wOiAtMTBweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC43cyBlYXNlLW91dDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1saWdodCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtcmVkIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy15ZWxsb3cgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1vcmFuZ2UgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLXB1cnBsZSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU2LCAzOSwgMTc2LCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLWdyZWVuIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3NiwgMTc1LCA4MCwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy10ZWFsIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNTAsIDEzNiwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdCBpbnB1dFt0eXBlPWJ1dHRvbl0sIC53YXZlcy1lZmZlY3QgaW5wdXRbdHlwZT1yZXNldF0sIC53YXZlcy1lZmZlY3QgaW5wdXRbdHlwZT1zdWJtaXRdIHtcXG4gIGJvcmRlcjogMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIHRleHQtdHJhbnNmb3JtOiBpbmhlcml0O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG59XFxuLndhdmVzLWVmZmVjdCBpbWcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbi53YXZlcy1ub3RyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcXG4gIC13ZWJraXQtbWFzay1pbWFnZTogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCB3aGl0ZSAxMDAlLCBibGFjayAxMDAlKTtcXG59XFxuXFxuLndhdmVzLWlucHV0LXdyYXBwZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbn1cXG4ud2F2ZXMtaW5wdXQtd3JhcHBlciAud2F2ZXMtYnV0dG9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiAyLjVlbTtcXG4gIGhlaWdodDogMi41ZW07XFxuICBsaW5lLWhlaWdodDogMi41ZW07XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IG5vbmU7XFxufVxcblxcbi53YXZlcy1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLyogRmlyZWZveCBCdWc6IGxpbmsgbm90IHRyaWdnZXJlZCAqL1xcbi53YXZlcy1lZmZlY3QgLndhdmVzLXJpcHBsZSB7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuXFxuLm1vZGFsIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWF4LWhlaWdodDogNzAlO1xcbiAgd2lkdGg6IDU1JTtcXG4gIG1hcmdpbjogYXV0bztcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICB3aWxsLWNoYW5nZTogdG9wLCBvcGFjaXR5O1xcbn1cXG4ubW9kYWw6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5tb2RhbCB7XFxuICAgIHdpZHRoOiA4MCU7XFxuICB9XFxufVxcbi5tb2RhbCBoMSwgLm1vZGFsIGgyLCAubW9kYWwgaDMsIC5tb2RhbCBoNCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4ubW9kYWwgLm1vZGFsLWNvbnRlbnQge1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLm1vZGFsIC5tb2RhbC1jbG9zZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5tb2RhbCAubW9kYWwtZm9vdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLXNtYWxsLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLWxhcmdlLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLWZsYXQge1xcbiAgbWFyZ2luOiA2cHggMDtcXG59XFxuLm1vZGFsIC5tb2RhbC1oZWFkZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgcGFkZGluZzogNnB4IDRweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4sIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tc21hbGwsIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tbGFyZ2UsIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tZmxhdCB7XFxuICBtYXJnaW46IDZweCAwO1xcbn1cXG5cXG4ubW9kYWwtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiA5OTk7XFxuICB0b3A6IC0yNSU7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEyNSU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxufVxcblxcbi5tb2RhbC5tb2RhbC1maXhlZC1mb290ZXIge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogNzAlO1xcbn1cXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIC5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogY2FsYygxMDAlIC0gNTZweCk7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIC5tb2RhbC1mb290ZXIge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG59XFxuXFxuLm1vZGFsLmJvdHRvbS1zaGVldCB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IC0xMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiA0NSU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IGJvdHRvbSwgb3BhY2l0eTtcXG59XFxuXFxuaHRtbCxcXG5ib2R5LFxcbiNyb290IHtcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuKiB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLm5vc2VsZWN0IHtcXG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsgLyogaU9TIFNhZmFyaSAqL1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgLyogU2FmYXJpICovXFxuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIEtvbnF1ZXJvciBIVE1MICovXFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lOyAvKiBPbGQgdmVyc2lvbnMgb2YgRmlyZWZveCAqL1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lOyAvKiBJbnRlcm5ldCBFeHBsb3Jlci9FZGdlICovXFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIC8qIE5vbi1wcmVmaXhlZCB2ZXJzaW9uLCBjdXJyZW50bHlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSBDaHJvbWUsIEVkZ2UsIE9wZXJhIGFuZCBGaXJlZm94ICovXFxufVxcblxcbnVsOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcbnVsOm5vdCguYnJvd3Nlci1kZWZhdWx0KSA+IGxpIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAzOWJlNTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi53LTEwMCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLnJpZ2h0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5cXG4uY2VudGVyLWFsaWduIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnYtY2VudGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubWIxIHtcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxufVxcblxcbi5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmhvdmVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIG1pbi1oZWlnaHQ6IDg0cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSxcXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciA6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA0MnB4O1xcbiAgaGVpZ2h0OiA0MnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxlZnQ6IDE1cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciBpLmNpcmNsZSB7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBsaW5lLWhlaWdodDogNDJweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgLnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDE2cHg7XFxuICByaWdodDogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBjb2xvcjogI2VhZmFmOTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hY3RpdmUgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHRyYW5zaXRpb246IDAuMjVzO1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbi5jb2xsZWN0aW9uIGEuY29sbGVjdGlvbi1pdGVtOm5vdCguYWN0aXZlKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1pdGVtIHtcXG4gIHBhZGRpbmctbGVmdDogMzBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbn1cXG5cXG4uc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcblxcbi5jb2xsYXBzaWJsZSAuY29sbGVjdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTAwdmg7XFxuICB3aWR0aDogMTAwdnc7XFxuICBwYWRkaW5nOiAyMHB4IDAgMjBweCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ubW9kYWwtb3ZlcmxheSAuaW5uZXJmb3JtIHtcXG4gIG1heC13aWR0aDogNjUwcHg7XFxufVxcbi5tb2RhbC1vdmVybGF5IC5pbm5lcmZvcm0gZm9ybSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqXFxuICBNZWRpYSBRdWVyeSBDbGFzc2VzXFxuKioqKioqKioqKioqKioqKioqKioqKi9cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmhpZGUtb24tc21hbGwtb25seSwgLmhpZGUtb24tc21hbGwtYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuaGlkZS1vbi1tZWQtYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAuaGlkZS1vbi1tZWQtYW5kLXVwIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTkycHgpIHtcXG4gIC5oaWRlLW9uLW1lZC1vbmx5IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLmhpZGUtb24tbGFyZ2Utb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogMTIwMXB4KSB7XFxuICAuaGlkZS1vbi1leHRyYS1sYXJnZS1vbmx5IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAxMjAxcHgpIHtcXG4gIC5zaG93LW9uLWV4dHJhLWxhcmdlIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5zaG93LW9uLWxhcmdlIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk5MnB4KSB7XFxuICAuc2hvdy1vbi1tZWRpdW0ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLnNob3ctb24tc21hbGwge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgLnNob3ctb24tbWVkaXVtLWFuZC11cCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuc2hvdy1vbi1tZWRpdW0tYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmNlbnRlci1vbi1zbWFsbC1vbmx5IHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKlxcbiAgVXRpbGl0eSBDbGFzc2VzXFxuKioqKioqKioqKioqKioqKioqKi9cXG4uaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5sZWZ0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5yaWdodC1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuXFxuLmNlbnRlciwgLmNlbnRlci1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5sZWZ0IHtcXG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yaWdodCB7XFxuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcXG59XFxuXFxuLm5vLXNlbGVjdCB7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5jZW50ZXItYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnRydW5jYXRlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXFxuLm5vLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5zcGFuLmJhZGdlIHtcXG4gIG1pbi13aWR0aDogM3JlbTtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDE0cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuc3Bhbi5iYWRnZS5uZXcge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5zcGFuLmJhZGdlLm5ldzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiIG5ld1xcXCI7XFxufVxcbnNwYW4uYmFkZ2VbZGF0YS1iYWRnZS1jYXB0aW9uXTo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIiBcXFwiIGF0dHIoZGF0YS1iYWRnZS1jYXB0aW9uKTtcXG59XFxuXFxubmF2IHVsIGEgc3Bhbi5iYWRnZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmbG9hdDogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGF1dG87XFxufVxcblxcbi5jb2xsZWN0aW9uLWl0ZW0gc3Bhbi5iYWRnZSB7XFxuICBtYXJnaW4tdG9wOiBjYWxjKDAuNzVyZW0gLSAxMXB4KTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zaWRlbmF2IHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLXRvcDogMTEuNXB4O1xcbn1cXG5cXG50YWJsZSBzcGFuLmJhZGdlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZsb2F0OiBub25lO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5jaGlwIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTRlNDtcXG4gIG1hcmdpbi1ib3R0b206IDVweDtcXG4gIG1hcmdpbi1yaWdodDogNXB4O1xcbn1cXG4uY2hpcDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uY2hpcCA+IGltZyB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbjogMCA4cHggMCAtMTJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4uY2hpcCAuY2xvc2Uge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG59XFxuXFxuLmNoaXBzIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIG1hcmdpbjogMCAwIDhweCAwO1xcbiAgbWluLWhlaWdodDogNDVweDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcXG59XFxuLmNoaXBzLmZvY3VzIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICMyNmE2OWE7XFxufVxcbi5jaGlwczpob3ZlciB7XFxuICBjdXJzb3I6IHRleHQ7XFxufVxcbi5jaGlwcyAuaW5wdXQge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogMDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIG91dGxpbmU6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB3aWR0aDogMTIwcHggIWltcG9ydGFudDtcXG59XFxuLmNoaXBzIC5pbnB1dDpmb2N1cyB7XFxuICBib3JkZXI6IDAgIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmNoaXBzIC5hdXRvY29tcGxldGUtY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLnByZWZpeCB+IC5jaGlwcyB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcblxcbi5jaGlwczplbXB0eSB+IGxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNDAlKTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgcGFkZGluZzogMXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcXG59XFxuLmNvbGxhcHNpYmxlLWhlYWRlcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uY29sbGFwc2libGUtaGVhZGVyIGkge1xcbiAgd2lkdGg6IDJyZW07XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogMXJlbTtcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgLmNvbGxhcHNpYmxlLWhlYWRlcjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xcbn1cXG5cXG4uY29sbGFwc2libGUtYm9keSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcGFkZGluZzogMnJlbTtcXG59XFxuXFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZSB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUgbGksXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlIGxpIHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1oZWFkZXIsXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtaGVhZGVyOmhvdmVyLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1oZWFkZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWhlYWRlciBpLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1oZWFkZXIgaSB7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHksXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkgbGkgYSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtYm9keSBsaSBhIHtcXG4gIHBhZGRpbmc6IDAgMjIuNXB4IDAgMzBweDtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLnBvcG91dCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uY29sbGFwc2libGUucG9wb3V0ID4gbGkge1xcbiAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE2KSwgMCAycHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7XFxuICBtYXJnaW46IDAgMjRweDtcXG4gIHRyYW5zaXRpb246IG1hcmdpbiAwLjM1cyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XFxufVxcbi5jb2xsYXBzaWJsZS5wb3BvdXQgPiBsaS5hY3RpdmUge1xcbiAgYm94LXNoYWRvdzogMCA1cHggMTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xOCksIDAgNHB4IDE1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgbWFyZ2luOiAxNnB4IDA7XFxufVxcblxcbi5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciB7XFxuICBtaW4taGVpZ2h0OiA4NHB4O1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhcjpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUsXFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsZWZ0OiAxNXB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgaS5jaXJjbGUge1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDQycHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC50aXRsZSB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHAge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxNnB4O1xcbiAgcmlnaHQ6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgY29sb3I6ICNlYWZhZjk7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLmNvbGxlY3Rpb24gYS5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB0cmFuc2l0aW9uOiAwLjI1cztcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbTpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbSB7XFxuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIHBhZGRpbmctbGVmdDogNzJweDtcXG59XFxuLmNvbGxlY3Rpb24gLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG5zZWxlY3Q6Zm9jdXMge1xcbiAgb3V0bGluZTogMXB4IHNvbGlkICNjOWYzZWY7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJhYjdhOTtcXG59XFxuXFxubGFiZWwge1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBjb2xvcjogIzllOWU5ZTtcXG59XFxuXFxuLyogVGV4dCBJbnB1dHMgKyBUZXh0YXJlYVxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLyogU3R5bGUgUGxhY2Vob2xkZXJzICovXFxuOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2QxZDFkMTtcXG59XFxuXFxuLyogVGV4dCBpbnB1dHMgKi9cXG5pbnB1dDpub3QoW3R5cGVdKSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG50ZXh0YXJlYS50ZXh0YXJlYSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIG1hcmdpbjogMCAwIDhweCAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcywgYm9yZGVyIDAuM3M7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmRpc2FibGVkLCBpbnB1dDpub3QoW3R5cGVdKVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpkaXNhYmxlZCxcXG50ZXh0YXJlYS50ZXh0YXJlYVtyZWFkb25seT1yZWFkb25seV0ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmRpc2FibGVkICsgbGFiZWwsIGlucHV0Om5vdChbdHlwZV0pW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpkaXNhYmxlZCArIGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1czpub3QoW3JlYWRvbmx5XSkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyNmE2OWE7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgIzI2YTY5YTtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwge1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gbGFiZWwge1xcbiAgY29sb3I6ICM0Y2FmNTA7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLmludmFsaWQgfiBsYWJlbCB7XFxuICBjb2xvcjogI2Y0NDMzNjtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWEudmFsaWRhdGUgKyBsYWJlbCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLyogVmFsaWRhdGlvbiBTYXNzIFBsYWNlaG9sZGVycyAqL1xcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCA+IGlucHV0LnNlbGVjdC1kcm9wZG93biwgaW5wdXQ6bm90KFt0eXBlXSkudmFsaWQsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNGNhZjUwO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICM0Y2FmNTA7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkID4gaW5wdXQuc2VsZWN0LWRyb3Bkb3duLCAuc2VsZWN0LXdyYXBwZXIuaW52YWxpZCA+IGlucHV0LnNlbGVjdC1kcm9wZG93bjpmb2N1cywgaW5wdXQ6bm90KFt0eXBlXSkuaW52YWxpZCwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhLmludmFsaWQsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Y0NDMzNjtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjZjQ0MzM2O1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIudmFsaWQgLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sIC5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLCBpbnB1dDpub3QoW3R5cGVdKS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLCBpbnB1dDpub3QoW3R5cGVdKS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG50ZXh0YXJlYS50ZXh0YXJlYS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxudGV4dGFyZWEudGV4dGFyZWEuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdIHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdWNjZXNzKTtcXG4gIGNvbG9yOiAjNGNhZjUwO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtZXJyb3IpO1xcbiAgY29sb3I6ICNmNDQzMzY7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciArIGxhYmVsOmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYSArIGxhYmVsOmFmdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSBlYXNlLW91dCwgMC4ycyBjb2xvciBlYXNlLW91dDtcXG59XFxuXFxuLmlucHV0LWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG4uaW5wdXQtZmllbGQuaW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBtYXJnaW4tbGVmdDogNXB4O1xcbn1cXG4uaW5wdXQtZmllbGQuaW5saW5lIGlucHV0LFxcbi5pbnB1dC1maWVsZC5pbmxpbmUgLnNlbGVjdC1kcm9wZG93biB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG4uaW5wdXQtZmllbGQuY29sIGxhYmVsIHtcXG4gIGxlZnQ6IDAuNXJlbTtcXG59XFxuLmlucHV0LWZpZWxkLmNvbCAucHJlZml4IH4gbGFiZWwsXFxuLmlucHV0LWZpZWxkLmNvbCAucHJlZml4IH4gLnZhbGlkYXRlIH4gbGFiZWwge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0gLSAxcmVtKTtcXG59XFxuLmlucHV0LWZpZWxkID4gbGFiZWwge1xcbiAgY29sb3I6ICM5ZTllOWU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQsIGNvbG9yIDAuMnMgZWFzZS1vdXQ7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAxMDAlO1xcbiAgdGV4dC1hbGlnbjogaW5pdGlhbDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnB4KTtcXG59XFxuLmlucHV0LWZpZWxkID4gbGFiZWw6bm90KC5sYWJlbC1pY29uKS5hY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNHB4KSBzY2FsZSgwLjgpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbn1cXG4uaW5wdXQtZmllbGQgPiBpbnB1dFt0eXBlXTotd2Via2l0LWF1dG9maWxsOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpub3QoW3R5cGU9c2VhcmNoXSkgKyBsYWJlbCwgLmlucHV0LWZpZWxkID4gaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCwgLmlucHV0LWZpZWxkID4gaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHNjYWxlKDAuOCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxufVxcbi5pbnB1dC1maWVsZCAuaGVscGVyLXRleHQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWluLWhlaWdodDogMThweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxufVxcbi5pbnB1dC1maWVsZCAuaGVscGVyLXRleHQ6OmFmdGVyIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uaW5wdXQtZmllbGQgLnByZWZpeCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNTZweDtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4LmFjdGl2ZSB7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiBpbnB1dCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IHRleHRhcmVhLFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gbGFiZWwsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiAudmFsaWRhdGUgfiBsYWJlbCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IC5oZWxwZXItdGV4dCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IC5hdXRvY29tcGxldGUtY29udGVudCB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuaW5wdXQtZmllbGQgLnByZWZpeCB+IGlucHV0IHtcXG4gICAgd2lkdGg6IDg2JTtcXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmlucHV0LWZpZWxkIC5wcmVmaXggfiBpbnB1dCB7XFxuICAgIHdpZHRoOiA4MCU7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG4gIH1cXG59XFxuXFxuLyogU2VhcmNoIEZpZWxkICovXFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgdHJhbnNpdGlvbjogMC4zcyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG4ubmF2LXdyYXBwZXIgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBwYWRkaW5nLWxlZnQ6IDRyZW07XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNHJlbSk7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjNDQ0O1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsIGksIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpIH4gLm1kaS1uYXZpZ2F0aW9uLWNsb3NlLCAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB+IC5tYXRlcmlhbC1pY29ucyB7XFxuICBjb2xvcjogIzQ0NDtcXG59XFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSArIC5sYWJlbC1pY29uIHtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG4gIGxlZnQ6IDFyZW07XFxufVxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0gfiAubWRpLW5hdmlnYXRpb24tY2xvc2UsIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0gfiAubWF0ZXJpYWwtaWNvbnMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDFyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IDJyZW07XFxuICB0cmFuc2l0aW9uOiAwLjNzIGNvbG9yO1xcbn1cXG5cXG4vKiBUZXh0YXJlYSAqL1xcbnRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbnRleHRhcmVhLnRleHRhcmVhIHtcXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47IC8qIHByZXZlbnRzIHNjcm9sbCBiYXIgZmxhc2ggKi9cXG4gIHBhZGRpbmc6IDAuOHJlbSAwIDAuOHJlbSAwOyAvKiBwcmV2ZW50cyB0ZXh0IGp1bXAgb24gRW50ZXIga2V5cHJlc3MgKi9cXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG1pbi1oZWlnaHQ6IDU2cHg7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG4uaGlkZGVuZGl2IHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7IC8qIGZ1dHVyZSB2ZXJzaW9uIG9mIGRlcHJlY2F0ZWQgJ3dvcmQtd3JhcCcgKi9cXG4gIHBhZGRpbmctdG9wOiAxLjJyZW07IC8qIHByZXZlbnRzIHRleHQganVtcCBvbiBFbnRlciBrZXlwcmVzcyAqL1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbi8qIEF1dG9jb21wbGV0ZSAqL1xcbi5hdXRvY29tcGxldGUtY29udGVudCBsaSAuaGlnaGxpZ2h0IHtcXG4gIGNvbG9yOiAjNDQ0O1xcbn1cXG4uYXV0b2NvbXBsZXRlLWNvbnRlbnQgbGkgaW1nIHtcXG4gIG1hcmdpbjogNXB4IDE1cHg7XFxufVxcblxcbi8qIENoYXJhY3RlciBDb3VudGVyICovXFxuLmNoYXJhY3Rlci1jb3VudGVyIHtcXG4gIG1pbi1oZWlnaHQ6IDE4cHg7XFxufVxcblxcbi8qIFJhZGlvIEJ1dHRvbnNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDM1cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDI1cHg7XFxuICBsaW5lLWhlaWdodDogMjVweDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIHRyYW5zaXRpb246IDAuMjhzIGVhc2U7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dICsgc3BhbjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBtYXJnaW46IDRweDtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgei1pbmRleDogMDtcXG4gIHRyYW5zaXRpb246IDAuMjhzIGVhc2U7XFxufVxcblxcbi8qIFVuY2hlY2tlZCBzdHlsZXMgKi9cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICM1YTVhNWE7XFxufVxcblxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbn1cXG5cXG4vKiBDaGVja2VkIHN0eWxlcyAqL1xcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjMjZhNjlhO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxufVxcblxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xcbn1cXG5cXG4vKiBSYWRpbyBXaXRoIGdhcCAqL1xcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XFxufVxcblxcbi8qIEZvY3VzZWQgc3R5bGVzICovXFxuW3R5cGU9cmFkaW9dLnRhYmJlZDpmb2N1cyArIHNwYW46YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5cXG4vKiBEaXNhYmxlZCBSYWRpbyBXaXRoIGdhcCAqL1xcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcbi8qIERpc2FibGVkIHN0eWxlICovXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQgKyBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItY29sb3I6ICM5NDk0OTQ7XFxufVxcblxcbi8qIENoZWNrYm94ZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi8qIFJlbW92ZSBkZWZhdWx0IGNoZWNrYm94ICovXFxuW3R5cGU9Y2hlY2tib3hdOm5vdCg6Y2hlY2tlZCksXFxuW3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG5bdHlwZT1jaGVja2JveF0ge1xcbiAgLyogY2hlY2tib3ggYXNwZWN0ICovXFxufVxcblt0eXBlPWNoZWNrYm94XSArIHNwYW46bm90KC5sZXZlcikge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUsIFt0eXBlPWNoZWNrYm94XTpub3QoLmZpbGxlZC1pbikgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxOHB4O1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgei1pbmRleDogMDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICM1YTVhNWE7XFxuICBib3JkZXItcmFkaXVzOiAxcHg7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5bdHlwZT1jaGVja2JveF06bm90KC5maWxsZWQtaW4pICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXI6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbn1cXG5bdHlwZT1jaGVja2JveF06bm90KDpjaGVja2VkKTpkaXNhYmxlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblt0eXBlPWNoZWNrYm94XS50YWJiZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuW3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB0b3A6IC00cHg7XFxuICBsZWZ0OiAtNXB4O1xcbiAgd2lkdGg6IDEycHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICBib3JkZXItdG9wOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzI2YTY5YTtcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDBkZWcpO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF06Y2hlY2tlZDpkaXNhYmxlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLyogSW5kZXRlcm1pbmF0ZSBjaGVja2JveCAqL1xcblt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgdG9wOiAtMTFweDtcXG4gIGxlZnQ6IC0xMnB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICBib3JkZXItdG9wOiBub25lO1xcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6ZGlzYWJsZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4gKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbiArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlLFxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4gKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIC8qIC4xcyBkZWxheSBpcyBmb3IgY2hlY2sgYW5pbWF0aW9uICovXFxuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4yNXMsIGJhY2tncm91bmQtY29sb3IgMC4yNXMsIHdpZHRoIDAuMnMgMC4xcywgaGVpZ2h0IDAuMnMgMC4xcywgdG9wIDAuMnMgMC4xcywgbGVmdCAwLjJzIDAuMXM7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgbGVmdDogNnB4O1xcbiAgdG9wOiAxMHB4O1xcbiAgdHJhbnNmb3JtOiByb3RhdGVaKDM3ZGVnKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICB3aWR0aDogMjBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAycHggc29saWQgIzVhNWE1YTtcXG4gIHRvcDogMHB4O1xcbiAgei1pbmRleDogMDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMXB4O1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogMTNweDtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjZmZmO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNmZmY7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVooMzdkZWcpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgIzI2YTY5YTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICB6LWluZGV4OiAwO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluLnRhYmJlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYm9yZGVyLWNvbG9yOiAjNWE1YTVhO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluLnRhYmJlZDpjaGVja2VkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpkaXNhYmxlZDpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQ5NDk0O1xcbiAgYm9yZGVyLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5cXG4vKiBTd2l0Y2hcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi5zd2l0Y2gsXFxuLnN3aXRjaCAqIHtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAubGV2ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg0YzdjMTtcXG59XFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyOmJlZm9yZSwgLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyOmFmdGVyIHtcXG4gIGxlZnQ6IDE4cHg7XFxufVxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5sZXZlcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIC5sZXZlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAzNnB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KTtcXG4gIGJvcmRlci1yYWRpdXM6IDE1cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MgZWFzZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBtYXJnaW46IDAgMTZweDtcXG59XFxuLnN3aXRjaCBsYWJlbCAubGV2ZXI6YmVmb3JlLCAuc3dpdGNoIGxhYmVsIC5sZXZlcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogLTNweDtcXG4gIHRyYW5zaXRpb246IGxlZnQgMC4zcyBlYXNlLCBiYWNrZ3JvdW5kIDAuM3MgZWFzZSwgYm94LXNoYWRvdyAwLjFzIGVhc2UsIHRyYW5zZm9ybSAwLjFzIGVhc2U7XFxufVxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM4LCAxNjYsIDE1NCwgMC4xNSk7XFxufVxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNGMUYxRjE7XFxuICBib3gtc2hhZG93OiAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOm5vdCg6ZGlzYWJsZWQpIH4gLmxldmVyOmFjdGl2ZTo6YmVmb3JlLFxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6bm90KDpkaXNhYmxlZCkudGFiYmVkOmZvY3VzIH4gLmxldmVyOjpiZWZvcmUge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgyLjQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOCwgMTY2LCAxNTQsIDAuMTUpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKSB+IC5sZXZlcjphY3RpdmU6YmVmb3JlLFxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpLnRhYmJlZDpmb2N1cyB+IC5sZXZlcjo6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxufVxcblxcbi5zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdICsgLmxldmVyIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xMik7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdICsgLmxldmVyOmFmdGVyLFxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdOmNoZWNrZWQgKyAubGV2ZXI6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk0OTQ5NDtcXG59XFxuXFxuLyogU2VsZWN0IEZpZWxkXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5zZWxlY3Qge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuc2VsZWN0LmJyb3dzZXItZGVmYXVsdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuc2VsZWN0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogNXB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2YyZjJmMjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuXFxuLnNlbGVjdC1sYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCArIGxhYmVsLCAuc2VsZWN0LXdyYXBwZXIuaW52YWxpZCArIGxhYmVsIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciBpbnB1dC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzllOWU5ZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbWFyZ2luOiAwIDAgOHB4IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciBpbnB1dC5zZWxlY3QtZHJvcGRvd246Zm9jdXMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyNmE2OWE7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciAuY2FyZXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBtYXJnaW46IGF1dG8gMDtcXG4gIHotaW5kZXg6IDA7XFxuICBmaWxsOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIgKyBsYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0yNnB4O1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxufVxcblxcbnNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLmRpc2FibGVkICsgbGFiZWwge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcbi5zZWxlY3Qtd3JhcHBlci5kaXNhYmxlZCAuY2FyZXQge1xcbiAgZmlsbDogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyIGlucHV0LnNlbGVjdC1kcm9wZG93bjpkaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIgaSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLmRpc2FibGVkLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkuZGlzYWJsZWQgPiBzcGFuLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG5ib2R5LmtleWJvYXJkLWZvY3VzZWQgLnNlbGVjdC1kcm9wZG93bi5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxufVxcblxcbi5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCBsaTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDgpO1xcbn1cXG4uc2VsZWN0LWRyb3Bkb3duLmRyb3Bkb3duLWNvbnRlbnQgbGkuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzKTtcXG59XFxuXFxuLnByZWZpeCB+IC5zZWxlY3Qtd3JhcHBlciB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcblxcbi5wcmVmaXggfiBsYWJlbCB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93biBsaSBpbWcge1xcbiAgbWFyZ2luOiA1cHggMTVweDtcXG4gIGZsb2F0OiByaWdodDtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cC5zZWxlY3RlZCA+IHNwYW4ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcXG59XFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCA+IHNwYW4ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40KTtcXG59XFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCB+IGxpLm9wdGdyb3VwLW9wdGlvbiB7XFxuICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxufVxcblxcbi8qIEZpbGUgSW5wdXRcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi5maWxlLWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmZpbGUtZmllbGQgLmZpbGUtcGF0aC13cmFwcGVyIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XFxufVxcbi5maWxlLWZpZWxkIGlucHV0LmZpbGUtcGF0aCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmZpbGUtZmllbGQgLmJ0biwgLmZpbGUtZmllbGQgLmJ0bi1zbWFsbCwgLmZpbGUtZmllbGQgLmJ0bi1sYXJnZSB7XFxuICBmbG9hdDogbGVmdDtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG4uZmlsZS1maWVsZCBzcGFuIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmZpbGUtZmllbGQgaW5wdXRbdHlwZT1maWxlXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBvcGFjaXR5OiAwO1xcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xcbn1cXG4uZmlsZS1maWVsZCBpbnB1dFt0eXBlPWZpbGVdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4vKiBSYW5nZVxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLnJhbmdlLWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0sXFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMTVweCAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIG1hcmdpbi1sZWZ0OiA3cHg7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIgLnZhbHVlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDMwcHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjb2xvcjogIzI2YTY5YTtcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIuYWN0aXZlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgNTAlIDA7XFxufVxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iLmFjdGl2ZSAudmFsdWUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sge1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjYzJjMGMyO1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XFxuICBtYXJnaW46IC01cHggMCAwIDA7XFxufVxcblxcbi5rZXlib2FyZC1mb2N1c2VkIGlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzOm5vdCguYWN0aXZlKTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXG4gIC8qIGZpeCBmb3IgRkYgdW5hYmxlIHRvIGFwcGx5IGZvY3VzIHN0eWxlIGJ1ZyAgKi9cXG4gIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xcbiAgLypyZXF1aXJlZCBmb3IgcHJvcGVyIHRyYWNrIHNpemluZyBpbiBGRiovXFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZDogI2MyYzBjMjtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWE7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3M7XFxuICBtYXJnaW4tdG9wOiAtNXB4O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTotbW96LWZvY3VzcmluZyB7XFxuICBvdXRsaW5lOiAxcHggc29saWQgI2ZmZjtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2sge1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDZweCAwO1xcbiAgLypyZW1vdmUgZGVmYXVsdCB0aWNrIG1hcmtzKi9cXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyIHtcXG4gIGJhY2tncm91bmQ6ICM3Nzc7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC11cHBlciB7XFxuICBiYWNrZ3JvdW5kOiAjZGRkO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMTRweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YTtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcztcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotbXMtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbi5wYXJhbGxheCB7XFxuICAvKiBTZXQgYSBzcGVjaWZpYyBoZWlnaHQgKi9cXG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xcbiAgLyogQ3JlYXRlIHRoZSBwYXJhbGxheCBzY3JvbGxpbmcgZWZmZWN0ICovXFxuICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcXG59XFxuXFxuLnNjZW5lIHtcXG4gIHdpZHRoOiAyMDBweDtcXG4gIGhlaWdodDogMjAwcHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDO1xcbiAgbWFyZ2luOiA4MHB4O1xcbiAgcGVyc3BlY3RpdmU6IDQwMHB4O1xcbn1cXG5cXG4uY3ViZSB7XFxuICB3aWR0aDogMjAwcHg7XFxuICBoZWlnaHQ6IDIwMHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtNDAwcHgpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xcbn1cXG5cXG4uY3ViZS5zaG93LWZyb250IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSgwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1yaWdodCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoLTkwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1iYWNrIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSgtMTgwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1sZWZ0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSg5MGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctdG9wIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWCgtOTBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LWJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVgoOTBkZWcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjAwcHg7XFxuICBoZWlnaHQ6IDIwMHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XFxuICBsaW5lLWhlaWdodDogMjAwcHg7XFxuICBmb250LXNpemU6IDQwcHg7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWZyb250IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tcmlnaHQge1xcbiAgYmFja2dyb3VuZDogaHNsYSg2MGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYmFjayB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDEyMGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tbGVmdCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDE4MGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tdG9wIHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMjQwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1ib3R0b20ge1xcbiAgYmFja2dyb3VuZDogaHNsYSgzMDBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWZyb250IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSg5MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1iYWNrIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tbGVmdCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoLTkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXRvcCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVgoOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYm90dG9tIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWCgtOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG5sYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICBtYXgtd2lkdGg6IDEyODBweDtcXG4gIHdpZHRoOiA5MCU7XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAuY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDg1JTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICB3aWR0aDogNzAlO1xcbiAgfVxcbn1cXG4uY29sIC5yb3cge1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW07XFxufVxcblxcbi5zZWN0aW9uIHtcXG4gIHBhZGRpbmctdG9wOiAxcmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XFxufVxcbi5zZWN0aW9uLm5vLXBhZCB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uc2VjdGlvbi5uby1wYWQtYm90IHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4uc2VjdGlvbi5uby1wYWQtdG9wIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG5cXG4ucm93IHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuLnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IHRhYmxlO1xcbiAgY2xlYXI6IGJvdGg7XFxufVxcbi5yb3cgLmNvbCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBwYWRkaW5nOiAwIDAuNXJlbTtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG59XFxuLnJvdyAuY29sW2NsYXNzKj1wdXNoLV0sIC5yb3cgLmNvbFtjbGFzcyo9cHVsbC1dIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnJvdyAuY29sLnMxIHtcXG4gIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMiB7XFxuICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMzIHtcXG4gIHdpZHRoOiAyNSU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM0IHtcXG4gIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczUge1xcbiAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNyB7XFxuICB3aWR0aDogNTguMzMzMzMzMzMzMyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM4IHtcXG4gIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczkge1xcbiAgd2lkdGg6IDc1JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczEwIHtcXG4gIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczExIHtcXG4gIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczEyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxIHtcXG4gIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMSB7XFxuICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMyIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczIge1xcbiAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMiB7XFxuICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMyB7XFxuICBtYXJnaW4tbGVmdDogMjUlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMyB7XFxuICByaWdodDogMjUlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMyB7XFxuICBsZWZ0OiAyNSU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczQge1xcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNCB7XFxuICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM0IHtcXG4gIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM1IHtcXG4gIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczUge1xcbiAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNSB7XFxuICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNiB7XFxuICByaWdodDogNTAlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNiB7XFxuICBsZWZ0OiA1MCU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNyB7XFxuICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM3IHtcXG4gIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM4IHtcXG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczgge1xcbiAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zOCB7XFxuICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zOSB7XFxuICBtYXJnaW4tbGVmdDogNzUlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zOSB7XFxuICByaWdodDogNzUlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zOSB7XFxuICBsZWZ0OiA3NSU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczEwIHtcXG4gIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczEwIHtcXG4gIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczEwIHtcXG4gIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMxMSB7XFxuICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxMSB7XFxuICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMxMSB7XFxuICBsZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMTIge1xcbiAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxMiB7XFxuICByaWdodDogMTAwJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczEyIHtcXG4gIGxlZnQ6IDEwMCU7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAucm93IC5jb2wubTEge1xcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0yIHtcXG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTMge1xcbiAgICB3aWR0aDogMjUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTQge1xcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tNSB7XFxuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm02IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm03IHtcXG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTgge1xcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tOSB7XFxuICAgIHdpZHRoOiA3NSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTAge1xcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTEge1xcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTEge1xcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0xIHtcXG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMiB7XFxuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0yIHtcXG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0zIHtcXG4gICAgcmlnaHQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0zIHtcXG4gICAgbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW00IHtcXG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTQge1xcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tNSB7XFxuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW01IHtcXG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW02IHtcXG4gICAgcmlnaHQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW02IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW03IHtcXG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTcge1xcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tOCB7XFxuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW04IHtcXG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW05IHtcXG4gICAgcmlnaHQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW05IHtcXG4gICAgbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMTAge1xcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMTAge1xcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTExIHtcXG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTExIHtcXG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTEyIHtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMTIge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLnJvdyAuY29sLmwxIHtcXG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMiB7XFxuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwzIHtcXG4gICAgd2lkdGg6IDI1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw0IHtcXG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDUge1xcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNiB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNyB7XFxuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw4IHtcXG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDkge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDEwIHtcXG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDExIHtcXG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDEyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxIHtcXG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMSB7XFxuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDIge1xcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMiB7XFxuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMyB7XFxuICAgIHJpZ2h0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMyB7XFxuICAgIGxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNCB7XFxuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw0IHtcXG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw1IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDUge1xcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNSB7XFxuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNiB7XFxuICAgIHJpZ2h0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNiB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNyB7XFxuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw3IHtcXG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw4IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDgge1xcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sOCB7XFxuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sOSB7XFxuICAgIHJpZ2h0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sOSB7XFxuICAgIGxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDEwIHtcXG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDEwIHtcXG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwxMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxMSB7XFxuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwxMSB7XFxuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxMiB7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDEyIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogMTIwMXB4KSB7XFxuICAucm93IC5jb2wueGwxIHtcXG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDIge1xcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDMge1xcbiAgICB3aWR0aDogMjUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw0IHtcXG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw1IHtcXG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw2IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsNyB7XFxuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsOCB7XFxuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsOSB7XFxuICAgIHdpZHRoOiA3NSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDEwIHtcXG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwxMSB7XFxuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMTIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMSB7XFxuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwxIHtcXG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwyIHtcXG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwyIHtcXG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDMge1xcbiAgICByaWdodDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwzIHtcXG4gICAgbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDQge1xcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDQge1xcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw1IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw1IHtcXG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw1IHtcXG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDYge1xcbiAgICByaWdodDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw2IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDcge1xcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDcge1xcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw4IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw4IHtcXG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw4IHtcXG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDkge1xcbiAgICByaWdodDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw5IHtcXG4gICAgbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwxMCB7XFxuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMTAge1xcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwxMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMTEge1xcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDExIHtcXG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMTIge1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMTIge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgfVxcbn1cXG5cXG4uc2lkZW5hdiB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMzAwcHg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MHB4KTtcXG4gIGhlaWdodDogLW1vei1jYWxjKDEwMCUpO1xcbiAgcGFkZGluZy1ib3R0b206IDYwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgei1pbmRleDogOTk5O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xcbn1cXG4uc2lkZW5hdi5yaWdodC1hbGlnbmVkIHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLnNpZGVuYXYgbGkge1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcbi5zaWRlbmF2IGxpIC5pY29uU2lkZUxpbmsge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5zaWRlbmF2IGxpIC5pY29uU2lkZUxpbmsgc3ZnIHtcXG4gIHN0cm9rZTogcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi5zaWRlbmF2IGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG4uc2lkZW5hdiBsaS5hY3RpdmUgc3ZnIHtcXG4gIHN0cm9rZTogd2hpdGUgIWltcG9ydGFudDtcXG4gIHdpZHRoOiAzMHB4O1xcbn1cXG4uc2lkZW5hdiBsaS5sYXN0IHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB0b3A6IGNhbGMoMTAwJSAtIDQ1cHggLSAzNXB4KTtcXG59XFxuLnNpZGVuYXYgbGkgPiBhIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBsaW5lLWhlaWdodDogNDVweDtcXG4gIHBhZGRpbmc6IDAgMzBweDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4sIC5zaWRlbmF2IGxpID4gYS5idG4tc21hbGwsIC5zaWRlbmF2IGxpID4gYS5idG4tbGFyZ2UsIC5zaWRlbmF2IGxpID4gYS5idG4tZmxhdCwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbG9hdGluZyB7XFxuICBtYXJnaW46IDEwcHggMTVweDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0biwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1zbWFsbCwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1sYXJnZSwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbG9hdGluZyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbGF0IHtcXG4gIGNvbG9yOiAjMzQzNDM0O1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuOmhvdmVyLCAuc2lkZW5hdiBsaSA+IGEuYnRuLXNtYWxsOmhvdmVyLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWxhcmdlOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQxNDE7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4tZmxvYXRpbmc6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0MzQzNDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhID4gaSwgLnNpZGVuYXYgbGkgPiBhID4gW2NsYXNzXj1tZGktXSxcXG4uc2lkZW5hdiBsaSA+IGEgbGkgPiBhID4gW2NsYXNzKj1tZGktXSwgLnNpZGVuYXYgbGkgPiBhID4gaS5zLWljb24ge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBsaW5lLWhlaWdodDogNDVweDtcXG4gIG1hcmdpbjogMCAzMHB4IDAgMDtcXG4gIHdpZHRoOiAyMi41cHg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcXG59XFxuLnNpZGVuYXYgLmRpdmlkZXIge1xcbiAgbWFyZ2luOiA3LjVweCAwIDAgMDtcXG59XFxuLnNpZGVuYXYgLnN1YmhlYWRlciB7XFxuICBjdXJzb3I6IGluaXRpYWw7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0NXB4O1xcbn1cXG4uc2lkZW5hdiAuc3ViaGVhZGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDMwcHggMzBweCAwO1xcbiAgbWFyZ2luLWJvdHRvbTogNy41cHg7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgPiBhIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgPiBhOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5iYWNrZ3JvdW5kIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAuY2lyY2xlLFxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLm5hbWUsXFxuLnNpZGVuYXYgLnVzZXItdmlldyAuZW1haWwge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmNpcmNsZSB7XFxuICBoZWlnaHQ6IDY0cHg7XFxuICB3aWR0aDogNjRweDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAubmFtZSxcXG4uc2lkZW5hdiAudXNlci12aWV3IC5lbWFpbCB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjIuNXB4O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5uYW1lIHtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5lbWFpbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbi5kcmFnLXRhcmdldCB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTBweDtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5ODtcXG59XFxuLmRyYWctdGFyZ2V0LnJpZ2h0LWFsaWduZWQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQge1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZC5yaWdodC1hbGlnbmVkIHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5zaWRlbmF2LnNpZGVuYXYtZml4ZWQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xcbiAgfVxcbiAgLnNpZGVuYXYuc2lkZW5hdi1maXhlZC5yaWdodC1hbGlnbmVkIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpO1xcbiAgfVxcbiAgLnNpZGVuYXYgPiBhIHtcXG4gICAgcGFkZGluZzogMCAxNXB4O1xcbiAgfVxcbiAgLnNpZGVuYXYgLnVzZXItdmlldyB7XFxuICAgIHBhZGRpbmc6IDE1cHggMTVweCAwO1xcbiAgfVxcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlLFxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5O1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIGEsXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIGEge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5zaWRlbmF2LW92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogMTIwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICB6LWluZGV4OiA5OTc7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ud2l0aC1zaWRlLW5hdi1vcGVuIHtcXG4gIHBhZGRpbmctbGVmdDogMzAwcHg7XFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDFzO1xcbn1cXG5cXG4uYnRuLCAuYnRuLXNtYWxsLCAuYnRuLWxhcmdlLFxcbi5idG4tZmxhdCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDM2cHg7XFxuICBsaW5lLWhlaWdodDogMzZweDtcXG4gIHBhZGRpbmc6IDAgMTZweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi5kaXNhYmxlZCxcXG4uYnRuLWZsb2F0aW5nLmRpc2FibGVkLFxcbi5idG4tbGFyZ2UuZGlzYWJsZWQsXFxuLmJ0bi1zbWFsbC5kaXNhYmxlZCxcXG4uYnRuLWZsYXQuZGlzYWJsZWQsXFxuLmJ0bjpkaXNhYmxlZCxcXG4uYnRuLWZsb2F0aW5nOmRpc2FibGVkLFxcbi5idG4tbGFyZ2U6ZGlzYWJsZWQsXFxuLmJ0bi1zbWFsbDpkaXNhYmxlZCxcXG4uYnRuLWZsYXQ6ZGlzYWJsZWQsXFxuLmJ0bltkaXNhYmxlZF0sXFxuLmJ0bi1mbG9hdGluZ1tkaXNhYmxlZF0sXFxuLmJ0bi1sYXJnZVtkaXNhYmxlZF0sXFxuLmJ0bi1zbWFsbFtkaXNhYmxlZF0sXFxuLmJ0bi1mbGF0W2Rpc2FibGVkXSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNERkRGREYgIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzlGOUY5RiAhaW1wb3J0YW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4uYnRuLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxvYXRpbmcuZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1sYXJnZS5kaXNhYmxlZDpob3ZlcixcXG4uYnRuLXNtYWxsLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxhdC5kaXNhYmxlZDpob3ZlcixcXG4uYnRuOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxvYXRpbmc6ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1sYXJnZTpkaXNhYmxlZDpob3ZlcixcXG4uYnRuLXNtYWxsOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxhdDpkaXNhYmxlZDpob3ZlcixcXG4uYnRuW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWZsb2F0aW5nW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWxhcmdlW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLXNtYWxsW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWZsYXRbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNERkRGREYgIWltcG9ydGFudDtcXG4gIGNvbG9yOiAjOUY5RjlGICFpbXBvcnRhbnQ7XFxufVxcblxcbi5idG4sXFxuLmJ0bi1zbWFsbCxcXG4uYnRuLWxhcmdlLFxcbi5idG4tZmxvYXRpbmcsXFxuLmJ0bi1mbGF0IHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5idG4gaSxcXG4uYnRuLWZsb2F0aW5nIGksXFxuLmJ0bi1sYXJnZSBpLFxcbi5idG4tc21hbGwgaSxcXG4uYnRuLWZsYXQgaSB7XFxuICBmb250LXNpemU6IDEuM3JlbTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLXNtYWxsOmZvY3VzLCAuYnRuLWxhcmdlOmZvY3VzLFxcbi5idG4tZmxvYXRpbmc6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFiMWIxYjtcXG59XFxuXFxuLmJ0biwgLmJ0bi1zbWFsbCwgLmJ0bi1sYXJnZSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNDM0MzQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBsZXR0ZXItc3BhY2luZzogMC41cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZS1vdXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5idG46aG92ZXIsIC5idG4tc21hbGw6aG92ZXIsIC5idG4tbGFyZ2U6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQxNDE0MTtcXG59XFxuXFxuLmJ0bi1mbG9hdGluZyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB6LWluZGV4OiAxO1xcbiAgd2lkdGg6IDQwcHg7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmJ0bi1mbG9hdGluZzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uYnRuLWZsb2F0aW5nOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1sYXJnZSB7XFxuICB3aWR0aDogNTZweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLWxhcmdlLmhhbGZ3YXktZmFiIHtcXG4gIGJvdHRvbTogMjhweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tbGFyZ2UgaSB7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tc21hbGwge1xcbiAgd2lkdGg6IDMyLjRweDtcXG4gIGhlaWdodDogMzIuNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1zbWFsbC5oYWxmd2F5LWZhYiB7XFxuICBib3R0b206IDE2LjJweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tc21hbGwgaSB7XFxuICBsaW5lLWhlaWdodDogMzIuNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmhhbGZ3YXktZmFiIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAyNHB4O1xcbiAgYm90dG9tOiAyMHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmhhbGZ3YXktZmFiLmxlZnQge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBsZWZ0OiAyNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nIGkge1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxufVxcblxcbmJ1dHRvbi5idG4tZmxvYXRpbmcge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uZml4ZWQtYWN0aW9uLWJ0biB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIHBhZGRpbmctdG9wOiAxNXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHotaW5kZXg6IDk5NztcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uYWN0aXZlIHVsIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1sZWZ0LCAuZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgcGFkZGluZzogMCAwIDAgMTVweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWxlZnQgdWwsIC5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIHJpZ2h0OiA2NHB4O1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiBhdXRvO1xcbiAgLyp3aWR0aCAxMDAlIG9ubHkgZ29lcyB0byB3aWR0aCBvZiBidXR0b24gY29udGFpbmVyICovXFxuICB3aWR0aDogNTAwcHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1sZWZ0IHVsIGxpLCAuZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQgdWwgbGkge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiA3LjVweCAxNXB4IDAgMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHtcXG4gIHBhZGRpbmc6IDAgMTVweCAwIDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgZGlyZWN0aW9uOiBydGw7XFxuICBsZWZ0OiA2NHB4O1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCBsaSB7XFxuICBtYXJnaW46IDcuNXB4IDAgMCAxNXB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tYm90dG9tIHtcXG4gIHBhZGRpbmc6IDAgMCAxNXB4IDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1ib3R0b20gdWwge1xcbiAgdG9wOiA2NHB4O1xcbiAgYm90dG9tOiBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWJvdHRvbSB1bCBsaSB7XFxuICBtYXJnaW46IDE1cHggMCAwIDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhci5hY3RpdmUgPiBhIGkge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCBsaSB7XFxuICBmbGV4OiAxO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgdHJhbnNpdGlvbjogbm9uZTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCBsaSBhIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIgdWwgbGkgYSBpIHtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0biB1bCB7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDY0cHg7XFxuICBtYXJnaW46IDA7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIHVsIGxpIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIHVsIGEuYnRuLWZsb2F0aW5nIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIC5mYWItYmFja2Ryb3Age1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbiAgd2lkdGg6IDQwcHg7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuXFxuLmJ0bi1mbGF0IHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiAjMzQzNDM0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzO1xcbn1cXG4uYnRuLWZsYXQ6Zm9jdXMsIC5idG4tZmxhdDpob3ZlciB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uYnRuLWZsYXQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG4uYnRuLWZsYXQuZGlzYWJsZWQsIC5idG4tZmxhdC5idG4tZmxhdFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIGNvbG9yOiAjYjNiM2IzICFpbXBvcnRhbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5idG4tbGFyZ2Uge1xcbiAgaGVpZ2h0OiA1NHB4O1xcbiAgbGluZS1oZWlnaHQ6IDU0cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBwYWRkaW5nOiAwIDI4cHg7XFxufVxcbi5idG4tbGFyZ2UgaSB7XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG59XFxuXFxuLmJ0bi1zbWFsbCB7XFxuICBoZWlnaHQ6IDMyLjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMi40cHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxufVxcbi5idG4tc21hbGwgaSB7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG59XFxuXFxuLmJ0bi1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmNvbW11blRhYkhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciB7XFxuICBoZWlnaHQ6IDEwMHB4O1xcbiAgcGFkZGluZzogNDBweDtcXG59XFxuXFxuLnRhYnMge1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMTUwcHgpO1xcbiAgbWFyZ2luLXRvcDogMzBweDtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggIWltcG9ydGFudDtcXG59XFxuLnRhYnMgLmlubmVycGFnZSB7XFxuICBtaW4taGVpZ2h0OiA3MFZIICFpbXBvcnRhbnQ7XFxufVxcbi50YWJzIC50YWJzLWhlYWRlci1vdmVybGF5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDEwMHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjY2JlN2ZlLCAjMzVhMmZiKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjODBjNGZkLCAjMzVhMmZiKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjODBjNGZkLCAjY2JlN2ZlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicyAudGFiLWNvbnRlbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBib3JkZXItdG9wOiAwO1xcbiAgbWluLWhlaWdodDogNzB2aDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA0MHB4IDQwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG59XFxuXFxuLmxvYWRlci1vdmVybGF5IHtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMTAwdmg7XFxuICB3aWR0aDogMTAwdnc7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDIsIDEwMCwgMTAwLCAwLjYwMyk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLmxvYWRlci1vdmVybGF5IC5sb2FkZXIge1xcbiAgYm9yZGVyOiA3cHggc29saWQgI2YzZjNmMzsgLyogTGlnaHQgZ3JleSAqL1xcbiAgYm9yZGVyLXRvcDogN3B4IHNvbGlkICMyZWEyY2M7IC8qIEJsdWUgKi9cXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA3MHB4O1xcbiAgaGVpZ2h0OiA3MHB4O1xcbiAgYW5pbWF0aW9uOiBzcGluIDJzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuLmxvYWRlci1vdmVybGF5IC5sb2FkZXItdGV4dCB7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgY29sb3I6ICMyZWEyY2M7XFxufVxcbkBrZXlmcmFtZXMgc3BpbiB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5jYXJkLXBhbmVsIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yNXM7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jYXJkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI1cztcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuLmNhcmQgLmNhcmQtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG59XFxuLmNhcmQgLmNhcmQtdGl0bGUuYWN0aXZhdG9yIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmNhcmQuc21hbGwsIC5jYXJkLm1lZGl1bSwgLmNhcmQubGFyZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1pbWFnZSwgLmNhcmQubWVkaXVtIC5jYXJkLWltYWdlLCAuY2FyZC5sYXJnZSAuY2FyZC1pbWFnZSB7XFxuICBtYXgtaGVpZ2h0OiA2MCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQsIC5jYXJkLm1lZGl1bSAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQsIC5jYXJkLmxhcmdlIC5jYXJkLWltYWdlICsgLmNhcmQtY29udGVudCB7XFxuICBtYXgtaGVpZ2h0OiA0MCU7XFxufVxcbi5jYXJkLnNtYWxsIC5jYXJkLWNvbnRlbnQsIC5jYXJkLm1lZGl1bSAuY2FyZC1jb250ZW50LCAuY2FyZC5sYXJnZSAuY2FyZC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1hY3Rpb24sIC5jYXJkLm1lZGl1bSAuY2FyZC1hY3Rpb24sIC5jYXJkLmxhcmdlIC5jYXJkLWFjdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5jYXJkLnNtYWxsIHtcXG4gIGhlaWdodDogMzAwcHg7XFxufVxcbi5jYXJkLm1lZGl1bSB7XFxuICBoZWlnaHQ6IDQwMHB4O1xcbn1cXG4uY2FyZC5sYXJnZSB7XFxuICBoZWlnaHQ6IDUwMHB4O1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5jYXJkLmhvcml6b250YWwuc21hbGwgLmNhcmQtaW1hZ2UsIC5jYXJkLmhvcml6b250YWwubWVkaXVtIC5jYXJkLWltYWdlLCAuY2FyZC5ob3Jpem9udGFsLmxhcmdlIC5jYXJkLWltYWdlIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbC5zbWFsbCAuY2FyZC1pbWFnZSBpbWcsIC5jYXJkLmhvcml6b250YWwubWVkaXVtIC5jYXJkLWltYWdlIGltZywgLmNhcmQuaG9yaXpvbnRhbC5sYXJnZSAuY2FyZC1pbWFnZSBpbWcge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLWltYWdlIHtcXG4gIG1heC13aWR0aDogNTAlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLWltYWdlIGltZyB7XFxuICBib3JkZXItcmFkaXVzOiAycHggMCAwIDJweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLXN0YWNrZWQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4OiAxO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLXN0YWNrZWQgLmNhcmQtY29udGVudCB7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcbi5jYXJkLnN0aWNreS1hY3Rpb24gLmNhcmQtYWN0aW9uIHtcXG4gIHotaW5kZXg6IDI7XFxufVxcbi5jYXJkLnN0aWNreS1hY3Rpb24gLmNhcmQtcmV2ZWFsIHtcXG4gIHotaW5kZXg6IDE7XFxuICBwYWRkaW5nLWJvdHRvbTogNjRweDtcXG59XFxuLmNhcmQgLmNhcmQtaW1hZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZCAuY2FyZC1pbWFnZSBpbWcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4uY2FyZCAuY2FyZC1pbWFnZSAuY2FyZC10aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCBwIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCAuY2FyZC10aXRsZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IC5jYXJkLXRpdGxlIGkge1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTYwLCAxNjAsIDE2MCwgMC4yKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDE2cHggMjRweDtcXG59XFxuLmNhcmQgLmNhcmQtYWN0aW9uOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbiBhOm5vdCguYnRuKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tc21hbGwpOm5vdCguYnRuLWxhcmdlKTpub3QoLmJ0bi1mbG9hdGluZykge1xcbiAgY29sb3I6ICNmZmFiNDA7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2U7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG4uY2FyZCAuY2FyZC1hY3Rpb24gYTpub3QoLmJ0bik6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLXNtYWxsKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tZmxvYXRpbmcpOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZkOGE2O1xcbn1cXG4uY2FyZCAuY2FyZC1yZXZlYWwge1xcbiAgcGFkZGluZzogMjRweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5jYXJkIC5jYXJkLXJldmVhbCAuY2FyZC10aXRsZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLypcXG4gICAgQGxpY2Vuc2VcXG4gICAgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4gICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcXG4gICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cXG4gICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcXG4gKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqL1xcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKlxcbiAqIENvbnN0YW50czpcXG4gKiAgICAgIFNUUk9LRVdJRFRIID0gM3B4XFxuICogICAgICBBUkNTSVpFICAgICA9IDI3MCBkZWdyZWVzIChhbW91bnQgb2YgY2lyY2xlIHRoZSBhcmMgdGFrZXMgdXApXFxuICogICAgICBBUkNUSU1FICAgICA9IDEzMzNtcyAodGltZSBpdCB0YWtlcyB0byBleHBhbmQgYW5kIGNvbnRyYWN0IGFyYylcXG4gKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCByb3RhdGUgZWFjaCB0aW1lLCAyMTYgZ2l2ZXMgdXMgYVxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHBvaW50ZWQgc3RhciBzaGFwZSAoaXQncyAzNjAvNSAqIDMpLlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG9cXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwLzcgKiAzID0gMTU0LjI4NilcXG4gKiAgICAgIENPTlRBSU5FUldJRFRIID0gMjhweFxcbiAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtc1xcbiAqL1xcbi5wcmVsb2FkZXItd3JhcHBlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogNTBweDtcXG4gIGhlaWdodDogNTBweDtcXG59XFxuLnByZWxvYWRlci13cmFwcGVyLnNtYWxsIHtcXG4gIHdpZHRoOiAzNnB4O1xcbiAgaGVpZ2h0OiAzNnB4O1xcbn1cXG4ucHJlbG9hZGVyLXdyYXBwZXIuYmlnIHtcXG4gIHdpZHRoOiA2NHB4O1xcbiAgaGVpZ2h0OiA2NHB4O1xcbn1cXG4ucHJlbG9hZGVyLXdyYXBwZXIuYWN0aXZlIHtcXG4gIC8qIGR1cmF0aW9uOiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbi5zcGlubmVyLWxheWVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1jb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuLnNwaW5uZXItYmx1ZSxcXG4uc3Bpbm5lci1ibHVlLW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDI4NWY0O1xcbn1cXG5cXG4uc3Bpbm5lci1yZWQsXFxuLnNwaW5uZXItcmVkLW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGI0NDM3O1xcbn1cXG5cXG4uc3Bpbm5lci15ZWxsb3csXFxuLnNwaW5uZXIteWVsbG93LW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZjRiNDAwO1xcbn1cXG5cXG4uc3Bpbm5lci1ncmVlbixcXG4uc3Bpbm5lci1ncmVlbi1vbmx5IHtcXG4gIGJvcmRlci1jb2xvcjogIzBmOWQ1ODtcXG59XFxuXFxuLyoqXFxuICogSU1QT1JUQU5UIE5PVEUgQUJPVVQgQ1NTIEFOSU1BVElPTiBQUk9QRVJUSUVTIChrZWFudWxlZSk6XFxuICpcXG4gKiBpT1MgU2FmYXJpICh0ZXN0ZWQgb24gaU9TIDguMSkgZG9lcyBub3QgaGFuZGxlIGFuaW1hdGlvbi1kZWxheSB2ZXJ5IHdlbGwgLSBpdCBkb2Vzbid0XFxuICogZ3VhcmFudGVlIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHN0YXJ0IF9leGFjdGx5XyBhZnRlciB0aGF0IHZhbHVlLiBTbyB3ZSBhdm9pZCB1c2luZ1xcbiAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgcmVkdW5kYW50IGFzIGl0XFxuICogc2VlbXMpLlxcbiAqXFxuICogV2Ugd3JpdGUgb3V0IGVhY2ggYW5pbWF0aW9uIGluIGZ1bGwgKGluc3RlYWQgb2Ygc2VwYXJhdGluZyBhbmltYXRpb24tbmFtZSxcXG4gKiBhbmltYXRpb24tZHVyYXRpb24sIGV0Yy4pIGJlY2F1c2UgdW5kZXIgdGhlIHBvbHlmaWxsLCBTYWZhcmkgZG9lcyBub3QgcmVjb2duaXplIHRob3NlXFxuICogc3BlY2lmaWMgcHJvcGVydGllcyBwcm9wZXJseSwgdHJlYXRzIHRoZW0gYXMgLXdlYmtpdC1hbmltYXRpb24sIGFuZCBvdmVycmlkZXMgdGhlXFxuICogb3RoZXIgYW5pbWF0aW9uIHJ1bGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcGxhdGZvcm0vaXNzdWVzLzUzLlxcbiAqL1xcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ibHVlIHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgYmx1ZS1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgYmx1ZS1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItcmVkIHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgcmVkLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCByZWQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXllbGxvdyB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIHllbGxvdy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgeWVsbG93LWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ncmVlbiB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGdyZWVuLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBncmVlbi1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ibHVlLW9ubHksXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXJlZC1vbmx5LFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci15ZWxsb3ctb25seSxcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItZ3JlZW4tb25seSB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICBvcGFjaXR5OiAxO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XFxuICAxMi41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTtcXG4gIH0gLyogMC41ICogQVJDU0laRSAqL1xcbiAgMjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xcbiAgfSAvKiAxICAgKiBBUkNTSVpFICovXFxuICAzNy41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKTtcXG4gIH0gLyogMS41ICogQVJDU0laRSAqL1xcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpO1xcbiAgfSAvKiAyICAgKiBBUkNTSVpFICovXFxuICA2Mi41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKTtcXG4gIH0gLyogMi41ICogQVJDU0laRSAqL1xcbiAgNzUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpO1xcbiAgfSAvKiAzICAgKiBBUkNTSVpFICovXFxuICA4Ny41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKTtcXG4gIH0gLyogMy41ICogQVJDU0laRSAqL1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpO1xcbiAgfSAvKiA0ICAgKiBBUkNTSVpFICovXFxufVxcbkBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcXG4gIDEyLjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTtcXG4gIH0gLyogMC41ICogQVJDU0laRSAqL1xcbiAgMjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG4gIH0gLyogMSAgICogQVJDU0laRSAqL1xcbiAgMzcuNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpO1xcbiAgfSAvKiAxLjUgKiBBUkNTSVpFICovXFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpO1xcbiAgfSAvKiAyICAgKiBBUkNTSVpFICovXFxuICA2Mi41JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDY3NWRlZyk7XFxuICB9IC8qIDIuNSAqIEFSQ1NJWkUgKi9cXG4gIDc1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZyk7XFxuICB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cXG4gIDg3LjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKTtcXG4gIH0gLyogMy41ICogQVJDU0laRSAqL1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTtcXG4gIH0gLyogNCAgICogQVJDU0laRSAqL1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgYmx1ZS1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAyNiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgODklIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBibHVlLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI2JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA4OSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmVkLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMTUlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNTElIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyByZWQtZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAxNSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgeWVsbG93LWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNzYlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyB5ZWxsb3ctZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA0MCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDc1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZ3JlZW4tZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA2NSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBncmVlbi1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDY1JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG4vKipcXG4gKiBQYXRjaCB0aGUgZ2FwIHRoYXQgYXBwZWFyIGJldHdlZW4gdGhlIHR3byBhZGphY2VudCBkaXYuY2lyY2xlLWNsaXBwZXIgd2hpbGUgdGhlXFxuICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgMzgsIFNhZmFyaSA3LjEsIGFuZCBJRSAxMSkuXFxuICovXFxuLmdhcC1wYXRjaCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA0NSU7XFxuICB3aWR0aDogMTAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuLmdhcC1wYXRjaCAuY2lyY2xlIHtcXG4gIHdpZHRoOiAxMDAwJTtcXG4gIGxlZnQ6IC00NTAlO1xcbn1cXG5cXG4uY2lyY2xlLWNsaXBwZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDUwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XFxufVxcbi5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYm9yZGVyLXdpZHRoOiAzcHg7IC8qIFNUUk9LRVdJRFRIICovXFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBub25lO1xcbiAgYW5pbWF0aW9uOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxufVxcbi5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XFxufVxcbi5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcXG4gIGxlZnQ6IC0xMDAlO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XFxufVxcblxcbi5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XFxuICAvKiBkdXJhdGlvbjogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGxlZnQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBsZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIucmlnaHQgLmNpcmNsZSB7XFxuICAvKiBkdXJhdGlvbjogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHJpZ2h0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHtcXG4gIGZyb20ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGxlZnQtc3BpbiB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbn1cXG4jc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7XFxuICAvKiBkdXJhdGlvbjogU0hSSU5LX1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGUtb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhZGUtb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG4ucHJvZ3Jlc3Mge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA0cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FjZWNlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucHJvZ3Jlc3MgLmRldGVybWluYXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5wcm9ncmVzcyAuaW5kZXRlcm1pbmF0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG4ucHJvZ3Jlc3MgLmluZGV0ZXJtaW5hdGU6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxuICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMi4xcyBjdWJpYy1iZXppZXIoMC42NSwgMC44MTUsIDAuNzM1LCAwLjM5NSkgaW5maW5pdGU7XFxufVxcbi5wcm9ncmVzcyAuaW5kZXRlcm1pbmF0ZTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IGxlZnQsIHJpZ2h0O1xcbiAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNob3J0IDIuMXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogMS4xNXM7XFxufVxcblxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0zNSU7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgNjAlIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gICAgcmlnaHQ6IC05MCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gICAgcmlnaHQ6IC05MCU7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zaG9ydCB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0yMDAlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTA3JTtcXG4gICAgcmlnaHQ6IC04JTtcXG4gIH1cXG59XFxuLmZsYXNoLW1lc3NhZ2Uge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcGFkZGluZzogMnB4IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICB6LWluZGV4OiA5OTk5OTtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4uZmxhc2gtbWVzc2FnZS5pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWRkYmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNzI4ZjcyO1xcbn1cXG4uZmxhc2gtbWVzc2FnZS53YXJuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWU2ZDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWE3ZDE3O1xcbn1cXG4uZmxhc2gtbWVzc2FnZS5lcnJvciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTViMmJjO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UzMzI1NztcXG59XFxuXFxuQGtleWZyYW1lcyBtZXNzYWdlSW4ge1xcbiAgZnJvbSB7XFxuICAgIHJpZ2h0OiA4MCU7XFxuICB9XFxuICB0byB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgfVxcbn1cXG4ucHVsc2Uge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5wdWxzZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcywgdHJhbnNmb3JtIDAuM3M7XFxuICBhbmltYXRpb246IHB1bHNlLWFuaW1hdGlvbiAxcyBjdWJpYy1iZXppZXIoMC4yNCwgMCwgMC4zOCwgMSkgaW5maW5pdGU7XFxufVxcblxcbkBrZXlmcmFtZXMgcHVsc2UtYW5pbWF0aW9uIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7XFxuICB9XFxufVxcbi5kcm9wZG93bi1jb250ZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBmbG93O1xcbiAgbWluLXdpZHRoOiAxMDBweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogOTk5OTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkge1xcbiAgY2xlYXI6IGJvdGg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1pbi1oZWlnaHQ6IDUwcHg7XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaTpob3ZlciwgLmRyb3Bkb3duLWNvbnRlbnQgbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpLmRpdmlkZXIge1xcbiAgbWluLWhlaWdodDogMDtcXG4gIGhlaWdodDogMXB4O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaSA+IGEsIC5kcm9wZG93bi1jb250ZW50IGxpID4gc3BhbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBjb2xvcjogIzI2YTY5YTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpID4gc3BhbiA+IGxhYmVsIHtcXG4gIHRvcDogMXB4O1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMThweDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkgPiBhID4gaSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWFyZ2luOiAwIDI0cHggMCAwO1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcblxcbmJvZHkua2V5Ym9hcmQtZm9jdXNlZCAuZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkYWRhO1xcbn1cXG5cXG4uaW5wdXQtZmllbGQuY29sIC5kcm9wZG93bi1jb250ZW50IFt0eXBlPWNoZWNrYm94XSArIGxhYmVsIHtcXG4gIHRvcDogMXB4O1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMThweDtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuLmRyb3Bkb3duLXRyaWdnZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5uYXYge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxubmF2Lm5hdi1leHRlbmRlZCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbm5hdi5uYXYtZXh0ZW5kZWQgLm5hdi13cmFwcGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIGhlaWdodDogYXV0bztcXG59XFxubmF2Lm5hdi1leHRlbmRlZCAubmF2LWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG59XFxubmF2IGEge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbm5hdiBpLFxcbm5hdiBbY2xhc3NePW1kaS1dLCBuYXYgW2NsYXNzKj1tZGktXSxcXG5uYXYgaS5zLWljb25zIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbm5hdiAubmF2LXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgbmF2IGEuc2lkZW5hdi10cmlnZ2VyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxubmF2IC5zaWRlbmF2LXRyaWdnZXIge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbWFyZ2luOiAwIDE4cHg7XFxufVxcbm5hdiAuc2lkZW5hdi10cmlnZ2VyIGkge1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbm5hdiAuYnJhbmQtbG9nbyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMi4xcmVtO1xcbiAgcGFkZGluZzogMDtcXG59XFxubmF2IC5icmFuZC1sb2dvIGltZy5jaXJjbGUge1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgd2lkdGg6IDMycHg7XFxufVxcbm5hdiAuYnJhbmQtbG9nby5jZW50ZXIge1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgbmF2IC5icmFuZC1sb2dvIHtcXG4gICAgbGVmdDogNTAlO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB9XFxuICBuYXYgLmJyYW5kLWxvZ28ubGVmdCwgbmF2IC5icmFuZC1sb2dvLnJpZ2h0IHtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgdHJhbnNmb3JtOiBub25lO1xcbiAgfVxcbiAgbmF2IC5icmFuZC1sb2dvLmxlZnQge1xcbiAgICBsZWZ0OiAwLjVyZW07XFxuICB9XFxuICBuYXYgLmJyYW5kLWxvZ28ucmlnaHQge1xcbiAgICByaWdodDogMC41cmVtO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5uYXYgLmJyYW5kLWxvZ28ucmlnaHQge1xcbiAgcmlnaHQ6IDAuNXJlbTtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbm5hdiAuYnJhbmQtbG9nbyBpLFxcbm5hdiAuYnJhbmQtbG9nbyBbY2xhc3NePW1kaS1dLCBuYXYgLmJyYW5kLWxvZ28gW2NsYXNzKj1tZGktXSxcXG5uYXYgLmJyYW5kLWxvZ28gaS5zLWljb25zIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbn1cXG5uYXYgLm5hdi10aXRsZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDMycHg7XFxuICBwYWRkaW5nOiAyOHB4IDA7XFxufVxcbm5hdiB1bCB7XFxuICBtYXJnaW46IDA7XFxufVxcbm5hdiB1bCBsaSB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxuICBmbG9hdDogbGVmdDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbm5hdiB1bCBsaS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5uYXYgdWwgYSB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5uYXYgdWwgYS5idG4sIG5hdiB1bCBhLmJ0bi1zbWFsbCwgbmF2IHVsIGEuYnRuLWxhcmdlLCBuYXYgdWwgYS5idG4tZmxhdCwgbmF2IHVsIGEuYnRuLWZsb2F0aW5nIHtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tbGVmdDogMTVweDtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxubmF2IHVsIGEuYnRuID4gLm1hdGVyaWFsLWljb25zLCBuYXYgdWwgYS5idG4tc21hbGwgPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1sYXJnZSA+IC5tYXRlcmlhbC1pY29ucywgbmF2IHVsIGEuYnRuLWZsYXQgPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1mbG9hdGluZyA+IC5tYXRlcmlhbC1pY29ucyB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxubmF2IHVsIGE6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5uYXYgdWwubGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxubmF2IGZvcm0ge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIHtcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBpbnB1dCB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHBhZGRpbmctbGVmdDogMnJlbTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBpbnB1dDpmb2N1cywgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXRleHRdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9cGFzc3dvcmRdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9ZW1haWxdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9dXJsXTp2YWxpZCwgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPWRhdGVdOnZhbGlkIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgbGFiZWwge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBsYWJlbCBpIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGxhYmVsLmFjdGl2ZSBpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWZpeGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNTZweDtcXG4gIHotaW5kZXg6IDk5NztcXG59XFxuLm5hdmJhci1maXhlZCBuYXYge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgbmF2Lm5hdi1leHRlbmRlZCAubmF2LXdyYXBwZXIge1xcbiAgICBtaW4taGVpZ2h0OiA2NHB4O1xcbiAgfVxcbiAgbmF2LCBuYXYgLm5hdi13cmFwcGVyIGksIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciwgbmF2IGEuc2lkZW5hdi10cmlnZ2VyIGkge1xcbiAgICBoZWlnaHQ6IDY0cHg7XFxuICAgIGxpbmUtaGVpZ2h0OiA2NHB4O1xcbiAgfVxcbiAgLm5hdmJhci1maXhlZCB7XFxuICAgIGhlaWdodDogNjRweDtcXG4gIH1cXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3Nhc3MvZDN2NHBwLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2ljb25zL1N3ZWV0Y29tSWNvbnMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2NvbG9ycy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fY29kZS1kYXJrLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL190ZXJtaW5hbC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fdG9vbHRpcC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fc2hhZG93cy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fd2F2ZXMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX21vZGFsLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19nbG9iYWwuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX3ZhcmlhYmxlcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fYmFkZ2VzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19jaGlwcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fY29sbGFwc2libGUuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2NvbGxlY3Rpb24uc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX2Zvcm1zLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19pbnB1dC1maWVsZHMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX3JhZGlvLWJ1dHRvbnMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX2NoZWNrYm94ZXMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX3N3aXRjaGVzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19zZWxlY3Quc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX2ZpbGUtaW5wdXQuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvZm9ybXMvX3JhbmdlLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19wYXJhbGF4LnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19jdWJlLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19ncmlkLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19zaWRlbmF2LnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19idXR0b25zLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL190YWJzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19sb2FkZXIuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2NhcmRzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19wcmVsb2FkZXIuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX3Byb2dyZXNzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19mbGFzaC1tZXNzYWdlLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19wdWxzZS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fZHJvcGRvd24uc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX25hdmJhci5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLGdCQUFnQjtBQ0FoQjtFQUNFLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLDRDQUFBO0VBQ0EsZ0xBQUE7QURHRjtBQ0tBOzs7O0VBSUUsbUNBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7RUFDQSxzQkFBQTtFQUNBLG9CQUFBO0VBQ0EscUJBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0EsY0FBQTtFQUNBLG1DQUFBO0VBQ0Esa0NBQUE7RUFDQSxrQ0FBQTtFQUNBLHFDQUFBO0VBQ0Esb0NBQUE7RUFDQSxrQ0FBQTtFQUNBLDZCQUFBO0VBQ0Esa0JBQUE7QURIRjs7QUUzQk07RUFDRSxvQ0FBQTtBRjhCUjs7QUU1Qk07RUFDRSx5QkFBQTtBRitCUjs7QUU3Qk07RUFDRSxvQ0FBQTtBRmdDUjs7QUU3Qk07RUFDRSxvQ0FBQTtBRmdDUjs7QUU5Qk07RUFDRSx5QkFBQTtBRmlDUjs7QUUvQk07RUFDRSxvQ0FBQTtBRmtDUjs7QUV6Q007RUFDRSxvQ0FBQTtBRjRDUjs7QUUxQ007RUFDRSx5QkFBQTtBRjZDUjs7QUUzQ007RUFDRSxvQ0FBQTtBRjhDUjs7QUVyRE07RUFDRSxvQ0FBQTtBRndEUjs7QUV0RE07RUFDRSx5QkFBQTtBRnlEUjs7QUV2RE07RUFDRSxvQ0FBQTtBRjBEUjs7QUVqRU07RUFDRSxvQ0FBQTtBRm9FUjs7QUVsRU07RUFDRSx5QkFBQTtBRnFFUjs7QUVuRU07RUFDRSxvQ0FBQTtBRnNFUjs7QUU3RU07RUFDRSxvQ0FBQTtBRmdGUjs7QUU5RU07RUFDRSx5QkFBQTtBRmlGUjs7QUUvRU07RUFDRSxvQ0FBQTtBRmtGUjs7QUV6Rk07RUFDRSxvQ0FBQTtBRjRGUjs7QUUxRk07RUFDRSx5QkFBQTtBRjZGUjs7QUUzRk07RUFDRSxvQ0FBQTtBRjhGUjs7QUVyR007RUFDRSxvQ0FBQTtBRndHUjs7QUV0R007RUFDRSx5QkFBQTtBRnlHUjs7QUV2R007RUFDRSxvQ0FBQTtBRjBHUjs7QUVqSE07RUFDRSxvQ0FBQTtBRm9IUjs7QUVsSE07RUFDRSx5QkFBQTtBRnFIUjs7QUVuSE07RUFDRSxvQ0FBQTtBRnNIUjs7QUU3SE07RUFDRSxvQ0FBQTtBRmdJUjs7QUU5SE07RUFDRSx5QkFBQTtBRmlJUjs7QUUvSE07RUFDRSxvQ0FBQTtBRmtJUjs7QUV6SU07RUFDRSxvQ0FBQTtBRjRJUjs7QUUxSU07RUFDRSx5QkFBQTtBRjZJUjs7QUUzSU07RUFDRSxvQ0FBQTtBRjhJUjs7QUVySk07RUFDRSxvQ0FBQTtBRndKUjs7QUV0Sk07RUFDRSx5QkFBQTtBRnlKUjs7QUV2Sk07RUFDRSxvQ0FBQTtBRjBKUjs7QUVqS007RUFDRSxvQ0FBQTtBRm9LUjs7QUVsS007RUFDRSx5QkFBQTtBRnFLUjs7QUVuS007RUFDRSxvQ0FBQTtBRnNLUjs7QUU3S007RUFDRSxvQ0FBQTtBRmdMUjs7QUU5S007RUFDRSx5QkFBQTtBRmlMUjs7QUUvS007RUFDRSxvQ0FBQTtBRmtMUjs7QUVuTU07RUFDRSxvQ0FBQTtBRnNNUjs7QUVwTU07RUFDRSx5QkFBQTtBRnVNUjs7QUVyTU07RUFDRSxvQ0FBQTtBRndNUjs7QUVyTU07RUFDRSxvQ0FBQTtBRndNUjs7QUV0TU07RUFDRSx5QkFBQTtBRnlNUjs7QUV2TU07RUFDRSxvQ0FBQTtBRjBNUjs7QUVqTk07RUFDRSxvQ0FBQTtBRm9OUjs7QUVsTk07RUFDRSx5QkFBQTtBRnFOUjs7QUVuTk07RUFDRSxvQ0FBQTtBRnNOUjs7QUU3Tk07RUFDRSxvQ0FBQTtBRmdPUjs7QUU5Tk07RUFDRSx5QkFBQTtBRmlPUjs7QUUvTk07RUFDRSxvQ0FBQTtBRmtPUjs7QUV6T007RUFDRSxvQ0FBQTtBRjRPUjs7QUUxT007RUFDRSx5QkFBQTtBRjZPUjs7QUUzT007RUFDRSxvQ0FBQTtBRjhPUjs7QUVyUE07RUFDRSxvQ0FBQTtBRndQUjs7QUV0UE07RUFDRSx5QkFBQTtBRnlQUjs7QUV2UE07RUFDRSxvQ0FBQTtBRjBQUjs7QUVqUU07RUFDRSxvQ0FBQTtBRm9RUjs7QUVsUU07RUFDRSx5QkFBQTtBRnFRUjs7QUVuUU07RUFDRSxvQ0FBQTtBRnNRUjs7QUU3UU07RUFDRSxvQ0FBQTtBRmdSUjs7QUU5UU07RUFDRSx5QkFBQTtBRmlSUjs7QUUvUU07RUFDRSxvQ0FBQTtBRmtSUjs7QUV6Uk07RUFDRSxvQ0FBQTtBRjRSUjs7QUUxUk07RUFDRSx5QkFBQTtBRjZSUjs7QUUzUk07RUFDRSxvQ0FBQTtBRjhSUjs7QUVyU007RUFDRSxvQ0FBQTtBRndTUjs7QUV0U007RUFDRSx5QkFBQTtBRnlTUjs7QUV2U007RUFDRSxvQ0FBQTtBRjBTUjs7QUVqVE07RUFDRSxvQ0FBQTtBRm9UUjs7QUVsVE07RUFDRSx5QkFBQTtBRnFUUjs7QUVuVE07RUFDRSxvQ0FBQTtBRnNUUjs7QUU3VE07RUFDRSxvQ0FBQTtBRmdVUjs7QUU5VE07RUFDRSx5QkFBQTtBRmlVUjs7QUUvVE07RUFDRSxvQ0FBQTtBRmtVUjs7QUV6VU07RUFDRSxvQ0FBQTtBRjRVUjs7QUUxVU07RUFDRSx5QkFBQTtBRjZVUjs7QUUzVU07RUFDRSxvQ0FBQTtBRjhVUjs7QUVyVk07RUFDRSxvQ0FBQTtBRndWUjs7QUV0Vk07RUFDRSx5QkFBQTtBRnlWUjs7QUV2Vk07RUFDRSxvQ0FBQTtBRjBWUjs7QUUzV007RUFDRSxvQ0FBQTtBRjhXUjs7QUU1V007RUFDRSx5QkFBQTtBRitXUjs7QUU3V007RUFDRSxvQ0FBQTtBRmdYUjs7QUU3V007RUFDRSxvQ0FBQTtBRmdYUjs7QUU5V007RUFDRSx5QkFBQTtBRmlYUjs7QUUvV007RUFDRSxvQ0FBQTtBRmtYUjs7QUV6WE07RUFDRSxvQ0FBQTtBRjRYUjs7QUUxWE07RUFDRSx5QkFBQTtBRjZYUjs7QUUzWE07RUFDRSxvQ0FBQTtBRjhYUjs7QUVyWU07RUFDRSxvQ0FBQTtBRndZUjs7QUV0WU07RUFDRSx5QkFBQTtBRnlZUjs7QUV2WU07RUFDRSxvQ0FBQTtBRjBZUjs7QUVqWk07RUFDRSxvQ0FBQTtBRm9aUjs7QUVsWk07RUFDRSx5QkFBQTtBRnFaUjs7QUVuWk07RUFDRSxvQ0FBQTtBRnNaUjs7QUU3Wk07RUFDRSxvQ0FBQTtBRmdhUjs7QUU5Wk07RUFDRSx5QkFBQTtBRmlhUjs7QUUvWk07RUFDRSxvQ0FBQTtBRmthUjs7QUV6YU07RUFDRSxvQ0FBQTtBRjRhUjs7QUUxYU07RUFDRSx5QkFBQTtBRjZhUjs7QUUzYU07RUFDRSxvQ0FBQTtBRjhhUjs7QUVyYk07RUFDRSxvQ0FBQTtBRndiUjs7QUV0Yk07RUFDRSx5QkFBQTtBRnliUjs7QUV2Yk07RUFDRSxvQ0FBQTtBRjBiUjs7QUVqY007RUFDRSxvQ0FBQTtBRm9jUjs7QUVsY007RUFDRSx5QkFBQTtBRnFjUjs7QUVuY007RUFDRSxvQ0FBQTtBRnNjUjs7QUU3Y007RUFDRSxvQ0FBQTtBRmdkUjs7QUU5Y007RUFDRSx5QkFBQTtBRmlkUjs7QUUvY007RUFDRSxvQ0FBQTtBRmtkUjs7QUV6ZE07RUFDRSxvQ0FBQTtBRjRkUjs7QUUxZE07RUFDRSx5QkFBQTtBRjZkUjs7QUUzZE07RUFDRSxvQ0FBQTtBRjhkUjs7QUVyZU07RUFDRSxvQ0FBQTtBRndlUjs7QUV0ZU07RUFDRSx5QkFBQTtBRnllUjs7QUV2ZU07RUFDRSxvQ0FBQTtBRjBlUjs7QUVqZk07RUFDRSxvQ0FBQTtBRm9mUjs7QUVsZk07RUFDRSx5QkFBQTtBRnFmUjs7QUVuZk07RUFDRSxvQ0FBQTtBRnNmUjs7QUU3Zk07RUFDRSxvQ0FBQTtBRmdnQlI7O0FFOWZNO0VBQ0UseUJBQUE7QUZpZ0JSOztBRS9mTTtFQUNFLG9DQUFBO0FGa2dCUjs7QUVuaEJNO0VBQ0Usb0NBQUE7QUZzaEJSOztBRXBoQk07RUFDRSx5QkFBQTtBRnVoQlI7O0FFcmhCTTtFQUNFLG9DQUFBO0FGd2hCUjs7QUVyaEJNO0VBQ0Usb0NBQUE7QUZ3aEJSOztBRXRoQk07RUFDRSx5QkFBQTtBRnloQlI7O0FFdmhCTTtFQUNFLG9DQUFBO0FGMGhCUjs7QUVqaUJNO0VBQ0Usb0NBQUE7QUZvaUJSOztBRWxpQk07RUFDRSx5QkFBQTtBRnFpQlI7O0FFbmlCTTtFQUNFLG9DQUFBO0FGc2lCUjs7QUU3aUJNO0VBQ0Usb0NBQUE7QUZnakJSOztBRTlpQk07RUFDRSx5QkFBQTtBRmlqQlI7O0FFL2lCTTtFQUNFLG9DQUFBO0FGa2pCUjs7QUV6akJNO0VBQ0Usb0NBQUE7QUY0akJSOztBRTFqQk07RUFDRSx5QkFBQTtBRjZqQlI7O0FFM2pCTTtFQUNFLG9DQUFBO0FGOGpCUjs7QUVya0JNO0VBQ0Usb0NBQUE7QUZ3a0JSOztBRXRrQk07RUFDRSx5QkFBQTtBRnlrQlI7O0FFdmtCTTtFQUNFLG9DQUFBO0FGMGtCUjs7QUVqbEJNO0VBQ0Usb0NBQUE7QUZvbEJSOztBRWxsQk07RUFDRSx5QkFBQTtBRnFsQlI7O0FFbmxCTTtFQUNFLG9DQUFBO0FGc2xCUjs7QUU3bEJNO0VBQ0Usb0NBQUE7QUZnbUJSOztBRTlsQk07RUFDRSx5QkFBQTtBRmltQlI7O0FFL2xCTTtFQUNFLG9DQUFBO0FGa21CUjs7QUV6bUJNO0VBQ0Usb0NBQUE7QUY0bUJSOztBRTFtQk07RUFDRSx5QkFBQTtBRjZtQlI7O0FFM21CTTtFQUNFLG9DQUFBO0FGOG1CUjs7QUVybkJNO0VBQ0Usb0NBQUE7QUZ3bkJSOztBRXRuQk07RUFDRSx5QkFBQTtBRnluQlI7O0FFdm5CTTtFQUNFLG9DQUFBO0FGMG5CUjs7QUVqb0JNO0VBQ0Usb0NBQUE7QUZvb0JSOztBRWxvQk07RUFDRSx5QkFBQTtBRnFvQlI7O0FFbm9CTTtFQUNFLG9DQUFBO0FGc29CUjs7QUU3b0JNO0VBQ0Usb0NBQUE7QUZncEJSOztBRTlvQk07RUFDRSx5QkFBQTtBRmlwQlI7O0FFL29CTTtFQUNFLG9DQUFBO0FGa3BCUjs7QUV6cEJNO0VBQ0Usb0NBQUE7QUY0cEJSOztBRTFwQk07RUFDRSx5QkFBQTtBRjZwQlI7O0FFM3BCTTtFQUNFLG9DQUFBO0FGOHBCUjs7QUVycUJNO0VBQ0Usb0NBQUE7QUZ3cUJSOztBRXRxQk07RUFDRSx5QkFBQTtBRnlxQlI7O0FFdnFCTTtFQUNFLG9DQUFBO0FGMHFCUjs7QUUzckJNO0VBQ0Usb0NBQUE7QUY4ckJSOztBRTVyQk07RUFDRSx5QkFBQTtBRityQlI7O0FFN3JCTTtFQUNFLG9DQUFBO0FGZ3NCUjs7QUU3ckJNO0VBQ0Usb0NBQUE7QUZnc0JSOztBRTlyQk07RUFDRSx5QkFBQTtBRmlzQlI7O0FFL3JCTTtFQUNFLG9DQUFBO0FGa3NCUjs7QUV6c0JNO0VBQ0Usb0NBQUE7QUY0c0JSOztBRTFzQk07RUFDRSx5QkFBQTtBRjZzQlI7O0FFM3NCTTtFQUNFLG9DQUFBO0FGOHNCUjs7QUVydEJNO0VBQ0Usb0NBQUE7QUZ3dEJSOztBRXR0Qk07RUFDRSx5QkFBQTtBRnl0QlI7O0FFdnRCTTtFQUNFLG9DQUFBO0FGMHRCUjs7QUVqdUJNO0VBQ0Usb0NBQUE7QUZvdUJSOztBRWx1Qk07RUFDRSx5QkFBQTtBRnF1QlI7O0FFbnVCTTtFQUNFLG9DQUFBO0FGc3VCUjs7QUU3dUJNO0VBQ0Usb0NBQUE7QUZndkJSOztBRTl1Qk07RUFDRSx5QkFBQTtBRml2QlI7O0FFL3VCTTtFQUNFLG9DQUFBO0FGa3ZCUjs7QUV6dkJNO0VBQ0Usb0NBQUE7QUY0dkJSOztBRTF2Qk07RUFDRSx5QkFBQTtBRjZ2QlI7O0FFM3ZCTTtFQUNFLG9DQUFBO0FGOHZCUjs7QUVyd0JNO0VBQ0Usb0NBQUE7QUZ3d0JSOztBRXR3Qk07RUFDRSx5QkFBQTtBRnl3QlI7O0FFdndCTTtFQUNFLG9DQUFBO0FGMHdCUjs7QUVqeEJNO0VBQ0Usb0NBQUE7QUZveEJSOztBRWx4Qk07RUFDRSx5QkFBQTtBRnF4QlI7O0FFbnhCTTtFQUNFLG9DQUFBO0FGc3hCUjs7QUU3eEJNO0VBQ0Usb0NBQUE7QUZneUJSOztBRTl4Qk07RUFDRSx5QkFBQTtBRml5QlI7O0FFL3hCTTtFQUNFLG9DQUFBO0FGa3lCUjs7QUV6eUJNO0VBQ0Usb0NBQUE7QUY0eUJSOztBRTF5Qk07RUFDRSx5QkFBQTtBRjZ5QlI7O0FFM3lCTTtFQUNFLG9DQUFBO0FGOHlCUjs7QUVyekJNO0VBQ0Usb0NBQUE7QUZ3ekJSOztBRXR6Qk07RUFDRSx5QkFBQTtBRnl6QlI7O0FFdnpCTTtFQUNFLG9DQUFBO0FGMHpCUjs7QUVqMEJNO0VBQ0Usb0NBQUE7QUZvMEJSOztBRWwwQk07RUFDRSx5QkFBQTtBRnEwQlI7O0FFbjBCTTtFQUNFLG9DQUFBO0FGczBCUjs7QUU3MEJNO0VBQ0Usb0NBQUE7QUZnMUJSOztBRTkwQk07RUFDRSx5QkFBQTtBRmkxQlI7O0FFLzBCTTtFQUNFLG9DQUFBO0FGazFCUjs7QUVuMkJNO0VBQ0Usb0NBQUE7QUZzMkJSOztBRXAyQk07RUFDRSx5QkFBQTtBRnUyQlI7O0FFcjJCTTtFQUNFLG9DQUFBO0FGdzJCUjs7QUVyMkJNO0VBQ0Usb0NBQUE7QUZ3MkJSOztBRXQyQk07RUFDRSx5QkFBQTtBRnkyQlI7O0FFdjJCTTtFQUNFLG9DQUFBO0FGMDJCUjs7QUVqM0JNO0VBQ0Usb0NBQUE7QUZvM0JSOztBRWwzQk07RUFDRSx5QkFBQTtBRnEzQlI7O0FFbjNCTTtFQUNFLG9DQUFBO0FGczNCUjs7QUU3M0JNO0VBQ0Usb0NBQUE7QUZnNEJSOztBRTkzQk07RUFDRSx5QkFBQTtBRmk0QlI7O0FFLzNCTTtFQUNFLG9DQUFBO0FGazRCUjs7QUV6NEJNO0VBQ0Usb0NBQUE7QUY0NEJSOztBRTE0Qk07RUFDRSx5QkFBQTtBRjY0QlI7O0FFMzRCTTtFQUNFLG9DQUFBO0FGODRCUjs7QUVyNUJNO0VBQ0Usb0NBQUE7QUZ3NUJSOztBRXQ1Qk07RUFDRSx5QkFBQTtBRnk1QlI7O0FFdjVCTTtFQUNFLG9DQUFBO0FGMDVCUjs7QUVqNkJNO0VBQ0Usb0NBQUE7QUZvNkJSOztBRWw2Qk07RUFDRSx5QkFBQTtBRnE2QlI7O0FFbjZCTTtFQUNFLG9DQUFBO0FGczZCUjs7QUU3NkJNO0VBQ0Usb0NBQUE7QUZnN0JSOztBRTk2Qk07RUFDRSx5QkFBQTtBRmk3QlI7O0FFLzZCTTtFQUNFLG9DQUFBO0FGazdCUjs7QUV6N0JNO0VBQ0Usb0NBQUE7QUY0N0JSOztBRTE3Qk07RUFDRSx5QkFBQTtBRjY3QlI7O0FFMzdCTTtFQUNFLG9DQUFBO0FGODdCUjs7QUVyOEJNO0VBQ0Usb0NBQUE7QUZ3OEJSOztBRXQ4Qk07RUFDRSx5QkFBQTtBRnk4QlI7O0FFdjhCTTtFQUNFLG9DQUFBO0FGMDhCUjs7QUVqOUJNO0VBQ0Usb0NBQUE7QUZvOUJSOztBRWw5Qk07RUFDRSx5QkFBQTtBRnE5QlI7O0FFbjlCTTtFQUNFLG9DQUFBO0FGczlCUjs7QUU3OUJNO0VBQ0Usb0NBQUE7QUZnK0JSOztBRTk5Qk07RUFDRSx5QkFBQTtBRmkrQlI7O0FFLzlCTTtFQUNFLG9DQUFBO0FGaytCUjs7QUV6K0JNO0VBQ0Usb0NBQUE7QUY0K0JSOztBRTErQk07RUFDRSx5QkFBQTtBRjYrQlI7O0FFMytCTTtFQUNFLG9DQUFBO0FGOCtCUjs7QUVyL0JNO0VBQ0Usb0NBQUE7QUZ3L0JSOztBRXQvQk07RUFDRSx5QkFBQTtBRnkvQlI7O0FFdi9CTTtFQUNFLG9DQUFBO0FGMC9CUjs7QUUzZ0NNO0VBQ0Usb0NBQUE7QUY4Z0NSOztBRTVnQ007RUFDRSx5QkFBQTtBRitnQ1I7O0FFN2dDTTtFQUNFLG9DQUFBO0FGZ2hDUjs7QUU3Z0NNO0VBQ0Usb0NBQUE7QUZnaENSOztBRTlnQ007RUFDRSx5QkFBQTtBRmloQ1I7O0FFL2dDTTtFQUNFLG9DQUFBO0FGa2hDUjs7QUV6aENNO0VBQ0Usb0NBQUE7QUY0aENSOztBRTFoQ007RUFDRSx5QkFBQTtBRjZoQ1I7O0FFM2hDTTtFQUNFLG9DQUFBO0FGOGhDUjs7QUVyaUNNO0VBQ0Usb0NBQUE7QUZ3aUNSOztBRXRpQ007RUFDRSx5QkFBQTtBRnlpQ1I7O0FFdmlDTTtFQUNFLG9DQUFBO0FGMGlDUjs7QUVqakNNO0VBQ0Usb0NBQUE7QUZvakNSOztBRWxqQ007RUFDRSx5QkFBQTtBRnFqQ1I7O0FFbmpDTTtFQUNFLG9DQUFBO0FGc2pDUjs7QUU3akNNO0VBQ0Usb0NBQUE7QUZna0NSOztBRTlqQ007RUFDRSx5QkFBQTtBRmlrQ1I7O0FFL2pDTTtFQUNFLG9DQUFBO0FGa2tDUjs7QUV6a0NNO0VBQ0Usb0NBQUE7QUY0a0NSOztBRTFrQ007RUFDRSx5QkFBQTtBRjZrQ1I7O0FFM2tDTTtFQUNFLG9DQUFBO0FGOGtDUjs7QUVybENNO0VBQ0Usb0NBQUE7QUZ3bENSOztBRXRsQ007RUFDRSx5QkFBQTtBRnlsQ1I7O0FFdmxDTTtFQUNFLG9DQUFBO0FGMGxDUjs7QUVqbUNNO0VBQ0Usb0NBQUE7QUZvbUNSOztBRWxtQ007RUFDRSx5QkFBQTtBRnFtQ1I7O0FFbm1DTTtFQUNFLG9DQUFBO0FGc21DUjs7QUU3bUNNO0VBQ0Usb0NBQUE7QUZnbkNSOztBRTltQ007RUFDRSx5QkFBQTtBRmluQ1I7O0FFL21DTTtFQUNFLG9DQUFBO0FGa25DUjs7QUV6bkNNO0VBQ0Usb0NBQUE7QUY0bkNSOztBRTFuQ007RUFDRSx5QkFBQTtBRjZuQ1I7O0FFM25DTTtFQUNFLG9DQUFBO0FGOG5DUjs7QUVyb0NNO0VBQ0Usb0NBQUE7QUZ3b0NSOztBRXRvQ007RUFDRSx5QkFBQTtBRnlvQ1I7O0FFdm9DTTtFQUNFLG9DQUFBO0FGMG9DUjs7QUVqcENNO0VBQ0Usb0NBQUE7QUZvcENSOztBRWxwQ007RUFDRSx5QkFBQTtBRnFwQ1I7O0FFbnBDTTtFQUNFLG9DQUFBO0FGc3BDUjs7QUU3cENNO0VBQ0Usb0NBQUE7QUZncUNSOztBRTlwQ007RUFDRSx5QkFBQTtBRmlxQ1I7O0FFL3BDTTtFQUNFLG9DQUFBO0FGa3FDUjs7QUVuckNNO0VBQ0Usb0NBQUE7QUZzckNSOztBRXByQ007RUFDRSx5QkFBQTtBRnVyQ1I7O0FFcnJDTTtFQUNFLG9DQUFBO0FGd3JDUjs7QUVyckNNO0VBQ0Usb0NBQUE7QUZ3ckNSOztBRXRyQ007RUFDRSx5QkFBQTtBRnlyQ1I7O0FFdnJDTTtFQUNFLG9DQUFBO0FGMHJDUjs7QUVqc0NNO0VBQ0Usb0NBQUE7QUZvc0NSOztBRWxzQ007RUFDRSx5QkFBQTtBRnFzQ1I7O0FFbnNDTTtFQUNFLG9DQUFBO0FGc3NDUjs7QUU3c0NNO0VBQ0Usb0NBQUE7QUZndENSOztBRTlzQ007RUFDRSx5QkFBQTtBRml0Q1I7O0FFL3NDTTtFQUNFLG9DQUFBO0FGa3RDUjs7QUV6dENNO0VBQ0Usb0NBQUE7QUY0dENSOztBRTF0Q007RUFDRSx5QkFBQTtBRjZ0Q1I7O0FFM3RDTTtFQUNFLG9DQUFBO0FGOHRDUjs7QUVydUNNO0VBQ0Usb0NBQUE7QUZ3dUNSOztBRXR1Q007RUFDRSx5QkFBQTtBRnl1Q1I7O0FFdnVDTTtFQUNFLG9DQUFBO0FGMHVDUjs7QUVqdkNNO0VBQ0Usb0NBQUE7QUZvdkNSOztBRWx2Q007RUFDRSx5QkFBQTtBRnF2Q1I7O0FFbnZDTTtFQUNFLG9DQUFBO0FGc3ZDUjs7QUU3dkNNO0VBQ0Usb0NBQUE7QUZnd0NSOztBRTl2Q007RUFDRSx5QkFBQTtBRml3Q1I7O0FFL3ZDTTtFQUNFLG9DQUFBO0FGa3dDUjs7QUV6d0NNO0VBQ0Usb0NBQUE7QUY0d0NSOztBRTF3Q007RUFDRSx5QkFBQTtBRjZ3Q1I7O0FFM3dDTTtFQUNFLG9DQUFBO0FGOHdDUjs7QUVyeENNO0VBQ0Usb0NBQUE7QUZ3eENSOztBRXR4Q007RUFDRSx5QkFBQTtBRnl4Q1I7O0FFdnhDTTtFQUNFLG9DQUFBO0FGMHhDUjs7QUVqeUNNO0VBQ0Usb0NBQUE7QUZveUNSOztBRWx5Q007RUFDRSx5QkFBQTtBRnF5Q1I7O0FFbnlDTTtFQUNFLG9DQUFBO0FGc3lDUjs7QUU3eUNNO0VBQ0Usb0NBQUE7QUZnekNSOztBRTl5Q007RUFDRSx5QkFBQTtBRml6Q1I7O0FFL3lDTTtFQUNFLG9DQUFBO0FGa3pDUjs7QUV6ekNNO0VBQ0Usb0NBQUE7QUY0ekNSOztBRTF6Q007RUFDRSx5QkFBQTtBRjZ6Q1I7O0FFM3pDTTtFQUNFLG9DQUFBO0FGOHpDUjs7QUVyMENNO0VBQ0Usb0NBQUE7QUZ3MENSOztBRXQwQ007RUFDRSx5QkFBQTtBRnkwQ1I7O0FFdjBDTTtFQUNFLG9DQUFBO0FGMDBDUjs7QUUzMUNNO0VBQ0Usb0NBQUE7QUY4MUNSOztBRTUxQ007RUFDRSx5QkFBQTtBRisxQ1I7O0FFNzFDTTtFQUNFLG9DQUFBO0FGZzJDUjs7QUU3MUNNO0VBQ0Usb0NBQUE7QUZnMkNSOztBRTkxQ007RUFDRSx5QkFBQTtBRmkyQ1I7O0FFLzFDTTtFQUNFLG9DQUFBO0FGazJDUjs7QUV6MkNNO0VBQ0Usb0NBQUE7QUY0MkNSOztBRTEyQ007RUFDRSx5QkFBQTtBRjYyQ1I7O0FFMzJDTTtFQUNFLG9DQUFBO0FGODJDUjs7QUVyM0NNO0VBQ0Usb0NBQUE7QUZ3M0NSOztBRXQzQ007RUFDRSx5QkFBQTtBRnkzQ1I7O0FFdjNDTTtFQUNFLG9DQUFBO0FGMDNDUjs7QUVqNENNO0VBQ0Usb0NBQUE7QUZvNENSOztBRWw0Q007RUFDRSx5QkFBQTtBRnE0Q1I7O0FFbjRDTTtFQUNFLG9DQUFBO0FGczRDUjs7QUU3NENNO0VBQ0Usb0NBQUE7QUZnNUNSOztBRTk0Q007RUFDRSx5QkFBQTtBRmk1Q1I7O0FFLzRDTTtFQUNFLG9DQUFBO0FGazVDUjs7QUV6NUNNO0VBQ0Usb0NBQUE7QUY0NUNSOztBRTE1Q007RUFDRSx5QkFBQTtBRjY1Q1I7O0FFMzVDTTtFQUNFLG9DQUFBO0FGODVDUjs7QUVyNkNNO0VBQ0Usb0NBQUE7QUZ3NkNSOztBRXQ2Q007RUFDRSx5QkFBQTtBRnk2Q1I7O0FFdjZDTTtFQUNFLG9DQUFBO0FGMDZDUjs7QUVqN0NNO0VBQ0Usb0NBQUE7QUZvN0NSOztBRWw3Q007RUFDRSx5QkFBQTtBRnE3Q1I7O0FFbjdDTTtFQUNFLG9DQUFBO0FGczdDUjs7QUU3N0NNO0VBQ0Usb0NBQUE7QUZnOENSOztBRTk3Q007RUFDRSx5QkFBQTtBRmk4Q1I7O0FFLzdDTTtFQUNFLG9DQUFBO0FGazhDUjs7QUV6OENNO0VBQ0Usb0NBQUE7QUY0OENSOztBRTE4Q007RUFDRSx5QkFBQTtBRjY4Q1I7O0FFMzhDTTtFQUNFLG9DQUFBO0FGODhDUjs7QUVyOUNNO0VBQ0Usb0NBQUE7QUZ3OUNSOztBRXQ5Q007RUFDRSx5QkFBQTtBRnk5Q1I7O0FFdjlDTTtFQUNFLG9DQUFBO0FGMDlDUjs7QUVqK0NNO0VBQ0Usb0NBQUE7QUZvK0NSOztBRWwrQ007RUFDRSx5QkFBQTtBRnErQ1I7O0FFbitDTTtFQUNFLG9DQUFBO0FGcytDUjs7QUU3K0NNO0VBQ0Usb0NBQUE7QUZnL0NSOztBRTkrQ007RUFDRSx5QkFBQTtBRmkvQ1I7O0FFLytDTTtFQUNFLG9DQUFBO0FGay9DUjs7QUVuZ0RNO0VBQ0Usb0NBQUE7QUZzZ0RSOztBRXBnRE07RUFDRSx5QkFBQTtBRnVnRFI7O0FFcmdETTtFQUNFLG9DQUFBO0FGd2dEUjs7QUVyZ0RNO0VBQ0Usb0NBQUE7QUZ3Z0RSOztBRXRnRE07RUFDRSx5QkFBQTtBRnlnRFI7O0FFdmdETTtFQUNFLG9DQUFBO0FGMGdEUjs7QUVqaERNO0VBQ0Usb0NBQUE7QUZvaERSOztBRWxoRE07RUFDRSx5QkFBQTtBRnFoRFI7O0FFbmhETTtFQUNFLG9DQUFBO0FGc2hEUjs7QUU3aERNO0VBQ0Usb0NBQUE7QUZnaURSOztBRTloRE07RUFDRSx5QkFBQTtBRmlpRFI7O0FFL2hETTtFQUNFLG9DQUFBO0FGa2lEUjs7QUV6aURNO0VBQ0Usb0NBQUE7QUY0aURSOztBRTFpRE07RUFDRSx5QkFBQTtBRjZpRFI7O0FFM2lETTtFQUNFLG9DQUFBO0FGOGlEUjs7QUVyakRNO0VBQ0Usb0NBQUE7QUZ3akRSOztBRXRqRE07RUFDRSx5QkFBQTtBRnlqRFI7O0FFdmpETTtFQUNFLG9DQUFBO0FGMGpEUjs7QUVqa0RNO0VBQ0Usb0NBQUE7QUZva0RSOztBRWxrRE07RUFDRSx5QkFBQTtBRnFrRFI7O0FFbmtETTtFQUNFLG9DQUFBO0FGc2tEUjs7QUU3a0RNO0VBQ0Usb0NBQUE7QUZnbERSOztBRTlrRE07RUFDRSx5QkFBQTtBRmlsRFI7O0FFL2tETTtFQUNFLG9DQUFBO0FGa2xEUjs7QUV6bERNO0VBQ0Usb0NBQUE7QUY0bERSOztBRTFsRE07RUFDRSx5QkFBQTtBRjZsRFI7O0FFM2xETTtFQUNFLG9DQUFBO0FGOGxEUjs7QUVybURNO0VBQ0Usb0NBQUE7QUZ3bURSOztBRXRtRE07RUFDRSx5QkFBQTtBRnltRFI7O0FFdm1ETTtFQUNFLG9DQUFBO0FGMG1EUjs7QUVqbkRNO0VBQ0Usb0NBQUE7QUZvbkRSOztBRWxuRE07RUFDRSx5QkFBQTtBRnFuRFI7O0FFbm5ETTtFQUNFLG9DQUFBO0FGc25EUjs7QUU3bkRNO0VBQ0Usb0NBQUE7QUZnb0RSOztBRTluRE07RUFDRSx5QkFBQTtBRmlvRFI7O0FFL25ETTtFQUNFLG9DQUFBO0FGa29EUjs7QUV6b0RNO0VBQ0Usb0NBQUE7QUY0b0RSOztBRTFvRE07RUFDRSx5QkFBQTtBRjZvRFI7O0FFM29ETTtFQUNFLG9DQUFBO0FGOG9EUjs7QUVycERNO0VBQ0Usb0NBQUE7QUZ3cERSOztBRXRwRE07RUFDRSx5QkFBQTtBRnlwRFI7O0FFdnBETTtFQUNFLG9DQUFBO0FGMHBEUjs7QUUzcURNO0VBQ0Usb0NBQUE7QUY4cURSOztBRTVxRE07RUFDRSx5QkFBQTtBRitxRFI7O0FFN3FETTtFQUNFLG9DQUFBO0FGZ3JEUjs7QUU3cURNO0VBQ0Usb0NBQUE7QUZnckRSOztBRTlxRE07RUFDRSx5QkFBQTtBRmlyRFI7O0FFL3FETTtFQUNFLG9DQUFBO0FGa3JEUjs7QUV6ckRNO0VBQ0Usb0NBQUE7QUY0ckRSOztBRTFyRE07RUFDRSx5QkFBQTtBRjZyRFI7O0FFM3JETTtFQUNFLG9DQUFBO0FGOHJEUjs7QUVyc0RNO0VBQ0Usb0NBQUE7QUZ3c0RSOztBRXRzRE07RUFDRSx5QkFBQTtBRnlzRFI7O0FFdnNETTtFQUNFLG9DQUFBO0FGMHNEUjs7QUVqdERNO0VBQ0Usb0NBQUE7QUZvdERSOztBRWx0RE07RUFDRSx5QkFBQTtBRnF0RFI7O0FFbnRETTtFQUNFLG9DQUFBO0FGc3REUjs7QUU3dERNO0VBQ0Usb0NBQUE7QUZndURSOztBRTl0RE07RUFDRSx5QkFBQTtBRml1RFI7O0FFL3RETTtFQUNFLG9DQUFBO0FGa3VEUjs7QUV6dURNO0VBQ0Usb0NBQUE7QUY0dURSOztBRTF1RE07RUFDRSx5QkFBQTtBRjZ1RFI7O0FFM3VETTtFQUNFLG9DQUFBO0FGOHVEUjs7QUVydkRNO0VBQ0Usb0NBQUE7QUZ3dkRSOztBRXR2RE07RUFDRSx5QkFBQTtBRnl2RFI7O0FFdnZETTtFQUNFLG9DQUFBO0FGMHZEUjs7QUVqd0RNO0VBQ0Usb0NBQUE7QUZvd0RSOztBRWx3RE07RUFDRSx5QkFBQTtBRnF3RFI7O0FFbndETTtFQUNFLG9DQUFBO0FGc3dEUjs7QUU3d0RNO0VBQ0Usb0NBQUE7QUZneERSOztBRTl3RE07RUFDRSx5QkFBQTtBRml4RFI7O0FFL3dETTtFQUNFLG9DQUFBO0FGa3hEUjs7QUV6eERNO0VBQ0Usb0NBQUE7QUY0eERSOztBRTF4RE07RUFDRSx5QkFBQTtBRjZ4RFI7O0FFM3hETTtFQUNFLG9DQUFBO0FGOHhEUjs7QUVyeURNO0VBQ0Usb0NBQUE7QUZ3eURSOztBRXR5RE07RUFDRSx5QkFBQTtBRnl5RFI7O0FFdnlETTtFQUNFLG9DQUFBO0FGMHlEUjs7QUVqekRNO0VBQ0Usb0NBQUE7QUZvekRSOztBRWx6RE07RUFDRSx5QkFBQTtBRnF6RFI7O0FFbnpETTtFQUNFLG9DQUFBO0FGc3pEUjs7QUU3ekRNO0VBQ0Usb0NBQUE7QUZnMERSOztBRTl6RE07RUFDRSx5QkFBQTtBRmkwRFI7O0FFL3pETTtFQUNFLG9DQUFBO0FGazBEUjs7QUVuMURNO0VBQ0Usb0NBQUE7QUZzMURSOztBRXAxRE07RUFDRSx5QkFBQTtBRnUxRFI7O0FFcjFETTtFQUNFLG9DQUFBO0FGdzFEUjs7QUVyMURNO0VBQ0Usb0NBQUE7QUZ3MURSOztBRXQxRE07RUFDRSx5QkFBQTtBRnkxRFI7O0FFdjFETTtFQUNFLG9DQUFBO0FGMDFEUjs7QUVqMkRNO0VBQ0Usb0NBQUE7QUZvMkRSOztBRWwyRE07RUFDRSx5QkFBQTtBRnEyRFI7O0FFbjJETTtFQUNFLG9DQUFBO0FGczJEUjs7QUU3MkRNO0VBQ0Usb0NBQUE7QUZnM0RSOztBRTkyRE07RUFDRSx5QkFBQTtBRmkzRFI7O0FFLzJETTtFQUNFLG9DQUFBO0FGazNEUjs7QUV6M0RNO0VBQ0Usb0NBQUE7QUY0M0RSOztBRTEzRE07RUFDRSx5QkFBQTtBRjYzRFI7O0FFMzNETTtFQUNFLG9DQUFBO0FGODNEUjs7QUVyNERNO0VBQ0Usb0NBQUE7QUZ3NERSOztBRXQ0RE07RUFDRSx5QkFBQTtBRnk0RFI7O0FFdjRETTtFQUNFLG9DQUFBO0FGMDREUjs7QUVqNURNO0VBQ0Usb0NBQUE7QUZvNURSOztBRWw1RE07RUFDRSx5QkFBQTtBRnE1RFI7O0FFbjVETTtFQUNFLG9DQUFBO0FGczVEUjs7QUU3NURNO0VBQ0Usb0NBQUE7QUZnNkRSOztBRTk1RE07RUFDRSx5QkFBQTtBRmk2RFI7O0FFLzVETTtFQUNFLG9DQUFBO0FGazZEUjs7QUV6NkRNO0VBQ0Usb0NBQUE7QUY0NkRSOztBRTE2RE07RUFDRSx5QkFBQTtBRjY2RFI7O0FFMzZETTtFQUNFLG9DQUFBO0FGODZEUjs7QUVyN0RNO0VBQ0Usb0NBQUE7QUZ3N0RSOztBRXQ3RE07RUFDRSx5QkFBQTtBRnk3RFI7O0FFdjdETTtFQUNFLG9DQUFBO0FGMDdEUjs7QUVqOERNO0VBQ0Usb0NBQUE7QUZvOERSOztBRWw4RE07RUFDRSx5QkFBQTtBRnE4RFI7O0FFbjhETTtFQUNFLG9DQUFBO0FGczhEUjs7QUU3OERNO0VBQ0Usb0NBQUE7QUZnOURSOztBRTk4RE07RUFDRSx5QkFBQTtBRmk5RFI7O0FFLzhETTtFQUNFLG9DQUFBO0FGazlEUjs7QUV6OURNO0VBQ0Usb0NBQUE7QUY0OURSOztBRTE5RE07RUFDRSx5QkFBQTtBRjY5RFI7O0FFMzlETTtFQUNFLG9DQUFBO0FGODlEUjs7QUVyK0RNO0VBQ0Usb0NBQUE7QUZ3K0RSOztBRXQrRE07RUFDRSx5QkFBQTtBRnkrRFI7O0FFditETTtFQUNFLG9DQUFBO0FGMCtEUjs7QUUzL0RNO0VBQ0Usb0NBQUE7QUY4L0RSOztBRTUvRE07RUFDRSx5QkFBQTtBRisvRFI7O0FFNy9ETTtFQUNFLG9DQUFBO0FGZ2dFUjs7QUU3L0RNO0VBQ0Usb0NBQUE7QUZnZ0VSOztBRTkvRE07RUFDRSx5QkFBQTtBRmlnRVI7O0FFLy9ETTtFQUNFLG9DQUFBO0FGa2dFUjs7QUV6Z0VNO0VBQ0Usb0NBQUE7QUY0Z0VSOztBRTFnRU07RUFDRSx5QkFBQTtBRjZnRVI7O0FFM2dFTTtFQUNFLG9DQUFBO0FGOGdFUjs7QUVyaEVNO0VBQ0Usb0NBQUE7QUZ3aEVSOztBRXRoRU07RUFDRSx5QkFBQTtBRnloRVI7O0FFdmhFTTtFQUNFLG9DQUFBO0FGMGhFUjs7QUVqaUVNO0VBQ0Usb0NBQUE7QUZvaUVSOztBRWxpRU07RUFDRSx5QkFBQTtBRnFpRVI7O0FFbmlFTTtFQUNFLG9DQUFBO0FGc2lFUjs7QUU3aUVNO0VBQ0Usb0NBQUE7QUZnakVSOztBRTlpRU07RUFDRSx5QkFBQTtBRmlqRVI7O0FFL2lFTTtFQUNFLG9DQUFBO0FGa2pFUjs7QUV6akVNO0VBQ0Usb0NBQUE7QUY0akVSOztBRTFqRU07RUFDRSx5QkFBQTtBRjZqRVI7O0FFM2pFTTtFQUNFLG9DQUFBO0FGOGpFUjs7QUVya0VNO0VBQ0Usb0NBQUE7QUZ3a0VSOztBRXRrRU07RUFDRSx5QkFBQTtBRnlrRVI7O0FFdmtFTTtFQUNFLG9DQUFBO0FGMGtFUjs7QUVqbEVNO0VBQ0Usb0NBQUE7QUZvbEVSOztBRWxsRU07RUFDRSx5QkFBQTtBRnFsRVI7O0FFbmxFTTtFQUNFLG9DQUFBO0FGc2xFUjs7QUU3bEVNO0VBQ0Usb0NBQUE7QUZnbUVSOztBRTlsRU07RUFDRSx5QkFBQTtBRmltRVI7O0FFL2xFTTtFQUNFLG9DQUFBO0FGa21FUjs7QUV6bUVNO0VBQ0Usb0NBQUE7QUY0bUVSOztBRTFtRU07RUFDRSx5QkFBQTtBRjZtRVI7O0FFM21FTTtFQUNFLG9DQUFBO0FGOG1FUjs7QUVybkVNO0VBQ0Usb0NBQUE7QUZ3bkVSOztBRXRuRU07RUFDRSx5QkFBQTtBRnluRVI7O0FFdm5FTTtFQUNFLG9DQUFBO0FGMG5FUjs7QUVqb0VNO0VBQ0Usb0NBQUE7QUZvb0VSOztBRWxvRU07RUFDRSx5QkFBQTtBRnFvRVI7O0FFbm9FTTtFQUNFLG9DQUFBO0FGc29FUjs7QUU3b0VNO0VBQ0Usb0NBQUE7QUZncEVSOztBRTlvRU07RUFDRSx5QkFBQTtBRmlwRVI7O0FFL29FTTtFQUNFLG9DQUFBO0FGa3BFUjs7QUVucUVNO0VBQ0Usb0NBQUE7QUZzcUVSOztBRXBxRU07RUFDRSx5QkFBQTtBRnVxRVI7O0FFcnFFTTtFQUNFLG9DQUFBO0FGd3FFUjs7QUVycUVNO0VBQ0Usb0NBQUE7QUZ3cUVSOztBRXRxRU07RUFDRSx5QkFBQTtBRnlxRVI7O0FFdnFFTTtFQUNFLG9DQUFBO0FGMHFFUjs7QUVqckVNO0VBQ0Usb0NBQUE7QUZvckVSOztBRWxyRU07RUFDRSx5QkFBQTtBRnFyRVI7O0FFbnJFTTtFQUNFLG9DQUFBO0FGc3JFUjs7QUU3ckVNO0VBQ0Usb0NBQUE7QUZnc0VSOztBRTlyRU07RUFDRSx5QkFBQTtBRmlzRVI7O0FFL3JFTTtFQUNFLG9DQUFBO0FGa3NFUjs7QUV6c0VNO0VBQ0Usb0NBQUE7QUY0c0VSOztBRTFzRU07RUFDRSx5QkFBQTtBRjZzRVI7O0FFM3NFTTtFQUNFLG9DQUFBO0FGOHNFUjs7QUVydEVNO0VBQ0Usb0NBQUE7QUZ3dEVSOztBRXR0RU07RUFDRSx5QkFBQTtBRnl0RVI7O0FFdnRFTTtFQUNFLG9DQUFBO0FGMHRFUjs7QUVqdUVNO0VBQ0Usb0NBQUE7QUZvdUVSOztBRWx1RU07RUFDRSx5QkFBQTtBRnF1RVI7O0FFbnVFTTtFQUNFLG9DQUFBO0FGc3VFUjs7QUU3dUVNO0VBQ0Usb0NBQUE7QUZndkVSOztBRTl1RU07RUFDRSx5QkFBQTtBRml2RVI7O0FFL3VFTTtFQUNFLG9DQUFBO0FGa3ZFUjs7QUV6dkVNO0VBQ0Usb0NBQUE7QUY0dkVSOztBRTF2RU07RUFDRSx5QkFBQTtBRjZ2RVI7O0FFM3ZFTTtFQUNFLG9DQUFBO0FGOHZFUjs7QUVyd0VNO0VBQ0Usb0NBQUE7QUZ3d0VSOztBRXR3RU07RUFDRSx5QkFBQTtBRnl3RVI7O0FFdndFTTtFQUNFLG9DQUFBO0FGMHdFUjs7QUVqeEVNO0VBQ0Usb0NBQUE7QUZveEVSOztBRWx4RU07RUFDRSx5QkFBQTtBRnF4RVI7O0FFbnhFTTtFQUNFLG9DQUFBO0FGc3hFUjs7QUU3eEVNO0VBQ0Usb0NBQUE7QUZneUVSOztBRTl4RU07RUFDRSx5QkFBQTtBRml5RVI7O0FFL3hFTTtFQUNFLG9DQUFBO0FGa3lFUjs7QUV6eUVNO0VBQ0Usb0NBQUE7QUY0eUVSOztBRTF5RU07RUFDRSx5QkFBQTtBRjZ5RVI7O0FFM3lFTTtFQUNFLG9DQUFBO0FGOHlFUjs7QUVyekVNO0VBQ0Usb0NBQUE7QUZ3ekVSOztBRXR6RU07RUFDRSx5QkFBQTtBRnl6RVI7O0FFdnpFTTtFQUNFLG9DQUFBO0FGMHpFUjs7QUUzMEVNO0VBQ0Usb0NBQUE7QUY4MEVSOztBRTUwRU07RUFDRSx5QkFBQTtBRiswRVI7O0FFNzBFTTtFQUNFLG9DQUFBO0FGZzFFUjs7QUU3MEVNO0VBQ0Usb0NBQUE7QUZnMUVSOztBRTkwRU07RUFDRSx5QkFBQTtBRmkxRVI7O0FFLzBFTTtFQUNFLG9DQUFBO0FGazFFUjs7QUV6MUVNO0VBQ0Usb0NBQUE7QUY0MUVSOztBRTExRU07RUFDRSx5QkFBQTtBRjYxRVI7O0FFMzFFTTtFQUNFLG9DQUFBO0FGODFFUjs7QUVyMkVNO0VBQ0Usb0NBQUE7QUZ3MkVSOztBRXQyRU07RUFDRSx5QkFBQTtBRnkyRVI7O0FFdjJFTTtFQUNFLG9DQUFBO0FGMDJFUjs7QUVqM0VNO0VBQ0Usb0NBQUE7QUZvM0VSOztBRWwzRU07RUFDRSx5QkFBQTtBRnEzRVI7O0FFbjNFTTtFQUNFLG9DQUFBO0FGczNFUjs7QUU3M0VNO0VBQ0Usb0NBQUE7QUZnNEVSOztBRTkzRU07RUFDRSx5QkFBQTtBRmk0RVI7O0FFLzNFTTtFQUNFLG9DQUFBO0FGazRFUjs7QUV6NEVNO0VBQ0Usb0NBQUE7QUY0NEVSOztBRTE0RU07RUFDRSx5QkFBQTtBRjY0RVI7O0FFMzRFTTtFQUNFLG9DQUFBO0FGODRFUjs7QUVyNUVNO0VBQ0Usb0NBQUE7QUZ3NUVSOztBRXQ1RU07RUFDRSx5QkFBQTtBRnk1RVI7O0FFdjVFTTtFQUNFLG9DQUFBO0FGMDVFUjs7QUVqNkVNO0VBQ0Usb0NBQUE7QUZvNkVSOztBRWw2RU07RUFDRSx5QkFBQTtBRnE2RVI7O0FFbjZFTTtFQUNFLG9DQUFBO0FGczZFUjs7QUU3NkVNO0VBQ0Usb0NBQUE7QUZnN0VSOztBRTk2RU07RUFDRSx5QkFBQTtBRmk3RVI7O0FFLzZFTTtFQUNFLG9DQUFBO0FGazdFUjs7QUV6N0VNO0VBQ0Usb0NBQUE7QUY0N0VSOztBRTE3RU07RUFDRSx5QkFBQTtBRjY3RVI7O0FFMzdFTTtFQUNFLG9DQUFBO0FGODdFUjs7QUVyOEVNO0VBQ0Usb0NBQUE7QUZ3OEVSOztBRXQ4RU07RUFDRSx5QkFBQTtBRnk4RVI7O0FFdjhFTTtFQUNFLG9DQUFBO0FGMDhFUjs7QUVqOUVNO0VBQ0Usb0NBQUE7QUZvOUVSOztBRWw5RU07RUFDRSx5QkFBQTtBRnE5RVI7O0FFbjlFTTtFQUNFLG9DQUFBO0FGczlFUjs7QUU3OUVNO0VBQ0Usb0NBQUE7QUZnK0VSOztBRTk5RU07RUFDRSx5QkFBQTtBRmkrRVI7O0FFLzlFTTtFQUNFLG9DQUFBO0FGaytFUjs7QUVuL0VNO0VBQ0Usb0NBQUE7QUZzL0VSOztBRXAvRU07RUFDRSx5QkFBQTtBRnUvRVI7O0FFci9FTTtFQUNFLG9DQUFBO0FGdy9FUjs7QUVyL0VNO0VBQ0Usb0NBQUE7QUZ3L0VSOztBRXQvRU07RUFDRSx5QkFBQTtBRnkvRVI7O0FFdi9FTTtFQUNFLG9DQUFBO0FGMC9FUjs7QUVqZ0ZNO0VBQ0Usb0NBQUE7QUZvZ0ZSOztBRWxnRk07RUFDRSx5QkFBQTtBRnFnRlI7O0FFbmdGTTtFQUNFLG9DQUFBO0FGc2dGUjs7QUU3Z0ZNO0VBQ0Usb0NBQUE7QUZnaEZSOztBRTlnRk07RUFDRSx5QkFBQTtBRmloRlI7O0FFL2dGTTtFQUNFLG9DQUFBO0FGa2hGUjs7QUV6aEZNO0VBQ0Usb0NBQUE7QUY0aEZSOztBRTFoRk07RUFDRSx5QkFBQTtBRjZoRlI7O0FFM2hGTTtFQUNFLG9DQUFBO0FGOGhGUjs7QUVyaUZNO0VBQ0Usb0NBQUE7QUZ3aUZSOztBRXRpRk07RUFDRSx5QkFBQTtBRnlpRlI7O0FFdmlGTTtFQUNFLG9DQUFBO0FGMGlGUjs7QUVqakZNO0VBQ0Usb0NBQUE7QUZvakZSOztBRWxqRk07RUFDRSx5QkFBQTtBRnFqRlI7O0FFbmpGTTtFQUNFLG9DQUFBO0FGc2pGUjs7QUU3akZNO0VBQ0Usb0NBQUE7QUZna0ZSOztBRTlqRk07RUFDRSx5QkFBQTtBRmlrRlI7O0FFL2pGTTtFQUNFLG9DQUFBO0FGa2tGUjs7QUV6a0ZNO0VBQ0Usb0NBQUE7QUY0a0ZSOztBRTFrRk07RUFDRSx5QkFBQTtBRjZrRlI7O0FFM2tGTTtFQUNFLG9DQUFBO0FGOGtGUjs7QUVybEZNO0VBQ0Usb0NBQUE7QUZ3bEZSOztBRXRsRk07RUFDRSx5QkFBQTtBRnlsRlI7O0FFdmxGTTtFQUNFLG9DQUFBO0FGMGxGUjs7QUVqbUZNO0VBQ0Usb0NBQUE7QUZvbUZSOztBRWxtRk07RUFDRSx5QkFBQTtBRnFtRlI7O0FFbm1GTTtFQUNFLG9DQUFBO0FGc21GUjs7QUU3bUZNO0VBQ0Usb0NBQUE7QUZnbkZSOztBRTltRk07RUFDRSx5QkFBQTtBRmluRlI7O0FFL21GTTtFQUNFLG9DQUFBO0FGa25GUjs7QUV6bkZNO0VBQ0Usb0NBQUE7QUY0bkZSOztBRTFuRk07RUFDRSx5QkFBQTtBRjZuRlI7O0FFM25GTTtFQUNFLG9DQUFBO0FGOG5GUjs7QUVyb0ZNO0VBQ0Usb0NBQUE7QUZ3b0ZSOztBRXRvRk07RUFDRSx5QkFBQTtBRnlvRlI7O0FFdm9GTTtFQUNFLG9DQUFBO0FGMG9GUjs7QUUzcEZNO0VBQ0Usb0NBQUE7QUY4cEZSOztBRTVwRk07RUFDRSx5QkFBQTtBRitwRlI7O0FFN3BGTTtFQUNFLG9DQUFBO0FGZ3FGUjs7QUU3cEZNO0VBQ0Usb0NBQUE7QUZncUZSOztBRTlwRk07RUFDRSx5QkFBQTtBRmlxRlI7O0FFL3BGTTtFQUNFLG9DQUFBO0FGa3FGUjs7QUV6cUZNO0VBQ0Usb0NBQUE7QUY0cUZSOztBRTFxRk07RUFDRSx5QkFBQTtBRjZxRlI7O0FFM3FGTTtFQUNFLG9DQUFBO0FGOHFGUjs7QUVyckZNO0VBQ0Usb0NBQUE7QUZ3ckZSOztBRXRyRk07RUFDRSx5QkFBQTtBRnlyRlI7O0FFdnJGTTtFQUNFLG9DQUFBO0FGMHJGUjs7QUVqc0ZNO0VBQ0Usb0NBQUE7QUZvc0ZSOztBRWxzRk07RUFDRSx5QkFBQTtBRnFzRlI7O0FFbnNGTTtFQUNFLG9DQUFBO0FGc3NGUjs7QUU3c0ZNO0VBQ0Usb0NBQUE7QUZndEZSOztBRTlzRk07RUFDRSx5QkFBQTtBRml0RlI7O0FFL3NGTTtFQUNFLG9DQUFBO0FGa3RGUjs7QUV6dEZNO0VBQ0Usb0NBQUE7QUY0dEZSOztBRTF0Rk07RUFDRSx5QkFBQTtBRjZ0RlI7O0FFM3RGTTtFQUNFLG9DQUFBO0FGOHRGUjs7QUVydUZNO0VBQ0Usb0NBQUE7QUZ3dUZSOztBRXR1Rk07RUFDRSx5QkFBQTtBRnl1RlI7O0FFdnVGTTtFQUNFLG9DQUFBO0FGMHVGUjs7QUVqdkZNO0VBQ0Usb0NBQUE7QUZvdkZSOztBRWx2Rk07RUFDRSx5QkFBQTtBRnF2RlI7O0FFbnZGTTtFQUNFLG9DQUFBO0FGc3ZGUjs7QUU3dkZNO0VBQ0Usb0NBQUE7QUZnd0ZSOztBRTl2Rk07RUFDRSx5QkFBQTtBRml3RlI7O0FFL3ZGTTtFQUNFLG9DQUFBO0FGa3dGUjs7QUV6d0ZNO0VBQ0Usb0NBQUE7QUY0d0ZSOztBRTF3Rk07RUFDRSx5QkFBQTtBRjZ3RlI7O0FFM3dGTTtFQUNFLG9DQUFBO0FGOHdGUjs7QUVyeEZNO0VBQ0Usb0NBQUE7QUZ3eEZSOztBRXR4Rk07RUFDRSx5QkFBQTtBRnl4RlI7O0FFdnhGTTtFQUNFLG9DQUFBO0FGMHhGUjs7QUVqeUZNO0VBQ0Usb0NBQUE7QUZveUZSOztBRWx5Rk07RUFDRSx5QkFBQTtBRnF5RlI7O0FFbnlGTTtFQUNFLG9DQUFBO0FGc3lGUjs7QUU3eUZNO0VBQ0Usb0NBQUE7QUZnekZSOztBRTl5Rk07RUFDRSx5QkFBQTtBRml6RlI7O0FFL3lGTTtFQUNFLG9DQUFBO0FGa3pGUjs7QUVuMEZNO0VBQ0Usb0NBQUE7QUZzMEZSOztBRXAwRk07RUFDRSx5QkFBQTtBRnUwRlI7O0FFcjBGTTtFQUNFLG9DQUFBO0FGdzBGUjs7QUVyMEZNO0VBQ0Usb0NBQUE7QUZ3MEZSOztBRXQwRk07RUFDRSx5QkFBQTtBRnkwRlI7O0FFdjBGTTtFQUNFLG9DQUFBO0FGMDBGUjs7QUVqMUZNO0VBQ0Usb0NBQUE7QUZvMUZSOztBRWwxRk07RUFDRSx5QkFBQTtBRnExRlI7O0FFbjFGTTtFQUNFLG9DQUFBO0FGczFGUjs7QUU3MUZNO0VBQ0Usb0NBQUE7QUZnMkZSOztBRTkxRk07RUFDRSx5QkFBQTtBRmkyRlI7O0FFLzFGTTtFQUNFLG9DQUFBO0FGazJGUjs7QUV6MkZNO0VBQ0Usb0NBQUE7QUY0MkZSOztBRTEyRk07RUFDRSx5QkFBQTtBRjYyRlI7O0FFMzJGTTtFQUNFLG9DQUFBO0FGODJGUjs7QUVyM0ZNO0VBQ0Usb0NBQUE7QUZ3M0ZSOztBRXQzRk07RUFDRSx5QkFBQTtBRnkzRlI7O0FFdjNGTTtFQUNFLG9DQUFBO0FGMDNGUjs7QUVqNEZNO0VBQ0Usb0NBQUE7QUZvNEZSOztBRWw0Rk07RUFDRSx5QkFBQTtBRnE0RlI7O0FFbjRGTTtFQUNFLG9DQUFBO0FGczRGUjs7QUU3NEZNO0VBQ0Usb0NBQUE7QUZnNUZSOztBRTk0Rk07RUFDRSx5QkFBQTtBRmk1RlI7O0FFLzRGTTtFQUNFLG9DQUFBO0FGazVGUjs7QUV6NUZNO0VBQ0Usb0NBQUE7QUY0NUZSOztBRTE1Rk07RUFDRSx5QkFBQTtBRjY1RlI7O0FFMzVGTTtFQUNFLG9DQUFBO0FGODVGUjs7QUVyNkZNO0VBQ0Usb0NBQUE7QUZ3NkZSOztBRXQ2Rk07RUFDRSx5QkFBQTtBRnk2RlI7O0FFdjZGTTtFQUNFLG9DQUFBO0FGMDZGUjs7QUUzN0ZNO0VBQ0Usb0NBQUE7QUY4N0ZSOztBRTU3Rk07RUFDRSx5QkFBQTtBRis3RlI7O0FFNzdGTTtFQUNFLG9DQUFBO0FGZzhGUjs7QUU3N0ZNO0VBQ0Usb0NBQUE7QUZnOEZSOztBRTk3Rk07RUFDRSx5QkFBQTtBRmk4RlI7O0FFLzdGTTtFQUNFLG9DQUFBO0FGazhGUjs7QUV6OEZNO0VBQ0Usb0NBQUE7QUY0OEZSOztBRTE4Rk07RUFDRSx5QkFBQTtBRjY4RlI7O0FFMzhGTTtFQUNFLG9DQUFBO0FGODhGUjs7QUVyOUZNO0VBQ0Usb0NBQUE7QUZ3OUZSOztBRXQ5Rk07RUFDRSx5QkFBQTtBRnk5RlI7O0FFdjlGTTtFQUNFLG9DQUFBO0FGMDlGUjs7QUVqK0ZNO0VBQ0Usb0NBQUE7QUZvK0ZSOztBRWwrRk07RUFDRSx5QkFBQTtBRnErRlI7O0FFbitGTTtFQUNFLG9DQUFBO0FGcytGUjs7QUU3K0ZNO0VBQ0Usb0NBQUE7QUZnL0ZSOztBRTkrRk07RUFDRSx5QkFBQTtBRmkvRlI7O0FFLytGTTtFQUNFLG9DQUFBO0FGay9GUjs7QUV6L0ZNO0VBQ0Usb0NBQUE7QUY0L0ZSOztBRTEvRk07RUFDRSx5QkFBQTtBRjYvRlI7O0FFMy9GTTtFQUNFLG9DQUFBO0FGOC9GUjs7QUVyZ0dNO0VBQ0Usb0NBQUE7QUZ3Z0dSOztBRXRnR007RUFDRSx5QkFBQTtBRnlnR1I7O0FFdmdHTTtFQUNFLG9DQUFBO0FGMGdHUjs7QUVqaEdNO0VBQ0Usb0NBQUE7QUZvaEdSOztBRWxoR007RUFDRSx5QkFBQTtBRnFoR1I7O0FFbmhHTTtFQUNFLG9DQUFBO0FGc2hHUjs7QUU3aEdNO0VBQ0Usb0NBQUE7QUZnaUdSOztBRTloR007RUFDRSx5QkFBQTtBRmlpR1I7O0FFL2hHTTtFQUNFLG9DQUFBO0FGa2lHUjs7QUVuakdNO0VBQ0Usb0NBQUE7QUZzakdSOztBRXBqR007RUFDRSx5QkFBQTtBRnVqR1I7O0FFcmpHTTtFQUNFLG9DQUFBO0FGd2pHUjs7QUVyakdNO0VBQ0Usb0NBQUE7QUZ3akdSOztBRXRqR007RUFDRSx5QkFBQTtBRnlqR1I7O0FFdmpHTTtFQUNFLG9DQUFBO0FGMGpHUjs7QUVqa0dNO0VBQ0Usb0NBQUE7QUZva0dSOztBRWxrR007RUFDRSx5QkFBQTtBRnFrR1I7O0FFbmtHTTtFQUNFLG9DQUFBO0FGc2tHUjs7QUU3a0dNO0VBQ0Usb0NBQUE7QUZnbEdSOztBRTlrR007RUFDRSx5QkFBQTtBRmlsR1I7O0FFL2tHTTtFQUNFLG9DQUFBO0FGa2xHUjs7QUV6bEdNO0VBQ0Usb0NBQUE7QUY0bEdSOztBRTFsR007RUFDRSx5QkFBQTtBRjZsR1I7O0FFM2xHTTtFQUNFLG9DQUFBO0FGOGxHUjs7QUVybUdNO0VBQ0Usb0NBQUE7QUZ3bUdSOztBRXRtR007RUFDRSx5QkFBQTtBRnltR1I7O0FFdm1HTTtFQUNFLG9DQUFBO0FGMG1HUjs7QUVqbkdNO0VBQ0Usb0NBQUE7QUZvbkdSOztBRWxuR007RUFDRSx5QkFBQTtBRnFuR1I7O0FFbm5HTTtFQUNFLG9DQUFBO0FGc25HUjs7QUU3bkdNO0VBQ0Usb0NBQUE7QUZn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O0VBQ0EsY0pqRlk7QVZzMUlsQjtBY253SVE7RUFDRSxzQkp3SmtCO0FWNm1JNUI7QWMvdklNO0VBQ0Usc0JKOEljO0VJN0lkLGdDQUFBO0VBQ0Esa0JBQUE7QWRpd0lSO0FjL3ZJTTtFQUNFLGtCQUFBO0FkaXdJUjtBYy92SU07RUFDRSxrQkFBQTtBZGl3SVI7QWM5dklJO0VBQ0UsWUFBQTtFQUNBLGNKeEdZO0FWdzJJbEI7O0FlNTJJQTtFQUNFLDBCTHlGYTtBVnN4SWY7O0FlNTJJQTtFQUNFLGFBQUE7RUFDQSx5Qkw0S3dCO0FWbXNJMUI7O0FlNTJJQTtFQUNFLGlCTDJEZ0I7RUsxRGhCLGNMZ0RtQjtBVit6SXJCOztBZ0IzM0lBOytFQUFBO0FBR0EsdUJBQUE7QUFFQTtFQUNFLGNOc0V1QjtBVnN6SXpCOztBZ0J6M0lBLGdCQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7RUFlRSw2QkFBQTtFQUNBLFlBQUE7RUFDQSxnQ05pQ2E7RU1oQ2IsZ0JBQUE7RUFDQSxhQUFBO0VBQ0EsWU5jYTtFTWJiLFdBQUE7RUFDQSxlTmlDZ0I7RU1oQ2hCLGlCTmtDYTtFTWpDYixVTmtDYztFTWpDZCxnQkFBQTtFQUNBLHVCQUFBO0VBQ0Esd0NBQUE7QWhCeTNJRjtBZ0J0M0lFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBRUUsMEJONEJtQjtFTTNCbkIsNkNONkJvQjtBVmszSXhCO0FnQjM0SUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFFRSwwQk5xQm1CO0FWKzRJdkI7QWdCaDZJRTs7Ozs7Ozs7Ozs7OztFQUNFLGdDQUFBO0VBQ0EsNkJBQUE7QWhCODZJSjtBZ0IxNklFOzs7Ozs7Ozs7Ozs7O0VBQ0UsY054RGM7QVZnL0lsQjtBZ0JsNklFOzs7Ozs7Ozs7Ozs7O0VBQ0UsY045RVk7QVY4L0loQjtBZ0JsNklFOzs7Ozs7Ozs7Ozs7O0VBQ0UsY041RlU7QVY0Z0pkO0FnQjU2SUU7Ozs7Ozs7Ozs7Ozs7RUFDRSxXQUFBO0FoQjA3SUo7QWdCaDdJQSxpQ0FBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VB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eUJwdkxFO0VBQ0UsbUJBd0NTO0F6QjhzTGI7QXlCN3ZMRTtFQUNFLDJCQThDUztBekJpdExiO0F5Qjd2TEU7RUFDRSxxQkEyQ1M7QXpCb3RMYjtBeUI3dkxFO0VBQ0Usb0JBd0NTO0F6QnV0TGI7QXlCdHdMRTtFQUNFLGdCQThDUztBekIwdExiO0F5QnR3TEU7RUFDRSxVQTJDUztBekI2dExiO0F5QnR3TEU7RUFDRSxTQXdDUztBekJndUxiO0F5Qi93TEU7RUFDRSwyQkE4Q1M7QXpCbXVMYjtBeUIvd0xFO0VBQ0UscUJBMkNTO0F6QnN1TGI7QXlCL3dMRTtFQUNFLG9CQXdDUztBekJ5dUxiO0F5Qnh4TEU7RUFDRSwyQkE4Q1M7QXpCNHVMYjtBeUJ4eExFO0VBQ0UscUJBMkNTO0F6Qit1TGI7QXlCeHhMRTtFQUNFLG9CQXdDUztBekJrdkxiO0F5Qmp5TEU7RUFDRSxnQkE4Q1M7QXpCcXZMYjtBeUJqeUxFO0VBQ0UsVUEyQ1M7QXpCd3ZMYjtBeUJqeUxFO0VBQ0UsU0F3Q1M7QXpCMnZMYjtBeUIxeUxFO0VBQ0UsMkJBOENTO0F6Qjh2TGI7QXlCMXlMRTtFQUNFLHFCQTJDUztBekJpd0xiO0F5QjF5TEU7RUFDRSxvQkF3Q1M7QXpCb3dMYjtBeUJuekxFO0VBQ0UsMkJBOENTO0F6QnV3TGI7QXlCbnpMRTtFQUNFLHFCQTJDUztBekIwd0xiO0F5Qm56TEU7RUFDRSxvQkF3Q1M7QXpCNndMYjtBeUI1ekxFO0VBQ0UsZ0JBOENTO0F6Qmd4TGI7QXlCNXpMRTtFQUNFLFVBMkNTO0F6Qm14TGI7QXlCNXpMRTtFQUNFLFNBd0NTO0F6QnN4TGI7QXlCcjBMRTtFQUNFLDJCQThDUztBekJ5eExiO0F5QnIwTEU7RUFDRSxxQkEyQ1M7QXpCNHhMYjtBeUJyMExFO0VBQ0Usb0JBd0NTO0F6Qit4TGI7QXlCOTBMRTtFQUNFLDJCQThDUztBekJreUxiO0F5QjkwTEU7RUFDRSxxQkEyQ1M7QXpCcXlMYjtBeUI5MExFO0VBQ0Usb0JBd0NTO0F6Qnd5TGI7QXlCdjFMRTtFQUNFLGlCQThDUztBekIyeUxiO0F5QnYxTEU7RUFD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QSx3Q0FBQTtBM0I4bk5GOztBMkIxbk5BOzs7Ozs7Ozs7Ozs7Ozs7RUFlRSxvQkFBQTtFQUNBLG9DQUFBO0VBQ0EsZ0JBQUE7RUFDQSx5QkFBQTtFQUNBLGVBQUE7QTNCNm5ORjtBMkI1bk5FOzs7Ozs7Ozs7Ozs7Ozs7RUFDRSxvQ0FBQTtFQUNBLHlCQUFBO0EzQjRvTko7O0EyQnZvTkE7Ozs7O0VBS0UsZWpCb0lpQjtFaUJuSWpCLFVBQUE7QTNCMG9ORjtBMkJ6b05FOzs7OztFQUNFLGlCakJrSW9CO0VpQmpJcEIsb0JBQUE7QTNCK29OSjs7QTJCeG9ORTs7RUFDRSx5QkFBQTtBM0I0b05KOztBMkJ2b05BO0VBQ0UscUJBQUE7RUFDQSxXakJpRm9CO0VpQmhGcEIseUJqQmtGeUI7RWlCakZ6QixrQkFBQTtFQUNBLHFCQUFBO0VBRUEsMENBQUE7RUFDQSxlQUFBO0EzQnlvTkY7QTJCeG9ORTtFQUNFLHlCakJxSDZCO0FWcWhOakM7O0EyQnBvTkE7RUF3Q0UscUJBQUE7RUFDQSxXakI0RnNCO0VpQjNGdEIsa0JBQUE7RUFDQSxnQkFBQTtFQUNBLFVBQUE7RUFDQSxXakJ5RnFCO0VpQnhGckIsWWpCd0ZxQjtFaUJ2RnJCLGlCakJ1RnFCO0VpQnRGckIsVUFBQTtFQUNBLHlCakI3SGdCO0VpQjhIaEIsa0JqQnFGdUI7RWlCbkZ2QixpQ0FBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtBM0IrbE5GO0EyQnBwTkU7RUFDRSx5QmpCOUVjO0FWb3VObEI7QTJCbnBORTtFQUNFLGdCQUFBO0EzQnFwTko7QTJCbnBORTtFQUlFLFdqQjBHeUI7RWlCekd6QixZakJ5R3lCO0VpQnhHekIsVUFBQTtBM0JrcE5KO0EyQnZwTkk7RUFDRSxZQUFBO0EzQnlwTk47QTJCcHBOSTtFQUNFLGlCakJzR3VCO0FWZ2pON0I7QTJCbHBORTtFQUlFLGFqQm9HeUI7RWlCbkd6QixjakJtR3lCO0FWOGlON0I7QTJCcnBOSTtFQUNFLGNBQUE7QTNCdXBOTjtBMkJucE5JO0VBQ0UsbUJqQmlHdUI7QVZvak43QjtBMkJqcE5FO0VBS0Usa0JB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L0Iwd09OO0UrQnp3T0E7SUFBTSxVQUFBO0UvQjR3T047RStCM3dPQTtJQUFNLFVBQUE7RS9COHdPTjtFK0I3d09BO0lBQU8sVUFBQTtFL0JneE9QO0FBQ0Y7QStCOXdPQTtFQUNFO0lBQU8sVUFBQTtFL0JpeE9QO0UrQmh4T0E7SUFBTSxVQUFBO0UvQm14T047RStCbHhPQTtJQUFNLFVBQUE7RS9CcXhPTjtFK0JweE9BO0lBQU0sVUFBQTtFL0J1eE9OO0UrQnR4T0E7SUFBTSxVQUFBO0UvQnl4T047QUFDRjtBK0J2eE9BO0VBQ0U7SUFBTyxVQUFBO0UvQjB4T1A7RStCenhPQTtJQUFNLFVBQUE7RS9CNHhPTjtFK0IzeE9BO0lBQU0sVUFBQTtFL0I4eE9OO0UrQjd4T0E7SUFBTSxVQUFBO0UvQmd5T047RStCL3hPQTtJQUFNLFVBQUE7RS9Ca3lPTjtBQUNGO0ErQmh5T0E7RUFDRTtJQUFPLFVBQUE7RS9CbXlPUDtFK0JseU9BO0lBQU0sVUFBQTtFL0JxeU9OO0UrQnB5T0E7SUFBTSxVQUFBO0UvQnV5T047RStCdHlPQTtJQUFNLFVBQUE7RS9CeXlPTjtFK0J4eU9BO0lBQU0sVUFBQTtFL0IyeU9OO0FBQ0Y7QStCenlPQTtFQUNFO0lBQU8sVUFBQTtFL0I0eU9QO0UrQjN5T0E7SUFBTSxVQUFBO0UvQjh5T047RStCN3lPQTtJQUFNLFVBQUE7RS9CZ3pPTjtFK0IveU9BO0lBQU0sVUFBQTtFL0Jrek9OO0UrQmp6T0E7SUFBTSxVQUFBO0UvQm96T047QUFDRjtBK0Jsek9BO0VBQ0U7SUFBTyxVQUFBO0UvQnF6T1A7RStCcHpPQTtJQUFNLFVBQUE7RS9CdXpPTjtFK0J0ek9BO0lBQU0sVUFBQTtFL0J5ek9OO0UrQnh6T0E7SUFBTSxVQUFBO0UvQjJ6T047RStCMXpPQTtJQUFPLFVBQUE7RS9CNnpPUDtBQUNGO0ErQjN6T0E7RUFDRTtJQUFPLFVBQUE7RS9COHpPUDtFK0I3ek9BO0lBQU0sVUFBQTtFL0JnME9OO0UrQi96T0E7SUFBTSxVQUFBO0UvQmswT047RStCajBPQTtJQUFNLFVBQUE7RS9CbzBPTjtF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QUE7QXBDdTFQUjtBb0NyMVBNO0VBQWEsVzFCN0NDO0FWcTRQcEI7O0FvQ2wxUEE7RUFDRSxrQkFBQTtFQUNBLFkxQnhEcUI7RTBCeURyQixZQUFBO0FwQ3ExUEY7QW9DbjFQRTtFQUNFLGVBQUE7QXBDcTFQSjs7QW9DbDFQQTtFQUNFO0lBQ0UsZ0IxQm5FWTtFVnc1UGQ7RW9DbjFQQTtJQUNFLFkxQnRFWTtJMEJ1RVosaUIxQnZFWTtFVjQ1UGQ7RW9DbjFQQTtJQUNFLFkxQjFFWTtFVis1UGQ7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAY2hhcnNldCBcXFwiVVRGLThcXFwiO1xcbkBpbXBvcnQgJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1VYnVudHUnO1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6IHN3ZWV0aWNvbnM7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgc3JjOiB1cmwoXFxcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci5lb3RcXFwiKTtcXG4gIHNyYzogdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIud29mZjJcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLndvZmZcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKSwgdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIudHRmXFxcIikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpO1xcbn1cXG4ucy1pY29uLFxcbi5zLWljb25zLFxcbi5zd2VldC1pY29ucyxcXG4uc3dlZXQtaWNvbiB7XFxuICBmb250LWZhbWlseTogc3dlZXRpY29ucywgc2Fucy1zZXJpZjtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXNpemU6IDI4cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2E9MVxcXCI7XFxuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi53ZWJvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyZDYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dCB7XFxuICBjb2xvcjogIzAwNjJkNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyZDYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uc2Vjb25kIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc3RkEgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LXNlY29uZCB7XFxuICBjb2xvcjogIzAwNzdGQSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1zZWNvbmQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N0ZBICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLnRoaXJkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwOWJkZGQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LXRoaXJkIHtcXG4gIGNvbG9yOiAjMDliZGRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLXRoaXJkIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA5YmRkZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5mb3VydGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZm91cnRoIHtcXG4gIGNvbG9yOiAjY2JlN2ZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWZvdXJ0aCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDAxODFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2QwMTgxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMDE4MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5MTUxYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNiOTE1MWIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjkxNTFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhMjEzMTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjYTIxMzE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2EyMTMxOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5iLSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDljZTVmICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1iLSB7XFxuICBjb2xvcjogIzQ5Y2U1ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1iLSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0OWNlNWYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiMTAxNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM4YjEwMTQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGIxMDE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQge1xcbiAgY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWJlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2RkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2VmOWE5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1NzM3MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmNTM1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2MjgyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2M2MjgyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2MjgyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiNzFjMWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICNiNzFjMWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiNzFjMWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4YTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmY4YTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4YTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmNTI1MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjE3NDQgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmZjE3NDQgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjE3NDQgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjZDUwMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOTFlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dCB7XFxuICBjb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOTFlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNlNGVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4YmJkMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDhmYjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA2MjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDgxYjYwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MyMTg1YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZDE0NTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzg4MGU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4MGFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjQwODEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2Y1MDA1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzUxMTYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzljMjdiMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQge1xcbiAgY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxYmVlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2NlOTNkOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JhNjhjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FiNDdiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZhMWI5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzZhMWI5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZhMWI5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0YTE0OGMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM0YTE0OGMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0YTE0OGMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWE4MGZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZWE4MGZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWE4MGZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwNDBmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2UwNDBmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwNDBmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTAwZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNkNTAwZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTAwZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWEwMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjYWEwMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWEwMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjczYWI3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0IHtcXG4gIGNvbG9yOiAjNjczYWI3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxYzRlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2QxYzRlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxYzRlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdlNTdjMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzdlNTdjMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdlNTdjMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZTM1YjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDUyN2EwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMzExYjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM4OGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2M0ZGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjNjUxZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjIwMGVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNmNTFiNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQge1xcbiAgY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZWFmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1Y2FlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzlmYThkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjNmJjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTIzN2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMxYTIzN2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTIzN2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGM5ZWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjOGM5ZWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGM5ZWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUzNmRmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzUzNmRmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUzNmRmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZDVhZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMzZDVhZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZDVhZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzA0ZmZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMzA0ZmZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzA0ZmZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTk2ZjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dCB7XFxuICBjb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTk2ZjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNmMmZkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGNhZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRiNWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4OGU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5NzZkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTY1YzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzBkNDdhMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODJiMWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzI5NzlmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk2MmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwM2E5ZjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dCB7XFxuICBjb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwM2E5ZjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFmNWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZTVmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MWQ0ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGZjM2Y3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5YjZmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDM5YmU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAyODhkMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjc3YmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzAxNTc5YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkOGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MGM0ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzAwYjBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5MWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGJjZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dCB7XFxuICBjb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGJjZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmN2ZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZWJmMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGRlZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRkMGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YzZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhY2MxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTdhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDgzOGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzAwNjA2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODRmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzAwZTVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiOGQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDk2ODggIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dCB7XFxuICBjb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDk2ODggIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmMmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZGZkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGNiYzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiNmFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4OTdiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzk2YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5NWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzAwNGQ0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdmZmViICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGZmZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzFkZTliNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiZmE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGNhZjUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0IHtcXG4gIGNvbG9yOiAjNGNhZjUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4ZTZjOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2M4ZTZjOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4ZTZjOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY2YmI2YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzY2YmI2YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY2YmI2YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzM4OGUzYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmU3ZDMyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMWI1ZTIwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjlmNmNhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjlmMGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjMDBlNjc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGJjMzRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0IHtcXG4gIGNvbG9yOiAjOGJjMzRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZWRjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2RjZWRjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZWRjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzljY2M2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzljY2M2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzljY2M2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Y2IzNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzY4OWYzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU4YjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMzM2OTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NmZjkwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJmZjU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjNzZmZjAzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRkZDE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZGRjMzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dCB7XFxuICBjb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZGRjMzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmYmU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjRjMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmVlOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlNzc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZTE1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzBjYTMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmYjQyYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTlkMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzgyNzcxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmZjgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWZmNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2M2ZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWVlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWIzYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQge1xcbiAgY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmRlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjljNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2ZmZjU5ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjE3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWU1OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YTgyNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2Y5YTgyNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YTgyNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTdmMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICNmNTdmMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTdmMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjhkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmZmZjhkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjhkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmZmVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjZmZkNjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0IHtcXG4gIGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWNiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmZWNiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWNiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2EyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmY2EyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2EyOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2ZmYTAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjZmY2ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNTdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNzQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmZjNDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Uge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTgwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQge1xcbiAgY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTBiMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2ZmY2M4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc0ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTcyNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmNmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2VmNmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmNmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNjUxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICNlNjUxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNjUxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkMTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmZkMTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkMTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWI0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmYWI0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWI0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjkxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmZjkxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjkxMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjZmY2ZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1NzIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0IHtcXG4gIGNvbG9yOiAjZmY1NzIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2NiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmY2NiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2NiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzA0MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmNzA0MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzA0MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDUxMWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2U2NGExOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDg0MzE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjYmYzNjBjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ZTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmYzZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGQyYzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93biB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk1NTQ4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0IHtcXG4gIGNvbG9yOiAjNzk1NTQ4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2ZDRjNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGUzNDJlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjM2UyNzIzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dCB7XFxuICBjb2xvcjogIzYwN2Q4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYwN2Q4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2VjZWZmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVjNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzkwYTRhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU0NmU3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzU0NmU3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU0NmU3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQge1xcbiAgY29sb3I6ICM5ZTllOWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2VlZWVlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjEyMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibGFjayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibGFjay10ZXh0IHtcXG4gIGNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi53aGl0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi53aGl0ZS10ZXh0IHtcXG4gIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi50cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udHJhbnNwYXJlbnQtdGV4dCB7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuXFxuLyoqXFxuICogcHJpc20uanMgVHdpbGlnaHQgdGhlbWVcXG4gKiBCYXNlZCAobW9yZSBvciBsZXNzKSBvbiB0aGUgVHdpbGlnaHQgdGhlbWUgb3JpZ2luYWxseSBvZiBUZXh0bWF0ZSBmYW1lLlxcbiAqIEBhdXRob3IgUmVteSBCYWNoXFxuICovXFxuY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSxcXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV0ge1xcbiAgY29sb3I6IHdoaXRlO1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCBcXFwiQW5kYWxlIE1vbm9cXFwiLCBcXFwiVWJ1bnR1IE1vbm9cXFwiLCBtb25vc3BhY2U7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1zaGFkb3c6IDAgLTAuMWVtIDAuMmVtIGJsYWNrO1xcbiAgd2hpdGUtc3BhY2U6IHByZTtcXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgd29yZC1icmVhazogbm9ybWFsO1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgLW1vei10YWItc2l6ZTogNDtcXG4gIC1vLXRhYi1zaXplOiA0O1xcbiAgdGFiLXNpemU6IDQ7XFxuICAtd2Via2l0LWh5cGhlbnM6IG5vbmU7XFxuICAtbW96LWh5cGhlbnM6IG5vbmU7XFxuICAtbXMtaHlwaGVuczogbm9uZTtcXG4gIGh5cGhlbnM6IG5vbmU7XFxufVxcblxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXSxcXG46bm90KHByZSkgPiBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGJhY2tncm91bmQ6IGhzbCgwZGVnLCAwJSwgOCUpOyAvKiAjMTQxNDE0ICovXFxufVxcblxcbi8qIENvZGUgYmxvY2tzICovXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuNWVtO1xcbiAgYm9yZGVyOiAwLjNlbSBzb2xpZCBoc2woMGRlZywgMCUsIDMzJSk7IC8qICMyODJBMkIgKi9cXG4gIGJveC1zaGFkb3c6IDFweCAxcHggMC41ZW0gYmxhY2sgaW5zZXQ7XFxuICBtYXJnaW46IDAuNWVtIDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIHBhZGRpbmc6IDFlbTtcXG59XFxuXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiB7XFxuICAvKiBGaXJlZm94ICovXFxuICBiYWNrZ3JvdW5kOiBoc2woMjAwZGVnLCA0JSwgMTYlKTsgLyogIzI4MkEyQiAqL1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiB7XFxuICAvKiBTYWZhcmkgKi9cXG4gIGJhY2tncm91bmQ6IGhzbCgyMDBkZWcsIDQlLCAxNiUpOyAvKiAjMjgyQTJCICovXFxufVxcblxcbi8qIFRleHQgU2VsZWN0aW9uIGNvbG91ciAqL1xcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb24ge1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDBkZWcsIDAlLCA5MyUsIDAuMTUpOyAvKiAjRURFREVEICovXFxufVxcblxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb24sXFxuY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uIHtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZDogaHNsYSgwZGVnLCAwJSwgOTMlLCAwLjE1KTsgLyogI0VERURFRCAqL1xcbn1cXG5cXG4vKiBJbmxpbmUgY29kZSAqL1xcbjpub3QocHJlKSA+IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0ge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zZW07XFxuICBib3JkZXI6IDAuMTNlbSBzb2xpZCBoc2woMGRlZywgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXG4gIGJveC1zaGFkb3c6IDFweCAxcHggMC4zZW0gLTAuMWVtIGJsYWNrIGluc2V0O1xcbiAgcGFkZGluZzogMC4xNWVtIDAuMmVtIDAuMDVlbTtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi50b2tlbi5jb21tZW50LFxcbi50b2tlbi5wcm9sb2csXFxuLnRva2VuLmRvY3R5cGUsXFxuLnRva2VuLmNkYXRhIHtcXG4gIGNvbG9yOiBoc2woMGRlZywgMCUsIDQ3JSk7IC8qICM3Nzc3NzcgKi9cXG59XFxuXFxuLnRva2VuLnB1bmN0dWF0aW9uIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuXFxuLm5hbWVzcGFjZSB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcblxcbi50b2tlbi50YWcsXFxuLnRva2VuLmJvb2xlYW4sXFxuLnRva2VuLm51bWJlcixcXG4udG9rZW4uZGVsZXRlZCB7XFxuICBjb2xvcjogaHNsKDE0ZGVnLCA1OCUsIDU1JSk7IC8qICNDRjZBNEMgKi9cXG59XFxuXFxuLnRva2VuLmtleXdvcmQsXFxuLnRva2VuLnByb3BlcnR5LFxcbi50b2tlbi5zZWxlY3RvcixcXG4udG9rZW4uY29uc3RhbnQsXFxuLnRva2VuLnN5bWJvbCxcXG4udG9rZW4uYnVpbHRpbiB7XFxuICBjb2xvcjogaHNsKDUzZGVnLCA4OSUsIDc5JSk7IC8qICNGOUVFOTggKi9cXG59XFxuXFxuLnRva2VuLmF0dHItbmFtZSxcXG4udG9rZW4uYXR0ci12YWx1ZSxcXG4udG9rZW4uc3RyaW5nLFxcbi50b2tlbi5jaGFyLFxcbi50b2tlbi5vcGVyYXRvcixcXG4udG9rZW4uZW50aXR5LFxcbi50b2tlbi51cmwsXFxuLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLFxcbi5zdHlsZSAudG9rZW4uc3RyaW5nLFxcbi50b2tlbi52YXJpYWJsZSxcXG4udG9rZW4uaW5zZXJ0ZWQge1xcbiAgY29sb3I6IGhzbCg3NmRlZywgMjElLCA1MiUpOyAvKiAjOEY5RDZBICovXFxufVxcblxcbi50b2tlbi5hdHJ1bGUge1xcbiAgY29sb3I6IGhzbCgyMThkZWcsIDIyJSwgNTUlKTsgLyogIzc1ODdBNiAqL1xcbn1cXG5cXG4udG9rZW4ucmVnZXgsXFxuLnRva2VuLmltcG9ydGFudCB7XFxuICBjb2xvcjogaHNsKDQyZGVnLCA3NSUsIDY1JSk7IC8qICNFOUMwNjIgKi9cXG59XFxuXFxuLnRva2VuLmltcG9ydGFudCxcXG4udG9rZW4uYm9sZCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuXFxuLnRva2VuLml0YWxpYyB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcblxcbi50b2tlbi5lbnRpdHkge1xcbiAgY3Vyc29yOiBoZWxwO1xcbn1cXG5cXG5wcmVbZGF0YS1saW5lXSB7XFxuICBwYWRkaW5nOiAxZW0gMCAxZW0gM2VtO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4vKiBNYXJrdXAgKi9cXG4ubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi50YWcsXFxuLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4uYXR0ci1uYW1lLFxcbi5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLnB1bmN0dWF0aW9uIHtcXG4gIGNvbG9yOiBoc2woMzNkZWcsIDMzJSwgNTIlKTsgLyogI0FDODg1QiAqL1xcbn1cXG5cXG4vKiBNYWtlIHRoZSB0b2tlbnMgc2l0IGFib3ZlIHRoZSBsaW5lIGhpZ2hsaWdodCBzbyB0aGUgY29sb3VycyBkb24ndCBsb29rIGZhZGVkLiAqL1xcbi50b2tlbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5cXG4ubGluZS1oaWdobGlnaHQge1xcbiAgYmFja2dyb3VuZDogaHNsYSgwZGVnLCAwJSwgMzMlLCAwLjI1KTsgLyogIzU0NTQ1NCAqL1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBoc2xhKDBkZWcsIDAlLCAzMyUsIDAuMSkgNzAlLCBoc2xhKDBkZWcsIDAlLCAzMyUsIDApKTsgLyogIzU0NTQ1NCAqL1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCBoc2woMGRlZywgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXG4gIGJvcmRlci10b3A6IDFweCBkYXNoZWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuICBsZWZ0OiAwO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBtYXJnaW4tdG9wOiAwLjc1ZW07IC8qIFNhbWUgYXMgLnByaXNt4oCZcyBwYWRkaW5nLXRvcCAqL1xcbiAgcGFkZGluZzogaW5oZXJpdCAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHdoaXRlLXNwYWNlOiBwcmU7XFxuICB6LWluZGV4OiAwO1xcbn1cXG5cXG4ubGluZS1oaWdobGlnaHQ6YmVmb3JlLFxcbi5saW5lLWhpZ2hsaWdodFtkYXRhLWVuZF06YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDIxNWRlZywgMTUlLCA1OSUpOyAvKiAjODc5NEE2ICovXFxuICBib3JkZXItcmFkaXVzOiA5OTlweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IHdoaXRlO1xcbiAgY29sb3I6IGhzbCgyNGRlZywgMjAlLCA5NSUpOyAvKiAjRjVGMkYwICovXFxuICBjb250ZW50OiBhdHRyKGRhdGEtc3RhcnQpO1xcbiAgZm9udDogYm9sZCA2NSUvMS41IHNhbnMtc2VyaWY7XFxuICBsZWZ0OiAwLjZlbTtcXG4gIG1pbi13aWR0aDogMWVtO1xcbiAgcGFkZGluZzogMCAwLjVlbTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgdG9wOiAwLjRlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAwLjNlbTtcXG59XFxuXFxuLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlciB7XFxuICBib3R0b206IDAuNGVtO1xcbiAgY29udGVudDogYXR0cihkYXRhLWVuZCk7XFxuICB0b3A6IGF1dG87XFxufVxcblxcbi53aW5kb3cge1xcbiAgZm9udC1mYW1pbHk6IFxcXCJVYnVudHVcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAxN3B4O1xcbiAgd2lkdGg6IDYwMHB4O1xcbiAgbWFyZ2luOiA3NXB4IGF1dG87XFxuICBiYWNrZ3JvdW5kOiAjMmMzZTUwO1xcbiAgaGVpZ2h0OiAzNTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGRpc3BsYXk6IHJlbGF0aXZlO1xcbiAgYm94LXNoYWRvdzogMTBweCAxMHB4IDEwcHggIzg4ODg4ODtcXG59XFxuXFxuLmFmdGVyY2xvc2Uge1xcbiAgY29sb3I6ICMzNDQ5NWU7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ub3BlbiB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHBhZGRpbmc6IDE1cHg7XFxuICBiYWNrZ3JvdW5kOiAjMmVjYzcxO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uYmFzaCB7XFxuICB3aWR0aDogNjAwcHg7XFxuICBiYWNrZ3JvdW5kOiAjMzQ0OTVlO1xcbiAgaGVpZ2h0OiAzMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHRvcDogNDBweDtcXG4gIGRpc3BsYXk6IGFic29sdXRlO1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uYmFzaCAuY29tbWFuZDo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJ1c2VyQG1hY2hpbmUgJCA6IFxcXCI7XFxuICBjb2xvcjogIzJlY2M3MTtcXG59XFxuLmJhc2ggLnJlc3VsdGE6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiPj5cXFwiO1xcbiAgY29sb3I6ICMyZWNjNzE7XFxufVxcblxcbi8qIGVmZmVjdGVkIGJ5IGNvbnRyb2xsZXJzICovXFxuLndpbmRvd21heCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogYXV0bztcXG4gIGJhY2tncm91bmQ6ICMyYzNlNTA7XFxuICBoZWlnaHQ6IDEwMDBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGRpc3BsYXk6IHJlbGF0aXZlO1xcbn1cXG5cXG4ud2luZG93bWluIHtcXG4gIHdpZHRoOiAzMDBweDtcXG4gIGhlaWdodDogNDVweDtcXG4gIGJhY2tncm91bmQ6ICMyYzNlNTA7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3R0b206IDA7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxufVxcblxcbi5iYXNobWF4IHtcXG4gIGRpc3BsYXk6IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiAjMzQ0OTVlO1xcbiAgaGVpZ2h0OiA5NjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJvdHRvbTogMDtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4vKiAhLS1lbmQtLSEgKi9cXG4uYnV0dG9ucyB7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGZsb2F0OiByaWdodDtcXG4gIG1hcmdpbjogMTNweCA0cHg7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5jbG9zZSB7XFxuICBiYWNrZ3JvdW5kOiAjZTc0YzNjO1xcbn1cXG5cXG4ubWF4aW1pemUge1xcbiAgYmFja2dyb3VuZDogI2YxYzQwZjtcXG59XFxuXFxuLm1pbmltaXplIHtcXG4gIGJhY2tncm91bmQ6ICMyZWNjNzE7XFxufVxcblxcbi5yZXN1bHQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbnRyb2xzIHtcXG4gIGhlaWdodDogNDBweDtcXG4gIHRvcDogMDtcXG59XFxuXFxuLnRpdGxlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4ubWF0ZXJpYWwtdG9vbHRpcCB7XFxuICBwYWRkaW5nOiAxMHB4IDhweDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIHotaW5kZXg6IDIwMDA7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIG1pbi1oZWlnaHQ6IDM2cHg7XFxuICBsaW5lLWhlaWdodDogMTIwJTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDRweCk7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMyMzIzMjtcXG59XFxuXFxuLmJhY2tkcm9wIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBoZWlnaHQ6IDdweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDUwJSA1MCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyO1xcbiAgei1pbmRleDogLTE7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMCU7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcblxcbi5zaGFkb3ctMCB7XFxuICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi8qIDJkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcbi5zaGFkb3ctMSwgbmF2LCAuZHJvcGRvd24tY29udGVudCwgLmNhcmQsIC5jYXJkLXBhbmVsLCAuYnRuLWZsb2F0aW5nLCAuYnRuLCAuYnRuLXNtYWxsLCAuYnRuLWxhcmdlLCAuY29sbGFwc2libGUge1xcbiAgYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4uc2hhZG93LTEtaGFsZiwgLmJ0bi1mbG9hdGluZzpob3ZlciwgLmJ0bjpob3ZlciwgLmJ0bi1zbWFsbDpob3ZlciwgLmJ0bi1sYXJnZTpob3ZlciB7XFxuICBib3gtc2hhZG93OiAwIDNweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCA3cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi8qIDZkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcbi5zaGFkb3ctMiB7XFxuICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4vKiAxMmRwIGVsZXZhdGlvbiBtb2RpZmllZCovXFxuLnNoYWRvdy0zIHtcXG4gIGJveC1zaGFkb3c6IDAgOHB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogMTZkcCBlbGV2YXRpb24gKi9cXG4uc2hhZG93LTQge1xcbiAgYm94LXNoYWRvdzogMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgOHB4IDEwcHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi8qIDI0ZHAgZWxldmF0aW9uICovXFxuLnNoYWRvdy01LCAubW9kYWwge1xcbiAgYm94LXNoYWRvdzogMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAyNGRwIGVsZXZhdGlvbiAqL1xcbi5pbnZlcnQtc2hhZG93LTUge1xcbiAgYm94LXNoYWRvdzogMzhweCAwIDAgMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCA0NnB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDE1cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4uaG92ZXJhYmxlIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yNXM7XFxufVxcbi5ob3ZlcmFibGU6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTdweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCA2cHggMjBweCAwIHJnYmEoMCwgMCwgMCwgMC4xOSk7XFxufVxcblxcbi8qIVxcbiAqIFdhdmVzIHYwLjYuMFxcbiAqIGh0dHA6Ly9maWFuLm15LmlkL1dhdmVzXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNCBBbGZpYW5hIEUuIFNpYnVlYSBhbmQgb3RoZXIgY29udHJpYnV0b3JzXFxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXFxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZpYW5zL1dhdmVzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcXG4gKi9cXG4ud2F2ZXMtZWZmZWN0IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgei1pbmRleDogMTtcXG4gIHRyYW5zaXRpb246IDAuM3MgZWFzZS1vdXQ7XFxufVxcbi53YXZlcy1lZmZlY3QgLndhdmVzLXJpcHBsZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIG1hcmdpbi10b3A6IC0xMHB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjdzIGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLWxpZ2h0IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1yZWQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NCwgNjcsIDU0LCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLXllbGxvdyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLW9yYW5nZSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtcHVycGxlIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNTYsIDM5LCAxNzYsIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtZ3JlZW4gLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc2LCAxNzUsIDgwLCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLXRlYWwgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDE1MCwgMTM2LCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0IGlucHV0W3R5cGU9YnV0dG9uXSwgLndhdmVzLWVmZmVjdCBpbnB1dFt0eXBlPXJlc2V0XSwgLndhdmVzLWVmZmVjdCBpbnB1dFt0eXBlPXN1Ym1pdF0ge1xcbiAgYm9yZGVyOiAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgdGV4dC10cmFuc2Zvcm06IGluaGVyaXQ7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4ud2F2ZXMtZWZmZWN0IGltZyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuXFxuLndhdmVzLW5vdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi53YXZlcy1jaXJjbGUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHdoaXRlIDEwMCUsIGJsYWNrIDEwMCUpO1xcbn1cXG5cXG4ud2F2ZXMtaW5wdXQtd3JhcHBlciB7XFxuICBib3JkZXItcmFkaXVzOiAwLjJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxufVxcbi53YXZlcy1pbnB1dC13cmFwcGVyIC53YXZlcy1idXR0b24taW5wdXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi53YXZlcy1jaXJjbGUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDIuNWVtO1xcbiAgaGVpZ2h0OiAyLjVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAyLjVlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIC13ZWJraXQtbWFzay1pbWFnZTogbm9uZTtcXG59XFxuXFxuLndhdmVzLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4vKiBGaXJlZm94IEJ1ZzogbGluayBub3QgdHJpZ2dlcmVkICovXFxuLndhdmVzLWVmZmVjdCAud2F2ZXMtcmlwcGxlIHtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG5cXG4ubW9kYWwge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXgtaGVpZ2h0OiA3MCU7XFxuICB3aWR0aDogNTUlO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIHdpbGwtY2hhbmdlOiB0b3AsIG9wYWNpdHk7XFxufVxcbi5tb2RhbDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgLm1vZGFsIHtcXG4gICAgd2lkdGg6IDgwJTtcXG4gIH1cXG59XFxuLm1vZGFsIGgxLCAubW9kYWwgaDIsIC5tb2RhbCBoMywgLm1vZGFsIGg0IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5tb2RhbCAubW9kYWwtY29udGVudCB7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG4ubW9kYWwgLm1vZGFsLWNsb3NlIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLm1vZGFsIC5tb2RhbC1mb290ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgcGFkZGluZzogNHB4IDZweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5tb2RhbCAubW9kYWwtZm9vdGVyIC5idG4sIC5tb2RhbCAubW9kYWwtZm9vdGVyIC5idG4tc21hbGwsIC5tb2RhbCAubW9kYWwtZm9vdGVyIC5idG4tbGFyZ2UsIC5tb2RhbCAubW9kYWwtZm9vdGVyIC5idG4tZmxhdCB7XFxuICBtYXJnaW46IDZweCAwO1xcbn1cXG4ubW9kYWwgLm1vZGFsLWhlYWRlciB7XFxuICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBwYWRkaW5nOiA2cHggNHB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLm1vZGFsIC5tb2RhbC1oZWFkZXIgLmJ0biwgLm1vZGFsIC5tb2RhbC1oZWFkZXIgLmJ0bi1zbWFsbCwgLm1vZGFsIC5tb2RhbC1oZWFkZXIgLmJ0bi1sYXJnZSwgLm1vZGFsIC5tb2RhbC1oZWFkZXIgLmJ0bi1mbGF0IHtcXG4gIG1hcmdpbjogNnB4IDA7XFxufVxcblxcbi5tb2RhbC1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIHRvcDogLTI1JTtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTI1JTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWxsLWNoYW5nZTogb3BhY2l0eTtcXG59XFxuXFxuLm1vZGFsLm1vZGFsLWZpeGVkLWZvb3RlciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgaGVpZ2h0OiA3MCU7XFxufVxcbi5tb2RhbC5tb2RhbC1maXhlZC1mb290ZXIgLm1vZGFsLWNvbnRlbnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5tb2RhbC5tb2RhbC1maXhlZC1mb290ZXIgLm1vZGFsLWZvb3RlciB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbn1cXG5cXG4ubW9kYWwuYm90dG9tLXNoZWV0IHtcXG4gIHRvcDogYXV0bztcXG4gIGJvdHRvbTogLTEwMCU7XFxuICBtYXJnaW46IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IDQ1JTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICB3aWxsLWNoYW5nZTogYm90dG9tLCBvcGFjaXR5O1xcbn1cXG5cXG5odG1sLFxcbmJvZHksXFxuI3Jvb3Qge1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4qIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG4ubm9zZWxlY3Qge1xcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOyAvKiBpT1MgU2FmYXJpICovXFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyAvKiBTYWZhcmkgKi9cXG4gIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsgLyogS29ucXVlcm9yIEhUTUwgKi9cXG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7IC8qIE9sZCB2ZXJzaW9ucyBvZiBGaXJlZm94ICovXFxuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIEludGVybmV0IEV4cGxvcmVyL0VkZ2UgKi9cXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLyogTm9uLXByZWZpeGVkIHZlcnNpb24sIGN1cnJlbnRseVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IENocm9tZSwgRWRnZSwgT3BlcmEgYW5kIEZpcmVmb3ggKi9cXG59XFxuXFxudWw6bm90KC5icm93c2VyLWRlZmF1bHQpIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxudWw6bm90KC5icm93c2VyLWRlZmF1bHQpID4gbGkge1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiAjMDM5YmU1O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4ucmlnaHQtYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcblxcbi5jZW50ZXItYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4udi1jZW50ZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5tYjEge1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG59XFxuXFxuLmNvbGxlY3Rpb24ge1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uaG92ZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcbiAgbWluLWhlaWdodDogODRweDtcXG4gIHBhZGRpbmctbGVmdDogNzJweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXI6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlLFxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIDpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDQycHg7XFxuICBoZWlnaHQ6IDQycHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgbGVmdDogMTVweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIGkuY2lyY2xlIHtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGxpbmUtaGVpZ2h0OiA0MnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciAudGl0bGUge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciBwIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTZweDtcXG4gIHJpZ2h0OiAxNnB4O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGNvbG9yOiAjZWFmYWY5O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmFjdGl2ZSAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5jb2xsZWN0aW9uIGEuY29sbGVjdGlvbi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgdHJhbnNpdGlvbjogMC4yNXM7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuLmNvbGxlY3Rpb24gYS5jb2xsZWN0aW9uLWl0ZW06bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciB7XFxuICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxufVxcblxcbi5zZWNvbmRhcnktY29udGVudCB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIC5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLm1vZGFsLW92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIHBhZGRpbmc6IDIwcHggMCAyMHB4IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICB6LWluZGV4OiA5OTk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5tb2RhbC1vdmVybGF5IC5pbm5lcmZvcm0ge1xcbiAgbWF4LXdpZHRoOiA2NTBweDtcXG59XFxuLm1vZGFsLW92ZXJsYXkgLmlubmVyZm9ybSBmb3JtIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKipcXG4gIE1lZGlhIFF1ZXJ5IENsYXNzZXNcXG4qKioqKioqKioqKioqKioqKioqKioqL1xcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDYwMHB4KSB7XFxuICAuaGlkZS1vbi1zbWFsbC1vbmx5LCAuaGlkZS1vbi1zbWFsbC1hbmQtZG93biB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5oaWRlLW9uLW1lZC1hbmQtZG93biB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNjAxcHgpIHtcXG4gIC5oaWRlLW9uLW1lZC1hbmQtdXAge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5OTJweCkge1xcbiAgLmhpZGUtb24tbWVkLW9ubHkge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5M3B4KSB7XFxuICAuaGlkZS1vbi1sYXJnZS1vbmx5IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAxMjAxcHgpIHtcXG4gIC5oaWRlLW9uLWV4dHJhLWxhcmdlLW9ubHkge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDEyMDFweCkge1xcbiAgLnNob3ctb24tZXh0cmEtbGFyZ2Uge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLnNob3ctb24tbGFyZ2Uge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTkycHgpIHtcXG4gIC5zaG93LW9uLW1lZGl1bSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDYwMHB4KSB7XFxuICAuc2hvdy1vbi1zbWFsbCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAuc2hvdy1vbi1tZWRpdW0tYW5kLXVwIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5zaG93LW9uLW1lZGl1bS1hbmQtZG93biB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDYwMHB4KSB7XFxuICAuY2VudGVyLW9uLXNtYWxsLW9ubHkge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB9XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqXFxuICBVdGlsaXR5IENsYXNzZXNcXG4qKioqKioqKioqKioqKioqKioqL1xcbi5oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxlZnQtYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLnJpZ2h0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5cXG4uY2VudGVyLCAuY2VudGVyLWFsaWduIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxlZnQge1xcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG59XFxuXFxuLnJpZ2h0IHtcXG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubm8tc2VsZWN0IHtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uY2lyY2xlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLmNlbnRlci1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbn1cXG5cXG4udHJ1bmNhdGUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cXG4ubm8tcGFkZGluZyB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbnNwYW4uYmFkZ2Uge1xcbiAgbWluLXdpZHRoOiAzcmVtO1xcbiAgcGFkZGluZzogMCA2cHg7XFxuICBtYXJnaW4tbGVmdDogMTRweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgaGVpZ2h0OiAyMnB4O1xcbiAgY29sb3I6ICM3NTc1NzU7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5zcGFuLmJhZGdlLm5ldyB7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcbnNwYW4uYmFkZ2UubmV3OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIgbmV3XFxcIjtcXG59XFxuc3Bhbi5iYWRnZVtkYXRhLWJhZGdlLWNhcHRpb25dOjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiIFxcXCIgYXR0cihkYXRhLWJhZGdlLWNhcHRpb24pO1xcbn1cXG5cXG5uYXYgdWwgYSBzcGFuLmJhZGdlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZsb2F0OiBub25lO1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgaGVpZ2h0OiAyMnB4O1xcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYXV0bztcXG59XFxuXFxuLmNvbGxlY3Rpb24taXRlbSBzcGFuLmJhZGdlIHtcXG4gIG1hcmdpbi10b3A6IGNhbGMoMC43NXJlbSAtIDExcHgpO1xcbn1cXG5cXG4uY29sbGFwc2libGUgc3Bhbi5iYWRnZSB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnNpZGVuYXYgc3Bhbi5iYWRnZSB7XFxuICBtYXJnaW4tdG9wOiAxMS41cHg7XFxufVxcblxcbnRhYmxlIHNwYW4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZmxvYXQ6IG5vbmU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLmNoaXAge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRlNGU0O1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XFxufVxcbi5jaGlwOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5jaGlwID4gaW1nIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWFyZ2luOiAwIDhweCAwIC0xMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgd2lkdGg6IDMycHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5jaGlwIC5jbG9zZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG5cXG4uY2hpcHMge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5ZTllOWU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgbWFyZ2luOiAwIDAgOHB4IDA7XFxuICBtaW4taGVpZ2h0OiA0NXB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbn1cXG4uY2hpcHMuZm9jdXMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyNmE2OWE7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgIzI2YTY5YTtcXG59XFxuLmNoaXBzOmhvdmVyIHtcXG4gIGN1cnNvcjogdGV4dDtcXG59XFxuLmNoaXBzIC5pbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgYm9yZGVyOiAwO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgb3V0bGluZTogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIHdpZHRoOiAxMjBweCAhaW1wb3J0YW50O1xcbn1cXG4uY2hpcHMgLmlucHV0OmZvY3VzIHtcXG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uY2hpcHMgLmF1dG9jb21wbGV0ZS1jb250ZW50IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4ucHJlZml4IH4gLmNoaXBzIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbiAgd2lkdGg6IDkyJTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG59XFxuXFxuLmNoaXBzOmVtcHR5IH4gbGFiZWwge1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0MCUpO1xcbn1cXG5cXG4uY29sbGFwc2libGUge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkO1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBwYWRkaW5nOiAxcmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xcbn1cXG4uY29sbGFwc2libGUtaGVhZGVyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5jb2xsYXBzaWJsZS1oZWFkZXIgaSB7XFxuICB3aWR0aDogMnJlbTtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCAuY29sbGFwc2libGUtaGVhZGVyOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBwYWRkaW5nOiAycmVtO1xcbn1cXG5cXG4uc2lkZW5hdiAuY29sbGFwc2libGUsXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZSBsaSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUgbGkge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWhlYWRlcixcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBwYWRkaW5nOiAwIDE1cHg7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1oZWFkZXI6aG92ZXIsXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWhlYWRlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtaGVhZGVyIGksXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWhlYWRlciBpIHtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtYm9keSB7XFxuICBib3JkZXI6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSBsaSBhLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1ib2R5IGxpIGEge1xcbiAgcGFkZGluZzogMCAyMi41cHggMCAzMHB4O1xcbn1cXG5cXG4uY29sbGFwc2libGUucG9wb3V0IHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5jb2xsYXBzaWJsZS5wb3BvdXQgPiBsaSB7XFxuICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTYpLCAwIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIG1hcmdpbjogMCAyNHB4O1xcbiAgdHJhbnNpdGlvbjogbWFyZ2luIDAuMzVzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcXG59XFxuLmNvbGxhcHNpYmxlLnBvcG91dCA+IGxpLmFjdGl2ZSB7XFxuICBib3gtc2hhZG93OiAwIDVweCAxMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE4KSwgMCA0cHggMTVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XFxuICBtYXJnaW46IDE2cHggMDtcXG59XFxuXFxuLmNvbGxlY3Rpb24ge1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIG1pbi1oZWlnaHQ6IDg0cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSxcXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciA6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA0MnB4O1xcbiAgaGVpZ2h0OiA0MnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxlZnQ6IDE1cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciBpLmNpcmNsZSB7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBsaW5lLWhlaWdodDogNDJweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgLnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDE2cHg7XFxuICByaWdodDogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBjb2xvcjogI2VhZmFmOTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hY3RpdmUgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHRyYW5zaXRpb246IDAuMjVzO1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbi5jb2xsZWN0aW9uIGEuY29sbGVjdGlvbi1pdGVtOm5vdCguYWN0aXZlKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1pdGVtIHtcXG4gIHBhZGRpbmctbGVmdDogMzBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbn1cXG4uY29sbGVjdGlvbiAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcblxcbnNlbGVjdDpmb2N1cyB7XFxuICBvdXRsaW5lOiAxcHggc29saWQgI2M5ZjNlZjtcXG59XFxuXFxuYnV0dG9uOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmFiN2E5O1xcbn1cXG5cXG5sYWJlbCB7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIGNvbG9yOiAjOWU5ZTllO1xcbn1cXG5cXG4vKiBUZXh0IElucHV0cyArIFRleHRhcmVhXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG4vKiBTdHlsZSBQbGFjZWhvbGRlcnMgKi9cXG46OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjZDFkMWQxO1xcbn1cXG5cXG4vKiBUZXh0IGlucHV0cyAqL1xcbmlucHV0Om5vdChbdHlwZV0pLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbnRleHRhcmVhLnRleHRhcmVhIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5ZTllOWU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbWFyZ2luOiAwIDAgOHB4IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzLCBib3JkZXIgMC4zcztcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6ZGlzYWJsZWQsIGlucHV0Om5vdChbdHlwZV0pW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbnRleHRhcmVhLnRleHRhcmVhOmRpc2FibGVkLFxcbnRleHRhcmVhLnRleHRhcmVhW3JlYWRvbmx5PXJlYWRvbmx5XSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6ZGlzYWJsZWQgKyBsYWJlbCwgaW5wdXQ6bm90KFt0eXBlXSlbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmRpc2FibGVkICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWFbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzOm5vdChbcmVhZG9ubHldKSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzI2YTY5YTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjMjZhNjlhO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCB7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMudmFsaWQgfiBsYWJlbCB7XFxuICBjb2xvcjogIzRjYWY1MDtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB+IGxhYmVsIHtcXG4gIGNvbG9yOiAjZjQ0MzM2O1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYS52YWxpZGF0ZSArIGxhYmVsIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4vKiBWYWxpZGF0aW9uIFNhc3MgUGxhY2Vob2xkZXJzICovXFxuLnNlbGVjdC13cmFwcGVyLnZhbGlkID4gaW5wdXQuc2VsZWN0LWRyb3Bkb3duLCBpbnB1dDpub3QoW3R5cGVdKS52YWxpZCwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxudGV4dGFyZWEudGV4dGFyZWEudmFsaWQsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMudmFsaWQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0Y2FmNTA7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgIzRjYWY1MDtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLmludmFsaWQgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd24sIC5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkID4gaW5wdXQuc2VsZWN0LWRyb3Bkb3duOmZvY3VzLCBpbnB1dDpub3QoW3R5cGVdKS5pbnZhbGlkLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxudGV4dGFyZWEudGV4dGFyZWEuaW52YWxpZCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy5pbnZhbGlkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjQ0MzM2O1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICNmNDQzMzY7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSwgLnNlbGVjdC13cmFwcGVyLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sIGlucHV0Om5vdChbdHlwZV0pLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sIGlucHV0Om5vdChbdHlwZV0pLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG50ZXh0YXJlYS50ZXh0YXJlYS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0ge1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWEudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIge1xcbiAgY29udGVudDogYXR0cihkYXRhLXN1Y2Nlc3MpO1xcbiAgY29sb3I6ICM0Y2FmNTA7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWEuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1lcnJvcik7XFxuICBjb2xvcjogI2Y0NDMzNjtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyICsgbGFiZWw6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhICsgbGFiZWw6YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5IGVhc2Utb3V0LCAwLjJzIGNvbG9yIGVhc2Utb3V0O1xcbn1cXG5cXG4uaW5wdXQtZmllbGQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLXRvcDogMXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcbi5pbnB1dC1maWVsZC5pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIG1hcmdpbi1sZWZ0OiA1cHg7XFxufVxcbi5pbnB1dC1maWVsZC5pbmxpbmUgaW5wdXQsXFxuLmlucHV0LWZpZWxkLmlubGluZSAuc2VsZWN0LWRyb3Bkb3duIHtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcbi5pbnB1dC1maWVsZC5jb2wgbGFiZWwge1xcbiAgbGVmdDogMC41cmVtO1xcbn1cXG4uaW5wdXQtZmllbGQuY29sIC5wcmVmaXggfiBsYWJlbCxcXG4uaW5wdXQtZmllbGQuY29sIC5wcmVmaXggfiAudmFsaWRhdGUgfiBsYWJlbCB7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSAtIDFyZW0pO1xcbn1cXG4uaW5wdXQtZmllbGQgPiBsYWJlbCB7XFxuICBjb2xvcjogIzllOWU5ZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjdXJzb3I6IHRleHQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLW91dCwgY29sb3IgMC4ycyBlYXNlLW91dDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XFxuICB0ZXh0LWFsaWduOiBpbml0aWFsO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xcbn1cXG4uaW5wdXQtZmllbGQgPiBsYWJlbDpub3QoLmxhYmVsLWljb24pLmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHNjYWxlKDAuOCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxufVxcbi5pbnB1dC1maWVsZCA+IGlucHV0W3R5cGVdOi13ZWJraXQtYXV0b2ZpbGw6bm90KC5icm93c2VyLWRlZmF1bHQpOm5vdChbdHlwZT1zZWFyY2hdKSArIGxhYmVsLCAuaW5wdXQtZmllbGQgPiBpbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsLCAuaW5wdXQtZmllbGQgPiBpbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTRweCkgc2NhbGUoMC44KTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG59XFxuLmlucHV0LWZpZWxkIC5oZWxwZXItdGV4dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtaW4taGVpZ2h0OiAxOHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcXG59XFxuLmlucHV0LWZpZWxkIC5oZWxwZXItdGV4dDo6YWZ0ZXIge1xcbiAgb3BhY2l0eTogMTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA1NnB4O1xcbiAgZm9udC1zaXplOiAycmVtO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcXG59XFxuLmlucHV0LWZpZWxkIC5wcmVmaXguYWN0aXZlIHtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IGlucHV0LFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gdGV4dGFyZWEsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiBsYWJlbCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IC52YWxpZGF0ZSB+IGxhYmVsLFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gLmhlbHBlci10ZXh0LFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gLmF1dG9jb21wbGV0ZS1jb250ZW50IHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbiAgd2lkdGg6IDkyJTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG59XFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiBsYWJlbCB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5pbnB1dC1maWVsZCAucHJlZml4IH4gaW5wdXQge1xcbiAgICB3aWR0aDogODYlO1xcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxuICB9XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDYwMHB4KSB7XFxuICAuaW5wdXQtZmllbGQgLnByZWZpeCB+IGlucHV0IHtcXG4gICAgd2lkdGg6IDgwJTtcXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbiAgfVxcbn1cXG5cXG4vKiBTZWFyY2ggRmllbGQgKi9cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGJhY2tncm91bmQtY29sb3I7XFxufVxcbi5uYXYtd3JhcHBlciAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdIHtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIHBhZGRpbmctbGVmdDogNHJlbTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0cmVtKTtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICM0NDQ7XFxufVxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWwgaSwgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXTpmb2N1czpub3QoLmJyb3dzZXItZGVmYXVsdCkgfiAubWRpLW5hdmlnYXRpb24tY2xvc2UsIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpIH4gLm1hdGVyaWFsLWljb25zIHtcXG4gIGNvbG9yOiAjNDQ0O1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdICsgLmxhYmVsLWljb24ge1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbiAgbGVmdDogMXJlbTtcXG59XFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB+IC5tZGktbmF2aWdhdGlvbi1jbG9zZSwgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB+IC5tYXRlcmlhbC1pY29ucyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMXJlbTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIHRyYW5zaXRpb246IDAuM3MgY29sb3I7XFxufVxcblxcbi8qIFRleHRhcmVhICovXFxudGV4dGFyZWEge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxudGV4dGFyZWEudGV4dGFyZWEge1xcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjsgLyogcHJldmVudHMgc2Nyb2xsIGJhciBmbGFzaCAqL1xcbiAgcGFkZGluZzogMC44cmVtIDAgMC44cmVtIDA7IC8qIHByZXZlbnRzIHRleHQganVtcCBvbiBFbnRlciBrZXlwcmVzcyAqL1xcbiAgcmVzaXplOiBub25lO1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5oaWRkZW5kaXYge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgLyogZnV0dXJlIHZlcnNpb24gb2YgZGVwcmVjYXRlZCAnd29yZC13cmFwJyAqL1xcbiAgcGFkZGluZy10b3A6IDEuMnJlbTsgLyogcHJldmVudHMgdGV4dCBqdW1wIG9uIEVudGVyIGtleXByZXNzICovXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuXFxuLyogQXV0b2NvbXBsZXRlICovXFxuLmF1dG9jb21wbGV0ZS1jb250ZW50IGxpIC5oaWdobGlnaHQge1xcbiAgY29sb3I6ICM0NDQ7XFxufVxcbi5hdXRvY29tcGxldGUtY29udGVudCBsaSBpbWcge1xcbiAgbWFyZ2luOiA1cHggMTVweDtcXG59XFxuXFxuLyogQ2hhcmFjdGVyIENvdW50ZXIgKi9cXG4uY2hhcmFjdGVyLWNvdW50ZXIge1xcbiAgbWluLWhlaWdodDogMThweDtcXG59XFxuXFxuLyogUmFkaW8gQnV0dG9uc1xcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCksXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW4sXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmctbGVmdDogMzVweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMjVweDtcXG4gIGxpbmUtaGVpZ2h0OiAyNXB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgdHJhbnNpdGlvbjogMC4yOHMgZWFzZTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG5bdHlwZT1yYWRpb10gKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb10gKyBzcGFuOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIG1hcmdpbjogNHB4O1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICB6LWluZGV4OiAwO1xcbiAgdHJhbnNpdGlvbjogMC4yOHMgZWFzZTtcXG59XFxuXFxuLyogVW5jaGVja2VkIHN0eWxlcyAqL1xcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YWZ0ZXIge1xcbiAgYm9yZGVyOiAycHggc29saWQgIzVhNWE1YTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcblxcbi8qIENoZWNrZWQgc3R5bGVzICovXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICMyNmE2OWE7XFxufVxcblxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7XFxufVxcblxcbi8qIFJhZGlvIFdpdGggZ2FwICovXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC41KTtcXG59XFxuXFxuLyogRm9jdXNlZCBzdHlsZXMgKi9cXG5bdHlwZT1yYWRpb10udGFiYmVkOmZvY3VzICsgc3BhbjpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcbi8qIERpc2FibGVkIFJhZGlvIFdpdGggZ2FwICovXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLyogRGlzYWJsZWQgc3R5bGUgKi9cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcblt0eXBlPXJhZGlvXTpkaXNhYmxlZCArIHNwYW4ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcblt0eXBlPXJhZGlvXTpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGJvcmRlci1jb2xvcjogIzk0OTQ5NDtcXG59XFxuXFxuLyogQ2hlY2tib3hlc1xcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLyogUmVtb3ZlIGRlZmF1bHQgY2hlY2tib3ggKi9cXG5bdHlwZT1jaGVja2JveF06bm90KDpjaGVja2VkKSxcXG5bdHlwZT1jaGVja2JveF06Y2hlY2tlZCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcblt0eXBlPWNoZWNrYm94XSB7XFxuICAvKiBjaGVja2JveCBhc3BlY3QgKi9cXG59XFxuW3R5cGU9Y2hlY2tib3hdICsgc3Bhbjpub3QoLmxldmVyKSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDM1cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDI1cHg7XFxuICBsaW5lLWhlaWdodDogMjVweDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5bdHlwZT1jaGVja2JveF0gKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSwgW3R5cGU9Y2hlY2tib3hdOm5vdCguZmlsbGVkLWluKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICB6LWluZGV4OiAwO1xcbiAgYm9yZGVyOiAycHggc29saWQgIzVhNWE1YTtcXG4gIGJvcmRlci1yYWRpdXM6IDFweDtcXG4gIG1hcmdpbi10b3A6IDNweDtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblt0eXBlPWNoZWNrYm94XTpub3QoLmZpbGxlZC1pbikgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlcjogMDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcblt0eXBlPWNoZWNrYm94XTpub3QoOmNoZWNrZWQpOmRpc2FibGVkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLnRhYmJlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5cXG5bdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIHRvcDogLTRweDtcXG4gIGxlZnQ6IC01cHg7XFxuICB3aWR0aDogMTJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMyNmE2OWE7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0MGRlZyk7XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxufVxcblt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG4vKiBJbmRldGVybWluYXRlIGNoZWNrYm94ICovXFxuW3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGUgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB0b3A6IC0xMXB4O1xcbiAgbGVmdDogLTEycHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIGJvcmRlci10b3A6IG5vbmU7XFxuICBib3JkZXItbGVmdDogbm9uZTtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICMyNmE2OWE7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTpkaXNhYmxlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbiArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUsXFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbiArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBsZWZ0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogLjFzIGRlbGF5IGlzIGZvciBjaGVjayBhbmltYXRpb24gKi9cXG4gIHRyYW5zaXRpb246IGJvcmRlciAwLjI1cywgYmFja2dyb3VuZC1jb2xvciAwLjI1cywgd2lkdGggMC4ycyAwLjFzLCBoZWlnaHQgMC4ycyAwLjFzLCB0b3AgMC4ycyAwLjFzLCBsZWZ0IDAuMnMgMC4xcztcXG4gIHotaW5kZXg6IDE7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBsZWZ0OiA2cHg7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVooMzdkZWcpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGhlaWdodDogMjBweDtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjNWE1YTVhO1xcbiAgdG9wOiAwcHg7XFxuICB6LWluZGV4OiAwO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAxcHg7XFxuICB3aWR0aDogOHB4O1xcbiAgaGVpZ2h0OiAxM3B4O1xcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjtcXG4gIHRyYW5zZm9ybTogcm90YXRlWigzN2RlZyk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIHotaW5kZXg6IDA7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4udGFiYmVkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3JkZXItY29sb3I6ICM1YTVhNWE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4udGFiYmVkOmNoZWNrZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBib3JkZXItY29sb3I6ICMyNmE2OWE7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5NDk0OTQ7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5NDk0OTQ7XFxuICBib3JkZXItY29sb3I6ICM5NDk0OTQ7XFxufVxcblxcbi8qIFN3aXRjaFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLnN3aXRjaCxcXG4uc3dpdGNoICoge1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5sZXZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODRjN2MxO1xcbn1cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAubGV2ZXI6YmVmb3JlLCAuc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAubGV2ZXI6YWZ0ZXIge1xcbiAgbGVmdDogMThweDtcXG59XFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDM2cHg7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzgpO1xcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcyBlYXNlO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIG1hcmdpbjogMCAxNnB4O1xcbn1cXG4uc3dpdGNoIGxhYmVsIC5sZXZlcjpiZWZvcmUsIC5zd2l0Y2ggbGFiZWwgLmxldmVyOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAtM3B4O1xcbiAgdHJhbnNpdGlvbjogbGVmdCAwLjNzIGVhc2UsIGJhY2tncm91bmQgMC4zcyBlYXNlLCBib3gtc2hhZG93IDAuMXMgZWFzZSwgdHJhbnNmb3JtIDAuMXMgZWFzZTtcXG59XFxuLnN3aXRjaCBsYWJlbCAubGV2ZXI6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzgsIDE2NiwgMTU0LCAwLjE1KTtcXG59XFxuLnN3aXRjaCBsYWJlbCAubGV2ZXI6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YxRjFGMTtcXG4gIGJveC1zaGFkb3c6IDBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XFxufVxcblxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6bm90KDpkaXNhYmxlZCkgfiAubGV2ZXI6YWN0aXZlOjpiZWZvcmUsXFxuaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpub3QoOmRpc2FibGVkKS50YWJiZWQ6Zm9jdXMgfiAubGV2ZXI6OmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDIuNCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM4LCAxNjYsIDE1NCwgMC4xNSk7XFxufVxcblxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpIH4gLmxldmVyOmFjdGl2ZTpiZWZvcmUsXFxuaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCkudGFiYmVkOmZvY3VzIH4gLmxldmVyOjpiZWZvcmUge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgyLjQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG59XFxuXFxuLnN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XVtkaXNhYmxlZF0gKyAubGV2ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XVtkaXNhYmxlZF0gKyAubGV2ZXI6YWZ0ZXIsXFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XVtkaXNhYmxlZF06Y2hlY2tlZCArIC5sZXZlcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5cXG4vKiBTZWxlY3QgRmllbGRcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5zZWxlY3QuYnJvd3Nlci1kZWZhdWx0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5zZWxlY3Qge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiA1cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZjJmMmYyO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbn1cXG5cXG4uc2VsZWN0LWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnNlbGVjdC13cmFwcGVyLnZhbGlkICsgbGFiZWwsIC5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkICsgbGFiZWwge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnNlbGVjdC13cmFwcGVyIGlucHV0LnNlbGVjdC1kcm9wZG93biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBtYXJnaW46IDAgMCA4cHggMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnNlbGVjdC13cmFwcGVyIGlucHV0LnNlbGVjdC1kcm9wZG93bjpmb2N1cyB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzI2YTY5YTtcXG59XFxuLnNlbGVjdC13cmFwcGVyIC5jYXJldCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIG1hcmdpbjogYXV0byAwO1xcbiAgei1pbmRleDogMDtcXG4gIGZpbGw6IHJnYmEoMCwgMCwgMCwgMC44Nyk7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciArIGxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTI2cHg7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG59XFxuXFxuc2VsZWN0OmRpc2FibGVkIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIuZGlzYWJsZWQgKyBsYWJlbCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuLnNlbGVjdC13cmFwcGVyLmRpc2FibGVkIC5jYXJldCB7XFxuICBmaWxsOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIgaW5wdXQuc2VsZWN0LWRyb3Bkb3duOmRpc2FibGVkIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciBpIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcbi5zZWxlY3QtZHJvcGRvd24gbGkuZGlzYWJsZWQsXFxuLnNlbGVjdC1kcm9wZG93biBsaS5kaXNhYmxlZCA+IHNwYW4sXFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbmJvZHkua2V5Ym9hcmQtZm9jdXNlZCAuc2VsZWN0LWRyb3Bkb3duLmRyb3Bkb3duLWNvbnRlbnQgbGk6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93bi5kcm9wZG93bi1jb250ZW50IGxpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxufVxcbi5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCBsaS5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbn1cXG5cXG4ucHJlZml4IH4gLnNlbGVjdC13cmFwcGVyIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbiAgd2lkdGg6IDkyJTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG59XFxuXFxuLnByZWZpeCB+IGxhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duIGxpIGltZyB7XFxuICBtYXJnaW46IDVweCAxNXB4O1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLm9wdGdyb3VwLnNlbGVjdGVkID4gc3BhbiB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLm9wdGdyb3VwID4gc3BhbiB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpO1xcbn1cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLm9wdGdyb3VwIH4gbGkub3B0Z3JvdXAtb3B0aW9uIHtcXG4gIHBhZGRpbmctbGVmdDogMXJlbTtcXG59XFxuXFxuLyogRmlsZSBJbnB1dFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLmZpbGUtZmllbGQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uZmlsZS1maWVsZCAuZmlsZS1wYXRoLXdyYXBwZXIge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmctbGVmdDogMTBweDtcXG59XFxuLmZpbGUtZmllbGQgaW5wdXQuZmlsZS1wYXRoIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4uZmlsZS1maWVsZCAuYnRuLCAuZmlsZS1maWVsZCAuYnRuLXNtYWxsLCAuZmlsZS1maWVsZCAuYnRuLWxhcmdlIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbi5maWxlLWZpZWxkIHNwYW4ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uZmlsZS1maWVsZCBpbnB1dFt0eXBlPWZpbGVdIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG9wYWNpdHk6IDA7XFxuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XFxufVxcbi5maWxlLWZpZWxkIGlucHV0W3R5cGU9ZmlsZV06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi8qIFJhbmdlXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG4ucmFuZ2UtZmllbGQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSxcXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxNXB4IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5pbnB1dFt0eXBlPXJhbmdlXTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICBsZWZ0OiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgbWFyZ2luLWxlZnQ6IDdweDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcbn1cXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYiAudmFsdWUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMzBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbiAgZm9udC1zaXplOiAwO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbn1cXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYi5hY3RpdmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIuYWN0aXZlIC52YWx1ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbiAgZm9udC1zaXplOiAxMHB4O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XFxuICBoZWlnaHQ6IDNweDtcXG4gIGJhY2tncm91bmQ6ICNjMmMwYzI7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWE7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3M7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcXG4gIG1hcmdpbjogLTVweCAwIDAgMDtcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMzgsIDE2NiwgMTU0LCAwLjI2KTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcbiAgLyogZml4IGZvciBGRiB1bmFibGUgdG8gYXBwbHkgZm9jdXMgc3R5bGUgYnVnICAqL1xcbiAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7XFxuICAvKnJlcXVpcmVkIGZvciBwcm9wZXIgdHJhY2sgc2l6aW5nIGluIEZGKi9cXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdHJhY2sge1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjYzJjMGMyO1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMTRweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YTtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcztcXG4gIG1hcmdpbi10b3A6IC01cHg7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOi1tb3otZm9jdXNyaW5nIHtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCAjZmZmO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxufVxcblxcbi5rZXlib2FyZC1mb2N1c2VkIGlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzOm5vdCguYWN0aXZlKTo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMzgsIDE2NiwgMTU0LCAwLjI2KTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFjayB7XFxuICBoZWlnaHQ6IDNweDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogNnB4IDA7XFxuICAvKnJlbW92ZSBkZWZhdWx0IHRpY2sgbWFya3MqL1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXIge1xcbiAgYmFja2dyb3VuZDogIzc3NztcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLXVwcGVyIHtcXG4gIGJhY2tncm91bmQ6ICNkZGQ7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdGh1bWIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzO1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi1tcy10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMzgsIDE2NiwgMTU0LCAwLjI2KTtcXG59XFxuXFxuLnBhcmFsbGF4IHtcXG4gIC8qIFNldCBhIHNwZWNpZmljIGhlaWdodCAqL1xcbiAgbWluLWhlaWdodDogNTAwcHg7XFxuICAvKiBDcmVhdGUgdGhlIHBhcmFsbGF4IHNjcm9sbGluZyBlZmZlY3QgKi9cXG4gIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcXG59XFxuXFxuKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5ib2R5IHtcXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbn1cXG5cXG4uc2NlbmUge1xcbiAgd2lkdGg6IDIwMHB4O1xcbiAgaGVpZ2h0OiAyMDBweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNDQ0M7XFxuICBtYXJnaW46IDgwcHg7XFxuICBwZXJzcGVjdGl2ZTogNDAwcHg7XFxufVxcblxcbi5jdWJlIHtcXG4gIHdpZHRoOiAyMDBweDtcXG4gIGhlaWdodDogMjAwcHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC00MDBweCk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMXM7XFxufVxcblxcbi5jdWJlLnNob3ctZnJvbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKDBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LXJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSgtOTBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LWJhY2sge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKC0xODBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LWxlZnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKDkwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy10b3Age1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVYKC05MGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctYm90dG9tIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWCg5MGRlZyk7XFxufVxcblxcbi5jdWJlX19mYWNlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAyMDBweDtcXG4gIGhlaWdodDogMjAwcHg7XFxuICBib3JkZXI6IDJweCBzb2xpZCBibGFjaztcXG4gIGxpbmUtaGVpZ2h0OiAyMDBweDtcXG4gIGZvbnQtc2l6ZTogNDBweDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgY29sb3I6IHdoaXRlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tZnJvbnQge1xcbiAgYmFja2dyb3VuZDogaHNsYSgwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1yaWdodCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDYwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1iYWNrIHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMTIwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1sZWZ0IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMTgwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS10b3Age1xcbiAgYmFja2dyb3VuZDogaHNsYSgyNDBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDMwMGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tZnJvbnQge1xcbiAgdHJhbnNmb3JtOiByb3RhdGVZKDBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tcmlnaHQge1xcbiAgdHJhbnNmb3JtOiByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWJhY2sge1xcbiAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1sZWZ0IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tdG9wIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWCg5MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1ib3R0b20ge1xcbiAgdHJhbnNmb3JtOiByb3RhdGVYKC05MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbmxhYmVsIHtcXG4gIG1hcmdpbi1yaWdodDogMTBweDtcXG59XFxuXFxuLmNvbnRhaW5lciB7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIG1heC13aWR0aDogMTI4MHB4O1xcbiAgd2lkdGg6IDkwJTtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNjAxcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICB3aWR0aDogODUlO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiA3MCU7XFxuICB9XFxufVxcbi5jb2wgLnJvdyB7XFxuICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcXG4gIG1hcmdpbi1yaWdodDogLTAuNXJlbTtcXG59XFxuXFxuLnNlY3Rpb24ge1xcbiAgcGFkZGluZy10b3A6IDFyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcXG59XFxuLnNlY3Rpb24ubm8tcGFkIHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5zZWN0aW9uLm5vLXBhZC1ib3Qge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5zZWN0aW9uLm5vLXBhZC10b3Age1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcblxcbi5yb3cge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcbn1cXG4ucm93OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogdGFibGU7XFxuICBjbGVhcjogYm90aDtcXG59XFxuLnJvdyAuY29sIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDAgMC41cmVtO1xcbiAgbWluLWhlaWdodDogMXB4O1xcbn1cXG4ucm93IC5jb2xbY2xhc3MqPXB1c2gtXSwgLnJvdyAuY29sW2NsYXNzKj1wdWxsLV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucm93IC5jb2wuczEge1xcbiAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMyIHtcXG4gIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczMge1xcbiAgd2lkdGg6IDI1JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczQge1xcbiAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNSB7XFxuICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM2IHtcXG4gIHdpZHRoOiA1MCU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM3IHtcXG4gIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczgge1xcbiAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zOSB7XFxuICB3aWR0aDogNzUlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMTAge1xcbiAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMTEge1xcbiAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMTIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMSB7XFxuICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczEge1xcbiAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMxIHtcXG4gIGxlZnQ6IDguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczIge1xcbiAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMiB7XFxuICByaWdodDogMTYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMyIHtcXG4gIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMzIHtcXG4gIG1hcmdpbi1sZWZ0OiAyNSU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMzIHtcXG4gIHJpZ2h0OiAyNSU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMzIHtcXG4gIGxlZnQ6IDI1JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zNCB7XFxuICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM0IHtcXG4gIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczQge1xcbiAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczUge1xcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNSB7XFxuICByaWdodDogNDEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM1IHtcXG4gIGxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM2IHtcXG4gIG1hcmdpbi1sZWZ0OiA1MCU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM2IHtcXG4gIHJpZ2h0OiA1MCU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM2IHtcXG4gIGxlZnQ6IDUwJTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zNyB7XFxuICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM3IHtcXG4gIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczcge1xcbiAgbGVmdDogNTguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczgge1xcbiAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zOCB7XFxuICByaWdodDogNjYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM4IHtcXG4gIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM5IHtcXG4gIG1hcmdpbi1sZWZ0OiA3NSU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM5IHtcXG4gIHJpZ2h0OiA3NSU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM5IHtcXG4gIGxlZnQ6IDc1JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMTAge1xcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMTAge1xcbiAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMTAge1xcbiAgbGVmdDogODMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczExIHtcXG4gIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczExIHtcXG4gIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczExIHtcXG4gIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMxMiB7XFxuICBtYXJnaW4tbGVmdDogMTAwJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczEyIHtcXG4gIHJpZ2h0OiAxMDAlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMTIge1xcbiAgbGVmdDogMTAwJTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNjAxcHgpIHtcXG4gIC5yb3cgLmNvbC5tMSB7XFxuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTIge1xcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMyB7XFxuICAgIHdpZHRoOiAyNSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tNCB7XFxuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm01IHtcXG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTYge1xcbiAgICB3aWR0aDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTcge1xcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tOCB7XFxuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm05IHtcXG4gICAgd2lkdGg6IDc1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0xMCB7XFxuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0xMSB7XFxuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0xMiB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMSB7XFxuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTEge1xcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0yIHtcXG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTIge1xcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTMge1xcbiAgICByaWdodDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTMge1xcbiAgICBsZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTQge1xcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tNCB7XFxuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW01IHtcXG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTUge1xcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTYge1xcbiAgICByaWdodDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTYge1xcbiAgICBsZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTcge1xcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tNyB7XFxuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW04IHtcXG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTgge1xcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTkge1xcbiAgICByaWdodDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTkge1xcbiAgICBsZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0xMCB7XFxuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0xMCB7XFxuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMTEge1xcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMTEge1xcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMTIge1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0xMiB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICB9XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5M3B4KSB7XFxuICAucm93IC5jb2wubDEge1xcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwyIHtcXG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDMge1xcbiAgICB3aWR0aDogMjUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDQge1xcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNSB7XFxuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw2IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw3IHtcXG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDgge1xcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sOSB7XFxuICAgIHdpZHRoOiA3NSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMTAge1xcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMTEge1xcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMTIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDEge1xcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwxIHtcXG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMiB7XFxuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwyIHtcXG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwzIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwzIHtcXG4gICAgcmlnaHQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwzIHtcXG4gICAgbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw0IHtcXG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDQge1xcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNSB7XFxuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw1IHtcXG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw2IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw2IHtcXG4gICAgcmlnaHQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw2IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw3IHtcXG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDcge1xcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sOCB7XFxuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw4IHtcXG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw5IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw5IHtcXG4gICAgcmlnaHQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw5IHtcXG4gICAgbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMTAge1xcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMTAge1xcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDExIHtcXG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDExIHtcXG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwxMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDEyIHtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMTIge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAxMjAxcHgpIHtcXG4gIC5yb3cgLmNvbC54bDEge1xcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMiB7XFxuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMyB7XFxuICAgIHdpZHRoOiAyNSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDQge1xcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDUge1xcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDYge1xcbiAgICB3aWR0aDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw3IHtcXG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw4IHtcXG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw5IHtcXG4gICAgd2lkdGg6IDc1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMTAge1xcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDExIHtcXG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwxMiB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwxIHtcXG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDEge1xcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDIge1xcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDIge1xcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwzIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMyB7XFxuICAgIHJpZ2h0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDMge1xcbiAgICBsZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsNCB7XFxuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsNCB7XFxuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDUge1xcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDUge1xcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw2IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsNiB7XFxuICAgIHJpZ2h0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDYge1xcbiAgICBsZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsNyB7XFxuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsNyB7XFxuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDgge1xcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDgge1xcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw5IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsOSB7XFxuICAgIHJpZ2h0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDkge1xcbiAgICBsZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDEwIHtcXG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwxMCB7XFxuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwxMSB7XFxuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMTEge1xcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwxMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwxMiB7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwxMiB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICB9XFxufVxcblxcbi5zaWRlbmF2IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHdpZHRoOiAzMDBweDtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMTAwJSArIDYwcHgpO1xcbiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSk7XFxuICBwYWRkaW5nLWJvdHRvbTogNjBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICB6LWluZGV4OiA5OTk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTA1JSk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMXM7XFxufVxcbi5zaWRlbmF2LnJpZ2h0LWFsaWduZWQge1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiBhdXRvO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4uc2lkZW5hdiBsaSB7XFxuICBmbG9hdDogbm9uZTtcXG59XFxuLnNpZGVuYXYgbGkgLmljb25TaWRlTGluayB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLnNpZGVuYXYgbGkgLmljb25TaWRlTGluayBzdmcge1xcbiAgc3Ryb2tlOiByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICB3aWR0aDogMzBweDtcXG59XFxuLnNpZGVuYXYgbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zaWRlbmF2IGxpLmFjdGl2ZSBzdmcge1xcbiAgc3Ryb2tlOiB3aGl0ZSAhaW1wb3J0YW50O1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi5zaWRlbmF2IGxpLmxhc3Qge1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIHRvcDogY2FsYygxMDAlIC0gNDVweCAtIDM1cHgpO1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGhlaWdodDogNDVweDtcXG4gIGxpbmUtaGVpZ2h0OiA0NXB4O1xcbiAgcGFkZGluZzogMCAzMHB4O1xcbn1cXG4uc2lkZW5hdiBsaSA+IGE6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0biwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1zbWFsbCwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1sYXJnZSwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbGF0LCAuc2lkZW5hdiBsaSA+IGEuYnRuLWZsb2F0aW5nIHtcXG4gIG1hcmdpbjogMTBweCAxNXB4O1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuLCAuc2lkZW5hdiBsaSA+IGEuYnRuLXNtYWxsLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWxhcmdlLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWZsb2F0aW5nIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuLWZsYXQge1xcbiAgY29sb3I6ICMzNDM0MzQ7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG46aG92ZXIsIC5zaWRlbmF2IGxpID4gYS5idG4tc21hbGw6aG92ZXIsIC5zaWRlbmF2IGxpID4gYS5idG4tbGFyZ2U6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQxNDE0MTtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbG9hdGluZzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzNDM0O1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEgPiBpLCAuc2lkZW5hdiBsaSA+IGEgPiBbY2xhc3NePW1kaS1dLFxcbi5zaWRlbmF2IGxpID4gYSBsaSA+IGEgPiBbY2xhc3MqPW1kaS1dLCAuc2lkZW5hdiBsaSA+IGEgPiBpLnMtaWNvbiB7XFxuICBmbG9hdDogbGVmdDtcXG4gIGhlaWdodDogNDVweDtcXG4gIGxpbmUtaGVpZ2h0OiA0NXB4O1xcbiAgbWFyZ2luOiAwIDMwcHggMCAwO1xcbiAgd2lkdGg6IDIyLjVweDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xcbn1cXG4uc2lkZW5hdiAuZGl2aWRlciB7XFxuICBtYXJnaW46IDcuNXB4IDAgMCAwO1xcbn1cXG4uc2lkZW5hdiAuc3ViaGVhZGVyIHtcXG4gIGN1cnNvcjogaW5pdGlhbDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDQ1cHg7XFxufVxcbi5zaWRlbmF2IC5zdWJoZWFkZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMzBweCAzMHB4IDA7XFxuICBtYXJnaW4tYm90dG9tOiA3LjVweDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyA+IGEge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyA+IGE6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmJhY2tncm91bmQge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5jaXJjbGUsXFxuLnNpZGVuYXYgLnVzZXItdmlldyAubmFtZSxcXG4uc2lkZW5hdiAudXNlci12aWV3IC5lbWFpbCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAuY2lyY2xlIHtcXG4gIGhlaWdodDogNjRweDtcXG4gIHdpZHRoOiA2NHB4O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5uYW1lLFxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmVtYWlsIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAyMi41cHg7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLm5hbWUge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmVtYWlsIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxNnB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLmRyYWctdGFyZ2V0IHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogOTk4O1xcbn1cXG4uZHJhZy10YXJnZXQucmlnaHQtYWxpZ25lZCB7XFxuICByaWdodDogMDtcXG59XFxuXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCB7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkLnJpZ2h0LWFsaWduZWQge1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiBhdXRvO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgLnNpZGVuYXYuc2lkZW5hdi1maXhlZCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTA1JSk7XFxuICB9XFxuICAuc2lkZW5hdi5zaWRlbmF2LWZpeGVkLnJpZ2h0LWFsaWduZWQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7XFxuICB9XFxuICAuc2lkZW5hdiA+IGEge1xcbiAgICBwYWRkaW5nOiAwIDE1cHg7XFxuICB9XFxuICAuc2lkZW5hdiAudXNlci12aWV3IHtcXG4gICAgcGFkZGluZzogMTVweCAxNXB4IDA7XFxuICB9XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUsXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGNhZjk7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUgYSxcXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkIC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUgYSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnNpZGVuYXYtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgaGVpZ2h0OiAxMjB2aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIHotaW5kZXg6IDk5NztcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi53aXRoLXNpZGUtbmF2LW9wZW4ge1xcbiAgcGFkZGluZy1sZWZ0OiAzMDBweDtcXG4gIHRyYW5zaXRpb246IHBhZGRpbmcgMXM7XFxufVxcblxcbi5idG4sIC5idG4tc21hbGwsIC5idG4tbGFyZ2UsXFxuLmJ0bi1mbGF0IHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMzZweDtcXG4gIGxpbmUtaGVpZ2h0OiAzNnB4O1xcbiAgcGFkZGluZzogMCAxNnB4O1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uYnRuLmRpc2FibGVkLFxcbi5idG4tZmxvYXRpbmcuZGlzYWJsZWQsXFxuLmJ0bi1sYXJnZS5kaXNhYmxlZCxcXG4uYnRuLXNtYWxsLmRpc2FibGVkLFxcbi5idG4tZmxhdC5kaXNhYmxlZCxcXG4uYnRuOmRpc2FibGVkLFxcbi5idG4tZmxvYXRpbmc6ZGlzYWJsZWQsXFxuLmJ0bi1sYXJnZTpkaXNhYmxlZCxcXG4uYnRuLXNtYWxsOmRpc2FibGVkLFxcbi5idG4tZmxhdDpkaXNhYmxlZCxcXG4uYnRuW2Rpc2FibGVkXSxcXG4uYnRuLWZsb2F0aW5nW2Rpc2FibGVkXSxcXG4uYnRuLWxhcmdlW2Rpc2FibGVkXSxcXG4uYnRuLXNtYWxsW2Rpc2FibGVkXSxcXG4uYnRuLWZsYXRbZGlzYWJsZWRdIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0RGREZERiAhaW1wb3J0YW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjOUY5RjlGICFpbXBvcnRhbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5idG4uZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1mbG9hdGluZy5kaXNhYmxlZDpob3ZlcixcXG4uYnRuLWxhcmdlLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tc21hbGwuZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1mbGF0LmRpc2FibGVkOmhvdmVyLFxcbi5idG46ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1mbG9hdGluZzpkaXNhYmxlZDpob3ZlcixcXG4uYnRuLWxhcmdlOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tc21hbGw6ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1mbGF0OmRpc2FibGVkOmhvdmVyLFxcbi5idG5bZGlzYWJsZWRdOmhvdmVyLFxcbi5idG4tZmxvYXRpbmdbZGlzYWJsZWRdOmhvdmVyLFxcbi5idG4tbGFyZ2VbZGlzYWJsZWRdOmhvdmVyLFxcbi5idG4tc21hbGxbZGlzYWJsZWRdOmhvdmVyLFxcbi5idG4tZmxhdFtkaXNhYmxlZF06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI0RGREZERiAhaW1wb3J0YW50O1xcbiAgY29sb3I6ICM5RjlGOUYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJ0bixcXG4uYnRuLXNtYWxsLFxcbi5idG4tbGFyZ2UsXFxuLmJ0bi1mbG9hdGluZyxcXG4uYnRuLWZsYXQge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmJ0biBpLFxcbi5idG4tZmxvYXRpbmcgaSxcXG4uYnRuLWxhcmdlIGksXFxuLmJ0bi1zbWFsbCBpLFxcbi5idG4tZmxhdCBpIHtcXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbi5idG46Zm9jdXMsIC5idG4tc21hbGw6Zm9jdXMsIC5idG4tbGFyZ2U6Zm9jdXMsXFxuLmJ0bi1mbG9hdGluZzpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWIxYjFiO1xcbn1cXG5cXG4uYnRuLCAuYnRuLXNtYWxsLCAuYnRuLWxhcmdlIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0MzQzNDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjVweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmJ0bjpob3ZlciwgLmJ0bi1zbWFsbDpob3ZlciwgLmJ0bi1sYXJnZTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDE0MTQxO1xcbn1cXG5cXG4uYnRuLWZsb2F0aW5nIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGNvbG9yOiAjZmZmO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHotaW5kZXg6IDE7XFxuICB3aWR0aDogNDBweDtcXG4gIGhlaWdodDogNDBweDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgcGFkZGluZzogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uYnRuLWZsb2F0aW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxufVxcbi5idG4tZmxvYXRpbmc6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLWxhcmdlIHtcXG4gIHdpZHRoOiA1NnB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tbGFyZ2UuaGFsZndheS1mYWIge1xcbiAgYm90dG9tOiAyOHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1sYXJnZSBpIHtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1zbWFsbCB7XFxuICB3aWR0aDogMzIuNHB4O1xcbiAgaGVpZ2h0OiAzMi40cHg7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLXNtYWxsLmhhbGZ3YXktZmFiIHtcXG4gIGJvdHRvbTogMTYuMnB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1zbWFsbCBpIHtcXG4gIGxpbmUtaGVpZ2h0OiAzMi40cHg7XFxufVxcbi5idG4tZmxvYXRpbmcuaGFsZndheS1mYWIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDI0cHg7XFxuICBib3R0b206IDIwcHg7XFxufVxcbi5idG4tZmxvYXRpbmcuaGFsZndheS1mYWIubGVmdCB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDI0cHg7XFxufVxcbi5idG4tZmxvYXRpbmcgaSB7XFxuICB3aWR0aDogaW5oZXJpdDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZm9udC1zaXplOiAxLjZyZW07XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG59XFxuXFxuYnV0dG9uLmJ0bi1mbG9hdGluZyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5maXhlZC1hY3Rpb24tYnRuIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHJpZ2h0OiAyM3B4O1xcbiAgYm90dG9tOiAyM3B4O1xcbiAgcGFkZGluZy10b3A6IDE1cHg7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgei1pbmRleDogOTk3O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5hY3RpdmUgdWwge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWxlZnQsIC5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB7XFxuICBwYWRkaW5nOiAwIDAgMCAxNXB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tbGVmdCB1bCwgLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHVsIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgcmlnaHQ6IDY0cHg7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGxlZnQ6IGF1dG87XFxuICAvKndpZHRoIDEwMCUgb25seSBnb2VzIHRvIHdpZHRoIG9mIGJ1dHRvbiBjb250YWluZXIgKi9cXG4gIHdpZHRoOiA1MDBweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWxlZnQgdWwgbGksIC5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCBsaSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IDcuNXB4IDE1cHggMCAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgcGFkZGluZzogMCAxNXB4IDAgMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHVsIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBkaXJlY3Rpb246IHJ0bDtcXG4gIGxlZnQ6IDY0cHg7XFxuICByaWdodDogYXV0bztcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHVsIGxpIHtcXG4gIG1hcmdpbjogNy41cHggMCAwIDE1cHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1ib3R0b20ge1xcbiAgcGFkZGluZzogMCAwIDE1cHggMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWJvdHRvbSB1bCB7XFxuICB0b3A6IDY0cHg7XFxuICBib3R0b206IGF1dG87XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tYm90dG9tIHVsIGxpIHtcXG4gIG1hcmdpbjogMTVweCAwIDAgMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyLmFjdGl2ZSA+IGEgaSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyIHVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyIHVsIGxpIHtcXG4gIGZsZXg6IDE7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB0cmFuc2l0aW9uOiBub25lO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyIHVsIGxpIGEge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbiAgei1pbmRleDogMTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCBsaSBhIGkge1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIHVsIHtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogNjRweDtcXG4gIG1hcmdpbjogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4gdWwgbGkge1xcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4gdWwgYS5idG4tZmxvYXRpbmcge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4gLmZhYi1iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogLTE7XFxuICB3aWR0aDogNDBweDtcXG4gIGhlaWdodDogNDBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbn1cXG5cXG4uYnRuLWZsYXQge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6ICMzNDM0MzQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XFxufVxcbi5idG4tZmxhdDpmb2N1cywgLmJ0bi1mbGF0OmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5idG4tZmxhdDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcbi5idG4tZmxhdC5kaXNhYmxlZCwgLmJ0bi1mbGF0LmJ0bi1mbGF0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgY29sb3I6ICNiM2IzYjMgIWltcG9ydGFudDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmJ0bi1sYXJnZSB7XFxuICBoZWlnaHQ6IDU0cHg7XFxuICBsaW5lLWhlaWdodDogNTRweDtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIHBhZGRpbmc6IDAgMjhweDtcXG59XFxuLmJ0bi1sYXJnZSBpIHtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbn1cXG5cXG4uYnRuLXNtYWxsIHtcXG4gIGhlaWdodDogMzIuNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDMyLjRweDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG59XFxuLmJ0bi1zbWFsbCBpIHtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbn1cXG5cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uY29tbXVuVGFiSGVhZGVyLCAudGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGhlaWdodDogMTAwcHg7XFxuICBwYWRkaW5nOiA0MHB4O1xcbn1cXG5cXG4udGFicyB7XFxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxNTBweCk7XFxuICBtYXJnaW4tdG9wOiAzMHB4O1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAhaW1wb3J0YW50O1xcbn1cXG4udGFicyAuaW5uZXJwYWdlIHtcXG4gIG1pbi1oZWlnaHQ6IDcwVkggIWltcG9ydGFudDtcXG59XFxuLnRhYnMgLnRhYnMtaGVhZGVyLW92ZXJsYXkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogMTAwcHg7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIwIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjNGZkO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIxIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMC4yNXR1cm4sICNjYmU3ZmUsICMzNWEyZmIpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDQwcHg7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIyIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjNGZkO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDQwcHg7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIwIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIxIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMC4yNXR1cm4sICM4MGM0ZmQsICMzNWEyZmIpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIyIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDQwcHg7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIwIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVhMmZiO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIxIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMC4yNXR1cm4sICM4MGM0ZmQsICNjYmU3ZmUpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjEgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIyIHtcXG4gIGZsZXg6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVhMmZiO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggNDBweCAwIDA7XFxufVxcbi50YWJzIC50YWItY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGJvcmRlci10b3A6IDA7XFxuICBtaW4taGVpZ2h0OiA3MHZoO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDQwcHggNDBweDtcXG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xcbn1cXG5cXG4ubG9hZGVyLW92ZXJsYXkge1xcbiAgei1pbmRleDogOTk5O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMiwgMTAwLCAxMDAsIDAuNjAzKTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4ubG9hZGVyLW92ZXJsYXkgLmxvYWRlciB7XFxuICBib3JkZXI6IDdweCBzb2xpZCAjZjNmM2YzOyAvKiBMaWdodCBncmV5ICovXFxuICBib3JkZXItdG9wOiA3cHggc29saWQgIzJlYTJjYzsgLyogQmx1ZSAqL1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDcwcHg7XFxuICBoZWlnaHQ6IDcwcHg7XFxuICBhbmltYXRpb246IHNwaW4gMnMgbGluZWFyIGluZmluaXRlO1xcbn1cXG4ubG9hZGVyLW92ZXJsYXkgLmxvYWRlci10ZXh0IHtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBmb250LXNpemU6IDI1cHg7XFxuICBjb2xvcjogIzJlYTJjYztcXG59XFxuQGtleWZyYW1lcyBzcGluIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuXFxuLmNhcmQtcGFuZWwge1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI1cztcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmNhcmQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjVzO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG4uY2FyZCAuY2FyZC10aXRsZSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG4uY2FyZCAuY2FyZC10aXRsZS5hY3RpdmF0b3Ige1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uY2FyZC5zbWFsbCwgLmNhcmQubWVkaXVtLCAuY2FyZC5sYXJnZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jYXJkLnNtYWxsIC5jYXJkLWltYWdlLCAuY2FyZC5tZWRpdW0gLmNhcmQtaW1hZ2UsIC5jYXJkLmxhcmdlIC5jYXJkLWltYWdlIHtcXG4gIG1heC1oZWlnaHQ6IDYwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5jYXJkLnNtYWxsIC5jYXJkLWltYWdlICsgLmNhcmQtY29udGVudCwgLmNhcmQubWVkaXVtIC5jYXJkLWltYWdlICsgLmNhcmQtY29udGVudCwgLmNhcmQubGFyZ2UgLmNhcmQtaW1hZ2UgKyAuY2FyZC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IDQwJTtcXG59XFxuLmNhcmQuc21hbGwgLmNhcmQtY29udGVudCwgLmNhcmQubWVkaXVtIC5jYXJkLWNvbnRlbnQsIC5jYXJkLmxhcmdlIC5jYXJkLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5jYXJkLnNtYWxsIC5jYXJkLWFjdGlvbiwgLmNhcmQubWVkaXVtIC5jYXJkLWFjdGlvbiwgLmNhcmQubGFyZ2UgLmNhcmQtYWN0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG59XFxuLmNhcmQuc21hbGwge1xcbiAgaGVpZ2h0OiAzMDBweDtcXG59XFxuLmNhcmQubWVkaXVtIHtcXG4gIGhlaWdodDogNDAwcHg7XFxufVxcbi5jYXJkLmxhcmdlIHtcXG4gIGhlaWdodDogNTAwcHg7XFxufVxcbi5jYXJkLmhvcml6b250YWwge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbC5zbWFsbCAuY2FyZC1pbWFnZSwgLmNhcmQuaG9yaXpvbnRhbC5tZWRpdW0gLmNhcmQtaW1hZ2UsIC5jYXJkLmhvcml6b250YWwubGFyZ2UgLmNhcmQtaW1hZ2Uge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsLnNtYWxsIC5jYXJkLWltYWdlIGltZywgLmNhcmQuaG9yaXpvbnRhbC5tZWRpdW0gLmNhcmQtaW1hZ2UgaW1nLCAuY2FyZC5ob3Jpem9udGFsLmxhcmdlIC5jYXJkLWltYWdlIGltZyB7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5jYXJkLmhvcml6b250YWwgLmNhcmQtaW1hZ2Uge1xcbiAgbWF4LXdpZHRoOiA1MCU7XFxufVxcbi5jYXJkLmhvcml6b250YWwgLmNhcmQtaW1hZ2UgaW1nIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweCAwIDAgMnB4O1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi5jYXJkLmhvcml6b250YWwgLmNhcmQtc3RhY2tlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXg6IDE7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jYXJkLmhvcml6b250YWwgLmNhcmQtc3RhY2tlZCAuY2FyZC1jb250ZW50IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuLmNhcmQuc3RpY2t5LWFjdGlvbiAuY2FyZC1hY3Rpb24ge1xcbiAgei1pbmRleDogMjtcXG59XFxuLmNhcmQuc3RpY2t5LWFjdGlvbiAuY2FyZC1yZXZlYWwge1xcbiAgei1pbmRleDogMTtcXG4gIHBhZGRpbmctYm90dG9tOiA2NHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1pbWFnZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jYXJkIC5jYXJkLWltYWdlIGltZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi5jYXJkIC5jYXJkLWltYWdlIC5jYXJkLXRpdGxlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcbi5jYXJkIC5jYXJkLWNvbnRlbnQge1xcbiAgcGFkZGluZzogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IHAge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IC5jYXJkLXRpdGxlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxufVxcbi5jYXJkIC5jYXJkLWNvbnRlbnQgLmNhcmQtdGl0bGUgaSB7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG59XFxuLmNhcmQgLmNhcmQtYWN0aW9uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNjAsIDE2MCwgMTYwLCAwLjIpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMTZweCAyNHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1hY3Rpb246bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXG59XFxuLmNhcmQgLmNhcmQtYWN0aW9uIGE6bm90KC5idG4pOm5vdCguYnRuLWxhcmdlKTpub3QoLmJ0bi1zbWFsbCk6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLWZsb2F0aW5nKSB7XFxuICBjb2xvcjogI2ZmYWI0MDtcXG4gIG1hcmdpbi1yaWdodDogMjRweDtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZTtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbiBhOm5vdCguYnRuKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tc21hbGwpOm5vdCguYnRuLWxhcmdlKTpub3QoLmJ0bi1mbG9hdGluZyk6aG92ZXIge1xcbiAgY29sb3I6ICNmZmQ4YTY7XFxufVxcbi5jYXJkIC5jYXJkLXJldmVhbCB7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB6LWluZGV4OiAzO1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmNhcmQgLmNhcmQtcmV2ZWFsIC5jYXJkLXRpdGxlIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4vKlxcbiAgICBAbGljZW5zZVxcbiAgICBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XFxuICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XFxuICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxcbiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xcbiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxcbiAqL1xcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKiBTVFlMRVMgRk9SIFRIRSBTUElOTkVSICovXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qXFxuICogQ29uc3RhbnRzOlxcbiAqICAgICAgU1RST0tFV0lEVEggPSAzcHhcXG4gKiAgICAgIEFSQ1NJWkUgICAgID0gMjcwIGRlZ3JlZXMgKGFtb3VudCBvZiBjaXJjbGUgdGhlIGFyYyB0YWtlcyB1cClcXG4gKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKVxcbiAqICAgICAgQVJDU1RBUlRST1QgPSAyMTYgZGVncmVlcyAoaG93IG11Y2ggdGhlIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBhcmNcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJvdGF0ZSBlYWNoIHRpbWUsIDIxNiBnaXZlcyB1cyBhXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDcgcG9pbnRlZCBzdGFyLCB3ZSBtaWdodCBkb1xcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjAvNyAqIDMgPSAxNTQuMjg2KVxcbiAqICAgICAgQ09OVEFJTkVSV0lEVEggPSAyOHB4XFxuICogICAgICBTSFJJTktfVElNRSA9IDQwMG1zXFxuICovXFxuLnByZWxvYWRlci13cmFwcGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiA1MHB4O1xcbiAgaGVpZ2h0OiA1MHB4O1xcbn1cXG4ucHJlbG9hZGVyLXdyYXBwZXIuc21hbGwge1xcbiAgd2lkdGg6IDM2cHg7XFxuICBoZWlnaHQ6IDM2cHg7XFxufVxcbi5wcmVsb2FkZXItd3JhcHBlci5iaWcge1xcbiAgd2lkdGg6IDY0cHg7XFxuICBoZWlnaHQ6IDY0cHg7XFxufVxcbi5wcmVsb2FkZXItd3JhcHBlci5hY3RpdmUge1xcbiAgLyogZHVyYXRpb246IDM2MCAqIEFSQ1RJTUUgLyAoQVJDU1RBUlRST1QgKyAoMzYwLUFSQ1NJWkUpKSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XFxuICB0byB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHtcXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuLnNwaW5uZXItbGF5ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG4uc3Bpbm5lci1ibHVlLFxcbi5zcGlubmVyLWJsdWUtb25seSB7XFxuICBib3JkZXItY29sb3I6ICM0Mjg1ZjQ7XFxufVxcblxcbi5zcGlubmVyLXJlZCxcXG4uc3Bpbm5lci1yZWQtb25seSB7XFxuICBib3JkZXItY29sb3I6ICNkYjQ0Mzc7XFxufVxcblxcbi5zcGlubmVyLXllbGxvdyxcXG4uc3Bpbm5lci15ZWxsb3ctb25seSB7XFxuICBib3JkZXItY29sb3I6ICNmNGI0MDA7XFxufVxcblxcbi5zcGlubmVyLWdyZWVuLFxcbi5zcGlubmVyLWdyZWVuLW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjMGY5ZDU4O1xcbn1cXG5cXG4vKipcXG4gKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKTpcXG4gKlxcbiAqIGlPUyBTYWZhcmkgKHRlc3RlZCBvbiBpT1MgOC4xKSBkb2VzIG5vdCBoYW5kbGUgYW5pbWF0aW9uLWRlbGF5IHZlcnkgd2VsbCAtIGl0IGRvZXNuJ3RcXG4gKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nXFxuICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyByZWR1bmRhbnQgYXMgaXRcXG4gKiBzZWVtcykuXFxuICpcXG4gKiBXZSB3cml0ZSBvdXQgZWFjaCBhbmltYXRpb24gaW4gZnVsbCAoaW5zdGVhZCBvZiBzZXBhcmF0aW5nIGFuaW1hdGlvbi1uYW1lLFxcbiAqIGFuaW1hdGlvbi1kdXJhdGlvbiwgZXRjLikgYmVjYXVzZSB1bmRlciB0aGUgcG9seWZpbGwsIFNhZmFyaSBkb2VzIG5vdCByZWNvZ25pemUgdGhvc2VcXG4gKiBzcGVjaWZpYyBwcm9wZXJ0aWVzIHByb3Blcmx5LCB0cmVhdHMgdGhlbSBhcyAtd2Via2l0LWFuaW1hdGlvbiwgYW5kIG92ZXJyaWRlcyB0aGVcXG4gKiBvdGhlciBhbmltYXRpb24gcnVsZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lci9wbGF0Zm9ybS9pc3N1ZXMvNTMuXFxuICovXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWJsdWUge1xcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBibHVlLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBibHVlLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1yZWQge1xcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCByZWQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIHJlZC1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXIteWVsbG93IHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgeWVsbG93LWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCB5ZWxsb3ctZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWdyZWVuIHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgZ3JlZW4tZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGdyZWVuLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIsXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWJsdWUtb25seSxcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItcmVkLW9ubHksXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXllbGxvdy1vbmx5LFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ncmVlbi1vbmx5IHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIG9wYWNpdHk6IDE7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcXG4gIDEyLjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xcbiAgfSAvKiAwLjUgKiBBUkNTSVpFICovXFxuICAyNSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XFxuICB9IC8qIDEgICAqIEFSQ1NJWkUgKi9cXG4gIDM3LjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpO1xcbiAgfSAvKiAxLjUgKiBBUkNTSVpFICovXFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZyk7XFxuICB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cXG4gIDYyLjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpO1xcbiAgfSAvKiAyLjUgKiBBUkNTSVpFICovXFxuICA3NSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZyk7XFxuICB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cXG4gIDg3LjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpO1xcbiAgfSAvKiAzLjUgKiBBUkNTSVpFICovXFxuICB0byB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZyk7XFxuICB9IC8qIDQgICAqIEFSQ1NJWkUgKi9cXG59XFxuQGtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUge1xcbiAgMTIuNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xcbiAgfSAvKiAwLjUgKiBBUkNTSVpFICovXFxuICAyNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xcbiAgfSAvKiAxICAgKiBBUkNTSVpFICovXFxuICAzNy41JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZyk7XFxuICB9IC8qIDEuNSAqIEFSQ1NJWkUgKi9cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDU0MGRlZyk7XFxuICB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cXG4gIDYyLjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKTtcXG4gIH0gLyogMi41ICogQVJDU0laRSAqL1xcbiAgNzUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKTtcXG4gIH0gLyogMyAgICogQVJDU0laRSAqL1xcbiAgODcuNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpO1xcbiAgfSAvKiAzLjUgKiBBUkNTSVpFICovXFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpO1xcbiAgfSAvKiA0ICAgKiBBUkNTSVpFICovXFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBibHVlLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI2JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA4OSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGJsdWUtZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAyNSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMjYlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDg5JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA5MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyByZWQtZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAxNSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHJlZC1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDE1JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAyNSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDUxJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyB5ZWxsb3ctZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA0MCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDc1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHllbGxvdy1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDQwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDc2JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBncmVlbi1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDY1JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGdyZWVuLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNjUlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDc1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA5MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbi8qKlxcbiAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGVcXG4gKiBzcGlubmVyIGlzIHJvdGF0aW5nIChhcHBlYXJzIG9uIENocm9tZSAzOCwgU2FmYXJpIDcuMSwgYW5kIElFIDExKS5cXG4gKi9cXG4uZ2FwLXBhdGNoIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDQ1JTtcXG4gIHdpZHRoOiAxMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4uZ2FwLXBhdGNoIC5jaXJjbGUge1xcbiAgd2lkdGg6IDEwMDAlO1xcbiAgbGVmdDogLTQ1MCU7XFxufVxcblxcbi5jaXJjbGUtY2xpcHBlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogNTAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXG59XFxuLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xcbiAgd2lkdGg6IDIwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBib3JkZXItd2lkdGg6IDNweDsgLyogU1RST0tFV0lEVEggKi9cXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICBhbmltYXRpb246IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XFxuICBsZWZ0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcXG59XFxuLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUge1xcbiAgbGVmdDogLTEwMCU7XFxuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTI5ZGVnKTtcXG59XFxuXFxuLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHtcXG4gIC8qIGR1cmF0aW9uOiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogbGVmdC1zcGluIDEzMzNtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGxlZnQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcXG4gIC8qIGR1cmF0aW9uOiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiByaWdodC1zcGluIDEzMzNtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgbGVmdC1zcGluIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7XFxuICBmcm9tIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7XFxuICB9XFxufVxcbiNzcGlubmVyQ29udGFpbmVyLmNvb2xkb3duIHtcXG4gIC8qIGR1cmF0aW9uOiBTSFJJTktfVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCA0MDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbi5wcm9ncmVzcyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDRweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWNlY2U2O1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5wcm9ncmVzcyAuZGV0ZXJtaW5hdGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGxpbmVhcjtcXG59XFxuLnByb2dyZXNzIC5pbmRldGVybWluYXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxufVxcbi5wcm9ncmVzcyAuaW5kZXRlcm1pbmF0ZTpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXG4gIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAyLjFzIGN1YmljLWJlemllcigwLjY1LCAwLjgxNSwgMC43MzUsIDAuMzk1KSBpbmZpbml0ZTtcXG59XFxuLnByb2dyZXNzIC5pbmRldGVybWluYXRlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxuICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc2hvcnQgMi4xcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uLWRlbGF5OiAxLjE1cztcXG59XFxuXFxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHtcXG4gIDAlIHtcXG4gICAgbGVmdDogLTM1JTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlLXNob3J0IHtcXG4gIDAlIHtcXG4gICAgbGVmdDogLTIwMCU7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgNjAlIHtcXG4gICAgbGVmdDogMTA3JTtcXG4gICAgcmlnaHQ6IC04JTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBsZWZ0OiAxMDclO1xcbiAgICByaWdodDogLTglO1xcbiAgfVxcbn1cXG4uZmxhc2gtbWVzc2FnZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBwYWRkaW5nOiAycHggMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHotaW5kZXg6IDk5OTk5O1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcbi5mbGFzaC1tZXNzYWdlLmluZm8ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JlZGRiZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM3MjhmNzI7XFxufVxcbi5mbGFzaC1tZXNzYWdlLndhcm4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZTZkMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlYTdkMTc7XFxufVxcbi5mbGFzaC1tZXNzYWdlLmVycm9yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNWIyYmM7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTMzMjU3O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIG1lc3NhZ2VJbiB7XFxuICBmcm9tIHtcXG4gICAgcmlnaHQ6IDgwJTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgcmlnaHQ6IDA7XFxuICB9XFxufVxcbi5wdWxzZSB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnB1bHNlOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzLCB0cmFuc2Zvcm0gMC4zcztcXG4gIGFuaW1hdGlvbjogcHVsc2UtYW5pbWF0aW9uIDFzIGN1YmljLWJlemllcigwLjI0LCAwLCAwLjM4LCAxKSBpbmZpbml0ZTtcXG59XFxuXFxuQGtleWZyYW1lcyBwdWxzZS1hbmltYXRpb24ge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcXG4gIH1cXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGZsb3c7XFxuICBtaW4td2lkdGg6IDEwMHB4O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiA5OTk5O1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbn1cXG4uZHJvcGRvd24tY29udGVudDpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaSB7XFxuICBjbGVhcjogYm90aDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgbWluLWhlaWdodDogNTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICB3aWR0aDogMTAwJTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpOmhvdmVyLCAuZHJvcGRvd24tY29udGVudCBsaS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGk6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkuZGl2aWRlciB7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxcHg7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpID4gYSwgLmRyb3Bkb3duLWNvbnRlbnQgbGkgPiBzcGFuIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkgPiBzcGFuID4gbGFiZWwge1xcbiAgdG9wOiAxcHg7XFxuICBsZWZ0OiAwO1xcbiAgaGVpZ2h0OiAxOHB4O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaSA+IGEgPiBpIHtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBtYXJnaW46IDAgMjRweCAwIDA7XFxuICB3aWR0aDogMjRweDtcXG59XFxuXFxuYm9keS5rZXlib2FyZC1mb2N1c2VkIC5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWRhZGE7XFxufVxcblxcbi5pbnB1dC1maWVsZC5jb2wgLmRyb3Bkb3duLWNvbnRlbnQgW3R5cGU9Y2hlY2tib3hdICsgbGFiZWwge1xcbiAgdG9wOiAxcHg7XFxuICBsZWZ0OiAwO1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG4uZHJvcGRvd24tdHJpZ2dlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbm5hdiB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGNhZjk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG5uYXYubmF2LWV4dGVuZGVkIHtcXG4gIGhlaWdodDogYXV0bztcXG59XFxubmF2Lm5hdi1leHRlbmRlZCAubmF2LXdyYXBwZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG5uYXYubmF2LWV4dGVuZGVkIC5uYXYtY29udGVudCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbn1cXG5uYXYgYSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxubmF2IGksXFxubmF2IFtjbGFzc149bWRpLV0sIG5hdiBbY2xhc3MqPW1kaS1dLFxcbm5hdiBpLnMtaWNvbnMge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxubmF2IC5uYXYtd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5M3B4KSB7XFxuICBuYXYgYS5zaWRlbmF2LXRyaWdnZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5uYXYgLnNpZGVuYXYtdHJpZ2dlciB7XFxuICBmbG9hdDogbGVmdDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDE7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBtYXJnaW46IDAgMThweDtcXG59XFxubmF2IC5zaWRlbmF2LXRyaWdnZXIgaSB7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxubmF2IC5icmFuZC1sb2dvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAyLjFyZW07XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5uYXYgLmJyYW5kLWxvZ28gaW1nLmNpcmNsZSB7XFxuICBoZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG59XFxubmF2IC5icmFuZC1sb2dvLmNlbnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICBuYXYgLmJyYW5kLWxvZ28ge1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gIH1cXG4gIG5hdiAuYnJhbmQtbG9nby5sZWZ0LCBuYXYgLmJyYW5kLWxvZ28ucmlnaHQge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICB0cmFuc2Zvcm06IG5vbmU7XFxuICB9XFxuICBuYXYgLmJyYW5kLWxvZ28ubGVmdCB7XFxuICAgIGxlZnQ6IDAuNXJlbTtcXG4gIH1cXG4gIG5hdiAuYnJhbmQtbG9nby5yaWdodCB7XFxuICAgIHJpZ2h0OiAwLjVyZW07XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxufVxcbm5hdiAuYnJhbmQtbG9nby5yaWdodCB7XFxuICByaWdodDogMC41cmVtO1xcbiAgcGFkZGluZzogMDtcXG59XFxubmF2IC5icmFuZC1sb2dvIGksXFxubmF2IC5icmFuZC1sb2dvIFtjbGFzc149bWRpLV0sIG5hdiAuYnJhbmQtbG9nbyBbY2xhc3MqPW1kaS1dLFxcbm5hdiAuYnJhbmQtbG9nbyBpLnMtaWNvbnMge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxufVxcbm5hdiAubmF2LXRpdGxlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMzJweDtcXG4gIHBhZGRpbmc6IDI4cHggMDtcXG59XFxubmF2IHVsIHtcXG4gIG1hcmdpbjogMDtcXG59XFxubmF2IHVsIGxpIHtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgcGFkZGluZzogMDtcXG59XFxubmF2IHVsIGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcbm5hdiB1bCBhIHtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwIDE1cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbm5hdiB1bCBhLmJ0biwgbmF2IHVsIGEuYnRuLXNtYWxsLCBuYXYgdWwgYS5idG4tbGFyZ2UsIG5hdiB1bCBhLmJ0bi1mbGF0LCBuYXYgdWwgYS5idG4tZmxvYXRpbmcge1xcbiAgbWFyZ2luLXRvcDogLTJweDtcXG4gIG1hcmdpbi1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbn1cXG5uYXYgdWwgYS5idG4gPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1zbWFsbCA+IC5tYXRlcmlhbC1pY29ucywgbmF2IHVsIGEuYnRuLWxhcmdlID4gLm1hdGVyaWFsLWljb25zLCBuYXYgdWwgYS5idG4tZmxhdCA+IC5tYXRlcmlhbC1pY29ucywgbmF2IHVsIGEuYnRuLWZsb2F0aW5nID4gLm1hdGVyaWFsLWljb25zIHtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5uYXYgdWwgYTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcbm5hdiB1bC5sZWZ0IHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG5uYXYgZm9ybSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQge1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGlucHV0IHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgcGFkZGluZy1sZWZ0OiAycmVtO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGlucHV0OmZvY3VzLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9dGV4dF06dmFsaWQsIG5hdiAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1wYXNzd29yZF06dmFsaWQsIG5hdiAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1lbWFpbF06dmFsaWQsIG5hdiAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT11cmxdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9ZGF0ZV06dmFsaWQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBsYWJlbCB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGxhYmVsIGkge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3M7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgbGFiZWwuYWN0aXZlIGkge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5uYXZiYXItZml4ZWQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgei1pbmRleDogOTk3O1xcbn1cXG4ubmF2YmFyLWZpeGVkIG5hdiB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICBuYXYubmF2LWV4dGVuZGVkIC5uYXYtd3JhcHBlciB7XFxuICAgIG1pbi1oZWlnaHQ6IDY0cHg7XFxuICB9XFxuICBuYXYsIG5hdiAubmF2LXdyYXBwZXIgaSwgbmF2IGEuc2lkZW5hdi10cmlnZ2VyLCBuYXYgYS5zaWRlbmF2LXRyaWdnZXIgaSB7XFxuICAgIGhlaWdodDogNjRweDtcXG4gICAgbGluZS1oZWlnaHQ6IDY0cHg7XFxuICB9XFxuICAubmF2YmFyLWZpeGVkIHtcXG4gICAgaGVpZ2h0OiA2NHB4O1xcbiAgfVxcbn1cIixcIkBmb250LWZhY2Uge1xcclxcbiAgZm9udC1mYW1pbHk6IHN3ZWV0aWNvbnM7XFxyXFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxyXFxuICBmb250LXdlaWdodDogNDAwO1xcclxcbiAgc3JjOiB1cmwoXFxcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci5lb3RcXFwiKTtcXHJcXG4gIHNyYzogdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIud29mZjJcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksXFxyXFxuICB1cmwoXFxcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci53b2ZmXFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIiksXFxyXFxuICB1cmwoXFxcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci50dGZcXFwiKSBmb3JtYXQoXFxcInRydWV0eXBlXFxcIik7XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcblxcclxcbi5zLWljb24sXFxyXFxuLnMtaWNvbnMsXFxyXFxuLnN3ZWV0LWljb25zLFxcclxcbi5zd2VldC1pY29uIHtcXHJcXG4gIGZvbnQtZmFtaWx5OiBzd2VldGljb25zLCBzYW5zLXNlcmlmO1xcclxcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXHJcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXHJcXG4gIGZvbnQtc2l6ZTogMjhweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcclxcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXHJcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcclxcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcclxcbiAgZGlyZWN0aW9uOiBsdHI7XFxyXFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXHJcXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XFxyXFxuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xcclxcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXHJcXG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYT0xXFxcIjtcXHJcXG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxyXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG59XFxyXFxuXCIsXCJAaW1wb3J0IFxcXCIuL2NvbG9yc1ZhcnNcXFwiO1xcclxcblxcclxcbkBlYWNoICRjb2xvcl9uYW1lLCAkY29sb3IgaW4gJGNvbG9ycyB7XFxyXFxuICBAZWFjaCAkY29sb3JfdHlwZSwgJGNvbG9yX3ZhbHVlIGluICRjb2xvciB7XFxyXFxuICAgIEBpZiAkY29sb3JfdHlwZSA9PSBcXFwiYmFzZVxcXCIge1xcclxcbiAgICAgIC4jeyRjb2xvcl9uYW1lfSB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXHJcXG4gICAgICB9XFxyXFxuICAgICAgLiN7JGNvbG9yX25hbWV9LXRleHQge1xcclxcbiAgICAgICAgY29sb3I6ICRjb2xvcl92YWx1ZSAhaW1wb3J0YW50O1xcclxcbiAgICAgIH1cXHJcXG4gICAgICAuI3skY29sb3JfbmFtZX0td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gQGVsc2Uge1xcclxcbiAgICAgIC4jeyRjb2xvcl9uYW1lfS4jeyRjb2xvcl90eXBlfSB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXHJcXG4gICAgICB9XFxyXFxuICAgICAgLiN7JGNvbG9yX25hbWV9LXRleHQudGV4dC0jeyRjb2xvcl90eXBlfSB7XFxyXFxuICAgICAgICBjb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxyXFxuICAgICAgfVxcclxcbiAgICAgIC4jeyRjb2xvcl9uYW1lfS13YXZlcy53YXZlcy0jeyRjb2xvcl90eXBlfSAud2F2ZXMtcmlwcGxlIHtcXHJcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcl92YWx1ZSAhaW1wb3J0YW50O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBTaGFkZVZhcnMgY2xhc3Nlc1xcclxcbiRzaGFkZXM6IChcXHJcXG4gIFxcXCJibGFja1xcXCI6ICMwMDAwMDAsXFxyXFxuICBcXFwid2hpdGVcXFwiOiAjZmZmZmZmLFxcclxcbiAgXFxcInRyYW5zcGFyZW50XFxcIjogdHJhbnNwYXJlbnRcXHJcXG4pO1xcclxcbi8vIFNoYWRlIGNsYXNzZXNcXHJcXG5AZWFjaCAkY29sb3IsICRjb2xvcl92YWx1ZSBpbiAkc2hhZGVzIHtcXHJcXG4gIC4jeyRjb2xvcn0ge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG4gIC4jeyRjb2xvcn0tdGV4dCB7XFxyXFxuICAgIGNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLy8gdXNhZ2U6IGNvbG9yKFxcXCJuYW1lX29mX2NvbG9yXFxcIiwgXFxcInR5cGVfb2ZfY29sb3JcXFwiKVxcclxcbi8vIHRvIGF2b2lkIHRvIHJlcGVhdGluZyBtYXAtZ2V0KCRjb2xvcnMsIC4uLilcXHJcXG5cXHJcXG5AZnVuY3Rpb24gY29sb3IoJGNvbG9yLCAkdHlwZSkge1xcclxcbiAgQGlmIG1hcC1oYXMta2V5KCRjb2xvcnMsICRjb2xvcikge1xcclxcbiAgICAkY3Vycl9jb2xvcjogbWFwLWdldCgkY29sb3JzLCAkY29sb3IpO1xcclxcbiAgICBAaWYgbWFwLWhhcy1rZXkoJGN1cnJfY29sb3IsICR0eXBlKSB7XFxyXFxuICAgICAgQHJldHVybiBtYXAtZ2V0KCRjdXJyX2NvbG9yLCAkdHlwZSk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG4gIEB3YXJuIFxcXCJVbmtub3duIGAjeyRjb2xvcn1gIC0gYCN7JHR5cGV9YCBpbiAkY29sb3JzLlxcXCI7XFxyXFxuICBAcmV0dXJuIG51bGw7XFxyXFxufVxcclxcblwiLFwiLyoqXFxyXFxuICogcHJpc20uanMgVHdpbGlnaHQgdGhlbWVcXHJcXG4gKiBCYXNlZCAobW9yZSBvciBsZXNzKSBvbiB0aGUgVHdpbGlnaHQgdGhlbWUgb3JpZ2luYWxseSBvZiBUZXh0bWF0ZSBmYW1lLlxcclxcbiAqIEBhdXRob3IgUmVteSBCYWNoXFxyXFxuICovXFxyXFxuIGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXHJcXG4gcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcclxcblxcdCBjb2xvcjogd2hpdGU7XFxyXFxuXFx0IGJhY2tncm91bmQ6IG5vbmU7XFxyXFxuXFx0IGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCAnQW5kYWxlIE1vbm8nLCAnVWJ1bnR1IE1vbm8nLCBtb25vc3BhY2U7XFxyXFxuXFx0IHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuXFx0IHRleHQtc2hhZG93OiAwIC0uMWVtIC4yZW0gYmxhY2s7XFxyXFxuXFx0IHdoaXRlLXNwYWNlOiBwcmU7XFxyXFxuXFx0IHdvcmQtc3BhY2luZzogbm9ybWFsO1xcclxcblxcdCB3b3JkLWJyZWFrOiBub3JtYWw7XFxyXFxuXFx0IHdvcmQtd3JhcDogbm9ybWFsO1xcclxcblxcdCBsaW5lLWhlaWdodDogMS41O1xcclxcbiBcXHJcXG5cXHQgLW1vei10YWItc2l6ZTogNDtcXHJcXG5cXHQgLW8tdGFiLXNpemU6IDQ7XFxyXFxuXFx0IHRhYi1zaXplOiA0O1xcclxcbiBcXHJcXG5cXHQgLXdlYmtpdC1oeXBoZW5zOiBub25lO1xcclxcblxcdCAtbW96LWh5cGhlbnM6IG5vbmU7XFxyXFxuXFx0IC1tcy1oeXBoZW5zOiBub25lO1xcclxcblxcdCBoeXBoZW5zOiBub25lO1xcclxcbiB9XFxyXFxuIFxcclxcbiBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXHJcXG4gOm5vdChwcmUpID4gY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXHJcXG5cXHQgYmFja2dyb3VuZDogaHNsKDAsIDAlLCA4JSk7IC8qICMxNDE0MTQgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLyogQ29kZSBibG9ja3MgKi9cXHJcXG4gcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcclxcblxcdCBib3JkZXItcmFkaXVzOiAuNWVtO1xcclxcblxcdCBib3JkZXI6IC4zZW0gc29saWQgaHNsKDAsIDAlLCAzMyUpOyAvKiAjMjgyQTJCICovXFxyXFxuXFx0IGJveC1zaGFkb3c6IDFweCAxcHggLjVlbSBibGFjayBpbnNldDtcXHJcXG5cXHQgbWFyZ2luOiAuNWVtIDA7XFxyXFxuXFx0IG92ZXJmbG93OiBhdXRvO1xcclxcblxcdCBwYWRkaW5nOiAxZW07XFxyXFxuIH1cXHJcXG4gXFxyXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjotbW96LXNlbGVjdGlvbiB7XFxyXFxuXFx0IC8qIEZpcmVmb3ggKi9cXHJcXG5cXHQgYmFja2dyb3VuZDogaHNsKDIwMCwgNCUsIDE2JSk7IC8qICMyODJBMkIgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06OnNlbGVjdGlvbiB7XFxyXFxuXFx0IC8qIFNhZmFyaSAqL1xcclxcblxcdCBiYWNrZ3JvdW5kOiBoc2woMjAwLCA0JSwgMTYlKTsgLyogIzI4MkEyQiAqL1xcclxcbiB9XFxyXFxuIFxcclxcbiAvKiBUZXh0IFNlbGVjdGlvbiBjb2xvdXIgKi9cXHJcXG4gcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06Oi1tb3otc2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6Oi1tb3otc2VsZWN0aW9uLFxcclxcbiBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06Oi1tb3otc2VsZWN0aW9uLCBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0gOjotbW96LXNlbGVjdGlvbiB7XFxyXFxuXFx0IHRleHQtc2hhZG93OiBub25lO1xcclxcblxcdCBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA5MyUsIDAuMTUpOyAvKiAjRURFREVEICovXFxyXFxuIH1cXHJcXG4gXFxyXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjpzZWxlY3Rpb24sIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6c2VsZWN0aW9uLFxcclxcbiBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06OnNlbGVjdGlvbiwgY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6c2VsZWN0aW9uIHtcXHJcXG5cXHQgdGV4dC1zaGFkb3c6IG5vbmU7XFxyXFxuXFx0IGJhY2tncm91bmQ6IGhzbGEoMCwgMCUsIDkzJSwgMC4xNSk7IC8qICNFREVERUQgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLyogSW5saW5lIGNvZGUgKi9cXHJcXG4gOm5vdChwcmUpID4gY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXHJcXG5cXHQgYm9yZGVyLXJhZGl1czogLjNlbTtcXHJcXG5cXHQgYm9yZGVyOiAuMTNlbSBzb2xpZCBoc2woMCwgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXHJcXG5cXHQgYm94LXNoYWRvdzogMXB4IDFweCAuM2VtIC0uMWVtIGJsYWNrIGluc2V0O1xcclxcblxcdCBwYWRkaW5nOiAuMTVlbSAuMmVtIC4wNWVtO1xcclxcblxcdCB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcclxcbiB9XFxyXFxuIFxcclxcbiAudG9rZW4uY29tbWVudCxcXHJcXG4gLnRva2VuLnByb2xvZyxcXHJcXG4gLnRva2VuLmRvY3R5cGUsXFxyXFxuIC50b2tlbi5jZGF0YSB7XFxyXFxuXFx0IGNvbG9yOiBoc2woMCwgMCUsIDQ3JSk7IC8qICM3Nzc3NzcgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLnRva2VuLnB1bmN0dWF0aW9uIHtcXHJcXG5cXHQgb3BhY2l0eTogLjc7XFxyXFxuIH1cXHJcXG4gXFxyXFxuIC5uYW1lc3BhY2Uge1xcclxcblxcdCBvcGFjaXR5OiAuNztcXHJcXG4gfVxcclxcbiBcXHJcXG4gLnRva2VuLnRhZyxcXHJcXG4gLnRva2VuLmJvb2xlYW4sXFxyXFxuIC50b2tlbi5udW1iZXIsXFxyXFxuIC50b2tlbi5kZWxldGVkIHtcXHJcXG5cXHQgY29sb3I6IGhzbCgxNCwgNTglLCA1NSUpOyAvKiAjQ0Y2QTRDICovXFxyXFxuIH1cXHJcXG4gXFxyXFxuIC50b2tlbi5rZXl3b3JkLFxcclxcbiAudG9rZW4ucHJvcGVydHksXFxyXFxuIC50b2tlbi5zZWxlY3RvcixcXHJcXG4gLnRva2VuLmNvbnN0YW50LFxcclxcbiAudG9rZW4uc3ltYm9sLFxcclxcbiAudG9rZW4uYnVpbHRpbiB7XFxyXFxuXFx0IGNvbG9yOiBoc2woNTMsIDg5JSwgNzklKTsgLyogI0Y5RUU5OCAqL1xcclxcbiB9XFxyXFxuIFxcclxcbiAudG9rZW4uYXR0ci1uYW1lLFxcclxcbiAudG9rZW4uYXR0ci12YWx1ZSxcXHJcXG4gLnRva2VuLnN0cmluZyxcXHJcXG4gLnRva2VuLmNoYXIsXFxyXFxuIC50b2tlbi5vcGVyYXRvcixcXHJcXG4gLnRva2VuLmVudGl0eSxcXHJcXG4gLnRva2VuLnVybCxcXHJcXG4gLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLFxcclxcbiAuc3R5bGUgLnRva2VuLnN0cmluZyxcXHJcXG4gLnRva2VuLnZhcmlhYmxlLFxcclxcbiAudG9rZW4uaW5zZXJ0ZWQge1xcclxcblxcdCBjb2xvcjogaHNsKDc2LCAyMSUsIDUyJSk7IC8qICM4RjlENkEgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLnRva2VuLmF0cnVsZSB7XFxyXFxuXFx0IGNvbG9yOiBoc2woMjE4LCAyMiUsIDU1JSk7IC8qICM3NTg3QTYgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLnRva2VuLnJlZ2V4LFxcclxcbiAudG9rZW4uaW1wb3J0YW50IHtcXHJcXG5cXHQgY29sb3I6IGhzbCg0MiwgNzUlLCA2NSUpOyAvKiAjRTlDMDYyICovXFxyXFxuIH1cXHJcXG4gXFxyXFxuIC50b2tlbi5pbXBvcnRhbnQsXFxyXFxuIC50b2tlbi5ib2xkIHtcXHJcXG5cXHQgZm9udC13ZWlnaHQ6IGJvbGQ7XFxyXFxuIH1cXHJcXG4gLnRva2VuLml0YWxpYyB7XFxyXFxuXFx0IGZvbnQtc3R5bGU6IGl0YWxpYztcXHJcXG4gfVxcclxcbiBcXHJcXG4gLnRva2VuLmVudGl0eSB7XFxyXFxuXFx0IGN1cnNvcjogaGVscDtcXHJcXG4gfVxcclxcbiBcXHJcXG4gcHJlW2RhdGEtbGluZV0ge1xcclxcblxcdCBwYWRkaW5nOiAxZW0gMCAxZW0gM2VtO1xcclxcblxcdCBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuIH1cXHJcXG4gXFxyXFxuIC8qIE1hcmt1cCAqL1xcclxcbiAubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi50YWcsXFxyXFxuIC5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLmF0dHItbmFtZSxcXHJcXG4gLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4ucHVuY3R1YXRpb24ge1xcclxcblxcdCBjb2xvcjogaHNsKDMzLCAzMyUsIDUyJSk7IC8qICNBQzg4NUIgKi9cXHJcXG4gfVxcclxcbiBcXHJcXG4gLyogTWFrZSB0aGUgdG9rZW5zIHNpdCBhYm92ZSB0aGUgbGluZSBoaWdobGlnaHQgc28gdGhlIGNvbG91cnMgZG9uJ3QgbG9vayBmYWRlZC4gKi9cXHJcXG4gLnRva2VuIHtcXHJcXG5cXHQgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcdCB6LWluZGV4OiAxO1xcclxcbiB9XFxyXFxuIFxcclxcbiAubGluZS1oaWdobGlnaHQge1xcclxcblxcdCBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCAzMyUsIDAuMjUpOyAvKiAjNTQ1NDU0ICovXFxyXFxuXFx0IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgaHNsYSgwLCAwJSwgMzMlLCAuMSkgNzAlLCBoc2xhKDAsIDAlLCAzMyUsIDApKTsgLyogIzU0NTQ1NCAqL1xcclxcblxcdCBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIGhzbCgwLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcclxcblxcdCBib3JkZXItdG9wOiAxcHggZGFzaGVkIGhzbCgwLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcclxcblxcdCBsZWZ0OiAwO1xcclxcblxcdCBsaW5lLWhlaWdodDogaW5oZXJpdDtcXHJcXG5cXHQgbWFyZ2luLXRvcDogMC43NWVtOyAvKiBTYW1lIGFzIC5wcmlzbeKAmXMgcGFkZGluZy10b3AgKi9cXHJcXG5cXHQgcGFkZGluZzogaW5oZXJpdCAwO1xcclxcblxcdCBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG5cXHQgcG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdCByaWdodDogMDtcXHJcXG5cXHQgd2hpdGUtc3BhY2U6IHByZTtcXHJcXG5cXHQgei1pbmRleDogMDtcXHJcXG4gfVxcclxcbiBcXHJcXG4gLmxpbmUtaGlnaGxpZ2h0OmJlZm9yZSxcXHJcXG4gLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlciB7XFxyXFxuXFx0IGJhY2tncm91bmQtY29sb3I6IGhzbCgyMTUsIDE1JSwgNTklKTsgLyogIzg3OTRBNiAqL1xcclxcblxcdCBib3JkZXItcmFkaXVzOiA5OTlweDtcXHJcXG5cXHQgYm94LXNoYWRvdzogMCAxcHggd2hpdGU7XFxyXFxuXFx0IGNvbG9yOiBoc2woMjQsIDIwJSwgOTUlKTsgLyogI0Y1RjJGMCAqL1xcclxcblxcdCBjb250ZW50OiBhdHRyKGRhdGEtc3RhcnQpO1xcclxcblxcdCBmb250OiBib2xkIDY1JS8xLjUgc2Fucy1zZXJpZjtcXHJcXG5cXHQgbGVmdDogLjZlbTtcXHJcXG5cXHQgbWluLXdpZHRoOiAxZW07XFxyXFxuXFx0IHBhZGRpbmc6IDAgLjVlbTtcXHJcXG5cXHQgcG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdCB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuXFx0IHRleHQtc2hhZG93OiBub25lO1xcclxcblxcdCB0b3A6IC40ZW07XFxyXFxuXFx0IHZlcnRpY2FsLWFsaWduOiAuM2VtO1xcclxcbiB9XFxyXFxuIFxcclxcbiAubGluZS1oaWdobGlnaHRbZGF0YS1lbmRdOmFmdGVyIHtcXHJcXG5cXHQgYm90dG9tOiAuNGVtO1xcclxcblxcdCBjb250ZW50OiBhdHRyKGRhdGEtZW5kKTtcXHJcXG5cXHQgdG9wOiBhdXRvO1xcclxcbiB9XFxyXFxuIFwiLFwiQGltcG9ydCAnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVVidW50dSc7XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLndpbmRvdyB7XFxyXFxuICBmb250LWZhbWlseTogJ1VidW50dScsIHNhbnMtc2VyaWY7IFxcclxcbiAgZm9udC1zaXplIDogMTdweCA7XFxyXFxuICB3aWR0aCA6IDYwMHB4IDsgXFxyXFxuICBtYXJnaW4gOiA3NXB4IGF1dG8gOyBcXHJcXG4gIGJhY2tncm91bmQgOiAjMmMzZTUwOyBcXHJcXG4gIGhlaWdodCA6IDM1MHB4IDsgXFxyXFxuICBib3JkZXItcmFkaXVzIDogNXB4IDtcXHJcXG4gIGRpc3BsYXkgOiByZWxhdGl2ZSA7IFxcclxcbiAgIGJveC1zaGFkb3c6IDEwcHggMTBweCAxMHB4ICAjODg4ODg4O1xcclxcbn1cXHJcXG5cXHJcXG4uYWZ0ZXJjbG9zZSB7XFxyXFxuICAgIGNvbG9yIDogIzM0NDk1ZSA7IFxcclxcbiAgICBkaXNwbGF5OiBub25lICA7IFxcclxcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIDsgXFxyXFxufVxcclxcblxcclxcbi5vcGVuIHtcXHJcXG4gICAgY29sb3IgOiAjZmZmIDsgXFxyXFxuICAgIHBhZGRpbmcgOiAxNXB4IDsgXFxyXFxuICAgIGJhY2tncm91bmQ6ICMyZWNjNzEgOyBcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDsgXFxyXFxuICAgIGJvcmRlcjogbm9uZSA7IFxcclxcbn1cXHJcXG5cXHJcXG4uYmFzaCB7XFxyXFxuICB3aWR0aCA6IDYwMHB4IDsgXFxyXFxuICBiYWNrZ3JvdW5kIDogIzM0NDk1ZTsgXFxyXFxuICBoZWlnaHQgOiAzMTBweCA7IFxcclxcbiAgYm9yZGVyLXJhZGl1cyA6IDVweCA7XFxyXFxuICB0b3A6IDQwcHg7XFxyXFxuICBkaXNwbGF5IDogYWJzb2x1dGU7IFxcclxcbiAgY29sb3IgOiAjZmZmIDtcXHJcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuICAuY29tbWFuZHtcXHJcXG4gICAgJjo6YmVmb3Jle1xcclxcbiAgICAgICAgY29udGVudDogXFxcInVzZXJAbWFjaGluZSAkIDogXFxcIjtcXHJcXG4gICAgICAgIGNvbG9yOiAjMmVjYzcxO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICB9XFxyXFxuICAucmVzdWx0YXtcXHJcXG4gICAgJjo6YmVmb3Jle1xcclxcbiAgICAgICAgY29udGVudDogXFxcIj4+XFxcIjtcXHJcXG4gICAgICAgIGNvbG9yOiAjMmVjYzcxO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8qIGVmZmVjdGVkIGJ5IGNvbnRyb2xsZXJzICovXFxyXFxuXFxyXFxuLndpbmRvd21heCB7XFxyXFxuICB3aWR0aCA6IDEwMCUgOyBcXHJcXG4gIG1hcmdpbiA6IGF1dG8gOyBcXHJcXG4gIGJhY2tncm91bmQgOiAjMmMzZTUwOyBcXHJcXG4gIGhlaWdodCA6IDEwMDBweDsgXFxyXFxuICBib3JkZXItcmFkaXVzIDogNXB4IDtcXHJcXG4gIGRpc3BsYXkgOiByZWxhdGl2ZSA7IFxcclxcbn1cXHJcXG5cXHJcXG4ud2luZG93bWluIHtcXHJcXG4gIHdpZHRoIDogMzAwcHggOyBcXHJcXG4gIGhlaWdodCA6IDQ1cHggO1xcclxcbiAgYmFja2dyb3VuZCA6ICMyYzNlNTA7IFxcclxcbiAgYm9yZGVyLXJhZGl1cyA6IDVweCA7IFxcclxcbiAgYm90dG9tIDogMCA7IFxcclxcbiAgcG9zaXRpb246IGZpeGVkO1xcclxcbn1cXHJcXG5cXHJcXG4uYmFzaG1heCB7XFxyXFxuICBkaXNwbGF5IDogYWJzb2x1dGUgOyBcXHJcXG4gIHdpZHRoIDogMTAwJSA7IFxcclxcbiAgYmFja2dyb3VuZCA6ICMzNDQ5NWU7IFxcclxcbiAgaGVpZ2h0IDogOTYwcHggOyBcXHJcXG4gIGJvcmRlci1yYWRpdXMgOiA1cHggO1xcclxcbiAgYm90dG9tOiAwO1xcclxcbiAgY29sb3IgOiAjZmZmIDtcXHJcXG59XFxyXFxuXFxyXFxuLyogIS0tZW5kLS0hICovXFxyXFxuXFxyXFxuLmJ1dHRvbnMge1xcclxcbiAgd2lkdGggOiAxNXB4IDtcXHJcXG4gIGhlaWdodCA6IDE1cHggOyBcXHJcXG4gIGJvcmRlci1yYWRpdXMgOiA1MCUgO1xcclxcbiAgZmxvYXQgOiByaWdodCA7IFxcclxcbiAgbWFyZ2luIDogMTNweCA0cHg7XFxyXFxuICBib3JkZXI6IG5vbmUgOyBcXHJcXG59XFxyXFxuXFxyXFxuLmNsb3NlIHtcXHJcXG4gIGJhY2tncm91bmQgOiAjZTc0YzNjIDtcXHJcXG59XFxyXFxuXFxyXFxuLm1heGltaXple1xcclxcbiAgYmFja2dyb3VuZCA6ICNmMWM0MGYgO1xcclxcbn1cXHJcXG5cXHJcXG4ubWluaW1pemV7XFxyXFxuICBiYWNrZ3JvdW5kIDogIzJlY2M3MSA7XFxyXFxufVxcclxcblxcclxcbi5yZXN1bHQge1xcclxcbiAgZGlzcGxheSA6IG5vbmUgO1xcclxcbn1cXHJcXG5cXHJcXG4uY29udHJvbHMge1xcclxcbiAgaGVpZ2h0IDogNDBweCA7IFxcclxcbiAgdG9wIDogMCA7IFxcclxcbn1cXHJcXG5cXHJcXG4udGl0bGUge1xcclxcbiAgICBjb2xvciA6ICNmZmYgOyBcXHJcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQgOyBcXHJcXG4gICAgcGFkZGluZyA6IDEwcHg7XFxyXFxufVxcclxcblwiLFwiLm1hdGVyaWFsLXRvb2x0aXAge1xcclxcbiAgcGFkZGluZzogMTBweCA4cHg7XFxyXFxuICBmb250LXNpemU6IDFyZW07XFxyXFxuICB6LWluZGV4OiAyMDAwO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcclxcbiAgY29sb3I6ICNmZmY7XFxyXFxuICBtaW4taGVpZ2h0OiAzNnB4O1xcclxcbiAgbGluZS1oZWlnaHQ6IDEyMCU7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA0cHgpO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7XFxyXFxufVxcclxcblxcclxcbi5iYWNrZHJvcCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbiAgaGVpZ2h0OiA3cHg7XFxyXFxuICB3aWR0aDogMTRweDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA1MCUgNTAlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMyMzIzMjtcXHJcXG4gIHotaW5kZXg6IC0xO1xcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDAlO1xcclxcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcclxcbn1cXHJcXG5cIixcIi8vIFotbGV2ZWxzXFxyXFxuLnNoYWRvdy0wIHtcXHJcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXHJcXG59XFxyXFxuXFxyXFxuLyogMmRwIGVsZXZhdGlvbiBtb2RpZmllZCovXFxyXFxuLnNoYWRvdy0xIHtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksXFxyXFxuICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXHJcXG59XFxyXFxuLnNoYWRvdy0xLWhhbGYge1xcclxcbiAgYm94LXNoYWRvdzogMCAzcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggN3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSxcXHJcXG4gICAgMCAzcHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbn1cXHJcXG5cXHJcXG4vKiA2ZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXHJcXG4uc2hhZG93LTIge1xcclxcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksXFxyXFxuICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXHJcXG59XFxyXFxuXFxyXFxuLyogMTJkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcclxcbi5zaGFkb3ctMyB7XFxyXFxuICBib3gtc2hhZG93OiAwIDhweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLFxcclxcbiAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxyXFxufVxcclxcblxcclxcbi8qIDE2ZHAgZWxldmF0aW9uICovXFxyXFxuLnNoYWRvdy00IHtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLFxcclxcbiAgICAwIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDhweCAxMHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbn1cXHJcXG5cXHJcXG4vKiAyNGRwIGVsZXZhdGlvbiAqL1xcclxcbi5zaGFkb3ctNSB7XFxyXFxuICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSxcXHJcXG4gICAgMCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxyXFxufVxcclxcblxcclxcbi8qIDI0ZHAgZWxldmF0aW9uICovXFxyXFxuLmludmVydC1zaGFkb3ctNSB7XFxyXFxuICAgIGJveC1zaGFkb3c6IFxcclxcbiAgICAzOHB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksXFxyXFxuICAgIDQ2cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgXFxyXFxuICAgIDE1cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbiAgfVxcclxcblxcclxcbi5ob3ZlcmFibGUge1xcclxcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI1cztcXHJcXG5cXHJcXG4gICY6aG92ZXIge1xcclxcbiAgICBib3gtc2hhZG93OiAwIDhweCAxN3B4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLFxcclxcbiAgICAgIDAgNnB4IDIwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTkpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cIixcIlxcclxcbi8qIVxcclxcbiAqIFdhdmVzIHYwLjYuMFxcclxcbiAqIGh0dHA6Ly9maWFuLm15LmlkL1dhdmVzXFxyXFxuICpcXHJcXG4gKiBDb3B5cmlnaHQgMjAxNCBBbGZpYW5hIEUuIFNpYnVlYSBhbmQgb3RoZXIgY29udHJpYnV0b3JzXFxyXFxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXFxyXFxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZpYW5zL1dhdmVzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcXHJcXG4gKi9cXHJcXG5cXHJcXG5cXHJcXG4ud2F2ZXMtZWZmZWN0IHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcclxcbiAgei1pbmRleDogMTtcXHJcXG4gIHRyYW5zaXRpb246IC4zcyBlYXNlLW91dDtcXHJcXG5cXHJcXG4gIC53YXZlcy1yaXBwbGUge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gICAgd2lkdGg6IDIwcHg7XFxyXFxuICAgIGhlaWdodDogMjBweDtcXHJcXG4gICAgbWFyZ2luLXRvcDotMTBweDtcXHJcXG4gICAgbWFyZ2luLWxlZnQ6LTEwcHg7XFxyXFxuICAgIG9wYWNpdHk6IDA7XFxyXFxuXFxyXFxuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTtcXHJcXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuN3MgZWFzZS1vdXQ7XFxyXFxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcXHJcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXHJcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBXYXZlcyBDb2xvcnNcXHJcXG4gICYud2F2ZXMtbGlnaHQgLndhdmVzLXJpcHBsZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XFxyXFxuICB9XFxyXFxuICAmLndhdmVzLXJlZCAud2F2ZXMtcmlwcGxlIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgLjcwKTtcXHJcXG4gIH1cXHJcXG4gICYud2F2ZXMteWVsbG93IC53YXZlcy1yaXBwbGUge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgLjcwKTtcXHJcXG4gIH1cXHJcXG4gICYud2F2ZXMtb3JhbmdlIC53YXZlcy1yaXBwbGUge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAuNzApO1xcclxcbiAgfVxcclxcbiAgJi53YXZlcy1wdXJwbGUgLndhdmVzLXJpcHBsZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU2LCAzOSwgMTc2LCAwLjcwKTtcXHJcXG4gIH1cXHJcXG4gICYud2F2ZXMtZ3JlZW4gLndhdmVzLXJpcHBsZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuNzApO1xcclxcbiAgfVxcclxcbiAgJi53YXZlcy10ZWFsIC53YXZlcy1yaXBwbGUge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDE1MCwgMTM2LCAwLjcwKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIFN0eWxlIGlucHV0IGJ1dHRvbiBidWcuXFxyXFxuICBpbnB1dFt0eXBlPVxcXCJidXR0b25cXFwiXSwgaW5wdXRbdHlwZT1cXFwicmVzZXRcXFwiXSwgaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl0ge1xcclxcbiAgICBib3JkZXI6IDA7XFxyXFxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXHJcXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xcclxcbiAgICB0ZXh0LXRyYW5zZm9ybTogaW5oZXJpdDtcXHJcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGltZyB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgei1pbmRleDogLTE7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi53YXZlcy1ub3RyYW5zaXRpb24ge1xcclxcbiAgdHJhbnNpdGlvbjogbm9uZSAje1xcXCIhaW1wb3J0YW50XFxcIn07XFxyXFxufVxcclxcblxcclxcbi53YXZlcy1jaXJjbGUge1xcclxcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xcclxcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHdoaXRlIDEwMCUsIGJsYWNrIDEwMCUpO1xcclxcbn1cXHJcXG5cXHJcXG4ud2F2ZXMtaW5wdXQtd3JhcHBlciB7XFxyXFxuICBib3JkZXItcmFkaXVzOiAwLjJlbTtcXHJcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxyXFxuXFxyXFxuICAud2F2ZXMtYnV0dG9uLWlucHV0IHtcXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHotaW5kZXg6IDE7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi53YXZlcy1jaXJjbGUge1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgd2lkdGg6IDIuNWVtO1xcclxcbiAgaGVpZ2h0OiAyLjVlbTtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAyLjVlbTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gIC13ZWJraXQtbWFzay1pbWFnZTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLndhdmVzLWJsb2NrIHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBGaXJlZm94IEJ1ZzogbGluayBub3QgdHJpZ2dlcmVkICovXFxyXFxuLndhdmVzLWVmZmVjdCAud2F2ZXMtcmlwcGxlIHtcXHJcXG4gIHotaW5kZXg6IC0xO1xcclxcbn1cIixcIi5tb2RhbCB7XFxyXFxuICAmOmZvY3VzIHtcXHJcXG4gICAgb3V0bGluZTogbm9uZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIEBleHRlbmQgLnNoYWRvdy01O1xcclxcblxcclxcbiAgLy9kaXNwbGF5OiBub25lO1xcclxcbiAgcG9zaXRpb246IGZpeGVkO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHJpZ2h0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXHJcXG4gIHBhZGRpbmc6IDA7XFxyXFxuICBtYXgtaGVpZ2h0OiA3MCU7XFxyXFxuICB3aWR0aDogNTUlO1xcclxcbiAgbWFyZ2luOiBhdXRvO1xcclxcbiAgb3ZlcmZsb3cteTogYXV0bztcXHJcXG5cXHJcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gIHdpbGwtY2hhbmdlOiB0b3AsIG9wYWNpdHk7XFxyXFxuXFxyXFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC1kb3dufSB7XFxyXFxuICAgd2lkdGg6IDgwJTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGgxLGgyLGgzLGg0IHtcXHJcXG4gICAgbWFyZ2luLXRvcDogMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC5tb2RhbC1jb250ZW50IHtcXHJcXG4gICAgcGFkZGluZzogMjRweDtcXHJcXG4gIH1cXHJcXG4gIC5tb2RhbC1jbG9zZSB7XFxyXFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC5tb2RhbC1mb290ZXIge1xcclxcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXHJcXG4gICAgcGFkZGluZzogNHB4IDZweDtcXHJcXG4gICAgaGVpZ2h0OiA1NnB4O1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxyXFxuXFxyXFxuICAgIC5idG4sIC5idG4tZmxhdCB7XFxyXFxuICAgICAgbWFyZ2luOiA2cHggMDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbiAgLm1vZGFsLWhlYWRlciB7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwIDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXHJcXG4gICAgcGFkZGluZzogNnB4IDRweDtcXHJcXG4gICAgaGVpZ2h0OiA1NnB4O1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxyXFxuXFxyXFxuICAgIC5idG4sIC5idG4tZmxhdCB7XFxyXFxuICAgICAgbWFyZ2luOiA2cHggMDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG4ubW9kYWwtb3ZlcmxheSB7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICB6LWluZGV4OiA5OTk7XFxyXFxuICB0b3A6IC0yNSU7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgYm90dG9tOiAwO1xcclxcbiAgcmlnaHQ6IDA7XFxyXFxuICBoZWlnaHQ6IDEyNSU7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxyXFxuICBkaXNwbGF5OiBub25lO1xcclxcblxcclxcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxyXFxufVxcclxcblxcclxcbi8vIE1vZGFsIHdpdGggZml4ZWQgYWN0aW9uIGZvb3Rlclxcclxcbi5tb2RhbC5tb2RhbC1maXhlZC1mb290ZXIge1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIGhlaWdodDogNzAlO1xcclxcblxcclxcbiAgLm1vZGFsLWNvbnRlbnQge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gNTZweCk7XFxyXFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgfVxcclxcblxcclxcbiAgLm1vZGFsLWZvb3RlciB7XFxyXFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICBib3R0b206IDA7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIE1vZGFsIEJvdHRvbSBTaGVldCBTdHlsZVxcclxcbi5tb2RhbC5ib3R0b20tc2hlZXQge1xcclxcbiAgdG9wOiBhdXRvO1xcclxcbiAgYm90dG9tOiAtMTAwJTtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgbWF4LWhlaWdodDogNDUlO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMDtcXHJcXG4gIHdpbGwtY2hhbmdlOiBib3R0b20sIG9wYWNpdHk7XFxyXFxufVxcclxcblwiLFwiaHRtbCxcXHJcXG5ib2R5LFxcclxcbiNyb290IHtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuKiB7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG59XFxyXFxuXFxyXFxuLm5vc2VsZWN0IHtcXHJcXG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsgLyogaU9TIFNhZmFyaSAqL1xcclxcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgLyogU2FmYXJpICovXFxyXFxuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIEtvbnF1ZXJvciBIVE1MICovXFxyXFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lOyAvKiBPbGQgdmVyc2lvbnMgb2YgRmlyZWZveCAqL1xcclxcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lOyAvKiBJbnRlcm5ldCBFeHBsb3Jlci9FZGdlICovXFxyXFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG4gIC8qIE5vbi1wcmVmaXhlZCB2ZXJzaW9uLCBjdXJyZW50bHlcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSBDaHJvbWUsIEVkZ2UsIE9wZXJhIGFuZCBGaXJlZm94ICovXFxyXFxufVxcclxcblxcclxcbnVsIHtcXHJcXG4gICY6bm90KC5icm93c2VyLWRlZmF1bHQpIHtcXHJcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcclxcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxyXFxuXFxyXFxuICAgICYgPiBsaSB7XFxyXFxuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbmEge1xcclxcblxcdGNvbG9yOiAkbGluay1jb2xvcjtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFxyXFxuICAvLyBHZXRzIHJpZCBvZiB0YXAgYWN0aXZlIHN0YXRlXFxyXFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG5cXHJcXG4udy0xMDAge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5yaWdodC1hbGlnbiB7XFxyXFxuICB0ZXh0LWFsaWduOiByaWdodDtcXHJcXG59XFxyXFxuLmNlbnRlci1hbGlnbntcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnYtY2VudGVyIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4ubWIxIHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxyXFxufVxcclxcblxcclxcblxcclxcbi8vIENvbGxlY3Rpb25zXFxyXFxuLmNvbGxlY3Rpb24ge1xcclxcbiAgbWFyZ2luOiAkZWxlbWVudC10b3AtbWFyZ2luIDAgJGVsZW1lbnQtYm90dG9tLW1hcmdpbiAwO1xcclxcbiAgYm9yZGVyOiAxcHggc29saWQgJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIC5jb2xsZWN0aW9uLWl0ZW0ge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1iZy1jb2xvcjtcXHJcXG4gICAgbGluZS1oZWlnaHQ6ICRjb2xsZWN0aW9uLWxpbmUtaGVpZ2h0O1xcclxcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xsZWN0aW9uLWJvcmRlci1jb2xvcjtcXHJcXG5cXHJcXG4gICAgJi5ob3ZlciB7XFxyXFxuICAgICAgJjpob3ZlciB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1ob3Zlci1iZy1jb2xvcjtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLy8gQXZhdGFyIENvbGxlY3Rpb25cXHJcXG4gICAgJi5hdmF0YXIge1xcclxcbiAgICAgIG1pbi1oZWlnaHQ6IDg0cHg7XFxyXFxuICAgICAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcclxcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHJcXG5cXHJcXG4gICAgICAvLyBEb24ndCBzdHlsZSBjaXJjbGVzIGluc2lkZSBwcmVsb2FkZXIgY2xhc3Nlcy5cXHJcXG4gICAgICAmOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSxcXHJcXG4gICAgICA6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlIHtcXHJcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgICAgIHdpZHRoOiA0MnB4O1xcclxcbiAgICAgICAgaGVpZ2h0OiA0MnB4O1xcclxcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gICAgICAgIGxlZnQ6IDE1cHg7XFxyXFxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBpLmNpcmNsZSB7XFxyXFxuICAgICAgICBmb250LXNpemU6IDE4cHg7XFxyXFxuICAgICAgICBsaW5lLWhlaWdodDogNDJweDtcXHJcXG4gICAgICAgIGNvbG9yOiAjZmZmO1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcXHJcXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuXFxyXFxuICAgICAgLnRpdGxlIHtcXHJcXG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgcCB7XFxyXFxuICAgICAgICBtYXJnaW46IDA7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIC5zZWNvbmRhcnktY29udGVudCB7XFxyXFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgICB0b3A6IDE2cHg7XFxyXFxuICAgICAgICByaWdodDogMTZweDtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgIH1cXHJcXG5cXHJcXG5cXHJcXG4gICAgJjpsYXN0LWNoaWxkIHtcXHJcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYuYWN0aXZlIHtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1hY3RpdmUtYmctY29sb3I7XFxyXFxuICAgICAgY29sb3I6ICRjb2xsZWN0aW9uLWFjdGl2ZS1jb2xvcjtcXHJcXG5cXHJcXG4gICAgICAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcclxcbiAgICAgICAgY29sb3I6ICNmZmY7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICBhLmNvbGxlY3Rpb24taXRlbSB7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICB0cmFuc2l0aW9uOiAuMjVzO1xcclxcbiAgICBjb2xvcjogJGNvbGxlY3Rpb24tbGluay1jb2xvcjtcXHJcXG5cXHJcXG4gICAgJjpub3QoLmFjdGl2ZSkge1xcclxcbiAgICAgICY6aG92ZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24taG92ZXItYmctY29sb3I7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmLndpdGgtaGVhZGVyIHtcXHJcXG4gICAgLmNvbGxlY3Rpb24taGVhZGVyIHtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1iZy1jb2xvcjtcXHJcXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yO1xcclxcbiAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAuY29sbGVjdGlvbi1pdGVtIHtcXHJcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcclxcbiAgICAgIHBhZGRpbmctbGVmdDogNzJweDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbn1cXHJcXG5cXHJcXG4vLyBNYWRlIGxlc3Mgc3BlY2lmaWMgdG8gYWxsb3cgZWFzaWVyIG92ZXJyaWRpbmdcXHJcXG4uc2Vjb25kYXJ5LWNvbnRlbnQge1xcclxcbiAgZmxvYXQ6IHJpZ2h0O1xcclxcbiAgY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XFxyXFxufVxcclxcblxcclxcbi5jb2xsYXBzaWJsZSAuY29sbGVjdGlvbiB7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxufVxcclxcblxcclxcblxcclxcbi5tb2RhbC1vdmVybGF5IHtcXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIGhlaWdodDogMTAwdmg7XFxyXFxuICB3aWR0aDogMTAwdnc7XFxyXFxuICBwYWRkaW5nOiAyMHB4IDAgMjBweCAwO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuNSk7XFxyXFxuICB6LWluZGV4OiA5OTk7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICAvL2FsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICAuaW5uZXJmb3Jte1xcclxcbiAgICBtYXgtd2lkdGg6IDY1MHB4O1xcclxcbiAgICBmb3Jte1xcclxcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyoqKioqKioqKioqKioqKioqKioqKlxcclxcbiAgTWVkaWEgUXVlcnkgQ2xhc3Nlc1xcclxcbioqKioqKioqKioqKioqKioqKioqKiovXFxyXFxuLmhpZGUtb24tc21hbGwtb25seSwgLmhpZGUtb24tc21hbGwtYW5kLWRvd24ge1xcclxcbiAgQG1lZGlhICN7JHNtYWxsLWFuZC1kb3dufSB7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuLmhpZGUtb24tbWVkLWFuZC1kb3duIHtcXHJcXG4gIEBtZWRpYSAjeyRtZWRpdW0tYW5kLWRvd259IHtcXHJcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG4uaGlkZS1vbi1tZWQtYW5kLXVwIHtcXHJcXG4gIEBtZWRpYSAjeyRtZWRpdW0tYW5kLXVwfSB7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuLmhpZGUtb24tbWVkLW9ubHkge1xcclxcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc21hbGwtc2NyZWVuKSBhbmQgKG1heC13aWR0aDogJG1lZGl1bS1zY3JlZW4pIHtcXHJcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG4uaGlkZS1vbi1sYXJnZS1vbmx5IHtcXHJcXG4gIEBtZWRpYSAjeyRsYXJnZS1hbmQtdXB9IHtcXHJcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG4uaGlkZS1vbi1leHRyYS1sYXJnZS1vbmx5IHtcXHJcXG4gIEBtZWRpYSAjeyRleHRyYS1sYXJnZS1hbmQtdXB9IHtcXHJcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG4uc2hvdy1vbi1leHRyYS1sYXJnZSB7XFxyXFxuICBAbWVkaWEgI3skZXh0cmEtbGFyZ2UtYW5kLXVwfSB7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcbi5zaG93LW9uLWxhcmdlIHtcXHJcXG4gIEBtZWRpYSAjeyRsYXJnZS1hbmQtdXB9IHtcXHJcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuLnNob3ctb24tbWVkaXVtIHtcXHJcXG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHNtYWxsLXNjcmVlbikgYW5kIChtYXgtd2lkdGg6ICRtZWRpdW0tc2NyZWVuKSB7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcbi5zaG93LW9uLXNtYWxsIHtcXHJcXG4gIEBtZWRpYSAjeyRzbWFsbC1hbmQtZG93bn0ge1xcclxcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG4uc2hvdy1vbi1tZWRpdW0tYW5kLXVwIHtcXHJcXG4gIEBtZWRpYSAjeyRtZWRpdW0tYW5kLXVwfSB7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcbi5zaG93LW9uLW1lZGl1bS1hbmQtZG93biB7XFxyXFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC1kb3dufSB7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcbi8vIENlbnRlciB0ZXh0IG9uIG1vYmlsZVxcclxcbi5jZW50ZXItb24tc21hbGwtb25seSB7XFxyXFxuICBAbWVkaWEgI3skc21hbGwtYW5kLWRvd259IHtcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKioqKioqKioqKioqKioqKioqKlxcclxcbiAgVXRpbGl0eSBDbGFzc2VzXFxyXFxuKioqKioqKioqKioqKioqKioqKi9cXHJcXG5cXHJcXG4uaGlkZSB7XFxyXFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxyXFxufVxcclxcblxcclxcbi8vIFRleHQgQWxpZ25cXHJcXG4ubGVmdC1hbGlnbiB7XFxyXFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcclxcbn1cXHJcXG4ucmlnaHQtYWxpZ24ge1xcclxcbiAgdGV4dC1hbGlnbjogcmlnaHRcXHJcXG59XFxyXFxuLmNlbnRlciwgLmNlbnRlci1hbGlnbiB7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5sZWZ0IHtcXHJcXG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XFxyXFxufVxcclxcbi5yaWdodCB7XFxyXFxuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcXHJcXG59XFxyXFxuXFxyXFxuLy8gTm8gVGV4dCBTZWxlY3RcXHJcXG4ubm8tc2VsZWN0IHtcXHJcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uY2lyY2xlIHtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG59XFxyXFxuXFxyXFxuLmNlbnRlci1ibG9jayB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcclxcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcclxcbn1cXHJcXG5cXHJcXG4udHJ1bmNhdGUge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcclxcbn1cXHJcXG5cXHJcXG4ubm8tcGFkZGluZyB7XFxyXFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxyXFxufVxcclxcblwiLFwiQHVzZSBcXFwic2FzczptYXRoXFxcIjtcXHJcXG4kcHJpbWFyeS1jb2xvcjogY29sb3IoXFxcImJsdWVcXFwiLCBcXFwibGlnaHRlbi0zXFxcIikgIWRlZmF1bHQ7XFxyXFxuJHByaW1hcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDE1JSkgIWRlZmF1bHQ7XFxyXFxuJHByaW1hcnktY29sb3ItZGFyazogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCAxNSUpICFkZWZhdWx0O1xcclxcblxcclxcbiRzZWNvbmRhcnktY29sb3I6IGNvbG9yKFxcXCJ0ZWFsXFxcIiwgXFxcImxpZ2h0ZW4tMVxcXCIpICFkZWZhdWx0O1xcclxcbiRzdWNjZXNzLWNvbG9yOiBjb2xvcihcXFwiZ3JlZW5cXFwiLCBcXFwiYmFzZVxcXCIpICFkZWZhdWx0O1xcclxcbiRlcnJvci1jb2xvcjogY29sb3IoXFxcInJlZFxcXCIsIFxcXCJiYXNlXFxcIikgIWRlZmF1bHQ7XFxyXFxuJGxpbmstY29sb3I6IGNvbG9yKFxcXCJsaWdodC1ibHVlXFxcIiwgXFxcImRhcmtlbi0xXFxcIikgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLy8gMi4gQmFkZ2VzXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4kYmFkZ2UtYmctY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxyXFxuJGJhZGdlLWhlaWdodDogMjJweCAhZGVmYXVsdDtcXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vLyA3LiBDaGlwc1xcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuXFxyXFxuJGNoaXAtYmctY29sb3I6ICNlNGU0ZTQgIWRlZmF1bHQ7XFxyXFxuJGNoaXAtYm9yZGVyLWNvbG9yOiAjOWU5ZTllICFkZWZhdWx0O1xcclxcbiRjaGlwLXNlbGVjdGVkLWNvbG9yOiAjMjZhNjlhICFkZWZhdWx0O1xcclxcbiRjaGlwLW1hcmdpbjogNXB4ICFkZWZhdWx0O1xcclxcblxcclxcblxcclxcbi8vIDE2LiBTcGlubmVycyB8IExvYWRlcnNcXHJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcclxcblxcclxcbiRzcGlubmVyLWRlZmF1bHQtY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gMjQuIFByb2dyZXNzIEJhclxcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuXFxyXFxuJHByb2dyZXNzLWJhci1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vL2lucHV0c1xcclxcblxcclxcbiRpbnB1dC1oZWlnaHQ6IDU2cHg7XFxyXFxuXFxyXFxuLy8gNi4gQ29sbGFwc2libGVcXHJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcclxcblxcclxcbiRjb2xsYXBzaWJsZS1oZWlnaHQ6IDNyZW0gIWRlZmF1bHQ7XFxyXFxuJGNvbGxhcHNpYmxlLWxpbmUtaGVpZ2h0OiAkY29sbGFwc2libGUtaGVpZ2h0ICFkZWZhdWx0O1xcclxcbiRjb2xsYXBzaWJsZS1oZWFkZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxyXFxuJGNvbGxhcHNpYmxlLWJvcmRlci1jb2xvcjogI2RkZCAhZGVmYXVsdDtcXHJcXG5cXHJcXG4vLyAxMC4gRm9ybXNcXHJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcclxcblxcclxcbi8vIFRleHQgSW5wdXRzICsgVGV4dGFyZWFcXHJcXG4kaW5wdXQtaGVpZ2h0OiAzcmVtICFkZWZhdWx0O1xcclxcbiRpbnB1dC1ib3JkZXItY29sb3I6IGNvbG9yKFxcXCJncmV5XFxcIiwgXFxcImJhc2VcXFwiKSAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtYmFja2dyb3VuZDogI2ZmZiAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtZXJyb3ItY29sb3I6ICRlcnJvci1jb2xvciAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtc3VjY2Vzcy1jb2xvcjogJHN1Y2Nlc3MtY29sb3IgIWRlZmF1bHQ7XFxyXFxuJGlucHV0LWZvY3VzLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRpbnB1dC1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XFxyXFxuJGlucHV0LW1hcmdpbi1ib3R0b206IDhweDtcXHJcXG4kaW5wdXQtbWFyZ2luOiAwIDAgJGlucHV0LW1hcmdpbi1ib3R0b20gMCAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtcGFkZGluZzogMCAhZGVmYXVsdDtcXHJcXG4kbGFiZWwtZm9udC1zaXplOiAuOHJlbSAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtZGlzYWJsZWQtY29sb3I6IHJnYmEoMCwwLDAsIC40MikgIWRlZmF1bHQ7XFxyXFxuJGlucHV0LWRpc2FibGVkLXNvbGlkLWNvbG9yOiAjOTQ5NDk0ICFkZWZhdWx0O1xcclxcbiRpbnB1dC1kaXNhYmxlZC1ib3JkZXI6IDFweCBkb3R0ZWQgJGlucHV0LWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xcclxcbiRpbnB1dC1pbnZhbGlkLWJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1lcnJvci1jb2xvciAhZGVmYXVsdDtcXHJcXG4kaW5wdXQtaWNvbi1zaXplOiAycmVtO1xcclxcbiRwbGFjZWhvbGRlci10ZXh0LWNvbG9yOiBsaWdodGVuKCRpbnB1dC1ib3JkZXItY29sb3IsIDIwJSkgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gUmFkaW8gQnV0dG9uc1xcclxcbiRyYWRpby1maWxsLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRyYWRpby1lbXB0eS1jb2xvcjogIzVhNWE1YSAhZGVmYXVsdDtcXHJcXG4kcmFkaW8tYm9yZGVyOiAycHggc29saWQgJHJhZGlvLWZpbGwtY29sb3IgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gUmFuZ2VcXHJcXG4kcmFuZ2UtaGVpZ2h0OiAxNHB4ICFkZWZhdWx0O1xcclxcbiRyYW5nZS13aWR0aDogMTRweCAhZGVmYXVsdDtcXHJcXG4kdHJhY2staGVpZ2h0OiAzcHggIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gU2VsZWN0XFxyXFxuJHNlbGVjdC1ib3JkZXI6IDFweCBzb2xpZCAjZjJmMmYyICFkZWZhdWx0O1xcclxcbiRzZWxlY3QtYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkwKSAhZGVmYXVsdDtcXHJcXG4kc2VsZWN0LWZvY3VzOiAxcHggc29saWQgbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCA0NyUpICFkZWZhdWx0O1xcclxcbiRzZWxlY3Qtb3B0aW9uLWhvdmVyOiByZ2JhKDAsMCwwLC4wOCkgIWRlZmF1bHQ7XFxyXFxuJHNlbGVjdC1vcHRpb24tZm9jdXM6IHJnYmEoMCwwLDAsLjA4KSAhZGVmYXVsdDtcXHJcXG4kc2VsZWN0LW9wdGlvbi1zZWxlY3RlZDogcmdiYSgwLDAsMCwuMDMpICFkZWZhdWx0O1xcclxcbiRzZWxlY3QtcGFkZGluZzogNXB4ICFkZWZhdWx0O1xcclxcbiRzZWxlY3QtcmFkaXVzOiAycHggIWRlZmF1bHQ7XFxyXFxuJHNlbGVjdC1kaXNhYmxlZC1jb2xvcjogcmdiYSgwLDAsMCwuMykgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gU3dpdGNoZXNcXHJcXG4kc3dpdGNoLWJnLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRzd2l0Y2gtY2hlY2tlZC1sZXZlci1iZzogZGVzYXR1cmF0ZShsaWdodGVuKCRzd2l0Y2gtYmctY29sb3IsIDI1JSksIDI1JSkgIWRlZmF1bHQ7XFxyXFxuJHN3aXRjaC11bmNoZWNrZWQtYmc6ICNGMUYxRjEgIWRlZmF1bHQ7XFxyXFxuJHN3aXRjaC11bmNoZWNrZWQtbGV2ZXItYmc6IHJnYmEoMCwwLDAsLjM4KSAhZGVmYXVsdDtcXHJcXG4kc3dpdGNoLXJhZGl1czogMTVweCAhZGVmYXVsdDtcXHJcXG5cXHJcXG4vLyAxMS4gR2xvYmFsXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4vLyBNZWRpYSBRdWVyeSBSYW5nZXNcXHJcXG4kc21hbGwtc2NyZWVuLXVwOiA2MDFweCAhZGVmYXVsdDtcXHJcXG4kbWVkaXVtLXNjcmVlbi11cDogOTkzcHggIWRlZmF1bHQ7XFxyXFxuJGxhcmdlLXNjcmVlbi11cDogMTIwMXB4ICFkZWZhdWx0O1xcclxcbiRzbWFsbC1zY3JlZW46IDYwMHB4ICFkZWZhdWx0O1xcclxcbiRtZWRpdW0tc2NyZWVuOiA5OTJweCAhZGVmYXVsdDtcXHJcXG4kbGFyZ2Utc2NyZWVuOiAxMjAwcHggIWRlZmF1bHQ7XFxyXFxuXFxyXFxuJG1lZGl1bS1hbmQtdXA6IFxcXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6ICN7JHNtYWxsLXNjcmVlbi11cH0pXFxcIiAhZGVmYXVsdDtcXHJcXG4kbGFyZ2UtYW5kLXVwOiBcXFwib25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAjeyRtZWRpdW0tc2NyZWVuLXVwfSlcXFwiICFkZWZhdWx0O1xcclxcbiRleHRyYS1sYXJnZS1hbmQtdXA6IFxcXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6ICN7JGxhcmdlLXNjcmVlbi11cH0pXFxcIiAhZGVmYXVsdDtcXHJcXG4kc21hbGwtYW5kLWRvd246IFxcXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6ICN7JHNtYWxsLXNjcmVlbn0pXFxcIiAhZGVmYXVsdDtcXHJcXG4kbWVkaXVtLWFuZC1kb3duOiBcXFwib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiAjeyRtZWRpdW0tc2NyZWVufSlcXFwiICFkZWZhdWx0O1xcclxcbiRtZWRpdW0tb25seTogXFxcIm9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogI3skc21hbGwtc2NyZWVuLXVwfSkgYW5kIChtYXgtd2lkdGggOiAjeyRtZWRpdW0tc2NyZWVufSlcXFwiICFkZWZhdWx0O1xcclxcblxcclxcblxcclxcblxcclxcbi8vIDEyLiBHcmlkXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4kbnVtLWNvbHM6IDEyICFkZWZhdWx0O1xcclxcbiRndXR0ZXItd2lkdGg6IDFyZW0gIWRlZmF1bHQ7XFxyXFxuJGVsZW1lbnQtdG9wLW1hcmdpbjogbWF0aC5kaXYoJGd1dHRlci13aWR0aCwgMykgIWRlZmF1bHQ7XFxyXFxuJGVsZW1lbnQtYm90dG9tLW1hcmdpbjogbWF0aC5kaXYoJGd1dHRlci13aWR0aCAqIDIsIDMpICFkZWZhdWx0O1xcclxcblxcclxcbi8vIDEzLiBOYXZpZ2F0aW9uIEJhclxcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuXFxyXFxuJG5hdmJhci1oZWlnaHQ6IDY0cHggIWRlZmF1bHQ7XFxyXFxuJG5hdmJhci1saW5lLWhlaWdodDogJG5hdmJhci1oZWlnaHQgIWRlZmF1bHQ7XFxyXFxuJG5hdmJhci1oZWlnaHQtbW9iaWxlOiA1NnB4ICFkZWZhdWx0O1xcclxcbiRuYXZiYXItbGluZS1oZWlnaHQtbW9iaWxlOiAkbmF2YmFyLWhlaWdodC1tb2JpbGUgIWRlZmF1bHQ7XFxyXFxuJG5hdmJhci1mb250LXNpemU6IDFyZW0gIWRlZmF1bHQ7XFxyXFxuJG5hdmJhci1mb250LWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcclxcbiRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAyLjFyZW0gIWRlZmF1bHQ7XFxyXFxuXFxyXFxuXFxyXFxuLy8gMTQuIFNpZGUgTmF2aWdhdGlvblxcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuJGJ1dHRvbi1yYWlzZWQtY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1mbGF0LWNvbG9yOiAjMzQzNDM0ICFkZWZhdWx0O1xcclxcbiRidXR0b24tcmFpc2VkLWJhY2tncm91bmQ6ICMzNDM0MzQgIWRlZmF1bHQ7XFxyXFxuJHByaW1hcnktY29sb3I6IzM0MzQzNCAhZGVmYXVsdDtcXHJcXG5cXHJcXG5cXHJcXG4gXFxyXFxuJHNpZGVuYXYtd2lkdGg6IDMwMHB4ICFkZWZhdWx0O1xcclxcbiRzaWRlbmF2LWZvbnQtc2l6ZTogMTRweCAhZGVmYXVsdDtcXHJcXG4kc2lkZW5hdi1mb250LWNvbG9yOiByZ2JhKDAsMCwwLC44NykgIWRlZmF1bHQ7XFxyXFxuJHNpZGVuYXYtYmctY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxyXFxuJHNpZGVuYXYtcGFkZGluZzogMTVweCAhZGVmYXVsdDtcXHJcXG4kc2lkZW5hdi1pdGVtLWhlaWdodDogNDVweCAhZGVmYXVsdDtcXHJcXG4kc2lkZW5hdi1saW5lLWhlaWdodDogJHNpZGVuYXYtaXRlbS1oZWlnaHQgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLy8gMy4gQnV0dG9uc1xcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuXFxyXFxuJHByaW1hcnktY29sb3I6IGdyZWVuICFkZWZhdWx0O1xcclxcbiRwcmltYXJ5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRwcmltYXJ5LWNvbG9yLCAxNSUpICFkZWZhdWx0O1xcclxcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMTUlKSAhZGVmYXVsdDtcXHJcXG4kc2Vjb25kYXJ5LWNvbG9yOiByZWQgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuXFxyXFxuLy8gU2hhcmVkIHN0eWxlc1xcclxcbiRidXR0b24tYm9yZGVyOiBub25lICFkZWZhdWx0O1xcclxcbiRidXR0b24tYmFja2dyb3VuZC1mb2N1czogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCA0JSkgIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1mb250LXNpemU6IDE0cHggIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1pY29uLWZvbnQtc2l6ZTogMS4zcmVtICFkZWZhdWx0O1xcclxcbiRidXR0b24taGVpZ2h0OiAzNnB4ICFkZWZhdWx0O1xcclxcbiRidXR0b24tcGFkZGluZzogMCAxNnB4ICFkZWZhdWx0O1xcclxcbiRidXR0b24tcmFkaXVzOiAycHggIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gRGlzYWJsZWQgc3R5bGVzXFxyXFxuJGJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kOiAjREZERkRGICFkZWZhdWx0O1xcclxcbiRidXR0b24tZGlzYWJsZWQtY29sb3I6ICM5RjlGOUYgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gUmFpc2VkIGJ1dHRvbnNcXHJcXG4kYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRidXR0b24tcmFpc2VkLWJhY2tncm91bmQtaG92ZXI6IGxpZ2h0ZW4oJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZCwgNSUpICFkZWZhdWx0O1xcclxcbiRidXR0b24tcmFpc2VkLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcclxcblxcclxcbi8vIExhcmdlIGJ1dHRvbnNcXHJcXG4kYnV0dG9uLWxhcmdlLWZvbnQtc2l6ZTogMTVweCAhZGVmYXVsdDtcXHJcXG4kYnV0dG9uLWxhcmdlLWljb24tZm9udC1zaXplOiAxLjZyZW0gIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1sYXJnZS1oZWlnaHQ6ICRidXR0b24taGVpZ2h0ICogMS41ICFkZWZhdWx0O1xcclxcbiRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZTogNTZweCAhZGVmYXVsdDtcXHJcXG5cXHJcXG4vLyBTbWFsbCBidXR0b25zXFxyXFxuJGJ1dHRvbi1zbWFsbC1mb250LXNpemU6IDEzcHggIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1zbWFsbC1pY29uLWZvbnQtc2l6ZTogMS4ycmVtICFkZWZhdWx0O1xcclxcbiRidXR0b24tc21hbGwtaGVpZ2h0OiAkYnV0dG9uLWhlaWdodCAqIC45ICFkZWZhdWx0O1xcclxcbiRidXR0b24tZmxvYXRpbmctc21hbGwtc2l6ZTogJGJ1dHRvbi1oZWlnaHQgKiAuOSAhZGVmYXVsdDtcXHJcXG5cXHJcXG4vLyBGbGF0IGJ1dHRvbnNcXHJcXG4kYnV0dG9uLWZsYXQtY29sb3I6ICMzNDM0MzQgIWRlZmF1bHQ7XFxyXFxuJGJ1dHRvbi1mbGF0LWRpc2FibGVkLWNvbG9yOiBsaWdodGVuKCM5OTksIDEwJSkgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuLy8gRmxvYXRpbmcgYnV0dG9uc1xcclxcbiRidXR0b24tZmxvYXRpbmctYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXHJcXG4kYnV0dG9uLWZsb2F0aW5nLWJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tZmxvYXRpbmctYmFja2dyb3VuZCAhZGVmYXVsdDtcXHJcXG4kYnV0dG9uLWZsb2F0aW5nLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcclxcbiRidXR0b24tZmxvYXRpbmctc2l6ZTogNDBweCAhZGVmYXVsdDtcXHJcXG4kYnV0dG9uLWZsb2F0aW5nLXJhZGl1czogNTAlICFkZWZhdWx0O1xcclxcblxcclxcblxcclxcblxcclxcblxcclxcbi8vIDQuIENhcmRzXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4kY2FyZC1wYWRkaW5nOiAyNHB4ICFkZWZhdWx0O1xcclxcbiRjYXJkLWJnLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcclxcbiRjYXJkLWxpbmstY29sb3I6IGNvbG9yKFxcXCJvcmFuZ2VcXFwiLCBcXFwiYWNjZW50LTJcXFwiKSAhZGVmYXVsdDtcXHJcXG4kY2FyZC1saW5rLWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRjYXJkLWxpbmstY29sb3IsIDIwJSkgIWRlZmF1bHQ7XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLy8gMjMuIENvbGxlY3Rpb25zXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4kY29sbGVjdGlvbi1ib3JkZXItY29sb3I6ICNlMGUwZTAgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tYmctY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tYWN0aXZlLWJnLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWFjdGl2ZS1jb2xvcjogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCA1NSUpICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWhvdmVyLWJnLWNvbG9yOiAjZGRkICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWxpbmstY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tbGluZS1oZWlnaHQ6IDEuNXJlbSAhZGVmYXVsdDtcXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vLyA5LiBEcm9wZG93blxcclxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxyXFxuXFxyXFxuJGRyb3Bkb3duLWJnLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcclxcbiRkcm9wZG93bi1ob3Zlci1iZy1jb2xvcjogI2VlZSAhZGVmYXVsdDtcXHJcXG4kZHJvcGRvd24tY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxyXFxuJGRyb3Bkb3duLWl0ZW0taGVpZ2h0OiA1MHB4ICFkZWZhdWx0O1xcclxcblxcclxcblxcclxcbiRvZmYtYmxhY2s6IHJnYmEoMCwgMCwgMCwgMC44NykgIWRlZmF1bHQ7XCIsXCIvLyBCYWRnZXNcXHJcXG5zcGFuLmJhZGdlIHtcXHJcXG4gIG1pbi13aWR0aDogM3JlbTtcXHJcXG4gIHBhZGRpbmc6IDAgNnB4O1xcclxcbiAgbWFyZ2luLWxlZnQ6IDE0cHg7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICBmb250LXNpemU6IDFyZW07XFxyXFxuICBsaW5lLWhlaWdodDogJGJhZGdlLWhlaWdodDtcXHJcXG4gIGhlaWdodDogJGJhZGdlLWhlaWdodDtcXHJcXG4gIGNvbG9yOiBjb2xvcignZ3JleScsICdkYXJrZW4tMScpO1xcclxcbiAgZmxvYXQ6IHJpZ2h0O1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHJcXG4gICYubmV3IHtcXHJcXG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcXHJcXG4gICAgZm9udC1zaXplOiAwLjhyZW07XFxyXFxuICAgIGNvbG9yOiAjZmZmO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFkZ2UtYmctY29sb3I7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYubmV3OmFmdGVyIHtcXHJcXG4gICAgY29udGVudDogXFxcIiBuZXdcXFwiO1xcclxcbiAgfVxcclxcblxcclxcbiAgJltkYXRhLWJhZGdlLWNhcHRpb25dOjphZnRlciB7XFxyXFxuICAgIGNvbnRlbnQ6IFxcXCIgXFxcIiBhdHRyKGRhdGEtYmFkZ2UtY2FwdGlvbik7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIFNwZWNpYWwgY2FzZXNcXHJcXG5uYXYgdWwgYSBzcGFuLmJhZGdlIHtcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIGZsb2F0OiBub25lO1xcclxcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAkYmFkZ2UtaGVpZ2h0O1xcclxcbiAgaGVpZ2h0OiAkYmFkZ2UtaGVpZ2h0O1xcclxcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYXV0bztcXHJcXG59XFxyXFxuXFxyXFxuLy8gTGluZSBoZWlnaHQgY2VudGVyaW5nXFxyXFxuLmNvbGxlY3Rpb24taXRlbSBzcGFuLmJhZGdlIHtcXHJcXG4gIG1hcmdpbi10b3A6IGNhbGMoY2FsYygkY29sbGVjdGlvbi1saW5lLWhlaWdodCAvIDIpIC0gY2FsYygkYmFkZ2UtaGVpZ2h0IC8gMikpO1xcclxcbn1cXHJcXG5cXHJcXG4uY29sbGFwc2libGUgc3Bhbi5iYWRnZSB7XFxyXFxuICBtYXJnaW4tbGVmdDogYXV0bztcXHJcXG59XFxyXFxuXFxyXFxuLnNpZGVuYXYgc3Bhbi5iYWRnZSB7XFxyXFxuICBtYXJnaW4tdG9wOiBjYWxjKGNhbGMoJHNpZGVuYXYtbGluZS1oZWlnaHQgLyAyKSAtIGNhbGMoJGJhZGdlLWhlaWdodCAvIDIpKTtcXHJcXG59XFxyXFxuXFxyXFxudGFibGUgc3Bhbi5iYWRnZSB7XFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBmbG9hdDogbm9uZTtcXHJcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcclxcbn1cXHJcXG5cIixcIi5jaGlwIHtcXHJcXG4gICY6Zm9jdXMge1xcclxcbiAgICBvdXRsaW5lOiBub25lO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hpcC1zZWxlY3RlZC1jb2xvcjtcXHJcXG4gICAgY29sb3I6ICNmZmY7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBoZWlnaHQ6IDMycHg7XFxyXFxuICBmb250LXNpemU6IDEzcHg7XFxyXFxuICBmb250LXdlaWdodDogNTAwO1xcclxcbiAgY29sb3I6IHJnYmEoMCwwLDAsLjYpO1xcclxcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxyXFxuICBwYWRkaW5nOiAwIDEycHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNoaXAtYmctY29sb3I7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAkY2hpcC1tYXJnaW47XFxyXFxuICBtYXJnaW4tcmlnaHQ6ICRjaGlwLW1hcmdpbjtcXHJcXG5cXHJcXG4gID4gaW1nIHtcXHJcXG4gICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgIG1hcmdpbjogMCA4cHggMCAtMTJweDtcXHJcXG4gICAgaGVpZ2h0OiAzMnB4O1xcclxcbiAgICB3aWR0aDogMzJweDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLmNsb3NlIHtcXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICBmbG9hdDogcmlnaHQ7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTZweDtcXHJcXG4gICAgbGluZS1oZWlnaHQ6IDMycHg7XFxyXFxuICAgIHBhZGRpbmctbGVmdDogOHB4O1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4uY2hpcHMge1xcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaGlwLWJvcmRlci1jb2xvcjtcXHJcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxyXFxuICBtYXJnaW46ICRpbnB1dC1tYXJnaW47XFxyXFxuICBtaW4taGVpZ2h0OiA0NXB4O1xcclxcbiAgb3V0bGluZTogbm9uZTtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAuM3M7XFxyXFxuXFxyXFxuICAmLmZvY3VzIHtcXHJcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaGlwLXNlbGVjdGVkLWNvbG9yO1xcclxcbiAgICBib3gtc2hhZG93OiAwIDFweCAwIDAgJGNoaXAtc2VsZWN0ZWQtY29sb3I7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmOmhvdmVyIHtcXHJcXG4gICAgY3Vyc29yOiB0ZXh0O1xcclxcbiAgfVxcclxcblxcclxcbiAgLmlucHV0IHtcXHJcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXHJcXG4gICAgYm9yZGVyOiAwO1xcclxcbiAgICBjb2xvcjogcmdiYSgwLDAsMCwuNik7XFxyXFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xcclxcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcclxcbiAgICBvdXRsaW5lOiAwO1xcclxcbiAgICBtYXJnaW46IDA7XFxyXFxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXHJcXG4gICAgd2lkdGg6IDEyMHB4ICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuaW5wdXQ6Zm9jdXMge1xcclxcbiAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcXHJcXG4gICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gQXV0b2NvbXBsZXRlXFxyXFxuICAuYXV0b2NvbXBsZXRlLWNvbnRlbnQge1xcclxcbiAgICBtYXJnaW4tdG9wOiAwO1xcclxcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBGb3JtIHByZWZpeFxcclxcbi5wcmVmaXggfiAuY2hpcHMge1xcclxcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxyXFxuICB3aWR0aDogOTIlO1xcclxcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcclxcbn1cXHJcXG4uY2hpcHM6ZW1wdHkgfiBsYWJlbCAge1xcclxcbiAgZm9udC1zaXplOiAwLjhyZW07XFxyXFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0MCUpO1xcclxcbn1cXHJcXG5cIixcIi5jb2xsYXBzaWJsZSB7XFxyXFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJGNvbGxhcHNpYmxlLWJvcmRlci1jb2xvcjtcXHJcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRjb2xsYXBzaWJsZS1ib3JkZXItY29sb3I7XFxyXFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRjb2xsYXBzaWJsZS1ib3JkZXItY29sb3I7XFxyXFxuICBtYXJnaW46ICRlbGVtZW50LXRvcC1tYXJnaW4gMCAkZWxlbWVudC1ib3R0b20tbWFyZ2luIDA7XFxyXFxuICBAZXh0ZW5kIC5zaGFkb3ctMTtcXHJcXG59XFxyXFxuXFxyXFxuLmNvbGxhcHNpYmxlLWhlYWRlciB7XFxyXFxuICAmOmZvY3VzIHtcXHJcXG4gICAgb3V0bGluZTogMFxcclxcbiAgfVxcclxcblxcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICBsaW5lLWhlaWdodDogMS41O1xcclxcbiAgcGFkZGluZzogMXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xsYXBzaWJsZS1oZWFkZXItY29sb3I7XFxyXFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbGxhcHNpYmxlLWJvcmRlci1jb2xvcjtcXHJcXG5cXHJcXG4gIGkge1xcclxcbiAgICB3aWR0aDogMnJlbTtcXHJcXG4gICAgZm9udC1zaXplOiAxLjZyZW07XFxyXFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XFxyXFxuICB9XFxyXFxufVxcclxcbi5rZXlib2FyZC1mb2N1c2VkIC5jb2xsYXBzaWJsZS1oZWFkZXI6Zm9jdXMge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcXHJcXG59XFxyXFxuXFxyXFxuLmNvbGxhcHNpYmxlLWJvZHkge1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sbGFwc2libGUtYm9yZGVyLWNvbG9yO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHBhZGRpbmc6IDJyZW07XFxyXFxufVxcclxcblxcclxcbi8vIFNpZGVuYXYgY29sbGFwc2libGUgc3R5bGluZ1xcclxcbi5zaWRlbmF2LFxcclxcbi5zaWRlbmF2LmZpeGVkIHtcXHJcXG5cXHJcXG4gIC5jb2xsYXBzaWJsZSB7XFxyXFxuICAgIGJvcmRlcjogbm9uZTtcXHJcXG4gICAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG5cXHJcXG4gICAgbGkgeyBwYWRkaW5nOiAwOyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY29sbGFwc2libGUtaGVhZGVyIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICAgIGJvcmRlcjogbm9uZTtcXHJcXG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxyXFxuICAgIGhlaWdodDogaW5oZXJpdDtcXHJcXG4gICAgcGFkZGluZzogMCAkc2lkZW5hdi1wYWRkaW5nO1xcclxcblxcclxcbiAgICAmOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDUpOyB9XFxyXFxuICAgIGkgeyBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLmNvbGxhcHNpYmxlLWJvZHkge1xcclxcbiAgICBib3JkZXI6IDA7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xsYXBzaWJsZS1oZWFkZXItY29sb3I7XFxyXFxuXFxyXFxuICAgIGxpIGEge1xcclxcbiAgICAgIHBhZGRpbmc6IDAgKDcuNXB4ICsgJHNpZGVuYXYtcGFkZGluZylcXHJcXG4gICAgICAgICAgICAgICAwICgxNXB4ICsgJHNpZGVuYXYtcGFkZGluZyk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG59XFxyXFxuXFxyXFxuLy8gUG9wb3V0IENvbGxhcHNpYmxlXFxyXFxuXFxyXFxuLmNvbGxhcHNpYmxlLnBvcG91dCB7XFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxuICBib3gtc2hhZG93OiBub25lO1xcclxcbiAgPiBsaSB7XFxyXFxuICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNiksIDAgMnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcclxcbiAgICAvLyB0cmFuc2Zvcm06IHNjYWxlWCguOTIpO1xcclxcbiAgICBtYXJnaW46IDAgMjRweDtcXHJcXG4gICAgdHJhbnNpdGlvbjogbWFyZ2luIC4zNXMgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKTtcXHJcXG4gIH1cXHJcXG4gID4gbGkuYWN0aXZlIHtcXHJcXG4gICAgYm94LXNoYWRvdzogMCA1cHggMTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xOCksIDAgNHB4IDE1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcclxcbiAgICBtYXJnaW46IDE2cHggMDtcXHJcXG4gICAgLy8gdHJhbnNmb3JtOiBzY2FsZVgoMSk7XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiLy8gMjMuIENvbGxlY3Rpb25zIC0gdmFyaWFibGVzXFxyXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4kY29sbGVjdGlvbi1ib3JkZXItY29sb3I6ICNlMGUwZTAgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tYmctY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tYWN0aXZlLWJnLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWFjdGl2ZS1jb2xvcjogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCA1NSUpICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWhvdmVyLWJnLWNvbG9yOiAjZGRkICFkZWZhdWx0O1xcclxcbiRjb2xsZWN0aW9uLWxpbmstY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxyXFxuJGNvbGxlY3Rpb24tbGluZS1oZWlnaHQ6IDEuNXJlbSAhZGVmYXVsdDtcXHJcXG4vLyAyMy4gQ29sbGVjdGlvbnNcXHJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcclxcblxcclxcbi5jb2xsZWN0aW9uIHtcXHJcXG4gICAgbWFyZ2luOiAkZWxlbWVudC10b3AtbWFyZ2luIDAgJGVsZW1lbnQtYm90dG9tLW1hcmdpbiAwO1xcclxcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sbGVjdGlvbi1ib3JkZXItY29sb3I7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgXFxyXFxuICAgIC5jb2xsZWN0aW9uLWl0ZW0ge1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xsZWN0aW9uLWJnLWNvbG9yO1xcclxcbiAgICAgIGxpbmUtaGVpZ2h0OiAkY29sbGVjdGlvbi1saW5lLWhlaWdodDtcXHJcXG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxyXFxuICAgICAgbWFyZ2luOiAwO1xcclxcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sbGVjdGlvbi1ib3JkZXItY29sb3I7XFxyXFxuICBcXHJcXG4gICAgICAvLyBBdmF0YXIgQ29sbGVjdGlvblxcclxcbiAgICAgICYuYXZhdGFyIHtcXHJcXG4gICAgICAgIG1pbi1oZWlnaHQ6IDg0cHg7XFxyXFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxyXFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICBcXHJcXG4gICAgICAgIC8vIERvbid0IHN0eWxlIGNpcmNsZXMgaW5zaWRlIHByZWxvYWRlciBjbGFzc2VzLlxcclxcbiAgICAgICAgJjpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUsXFxyXFxuICAgICAgICA6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlIHtcXHJcXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICAgICAgICB3aWR0aDogNDJweDtcXHJcXG4gICAgICAgICAgaGVpZ2h0OiA0MnB4O1xcclxcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgICAgICAgICBsZWZ0OiAxNXB4O1xcclxcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBpLmNpcmNsZSB7XFxyXFxuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcXHJcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDQycHg7XFxyXFxuICAgICAgICAgIGNvbG9yOiAjZmZmO1xcclxcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xcclxcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICAgICAgICB9XFxyXFxuICBcXHJcXG4gIFxcclxcbiAgICAgICAgLnRpdGxlIHtcXHJcXG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcclxcbiAgICAgICAgfVxcclxcbiAgXFxyXFxuICAgICAgICBwIHtcXHJcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcclxcbiAgICAgICAgfVxcclxcbiAgXFxyXFxuICAgICAgICAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcclxcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgICAgIHRvcDogMTZweDtcXHJcXG4gICAgICAgICAgcmlnaHQ6IDE2cHg7XFxyXFxuICAgICAgICB9XFxyXFxuICBcXHJcXG4gICAgICB9XFxyXFxuICBcXHJcXG4gIFxcclxcbiAgICAgICY6bGFzdC1jaGlsZCB7XFxyXFxuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xcclxcbiAgICAgIH1cXHJcXG4gIFxcclxcbiAgICAgICYuYWN0aXZlIHtcXHJcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xsZWN0aW9uLWFjdGl2ZS1iZy1jb2xvcjtcXHJcXG4gICAgICAgIGNvbG9yOiAkY29sbGVjdGlvbi1hY3RpdmUtY29sb3I7XFxyXFxuICBcXHJcXG4gICAgICAgIC5zZWNvbmRhcnktY29udGVudCB7XFxyXFxuICAgICAgICAgIGNvbG9yOiAjZmZmO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICBhLmNvbGxlY3Rpb24taXRlbXtcXHJcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgICB0cmFuc2l0aW9uOiAuMjVzO1xcclxcbiAgICAgIGNvbG9yOiAkY29sbGVjdGlvbi1saW5rLWNvbG9yO1xcclxcbiAgICAgICY6bm90KC5hY3RpdmUpIHtcXHJcXG4gICAgICAgICY6aG92ZXIge1xcclxcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1ob3Zlci1iZy1jb2xvcjtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIFxcclxcbiAgICAmLndpdGgtaGVhZGVyIHtcXHJcXG4gICAgICAuY29sbGVjdGlvbi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24tYmctY29sb3I7XFxyXFxuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yO1xcclxcbiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xcclxcbiAgICAgIH1cXHJcXG4gICAgICAuY29sbGVjdGlvbi1pdGVtIHtcXHJcXG4gICAgICAgIHBhZGRpbmctbGVmdDogMzBweDtcXHJcXG4gICAgICB9XFxyXFxuICAgICAgLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcclxcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcclxcbiAgICAgIGZsb2F0OiByaWdodDtcXHJcXG4gICAgICBjb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcXHJcXG4gICAgfVxcclxcbiAgfVwiLFwiLy8gUmVtb3ZlIEZvY3VzIEJveGVzXFxyXFxuc2VsZWN0OmZvY3VzIHtcXHJcXG4gIG91dGxpbmU6ICRzZWxlY3QtZm9jdXM7XFxyXFxufVxcclxcblxcclxcbmJ1dHRvbjpmb2N1cyB7XFxyXFxuICBvdXRsaW5lOiBub25lO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWZvY3VzO1xcclxcbn1cXHJcXG5cXHJcXG5sYWJlbCB7XFxyXFxuICBmb250LXNpemU6ICRsYWJlbC1mb250LXNpemU7XFxyXFxuICBjb2xvcjogJGlucHV0LWJvcmRlci1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuQGltcG9ydCAnaW5wdXQtZmllbGRzJztcXHJcXG5AaW1wb3J0ICdyYWRpby1idXR0b25zJztcXHJcXG5AaW1wb3J0ICdjaGVja2JveGVzJztcXHJcXG5AaW1wb3J0ICdzd2l0Y2hlcyc7XFxyXFxuQGltcG9ydCAnc2VsZWN0JztcXHJcXG5AaW1wb3J0ICdmaWxlLWlucHV0JztcXHJcXG5AaW1wb3J0ICdyYW5nZSc7XFxyXFxuXCIsXCIvKiBUZXh0IElucHV0cyArIFRleHRhcmVhXFxyXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXHJcXG5cXHJcXG4vKiBTdHlsZSBQbGFjZWhvbGRlcnMgKi9cXHJcXG5AdXNlIFxcXCJzYXNzOm1hdGhcXFwiO1xcclxcbjo6cGxhY2Vob2xkZXIge1xcclxcbiAgY29sb3I6ICRwbGFjZWhvbGRlci10ZXh0LWNvbG9yO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBUZXh0IGlucHV0cyAqL1xcclxcblxcclxcbmlucHV0Om5vdChbdHlwZV0pLFxcclxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcclxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXHJcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxyXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXHJcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXHJcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXHJcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxyXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcclxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxyXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXHJcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcclxcbnRleHRhcmVhLnRleHRhcmVhIHtcXHJcXG5cXHJcXG4gIC8vIEdlbmVyYWwgU3R5bGVzXFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJvcmRlci1ib3R0b206ICRpbnB1dC1ib3JkZXI7XFxyXFxuICBib3JkZXItcmFkaXVzOiAwO1xcclxcbiAgb3V0bGluZTogbm9uZTtcXHJcXG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xcclxcbiAgbWFyZ2luOiAkaW5wdXQtbWFyZ2luO1xcclxcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XFxyXFxuICBib3gtc2hhZG93OiBub25lO1xcclxcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxyXFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IC4zcywgYm9yZGVyIC4zcztcXHJcXG5cXHJcXG4gIC8vIERpc2FibGVkIGlucHV0IHN0eWxlXFxyXFxuICAmOmRpc2FibGVkLFxcclxcbiAgJltyZWFkb25seT1cXFwicmVhZG9ubHlcXFwiXSB7XFxyXFxuICAgIGNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxyXFxuICAgIGJvcmRlci1ib3R0b206ICRpbnB1dC1kaXNhYmxlZC1ib3JkZXI7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBEaXNhYmxlZCBsYWJlbCBzdHlsZVxcclxcbiAgJjpkaXNhYmxlZCtsYWJlbCxcXHJcXG4gICZbcmVhZG9ubHk9XFxcInJlYWRvbmx5XFxcIl0rbGFiZWwge1xcclxcbiAgICBjb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gRm9jdXNlZCBpbnB1dCBzdHlsZVxcclxcbiAgJjpmb2N1czpub3QoW3JlYWRvbmx5XSkge1xcclxcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGlucHV0LWZvY3VzLWNvbG9yO1xcclxcbiAgICBib3gtc2hhZG93OiAwIDFweCAwIDAgJGlucHV0LWZvY3VzLWNvbG9yO1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gRm9jdXNlZCBsYWJlbCBzdHlsZVxcclxcbiAgJjpmb2N1czpub3QoW3JlYWRvbmx5XSkrbGFiZWwge1xcclxcbiAgICBjb2xvcjogJGlucHV0LWZvY3VzLWNvbG9yO1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gSGlkZSBoZWxwZXIgdGV4dCBvbiBkYXRhIG1lc3NhZ2VcXHJcXG4gICYudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXHJcXG4gICY6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXHJcXG4gICYuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXHJcXG4gICY6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSB7XFxyXFxuICAgIEBleHRlbmQgJWhpZGRlbi10ZXh0O1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gVmFsaWQgSW5wdXQgU3R5bGVcXHJcXG4gICYudmFsaWQsXFxyXFxuICAmOmZvY3VzLnZhbGlkIHtcXHJcXG4gICAgQGV4dGVuZCAldmFsaWQtaW5wdXQtc3R5bGU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBDdXN0b20gU3VjY2VzcyBNZXNzYWdlXFxyXFxuICAmLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcclxcbiAgJjpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxyXFxuICAgIEBleHRlbmQgJWN1c3RvbS1zdWNjZXNzLW1lc3NhZ2U7XFxyXFxuICB9XFxyXFxuICAmOmZvY3VzLnZhbGlkIH4gbGFiZWwge1xcclxcbiAgICBjb2xvcjogJGlucHV0LXN1Y2Nlc3MtY29sb3I7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBJbnZhbGlkIElucHV0IFN0eWxlXFxyXFxuICAmLmludmFsaWQsXFxyXFxuICAmOmZvY3VzLmludmFsaWQge1xcclxcbiAgICBAZXh0ZW5kICVpbnZhbGlkLWlucHV0LXN0eWxlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gQ3VzdG9tIEVycm9yIG1lc3NhZ2VcXHJcXG4gICYuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXHJcXG4gICY6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxyXFxuICAgIEBleHRlbmQgJWN1c3RvbS1lcnJvci1tZXNzYWdlO1xcclxcbiAgfVxcclxcbiAgJjpmb2N1cy5pbnZhbGlkIH4gbGFiZWwge1xcclxcbiAgICBjb2xvcjogJGlucHV0LWVycm9yLWNvbG9yO1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gRnVsbCB3aWR0aCBsYWJlbCB3aGVuIHVzaW5nIHZhbGlkYXRlIGZvciBlcnJvciBtZXNzYWdlc1xcclxcbiAgJi52YWxpZGF0ZSArIGxhYmVsIHtcXHJcXG4gICAgd2lkdGg6IDEwMCU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBGb3JtIE1lc3NhZ2UgU2hhcmVkIFN0eWxlc1xcclxcbiAgJiArIGxhYmVsOmFmdGVyIHtcXHJcXG4gICAgQGV4dGVuZCAlaW5wdXQtYWZ0ZXItc3R5bGU7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qIFZhbGlkYXRpb24gU2FzcyBQbGFjZWhvbGRlcnMgKi9cXHJcXG4ldmFsaWQtaW5wdXQtc3R5bGUge1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnB1dC1zdWNjZXNzLWNvbG9yO1xcclxcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICRpbnB1dC1zdWNjZXNzLWNvbG9yO1xcclxcbn1cXHJcXG4laW52YWxpZC1pbnB1dC1zdHlsZSB7XFxyXFxuICBib3JkZXItYm90dG9tOiAkaW5wdXQtaW52YWxpZC1ib3JkZXI7XFxyXFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgJGlucHV0LWVycm9yLWNvbG9yO1xcclxcbn1cXHJcXG4laGlkZGVuLXRleHQge1xcclxcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG59XFxyXFxuJWN1c3RvbS1zdWNjZXNzLW1lc3NhZ2Uge1xcclxcbiAgY29udGVudDogYXR0cihkYXRhLXN1Y2Nlc3MpO1xcclxcbiAgY29sb3I6ICRpbnB1dC1zdWNjZXNzLWNvbG9yO1xcclxcbn1cXHJcXG4lY3VzdG9tLWVycm9yLW1lc3NhZ2Uge1xcclxcbiAgY29udGVudDogYXR0cihkYXRhLWVycm9yKTtcXHJcXG4gIGNvbG9yOiAkaW5wdXQtZXJyb3ItY29sb3I7XFxyXFxufVxcclxcbiVpbnB1dC1hZnRlci1zdHlsZSB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdG9wOiAxMDAlO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICB0cmFuc2l0aW9uOiAuMnMgb3BhY2l0eSBlYXNlLW91dCwgLjJzIGNvbG9yIGVhc2Utb3V0O1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vLyBTdHlsaW5nIGZvciBpbnB1dCBmaWVsZCB3cmFwcGVyXFxyXFxuLmlucHV0LWZpZWxkIHtcXHJcXG4gIC8vIElubGluZSBzdHlsZXNcXHJcXG4gICYuaW5saW5lIHtcXHJcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcclxcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xcclxcblxcclxcbiAgICBpbnB1dCxcXHJcXG4gICAgLnNlbGVjdC1kcm9wZG93biB7XFxyXFxuICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLy8gR3V0dGVyIHNwYWNpbmdcXHJcXG4gICYuY29sIHtcXHJcXG4gICAgbGFiZWwge1xcclxcbiAgICAgIGxlZnQ6IG1hdGguZGl2KCRndXR0ZXItd2lkdGgsIDIpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5wcmVmaXggfiBsYWJlbCxcXHJcXG4gICAgLnByZWZpeCB+IC52YWxpZGF0ZSB+IGxhYmVsIHtcXHJcXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSAtICN7JGd1dHRlci13aWR0aH0pO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICBtYXJnaW4tdG9wOiAxcmVtO1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXHJcXG5cXHJcXG4gICYgPiBsYWJlbCB7XFxyXFxuICAgIGNvbG9yOiAkaW5wdXQtYm9yZGVyLWNvbG9yO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgZm9udC1zaXplOiAxcmVtO1xcclxcbiAgICBjdXJzb3I6IHRleHQ7XFxyXFxuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnMgZWFzZS1vdXQsIGNvbG9yIC4ycyBlYXNlLW91dDtcXHJcXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTtcXHJcXG4gICAgdGV4dC1hbGlnbjogaW5pdGlhbDtcXHJcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xcclxcblxcclxcbiAgICAmOm5vdCgubGFiZWwtaWNvbikuYWN0aXZlIHtcXHJcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHNjYWxlKC44KTtcXHJcXG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIEF1dG9maWxsICsgZGF0ZSArIHRpbWUgaW5wdXRzXFxyXFxuICAmID4gaW5wdXRbdHlwZV06LXdlYmtpdC1hdXRvZmlsbDpub3QoLmJyb3dzZXItZGVmYXVsdCk6bm90KFt0eXBlPVxcXCJzZWFyY2hcXFwiXSkgKyBsYWJlbCxcXHJcXG4gICYgPiBpbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsLFxcclxcbiAgJiA+IGlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWwge1xcclxcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHNjYWxlKC44KTtcXHJcXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcclxcbiAgfVxcclxcblxcclxcbiAgLmhlbHBlci10ZXh0IHtcXHJcXG4gICAgJjo6YWZ0ZXIge1xcclxcbiAgICAgIG9wYWNpdHk6IDE7XFxyXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICAgIHRvcDogMDtcXHJcXG4gICAgICBsZWZ0OiAwO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgbWluLWhlaWdodDogMThweDtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXHJcXG4gICAgY29sb3I6IHJnYmEoMCwwLDAsLjU0KTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIFByZWZpeCBJY29uc1xcclxcbiAgLnByZWZpeCB7XFxyXFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgd2lkdGg6ICRpbnB1dC1oZWlnaHQ7XFxyXFxuICAgIGZvbnQtc2l6ZTogJGlucHV0LWljb24tc2l6ZTtcXHJcXG4gICAgdHJhbnNpdGlvbjogY29sb3IgLjJzO1xcclxcbiAgIC8vIHRvcDogKCRpbnB1dC1oZWlnaHQgLSAkaW5wdXQtaWNvbi1zaXplKSAvIDI7XFxyXFxuXFxyXFxuICAgICYuYWN0aXZlIHsgY29sb3I6ICRpbnB1dC1mb2N1cy1jb2xvcjsgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLnByZWZpeCB+IGlucHV0LFxcclxcbiAgLnByZWZpeCB+IHRleHRhcmVhLFxcclxcbiAgLnByZWZpeCB+IGxhYmVsLFxcclxcbiAgLnByZWZpeCB+IC52YWxpZGF0ZSB+IGxhYmVsLFxcclxcbiAgLnByZWZpeCB+IC5oZWxwZXItdGV4dCxcXHJcXG4gIC5wcmVmaXggfiAuYXV0b2NvbXBsZXRlLWNvbnRlbnQge1xcclxcbiAgICBtYXJnaW4tbGVmdDogM3JlbTtcXHJcXG4gICAgd2lkdGg6IDkyJTtcXHJcXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcclxcbiAgfVxcclxcblxcclxcbiAgLnByZWZpeCB+IGxhYmVsIHsgbWFyZ2luLWxlZnQ6IDNyZW07IH1cXHJcXG5cXHJcXG4gIEBtZWRpYSAjeyRtZWRpdW0tYW5kLWRvd259IHtcXHJcXG4gICAgLnByZWZpeCB+IGlucHV0IHtcXHJcXG4gICAgICB3aWR0aDogODYlO1xcclxcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgQG1lZGlhICN7JHNtYWxsLWFuZC1kb3dufSB7XFxyXFxuICAgIC5wcmVmaXggfiBpbnB1dCB7XFxyXFxuICAgICAgd2lkdGg6IDgwJTtcXHJcXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLyogU2VhcmNoIEZpZWxkICovXFxyXFxuXFxyXFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcclxcbiAgdHJhbnNpdGlvbjogLjNzIGJhY2tncm91bmQtY29sb3I7XFxyXFxuXFxyXFxuICAubmF2LXdyYXBwZXIgJiB7XFxyXFxuICAgIGhlaWdodDogaW5oZXJpdDtcXHJcXG4gICAgcGFkZGluZy1sZWZ0OiA0cmVtO1xcclxcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNHJlbSk7XFxyXFxuICAgIGJvcmRlcjogMDtcXHJcXG4gICAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICY6Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XFxyXFxuICAgIGJvcmRlcjogMDtcXHJcXG4gICAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG4gICAgY29sb3I6ICM0NDQ7XFxyXFxuXFxyXFxuICAgICYgKyBsYWJlbCBpLFxcclxcbiAgICAmIH4gLm1kaS1uYXZpZ2F0aW9uLWNsb3NlLFxcclxcbiAgICAmIH4gLm1hdGVyaWFsLWljb25zIHtcXHJcXG4gICAgICBjb2xvcjogIzQ0NDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJiArIC5sYWJlbC1pY29uIHtcXHJcXG4gICAgdHJhbnNmb3JtOiBub25lO1xcclxcbiAgICBsZWZ0OiAxcmVtO1xcclxcbiAgfVxcclxcblxcclxcbiAgJiB+IC5tZGktbmF2aWdhdGlvbi1jbG9zZSxcXHJcXG4gICYgfiAubWF0ZXJpYWwtaWNvbnMge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgcmlnaHQ6IDFyZW07XFxyXFxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICBmb250LXNpemU6ICRpbnB1dC1pY29uLXNpemU7XFxyXFxuICAgIHRyYW5zaXRpb246IC4zcyBjb2xvcjtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLyogVGV4dGFyZWEgKi9cXHJcXG5cXHJcXG4vLyBEZWZhdWx0IHRleHRhcmVhXFxyXFxudGV4dGFyZWEge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG5cXHJcXG4gICYudGV4dGFyZWEge1xcclxcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcclxcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47IC8qIHByZXZlbnRzIHNjcm9sbCBiYXIgZmxhc2ggKi9cXHJcXG4gICAgcGFkZGluZzogLjhyZW0gMCAuOHJlbSAwOyAvKiBwcmV2ZW50cyB0ZXh0IGp1bXAgb24gRW50ZXIga2V5cHJlc3MgKi9cXHJcXG4gICAgcmVzaXplOiBub25lO1xcclxcbiAgICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xcclxcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBGb3IgdGV4dGFyZWEgYXV0b3Jlc2l6ZVxcclxcblxcclxcbi5oaWRkZW5kaXYge1xcclxcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcclxcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcclxcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcclxcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgLyogZnV0dXJlIHZlcnNpb24gb2YgZGVwcmVjYXRlZCAnd29yZC13cmFwJyAqL1xcclxcbiAgcGFkZGluZy10b3A6IDEuMnJlbTsgLyogcHJldmVudHMgdGV4dCBqdW1wIG9uIEVudGVyIGtleXByZXNzICovXFxyXFxuXFxyXFxuICAvLyBSZWR1Y2VzIHJlcGFpbnRzXFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB0b3A6IDA7XFxyXFxuICB6LWluZGV4OiAtMTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLyogQXV0b2NvbXBsZXRlICovXFxyXFxuLmF1dG9jb21wbGV0ZS1jb250ZW50IHtcXHJcXG4gIGxpIHtcXHJcXG4gICAgLmhpZ2hsaWdodCB7IGNvbG9yOiAjNDQ0OyB9XFxyXFxuXFxyXFxuICAgIGltZyB7XFxyXFxuICAgICAgLy8gaGVpZ2h0OiAkZHJvcGRvd24taXRlbS1oZWlnaHQgLSAxMDtcXHJcXG4gICAgICAvLyB3aWR0aDogJGRyb3Bkb3duLWl0ZW0taGVpZ2h0IC0gMTA7XFxyXFxuICAgICAgbWFyZ2luOiA1cHggMTVweDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vKiBDaGFyYWN0ZXIgQ291bnRlciAqL1xcclxcbi5jaGFyYWN0ZXItY291bnRlciB7XFxyXFxuICBtaW4taGVpZ2h0OiAxOHB4O1xcclxcbn1cXHJcXG5cIixcIi8qIFJhZGlvIEJ1dHRvbnNcXHJcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcclxcblxcclxcbi8vIFJlbW92ZSBkZWZhdWx0IFJhZGlvIEJ1dHRvbnNcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoOmNoZWNrZWQpLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmNoZWNrZWQge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgb3BhY2l0eTogMDtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoOmNoZWNrZWQpICsgc3BhbixcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbiB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICBwYWRkaW5nLWxlZnQ6IDM1cHg7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBoZWlnaHQ6IDI1cHg7XFxyXFxuICBsaW5lLWhlaWdodDogMjVweDtcXHJcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXHJcXG4gIHRyYW5zaXRpb246IC4yOHMgZWFzZTtcXHJcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXSArIHNwYW46YmVmb3JlLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdICsgc3BhbjphZnRlciB7XFxyXFxuICBjb250ZW50OiAnJztcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxyXFxuICBtYXJnaW46IDRweDtcXHJcXG4gIHdpZHRoOiAxNnB4O1xcclxcbiAgaGVpZ2h0OiAxNnB4O1xcclxcbiAgei1pbmRleDogMDtcXHJcXG4gIHRyYW5zaXRpb246IC4yOHMgZWFzZTtcXHJcXG59XFxyXFxuXFxyXFxuLyogVW5jaGVja2VkIHN0eWxlcyAqL1xcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlcixcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbjpiZWZvcmUsXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06Y2hlY2tlZCArIHNwYW46YWZ0ZXIsXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG59XFxyXFxuXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyIHtcXHJcXG4gIGJvcmRlcjogMnB4IHNvbGlkICRyYWRpby1lbXB0eS1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06bm90KDpjaGVja2VkKSArIHNwYW46YWZ0ZXIge1xcclxcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXHJcXG59XFxyXFxuXFxyXFxuLyogQ2hlY2tlZCBzdHlsZXMgKi9cXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcclxcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxyXFxufVxcclxcblxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSxcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxyXFxuICBib3JkZXI6ICRyYWRpby1ib3JkZXI7XFxyXFxufVxcclxcblxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICRyYWRpby1maWxsLWNvbG9yO1xcclxcbn1cXHJcXG5cXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbjphZnRlciB7XFxyXFxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBSYWRpbyBXaXRoIGdhcCAqL1xcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXHJcXG4gIHRyYW5zZm9ybTogc2NhbGUoLjUpO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBGb2N1c2VkIHN0eWxlcyAqL1xcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLnRhYmJlZDpmb2N1cyArIHNwYW46YmVmb3JlIHtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgwLDAsMCwuMSk7XFxyXFxufVxcclxcblxcclxcbi8qIERpc2FibGVkIFJhZGlvIFdpdGggZ2FwICovXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0ud2l0aC1nYXA6ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXHJcXG4gIGJvcmRlcjogMnB4IHNvbGlkICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0ud2l0aC1nYXA6ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBEaXNhYmxlZCBzdHlsZSAqL1xcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXHJcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICBib3JkZXItY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06ZGlzYWJsZWQgKyBzcGFuIHtcXHJcXG4gIGNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxyXFxufVxcclxcblxcclxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSB7XFxyXFxuICBib3JkZXItY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgYm9yZGVyLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtc29saWQtY29sb3I7XFxyXFxufVxcclxcblwiLFwiLyogQ2hlY2tib3hlc1xcclxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxyXFxuXFxyXFxuLyogUmVtb3ZlIGRlZmF1bHQgY2hlY2tib3ggKi9cXHJcXG5bdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpub3QoOmNoZWNrZWQpLFxcclxcblt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgb3BhY2l0eTogMDtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4vLyBDaGVja2JveCBTdHlsZXNcXHJcXG5bdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxyXFxuICAvLyBUZXh0IExhYmVsIFN0eWxlXFxyXFxuICArIHNwYW46bm90KC5sZXZlcikge1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgIHBhZGRpbmctbGVmdDogMzVweDtcXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgIGhlaWdodDogMjVweDtcXHJcXG4gICAgbGluZS1oZWlnaHQ6IDI1cHg7XFxyXFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXHJcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKiBjaGVja2JveCBhc3BlY3QgKi9cXHJcXG4gICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUsXFxyXFxuICAmOm5vdCguZmlsbGVkLWluKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcclxcbiAgICBjb250ZW50OiAnJztcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHdpZHRoOiAxOHB4O1xcclxcbiAgICBoZWlnaHQ6IDE4cHg7XFxyXFxuICAgIHotaW5kZXg6IDA7XFxyXFxuICAgIGJvcmRlcjogMnB4IHNvbGlkICRyYWRpby1lbXB0eS1jb2xvcjtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xcclxcbiAgICBtYXJnaW4tdG9wOiAzcHg7XFxyXFxuICAgIHRyYW5zaXRpb246IC4ycztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICY6bm90KC5maWxsZWQtaW4pICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxyXFxuICAgIGJvcmRlcjogMDtcXHJcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICY6bm90KDpjaGVja2VkKTpkaXNhYmxlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXHJcXG4gICAgYm9yZGVyOiBub25lO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBGb2N1c2VkIHN0eWxlc1xcclxcbiAgJi50YWJiZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXHJcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXHJcXG4gICAgYm9yZGVyOiAwO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICAgIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgwLDAsMCwuMSk7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjEpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5bdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkIHtcXHJcXG4gICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcclxcbiAgICB0b3A6IC00cHg7XFxyXFxuICAgIGxlZnQ6IC01cHg7XFxyXFxuICAgIHdpZHRoOiAxMnB4O1xcclxcbiAgICBoZWlnaHQ6IDIycHg7XFxyXFxuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXHJcXG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXHJcXG4gICAgYm9yZGVyLXJpZ2h0OiAkcmFkaW8tYm9yZGVyO1xcclxcbiAgICBib3JkZXItYm90dG9tOiAkcmFkaW8tYm9yZGVyO1xcclxcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0MGRlZyk7XFxyXFxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcclxcbiAgfVxcclxcblxcclxcbiAgJjpkaXNhYmxlZCArIHNwYW46YmVmb3JlIHtcXHJcXG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vKiBJbmRldGVybWluYXRlIGNoZWNrYm94ICovXFxyXFxuW3R5cGU9XFxcImNoZWNrYm94XFxcIl06aW5kZXRlcm1pbmF0ZSB7XFxyXFxuICArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXHJcXG4gICAgdG9wOiAtMTFweDtcXHJcXG4gICAgbGVmdDogLTEycHg7XFxyXFxuICAgIHdpZHRoOiAxMHB4O1xcclxcbiAgICBoZWlnaHQ6IDIycHg7XFxyXFxuICAgIGJvcmRlci10b3A6IG5vbmU7XFxyXFxuICAgIGJvcmRlci1sZWZ0OiBub25lO1xcclxcbiAgICBib3JkZXItcmlnaHQ6ICRyYWRpby1ib3JkZXI7XFxyXFxuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxyXFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXHJcXG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcclxcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBEaXNhYmxlZCBpbmRldGVybWluYXRlXFxyXFxuICAmOmRpc2FibGVkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcclxcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBGaWxsZWQgaW4gU3R5bGVcXHJcXG5bdHlwZT1cXFwiY2hlY2tib3hcXFwiXS5maWxsZWQtaW4ge1xcclxcbiAgLy8gR2VuZXJhbFxcclxcbiAgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSxcXHJcXG4gICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxyXFxuICAgIGNvbnRlbnQ6ICcnO1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIC8qIC4xcyBkZWxheSBpcyBmb3IgY2hlY2sgYW5pbWF0aW9uICovXFxyXFxuICAgIHRyYW5zaXRpb246IGJvcmRlciAuMjVzLCBiYWNrZ3JvdW5kLWNvbG9yIC4yNXMsIHdpZHRoIC4yMHMgLjFzLCBoZWlnaHQgLjIwcyAuMXMsIHRvcCAuMjBzIC4xcywgbGVmdCAuMjBzIC4xcztcXHJcXG4gICAgei1pbmRleDogMTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIFVuY2hlY2tlZCBzdHlsZVxcclxcbiAgJjpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcclxcbiAgICB3aWR0aDogMDtcXHJcXG4gICAgaGVpZ2h0OiAwO1xcclxcbiAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXHJcXG4gICAgbGVmdDogNnB4O1xcclxcbiAgICB0b3A6IDEwcHg7XFxyXFxuICAgIHRyYW5zZm9ybTogcm90YXRlWigzN2RlZyk7XFxyXFxuICAgIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICY6bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcclxcbiAgICBoZWlnaHQ6IDIwcHg7XFxyXFxuICAgIHdpZHRoOiAyMHB4O1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG4gICAgYm9yZGVyOiAycHggc29saWQgJHJhZGlvLWVtcHR5LWNvbG9yO1xcclxcbiAgICB0b3A6IDBweDtcXHJcXG4gICAgei1pbmRleDogMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIENoZWNrZWQgc3R5bGVcXHJcXG4gICY6Y2hlY2tlZCB7XFxyXFxuICAgICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcclxcbiAgICAgIHRvcDogMDtcXHJcXG4gICAgICBsZWZ0OiAxcHg7XFxyXFxuICAgICAgd2lkdGg6IDhweDtcXHJcXG4gICAgICBoZWlnaHQ6IDEzcHg7XFxyXFxuICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcclxcbiAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxyXFxuICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgJGlucHV0LWJhY2tncm91bmQ7XFxyXFxuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRpbnB1dC1iYWNrZ3JvdW5kO1xcclxcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlWigzN2RlZyk7XFxyXFxuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxyXFxuICAgICAgdG9wOiAwO1xcclxcbiAgICAgIHdpZHRoOiAyMHB4O1xcclxcbiAgICAgIGhlaWdodDogMjBweDtcXHJcXG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XFxyXFxuICAgICAgei1pbmRleDogMDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLy8gRm9jdXNlZCBzdHlsZXNcXHJcXG4gICYudGFiYmVkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gICAgYm9yZGVyLWNvbG9yOiAkcmFkaW8tZW1wdHktY29sb3I7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjEpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJi50YWJiZWQ6Y2hlY2tlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcclxcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XFxyXFxuICAgIGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIERpc2FibGVkIHN0eWxlXFxyXFxuICAmOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICY6ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcclxcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtc29saWQtY29sb3I7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgfVxcclxcblxcclxcbiAgJjpkaXNhYmxlZDpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1zb2xpZC1jb2xvcjtcXHJcXG4gICAgYm9yZGVyLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtc29saWQtY29sb3I7XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiLyogU3dpdGNoXFxyXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXHJcXG5cXHJcXG4uc3dpdGNoLFxcclxcbi5zd2l0Y2ggKiB7XFxyXFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbi5zd2l0Y2ggbGFiZWwge1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICB3aWR0aDogMDtcXHJcXG4gIGhlaWdodDogMDtcXHJcXG5cXHJcXG4gICY6Y2hlY2tlZCArIC5sZXZlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRzd2l0Y2gtY2hlY2tlZC1sZXZlci1iZztcXHJcXG5cXHJcXG4gICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xcclxcbiAgICAgIGxlZnQ6IDE4cHg7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJjphZnRlciB7XFxyXFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHN3aXRjaC1iZy1jb2xvcjtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4uc3dpdGNoIGxhYmVsIC5sZXZlciB7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIHdpZHRoOiAzNnB4O1xcclxcbiAgaGVpZ2h0OiAxNHB4O1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJHN3aXRjaC11bmNoZWNrZWQtbGV2ZXItYmc7XFxyXFxuICBib3JkZXItcmFkaXVzOiAkc3dpdGNoLXJhZGl1cztcXHJcXG4gIC8vbWFyZ2luLXJpZ2h0OiAxMHB4O1xcclxcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzIGVhc2U7XFxyXFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcclxcbiAgbWFyZ2luOiAwIDE2cHg7XFxyXFxuXFxyXFxuICAmOmJlZm9yZSwgJjphZnRlciB7XFxyXFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gICAgd2lkdGg6IDIwcHg7XFxyXFxuICAgIGhlaWdodDogMjBweDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICB0b3A6IC0zcHg7XFxyXFxuICAgIHRyYW5zaXRpb246IGxlZnQgMC4zcyBlYXNlLCBiYWNrZ3JvdW5kIC4zcyBlYXNlLCBib3gtc2hhZG93IDAuMXMgZWFzZSwgdHJhbnNmb3JtIC4xcyBlYXNlO1xcclxcbiAgfVxcclxcblxcclxcbiAgJjpiZWZvcmUge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGl6ZSgkc3dpdGNoLWJnLWNvbG9yLCAuODUpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJjphZnRlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRzd2l0Y2gtdW5jaGVja2VkLWJnO1xcclxcbiAgICBib3gtc2hhZG93OiAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBTd2l0Y2ggYWN0aXZlIHN0eWxlXFxyXFxuaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpub3QoOmRpc2FibGVkKSB+IC5sZXZlcjphY3RpdmU6OmJlZm9yZSxcXHJcXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOm5vdCg6ZGlzYWJsZWQpLnRhYmJlZDpmb2N1cyB+IC5sZXZlcjo6YmVmb3JlIHtcXHJcXG4gIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50aXplKCRzd2l0Y2gtYmctY29sb3IsIC44NSk7XFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpIH4gLmxldmVyOmFjdGl2ZTpiZWZvcmUsXFxyXFxuaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCkudGFiYmVkOmZvY3VzIH4gLmxldmVyOjpiZWZvcmUge1xcclxcbiAgdHJhbnNmb3JtOiBzY2FsZSgyLjQpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDgpO1xcclxcbn1cXHJcXG5cXHJcXG4vLyBEaXNhYmxlZCBTdHlsZXNcXHJcXG4uc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXSArIC5sZXZlciB7XFxyXFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4xMik7XFxyXFxufVxcclxcblxcclxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdICsgLmxldmVyOmFmdGVyLFxcclxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdOmNoZWNrZWQgKyAubGV2ZXI6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLXNvbGlkLWNvbG9yO1xcclxcbn1cXHJcXG5cIixcIi8qIFNlbGVjdCBGaWVsZFxcclxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxyXFxuXFxyXFxuc2VsZWN0IHsgZGlzcGxheTogbm9uZTsgfVxcclxcbnNlbGVjdC5icm93c2VyLWRlZmF1bHQgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcblxcclxcbnNlbGVjdCB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LWJhY2tncm91bmQ7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIHBhZGRpbmc6ICRzZWxlY3QtcGFkZGluZztcXHJcXG4gIGJvcmRlcjogJHNlbGVjdC1ib3JkZXI7XFxyXFxuICBib3JkZXItcmFkaXVzOiAkc2VsZWN0LXJhZGl1cztcXHJcXG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcXHJcXG59XFxyXFxuXFxyXFxuLnNlbGVjdC1sYWJlbCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxufVxcclxcblxcclxcbi5zZWxlY3Qtd3JhcHBlciB7XFxyXFxuICAmLnZhbGlkIC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcclxcbiAgJi5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdIHtcXHJcXG4gICAgQGV4dGVuZCAlaGlkZGVuLXRleHQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmLnZhbGlkIHtcXHJcXG4gICAgJiA+IGlucHV0LnNlbGVjdC1kcm9wZG93biB7XFxyXFxuICAgICAgQGV4dGVuZCAldmFsaWQtaW5wdXQtc3R5bGU7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJiB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxyXFxuICAgICAgQGV4dGVuZCAlY3VzdG9tLXN1Y2Nlc3MtbWVzc2FnZTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi5pbnZhbGlkIHtcXHJcXG4gICAgJiA+IGlucHV0LnNlbGVjdC1kcm9wZG93bixcXHJcXG4gICAgJiA+IGlucHV0LnNlbGVjdC1kcm9wZG93bjpmb2N1cyB7XFxyXFxuICAgICAgQGV4dGVuZCAlaW52YWxpZC1pbnB1dC1zdHlsZTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAmIH4gLmhlbHBlci10ZXh0OmFmdGVyIHtcXHJcXG4gICAgICBAZXh0ZW5kICVjdXN0b20tZXJyb3ItbWVzc2FnZTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi52YWxpZCArIGxhYmVsLFxcclxcbiAgJi5pbnZhbGlkICsgbGFiZWwge1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmICsgbGFiZWw6YWZ0ZXIge1xcclxcbiAgICBAZXh0ZW5kICVpbnB1dC1hZnRlci1zdHlsZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHJcXG4gIGlucHV0LnNlbGVjdC1kcm9wZG93biB7XFxyXFxuICAgICY6Zm9jdXMge1xcclxcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaW5wdXQtZm9jdXMtY29sb3I7XFxyXFxuICAgIH1cXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgICBib3JkZXI6IG5vbmU7XFxyXFxuICAgIGJvcmRlci1ib3R0b206ICRpbnB1dC1ib3JkZXI7XFxyXFxuICAgIG91dGxpbmU6IG5vbmU7XFxyXFxuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcXHJcXG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICBmb250LXNpemU6ICRpbnB1dC1mb250LXNpemU7XFxyXFxuICAgIG1hcmdpbjogJGlucHV0LW1hcmdpbjtcXHJcXG4gICAgcGFkZGluZzogMDtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIHVzZXItc2VsZWN0Om5vbmU7XFxyXFxuICAgIHotaW5kZXg6IDE7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY2FyZXQge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHJpZ2h0OiAwO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGJvdHRvbTogMDtcXHJcXG4gICAgbWFyZ2luOiBhdXRvIDA7XFxyXFxuICAgIHotaW5kZXg6IDA7XFxyXFxuICAgIGZpbGw6IHJnYmEoMCwwLDAsLjg3KTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYgKyBsYWJlbCB7XFxyXFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgdG9wOiAtMjZweDtcXHJcXG4gICAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBEaXNhYmxlZCBzdHlsZXNcXHJcXG5zZWxlY3Q6ZGlzYWJsZWQge1xcclxcbiAgY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXHJcXG59XFxyXFxuXFxyXFxuLnNlbGVjdC13cmFwcGVyLmRpc2FibGVkIHtcXHJcXG4gICsgbGFiZWwge1xcclxcbiAgICBjb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgfVxcclxcbiAgLmNhcmV0IHtcXHJcXG4gICAgZmlsbDogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4uc2VsZWN0LXdyYXBwZXIgaW5wdXQuc2VsZWN0LWRyb3Bkb3duOmRpc2FibGVkIHtcXHJcXG4gIGNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxyXFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxyXFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLnNlbGVjdC13cmFwcGVyIGkge1xcclxcbiAgY29sb3I6ICRzZWxlY3QtZGlzYWJsZWQtY29sb3I7XFxyXFxufVxcclxcblxcclxcbi5zZWxlY3QtZHJvcGRvd24gbGkuZGlzYWJsZWQsXFxyXFxuLnNlbGVjdC1kcm9wZG93biBsaS5kaXNhYmxlZCA+IHNwYW4sXFxyXFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCB7XFxyXFxuICBjb2xvcjogJHNlbGVjdC1kaXNhYmxlZC1jb2xvcjtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG5cXHJcXG5ib2R5LmtleWJvYXJkLWZvY3VzZWQge1xcclxcbiAgLnNlbGVjdC1kcm9wZG93bi5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdC1vcHRpb24tZm9jdXM7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCB7XFxyXFxuICBsaSB7XFxyXFxuICAgICY6aG92ZXIge1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3Qtb3B0aW9uLWhvdmVyO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYuc2VsZWN0ZWQge1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3Qtb3B0aW9uLXNlbGVjdGVkO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIFByZWZpeCBJY29uc1xcclxcbi5wcmVmaXggfiAuc2VsZWN0LXdyYXBwZXIge1xcclxcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxyXFxuICB3aWR0aDogOTIlO1xcclxcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcclxcbn1cXHJcXG5cXHJcXG4ucHJlZml4IH4gbGFiZWwgeyBtYXJnaW4tbGVmdDogM3JlbTsgfVxcclxcblxcclxcbi8vIEljb25zXFxyXFxuLnNlbGVjdC1kcm9wZG93biBsaSB7XFxyXFxuICBpbWcge1xcclxcbiAgICAvLyBoZWlnaHQ6ICRkcm9wZG93bi1pdGVtLWhlaWdodCAtIDEwO1xcclxcbiAgICAvLyB3aWR0aDogJGRyb3Bkb3duLWl0ZW0taGVpZ2h0IC0gMTA7XFxyXFxuICAgIG1hcmdpbjogNXB4IDE1cHg7XFxyXFxuICAgIGZsb2F0OiByaWdodDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLy8gT3B0Z3JvdXAgc3R5bGVzXFxyXFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCB7XFxyXFxuICAvLyBib3JkZXItdG9wOiAxcHggc29saWQgJGRyb3Bkb3duLWhvdmVyLWJnLWNvbG9yO1xcclxcblxcclxcbiAgJi5zZWxlY3RlZCA+IHNwYW4ge1xcclxcbiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAuNyk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmID4gc3BhbiB7XFxyXFxuICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIC40KTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYgfiBsaS5vcHRncm91cC1vcHRpb24ge1xcclxcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiLyogRmlsZSBJbnB1dFxcclxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxyXFxuXFxyXFxuLmZpbGUtZmllbGQge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcclxcbiAgLmZpbGUtcGF0aC13cmFwcGVyIHtcXHJcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgaW5wdXQuZmlsZS1wYXRoIHsgd2lkdGg6IDEwMCU7IH1cXHJcXG5cXHJcXG4gIC5idG4ge1xcclxcbiAgICBmbG9hdDogbGVmdDtcXHJcXG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xcclxcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHNwYW4ge1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpbnB1dFt0eXBlPWZpbGVdIHtcXHJcXG5cXHJcXG4gICAgLy8gTmVlZGVkIHRvIG92ZXJyaWRlIHdlYmtpdCBidXR0b25cXHJcXG4gICAgJjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcclxcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIHJpZ2h0OiAwO1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICBib3R0b206IDA7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICBtYXJnaW46IDA7XFxyXFxuICAgIHBhZGRpbmc6IDA7XFxyXFxuICAgIGZvbnQtc2l6ZTogMjBweDtcXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICBvcGFjaXR5OiAwO1xcclxcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiLyogUmFuZ2VcXHJcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcclxcblxcclxcbi5yYW5nZS1maWVsZCB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9cmFuZ2VdLFxcclxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iIHtcXHJcXG4gIC8vIEBleHRlbmQgLm5vLXNlbGVjdDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxuICBvdXRsaW5lOiBub25lO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBtYXJnaW46IDE1cHggMDtcXHJcXG4gIHBhZGRpbmc6IDA7XFxyXFxuXFxyXFxuICAmOmZvY3VzIHtcXHJcXG4gICAgb3V0bGluZTogbm9uZTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdG9wOiAxMHB4O1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGhlaWdodDogMDtcXHJcXG4gIHdpZHRoOiAwO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJHJhZGlvLWZpbGwtY29sb3I7XFxyXFxuICBtYXJnaW4tbGVmdDogN3B4O1xcclxcblxcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcXHJcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxyXFxuXFxyXFxuICAudmFsdWUge1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgd2lkdGg6IDMwcHg7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgY29sb3I6ICRyYWRpby1maWxsLWNvbG9yO1xcclxcbiAgICBmb250LXNpemU6IDA7XFxyXFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYuYWN0aXZlIHtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDtcXHJcXG5cXHJcXG4gICAgLnZhbHVlIHtcXHJcXG4gICAgICBjb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XFxyXFxuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxyXFxuICAgICAgbWFyZ2luLXRvcDogOHB4O1xcclxcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBTaGFyZWRcXHJcXG5AbWl4aW4gcmFuZ2UtdHJhY2sge1xcclxcbiAgaGVpZ2h0OiAkdHJhY2staGVpZ2h0O1xcclxcbiAgYmFja2dyb3VuZDogI2MyYzBjMjtcXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuQG1peGluIHJhbmdlLXRodW1iIHtcXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGhlaWdodDogJHJhbmdlLWhlaWdodDtcXHJcXG4gIHdpZHRoOiAkcmFuZ2Utd2lkdGg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kOiAkcmFkaW8tZmlsbC1jb2xvcjtcXHJcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjNzO1xcclxcbn1cXHJcXG5cXHJcXG4vLyBXZWJLaXRcXHJcXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxyXFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XFxyXFxuICBAaW5jbHVkZSByYW5nZS10cmFjaztcXHJcXG59XFxyXFxuXFxyXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXHJcXG4gIEBpbmNsdWRlIHJhbmdlLXRodW1iO1xcclxcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJHJhZGlvLWZpbGwtY29sb3I7XFxyXFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcclxcbiAgbWFyZ2luOiAtNXB4IDAgMCAwO1xcclxcblxcclxcbn1cXHJcXG5cXHJcXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgkcmFkaW8tZmlsbC1jb2xvciwgLjI2KTtcXHJcXG59XFxyXFxuXFxyXFxuLy8gRmlyZUZveFxcclxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXHJcXG4gIC8qIGZpeCBmb3IgRkYgdW5hYmxlIHRvIGFwcGx5IGZvY3VzIHN0eWxlIGJ1ZyAgKi9cXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xcclxcblxcclxcbiAgLypyZXF1aXJlZCBmb3IgcHJvcGVyIHRyYWNrIHNpemluZyBpbiBGRiovXFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRyYWNrIHtcXHJcXG4gIEBpbmNsdWRlIHJhbmdlLXRyYWNrO1xcclxcbn1cXHJcXG5cXHJcXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1mb2N1cy1pbm5lciB7XFxyXFxuICBib3JkZXI6IDA7XFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRodW1iIHtcXHJcXG4gIEBpbmNsdWRlIHJhbmdlLXRodW1iO1xcclxcbiAgbWFyZ2luLXRvcDogLTVweDtcXHJcXG59XFxyXFxuXFxyXFxuLy8gaGlkZSB0aGUgb3V0bGluZSBiZWhpbmQgdGhlIGJvcmRlclxcclxcbmlucHV0W3R5cGU9cmFuZ2VdOi1tb3otZm9jdXNyaW5nIHtcXHJcXG4gIG91dGxpbmU6IDFweCBzb2xpZCAjZmZmO1xcclxcbiAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxyXFxufVxcclxcblxcclxcbi5rZXlib2FyZC1mb2N1c2VkIGlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzOm5vdCguYWN0aXZlKTo6LW1vei1yYW5nZS10aHVtYiB7XFxyXFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoJHJhZGlvLWZpbGwtY29sb3IsIC4yNik7XFxyXFxufVxcclxcblxcclxcbi8vIElFIDEwK1xcclxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2sge1xcclxcbiAgaGVpZ2h0OiAkdHJhY2staGVpZ2h0O1xcclxcblxcclxcbiAgLy8gcmVtb3ZlIGJnIGNvbG91ciBmcm9tIHRoZSB0cmFjaywgd2UnbGwgdXNlIG1zLWZpbGwtbG93ZXIgYW5kIG1zLWZpbGwtdXBwZXIgaW5zdGVhZFxcclxcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuXFxyXFxuICAvLyBsZWF2ZSByb29tIGZvciB0aGUgbGFyZ2VyIHRodW1iIHRvIG92ZXJmbG93IHdpdGggYSB0cmFuc3BhcmVudCBib3JkZXIgKi9cXHJcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICBib3JkZXItd2lkdGg6IDZweCAwO1xcclxcblxcclxcbiAgLypyZW1vdmUgZGVmYXVsdCB0aWNrIG1hcmtzKi9cXHJcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG59XFxyXFxuXFxyXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyIHtcXHJcXG4gIGJhY2tncm91bmQ6ICM3Nzc7XFxyXFxufVxcclxcblxcclxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC11cHBlciB7XFxyXFxuICBiYWNrZ3JvdW5kOiAjZGRkO1xcclxcbn1cXHJcXG5cXHJcXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iIHtcXHJcXG4gIEBpbmNsdWRlIHJhbmdlLXRodW1iO1xcclxcbn1cXHJcXG5cXHJcXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi1tcy10aHVtYiB7XFxyXFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoJHJhZGlvLWZpbGwtY29sb3IsIC4yNik7XFxyXFxufVxcclxcblwiLFwiLnBhcmFsbGF4IHtcXHJcXG5cXHJcXG4gIC8qIFNldCBhIHNwZWNpZmljIGhlaWdodCAqL1xcclxcbiAgbWluLWhlaWdodDogNTAwcHg7XFxyXFxuXFxyXFxuICAvKiBDcmVhdGUgdGhlIHBhcmFsbGF4IHNjcm9sbGluZyBlZmZlY3QgKi9cXHJcXG4gIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcXHJcXG59XCIsXCIkY3ViZS1oZWlnaHQ6MjAwcHg7XFxyXFxuKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG5cXHJcXG5ib2R5IHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IH1cXHJcXG5cXHJcXG4uc2NlbmUge1xcclxcbiAgd2lkdGg6ICRjdWJlLWhlaWdodDtcXHJcXG4gIGhlaWdodDogJGN1YmUtaGVpZ2h0O1xcclxcbiAgYm9yZGVyOiAxcHggc29saWQgI0NDQztcXHJcXG4gIG1hcmdpbjogODBweDtcXHJcXG4gIHBlcnNwZWN0aXZlOiA0MDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmN1YmUge1xcclxcbiAgd2lkdGg6ICRjdWJlLWhlaWdodDtcXHJcXG4gIGhlaWdodDogJGN1YmUtaGVpZ2h0O1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtNDAwcHgpO1xcclxcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xcclxcbn1cXHJcXG5cXHJcXG4uY3ViZS5zaG93LWZyb250ICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSggICAwZGVnKTsgfVxcclxcbi5jdWJlLnNob3ctcmlnaHQgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKCAtOTBkZWcpOyB9XFxyXFxuLmN1YmUuc2hvdy1iYWNrICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoLTE4MGRlZyk7IH1cXHJcXG4uY3ViZS5zaG93LWxlZnQgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSggIDkwZGVnKTsgfVxcclxcbi5jdWJlLnNob3ctdG9wICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVYKCAtOTBkZWcpOyB9XFxyXFxuLmN1YmUuc2hvdy1ib3R0b20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVgoICA5MGRlZyk7IH1cXHJcXG5cXHJcXG4uY3ViZV9fZmFjZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB3aWR0aDogJGN1YmUtaGVpZ2h0O1xcclxcbiAgaGVpZ2h0OiAkY3ViZS1oZWlnaHQ7XFxyXFxuICBib3JkZXI6IDJweCBzb2xpZCBibGFjaztcXHJcXG4gIGxpbmUtaGVpZ2h0OiAkY3ViZS1oZWlnaHQ7XFxyXFxuICBmb250LXNpemU6IDQwcHg7XFxyXFxuICBmb250LXdlaWdodDogYm9sZDtcXHJcXG4gIGNvbG9yOiB3aGl0ZTtcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmN1YmVfX2ZhY2UtLWZyb250ICB7IGJhY2tncm91bmQ6IGhzbGEoICAwLCAxMDAlLCA1MCUsIDAuNyk7IH1cXHJcXG4uY3ViZV9fZmFjZS0tcmlnaHQgIHsgYmFja2dyb3VuZDogaHNsYSggNjAsIDEwMCUsIDUwJSwgMC43KTsgfVxcclxcbi5jdWJlX19mYWNlLS1iYWNrICAgeyBiYWNrZ3JvdW5kOiBoc2xhKDEyMCwgMTAwJSwgNTAlLCAwLjcpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLWxlZnQgICB7IGJhY2tncm91bmQ6IGhzbGEoMTgwLCAxMDAlLCA1MCUsIDAuNyk7IH1cXHJcXG4uY3ViZV9fZmFjZS0tdG9wICAgIHsgYmFja2dyb3VuZDogaHNsYSgyNDAsIDEwMCUsIDUwJSwgMC43KTsgfVxcclxcbi5jdWJlX19mYWNlLS1ib3R0b20geyBiYWNrZ3JvdW5kOiBoc2xhKDMwMCwgMTAwJSwgNTAlLCAwLjcpOyB9XFxyXFxuXFxyXFxuLmN1YmVfX2ZhY2UtLWZyb250ICB7IHRyYW5zZm9ybTogcm90YXRlWSggIDBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLXJpZ2h0ICB7IHRyYW5zZm9ybTogcm90YXRlWSggOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLWJhY2sgICB7IHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLWxlZnQgICB7IHRyYW5zZm9ybTogcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLXRvcCAgICB7IHRyYW5zZm9ybTogcm90YXRlWCggOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuLmN1YmVfX2ZhY2UtLWJvdHRvbSB7IHRyYW5zZm9ybTogcm90YXRlWCgtOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpOyB9XFxyXFxuXFxyXFxubGFiZWwgeyBtYXJnaW4tcmlnaHQ6IDEwcHg7IH1cIixcIkB1c2UgXFxcInNhc3M6bWF0aFxcXCI7XFxyXFxuLmNvbnRhaW5lciB7XFxyXFxuICBtYXJnaW46IDAgYXV0bztcXHJcXG4gIG1heC13aWR0aDogMTI4MHB4O1xcclxcbiAgd2lkdGg6IDkwJTtcXHJcXG59XFxyXFxuQG1lZGlhICN7JG1lZGl1bS1hbmQtdXB9IHtcXHJcXG4gIC5jb250YWluZXIge1xcclxcbiAgICB3aWR0aDogODUlO1xcclxcbiAgfVxcclxcbn1cXHJcXG5AbWVkaWEgI3skbGFyZ2UtYW5kLXVwfSB7XFxyXFxuICAuY29udGFpbmVyIHtcXHJcXG4gICAgd2lkdGg6IDcwJTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuLmNvbCAucm93IHtcXHJcXG4gIG1hcmdpbi1sZWZ0OiBtYXRoLmRpdigtMSAqICRndXR0ZXItd2lkdGggLCAyKTtcXHJcXG4gIG1hcmdpbi1yaWdodDogbWF0aC5kaXYoLTEgKiAkZ3V0dGVyLXdpZHRoICwgMik7XFxyXFxufVxcclxcblxcclxcbi5zZWN0aW9uIHtcXHJcXG4gIHBhZGRpbmctdG9wOiAxcmVtO1xcclxcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XFxyXFxuXFxyXFxuICAmLm5vLXBhZCB7XFxyXFxuICAgIHBhZGRpbmc6IDA7XFxyXFxuICB9XFxyXFxuICAmLm5vLXBhZC1ib3Qge1xcclxcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcXHJcXG4gIH1cXHJcXG4gICYubm8tcGFkLXRvcCB7XFxyXFxuICAgIHBhZGRpbmctdG9wOiAwO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vLyBNaXhpbnMgdG8gZWxpbWluYXRlIGNvZGUgcmVwaXRpdGlvblxcclxcbkBtaXhpbiByZXNldC1vZmZzZXQge1xcclxcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxyXFxuICBsZWZ0OiBhdXRvO1xcclxcbiAgcmlnaHQ6IGF1dG87XFxyXFxufVxcclxcbkBtaXhpbiBncmlkLWNsYXNzZXMoJHNpemUsICRpLCAkcGVyYykge1xcclxcbiAgJi5vZmZzZXQtI3skc2l6ZX0jeyRpfSB7XFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAkcGVyYztcXHJcXG4gIH1cXHJcXG4gICYucHVsbC0jeyRzaXplfSN7JGl9IHtcXHJcXG4gICAgcmlnaHQ6ICRwZXJjO1xcclxcbiAgfVxcclxcbiAgJi5wdXNoLSN7JHNpemV9I3skaX0ge1xcclxcbiAgICBsZWZ0OiAkcGVyYztcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLnJvdyB7XFxyXFxuICBtYXJnaW4tbGVmdDogYXV0bztcXHJcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXHJcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxyXFxuXFxyXFxuICAvLyBDbGVhciBmbG9hdGluZyBjaGlsZHJlblxcclxcbiAgJjphZnRlciB7XFxyXFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgICBkaXNwbGF5OiB0YWJsZTtcXHJcXG4gICAgY2xlYXI6IGJvdGg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY29sIHtcXHJcXG4gICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICAgIHBhZGRpbmc6IDAgbWF0aC5kaXYoJGd1dHRlci13aWR0aCAsIDIpO1xcclxcbiAgICBtaW4taGVpZ2h0OiAxcHg7XFxyXFxuXFxyXFxuICAgICZbY2xhc3MqPVxcXCJwdXNoLVxcXCJdLFxcclxcbiAgICAmW2NsYXNzKj1cXFwicHVsbC1cXFwiXSB7XFxyXFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICRpOiAxO1xcclxcbiAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXHJcXG4gICAgICAkcGVyYzogdW5xdW90ZShtYXRoLmRpdigxMDAgLCBtYXRoLmRpdigkbnVtLWNvbHMgLCAkaSkpICsgXFxcIiVcXFwiKTtcXHJcXG4gICAgICAmLnMjeyRpfSB7XFxyXFxuICAgICAgICB3aWR0aDogJHBlcmM7XFxyXFxuICAgICAgICBAaW5jbHVkZSByZXNldC1vZmZzZXQ7XFxyXFxuICAgICAgfVxcclxcbiAgICAgICRpOiAkaSArIDE7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJGk6IDE7XFxyXFxuICAgIEB3aGlsZSAkaSA8PSAkbnVtLWNvbHMge1xcclxcbiAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcclxcbiAgICAgIEBpbmNsdWRlIGdyaWQtY2xhc3NlcyhcXFwic1xcXCIsICRpLCAkcGVyYyk7XFxyXFxuICAgICAgJGk6ICRpICsgMTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBAbWVkaWEgI3skbWVkaXVtLWFuZC11cH0ge1xcclxcblxcclxcbiAgICAgICRpOiAxO1xcclxcbiAgICAgIEB3aGlsZSAkaSA8PSAkbnVtLWNvbHMge1xcclxcbiAgICAgICAgJHBlcmM6IHVucXVvdGUobWF0aC5kaXYoMTAwICwgbWF0aC5kaXYoJG51bS1jb2xzICwgJGkpKSArIFxcXCIlXFxcIik7XFxyXFxuICAgICAgICAmLm0jeyRpfSB7XFxyXFxuICAgICAgICAgIHdpZHRoOiAkcGVyYztcXHJcXG4gICAgICAgICAgQGluY2x1ZGUgcmVzZXQtb2Zmc2V0O1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgJGk6ICRpICsgMVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICAkaTogMTtcXHJcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXHJcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcclxcbiAgICAgICAgQGluY2x1ZGUgZ3JpZC1jbGFzc2VzKFxcXCJtXFxcIiwgJGksICRwZXJjKTtcXHJcXG4gICAgICAgICRpOiAkaSArIDE7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIEBtZWRpYSAjeyRsYXJnZS1hbmQtdXB9IHtcXHJcXG5cXHJcXG4gICAgICAkaTogMTtcXHJcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXHJcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcclxcbiAgICAgICAgJi5sI3skaX0ge1xcclxcbiAgICAgICAgICB3aWR0aDogJHBlcmM7XFxyXFxuICAgICAgICAgIEBpbmNsdWRlIHJlc2V0LW9mZnNldDtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgICRpOiAkaSArIDE7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgICRpOiAxO1xcclxcbiAgICAgIEB3aGlsZSAkaSA8PSAkbnVtLWNvbHMge1xcclxcbiAgICAgICAgJHBlcmM6IHVucXVvdGUobWF0aC5kaXYoMTAwICwgbWF0aC5kaXYoJG51bS1jb2xzICwgJGkpKSArIFxcXCIlXFxcIik7XFxyXFxuICAgICAgICBAaW5jbHVkZSBncmlkLWNsYXNzZXMoXFxcImxcXFwiLCAkaSwgJHBlcmMpO1xcclxcbiAgICAgICAgJGk6ICRpICsgMTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgQG1lZGlhICN7JGV4dHJhLWxhcmdlLWFuZC11cH0ge1xcclxcblxcclxcbiAgICAgICRpOiAxO1xcclxcbiAgICAgIEB3aGlsZSAkaSA8PSAkbnVtLWNvbHMge1xcclxcbiAgICAgICAgJHBlcmM6IHVucXVvdGUobWF0aC5kaXYoMTAwICwgbWF0aC5kaXYoJG51bS1jb2xzICwgJGkpKSArIFxcXCIlXFxcIik7XFxyXFxuICAgICAgICAmLnhsI3skaX0ge1xcclxcbiAgICAgICAgICB3aWR0aDogJHBlcmM7XFxyXFxuICAgICAgICAgIEBpbmNsdWRlIHJlc2V0LW9mZnNldDtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgICRpOiAkaSArIDE7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgICRpOiAxO1xcclxcbiAgICAgIEB3aGlsZSAkaSA8PSAkbnVtLWNvbHMge1xcclxcbiAgICAgICAgJHBlcmM6IHVucXVvdGUobWF0aC5kaXYoMTAwICwgbWF0aC5kaXYoJG51bS1jb2xzICwgJGkpKSArIFxcXCIlXFxcIik7XFxyXFxuICAgICAgICBAaW5jbHVkZSBncmlkLWNsYXNzZXMoXFxcInhsXFxcIiwgJGksICRwZXJjKTtcXHJcXG4gICAgICAgICRpOiAkaSArIDE7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiQHVzZSBcXFwic2FzczptYXRoXFxcIjtcXHJcXG5zdmd7XFxyXFxuICAvL2ZpbGw6cmVkO1xcclxcbn1cXHJcXG4uc2lkZW5hdiB7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICB3aWR0aDogJHNpZGVuYXYtd2lkdGg7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgdG9wOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgLy90cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MHB4KTtcXHJcXG4gIGhlaWdodDogLW1vei1jYWxjKDEwMCUpOyAvL1RlbXBvcmFyeSBGaXJlZm94IEZpeFxcclxcbiAgcGFkZGluZy1ib3R0b206IDYwcHg7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2lkZW5hdi1iZy1jb2xvcjtcXHJcXG4gIHotaW5kZXg6IDk5OTtcXHJcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxyXFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcclxcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcclxcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDUlKTtcXHJcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcztcXHJcXG5cXHJcXG4gIC8vQGV4dGVuZCAuc2hhZG93LTE7XFxyXFxuXFxyXFxuICAvLyBSaWdodCBBbGlnblxcclxcbiAgJi5yaWdodC1hbGlnbmVkIHtcXHJcXG4gICAgcmlnaHQ6IDA7XFxyXFxuICAgIC8vdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpO1xcclxcbiAgICBsZWZ0OiBhdXRvO1xcclxcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY29sbGFwc2libGUge1xcclxcbiAgICBtYXJnaW46IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuXFxyXFxuICBsaSB7XFxyXFxuICAgIGZsb2F0OiBub25lO1xcclxcbiAgICAgLy9saW5lLWhlaWdodDogJHNpZGVuYXYtbGluZS1oZWlnaHQ7XFxyXFxuICAgIC8vIG1hcmdpbjogMTVweCAwO1xcclxcbiAgIC8vIGhlaWdodDogNDVweDtcXHJcXG4gICAgLmljb25TaWRlTGluayB7XFxyXFxuICAgICAgZGlzcGxheTogZmxleDtcXHJcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgXFxyXFxuICAgICAgICBzdmcge1xcclxcbiAgICAgICAgICAgLy9zdHJva2U6cmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbiAgICAgICAgICAvLyBmaWxsOiB3aGl0ZTtcXHJcXG4gICAgICAgICAgc3Ryb2tlOnJnYmEoMCwgMCwgMCwgMC4yKTtcXHJcXG4gICAgICAgICAgIHdpZHRoOiAzMHB4O1xcclxcbiAgICAgICAgfVxcclxcbiAgXFxyXFxuICAgIH1cXHJcXG4gICAgJi5hY3RpdmUge1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxyXFxuICAgICAgc3ZnIHtcXHJcXG4gICAgICAgIHN0cm9rZTogd2hpdGUhaW1wb3J0YW50O1xcclxcbiAgICAgICAgLy9maWxsOiB3aGl0ZSFpbXBvcnRhbnQ7XFxyXFxuICAgICAgICB3aWR0aDogMzBweDtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJi5sYXN0IHtcXHJcXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xcclxcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gI3skc2lkZW5hdi1pdGVtLWhlaWdodH0gLSAzNXB4KTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgbGkgPiBhIHtcXHJcXG4gICAgY29sb3I6ICRzaWRlbmF2LWZvbnQtY29sb3I7XFxyXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgIGZvbnQtc2l6ZTogJHNpZGVuYXYtZm9udC1zaXplO1xcclxcbiAgICBmb250LXdlaWdodDogNzAwO1xcclxcbiAgICBoZWlnaHQ6ICRzaWRlbmF2LWl0ZW0taGVpZ2h0O1xcclxcbiAgICBsaW5lLWhlaWdodDogJHNpZGVuYXYtbGluZS1oZWlnaHQ7XFxyXFxuICAgIHBhZGRpbmc6IDAgKCRzaWRlbmF2LXBhZGRpbmcgKiAyKTtcXHJcXG5cXHJcXG4gICAgJjpob3ZlciB7XFxyXFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAmLmJ0bixcXHJcXG4gICAgJi5idG4tbGFyZ2UsXFxyXFxuICAgICYuYnRuLWZsYXQsXFxyXFxuICAgICYuYnRuLWZsb2F0aW5nIHtcXHJcXG4gICAgICBtYXJnaW46IDEwcHggMTVweDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAmLmJ0bixcXHJcXG4gICAgJi5idG4tbGFyZ2UsXFxyXFxuICAgICYuYnRuLWZsb2F0aW5nIHtcXHJcXG4gICAgICBjb2xvcjogJGJ1dHRvbi1yYWlzZWQtY29sb3I7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJi5idG4tZmxhdCB7XFxyXFxuICAgICAgY29sb3I6ICRidXR0b24tZmxhdC1jb2xvcjtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAmLmJ0bjpob3ZlcixcXHJcXG4gICAgJi5idG4tbGFyZ2U6aG92ZXIge1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZCwgNSUpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYuYnRuLWZsb2F0aW5nOmhvdmVyIHtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYgPiBpLFxcclxcbiAgICAmID4gW2NsYXNzXj1cXFwibWRpLVxcXCJdLFxcclxcbiAgICBsaSA+IGEgPiBbY2xhc3MqPVxcXCJtZGktXFxcIl0sXFxyXFxuICAgICYgPiBpLnMtaWNvbiB7XFxyXFxuICAgICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgICAgaGVpZ2h0OiAkc2lkZW5hdi1pdGVtLWhlaWdodDtcXHJcXG4gICAgICBsaW5lLWhlaWdodDogJHNpZGVuYXYtbGluZS1oZWlnaHQ7XFxyXFxuICAgICAgbWFyZ2luOiAwICgkc2lkZW5hdi1wYWRkaW5nICogMikgMCAwO1xcclxcbiAgICAgIHdpZHRoOiBtYXRoLmRpdigkc2lkZW5hdi1pdGVtLWhlaWdodCwgMik7XFxyXFxuICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC5kaXZpZGVyIHtcXHJcXG4gICAgbWFyZ2luOiBtYXRoLmRpdigkc2lkZW5hdi1wYWRkaW5nLCAyKSAwIDAgMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC5zdWJoZWFkZXIge1xcclxcbiAgICAmOmhvdmVyIHtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBjdXJzb3I6IGluaXRpYWw7XFxyXFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcXHJcXG4gICAgZm9udC1zaXplOiAkc2lkZW5hdi1mb250LXNpemU7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAkc2lkZW5hdi1saW5lLWhlaWdodDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC51c2VyLXZpZXcge1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgIHBhZGRpbmc6ICgkc2lkZW5hdi1wYWRkaW5nICogMikgKCRzaWRlbmF2LXBhZGRpbmcgKiAyKSAwO1xcclxcbiAgICBtYXJnaW4tYm90dG9tOiBtYXRoLmRpdigkc2lkZW5hdi1wYWRkaW5nLCAyKTtcXHJcXG5cXHJcXG4gICAgJiA+IGEge1xcclxcbiAgICAgICY6aG92ZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGhlaWdodDogYXV0bztcXHJcXG4gICAgICBwYWRkaW5nOiAwO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5iYWNrZ3JvdW5kIHtcXHJcXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgICB0b3A6IDA7XFxyXFxuICAgICAgcmlnaHQ6IDA7XFxyXFxuICAgICAgYm90dG9tOiAwO1xcclxcbiAgICAgIGxlZnQ6IDA7XFxyXFxuICAgICAgei1pbmRleDogLTE7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLmNpcmNsZSxcXHJcXG4gICAgLm5hbWUsXFxyXFxuICAgIC5lbWFpbCB7XFxyXFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLmNpcmNsZSB7XFxyXFxuICAgICAgaGVpZ2h0OiA2NHB4O1xcclxcbiAgICAgIHdpZHRoOiA2NHB4O1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5uYW1lLFxcclxcbiAgICAuZW1haWwge1xcclxcbiAgICAgIGZvbnQtc2l6ZTogJHNpZGVuYXYtZm9udC1zaXplO1xcclxcbiAgICAgIGxpbmUtaGVpZ2h0OiBtYXRoLmRpdigkc2lkZW5hdi1saW5lLWhlaWdodCwgMik7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLm5hbWUge1xcclxcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7XFxyXFxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAuZW1haWwge1xcclxcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxNnB4O1xcclxcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLy8gVG91Y2ggaW50ZXJhY3Rpb25cXHJcXG4uZHJhZy10YXJnZXQge1xcclxcbiAgLy8gUmlnaHQgQWxpZ25cXHJcXG4gICYucmlnaHQtYWxpZ25lZCB7XFxyXFxuICAgIHJpZ2h0OiAwO1xcclxcbiAgfVxcclxcblxcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgd2lkdGg6IDEwcHg7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICB0b3A6IDA7XFxyXFxuICB6LWluZGV4OiA5OTg7XFxyXFxufVxcclxcblxcclxcbi8vIEZpeGVkIFNpZGVuYXYgc2hvd25cXHJcXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkIHtcXHJcXG4gIC8vIFJpZ2h0IEFsaWduXFxyXFxuICAmLnJpZ2h0LWFsaWduZWQge1xcclxcbiAgICByaWdodDogMDtcXHJcXG4gICAgbGVmdDogYXV0bztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxufVxcclxcblxcclxcbi8vIEZpeGVkIFNpZGVuYXYgaGlkZSBvbiBzbWFsbGVyXFxyXFxuQG1lZGlhICN7JG1lZGl1bS1hbmQtZG93bn0ge1xcclxcbiAgLnNpZGVuYXYge1xcclxcbiAgICAmLnNpZGVuYXYtZml4ZWQge1xcclxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTA1JSk7XFxyXFxuXFxyXFxuICAgICAgJi5yaWdodC1hbGlnbmVkIHtcXHJcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgPiBhIHtcXHJcXG4gICAgICBwYWRkaW5nOiAwICRzaWRlbmF2LXBhZGRpbmc7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLnVzZXItdmlldyB7XFxyXFxuICAgICAgcGFkZGluZzogJHNpZGVuYXYtcGFkZGluZyAkc2lkZW5hdi1wYWRkaW5nIDA7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSxcXHJcXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkIC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7XFxyXFxuXFxyXFxuICBhIHtcXHJcXG4gICAgY29sb3I6ICRzaWRlbmF2LWJnLWNvbG9yO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSB7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbn1cXHJcXG5cXHJcXG4uc2lkZW5hdi1vdmVybGF5IHtcXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICBoZWlnaHQ6IDEyMHZoO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcclxcbiAgei1pbmRleDogOTk3O1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuICAud2l0aC1zaWRlLW5hdi1vcGVue1xcclxcbiAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4O1xcclxcbiAgICB0cmFuc2l0aW9uOiBwYWRkaW5nIDFzO1xcclxcbiAgfVxcclxcblwiLFwiLy8gc2hhcmVkIHN0eWxlc1xcclxcblxcclxcbi5idG4sXFxyXFxuLmJ0bi1mbGF0IHtcXHJcXG4gIGJvcmRlcjogJGJ1dHRvbi1ib3JkZXI7XFxyXFxuICBib3JkZXItcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIGhlaWdodDogJGJ1dHRvbi1oZWlnaHQ7XFxyXFxuICBsaW5lLWhlaWdodDogJGJ1dHRvbi1oZWlnaHQ7XFxyXFxuICBwYWRkaW5nOiAkYnV0dG9uLXBhZGRpbmc7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcclxcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXHJcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8vIEdldHMgcmlkIG9mIHRhcCBhY3RpdmUgc3RhdGVcXHJcXG59XFxyXFxuXFxyXFxuLy8gRGlzYWJsZWQgc2hhcmVkIHN0eWxlXFxyXFxuLmJ0bi5kaXNhYmxlZCxcXHJcXG4uYnRuLWZsb2F0aW5nLmRpc2FibGVkLFxcclxcbi5idG4tbGFyZ2UuZGlzYWJsZWQsXFxyXFxuLmJ0bi1zbWFsbC5kaXNhYmxlZCxcXHJcXG4uYnRuLWZsYXQuZGlzYWJsZWQsXFxyXFxuLmJ0bjpkaXNhYmxlZCxcXHJcXG4uYnRuLWZsb2F0aW5nOmRpc2FibGVkLFxcclxcbi5idG4tbGFyZ2U6ZGlzYWJsZWQsXFxyXFxuLmJ0bi1zbWFsbDpkaXNhYmxlZCxcXHJcXG4uYnRuLWZsYXQ6ZGlzYWJsZWQsXFxyXFxuLmJ0bltkaXNhYmxlZF0sXFxyXFxuLmJ0bi1mbG9hdGluZ1tkaXNhYmxlZF0sXFxyXFxuLmJ0bi1sYXJnZVtkaXNhYmxlZF0sXFxyXFxuLmJ0bi1zbWFsbFtkaXNhYmxlZF0sXFxyXFxuLmJ0bi1mbGF0W2Rpc2FibGVkXSB7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZCAhaW1wb3J0YW50O1xcclxcbiAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG4gIGNvbG9yOiAkYnV0dG9uLWRpc2FibGVkLWNvbG9yICFpbXBvcnRhbnQ7XFxyXFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxyXFxuICAmOmhvdmVyIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kICFpbXBvcnRhbnQ7XFxyXFxuICAgIGNvbG9yOiAkYnV0dG9uLWRpc2FibGVkLWNvbG9yICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIFNoYXJlZCBpY29uIHN0eWxlc1xcclxcbi5idG4sXFxyXFxuLmJ0bi1mbG9hdGluZyxcXHJcXG4uYnRuLWxhcmdlLFxcclxcbi5idG4tc21hbGwsXFxyXFxuLmJ0bi1mbGF0IHtcXHJcXG4gIGZvbnQtc2l6ZTogJGJ1dHRvbi1mb250LXNpemU7XFxyXFxuICBvdXRsaW5lOiAwO1xcclxcbiAgaSB7XFxyXFxuICAgIGZvbnQtc2l6ZTogJGJ1dHRvbi1pY29uLWZvbnQtc2l6ZTtcXHJcXG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIFNoYXJlZCBmb2N1cyBidXR0b24gc3R5bGVcXHJcXG4uYnRuLFxcclxcbi5idG4tZmxvYXRpbmcge1xcclxcbiAgJjpmb2N1cyB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kLCAxMCUpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBSYWlzZWQgQnV0dG9uXFxyXFxuLmJ0biB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuICBjb2xvcjogJGJ1dHRvbi1yYWlzZWQtY29sb3I7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgbGV0dGVyLXNwYWNpbmc6IC41cHg7XFxyXFxuICBAZXh0ZW5kIC5zaGFkb3ctMTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2Utb3V0O1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgJjpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tcmFpc2VkLWJhY2tncm91bmQtaG92ZXI7XFxyXFxuICAgIEBleHRlbmQgLnNoYWRvdy0xLWhhbGY7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIEZsb2F0aW5nIGJ1dHRvblxcclxcbi5idG4tZmxvYXRpbmcge1xcclxcbiAgJjpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tZmxvYXRpbmctYmFja2dyb3VuZC1ob3ZlcjtcXHJcXG4gICAgQGV4dGVuZCAuc2hhZG93LTEtaGFsZjtcXHJcXG4gIH1cXHJcXG4gICY6YmVmb3JlIHtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogMDtcXHJcXG4gIH1cXHJcXG4gICYuYnRuLWxhcmdlIHtcXHJcXG4gICAgJi5oYWxmd2F5LWZhYiB7XFxyXFxuICAgICAgYm90dG9tOiBjYWxjKCRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZSAvIDIpO1xcclxcbiAgICB9XFxyXFxuICAgIHdpZHRoOiAkYnV0dG9uLWZsb2F0aW5nLWxhcmdlLXNpemU7XFxyXFxuICAgIGhlaWdodDogJGJ1dHRvbi1mbG9hdGluZy1sYXJnZS1zaXplO1xcclxcbiAgICBwYWRkaW5nOiAwO1xcclxcbiAgICBpIHtcXHJcXG4gICAgICBsaW5lLWhlaWdodDogJGJ1dHRvbi1mbG9hdGluZy1sYXJnZS1zaXplO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmLmJ0bi1zbWFsbCB7XFxyXFxuICAgICYuaGFsZndheS1mYWIge1xcclxcbiAgICAgIGJvdHRvbTogY2FsYygkYnV0dG9uLWZsb2F0aW5nLXNtYWxsLXNpemUgLyAyKTtcXHJcXG4gICAgfVxcclxcbiAgICB3aWR0aDogJGJ1dHRvbi1mbG9hdGluZy1zbWFsbC1zaXplO1xcclxcbiAgICBoZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc21hbGwtc2l6ZTtcXHJcXG4gICAgaSB7XFxyXFxuICAgICAgbGluZS1oZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc21hbGwtc2l6ZTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi5oYWxmd2F5LWZhYiB7XFxyXFxuICAgICYubGVmdCB7XFxyXFxuICAgICAgcmlnaHQ6IGF1dG87XFxyXFxuICAgICAgbGVmdDogMjRweDtcXHJcXG4gICAgfVxcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHJpZ2h0OiAyNHB4O1xcclxcbiAgICBib3R0b206IGNhbGMoJGJ1dHRvbi1mbG9hdGluZy1zaXplIC8gMik7XFxyXFxuICB9XFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBjb2xvcjogJGJ1dHRvbi1mbG9hdGluZy1jb2xvcjtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB6LWluZGV4OiAxO1xcclxcbiAgd2lkdGg6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXHJcXG4gIGhlaWdodDogJGJ1dHRvbi1mbG9hdGluZy1zaXplO1xcclxcbiAgbGluZS1oZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXHJcXG4gIHBhZGRpbmc6IDA7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLWZsb2F0aW5nLWJhY2tncm91bmQ7XFxyXFxuICBib3JkZXItcmFkaXVzOiAkYnV0dG9uLWZsb2F0aW5nLXJhZGl1cztcXHJcXG4gIEBleHRlbmQgLnNoYWRvdy0xO1xcclxcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuM3M7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcclxcbiAgaSB7XFxyXFxuICAgIHdpZHRoOiBpbmhlcml0O1xcclxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgY29sb3I6ICRidXR0b24tZmxvYXRpbmctY29sb3I7XFxyXFxuICAgIGZvbnQtc2l6ZTogJGJ1dHRvbi1sYXJnZS1pY29uLWZvbnQtc2l6ZTtcXHJcXG4gICAgbGluZS1oZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLy8gYnV0dG9uIGZpeFxcclxcbmJ1dHRvbi5idG4tZmxvYXRpbmcge1xcclxcbiAgYm9yZGVyOiAkYnV0dG9uLWJvcmRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLy8gRml4ZWQgQWN0aW9uIEJ1dHRvblxcclxcbi5maXhlZC1hY3Rpb24tYnRuIHtcXHJcXG4gICYuYWN0aXZlIHtcXHJcXG4gICAgdWwge1xcclxcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIERpcmVjdGlvbnNcXHJcXG4gICYuZGlyZWN0aW9uLWxlZnQsXFxyXFxuICAmLmRpcmVjdGlvbi1yaWdodCB7XFxyXFxuICAgIHBhZGRpbmc6IDAgMCAwIDE1cHg7XFxyXFxuICAgIHVsIHtcXHJcXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcXHJcXG4gICAgICByaWdodDogNjRweDtcXHJcXG4gICAgICB0b3A6IDUwJTtcXHJcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxyXFxuICAgICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICAgIGxlZnQ6IGF1dG87XFxyXFxuICAgICAgLyp3aWR0aCAxMDAlIG9ubHkgZ29lcyB0byB3aWR0aCBvZiBidXR0b24gY29udGFpbmVyICovXFxyXFxuICAgICAgd2lkdGg6IDUwMHB4O1xcclxcbiAgICAgIGxpIHtcXHJcXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gICAgICAgIG1hcmdpbjogNy41cHggMTVweCAwIDA7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuICAmLmRpcmVjdGlvbi1yaWdodCB7XFxyXFxuICAgIHBhZGRpbmc6IDAgMTVweCAwIDA7XFxyXFxuICAgIHVsIHtcXHJcXG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcclxcbiAgICAgIGRpcmVjdGlvbjogcnRsO1xcclxcbiAgICAgIGxlZnQ6IDY0cHg7XFxyXFxuICAgICAgcmlnaHQ6IGF1dG87XFxyXFxuICAgICAgbGkge1xcclxcbiAgICAgICAgbWFyZ2luOiA3LjVweCAwIDAgMTVweDtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG4gICYuZGlyZWN0aW9uLWJvdHRvbSB7XFxyXFxuICAgIHBhZGRpbmc6IDAgMCAxNXB4IDA7XFxyXFxuICAgIHVsIHtcXHJcXG4gICAgICB0b3A6IDY0cHg7XFxyXFxuICAgICAgYm90dG9tOiBhdXRvO1xcclxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcclxcbiAgICAgIGxpIHtcXHJcXG4gICAgICAgIG1hcmdpbjogMTVweCAwIDAgMDtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG4gICYudG9vbGJhciB7XFxyXFxuICAgICYuYWN0aXZlIHtcXHJcXG4gICAgICAmPmEgaSB7XFxyXFxuICAgICAgICBvcGFjaXR5OiAwO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICBwYWRkaW5nOiAwO1xcclxcbiAgICBoZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZTtcXHJcXG4gICAgdWwge1xcclxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgICAgdG9wOiAwO1xcclxcbiAgICAgIGJvdHRvbTogMDtcXHJcXG4gICAgICB6LWluZGV4OiAxO1xcclxcbiAgICAgIGxpIHtcXHJcXG4gICAgICAgIGZsZXg6IDE7XFxyXFxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgICAgICBtYXJnaW46IDA7XFxyXFxuICAgICAgICBoZWlnaHQ6IDEwMCU7XFxyXFxuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xcclxcbiAgICAgICAgYSB7XFxyXFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XFxyXFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcclxcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcXHJcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZTtcXHJcXG4gICAgICAgICAgei1pbmRleDogMTtcXHJcXG4gICAgICAgICAgaSB7XFxyXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxyXFxuICAgICAgICAgIH1cXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIHJpZ2h0OiAyM3B4O1xcclxcbiAgYm90dG9tOiAyM3B4O1xcclxcbiAgcGFkZGluZy10b3A6IDE1cHg7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAwO1xcclxcbiAgei1pbmRleDogOTk3O1xcclxcbiAgdWwge1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICByaWdodDogMDtcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIGJvdHRvbTogNjRweDtcXHJcXG4gICAgbWFyZ2luOiAwO1xcclxcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuICAgIGxpIHtcXHJcXG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcclxcbiAgICB9XFxyXFxuICAgIGEuYnRuLWZsb2F0aW5nIHtcXHJcXG4gICAgICBvcGFjaXR5OiAwO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuICAuZmFiLWJhY2tkcm9wIHtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHotaW5kZXg6IC0xO1xcclxcbiAgICB3aWR0aDogJGJ1dHRvbi1mbG9hdGluZy1zaXplO1xcclxcbiAgICBoZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1mbG9hdGluZy1iYWNrZ3JvdW5kO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiAkYnV0dG9uLWZsb2F0aW5nLXJhZGl1cztcXHJcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLy8gRmxhdCBidXR0b25cXHJcXG4uYnRuLWZsYXQge1xcclxcbiAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbiAgY29sb3I6ICRidXR0b24tZmxhdC1jb2xvcjtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjJzO1xcclxcbiAgJjpmb2N1cyxcXHJcXG4gICY6aG92ZXIge1xcclxcbiAgICBib3gtc2hhZG93OiBub25lO1xcclxcbiAgfVxcclxcbiAgJjpmb2N1cyB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjEpO1xcclxcbiAgfVxcclxcbiAgJi5kaXNhYmxlZCxcXHJcXG4gICYuYnRuLWZsYXRbZGlzYWJsZWRdICB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxyXFxuICAgIGNvbG9yOiAkYnV0dG9uLWZsYXQtZGlzYWJsZWQtY29sb3IgIWltcG9ydGFudDtcXHJcXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBMYXJnZSBidXR0b25cXHJcXG4uYnRuLWxhcmdlIHtcXHJcXG4gIEBleHRlbmQgLmJ0bjtcXHJcXG4gIGhlaWdodDogJGJ1dHRvbi1sYXJnZS1oZWlnaHQ7XFxyXFxuICBsaW5lLWhlaWdodDogJGJ1dHRvbi1sYXJnZS1oZWlnaHQ7XFxyXFxuICBmb250LXNpemU6ICRidXR0b24tbGFyZ2UtZm9udC1zaXplO1xcclxcbiAgcGFkZGluZzogMCAyOHB4O1xcclxcblxcclxcbiAgaSB7XFxyXFxuICAgIGZvbnQtc2l6ZTogJGJ1dHRvbi1sYXJnZS1pY29uLWZvbnQtc2l6ZTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuLy8gU21hbGwgYnV0dG9uXFxyXFxuLmJ0bi1zbWFsbCB7XFxyXFxuICBAZXh0ZW5kIC5idG47XFxyXFxuICBoZWlnaHQ6ICRidXR0b24tc21hbGwtaGVpZ2h0O1xcclxcbiAgbGluZS1oZWlnaHQ6ICRidXR0b24tc21hbGwtaGVpZ2h0O1xcclxcbiAgZm9udC1zaXplOiAkYnV0dG9uLXNtYWxsLWZvbnQtc2l6ZTtcXHJcXG4gIGkge1xcclxcbiAgICBmb250LXNpemU6ICRidXR0b24tc21hbGwtaWNvbi1mb250LXNpemU7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIEJsb2NrIGJ1dHRvblxcclxcbi5idG4tYmxvY2sge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxufVxcclxcblwiLFwiJG1haW5Db2xvcjojMDA2MmQ2O1xcclxcbiRvdGhlcm1haW46IzAzNGQ4MjtcXHJcXG4kc2Vjb25kQ29sb3I6IzAwNzdGQTtcXHJcXG4kdGhpcmRDb2xvcjojMDliZGRkO1xcclxcbiRmb3J0aENvbG9yOiNjYmU3ZmU7XFxyXFxuXFxyXFxuJHRhYjE6ICRmb3J0aENvbG9yO1xcclxcbiR0YWIyOiBkYXJrZW4oJGZvcnRoQ29sb3IsMTUlKTtcXHJcXG4kdGFiMzogZGFya2VuKCRmb3J0aENvbG9yLDMwJSk7XFxyXFxuXFxyXFxuLmNvbW11blRhYkhlYWRlciB7XFxyXFxuICBoZWlnaHQ6IDEwMHB4O1xcclxcbiAgcGFkZGluZzogNDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLnRhYnMge1xcclxcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMTUwcHgpO1xcclxcbiAgbWFyZ2luLXRvcDogMzBweDtcXHJcXG4gIHBhZGRpbmc6MCFpbXBvcnRhbnQ7XFxyXFxuICBib3JkZXItcmFkaXVzOiA0MHB4IWltcG9ydGFudDtcXHJcXG4uaW5uZXJwYWdle1xcclxcbiAgbWluLWhlaWdodDogNzBWSCFpbXBvcnRhbnQ7XFxyXFxufVxcclxcbiAgLnRhYnMtaGVhZGVyLW92ZXJsYXkge1xcclxcbiAgICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgICBoZWlnaHQ6IDEwMHB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5hY3RpdmVUYWItMCB7XFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIwIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIyO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjE7XFxyXFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcclxcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAudGFiLWhlYWRlci1vdmVyMSB7XFxyXFxuICAgICAgZmxleDogMTtcXHJcXG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMC4yNXR1cm4sICR0YWIxLCAkdGFiMyk7XFxyXFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXHJcXG5cXHJcXG4gICAgICAudGFiLWhlYWRlciB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMjtcXHJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDQwcHg7XFxyXFxuICAgICAgICBAZXh0ZW5kIC5jb21tdW5UYWJIZWFkZXI7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIyIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIyO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjM7XFxyXFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcclxcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi5hY3RpdmVUYWItMSB7XFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIwIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIxO1xcclxcbiAgICAgIC8vbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMSwgJHRhYjEpO1xcclxcbiAgICAgIC8vbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMSwgJHRhYjEpO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjI7XFxyXFxuICAgICAgICAvLyBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcclxcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCAwIDQwcHggMDtcXHJcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLnRhYi1oZWFkZXItb3ZlcjEge1xcclxcbiAgICAgIGZsZXg6IDE7XFxyXFxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMiwgJHRhYjMpO1xcclxcbiAgICAgIC8vJHRhYjI7XFxyXFxuICAgICAgLy9ib3JkZXItcmFkaXVzOiA0MHB4ICAwIDA7XFxyXFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXHJcXG5cXHJcXG4gICAgICAudGFiLWhlYWRlciB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMTtcXHJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggNDBweCAwIDA7XFxyXFxuICAgICAgICBAZXh0ZW5kIC5jb21tdW5UYWJIZWFkZXI7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIyIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIxO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjM7XFxyXFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcclxcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcblxcclxcbiAgJi5hY3RpdmVUYWItMiB7XFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIwIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIzO1xcclxcbiAgICAgIC8vbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMSwgJHRhYjEpO1xcclxcbiAgICAgIC8vbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMSwgJHRhYjEpO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjI7XFxyXFxuICAgICAgICAvLyBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcclxcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCAwIDQwcHggMDtcXHJcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLnRhYi1oZWFkZXItb3ZlcjEge1xcclxcbiAgICAgIGZsZXg6IDE7XFxyXFxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMiwgJHRhYjEpO1xcclxcbiAgICAgIC8vJHRhYjI7XFxyXFxuICAgICAgLy9ib3JkZXItcmFkaXVzOiA0MHB4ICAwIDA7XFxyXFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDtcXHJcXG5cXHJcXG4gICAgICAudGFiLWhlYWRlciB7XFxyXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMztcXHJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxyXFxuICAgICAgICBAZXh0ZW5kIC5jb21tdW5UYWJIZWFkZXI7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC50YWItaGVhZGVyLW92ZXIyIHtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIzO1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxyXFxuXFxyXFxuICAgICAgLnRhYi1oZWFkZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjE7XFxyXFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcclxcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLnRhYi1jb250ZW50IHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjE7XFxyXFxuICAgIHBhZGRpbmc6IDEwcHg7XFxyXFxuICAgIC8vYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNywgMjA1LCAyMDUpO1xcclxcbiAgICBib3JkZXItdG9wOiAwO1xcclxcbiAgICBtaW4taGVpZ2h0OiA3MHZoO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgNDBweCA0MHB4O1xcclxcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXHJcXG4gXFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIC50YWJzIHtcXHJcXG4vLyAgICAgLy8gZGlzcGxheTogZmxleDtcXHJcXG4vLyAgICAgLy8gZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4vLyAgICAgLnRhYnMtaGVhZGVyLW92ZXJsYXkge1xcclxcbi8vICAgICAgICAgZGlzcGxheTogZmxleDtcXHJcXG4vLyAgICAgICAgIGhlaWdodDogMTAwcHg7XFxyXFxuXFxyXFxuLy8gICAgICAgICAudGFiLWhlYWRlci1vdmVyIHtcXHJcXG4vLyAgICAgICAgICAgICBmbGV4OiAxO1xcclxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhvdHBpbms7XFxyXFxuLy8gICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgMDtcXHJcXG4vLyAgICAgICAgICAgICAmLmFjdGl2ZSB7XFxyXFxuLy8gICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTUsIDE1MiwgMTUzKTtcXHJcXG4vLyAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCAwIDAgMDtcXHJcXG4vLyAgICAgICAgICAgICB9XFxyXFxuLy8gICAgICAgICAgICAgLnRhYi1oZWFkZXIge1xcclxcbi8vICAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XFxyXFxuLy8gICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBob3RwaW5rO1xcclxcbi8vICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXHJcXG4vLyAgICAgICAgICAgICAgICAgfVxcclxcbi8vICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwcHggNDBweCAwIDQwcHg7XFxyXFxuLy8gICAgICAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7XFxyXFxuLy8gICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTUsIDE1MiwgMTUzKTtcXHJcXG4vLyAgICAgICAgICAgICB9XFxyXFxuLy8gICAgICAgICB9XFxyXFxuLy8gICAgIH1cXHJcXG5cXHJcXG4vLyAgICAgLnRhYi1jb250ZW50IHtcXHJcXG4vLyAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhvdHBpbms7XFxyXFxuLy8gICAgICAgICBwYWRkaW5nOiAxMHB4O1xcclxcbi8vICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNywgMjA1LCAyMDUpO1xcclxcbi8vICAgICAgICAgYm9yZGVyLXRvcDogMDtcXHJcXG4vLyAgICAgfVxcclxcbi8vIH1cXHJcXG5cIixcIi5sb2FkZXItb3ZlcmxheSB7XFxyXFxuICAgIHotaW5kZXg6IDk5OTtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICBoZWlnaHQ6IDEwMHZoO1xcclxcbiAgICB3aWR0aDogMTAwdnc7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDIsIDEwMCwgMTAwLCAwLjYwMyk7XFxyXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAgICAubG9hZGVyIHtcXHJcXG4gICAgICAgIGJvcmRlcjogN3B4IHNvbGlkICNmM2YzZjM7IC8qIExpZ2h0IGdyZXkgKi9cXHJcXG4gICAgICAgIGJvcmRlci10b3A6IDdweCBzb2xpZCAjMmVhMmNjOyAvKiBCbHVlICovXFxyXFxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICAgICAgICB3aWR0aDogNzBweDtcXHJcXG4gICAgICAgIGhlaWdodDogNzBweDtcXHJcXG4gICAgICAgIGFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7XFxyXFxuICAgIH1cXHJcXG4gICAgLmxvYWRlci10ZXh0e1xcclxcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcXHJcXG4gICAgICAgIGZvbnQtc2l6ZTogMjVweDtcXHJcXG4gICAgICAgIGNvbG9yOiAjMmVhMmNjO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIEBrZXlmcmFtZXMgc3BpbiB7XFxyXFxuICAgICAgICAwJSB7XFxyXFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICAxMDAlIHtcXHJcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcclxcbiAgICAgICAgfVxcclxcbiAgICB9XFxyXFxufVxcclxcblwiLFwiXFxyXFxuXFxyXFxuLmNhcmQtcGFuZWwge1xcclxcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMjVzO1xcclxcbiAgcGFkZGluZzogJGNhcmQtcGFkZGluZztcXHJcXG4gIG1hcmdpbjogJGVsZW1lbnQtdG9wLW1hcmdpbiAwICRlbGVtZW50LWJvdHRvbS1tYXJnaW4gMDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gIEBleHRlbmQgLnNoYWRvdy0xO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNhcmQtYmctY29sb3I7XFxyXFxufVxcclxcblxcclxcbi5jYXJkIHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIG1hcmdpbjogJGVsZW1lbnQtdG9wLW1hcmdpbiAwICRlbGVtZW50LWJvdHRvbS1tYXJnaW4gMDtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICRjYXJkLWJnLWNvbG9yO1xcclxcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMjVzO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcclxcbiAgQGV4dGVuZCAuc2hhZG93LTE7XFxyXFxuXFxyXFxuXFxyXFxuICAuY2FyZC10aXRsZSB7XFxyXFxuICAgIGZvbnQtc2l6ZTogMjRweDtcXHJcXG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcXHJcXG4gICAgJi5hY3RpdmF0b3Ige1xcclxcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLy8gQ2FyZCBTaXplc1xcclxcbiAgJi5zbWFsbCwgJi5tZWRpdW0sICYubGFyZ2Uge1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFxyXFxuICAgIC5jYXJkLWltYWdlIHtcXHJcXG4gICAgICBtYXgtaGVpZ2h0OiA2MCU7XFxyXFxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gICAgfVxcclxcbiAgICAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQge1xcclxcbiAgICAgIG1heC1oZWlnaHQ6IDQwJTtcXHJcXG4gICAgfVxcclxcbiAgICAuY2FyZC1jb250ZW50IHtcXHJcXG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcclxcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICAgIH1cXHJcXG4gICAgLmNhcmQtYWN0aW9uIHtcXHJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgYm90dG9tOiAwO1xcclxcbiAgICAgIGxlZnQ6IDA7XFxyXFxuICAgICAgcmlnaHQ6IDA7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYuc21hbGwge1xcclxcbiAgICBoZWlnaHQ6IDMwMHB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5tZWRpdW0ge1xcclxcbiAgICBoZWlnaHQ6IDQwMHB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5sYXJnZSB7XFxyXFxuICAgIGhlaWdodDogNTAwcHg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBIb3Jpem9udGFsIENhcmRzXFxyXFxuICAmLmhvcml6b250YWwge1xcclxcbiAgICAmLnNtYWxsLCAmLm1lZGl1bSwgJi5sYXJnZSB7XFxyXFxuICAgICAgLmNhcmQtaW1hZ2Uge1xcclxcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcXHJcXG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcclxcblxcclxcbiAgICAgICAgaW1nIHtcXHJcXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBkaXNwbGF5OiBmbGV4O1xcclxcblxcclxcbiAgICAuY2FyZC1pbWFnZSB7XFxyXFxuICAgICAgbWF4LXdpZHRoOiA1MCU7XFxyXFxuICAgICAgaW1nIHtcXHJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweCAwIDAgMnB4O1xcclxcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xcclxcbiAgICAgICAgd2lkdGg6IGF1dG87XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5jYXJkLXN0YWNrZWQge1xcclxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gICAgICBmbGV4OiAxO1xcclxcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHJcXG4gICAgICAuY2FyZC1jb250ZW50IHtcXHJcXG4gICAgICAgIGZsZXgtZ3JvdzogMTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIFN0aWNreSBBY3Rpb24gU2VjdGlvblxcclxcbiAgJi5zdGlja3ktYWN0aW9uIHtcXHJcXG4gICAgLmNhcmQtYWN0aW9uIHtcXHJcXG4gICAgICB6LWluZGV4OiAyO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5jYXJkLXJldmVhbCB7XFxyXFxuICAgICAgei1pbmRleDogMTtcXHJcXG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcblxcclxcblxcclxcblxcclxcbiAgLmNhcmQtaW1hZ2Uge1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFxyXFxuICAgIC8vIEltYWdlIGJhY2tncm91bmQgZm9yIGNvbnRlbnRcXHJcXG4gICAgaW1nIHtcXHJcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcXHJcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgICAgbGVmdDogMDtcXHJcXG4gICAgICByaWdodDogMDtcXHJcXG4gICAgICB0b3A6IDA7XFxyXFxuICAgICAgYm90dG9tOiAwO1xcclxcbiAgICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5jYXJkLXRpdGxlIHtcXHJcXG4gICAgICBjb2xvcjogJGNhcmQtYmctY29sb3I7XFxyXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICAgIGJvdHRvbTogMDtcXHJcXG4gICAgICBsZWZ0OiAwO1xcclxcbiAgICAgIG1heC13aWR0aDogMTAwJTtcXHJcXG4gICAgICBwYWRkaW5nOiAkY2FyZC1wYWRkaW5nO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY2FyZC1jb250ZW50IHtcXHJcXG4gICAgcGFkZGluZzogJGNhcmQtcGFkZGluZztcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxyXFxuXFxyXFxuICAgIHAge1xcclxcbiAgICAgIG1hcmdpbjogMDtcXHJcXG4gICAgfVxcclxcbiAgICAuY2FyZC10aXRsZSB7XFxyXFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XFxyXFxuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcclxcblxcclxcbiAgICAgIGkge1xcclxcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAuY2FyZC1hY3Rpb24ge1xcclxcbiAgICAmOmxhc3QtY2hpbGQge1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcclxcbiAgICB9XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7IC8vIFVzZSBpbmhlcml0IHRvIGluaGVyaXQgY29sb3IgY2xhc3Nlc1xcclxcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNjAsMTYwLDE2MCwuMik7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgcGFkZGluZzogMTZweCAkY2FyZC1wYWRkaW5nO1xcclxcblxcclxcbiAgICBhOm5vdCguYnRuKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tZmxvYXRpbmcpIHtcXHJcXG4gICAgICBjb2xvcjogJGNhcmQtbGluay1jb2xvcjtcXHJcXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRjYXJkLXBhZGRpbmc7XFxyXFxuICAgICAgdHJhbnNpdGlvbjogY29sb3IgLjNzIGVhc2U7XFxyXFxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXHJcXG5cXHJcXG4gICAgICAmOmhvdmVyIHsgY29sb3I6ICRjYXJkLWxpbmstY29sb3ItbGlnaHQ7IH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLmNhcmQtcmV2ZWFsIHtcXHJcXG4gICAgcGFkZGluZzogJGNhcmQtcGFkZGluZztcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FyZC1iZy1jb2xvcjtcXHJcXG4gICAgd2lkdGg6IDEwMCU7XFxyXFxuICAgIG92ZXJmbG93LXk6IGF1dG87XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHRvcDogMTAwJTtcXHJcXG4gICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICB6LWluZGV4OiAzO1xcclxcbiAgICBkaXNwbGF5OiBub25lO1xcclxcblxcclxcbiAgICAuY2FyZC10aXRsZSB7XFxyXFxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcblwiLFwiLypcXHJcXG4gICAgQGxpY2Vuc2VcXHJcXG4gICAgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXHJcXG4gICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxcclxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxcclxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcXHJcXG4gICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cXHJcXG4gICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcXHJcXG4gKi9cXHJcXG5cXHJcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxyXFxuLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqL1xcclxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cXHJcXG5cXHJcXG4vKlxcclxcbiAqIENvbnN0YW50czpcXHJcXG4gKiAgICAgIFNUUk9LRVdJRFRIID0gM3B4XFxyXFxuICogICAgICBBUkNTSVpFICAgICA9IDI3MCBkZWdyZWVzIChhbW91bnQgb2YgY2lyY2xlIHRoZSBhcmMgdGFrZXMgdXApXFxyXFxuICogICAgICBBUkNUSU1FICAgICA9IDEzMzNtcyAodGltZSBpdCB0YWtlcyB0byBleHBhbmQgYW5kIGNvbnRyYWN0IGFyYylcXHJcXG4gKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjXFxyXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCByb3RhdGUgZWFjaCB0aW1lLCAyMTYgZ2l2ZXMgdXMgYVxcclxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHBvaW50ZWQgc3RhciBzaGFwZSAoaXQncyAzNjAvNSAqIDMpLlxcclxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG9cXHJcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwLzcgKiAzID0gMTU0LjI4NilcXHJcXG4gKiAgICAgIENPTlRBSU5FUldJRFRIID0gMjhweFxcclxcbiAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtc1xcclxcbiAqL1xcclxcblxcclxcblxcclxcbi5wcmVsb2FkZXItd3JhcHBlciB7XFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogNTBweDtcXHJcXG4gIGhlaWdodDogNTBweDtcXHJcXG5cXHJcXG4gICYuc21hbGwge1xcclxcbiAgICB3aWR0aDogMzZweDtcXHJcXG4gICAgaGVpZ2h0OiAzNnB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5iaWcge1xcclxcbiAgICB3aWR0aDogNjRweDtcXHJcXG4gICAgaGVpZ2h0OiA2NHB4O1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5hY3RpdmUge1xcclxcbiAgICAvKiBkdXJhdGlvbjogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovXFxyXFxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGU7XFxyXFxuICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XFxyXFxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XFxyXFxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxcclxcbn1cXHJcXG5cXHJcXG4uc3Bpbm5lci1sYXllciB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICBib3JkZXItY29sb3I6ICRzcGlubmVyLWRlZmF1bHQtY29sb3I7XFxyXFxufVxcclxcblxcclxcbi5zcGlubmVyLWJsdWUsXFxyXFxuLnNwaW5uZXItYmx1ZS1vbmx5IHtcXHJcXG4gIGJvcmRlci1jb2xvcjogIzQyODVmNDtcXHJcXG59XFxyXFxuXFxyXFxuLnNwaW5uZXItcmVkLFxcclxcbi5zcGlubmVyLXJlZC1vbmx5IHtcXHJcXG4gIGJvcmRlci1jb2xvcjogI2RiNDQzNztcXHJcXG59XFxyXFxuXFxyXFxuLnNwaW5uZXIteWVsbG93LFxcclxcbi5zcGlubmVyLXllbGxvdy1vbmx5IHtcXHJcXG4gIGJvcmRlci1jb2xvcjogI2Y0YjQwMDtcXHJcXG59XFxyXFxuXFxyXFxuLnNwaW5uZXItZ3JlZW4sXFxyXFxuLnNwaW5uZXItZ3JlZW4tb25seSB7XFxyXFxuICBib3JkZXItY29sb3I6ICMwZjlkNTg7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIElNUE9SVEFOVCBOT1RFIEFCT1VUIENTUyBBTklNQVRJT04gUFJPUEVSVElFUyAoa2VhbnVsZWUpOlxcclxcbiAqXFxyXFxuICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndFxcclxcbiAqIGd1YXJhbnRlZSB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBzdGFydCBfZXhhY3RseV8gYWZ0ZXIgdGhhdCB2YWx1ZS4gU28gd2UgYXZvaWQgdXNpbmdcXHJcXG4gKiBhbmltYXRpb24tZGVsYXkgYW5kIGluc3RlYWQgc2V0IGN1c3RvbSBrZXlmcmFtZXMgZm9yIGVhY2ggY29sb3IgKGFzIHJlZHVuZGFudCBhcyBpdFxcclxcbiAqIHNlZW1zKS5cXHJcXG4gKlxcclxcbiAqIFdlIHdyaXRlIG91dCBlYWNoIGFuaW1hdGlvbiBpbiBmdWxsIChpbnN0ZWFkIG9mIHNlcGFyYXRpbmcgYW5pbWF0aW9uLW5hbWUsXFxyXFxuICogYW5pbWF0aW9uLWR1cmF0aW9uLCBldGMuKSBiZWNhdXNlIHVuZGVyIHRoZSBwb2x5ZmlsbCwgU2FmYXJpIGRvZXMgbm90IHJlY29nbml6ZSB0aG9zZVxcclxcbiAqIHNwZWNpZmljIHByb3BlcnRpZXMgcHJvcGVybHksIHRyZWF0cyB0aGVtIGFzIC13ZWJraXQtYW5pbWF0aW9uLCBhbmQgb3ZlcnJpZGVzIHRoZVxcclxcbiAqIG90aGVyIGFuaW1hdGlvbiBydWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BsYXRmb3JtL2lzc3Vlcy81My5cXHJcXG4gKi9cXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItYmx1ZSB7XFxyXFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxyXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgYmx1ZS1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGJsdWUtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItcmVkIHtcXHJcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCByZWQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCByZWQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXIteWVsbG93IHtcXHJcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCB5ZWxsb3ctZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCB5ZWxsb3ctZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItZ3JlZW4ge1xcclxcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcclxcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGdyZWVuLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgZ3JlZW4tZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLFxcclxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ibHVlLW9ubHksXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXJlZC1vbmx5LFxcclxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci15ZWxsb3ctb25seSxcXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItZ3JlZW4tb25seSB7XFxyXFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxyXFxuICBvcGFjaXR5OiAxO1xcclxcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUge1xcclxcbiAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7ICB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIDI1JSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyAgfSAvKiAxICAgKiBBUkNTSVpFICovXFxyXFxuICAzNy41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKTsgIH0gLyogMS41ICogQVJDU0laRSAqL1xcclxcbiAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZyk7ICB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cXHJcXG4gIDYyLjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpOyAgfSAvKiAyLjUgKiBBUkNTSVpFICovXFxyXFxuICA3NSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKTsgIH0gLyogMyAgICogQVJDU0laRSAqL1xcclxcbiAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZyk7ICB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIHRvICAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTsgfSAvKiA0ICAgKiBBUkNTSVpFICovXFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcXHJcXG4gIDEyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsgIH0gLyogMC41ICogQVJDU0laRSAqL1xcclxcbiAgMjUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyAgfSAvKiAxICAgKiBBUkNTSVpFICovXFxyXFxuICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZyk7ICB9IC8qIDEuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIDUwJSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKTsgIH0gLyogMiAgICogQVJDU0laRSAqL1xcclxcbiAgNjIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpOyAgfSAvKiAyLjUgKiBBUkNTSVpFICovXFxyXFxuICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZyk7ICB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cXHJcXG4gIDg3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKTsgIH0gLyogMy41ICogQVJDU0laRSAqL1xcclxcbiAgdG8gICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTsgfSAvKiA0ICAgKiBBUkNTSVpFICovXFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyBibHVlLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAxOyB9XFxyXFxuICAyNSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAyNiUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA4OSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA5MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAxMDAlIHsgb3BhY2l0eTogMTsgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGJsdWUtZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDI1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDI2JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDg5JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDkwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDEwMCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyByZWQtZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDE1JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDI1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDUxJSB7IG9wYWNpdHk6IDA7IH1cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyByZWQtZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDE1JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDI1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDUxJSB7IG9wYWNpdHk6IDA7IH1cXHJcXG59XFxyXFxuXFxyXFxuQC13ZWJraXQta2V5ZnJhbWVzIHllbGxvdy1mYWRlLWluLW91dCB7XFxyXFxuICBmcm9tIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgNDAlIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgNTAlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgNzUlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgNzYlIHsgb3BhY2l0eTogMDsgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIHllbGxvdy1mYWRlLWluLW91dCB7XFxyXFxuICBmcm9tIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgNDAlIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgNTAlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgNzUlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgNzYlIHsgb3BhY2l0eTogMDsgfVxcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgZ3JlZW4tZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDY1JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDc1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDkwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDEwMCUgeyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgZ3JlZW4tZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDY1JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDc1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDkwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDEwMCUgeyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGVcXHJcXG4gKiBzcGlubmVyIGlzIHJvdGF0aW5nIChhcHBlYXJzIG9uIENocm9tZSAzOCwgU2FmYXJpIDcuMSwgYW5kIElFIDExKS5cXHJcXG4gKi9cXHJcXG4uZ2FwLXBhdGNoIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIGxlZnQ6IDQ1JTtcXHJcXG4gIHdpZHRoOiAxMCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcclxcbn1cXHJcXG5cXHJcXG4uZ2FwLXBhdGNoIC5jaXJjbGUge1xcclxcbiAgd2lkdGg6IDEwMDAlO1xcclxcbiAgbGVmdDogLTQ1MCU7XFxyXFxufVxcclxcblxcclxcbi5jaXJjbGUtY2xpcHBlciB7XFxyXFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogNTAlO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXHJcXG5cXHJcXG4gIC5jaXJjbGUge1xcclxcbiAgICB3aWR0aDogMjAwJTtcXHJcXG4gICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICBib3JkZXItd2lkdGg6IDNweDsgLyogU1RST0tFV0lEVEggKi9cXHJcXG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXHJcXG4gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcclxcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcclxcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBub25lO1xcclxcbiAgICBhbmltYXRpb246IG5vbmU7XFxyXFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgdG9wOiAwO1xcclxcbiAgICByaWdodDogMDtcXHJcXG4gICAgYm90dG9tOiAwO1xcclxcbiAgfVxcclxcblxcclxcbiAgJi5sZWZ0IC5jaXJjbGUge1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcXHJcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcXHJcXG4gIH1cXHJcXG4gICYucmlnaHQgLmNpcmNsZSB7XFxyXFxuICAgIGxlZnQ6IC0xMDAlO1xcclxcbiAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXHJcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTI5ZGVnKTtcXHJcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XFxyXFxuICAvKiBkdXJhdGlvbjogQVJDVElNRSAqL1xcclxcbiAgLXdlYmtpdC1hbmltYXRpb246IGxlZnQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxuICBhbmltYXRpb246IGxlZnQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxufVxcclxcblxcclxcbi5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUge1xcclxcbiAgLyogZHVyYXRpb246IEFSQ1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiByaWdodC1zcGluIDEzMzNtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG4gIGFuaW1hdGlvbjogcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4ge1xcclxcbiAgZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTsgfVxcclxcbiAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7IH1cXHJcXG4gIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpOyB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgbGVmdC1zcGluIHtcXHJcXG4gIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpOyB9XFxyXFxuICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7IH1cXHJcXG4gIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTsgfVxcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7XFxyXFxuICBmcm9tIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTsgfVxcclxcbiAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTsgfVxcclxcbiAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpOyB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7XFxyXFxuICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7IH1cXHJcXG4gIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpOyB9XFxyXFxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpOyB9XFxyXFxufVxcclxcblxcclxcbiNzcGlubmVyQ29udGFpbmVyLmNvb2xkb3duIHtcXHJcXG4gIC8qIGR1cmF0aW9uOiBTSFJJTktfVElNRSAqL1xcclxcbiAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpO1xcclxcbiAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcXHJcXG59XFxyXFxuXFxyXFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGUtb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAxOyB9XFxyXFxuICB0byB7IG9wYWNpdHk6IDA7IH1cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyBmYWRlLW91dCB7XFxyXFxuICBmcm9tIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgdG8geyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblwiLFwiXFxyXFxuLy8gUHJvZ3Jlc3MgQmFyXFxyXFxuLnByb2dyZXNzIHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIGhlaWdodDogNHB4O1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oJHByb2dyZXNzLWJhci1jb2xvciwgNDAlKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXHJcXG4gIG1hcmdpbjogJGVsZW1lbnQtdG9wLW1hcmdpbiAwICRlbGVtZW50LWJvdHRvbS1tYXJnaW4gMDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICAuZGV0ZXJtaW5hdGUge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgYm90dG9tOiAwO1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYmFyLWNvbG9yO1xcclxcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAuM3MgbGluZWFyO1xcclxcbiAgfVxcclxcbiAgLmluZGV0ZXJtaW5hdGUge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYmFyLWNvbG9yO1xcclxcbiAgICAmOmJlZm9yZSB7XFxyXFxuICAgICAgY29udGVudDogJyc7XFxyXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxyXFxuICAgICAgdG9wOiAwO1xcclxcbiAgICAgIGxlZnQ6MDtcXHJcXG4gICAgICBib3R0b206IDA7XFxyXFxuICAgICAgd2lsbC1jaGFuZ2U6IGxlZnQsIHJpZ2h0O1xcclxcbiAgICAgIC8vIEN1c3RvbSBiZXppZXJcXHJcXG4gICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMi4xcyBjdWJpYy1iZXppZXIoMC42NTAsIDAuODE1LCAwLjczNSwgMC4zOTUpIGluZmluaXRlO1xcclxcblxcclxcbiAgICB9XFxyXFxuICAgICY6YWZ0ZXIge1xcclxcbiAgICAgIGNvbnRlbnQ6ICcnO1xcclxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcclxcbiAgICAgIHRvcDogMDtcXHJcXG4gICAgICBsZWZ0OjA7XFxyXFxuICAgICAgYm90dG9tOiAwO1xcclxcbiAgICAgIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXHJcXG4gICAgICAvLyBDdXN0b20gYmV6aWVyXFxyXFxuICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNob3J0IDIuMXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0MCwgMC40NDAsIDEuMDAwKSBpbmZpbml0ZTtcXHJcXG4gICAgICBhbmltYXRpb24tZGVsYXk6IDEuMTVzO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7XFxyXFxuICAwJSB7XFxyXFxuICAgIGxlZnQ6IC0zNSU7XFxyXFxuICAgIHJpZ2h0OjEwMCU7XFxyXFxuICB9XFxyXFxuICA2MCUge1xcclxcbiAgICBsZWZ0OiAxMDAlO1xcclxcbiAgICByaWdodDogLTkwJTtcXHJcXG4gIH1cXHJcXG4gIDEwMCUge1xcclxcbiAgICBsZWZ0OiAxMDAlO1xcclxcbiAgICByaWdodDogLTkwJTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlLXNob3J0IHtcXHJcXG4gIDAlIHtcXHJcXG4gICAgbGVmdDogLTIwMCU7XFxyXFxuICAgIHJpZ2h0OiAxMDAlO1xcclxcbiAgfVxcclxcbiAgNjAlIHtcXHJcXG4gICAgbGVmdDogMTA3JTtcXHJcXG4gICAgcmlnaHQ6IC04JTtcXHJcXG4gIH1cXHJcXG4gIDEwMCUge1xcclxcbiAgICBsZWZ0OiAxMDclO1xcclxcbiAgICByaWdodDogLTglO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5cIixcIi5mbGFzaC1tZXNzYWdlIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHBhZGRpbmc6IDJweCAxMHB4O1xcclxcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcclxcbiAgei1pbmRleDogOTk5OTk7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIGJvdHRvbTogMDtcXHJcXG4gIGZvbnQtc2l6ZTogMTRweDtcXHJcXG5cXHJcXG5cXHJcXG4gICYuaW5mbyB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNiZWRkYmU7XFxyXFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM3MjhmNzI7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAmLndhcm4ge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVlNmQwO1xcclxcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZWE3ZDE3O1xcclxcbiAgfVxcclxcbiAgJi5lcnJvciB7XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWIyYmM7XFxyXFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMzMyNTc7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgbWVzc2FnZUluIHtcXHJcXG4gIGZyb20ge1xcclxcbiAgICByaWdodDogODAlO1xcclxcbiAgfVxcclxcblxcclxcbiAgdG8ge1xcclxcbiAgICByaWdodDogMDtcXHJcXG5cXHJcXG4gIH1cXHJcXG59XCIsXCIucHVsc2Uge1xcclxcbiAgJjo6YmVmb3JlIHtcXHJcXG4gICAgY29udGVudDogJyc7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICBoZWlnaHQ6IDEwMCU7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXHJcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MsIHRyYW5zZm9ybSAuM3M7XFxyXFxuICAgIGFuaW1hdGlvbjogcHVsc2UtYW5pbWF0aW9uIDFzIGN1YmljLWJlemllcigwLjI0LCAwLCAwLjM4LCAxKSBpbmZpbml0ZTtcXHJcXG4gICAgLy96LWluZGV4OiAtMTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIHB1bHNlLWFuaW1hdGlvbiB7XFxyXFxuICAwJSB7XFxyXFxuICAgIG9wYWNpdHk6IDE7XFxyXFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxyXFxuICB9XFxyXFxuICA1MCUge1xcclxcbiAgICBvcGFjaXR5OiAwO1xcclxcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7XFxyXFxuICB9XFxyXFxuICAxMDAlIHtcXHJcXG4gICAgb3BhY2l0eTogMDtcXHJcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cIixcIi5kcm9wZG93bi1jb250ZW50IHtcXHJcXG4gICY6Zm9jdXMge1xcclxcbiAgICBvdXRsaW5lOiAwO1xcclxcbiAgfVxcclxcblxcclxcblxcclxcbiAgQGV4dGVuZCAuc2hhZG93LTE7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tYmctY29sb3I7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBkaXNwbGF5OiBmbG93O1xcclxcbiAgbWluLXdpZHRoOiAxMDBweDtcXHJcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxyXFxuICAvL29wYWNpdHk6IDA7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgdG9wOiAwO1xcclxcbiAgei1pbmRleDogOTk5OTsgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBkb2Vzbid0IGJyZWFrIG90aGVyIHRoaW5nc1xcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcclxcblxcclxcblxcclxcbiAgbGkge1xcclxcbiAgICAmOmhvdmVyLCAmLmFjdGl2ZSB7XFxyXFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWhvdmVyLWJnLWNvbG9yO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICY6Zm9jdXMge1xcclxcbiAgICAgIG91dGxpbmU6IG5vbmU7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJi5kaXZpZGVyIHtcXHJcXG4gICAgICBtaW4taGVpZ2h0OiAwO1xcclxcbiAgICAgIGhlaWdodDogMXB4O1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYgPiBhLCAmID4gc3BhbiB7XFxyXFxuICAgICAgZm9udC1zaXplOiAxNnB4O1xcclxcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tY29sb3I7XFxyXFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XFxyXFxuICAgICAgcGFkZGluZzogY2FsYygoJGRyb3Bkb3duLWl0ZW0taGVpZ2h0IC0gMjJweCkgLyAyKSAxNnB4O1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYgPiBzcGFuID4gbGFiZWwge1xcclxcbiAgICAgIHRvcDogMXB4O1xcclxcbiAgICAgIGxlZnQ6IDA7XFxyXFxuICAgICAgaGVpZ2h0OiAxOHB4O1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC8vIEljb24gYWxpZ25tZW50IG92ZXJyaWRlXFxyXFxuICAgICYgPiBhID4gaSB7XFxyXFxuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xcclxcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcclxcbiAgICAgIGZsb2F0OiBsZWZ0O1xcclxcbiAgICAgIG1hcmdpbjogMCAyNHB4IDAgMDtcXHJcXG4gICAgICB3aWR0aDogMjRweDtcXHJcXG4gICAgfVxcclxcblxcclxcblxcclxcbiAgICBjbGVhcjogYm90aDtcXHJcXG4gICAgY29sb3I6ICRvZmYtYmxhY2s7XFxyXFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gICAgbWluLWhlaWdodDogJGRyb3Bkb3duLWl0ZW0taGVpZ2h0O1xcclxcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuYm9keS5rZXlib2FyZC1mb2N1c2VkIHtcXHJcXG4gIC5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRkcm9wZG93bi1ob3Zlci1iZy1jb2xvciwgOCUpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyBJbnB1dCBmaWVsZCBzcGVjaWZpY2l0eSBidWdmaXhcXHJcXG4uaW5wdXQtZmllbGQuY29sIC5kcm9wZG93bi1jb250ZW50IFt0eXBlPVxcXCJjaGVja2JveFxcXCJdICsgbGFiZWwge1xcclxcbiAgdG9wOiAxcHg7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgaGVpZ2h0OiAxOHB4O1xcclxcbiAgdHJhbnNmb3JtOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uZHJvcGRvd24tdHJpZ2dlciB7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVwiLFwibmF2IHtcXHJcXG4gICYubmF2LWV4dGVuZGVkIHtcXHJcXG4gICAgaGVpZ2h0OiBhdXRvO1xcclxcblxcclxcbiAgICAubmF2LXdyYXBwZXIge1xcclxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gICAgICBtaW4taGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxyXFxuICAgICAgaGVpZ2h0OiBhdXRvO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC5uYXYtY29udGVudCB7XFxyXFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGNvbG9yOiAkbmF2YmFyLWZvbnQtY29sb3I7XFxyXFxuICBAZXh0ZW5kIC5zaGFkb3ctMTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0LW1vYmlsZTtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAkbmF2YmFyLWxpbmUtaGVpZ2h0LW1vYmlsZTtcXHJcXG5cXHJcXG4gIGEgeyBjb2xvcjogJG5hdmJhci1mb250LWNvbG9yOyB9XFxyXFxuXFxyXFxuICBpLFxcclxcbiAgW2NsYXNzXj1cXFwibWRpLVxcXCJdLCBbY2xhc3MqPVxcXCJtZGktXFxcIl0sXFxyXFxuICBpLnMtaWNvbnMge1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgZm9udC1zaXplOiAyNHB4O1xcclxcbiAgICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0LW1vYmlsZTtcXHJcXG4gICAgbGluZS1oZWlnaHQ6ICRuYXZiYXItbGluZS1oZWlnaHQtbW9iaWxlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLm5hdi13cmFwcGVyIHtcXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICBoZWlnaHQ6IDEwMCU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBAbWVkaWEgI3skbGFyZ2UtYW5kLXVwfSB7XFxyXFxuICAgIGEuc2lkZW5hdi10cmlnZ2VyIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbiAgfVxcclxcblxcclxcblxcclxcbiAgLy8gQ29sbGFwc2UgYnV0dG9uXFxyXFxuICAuc2lkZW5hdi10cmlnZ2VyIHtcXHJcXG4gICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgei1pbmRleDogMTtcXHJcXG4gICAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxyXFxuICAgIG1hcmdpbjogMCAxOHB4O1xcclxcblxcclxcbiAgICBpIHtcXHJcXG4gICAgICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0LW1vYmlsZTtcXHJcXG4gICAgICBsaW5lLWhlaWdodDogJG5hdmJhci1saW5lLWhlaWdodC1tb2JpbGU7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG5cXHJcXG4gIC8vIExvZ29cXHJcXG4gIC5icmFuZC1sb2dvIHtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICBjb2xvcjogJG5hdmJhci1mb250LWNvbG9yO1xcclxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgIGZvbnQtc2l6ZTogJG5hdmJhci1icmFuZC1mb250LXNpemU7XFxyXFxuICAgIHBhZGRpbmc6IDA7XFxyXFxuICAgIGltZy5jaXJjbGUge1xcclxcbiAgICAgIGhlaWdodDogMzJweDtcXHJcXG4gICAgICB3aWR0aDogMzJweDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAmLmNlbnRlciB7XFxyXFxuICAgICAgbGVmdDogNTAlO1xcclxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBAbWVkaWEgI3skbWVkaXVtLWFuZC1kb3dufSB7XFxyXFxuICAgICAgbGVmdDogNTAlO1xcclxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXHJcXG5cXHJcXG4gICAgICAmLmxlZnQsICYucmlnaHQge1xcclxcbiAgICAgICAgcGFkZGluZzogMDtcXHJcXG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgJi5sZWZ0IHsgbGVmdDogMC41cmVtOyB9XFxyXFxuICAgICAgJi5yaWdodCB7XFxyXFxuICAgICAgICByaWdodDogMC41cmVtO1xcclxcbiAgICAgICAgbGVmdDogYXV0bztcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJi5yaWdodCB7XFxyXFxuICAgICAgcmlnaHQ6IDAuNXJlbTtcXHJcXG4gICAgICBwYWRkaW5nOiAwO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGksXFxyXFxuICAgIFtjbGFzc149XFxcIm1kaS1cXFwiXSwgW2NsYXNzKj1cXFwibWRpLVxcXCJdLFxcclxcbiAgICBpLnMtaWNvbnMge1xcclxcbiAgICAgIGZsb2F0OiBsZWZ0O1xcclxcbiAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcblxcclxcbiAgLy8gVGl0bGVcXHJcXG4gIC5uYXYtdGl0bGUge1xcclxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgIGZvbnQtc2l6ZTogMzJweDtcXHJcXG4gICAgcGFkZGluZzogMjhweCAwO1xcclxcbiAgfVxcclxcblxcclxcblxcclxcbiAgLy8gTmF2YmFyIExpbmtzXFxyXFxuICB1bCB7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG5cXHJcXG4gICAgbGkge1xcclxcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjNzO1xcclxcbiAgICAgIGZsb2F0OiBsZWZ0O1xcclxcbiAgICAgIHBhZGRpbmc6IDA7XFxyXFxuXFxyXFxuICAgICAgJi5hY3RpdmUge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMSk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICAgIGEge1xcclxcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjNzO1xcclxcbiAgICAgIGZvbnQtc2l6ZTogJG5hdmJhci1mb250LXNpemU7XFxyXFxuICAgICAgY29sb3I6ICRuYXZiYXItZm9udC1jb2xvcjtcXHJcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgICBwYWRkaW5nOiAwIDE1cHg7XFxyXFxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xcclxcblxcclxcbiAgICAgICYuYnRuLCAmLmJ0bi1sYXJnZSwgJi5idG4tZmxhdCwgJi5idG4tZmxvYXRpbmcge1xcclxcbiAgICAgICAgbWFyZ2luLXRvcDogLTJweDtcXHJcXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xcclxcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcclxcblxcclxcbiAgICAgICAgJiA+IC5tYXRlcmlhbC1pY29ucyB7XFxyXFxuICAgICAgICAgIGhlaWdodDogaW5oZXJpdDtcXHJcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgICY6aG92ZXIge1xcclxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMSk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICYubGVmdCB7XFxyXFxuICAgICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8vIE5hdmJhciBTZWFyY2ggRm9ybVxcclxcbiAgZm9ybSB7XFxyXFxuICAgIGhlaWdodDogMTAwJTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC5pbnB1dC1maWVsZCB7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG4gICAgaGVpZ2h0OiAxMDAlO1xcclxcblxcclxcbiAgICBpbnB1dCB7XFxyXFxuICAgICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xcclxcbiAgICAgIGJvcmRlcjogbm9uZTtcXHJcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XFxyXFxuXFxyXFxuICAgICAgJjpmb2N1cywgJlt0eXBlPXRleHRdOnZhbGlkLCAmW3R5cGU9cGFzc3dvcmRdOnZhbGlkLFxcclxcbiAgICAgICZbdHlwZT1lbWFpbF06dmFsaWQsICZbdHlwZT11cmxdOnZhbGlkLCAmW3R5cGU9ZGF0ZV06dmFsaWQge1xcclxcbiAgICAgICAgYm9yZGVyOiBub25lO1xcclxcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGFiZWwge1xcclxcbiAgICAgIHRvcDogMDtcXHJcXG4gICAgICBsZWZ0OiAwO1xcclxcblxcclxcbiAgICAgIGkge1xcclxcbiAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcpO1xcclxcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgLjNzO1xcclxcbiAgICAgIH1cXHJcXG4gICAgICAmLmFjdGl2ZSBpIHsgY29sb3I6ICRuYXZiYXItZm9udC1jb2xvcjsgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbi8vIEZpeGVkIE5hdmJhclxcclxcbi5uYXZiYXItZml4ZWQge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxyXFxuICB6LWluZGV4OiA5OTc7XFxyXFxuXFxyXFxuICBuYXYge1xcclxcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICB9XFxyXFxufVxcclxcbkBtZWRpYSAjeyRtZWRpdW0tYW5kLXVwfSB7XFxyXFxuICBuYXYubmF2LWV4dGVuZGVkIC5uYXYtd3JhcHBlciB7XFxyXFxuICAgIG1pbi1oZWlnaHQ6ICRuYXZiYXItaGVpZ2h0O1xcclxcbiAgfVxcclxcbiAgbmF2LCBuYXYgLm5hdi13cmFwcGVyIGksIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciwgbmF2IGEuc2lkZW5hdi10cmlnZ2VyIGkge1xcclxcbiAgICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0O1xcclxcbiAgICBsaW5lLWhlaWdodDogJG5hdmJhci1saW5lLWhlaWdodDtcXHJcXG4gIH1cXHJcXG4gIC5uYXZiYXItZml4ZWQge1xcclxcbiAgICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0O1xcclxcbiAgfVxcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpO1xuXG4gIC8vIElmIHVybCBpcyBhbHJlYWR5IHdyYXBwZWQgaW4gcXVvdGVzLCByZW1vdmUgdGhlbVxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG4gIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICB1cmwgKz0gb3B0aW9ucy5oYXNoO1xuICB9XG5cbiAgLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuICBpZiAoL1tcIicoKSBcXHRcXG5dfCglMjApLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8qKlxuICogUmVhY3QgUm91dGVyIERPTSB2Ni40LjNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMsIFJvdXRlciwgdXNlSHJlZiwgdXNlUmVzb2x2ZWRQYXRoLCB1c2VMb2NhdGlvbiwgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIHVzZU5hdmlnYXRlLCBjcmVhdGVQYXRoLCBVTlNBRkVfTmF2aWdhdGlvbkNvbnRleHQsIFVOU0FGRV9Sb3V0ZUNvbnRleHQsIHVzZU1hdGNoZXMsIHVzZU5hdmlnYXRpb24sIFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQXdhaXQsIE1lbW9yeVJvdXRlciwgTmF2aWdhdGUsIE5hdmlnYXRpb25UeXBlLCBPdXRsZXQsIFJvdXRlLCBSb3V0ZXIsIFJvdXRlclByb3ZpZGVyLCBSb3V0ZXMsIFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCwgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIFVOU0FGRV9EYXRhU3RhdGljUm91dGVyQ29udGV4dCwgVU5TQUZFX0xvY2F0aW9uQ29udGV4dCwgVU5TQUZFX05hdmlnYXRpb25Db250ZXh0LCBVTlNBRkVfUm91dGVDb250ZXh0LCBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cywgY3JlYXRlTWVtb3J5Um91dGVyLCBjcmVhdGVQYXRoLCBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4sIGNyZWF0ZVJvdXRlc0Zyb21FbGVtZW50cywgZGVmZXIsIGdlbmVyYXRlUGF0aCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpzb24sIG1hdGNoUGF0aCwgbWF0Y2hSb3V0ZXMsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlbmRlck1hdGNoZXMsIHJlc29sdmVQYXRoLCB1c2VBY3Rpb25EYXRhLCB1c2VBc3luY0Vycm9yLCB1c2VBc3luY1ZhbHVlLCB1c2VIcmVmLCB1c2VJblJvdXRlckNvbnRleHQsIHVzZUxvYWRlckRhdGEsIHVzZUxvY2F0aW9uLCB1c2VNYXRjaCwgdXNlTWF0Y2hlcywgdXNlTmF2aWdhdGUsIHVzZU5hdmlnYXRpb24sIHVzZU5hdmlnYXRpb25UeXBlLCB1c2VPdXRsZXQsIHVzZU91dGxldENvbnRleHQsIHVzZVBhcmFtcywgdXNlUmVzb2x2ZWRQYXRoLCB1c2VSZXZhbGlkYXRvciwgdXNlUm91dGVFcnJvciwgdXNlUm91dGVMb2FkZXJEYXRhLCB1c2VSb3V0ZXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVCcm93c2VySGlzdG9yeSwgY3JlYXRlSGFzaEhpc3RvcnksIGludmFyaWFudCwgam9pblBhdGhzIH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5jb25zdCBkZWZhdWx0TWV0aG9kID0gXCJnZXRcIjtcbmNvbnN0IGRlZmF1bHRFbmNUeXBlID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbmZ1bmN0aW9uIGlzSHRtbEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0LnRhZ05hbWUgPT09IFwic3RyaW5nXCI7XG59XG5mdW5jdGlvbiBpc0J1dHRvbkVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBpc0h0bWxFbGVtZW50KG9iamVjdCkgJiYgb2JqZWN0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJidXR0b25cIjtcbn1cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBpc0h0bWxFbGVtZW50KG9iamVjdCkgJiYgb2JqZWN0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmb3JtXCI7XG59XG5mdW5jdGlvbiBpc0lucHV0RWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIGlzSHRtbEVsZW1lbnQob2JqZWN0KSAmJiBvYmplY3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCI7XG59XG5cbmZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xuICByZXR1cm4gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByb2Nlc3NMaW5rQ2xpY2soZXZlbnQsIHRhcmdldCkge1xuICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAwICYmICggLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQgY2xpY2tzXG4gICF0YXJnZXQgfHwgdGFyZ2V0ID09PSBcIl9zZWxmXCIpICYmIC8vIExldCBicm93c2VyIGhhbmRsZSBcInRhcmdldD1fYmxhbmtcIiBldGMuXG4gICFpc01vZGlmaWVkRXZlbnQoZXZlbnQpIC8vIElnbm9yZSBjbGlja3Mgd2l0aCBtb2RpZmllciBrZXlzXG4gIDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIGluaXRpYWxpemVyLlxuICpcbiAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIGBuZXcgVVJMU2VhcmNoUGFyYW1zKGluaXQpYCBleGNlcHQgaXQgYWxzb1xuICogc3VwcG9ydHMgYXJyYXlzIGFzIHZhbHVlcyBpbiB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIGluaXRpYWxpemVyXG4gKiBpbnN0ZWFkIG9mIGp1c3Qgc3RyaW5ncy4gVGhpcyBpcyBjb252ZW5pZW50IHdoZW4geW91IG5lZWQgbXVsdGlwbGVcbiAqIHZhbHVlcyBmb3IgYSBnaXZlbiBrZXksIGJ1dCBkb24ndCB3YW50IHRvIHVzZSBhbiBhcnJheSBpbml0aWFsaXplci5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZjpcbiAqXG4gKiAgIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKFtcbiAqICAgICBbJ3NvcnQnLCAnbmFtZSddLFxuICogICAgIFsnc29ydCcsICdwcmljZSddXG4gKiAgIF0pO1xuICpcbiAqIHlvdSBjYW4gZG86XG4gKlxuICogICBsZXQgc2VhcmNoUGFyYW1zID0gY3JlYXRlU2VhcmNoUGFyYW1zKHtcbiAqICAgICBzb3J0OiBbJ25hbWUnLCAncHJpY2UnXVxuICogICB9KTtcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hQYXJhbXMoaW5pdCkge1xuICBpZiAoaW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgaW5pdCA9IFwiXCI7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh0eXBlb2YgaW5pdCA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KGluaXQpIHx8IGluaXQgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMgPyBpbml0IDogT2JqZWN0LmtleXMoaW5pdCkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBpbml0W2tleV07XG4gICAgcmV0dXJuIG1lbW8uY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHYgPT4gW2tleSwgdl0pIDogW1trZXksIHZhbHVlXV0pO1xuICB9LCBbXSkpO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUGFyYW1zRm9yTG9jYXRpb24obG9jYXRpb25TZWFyY2gsIGRlZmF1bHRTZWFyY2hQYXJhbXMpIHtcbiAgbGV0IHNlYXJjaFBhcmFtcyA9IGNyZWF0ZVNlYXJjaFBhcmFtcyhsb2NhdGlvblNlYXJjaCk7XG5cbiAgZm9yIChsZXQga2V5IG9mIGRlZmF1bHRTZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgaWYgKCFzZWFyY2hQYXJhbXMuaGFzKGtleSkpIHtcbiAgICAgIGRlZmF1bHRTZWFyY2hQYXJhbXMuZ2V0QWxsKGtleSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VhcmNoUGFyYW1zO1xufVxuZnVuY3Rpb24gZ2V0Rm9ybVN1Ym1pc3Npb25JbmZvKHRhcmdldCwgZGVmYXVsdEFjdGlvbiwgb3B0aW9ucykge1xuICBsZXQgbWV0aG9kO1xuICBsZXQgYWN0aW9uO1xuICBsZXQgZW5jVHlwZTtcbiAgbGV0IGZvcm1EYXRhO1xuXG4gIGlmIChpc0Zvcm1FbGVtZW50KHRhcmdldCkpIHtcbiAgICBsZXQgc3VibWlzc2lvblRyaWdnZXIgPSBvcHRpb25zLnN1Ym1pc3Npb25UcmlnZ2VyO1xuICAgIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJtZXRob2RcIikgfHwgZGVmYXVsdE1ldGhvZDtcbiAgICBhY3Rpb24gPSBvcHRpb25zLmFjdGlvbiB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpIHx8IGRlZmF1bHRBY3Rpb247XG4gICAgZW5jVHlwZSA9IG9wdGlvbnMuZW5jVHlwZSB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiKSB8fCBkZWZhdWx0RW5jVHlwZTtcbiAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSh0YXJnZXQpO1xuXG4gICAgaWYgKHN1Ym1pc3Npb25UcmlnZ2VyICYmIHN1Ym1pc3Npb25UcmlnZ2VyLm5hbWUpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChzdWJtaXNzaW9uVHJpZ2dlci5uYW1lLCBzdWJtaXNzaW9uVHJpZ2dlci52YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQnV0dG9uRWxlbWVudCh0YXJnZXQpIHx8IGlzSW5wdXRFbGVtZW50KHRhcmdldCkgJiYgKHRhcmdldC50eXBlID09PSBcInN1Ym1pdFwiIHx8IHRhcmdldC50eXBlID09PSBcImltYWdlXCIpKSB7XG4gICAgbGV0IGZvcm0gPSB0YXJnZXQuZm9ybTtcblxuICAgIGlmIChmb3JtID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzdWJtaXQgYSA8YnV0dG9uPiBvciA8aW5wdXQgdHlwZT1cXFwic3VibWl0XFxcIj4gd2l0aG91dCBhIDxmb3JtPlwiKTtcbiAgICB9IC8vIDxidXR0b24+LzxpbnB1dCB0eXBlPVwic3VibWl0XCI+IG1heSBvdmVycmlkZSBhdHRyaWJ1dGVzIG9mIDxmb3JtPlxuXG5cbiAgICBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZm9ybW1ldGhvZFwiKSB8fCBmb3JtLmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKSB8fCBkZWZhdWx0TWV0aG9kO1xuICAgIGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJmb3JtYWN0aW9uXCIpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpIHx8IGRlZmF1bHRBY3Rpb247XG4gICAgZW5jVHlwZSA9IG9wdGlvbnMuZW5jVHlwZSB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZm9ybWVuY3R5cGVcIikgfHwgZm9ybS5nZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIpIHx8IGRlZmF1bHRFbmNUeXBlO1xuICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pOyAvLyBJbmNsdWRlIG5hbWUgKyB2YWx1ZSBmcm9tIGEgPGJ1dHRvbj4sIGFwcGVuZGluZyBpbiBjYXNlIHRoZSBidXR0b24gbmFtZVxuICAgIC8vIG1hdGNoZXMgYW4gZXhpc3RpbmcgaW5wdXQgbmFtZVxuXG4gICAgaWYgKHRhcmdldC5uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQodGFyZ2V0Lm5hbWUsIHRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzSHRtbEVsZW1lbnQodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzdWJtaXQgZWxlbWVudCB0aGF0IGlzIG5vdCA8Zm9ybT4sIDxidXR0b24+LCBvciBcIiArIFwiPGlucHV0IHR5cGU9XFxcInN1Ym1pdHxpbWFnZVxcXCI+XCIpO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IGRlZmF1bHRNZXRob2Q7XG4gICAgYWN0aW9uID0gb3B0aW9ucy5hY3Rpb24gfHwgZGVmYXVsdEFjdGlvbjtcbiAgICBlbmNUeXBlID0gb3B0aW9ucy5lbmNUeXBlIHx8IGRlZmF1bHRFbmNUeXBlO1xuXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICBmb3JtRGF0YSA9IHRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHRhcmdldCkge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh0YXJnZXQpKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHRhcmdldFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQge1xuICAgIHByb3RvY29sLFxuICAgIGhvc3RcbiAgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgbGV0IHVybCA9IG5ldyBVUkwoYWN0aW9uLCBwcm90b2NvbCArIFwiLy9cIiArIGhvc3QpO1xuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZW5jVHlwZSxcbiAgICBmb3JtRGF0YVxuICB9O1xufVxuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkNsaWNrXCIsIFwicmVsYXRpdmVcIiwgXCJyZWxvYWREb2N1bWVudFwiLCBcInJlcGxhY2VcIiwgXCJzdGF0ZVwiLCBcInRhcmdldFwiLCBcInRvXCIsIFwicHJldmVudFNjcm9sbFJlc2V0XCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImFyaWEtY3VycmVudFwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJjbGFzc05hbWVcIiwgXCJlbmRcIiwgXCJzdHlsZVwiLCBcInRvXCIsIFwiY2hpbGRyZW5cIl0sXG4gICAgICBfZXhjbHVkZWQzID0gW1wicmVsb2FkRG9jdW1lbnRcIiwgXCJyZXBsYWNlXCIsIFwibWV0aG9kXCIsIFwiYWN0aW9uXCIsIFwib25TdWJtaXRcIiwgXCJmZXRjaGVyS2V5XCIsIFwicm91dGVJZFwiLCBcInJlbGF0aXZlXCJdO1xuLy8jcmVnaW9uIFJvdXRlcnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHZhciBfd2luZG93O1xuXG4gIHJldHVybiBjcmVhdGVSb3V0ZXIoe1xuICAgIGJhc2VuYW1lOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmJhc2VuYW1lLFxuICAgIGhpc3Rvcnk6IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KHtcbiAgICAgIHdpbmRvdzogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy53aW5kb3dcbiAgICB9KSxcbiAgICBoeWRyYXRpb25EYXRhOiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5oeWRyYXRpb25EYXRhKSB8fCAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93Ll9fc3RhdGljUm91dGVySHlkcmF0aW9uRGF0YSksXG4gICAgcm91dGVzOiBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhhc2hSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHZhciBfd2luZG93MjtcblxuICByZXR1cm4gY3JlYXRlUm91dGVyKHtcbiAgICBiYXNlbmFtZTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iYXNlbmFtZSxcbiAgICBoaXN0b3J5OiBjcmVhdGVIYXNoSGlzdG9yeSh7XG4gICAgICB3aW5kb3c6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMud2luZG93XG4gICAgfSksXG4gICAgaHlkcmF0aW9uRGF0YTogKG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaHlkcmF0aW9uRGF0YSkgfHwgKChfd2luZG93MiA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cyLl9fc3RhdGljUm91dGVySHlkcmF0aW9uRGF0YSksXG4gICAgcm91dGVzOiBVTlNBRkVfZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn1cbi8qKlxuICogQSBgPFJvdXRlcj5gIGZvciB1c2UgaW4gd2ViIGJyb3dzZXJzLiBQcm92aWRlcyB0aGUgY2xlYW5lc3QgVVJMcy5cbiAqL1xuXG5mdW5jdGlvbiBCcm93c2VyUm91dGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICB3aW5kb3dcbiAgfSA9IF9yZWY7XG4gIGxldCBoaXN0b3J5UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgaWYgKGhpc3RvcnlSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgaGlzdG9yeVJlZi5jdXJyZW50ID0gY3JlYXRlQnJvd3Nlckhpc3Rvcnkoe1xuICAgICAgd2luZG93LFxuICAgICAgdjVDb21wYXQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0gaGlzdG9yeVJlZi5jdXJyZW50O1xuICBsZXQgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYWN0aW9uOiBoaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICB9KTtcbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IGhpc3RvcnkubGlzdGVuKHNldFN0YXRlKSwgW2hpc3RvcnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uLFxuICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5hY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBoaXN0b3J5XG4gIH0pO1xufVxuLyoqXG4gKiBBIGA8Um91dGVyPmAgZm9yIHVzZSBpbiB3ZWIgYnJvd3NlcnMuIFN0b3JlcyB0aGUgbG9jYXRpb24gaW4gdGhlIGhhc2hcbiAqIHBvcnRpb24gb2YgdGhlIFVSTCBzbyBpdCBpcyBub3Qgc2VudCB0byB0aGUgc2VydmVyLlxuICovXG5cbmZ1bmN0aW9uIEhhc2hSb3V0ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICB3aW5kb3dcbiAgfSA9IF9yZWYyO1xuICBsZXQgaGlzdG9yeVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGlmIChoaXN0b3J5UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IGNyZWF0ZUhhc2hIaXN0b3J5KHtcbiAgICAgIHdpbmRvdyxcbiAgICAgIHY1Q29tcGF0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IGhpc3RvcnlSZWYuY3VycmVudDtcbiAgbGV0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cbi8qKlxuICogQSBgPFJvdXRlcj5gIHRoYXQgYWNjZXB0cyBhIHByZS1pbnN0YW50aWF0ZWQgaGlzdG9yeSBvYmplY3QuIEl0J3MgaW1wb3J0YW50XG4gKiB0byBub3RlIHRoYXQgdXNpbmcgeW91ciBvd24gaGlzdG9yeSBvYmplY3QgaXMgaGlnaGx5IGRpc2NvdXJhZ2VkIGFuZCBtYXkgYWRkXG4gKiB0d28gdmVyc2lvbnMgb2YgdGhlIGhpc3RvcnkgbGlicmFyeSB0byB5b3VyIGJ1bmRsZXMgdW5sZXNzIHlvdSB1c2UgdGhlIHNhbWVcbiAqIHZlcnNpb24gb2YgdGhlIGhpc3RvcnkgbGlicmFyeSB0aGF0IFJlYWN0IFJvdXRlciB1c2VzIGludGVybmFsbHkuXG4gKi9cblxuZnVuY3Rpb24gSGlzdG9yeVJvdXRlcihfcmVmMykge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIGhpc3RvcnlcbiAgfSA9IF9yZWYzO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgSGlzdG9yeVJvdXRlci5kaXNwbGF5TmFtZSA9IFwidW5zdGFibGVfSGlzdG9yeVJvdXRlclwiO1xufVxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcmVuZGVyaW5nIGEgaGlzdG9yeS1hd2FyZSA8YT4uXG4gKi9cblxuY29uc3QgTGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpbmtXaXRoUmVmKF9yZWY0LCByZWYpIHtcbiAgbGV0IHtcbiAgICBvbkNsaWNrLFxuICAgIHJlbGF0aXZlLFxuICAgIHJlbG9hZERvY3VtZW50LFxuICAgIHJlcGxhY2UsXG4gICAgc3RhdGUsXG4gICAgdGFyZ2V0LFxuICAgIHRvLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldFxuICB9ID0gX3JlZjQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZCk7XG5cbiAgbGV0IGhyZWYgPSB1c2VIcmVmKHRvLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG4gIGxldCBpbnRlcm5hbE9uQ2xpY2sgPSB1c2VMaW5rQ2xpY2tIYW5kbGVyKHRvLCB7XG4gICAgcmVwbGFjZSxcbiAgICBzdGF0ZSxcbiAgICB0YXJnZXQsXG4gICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgIHJlbGF0aXZlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKG9uQ2xpY2spIG9uQ2xpY2soZXZlbnQpO1xuXG4gICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBpbnRlcm5hbE9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLyojX19QVVJFX18qL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9hbmNob3ItaGFzLWNvbnRlbnRcbiAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIG9uQ2xpY2s6IHJlbG9hZERvY3VtZW50ID8gb25DbGljayA6IGhhbmRsZUNsaWNrLFxuICAgICAgcmVmOiByZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pKVxuICApO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTGluay5kaXNwbGF5TmFtZSA9IFwiTGlua1wiO1xufVxuLyoqXG4gKiBBIDxMaW5rPiB3cmFwcGVyIHRoYXQga25vd3MgaWYgaXQncyBcImFjdGl2ZVwiIG9yIG5vdC5cbiAqL1xuXG5cbmNvbnN0IE5hdkxpbmsgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXZMaW5rV2l0aFJlZihfcmVmNSwgcmVmKSB7XG4gIGxldCB7XG4gICAgXCJhcmlhLWN1cnJlbnRcIjogYXJpYUN1cnJlbnRQcm9wID0gXCJwYWdlXCIsXG4gICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lUHJvcCA9IFwiXCIsXG4gICAgZW5kID0gZmFsc2UsXG4gICAgc3R5bGU6IHN0eWxlUHJvcCxcbiAgICB0byxcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjUsIF9leGNsdWRlZDIpO1xuXG4gIGxldCBwYXRoID0gdXNlUmVzb2x2ZWRQYXRoKHRvLCB7XG4gICAgcmVsYXRpdmU6IHJlc3QucmVsYXRpdmVcbiAgfSk7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCByb3V0ZXJTdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICBsZXQgdG9QYXRobmFtZSA9IHBhdGgucGF0aG5hbWU7XG4gIGxldCBsb2NhdGlvblBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gIGxldCBuZXh0TG9jYXRpb25QYXRobmFtZSA9IHJvdXRlclN0YXRlICYmIHJvdXRlclN0YXRlLm5hdmlnYXRpb24gJiYgcm91dGVyU3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiA/IHJvdXRlclN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24ucGF0aG5hbWUgOiBudWxsO1xuXG4gIGlmICghY2FzZVNlbnNpdGl2ZSkge1xuICAgIGxvY2F0aW9uUGF0aG5hbWUgPSBsb2NhdGlvblBhdGhuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgbmV4dExvY2F0aW9uUGF0aG5hbWUgPSBuZXh0TG9jYXRpb25QYXRobmFtZSA/IG5leHRMb2NhdGlvblBhdGhuYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICAgIHRvUGF0aG5hbWUgPSB0b1BhdGhuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBsZXQgaXNBY3RpdmUgPSBsb2NhdGlvblBhdGhuYW1lID09PSB0b1BhdGhuYW1lIHx8ICFlbmQgJiYgbG9jYXRpb25QYXRobmFtZS5zdGFydHNXaXRoKHRvUGF0aG5hbWUpICYmIGxvY2F0aW9uUGF0aG5hbWUuY2hhckF0KHRvUGF0aG5hbWUubGVuZ3RoKSA9PT0gXCIvXCI7XG4gIGxldCBpc1BlbmRpbmcgPSBuZXh0TG9jYXRpb25QYXRobmFtZSAhPSBudWxsICYmIChuZXh0TG9jYXRpb25QYXRobmFtZSA9PT0gdG9QYXRobmFtZSB8fCAhZW5kICYmIG5leHRMb2NhdGlvblBhdGhuYW1lLnN0YXJ0c1dpdGgodG9QYXRobmFtZSkgJiYgbmV4dExvY2F0aW9uUGF0aG5hbWUuY2hhckF0KHRvUGF0aG5hbWUubGVuZ3RoKSA9PT0gXCIvXCIpO1xuICBsZXQgYXJpYUN1cnJlbnQgPSBpc0FjdGl2ZSA/IGFyaWFDdXJyZW50UHJvcCA6IHVuZGVmaW5lZDtcbiAgbGV0IGNsYXNzTmFtZTtcblxuICBpZiAodHlwZW9mIGNsYXNzTmFtZVByb3AgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZVByb3Aoe1xuICAgICAgaXNBY3RpdmUsXG4gICAgICBpc1BlbmRpbmdcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY2xhc3NOYW1lIHByb3AgaXMgbm90IGEgZnVuY3Rpb24sIHdlIHVzZSBhIGRlZmF1bHQgYGFjdGl2ZWBcbiAgICAvLyBjbGFzcyBmb3IgPE5hdkxpbmsgLz5zIHRoYXQgYXJlIGFjdGl2ZS4gSW4gdjUgYGFjdGl2ZWAgd2FzIHRoZSBkZWZhdWx0XG4gICAgLy8gdmFsdWUgZm9yIGBhY3RpdmVDbGFzc05hbWVgLCBidXQgd2UgYXJlIHJlbW92aW5nIHRoYXQgQVBJIGFuZCBjYW4gc3RpbGxcbiAgICAvLyB1c2UgdGhlIG9sZCBkZWZhdWx0IGJlaGF2aW9yIGZvciBhIGNsZWFuZXIgdXBncmFkZSBwYXRoIGFuZCBrZWVwIHRoZVxuICAgIC8vIHNpbXBsZSBzdHlsaW5nIHJ1bGVzIHdvcmtpbmcgYXMgdGhleSBjdXJyZW50bHkgZG8uXG4gICAgY2xhc3NOYW1lID0gW2NsYXNzTmFtZVByb3AsIGlzQWN0aXZlID8gXCJhY3RpdmVcIiA6IG51bGwsIGlzUGVuZGluZyA/IFwicGVuZGluZ1wiIDogbnVsbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgbGV0IHN0eWxlID0gdHlwZW9mIHN0eWxlUHJvcCA9PT0gXCJmdW5jdGlvblwiID8gc3R5bGVQcm9wKHtcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1BlbmRpbmdcbiAgfSkgOiBzdHlsZVByb3A7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMaW5rLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50LFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogcmVmLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICB0bzogdG9cbiAgfSksIHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gY2hpbGRyZW4oe1xuICAgIGlzQWN0aXZlLFxuICAgIGlzUGVuZGluZ1xuICB9KSA6IGNoaWxkcmVuKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE5hdkxpbmsuZGlzcGxheU5hbWUgPSBcIk5hdkxpbmtcIjtcbn1cbi8qKlxuICogQSBgQHJlbWl4LXJ1bi9yb3V0ZXJgLWF3YXJlIGA8Zm9ybT5gLiBJdCBiZWhhdmVzIGxpa2UgYSBub3JtYWwgZm9ybSBleGNlcHRcbiAqIHRoYXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHNlcnZlciBpcyB3aXRoIGBmZXRjaGAgaW5zdGVhZCBvZiBuZXcgZG9jdW1lbnRcbiAqIHJlcXVlc3RzLCBhbGxvd2luZyBjb21wb25lbnRzIHRvIGFkZCBuaWNlciBVWCB0byB0aGUgcGFnZSBhcyB0aGUgZm9ybSBpc1xuICogc3VibWl0dGVkIGFuZCByZXR1cm5zIHdpdGggZGF0YS5cbiAqL1xuXG5cbmNvbnN0IEZvcm0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUltcGwsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJlZjogcmVmXG4gIH0pKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEZvcm0uZGlzcGxheU5hbWUgPSBcIkZvcm1cIjtcbn1cblxuY29uc3QgRm9ybUltcGwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigoX3JlZjYsIGZvcndhcmRlZFJlZikgPT4ge1xuICBsZXQge1xuICAgIHJlbG9hZERvY3VtZW50LFxuICAgIHJlcGxhY2UsXG4gICAgbWV0aG9kID0gZGVmYXVsdE1ldGhvZCxcbiAgICBhY3Rpb24sXG4gICAgb25TdWJtaXQsXG4gICAgZmV0Y2hlcktleSxcbiAgICByb3V0ZUlkLFxuICAgIHJlbGF0aXZlXG4gIH0gPSBfcmVmNixcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjYsIF9leGNsdWRlZDMpO1xuXG4gIGxldCBzdWJtaXQgPSB1c2VTdWJtaXRJbXBsKGZldGNoZXJLZXksIHJvdXRlSWQpO1xuICBsZXQgZm9ybU1ldGhvZCA9IG1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSBcImdldFwiID8gXCJnZXRcIiA6IFwicG9zdFwiO1xuICBsZXQgZm9ybUFjdGlvbiA9IHVzZUZvcm1BY3Rpb24oYWN0aW9uLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG5cbiAgbGV0IHN1Ym1pdEhhbmRsZXIgPSBldmVudCA9PiB7XG4gICAgb25TdWJtaXQgJiYgb25TdWJtaXQoZXZlbnQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgc3VibWl0dGVyID0gZXZlbnQubmF0aXZlRXZlbnQuc3VibWl0dGVyO1xuICAgIHN1Ym1pdChzdWJtaXR0ZXIgfHwgZXZlbnQuY3VycmVudFRhcmdldCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVwbGFjZSxcbiAgICAgIHJlbGF0aXZlXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgbWV0aG9kOiBmb3JtTWV0aG9kLFxuICAgIGFjdGlvbjogZm9ybUFjdGlvbixcbiAgICBvblN1Ym1pdDogcmVsb2FkRG9jdW1lbnQgPyBvblN1Ym1pdCA6IHN1Ym1pdEhhbmRsZXJcbiAgfSwgcHJvcHMpKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEZvcm0uZGlzcGxheU5hbWUgPSBcIkZvcm1cIjtcbn1cbi8qKlxuICogVGhpcyBjb21wb25lbnQgd2lsbCBlbXVsYXRlIHRoZSBicm93c2VyJ3Mgc2Nyb2xsIHJlc3RvcmF0aW9uIG9uIGxvY2F0aW9uXG4gKiBjaGFuZ2VzLlxuICovXG5cblxuZnVuY3Rpb24gU2Nyb2xsUmVzdG9yYXRpb24oX3JlZjcpIHtcbiAgbGV0IHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9ID0gX3JlZjc7XG4gIHVzZVNjcm9sbFJlc3RvcmF0aW9uKHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgU2Nyb2xsUmVzdG9yYXRpb24uZGlzcGxheU5hbWUgPSBcIlNjcm9sbFJlc3RvcmF0aW9uXCI7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBIb29rc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG52YXIgRGF0YVJvdXRlckhvb2s7XG5cbihmdW5jdGlvbiAoRGF0YVJvdXRlckhvb2spIHtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VTY3JvbGxSZXN0b3JhdGlvblwiXSA9IFwidXNlU2Nyb2xsUmVzdG9yYXRpb25cIjtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VTdWJtaXRJbXBsXCJdID0gXCJ1c2VTdWJtaXRJbXBsXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlRmV0Y2hlclwiXSA9IFwidXNlRmV0Y2hlclwiO1xufSkoRGF0YVJvdXRlckhvb2sgfHwgKERhdGFSb3V0ZXJIb29rID0ge30pKTtcblxudmFyIERhdGFSb3V0ZXJTdGF0ZUhvb2s7XG5cbihmdW5jdGlvbiAoRGF0YVJvdXRlclN0YXRlSG9vaykge1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlRmV0Y2hlcnNcIl0gPSBcInVzZUZldGNoZXJzXCI7XG4gIERhdGFSb3V0ZXJTdGF0ZUhvb2tbXCJVc2VTY3JvbGxSZXN0b3JhdGlvblwiXSA9IFwidXNlU2Nyb2xsUmVzdG9yYXRpb25cIjtcbn0pKERhdGFSb3V0ZXJTdGF0ZUhvb2sgfHwgKERhdGFSb3V0ZXJTdGF0ZUhvb2sgPSB7fSkpO1xuXG5mdW5jdGlvbiBnZXREYXRhUm91dGVyQ29uc29sZUVycm9yKGhvb2tOYW1lKSB7XG4gIHJldHVybiBob29rTmFtZSArIFwiIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBkYXRhIHJvdXRlci4gIFNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9lbi9tYWluL3JvdXRlcnMvcGlja2luZy1hLXJvdXRlci5cIjtcbn1cblxuZnVuY3Rpb24gdXNlRGF0YVJvdXRlckNvbnRleHQoaG9va05hbWUpIHtcbiAgbGV0IGN0eCA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0KTtcbiAgIWN0eCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgZ2V0RGF0YVJvdXRlckNvbnNvbGVFcnJvcihob29rTmFtZSkpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZnVuY3Rpb24gdXNlRGF0YVJvdXRlclN0YXRlKGhvb2tOYW1lKSB7XG4gIGxldCBzdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICAhc3RhdGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGdldERhdGFSb3V0ZXJDb25zb2xlRXJyb3IoaG9va05hbWUpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBzdGF0ZTtcbn1cbi8qKlxuICogSGFuZGxlcyB0aGUgY2xpY2sgYmVoYXZpb3IgZm9yIHJvdXRlciBgPExpbms+YCBjb21wb25lbnRzLiBUaGlzIGlzIHVzZWZ1bCBpZlxuICogeW91IG5lZWQgdG8gY3JlYXRlIGN1c3RvbSBgPExpbms+YCBjb21wb25lbnRzIHdpdGggdGhlIHNhbWUgY2xpY2sgYmVoYXZpb3Igd2VcbiAqIHVzZSBpbiBvdXIgZXhwb3J0ZWQgYDxMaW5rPmAuXG4gKi9cblxuXG5mdW5jdGlvbiB1c2VMaW5rQ2xpY2tIYW5kbGVyKHRvLCBfdGVtcCkge1xuICBsZXQge1xuICAgIHRhcmdldCxcbiAgICByZXBsYWNlOiByZXBsYWNlUHJvcCxcbiAgICBzdGF0ZSxcbiAgICBwcmV2ZW50U2Nyb2xsUmVzZXQsXG4gICAgcmVsYXRpdmVcbiAgfSA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wO1xuICBsZXQgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcGF0aCA9IHVzZVJlc29sdmVkUGF0aCh0bywge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuICByZXR1cm4gUmVhY3QudXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmIChzaG91bGRQcm9jZXNzTGlua0NsaWNrKGV2ZW50LCB0YXJnZXQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBJZiB0aGUgVVJMIGhhc24ndCBjaGFuZ2VkLCBhIHJlZ3VsYXIgPGE+IHdpbGwgZG8gYSByZXBsYWNlIGluc3RlYWQgb2ZcbiAgICAgIC8vIGEgcHVzaCwgc28gZG8gdGhlIHNhbWUgaGVyZSB1bmxlc3MgdGhlIHJlcGxhY2UgcHJvcCBpcyBleHBsaWNpdGx5IHNldFxuXG4gICAgICBsZXQgcmVwbGFjZSA9IHJlcGxhY2VQcm9wICE9PSB1bmRlZmluZWQgPyByZXBsYWNlUHJvcCA6IGNyZWF0ZVBhdGgobG9jYXRpb24pID09PSBjcmVhdGVQYXRoKHBhdGgpO1xuICAgICAgbmF2aWdhdGUodG8sIHtcbiAgICAgICAgcmVwbGFjZSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICAgICAgcmVsYXRpdmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2xvY2F0aW9uLCBuYXZpZ2F0ZSwgcGF0aCwgcmVwbGFjZVByb3AsIHN0YXRlLCB0YXJnZXQsIHRvLCBwcmV2ZW50U2Nyb2xsUmVzZXQsIHJlbGF0aXZlXSk7XG59XG4vKipcbiAqIEEgY29udmVuaWVudCB3cmFwcGVyIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHNlYXJjaCBwYXJhbWV0ZXJzIHZpYSB0aGVcbiAqIFVSTFNlYXJjaFBhcmFtcyBpbnRlcmZhY2UuXG4gKi9cblxuZnVuY3Rpb24gdXNlU2VhcmNoUGFyYW1zKGRlZmF1bHRJbml0KSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcodHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gXCJ1bmRlZmluZWRcIiwgXCJZb3UgY2Fubm90IHVzZSB0aGUgYHVzZVNlYXJjaFBhcmFtc2AgaG9vayBpbiBhIGJyb3dzZXIgdGhhdCBkb2VzIG5vdCBcIiArIFwic3VwcG9ydCB0aGUgVVJMU2VhcmNoUGFyYW1zIEFQSS4gSWYgeW91IG5lZWQgdG8gc3VwcG9ydCBJbnRlcm5ldCBcIiArIFwiRXhwbG9yZXIgMTEsIHdlIHJlY29tbWVuZCB5b3UgbG9hZCBhIHBvbHlmaWxsIHN1Y2ggYXMgXCIgKyBcImh0dHBzOi8vZ2l0aHViLmNvbS91bmdhcC91cmwtc2VhcmNoLXBhcmFtc1xcblxcblwiICsgXCJJZiB5b3UncmUgdW5zdXJlIGhvdyB0byBsb2FkIHBvbHlmaWxscywgd2UgcmVjb21tZW5kIHlvdSBjaGVjayBvdXQgXCIgKyBcImh0dHBzOi8vcG9seWZpbGwuaW8vdjMvIHdoaWNoIHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zIGFib3V0IGhvdyBcIiArIFwidG8gbG9hZCBwb2x5ZmlsbHMgb25seSBmb3IgdXNlcnMgdGhhdCBuZWVkIHRoZW0sIGluc3RlYWQgb2YgZm9yIGV2ZXJ5IFwiICsgXCJ1c2VyLlwiKSA6IHZvaWQgMDtcbiAgbGV0IGRlZmF1bHRTZWFyY2hQYXJhbXNSZWYgPSBSZWFjdC51c2VSZWYoY3JlYXRlU2VhcmNoUGFyYW1zKGRlZmF1bHRJbml0KSk7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBzZWFyY2hQYXJhbXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNlYXJjaFBhcmFtc0ZvckxvY2F0aW9uKGxvY2F0aW9uLnNlYXJjaCwgZGVmYXVsdFNlYXJjaFBhcmFtc1JlZi5jdXJyZW50KSwgW2xvY2F0aW9uLnNlYXJjaF0pO1xuICBsZXQgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBsZXQgc2V0U2VhcmNoUGFyYW1zID0gUmVhY3QudXNlQ2FsbGJhY2soKG5leHRJbml0LCBuYXZpZ2F0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBuZXdTZWFyY2hQYXJhbXMgPSBjcmVhdGVTZWFyY2hQYXJhbXModHlwZW9mIG5leHRJbml0ID09PSBcImZ1bmN0aW9uXCIgPyBuZXh0SW5pdChzZWFyY2hQYXJhbXMpIDogbmV4dEluaXQpO1xuICAgIG5hdmlnYXRlKFwiP1wiICsgbmV3U2VhcmNoUGFyYW1zLCBuYXZpZ2F0ZU9wdGlvbnMpO1xuICB9LCBbbmF2aWdhdGUsIHNlYXJjaFBhcmFtc10pO1xuICByZXR1cm4gW3NlYXJjaFBhcmFtcywgc2V0U2VhcmNoUGFyYW1zXTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBzdWJtaXQgYSBmb3JtIChvclxuICogc29tZSBhcmJpdHJhcnkgZGF0YSkgdG8gdGhlIHNlcnZlci5cbiAqL1xuXG5mdW5jdGlvbiB1c2VTdWJtaXQoKSB7XG4gIHJldHVybiB1c2VTdWJtaXRJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIHVzZVN1Ym1pdEltcGwoZmV0Y2hlcktleSwgcm91dGVJZCkge1xuICBsZXQge1xuICAgIHJvdXRlclxuICB9ID0gdXNlRGF0YVJvdXRlckNvbnRleHQoRGF0YVJvdXRlckhvb2suVXNlU3VibWl0SW1wbCk7XG4gIGxldCBkZWZhdWx0QWN0aW9uID0gdXNlRm9ybUFjdGlvbigpO1xuICByZXR1cm4gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIGNhbGxpbmcgc3VibWl0IGR1cmluZyB0aGUgc2VydmVyIHJlbmRlci4gXCIgKyBcIlRyeSBjYWxsaW5nIHN1Ym1pdCB3aXRoaW4gYSBgdXNlRWZmZWN0YCBvciBjYWxsYmFjayBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICBsZXQge1xuICAgICAgbWV0aG9kLFxuICAgICAgZW5jVHlwZSxcbiAgICAgIGZvcm1EYXRhLFxuICAgICAgdXJsXG4gICAgfSA9IGdldEZvcm1TdWJtaXNzaW9uSW5mbyh0YXJnZXQsIGRlZmF1bHRBY3Rpb24sIG9wdGlvbnMpO1xuICAgIGxldCBocmVmID0gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaDtcbiAgICBsZXQgb3B0cyA9IHtcbiAgICAgIHJlcGxhY2U6IG9wdGlvbnMucmVwbGFjZSxcbiAgICAgIGZvcm1EYXRhLFxuICAgICAgZm9ybU1ldGhvZDogbWV0aG9kLFxuICAgICAgZm9ybUVuY1R5cGU6IGVuY1R5cGVcbiAgICB9O1xuXG4gICAgaWYgKGZldGNoZXJLZXkpIHtcbiAgICAgICEocm91dGVJZCAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZUlkIGF2YWlsYWJsZSBmb3IgdXNlRmV0Y2hlcigpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAgIHJvdXRlci5mZXRjaChmZXRjaGVyS2V5LCByb3V0ZUlkLCBocmVmLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm91dGVyLm5hdmlnYXRlKGhyZWYsIG9wdHMpO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRBY3Rpb24sIHJvdXRlciwgZmV0Y2hlcktleSwgcm91dGVJZF0pO1xufVxuXG5mdW5jdGlvbiB1c2VGb3JtQWN0aW9uKGFjdGlvbiwgX3RlbXAyKSB7XG4gIGxldCB7XG4gICAgcmVsYXRpdmVcbiAgfSA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDI7XG4gIGxldCB7XG4gICAgYmFzZW5hbWVcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX05hdmlnYXRpb25Db250ZXh0KTtcbiAgbGV0IHJvdXRlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX1JvdXRlQ29udGV4dCk7XG4gICFyb3V0ZUNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRm9ybUFjdGlvbiBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IFttYXRjaF0gPSByb3V0ZUNvbnRleHQubWF0Y2hlcy5zbGljZSgtMSk7XG4gIGxldCByZXNvbHZlZEFjdGlvbiA9IGFjdGlvbiAhPSBudWxsID8gYWN0aW9uIDogXCIuXCI7IC8vIFNoYWxsb3cgY2xvbmUgcGF0aCBzbyB3ZSBjYW4gbW9kaWZ5IGl0IGJlbG93LCBvdGhlcndpc2Ugd2UgbW9kaWZ5IHRoZVxuICAvLyBvYmplY3QgcmVmZXJlbmNlZCBieSB1c2VNZW1vIGluc2lkZSB1c2VSZXNvbHZlZFBhdGhcblxuICBsZXQgcGF0aCA9IF9leHRlbmRzKHt9LCB1c2VSZXNvbHZlZFBhdGgocmVzb2x2ZWRBY3Rpb24sIHtcbiAgICByZWxhdGl2ZVxuICB9KSk7IC8vIFByZXZpb3VzbHkgd2Ugc2V0IHRoZSBkZWZhdWx0IGFjdGlvbiB0byBcIi5cIi4gVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXRcbiAgLy8gYHVzZVJlc29sdmVkUGF0aChcIi5cIilgIGV4Y2x1ZGVzIHNlYXJjaCBwYXJhbXMgYW5kIHRoZSBoYXNoIG9mIHRoZSByZXNvbHZlZFxuICAvLyBVUkwuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHdoZW4gXCIuXCIgaXMgc3BlY2lmaWNhbGx5IHByb3ZpZGVkIGFzXG4gIC8vIHRoZSBmb3JtIGFjdGlvbiwgYnV0IGluY29uc2lzdGVudCB3LyBicm93c2VycyB3aGVuIHRoZSBhY3Rpb24gaXMgb21pdHRlZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlbWl4LXJ1bi9yZW1peC9pc3N1ZXMvOTI3XG5cblxuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuXG4gIGlmIChhY3Rpb24gPT0gbnVsbCkge1xuICAgIC8vIFNhZmUgdG8gd3JpdGUgdG8gdGhlc2UgZGlyZWN0bHkgaGVyZSBzaW5jZSBpZiBhY3Rpb24gd2FzIHVuZGVmaW5lZCwgd2VcbiAgICAvLyB3b3VsZCBoYXZlIGNhbGxlZCB1c2VSZXNvbHZlZFBhdGgoXCIuXCIpIHdoaWNoIHdpbGwgbmV2ZXIgaW5jbHVkZSBhIHNlYXJjaFxuICAgIC8vIG9yIGhhc2hcbiAgICBwYXRoLnNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICBwYXRoLmhhc2ggPSBsb2NhdGlvbi5oYXNoOyAvLyBXaGVuIGdyYWJiaW5nIHNlYXJjaCBwYXJhbXMgZnJvbSB0aGUgVVJMLCByZW1vdmUgdGhlIGF1dG9tYXRpY2FsbHlcbiAgICAvLyBpbnNlcnRlZCA/aW5kZXggcGFyYW0gc28gd2UgbWF0Y2ggdGhlIHVzZVJlc29sdmVkUGF0aCBzZWFyY2ggYmVoYXZpb3JcbiAgICAvLyB3aGljaCB3b3VsZCBub3QgaW5jbHVkZSA/aW5kZXhcblxuICAgIGlmIChtYXRjaC5yb3V0ZS5pbmRleCkge1xuICAgICAgbGV0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aC5zZWFyY2gpO1xuICAgICAgcGFyYW1zLmRlbGV0ZShcImluZGV4XCIpO1xuICAgICAgcGF0aC5zZWFyY2ggPSBwYXJhbXMudG9TdHJpbmcoKSA/IFwiP1wiICsgcGFyYW1zLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGlmICgoIWFjdGlvbiB8fCBhY3Rpb24gPT09IFwiLlwiKSAmJiBtYXRjaC5yb3V0ZS5pbmRleCkge1xuICAgIHBhdGguc2VhcmNoID0gcGF0aC5zZWFyY2ggPyBwYXRoLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgXCI/aW5kZXgmXCIpIDogXCI/aW5kZXhcIjtcbiAgfSAvLyBJZiB3ZSdyZSBvcGVyYXRpbmcgd2l0aGluIGEgYmFzZW5hbWUsIHByZXBlbmQgaXQgdG8gdGhlIHBhdGhuYW1lIHByaW9yXG4gIC8vIHRvIGNyZWF0aW5nIHRoZSBmb3JtIGFjdGlvbi4gIElmIHRoaXMgaXMgYSByb290IG5hdmlnYXRpb24sIHRoZW4ganVzdCB1c2VcbiAgLy8gdGhlIHJhdyBiYXNlbmFtZSB3aGljaCBhbGxvd3MgdGhlIGJhc2VuYW1lIHRvIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgdGhlXG4gIC8vIHByZXNlbmNlIG9mIGEgdHJhaWxpbmcgc2xhc2ggb24gcm9vdCBhY3Rpb25zXG5cblxuICBpZiAoYmFzZW5hbWUgIT09IFwiL1wiKSB7XG4gICAgcGF0aC5wYXRobmFtZSA9IHBhdGgucGF0aG5hbWUgPT09IFwiL1wiID8gYmFzZW5hbWUgOiBqb2luUGF0aHMoW2Jhc2VuYW1lLCBwYXRoLnBhdGhuYW1lXSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUGF0aChwYXRoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmV0Y2hlckZvcm0oZmV0Y2hlcktleSwgcm91dGVJZCkge1xuICBsZXQgRmV0Y2hlckZvcm0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtSW1wbCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIGZldGNoZXJLZXk6IGZldGNoZXJLZXksXG4gICAgICByb3V0ZUlkOiByb3V0ZUlkXG4gICAgfSkpO1xuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgRmV0Y2hlckZvcm0uZGlzcGxheU5hbWUgPSBcImZldGNoZXIuRm9ybVwiO1xuICB9XG5cbiAgcmV0dXJuIEZldGNoZXJGb3JtO1xufVxuXG5sZXQgZmV0Y2hlcklkID0gMDtcbi8qKlxuICogSW50ZXJhY3RzIHdpdGggcm91dGUgbG9hZGVycyBhbmQgYWN0aW9ucyB3aXRob3V0IGNhdXNpbmcgYSBuYXZpZ2F0aW9uLiBHcmVhdFxuICogZm9yIGFueSBpbnRlcmFjdGlvbiB0aGF0IHN0YXlzIG9uIHRoZSBzYW1lIHBhZ2UuXG4gKi9cblxuZnVuY3Rpb24gdXNlRmV0Y2hlcigpIHtcbiAgdmFyIF9yb3V0ZSRtYXRjaGVzO1xuXG4gIGxldCB7XG4gICAgcm91dGVyXG4gIH0gPSB1c2VEYXRhUm91dGVyQ29udGV4dChEYXRhUm91dGVySG9vay5Vc2VGZXRjaGVyKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChVTlNBRkVfUm91dGVDb250ZXh0KTtcbiAgIXJvdXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUZldGNoZXIgbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCByb3V0ZUlkID0gKF9yb3V0ZSRtYXRjaGVzID0gcm91dGUubWF0Y2hlc1tyb3V0ZS5tYXRjaGVzLmxlbmd0aCAtIDFdKSA9PSBudWxsID8gdm9pZCAwIDogX3JvdXRlJG1hdGNoZXMucm91dGUuaWQ7XG4gICEocm91dGVJZCAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VGZXRjaGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gcm91dGVzIHRoYXQgY29udGFpbiBhIHVuaXF1ZSBcXFwiaWRcXFwiXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IFtmZXRjaGVyS2V5XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IFN0cmluZygrK2ZldGNoZXJJZCkpO1xuICBsZXQgW0Zvcm1dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgICFyb3V0ZUlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIk5vIHJvdXRlSWQgYXZhaWxhYmxlIGZvciBmZXRjaGVyLkZvcm0oKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgcmV0dXJuIGNyZWF0ZUZldGNoZXJGb3JtKGZldGNoZXJLZXksIHJvdXRlSWQpO1xuICB9KTtcbiAgbGV0IFtsb2FkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IGhyZWYgPT4ge1xuICAgICFyb3V0ZXIgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiTm8gcm91dGVyIGF2YWlsYWJsZSBmb3IgZmV0Y2hlci5sb2FkKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICFyb3V0ZUlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIk5vIHJvdXRlSWQgYXZhaWxhYmxlIGZvciBmZXRjaGVyLmxvYWQoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgcm91dGVyLmZldGNoKGZldGNoZXJLZXksIHJvdXRlSWQsIGhyZWYpO1xuICB9KTtcbiAgbGV0IHN1Ym1pdCA9IHVzZVN1Ym1pdEltcGwoZmV0Y2hlcktleSwgcm91dGVJZCk7XG4gIGxldCBmZXRjaGVyID0gcm91dGVyLmdldEZldGNoZXIoZmV0Y2hlcktleSk7XG4gIGxldCBmZXRjaGVyV2l0aENvbXBvbmVudHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IF9leHRlbmRzKHtcbiAgICBGb3JtLFxuICAgIHN1Ym1pdCxcbiAgICBsb2FkXG4gIH0sIGZldGNoZXIpLCBbZmV0Y2hlciwgRm9ybSwgc3VibWl0LCBsb2FkXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gSXMgdGhpcyBidXN0ZWQgd2hlbiB0aGUgUmVhY3QgdGVhbSBnZXRzIHJlYWwgd2VpcmQgYW5kIGNhbGxzIGVmZmVjdHNcbiAgICAvLyB0d2ljZSBvbiBtb3VudD8gIFdlIHJlYWxseSBqdXN0IG5lZWQgdG8gZ2FyYmFnZSBjb2xsZWN0IGhlcmUgd2hlbiB0aGlzXG4gICAgLy8gZmV0Y2hlciBpcyBubyBsb25nZXIgYXJvdW5kLlxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoIXJvdXRlcikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJObyBmZXRjaGVyIGF2YWlsYWJsZSB0byBjbGVhbiB1cCBmcm9tIHVzZUZldGNoZXIoKVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByb3V0ZXIuZGVsZXRlRmV0Y2hlcihmZXRjaGVyS2V5KTtcbiAgICB9O1xuICB9LCBbcm91dGVyLCBmZXRjaGVyS2V5XSk7XG4gIHJldHVybiBmZXRjaGVyV2l0aENvbXBvbmVudHM7XG59XG4vKipcbiAqIFByb3ZpZGVzIGFsbCBmZXRjaGVycyBjdXJyZW50bHkgb24gdGhlIHBhZ2UuIFVzZWZ1bCBmb3IgbGF5b3V0cyBhbmQgcGFyZW50XG4gKiByb3V0ZXMgdGhhdCBuZWVkIHRvIHByb3ZpZGUgcGVuZGluZy9vcHRpbWlzdGljIFVJIHJlZ2FyZGluZyB0aGUgZmV0Y2guXG4gKi9cblxuZnVuY3Rpb24gdXNlRmV0Y2hlcnMoKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZUZldGNoZXJzKTtcbiAgcmV0dXJuIFsuLi5zdGF0ZS5mZXRjaGVycy52YWx1ZXMoKV07XG59XG5jb25zdCBTQ1JPTExfUkVTVE9SQVRJT05fU1RPUkFHRV9LRVkgPSBcInJlYWN0LXJvdXRlci1zY3JvbGwtcG9zaXRpb25zXCI7XG5sZXQgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSB7fTtcbi8qKlxuICogV2hlbiByZW5kZXJlZCBpbnNpZGUgYSBSb3V0ZXJQcm92aWRlciwgd2lsbCByZXN0b3JlIHNjcm9sbCBwb3NpdGlvbnMgb24gbmF2aWdhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VTY3JvbGxSZXN0b3JhdGlvbihfdGVtcDMpIHtcbiAgbGV0IHtcbiAgICBnZXRLZXksXG4gICAgc3RvcmFnZUtleVxuICB9ID0gX3RlbXAzID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMztcbiAgbGV0IHtcbiAgICByb3V0ZXJcbiAgfSA9IHVzZURhdGFSb3V0ZXJDb250ZXh0KERhdGFSb3V0ZXJIb29rLlVzZVNjcm9sbFJlc3RvcmF0aW9uKTtcbiAgbGV0IHtcbiAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb24sXG4gICAgcHJldmVudFNjcm9sbFJlc2V0XG4gIH0gPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VTY3JvbGxSZXN0b3JhdGlvbik7XG4gIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCBtYXRjaGVzID0gdXNlTWF0Y2hlcygpO1xuICBsZXQgbmF2aWdhdGlvbiA9IHVzZU5hdmlnYXRpb24oKTsgLy8gVHJpZ2dlciBtYW51YWwgc2Nyb2xsIHJlc3RvcmF0aW9uIHdoaWxlIHdlJ3JlIGFjdGl2ZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwiYXV0b1wiO1xuICAgIH07XG4gIH0sIFtdKTsgLy8gU2F2ZSBwb3NpdGlvbnMgb24gdW5sb2FkXG5cbiAgdXNlQmVmb3JlVW5sb2FkKFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAobmF2aWdhdGlvbi5zdGF0ZSA9PT0gXCJpZGxlXCIpIHtcbiAgICAgIGxldCBrZXkgPSAoZ2V0S2V5ID8gZ2V0S2V5KGxvY2F0aW9uLCBtYXRjaGVzKSA6IG51bGwpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zW2tleV0gPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXkgfHwgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShzYXZlZFNjcm9sbFBvc2l0aW9ucykpO1xuICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gXCJhdXRvXCI7XG4gIH0sIFtzdG9yYWdlS2V5LCBnZXRLZXksIG5hdmlnYXRpb24uc3RhdGUsIGxvY2F0aW9uLCBtYXRjaGVzXSkpOyAvLyBSZWFkIGluIGFueSBzYXZlZCBzY3JvbGwgbG9jYXRpb25zXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNlc3Npb25Qb3NpdGlvbnMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkgfHwgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZKTtcblxuICAgICAgaWYgKHNlc3Npb25Qb3NpdGlvbnMpIHtcbiAgICAgICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSBKU09OLnBhcnNlKHNlc3Npb25Qb3NpdGlvbnMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHsvLyBuby1vcCwgdXNlIGRlZmF1bHQgZW1wdHkgb2JqZWN0XG4gICAgfVxuICB9LCBbc3RvcmFnZUtleV0pOyAvLyBFbmFibGUgc2Nyb2xsIHJlc3RvcmF0aW9uIGluIHRoZSByb3V0ZXJcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24gPSByb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHJvdXRlci5lbmFibGVTY3JvbGxSZXN0b3JhdGlvbihzYXZlZFNjcm9sbFBvc2l0aW9ucywgKCkgPT4gd2luZG93LnNjcm9sbFksIGdldEtleSk7XG4gICAgcmV0dXJuICgpID0+IGRpc2FibGVTY3JvbGxSZXN0b3JhdGlvbiAmJiBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24oKTtcbiAgfSwgW3JvdXRlciwgZ2V0S2V5XSk7IC8vIFJlc3RvcmUgc2Nyb2xsaW5nIHdoZW4gc3RhdGUucmVzdG9yZVNjcm9sbFBvc2l0aW9uIGNoYW5nZXNcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEV4cGxpY2l0IGZhbHNlIG1lYW5zIGRvbid0IGRvIGFueXRoaW5nICh1c2VkIGZvciBzdWJtaXNzaW9ucylcbiAgICBpZiAocmVzdG9yZVNjcm9sbFBvc2l0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gYmVlbiBoZXJlIGJlZm9yZSwgc2Nyb2xsIHRvIGl0XG5cblxuICAgIGlmICh0eXBlb2YgcmVzdG9yZVNjcm9sbFBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHRyeSB0byBzY3JvbGwgdG8gdGhlIGhhc2hcblxuXG4gICAgaWYgKGxvY2F0aW9uLmhhc2gpIHtcbiAgICAgIGxldCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8gT3B0IG91dCBvZiBzY3JvbGwgcmVzZXQgaWYgdGhpcyBsaW5rIHJlcXVlc3RlZCBpdFxuXG5cbiAgICBpZiAocHJldmVudFNjcm9sbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBvdGhlcndpc2UgZ28gdG8gdGhlIHRvcCBvbiBuZXcgbG9jYXRpb25zXG5cblxuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfSwgW2xvY2F0aW9uLCByZXN0b3JlU2Nyb2xsUG9zaXRpb24sIHByZXZlbnRTY3JvbGxSZXNldF0pO1xufVxuXG5mdW5jdGlvbiB1c2VCZWZvcmVVbmxvYWQoY2FsbGJhY2spIHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGNhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbY2FsbGJhY2tdKTtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIFV0aWxzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmZ1bmN0aW9uIHdhcm5pbmcoY29uZCwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIikgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IFJvdXRlciFcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGVycm9yIGlzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHlvdSBjYW4gbW9yZSBlYXNpbHlcbiAgICAgIC8vIGZpbmQgdGhlIHNvdXJjZSBmb3IgYSB3YXJuaW5nIHRoYXQgYXBwZWFycyBpbiB0aGUgY29uc29sZSBieVxuICAgICAgLy8gZW5hYmxpbmcgXCJwYXVzZSBvbiBleGNlcHRpb25zXCIgaW4geW91ciBKYXZhU2NyaXB0IGRlYnVnZ2VyLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59IC8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBCcm93c2VyUm91dGVyLCBGb3JtLCBIYXNoUm91dGVyLCBMaW5rLCBOYXZMaW5rLCBTY3JvbGxSZXN0b3JhdGlvbiwgY3JlYXRlQnJvd3NlclJvdXRlciwgY3JlYXRlSGFzaFJvdXRlciwgY3JlYXRlU2VhcmNoUGFyYW1zLCBIaXN0b3J5Um91dGVyIGFzIHVuc3RhYmxlX0hpc3RvcnlSb3V0ZXIsIHVzZUZldGNoZXIsIHVzZUZldGNoZXJzLCB1c2VGb3JtQWN0aW9uLCB1c2VMaW5rQ2xpY2tIYW5kbGVyLCB1c2VTZWFyY2hQYXJhbXMsIHVzZVN1Ym1pdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCIvKipcbiAqIFJlYWN0IFJvdXRlciB2Ni40LjNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuaW1wb3J0IHsgaW52YXJpYW50LCBqb2luUGF0aHMsIG1hdGNoUGF0aCwgVU5TQUZFX2dldFBhdGhDb250cmlidXRpbmdNYXRjaGVzLCB3YXJuaW5nLCByZXNvbHZlVG8sIHBhcnNlUGF0aCwgbWF0Y2hSb3V0ZXMsIEFjdGlvbiwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGNyZWF0ZU1lbW9yeUhpc3RvcnksIHN0cmlwQmFzZW5hbWUsIEFib3J0ZWREZWZlcnJlZEVycm9yLCBjcmVhdGVSb3V0ZXIgfSBmcm9tICdAcmVtaXgtcnVuL3JvdXRlcic7XG5leHBvcnQgeyBBYm9ydGVkRGVmZXJyZWRFcnJvciwgQWN0aW9uIGFzIE5hdmlnYXRpb25UeXBlLCBjcmVhdGVQYXRoLCBkZWZlciwgZ2VuZXJhdGVQYXRoLCBpc1JvdXRlRXJyb3JSZXNwb25zZSwganNvbiwgbWF0Y2hQYXRoLCBtYXRjaFJvdXRlcywgcGFyc2VQYXRoLCByZWRpcmVjdCwgcmVzb2x2ZVBhdGggfSBmcm9tICdAcmVtaXgtcnVuL3JvdXRlcic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuXG5mdW5jdGlvbiBpc1BvbHlmaWxsKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG5jb25zdCBpcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09IFwiZnVuY3Rpb25cIiA/IE9iamVjdC5pcyA6IGlzUG9seWZpbGw7IC8vIEludGVudGlvbmFsbHkgbm90IHVzaW5nIG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgdXNlcyBkeW5hbWljXG4vLyBkaXNwYXRjaCBmb3IgQ29tbW9uSlMgaW50ZXJvcCBuYW1lZCBpbXBvcnRzLlxuXG5jb25zdCB7XG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlRGVidWdWYWx1ZVxufSA9IFJlYWN0O1xubGV0IGRpZFdhcm5PbGQxOEFscGhhID0gZmFsc2U7XG5sZXQgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSBmYWxzZTsgLy8gRGlzY2xhaW1lcjogVGhpcyBzaGltIGJyZWFrcyBtYW55IG9mIHRoZSBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3Ncbi8vIGJlY2F1c2Ugb2YgYSB2ZXJ5IHBhcnRpY3VsYXIgc2V0IG9mIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGFzc3VtcHRpb25zXG4vLyAtLSBjaGFuZ2UgYW55IG9uZSBvZiB0aGVtIGFuZCBpdCB3aWxsIGJyZWFrLiBUaGUgbW9zdCBpbXBvcnRhbnQgYXNzdW1wdGlvblxuLy8gaXMgdGhhdCB1cGRhdGVzIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGJlY2F1c2UgY29uY3VycmVudCByZW5kZXJpbmcgaXNcbi8vIG9ubHkgYXZhaWxhYmxlIGluIHZlcnNpb25zIG9mIFJlYWN0IHRoYXQgYWxzbyBoYXZlIGEgYnVpbHQtaW5cbi8vIHVzZVN5bmNFeHRlcm5hbFN0b3JlIEFQSS4gQW5kIHdlIG9ubHkgdXNlIHRoaXMgc2hpbSB3aGVuIHRoZSBidWlsdC1pbiBBUElcbi8vIGRvZXMgbm90IGV4aXN0LlxuLy9cbi8vIERvIG5vdCBhc3N1bWUgdGhhdCB0aGUgY2xldmVyIGhhY2tzIHVzZWQgYnkgdGhpcyBob29rIGFsc28gd29yayBpbiBnZW5lcmFsLlxuLy8gVGhlIHBvaW50IG9mIHRoaXMgc2hpbSBpcyB0byByZXBsYWNlIHRoZSBuZWVkIGZvciBoYWNrcyBieSBvdGhlciBsaWJyYXJpZXMuXG5cbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDIoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgLy8gTm90ZTogVGhlIHNoaW0gZG9lcyBub3QgdXNlIGdldFNlcnZlclNuYXBzaG90LCBiZWNhdXNlIHByZS0xOCB2ZXJzaW9ucyBvZlxuLy8gUmVhY3QgZG8gbm90IGV4cG9zZSBhIHdheSB0byBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcuIFNvIHVzZXJzIG9mIHRoZSBzaGltXG4vLyB3aWxsIG5lZWQgdG8gdHJhY2sgdGhhdCB0aGVtc2VsdmVzIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWVcbi8vIGZyb20gYGdldFNuYXBzaG90YC5cbmdldFNlcnZlclNuYXBzaG90KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWRpZFdhcm5PbGQxOEFscGhhKSB7XG4gICAgICBpZiAoXCJzdGFydFRyYW5zaXRpb25cIiBpbiBSZWFjdCkge1xuICAgICAgICBkaWRXYXJuT2xkMThBbHBoYSA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UgYXJlIHVzaW5nIGFuIG91dGRhdGVkLCBwcmUtcmVsZWFzZSBhbHBoYSBvZiBSZWFjdCAxOCB0aGF0IFwiICsgXCJkb2VzIG5vdCBzdXBwb3J0IHVzZVN5bmNFeHRlcm5hbFN0b3JlLiBUaGUgXCIgKyBcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlIHNoaW0gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuIFVwZ3JhZGUgXCIgKyBcInRvIGEgbmV3ZXIgcHJlLXJlbGVhc2UuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBSZWFkIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20gdGhlIHN0b3JlIG9uIGV2ZXJ5IHJlbmRlci4gQWdhaW4sIHRoaXNcbiAgLy8gYnJlYWtzIHRoZSBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3MgaGVyZSBiZWNhdXNlIG9mIHNwZWNpZmljXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG1vc3QgaW1wb3J0YW50bHkgdGhhdCB1cGRhdGVzIGFyZVxuICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cblxuICBjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgaWYgKCFpcyh2YWx1ZSwgY2FjaGVkVmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiKTtcbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBCZWNhdXNlIHVwZGF0ZXMgYXJlIHN5bmNocm9ub3VzLCB3ZSBkb24ndCBxdWV1ZSB0aGVtLiBJbnN0ZWFkIHdlIGZvcmNlIGFcbiAgLy8gcmUtcmVuZGVyIHdoZW5ldmVyIHRoZSBzdWJzY3JpYmVkIHN0YXRlIGNoYW5nZXMgYnkgdXBkYXRpbmcgYW4gc29tZVxuICAvLyBhcmJpdHJhcnkgdXNlU3RhdGUgaG9vay4gVGhlbiwgZHVyaW5nIHJlbmRlciwgd2UgY2FsbCBnZXRTbmFwc2hvdCB0byByZWFkXG4gIC8vIHRoZSBjdXJyZW50IHZhbHVlLlxuICAvL1xuICAvLyBCZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGUgc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHVzZVN0YXRlIGhvb2ssIHdlXG4gIC8vIGNhbiBzYXZlIGEgYml0IG9mIG1lbW9yeSBieSBzdG9yaW5nIG90aGVyIHN0dWZmIGluIHRoYXQgc2xvdC5cbiAgLy9cbiAgLy8gVG8gaW1wbGVtZW50IHRoZSBlYXJseSBiYWlsb3V0LCB3ZSBuZWVkIHRvIHRyYWNrIHNvbWUgdGhpbmdzIG9uIGEgbXV0YWJsZVxuICAvLyBvYmplY3QuIFVzdWFsbHksIHdlIHdvdWxkIHB1dCB0aGF0IGluIGEgdXNlUmVmIGhvb2ssIGJ1dCB3ZSBjYW4gc3Rhc2ggaXQgaW5cbiAgLy8gb3VyIHVzZVN0YXRlIGhvb2sgaW5zdGVhZC5cbiAgLy9cbiAgLy8gVG8gZm9yY2UgYSByZS1yZW5kZXIsIHdlIGNhbGwgZm9yY2VVcGRhdGUoe2luc3R9KS4gVGhhdCB3b3JrcyBiZWNhdXNlIHRoZVxuICAvLyBuZXcgb2JqZWN0IGFsd2F5cyBmYWlscyBhbiBlcXVhbGl0eSBjaGVjay5cblxuXG4gIGNvbnN0IFt7XG4gICAgaW5zdFxuICB9LCBmb3JjZVVwZGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgaW5zdDoge1xuICAgICAgdmFsdWUsXG4gICAgICBnZXRTbmFwc2hvdFxuICAgIH1cbiAgfSk7IC8vIFRyYWNrIHRoZSBsYXRlc3QgZ2V0U25hcHNob3QgZnVuY3Rpb24gd2l0aCBhIHJlZi4gVGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkXG4gIC8vIGluIHRoZSBsYXlvdXQgcGhhc2Ugc28gd2UgY2FuIGFjY2VzcyBpdCBkdXJpbmcgdGhlIHRlYXJpbmcgY2hlY2sgdGhhdFxuICAvLyBoYXBwZW5zIG9uIHN1YnNjcmliZS5cblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGluc3QudmFsdWUgPSB2YWx1ZTtcbiAgICBpbnN0LmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIFdoZW5ldmVyIGdldFNuYXBzaG90IG9yIHN1YnNjcmliZSBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGNoZWNrIGluIHRoZVxuICAgIC8vIGNvbW1pdCBwaGFzZSBpZiB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgbXV0YXRpb24uIEluIGNvbmN1cnJlbnQgbW9kZVxuICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBhbGwgdGhlIHRpbWUsIGJ1dCBldmVuIGluIHN5bmNocm9ub3VzIG1vZGUsIGFuIGVhcmxpZXJcbiAgICAvLyBlZmZlY3QgbWF5IGhhdmUgbXV0YXRlZCB0aGUgc3RvcmUuXG5cbiAgICBpZiAoY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSkge1xuICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICBmb3JjZVVwZGF0ZSh7XG4gICAgICAgIGluc3RcbiAgICAgIH0pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIH0sIFtzdWJzY3JpYmUsIHZhbHVlLCBnZXRTbmFwc2hvdF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIHJpZ2h0IGJlZm9yZSBzdWJzY3JpYmluZy4gU3Vic2VxdWVudCBjaGFuZ2VzIHdpbGwgYmVcbiAgICAvLyBkZXRlY3RlZCBpbiB0aGUgc3Vic2NyaXB0aW9uIGhhbmRsZXIuXG4gICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICBpbnN0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVTdG9yZUNoYW5nZSA9ICgpID0+IHtcbiAgICAgIC8vIFRPRE86IEJlY2F1c2UgdGhlcmUgaXMgbm8gY3Jvc3MtcmVuZGVyZXIgQVBJIGZvciBiYXRjaGluZyB1cGRhdGVzLCBpdCdzXG4gICAgICAvLyB1cCB0byB0aGUgY29uc3VtZXIgb2YgdGhpcyBsaWJyYXJ5IHRvIHdyYXAgdGhlaXIgc3Vic2NyaXB0aW9uIGV2ZW50XG4gICAgICAvLyB3aXRoIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLiBTaG91bGQgd2UgdHJ5IHRvIGRldGVjdCB3aGVuIHRoaXMgaXNuJ3RcbiAgICAgIC8vIHRoZSBjYXNlIGFuZCBwcmludCBhIHdhcm5pbmcgaW4gZGV2ZWxvcG1lbnQ/XG4gICAgICAvLyBUaGUgc3RvcmUgY2hhbmdlZC4gQ2hlY2sgaWYgdGhlIHNuYXBzaG90IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZVxuICAgICAgLy8gcmVhZCBmcm9tIHRoZSBzdG9yZS5cbiAgICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgICBmb3JjZVVwZGF0ZSh7XG4gICAgICAgICAgaW5zdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9OyAvLyBTdWJzY3JpYmUgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gYSBjbGVhbi11cCBmdW5jdGlvbi5cblxuXG4gICAgcmV0dXJuIHN1YnNjcmliZShoYW5kbGVTdG9yZUNoYW5nZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3N1YnNjcmliZV0pO1xuICB1c2VEZWJ1Z1ZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgY29uc3QgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICBjb25zdCBwcmV2VmFsdWUgPSBpbnN0LnZhbHVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIWlzKHByZXZWYWx1ZSwgbmV4dFZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBmbG93XG4gKi9cbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDEoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgLy8gTm90ZTogVGhlIHNoaW0gZG9lcyBub3QgdXNlIGdldFNlcnZlclNuYXBzaG90LCBiZWNhdXNlIHByZS0xOCB2ZXJzaW9ucyBvZlxuICAvLyBSZWFjdCBkbyBub3QgZXhwb3NlIGEgd2F5IHRvIGNoZWNrIGlmIHdlJ3JlIGh5ZHJhdGluZy4gU28gdXNlcnMgb2YgdGhlIHNoaW1cbiAgLy8gd2lsbCBuZWVkIHRvIHRyYWNrIHRoYXQgdGhlbXNlbHZlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlXG4gIC8vIGZyb20gYGdldFNuYXBzaG90YC5cbiAgcmV0dXJuIGdldFNuYXBzaG90KCk7XG59XG5cbi8qKlxuICogSW5saW5lZCBpbnRvIHRoZSByZWFjdC1yb3V0ZXIgcmVwbyBzaW5jZSB1c2Utc3luYy1leHRlcm5hbC1zdG9yZSBkb2VzIG5vdFxuICogcHJvdmlkZSBhIFVNRC1jb21wYXRpYmxlIHBhY2thZ2UsIHNvIHdlIG5lZWQgdGhpcyB0byBiZSBhYmxlIHRvIGRpc3RyaWJ1dGVcbiAqIFVNRCByZWFjdC1yb3V0ZXIgYnVuZGxlc1xuICovXG5jb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiKTtcbmNvbnN0IGlzU2VydmVyRW52aXJvbm1lbnQgPSAhY2FuVXNlRE9NO1xuY29uc3Qgc2hpbSA9IGlzU2VydmVyRW52aXJvbm1lbnQgPyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxIDogdXNlU3luY0V4dGVybmFsU3RvcmUkMjtcbmNvbnN0IHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiIGluIFJlYWN0ID8gKG1vZHVsZSA9PiBtb2R1bGUudXNlU3luY0V4dGVybmFsU3RvcmUpKFJlYWN0KSA6IHNoaW07XG5cbi8vIENvbnRleHRzIGZvciBkYXRhIHJvdXRlcnNcbmNvbnN0IERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgRGF0YVN0YXRpY1JvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0XCI7XG59XG5cbmNvbnN0IERhdGFSb3V0ZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgRGF0YVJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFSb3V0ZXJcIjtcbn1cblxuY29uc3QgRGF0YVJvdXRlclN0YXRlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkRhdGFSb3V0ZXJTdGF0ZVwiO1xufVxuXG5jb25zdCBBd2FpdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBBd2FpdENvbnRleHQuZGlzcGxheU5hbWUgPSBcIkF3YWl0XCI7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25Db250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTmF2aWdhdGlvbkNvbnRleHQuZGlzcGxheU5hbWUgPSBcIk5hdmlnYXRpb25cIjtcbn1cblxuY29uc3QgTG9jYXRpb25Db250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgTG9jYXRpb25Db250ZXh0LmRpc3BsYXlOYW1lID0gXCJMb2NhdGlvblwiO1xufVxuXG5jb25zdCBSb3V0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIG91dGxldDogbnVsbCxcbiAgbWF0Y2hlczogW11cbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFJvdXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiUm91dGVcIjtcbn1cblxuY29uc3QgUm91dGVFcnJvckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBSb3V0ZUVycm9yQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiUm91dGVFcnJvclwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZ1bGwgaHJlZiBmb3IgdGhlIGdpdmVuIFwidG9cIiB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGJ1aWxkaW5nXG4gKiBjdXN0b20gbGlua3MgdGhhdCBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFuZCBwcmVzZXJ2ZSByaWdodC1jbGljayBiZWhhdmlvci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWhyZWZcbiAqL1xuXG5mdW5jdGlvbiB1c2VIcmVmKHRvLCBfdGVtcCkge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZUhyZWYoKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgbmF2aWdhdG9yXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KE5hdmlnYXRpb25Db250ZXh0KTtcbiAgbGV0IHtcbiAgICBoYXNoLFxuICAgIHBhdGhuYW1lLFxuICAgIHNlYXJjaFxuICB9ID0gdXNlUmVzb2x2ZWRQYXRoKHRvLCB7XG4gICAgcmVsYXRpdmVcbiAgfSk7XG4gIGxldCBqb2luZWRQYXRobmFtZSA9IHBhdGhuYW1lOyAvLyBJZiB3ZSdyZSBvcGVyYXRpbmcgd2l0aGluIGEgYmFzZW5hbWUsIHByZXBlbmQgaXQgdG8gdGhlIHBhdGhuYW1lIHByaW9yXG4gIC8vIHRvIGNyZWF0aW5nIHRoZSBocmVmLiAgSWYgdGhpcyBpcyBhIHJvb3QgbmF2aWdhdGlvbiwgdGhlbiBqdXN0IHVzZSB0aGUgcmF3XG4gIC8vIGJhc2VuYW1lIHdoaWNoIGFsbG93cyB0aGUgYmFzZW5hbWUgdG8gaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgcHJlc2VuY2VcbiAgLy8gb2YgYSB0cmFpbGluZyBzbGFzaCBvbiByb290IGxpbmtzXG5cbiAgaWYgKGJhc2VuYW1lICE9PSBcIi9cIikge1xuICAgIGpvaW5lZFBhdGhuYW1lID0gcGF0aG5hbWUgPT09IFwiL1wiID8gYmFzZW5hbWUgOiBqb2luUGF0aHMoW2Jhc2VuYW1lLCBwYXRobmFtZV0pO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci5jcmVhdGVIcmVmKHtcbiAgICBwYXRobmFtZTogam9pbmVkUGF0aG5hbWUsXG4gICAgc2VhcmNoLFxuICAgIGhhc2hcbiAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbXBvbmVudCBpcyBhIGRlc2NlbmRhbnQgb2YgYSA8Um91dGVyPi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWluLXJvdXRlci1jb250ZXh0XG4gKi9cblxuZnVuY3Rpb24gdXNlSW5Sb3V0ZXJDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpICE9IG51bGw7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2JqZWN0LCB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IFVSTCBpbiB3ZWJcbiAqIGJyb3dzZXJzLlxuICpcbiAqIE5vdGU6IElmIHlvdSdyZSB1c2luZyB0aGlzIGl0IG1heSBtZWFuIHlvdSdyZSBkb2luZyBzb21lIG9mIHlvdXIgb3duXG4gKiBcInJvdXRpbmdcIiBpbiB5b3VyIGFwcCwgYW5kIHdlJ2QgbGlrZSB0byBrbm93IHdoYXQgeW91ciB1c2UgY2FzZSBpcy4gV2UgbWF5XG4gKiBiZSBhYmxlIHRvIHByb3ZpZGUgc29tZXRoaW5nIGhpZ2hlci1sZXZlbCB0byBiZXR0ZXIgc3VpdCB5b3VyIG5lZWRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbG9jYXRpb25cbiAqL1xuXG5mdW5jdGlvbiB1c2VMb2NhdGlvbigpIHtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZUxvY2F0aW9uKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpLmxvY2F0aW9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gYWN0aW9uIHdoaWNoIGRlc2NyaWJlcyBob3cgdGhlIHJvdXRlciBjYW1lIHRvXG4gKiB0aGUgY3VycmVudCBsb2NhdGlvbiwgZWl0aGVyIGJ5IGEgcG9wLCBwdXNoLCBvciByZXBsYWNlIG9uIHRoZSBoaXN0b3J5IHN0YWNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbmF2aWdhdGlvbi10eXBlXG4gKi9cblxuZnVuY3Rpb24gdXNlTmF2aWdhdGlvblR5cGUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KExvY2F0aW9uQ29udGV4dCkubmF2aWdhdGlvblR5cGU7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgVVJMIGZvciB0aGUgZ2l2ZW4gXCJ0b1wiIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgVVJMLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGNvbXBvbmVudHMgdGhhdCBuZWVkIHRvIGtub3cgXCJhY3RpdmVcIiBzdGF0ZSwgZS5nLlxuICogPE5hdkxpbms+LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtbWF0Y2hcbiAqL1xuXG5mdW5jdGlvbiB1c2VNYXRjaChwYXR0ZXJuKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VNYXRjaCgpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHtcbiAgICBwYXRobmFtZVxuICB9ID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gbWF0Y2hQYXRoKHBhdHRlcm4sIHBhdGhuYW1lKSwgW3BhdGhuYW1lLCBwYXR0ZXJuXSk7XG59XG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBuYXZpZ2F0ZSgpIGZ1bmN0aW9uIHJldHVybmVkIGZyb20gdXNlTmF2aWdhdGUoKS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW1wZXJhdGl2ZSBtZXRob2QgZm9yIGNoYW5naW5nIHRoZSBsb2NhdGlvbi4gVXNlZCBieSA8TGluaz5zLCBidXRcbiAqIG1heSBhbHNvIGJlIHVzZWQgYnkgb3RoZXIgZWxlbWVudHMgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW5hdmlnYXRlXG4gKi9cbmZ1bmN0aW9uIHVzZU5hdmlnYXRlKCkge1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mIHRoZVxuICAvLyByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwidXNlTmF2aWdhdGUoKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgbmF2aWdhdG9yXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KE5hdmlnYXRpb25Db250ZXh0KTtcbiAgbGV0IHtcbiAgICBtYXRjaGVzXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gIGxldCB7XG4gICAgcGF0aG5hbWU6IGxvY2F0aW9uUGF0aG5hbWVcbiAgfSA9IHVzZUxvY2F0aW9uKCk7XG4gIGxldCByb3V0ZVBhdGhuYW1lc0pzb24gPSBKU09OLnN0cmluZ2lmeShVTlNBRkVfZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMobWF0Y2hlcykubWFwKG1hdGNoID0+IG1hdGNoLnBhdGhuYW1lQmFzZSkpO1xuICBsZXQgYWN0aXZlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVSZWYuY3VycmVudCA9IHRydWU7XG4gIH0pO1xuICBsZXQgbmF2aWdhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodG8sIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhhY3RpdmVSZWYuY3VycmVudCwgXCJZb3Ugc2hvdWxkIGNhbGwgbmF2aWdhdGUoKSBpbiBhIFJlYWN0LnVzZUVmZmVjdCgpLCBub3Qgd2hlbiBcIiArIFwieW91ciBjb21wb25lbnQgaXMgZmlyc3QgcmVuZGVyZWQuXCIpIDogdm9pZCAwO1xuICAgIGlmICghYWN0aXZlUmVmLmN1cnJlbnQpIHJldHVybjtcblxuICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIG5hdmlnYXRvci5nbyh0byk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBhdGggPSByZXNvbHZlVG8odG8sIEpTT04ucGFyc2Uocm91dGVQYXRobmFtZXNKc29uKSwgbG9jYXRpb25QYXRobmFtZSwgb3B0aW9ucy5yZWxhdGl2ZSA9PT0gXCJwYXRoXCIpOyAvLyBJZiB3ZSdyZSBvcGVyYXRpbmcgd2l0aGluIGEgYmFzZW5hbWUsIHByZXBlbmQgaXQgdG8gdGhlIHBhdGhuYW1lIHByaW9yXG4gICAgLy8gdG8gaGFuZGluZyBvZmYgdG8gaGlzdG9yeS4gIElmIHRoaXMgaXMgYSByb290IG5hdmlnYXRpb24sIHRoZW4gd2VcbiAgICAvLyBuYXZpZ2F0ZSB0byB0aGUgcmF3IGJhc2VuYW1lIHdoaWNoIGFsbG93cyB0aGUgYmFzZW5hbWUgdG8gaGF2ZSBmdWxsXG4gICAgLy8gY29udHJvbCBvdmVyIHRoZSBwcmVzZW5jZSBvZiBhIHRyYWlsaW5nIHNsYXNoIG9uIHJvb3QgbGlua3NcblxuICAgIGlmIChiYXNlbmFtZSAhPT0gXCIvXCIpIHtcbiAgICAgIHBhdGgucGF0aG5hbWUgPSBwYXRoLnBhdGhuYW1lID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aC5wYXRobmFtZV0pO1xuICAgIH1cblxuICAgICghIW9wdGlvbnMucmVwbGFjZSA/IG5hdmlnYXRvci5yZXBsYWNlIDogbmF2aWdhdG9yLnB1c2gpKHBhdGgsIG9wdGlvbnMuc3RhdGUsIG9wdGlvbnMpO1xuICB9LCBbYmFzZW5hbWUsIG5hdmlnYXRvciwgcm91dGVQYXRobmFtZXNKc29uLCBsb2NhdGlvblBhdGhuYW1lXSk7XG4gIHJldHVybiBuYXZpZ2F0ZTtcbn1cbmNvbnN0IE91dGxldENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29udGV4dCAoaWYgcHJvdmlkZWQpIGZvciB0aGUgY2hpbGQgcm91dGUgYXQgdGhpcyBsZXZlbCBvZiB0aGUgcm91dGVcbiAqIGhpZXJhcmNoeS5cbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2Utb3V0bGV0LWNvbnRleHRcbiAqL1xuXG5mdW5jdGlvbiB1c2VPdXRsZXRDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChPdXRsZXRDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCBmb3IgdGhlIGNoaWxkIHJvdXRlIGF0IHRoaXMgbGV2ZWwgb2YgdGhlIHJvdXRlXG4gKiBoaWVyYXJjaHkuIFVzZWQgaW50ZXJuYWxseSBieSA8T3V0bGV0PiB0byByZW5kZXIgY2hpbGQgcm91dGVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2Utb3V0bGV0XG4gKi9cblxuZnVuY3Rpb24gdXNlT3V0bGV0KGNvbnRleHQpIHtcbiAgbGV0IG91dGxldCA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KS5vdXRsZXQ7XG5cbiAgaWYgKG91dGxldCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdXRsZXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFxuICAgIH0sIG91dGxldCk7XG4gIH1cblxuICByZXR1cm4gb3V0bGV0O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMgb2YgdGhlIGR5bmFtaWMgcGFyYW1zIGZyb20gdGhlIGN1cnJlbnRcbiAqIFVSTCB0aGF0IHdlcmUgbWF0Y2hlZCBieSB0aGUgcm91dGUgcGF0aC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXBhcmFtc1xuICovXG5cbmZ1bmN0aW9uIHVzZVBhcmFtcygpIHtcbiAgbGV0IHtcbiAgICBtYXRjaGVzXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gIGxldCByb3V0ZU1hdGNoID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGFyYW1zIDoge307XG59XG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRobmFtZSBvZiB0aGUgZ2l2ZW4gYHRvYCB2YWx1ZSBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9ob29rcy91c2UtcmVzb2x2ZWQtcGF0aFxuICovXG5cbmZ1bmN0aW9uIHVzZVJlc29sdmVkUGF0aCh0bywgX3RlbXAyKSB7XG4gIGxldCB7XG4gICAgcmVsYXRpdmVcbiAgfSA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDI7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQge1xuICAgIHBhdGhuYW1lOiBsb2NhdGlvblBhdGhuYW1lXG4gIH0gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcm91dGVQYXRobmFtZXNKc29uID0gSlNPTi5zdHJpbmdpZnkoVU5TQUZFX2dldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpLm1hcChtYXRjaCA9PiBtYXRjaC5wYXRobmFtZUJhc2UpKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gcmVzb2x2ZVRvKHRvLCBKU09OLnBhcnNlKHJvdXRlUGF0aG5hbWVzSnNvbiksIGxvY2F0aW9uUGF0aG5hbWUsIHJlbGF0aXZlID09PSBcInBhdGhcIiksIFt0bywgcm91dGVQYXRobmFtZXNKc29uLCBsb2NhdGlvblBhdGhuYW1lLCByZWxhdGl2ZV0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50IG9mIHRoZSByb3V0ZSB0aGF0IG1hdGNoZWQgdGhlIGN1cnJlbnQgbG9jYXRpb24sIHByZXBhcmVkXG4gKiB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHQgdG8gcmVuZGVyIHRoZSByZW1haW5kZXIgb2YgdGhlIHJvdXRlIHRyZWUuIFJvdXRlXG4gKiBlbGVtZW50cyBpbiB0aGUgdHJlZSBtdXN0IHJlbmRlciBhbiA8T3V0bGV0PiB0byByZW5kZXIgdGhlaXIgY2hpbGQgcm91dGUnc1xuICogZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXJvdXRlc1xuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uQXJnKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VSb3V0ZXMoKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBkYXRhUm91dGVyU3RhdGVDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgbGV0IHtcbiAgICBtYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gIGxldCByb3V0ZU1hdGNoID0gcGFyZW50TWF0Y2hlc1twYXJlbnRNYXRjaGVzLmxlbmd0aCAtIDFdO1xuICBsZXQgcGFyZW50UGFyYW1zID0gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGFyYW1zIDoge307XG4gIGxldCBwYXJlbnRQYXRobmFtZSA9IHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhdGhuYW1lIDogXCIvXCI7XG4gIGxldCBwYXJlbnRQYXRobmFtZUJhc2UgPSByb3V0ZU1hdGNoID8gcm91dGVNYXRjaC5wYXRobmFtZUJhc2UgOiBcIi9cIjtcbiAgbGV0IHBhcmVudFJvdXRlID0gcm91dGVNYXRjaCAmJiByb3V0ZU1hdGNoLnJvdXRlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAvLyBZb3Ugd29uJ3QgZ2V0IGEgd2FybmluZyBhYm91dCAyIGRpZmZlcmVudCA8Um91dGVzPiB1bmRlciBhIDxSb3V0ZT5cbiAgICAvLyB3aXRob3V0IGEgdHJhaWxpbmcgKiwgYnV0IHRoaXMgaXMgYSBiZXN0LWVmZm9ydCB3YXJuaW5nIGFueXdheSBzaW5jZSB3ZVxuICAgIC8vIGNhbm5vdCBldmVuIGdpdmUgdGhlIHdhcm5pbmcgdW5sZXNzIHRoZXkgbGFuZCBhdCB0aGUgcGFyZW50IHJvdXRlLlxuICAgIC8vXG4gICAgLy8gRXhhbXBsZTpcbiAgICAvL1xuICAgIC8vIDxSb3V0ZXM+XG4gICAgLy8gICB7LyogVGhpcyByb3V0ZSBwYXRoIE1VU1QgZW5kIHdpdGggLyogYmVjYXVzZSBvdGhlcndpc2VcbiAgICAvLyAgICAgICBpdCB3aWxsIG5ldmVyIG1hdGNoIC9ibG9nL3Bvc3QvMTIzICovfVxuICAgIC8vICAgPFJvdXRlIHBhdGg9XCJibG9nXCIgZWxlbWVudD17PEJsb2cgLz59IC8+XG4gICAgLy8gICA8Um91dGUgcGF0aD1cImJsb2cvZmVlZFwiIGVsZW1lbnQ9ezxCbG9nRmVlZCAvPn0gLz5cbiAgICAvLyA8L1JvdXRlcz5cbiAgICAvL1xuICAgIC8vIGZ1bmN0aW9uIEJsb2coKSB7XG4gICAgLy8gICByZXR1cm4gKFxuICAgIC8vICAgICA8Um91dGVzPlxuICAgIC8vICAgICAgIDxSb3V0ZSBwYXRoPVwicG9zdC86aWRcIiBlbGVtZW50PXs8UG9zdCAvPn0gLz5cbiAgICAvLyAgICAgPC9Sb3V0ZXM+XG4gICAgLy8gICApO1xuICAgIC8vIH1cbiAgICBsZXQgcGFyZW50UGF0aCA9IHBhcmVudFJvdXRlICYmIHBhcmVudFJvdXRlLnBhdGggfHwgXCJcIjtcbiAgICB3YXJuaW5nT25jZShwYXJlbnRQYXRobmFtZSwgIXBhcmVudFJvdXRlIHx8IHBhcmVudFBhdGguZW5kc1dpdGgoXCIqXCIpLCBcIllvdSByZW5kZXJlZCBkZXNjZW5kYW50IDxSb3V0ZXM+IChvciBjYWxsZWQgYHVzZVJvdXRlcygpYCkgYXQgXCIgKyAoXCJcXFwiXCIgKyBwYXJlbnRQYXRobmFtZSArIFwiXFxcIiAodW5kZXIgPFJvdXRlIHBhdGg9XFxcIlwiICsgcGFyZW50UGF0aCArIFwiXFxcIj4pIGJ1dCB0aGUgXCIpICsgXCJwYXJlbnQgcm91dGUgcGF0aCBoYXMgbm8gdHJhaWxpbmcgXFxcIipcXFwiLiBUaGlzIG1lYW5zIGlmIHlvdSBuYXZpZ2F0ZSBcIiArIFwiZGVlcGVyLCB0aGUgcGFyZW50IHdvbid0IG1hdGNoIGFueW1vcmUgYW5kIHRoZXJlZm9yZSB0aGUgY2hpbGQgXCIgKyBcInJvdXRlcyB3aWxsIG5ldmVyIHJlbmRlci5cXG5cXG5cIiArIChcIlBsZWFzZSBjaGFuZ2UgdGhlIHBhcmVudCA8Um91dGUgcGF0aD1cXFwiXCIgKyBwYXJlbnRQYXRoICsgXCJcXFwiPiB0byA8Um91dGUgXCIpICsgKFwicGF0aD1cXFwiXCIgKyAocGFyZW50UGF0aCA9PT0gXCIvXCIgPyBcIipcIiA6IHBhcmVudFBhdGggKyBcIi8qXCIpICsgXCJcXFwiPi5cIikpO1xuICB9XG5cbiAgbGV0IGxvY2F0aW9uRnJvbUNvbnRleHQgPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgbG9jYXRpb247XG5cbiAgaWYgKGxvY2F0aW9uQXJnKSB7XG4gICAgdmFyIF9wYXJzZWRMb2NhdGlvbkFyZyRwYTtcblxuICAgIGxldCBwYXJzZWRMb2NhdGlvbkFyZyA9IHR5cGVvZiBsb2NhdGlvbkFyZyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChsb2NhdGlvbkFyZykgOiBsb2NhdGlvbkFyZztcbiAgICAhKHBhcmVudFBhdGhuYW1lQmFzZSA9PT0gXCIvXCIgfHwgKChfcGFyc2VkTG9jYXRpb25BcmckcGEgPSBwYXJzZWRMb2NhdGlvbkFyZy5wYXRobmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYXJzZWRMb2NhdGlvbkFyZyRwYS5zdGFydHNXaXRoKHBhcmVudFBhdGhuYW1lQmFzZSkpKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJXaGVuIG92ZXJyaWRpbmcgdGhlIGxvY2F0aW9uIHVzaW5nIGA8Um91dGVzIGxvY2F0aW9uPmAgb3IgYHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uKWAsIFwiICsgXCJ0aGUgbG9jYXRpb24gcGF0aG5hbWUgbXVzdCBiZWdpbiB3aXRoIHRoZSBwb3J0aW9uIG9mIHRoZSBVUkwgcGF0aG5hbWUgdGhhdCB3YXMgXCIgKyAoXCJtYXRjaGVkIGJ5IGFsbCBwYXJlbnQgcm91dGVzLiBUaGUgY3VycmVudCBwYXRobmFtZSBiYXNlIGlzIFxcXCJcIiArIHBhcmVudFBhdGhuYW1lQmFzZSArIFwiXFxcIiBcIikgKyAoXCJidXQgcGF0aG5hbWUgXFxcIlwiICsgcGFyc2VkTG9jYXRpb25BcmcucGF0aG5hbWUgKyBcIlxcXCIgd2FzIGdpdmVuIGluIHRoZSBgbG9jYXRpb25gIHByb3AuXCIpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgbG9jYXRpb24gPSBwYXJzZWRMb2NhdGlvbkFyZztcbiAgfSBlbHNlIHtcbiAgICBsb2NhdGlvbiA9IGxvY2F0aW9uRnJvbUNvbnRleHQ7XG4gIH1cblxuICBsZXQgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSB8fCBcIi9cIjtcbiAgbGV0IHJlbWFpbmluZ1BhdGhuYW1lID0gcGFyZW50UGF0aG5hbWVCYXNlID09PSBcIi9cIiA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UocGFyZW50UGF0aG5hbWVCYXNlLmxlbmd0aCkgfHwgXCIvXCI7XG4gIGxldCBtYXRjaGVzID0gbWF0Y2hSb3V0ZXMocm91dGVzLCB7XG4gICAgcGF0aG5hbWU6IHJlbWFpbmluZ1BhdGhuYW1lXG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHBhcmVudFJvdXRlIHx8IG1hdGNoZXMgIT0gbnVsbCwgXCJObyByb3V0ZXMgbWF0Y2hlZCBsb2NhdGlvbiBcXFwiXCIgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIGxvY2F0aW9uLmhhc2ggKyBcIlxcXCIgXCIpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcobWF0Y2hlcyA9PSBudWxsIHx8IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXS5yb3V0ZS5lbGVtZW50ICE9PSB1bmRlZmluZWQsIFwiTWF0Y2hlZCBsZWFmIHJvdXRlIGF0IGxvY2F0aW9uIFxcXCJcIiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoICsgbG9jYXRpb24uaGFzaCArIFwiXFxcIiBkb2VzIG5vdCBoYXZlIGFuIGVsZW1lbnQuIFwiICsgXCJUaGlzIG1lYW5zIGl0IHdpbGwgcmVuZGVyIGFuIDxPdXRsZXQgLz4gd2l0aCBhIG51bGwgdmFsdWUgYnkgZGVmYXVsdCByZXN1bHRpbmcgaW4gYW4gXFxcImVtcHR5XFxcIiBwYWdlLlwiKSA6IHZvaWQgMDtcbiAgfVxuXG4gIGxldCByZW5kZXJlZE1hdGNoZXMgPSBfcmVuZGVyTWF0Y2hlcyhtYXRjaGVzICYmIG1hdGNoZXMubWFwKG1hdGNoID0+IE9iamVjdC5hc3NpZ24oe30sIG1hdGNoLCB7XG4gICAgcGFyYW1zOiBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRQYXJhbXMsIG1hdGNoLnBhcmFtcyksXG4gICAgcGF0aG5hbWU6IGpvaW5QYXRocyhbcGFyZW50UGF0aG5hbWVCYXNlLCBtYXRjaC5wYXRobmFtZV0pLFxuICAgIHBhdGhuYW1lQmFzZTogbWF0Y2gucGF0aG5hbWVCYXNlID09PSBcIi9cIiA/IHBhcmVudFBhdGhuYW1lQmFzZSA6IGpvaW5QYXRocyhbcGFyZW50UGF0aG5hbWVCYXNlLCBtYXRjaC5wYXRobmFtZUJhc2VdKVxuICB9KSksIHBhcmVudE1hdGNoZXMsIGRhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgfHwgdW5kZWZpbmVkKTsgLy8gV2hlbiBhIHVzZXIgcGFzc2VzIGluIGEgYGxvY2F0aW9uQXJnYCwgdGhlIGFzc29jaWF0ZWQgcm91dGVzIG5lZWQgdG9cbiAgLy8gYmUgd3JhcHBlZCBpbiBhIG5ldyBgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyYCBpbiBvcmRlciBmb3IgYHVzZUxvY2F0aW9uYFxuICAvLyB0byB1c2UgdGhlIHNjb3BlZCBsb2NhdGlvbiBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgbG9jYXRpb24uXG5cblxuICBpZiAobG9jYXRpb25BcmcgJiYgcmVuZGVyZWRNYXRjaGVzKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgbG9jYXRpb246IF9leHRlbmRzKHtcbiAgICAgICAgICBwYXRobmFtZTogXCIvXCIsXG4gICAgICAgICAgc2VhcmNoOiBcIlwiLFxuICAgICAgICAgIGhhc2g6IFwiXCIsXG4gICAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgICAga2V5OiBcImRlZmF1bHRcIlxuICAgICAgICB9LCBsb2NhdGlvbiksXG4gICAgICAgIG5hdmlnYXRpb25UeXBlOiBBY3Rpb24uUG9wXG4gICAgICB9XG4gICAgfSwgcmVuZGVyZWRNYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJlZE1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIERlZmF1bHRFcnJvckVsZW1lbnQoKSB7XG4gIGxldCBlcnJvciA9IHVzZVJvdXRlRXJyb3IoKTtcbiAgbGV0IG1lc3NhZ2UgPSBpc1JvdXRlRXJyb3JSZXNwb25zZShlcnJvcikgPyBlcnJvci5zdGF0dXMgKyBcIiBcIiArIGVycm9yLnN0YXR1c1RleHQgOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KGVycm9yKTtcbiAgbGV0IHN0YWNrID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogbnVsbDtcbiAgbGV0IGxpZ2h0Z3JleSA9IFwicmdiYSgyMDAsMjAwLDIwMCwgMC41KVwiO1xuICBsZXQgcHJlU3R5bGVzID0ge1xuICAgIHBhZGRpbmc6IFwiMC41cmVtXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBsaWdodGdyZXlcbiAgfTtcbiAgbGV0IGNvZGVTdHlsZXMgPSB7XG4gICAgcGFkZGluZzogXCIycHggNHB4XCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBsaWdodGdyZXlcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIG51bGwsIFwiVW5oYW5kbGVkIFRocm93biBFcnJvciFcIiksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgIHN0eWxlOiB7XG4gICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICB9XG4gIH0sIG1lc3NhZ2UpLCBzdGFjayA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicHJlXCIsIHtcbiAgICBzdHlsZTogcHJlU3R5bGVzXG4gIH0sIHN0YWNrKSA6IG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCBudWxsLCBcIlxcdUQ4M0RcXHVEQ0JGIEhleSBkZXZlbG9wZXIgXFx1RDgzRFxcdURDNEJcIiksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCBudWxsLCBcIllvdSBjYW4gcHJvdmlkZSBhIHdheSBiZXR0ZXIgVVggdGhhbiB0aGlzIHdoZW4geW91ciBhcHAgdGhyb3dzIGVycm9ycyBieSBwcm92aWRpbmcgeW91ciBvd25cXHhBMFwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge1xuICAgIHN0eWxlOiBjb2RlU3R5bGVzXG4gIH0sIFwiZXJyb3JFbGVtZW50XCIpLCBcIiBwcm9wcyBvblxceEEwXCIsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7XG4gICAgc3R5bGU6IGNvZGVTdHlsZXNcbiAgfSwgXCI8Um91dGU+XCIpKSk7XG59XG5cbmNsYXNzIFJlbmRlckVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uLFxuICAgICAgZXJyb3I6IHByb3BzLmVycm9yXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IGVycm9yXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgLy8gV2hlbiB3ZSBnZXQgaW50byBhbiBlcnJvciBzdGF0ZSwgdGhlIHVzZXIgd2lsbCBsaWtlbHkgY2xpY2sgXCJiYWNrXCIgdG8gdGhlXG4gICAgLy8gcHJldmlvdXMgcGFnZSB0aGF0IGRpZG4ndCBoYXZlIGFuIGVycm9yLiBCZWNhdXNlIHRoaXMgd3JhcHMgdGhlIGVudGlyZVxuICAgIC8vIGFwcGxpY2F0aW9uLCB0aGF0IHdpbGwgaGF2ZSBubyBlZmZlY3QtLXRoZSBlcnJvciBwYWdlIGNvbnRpbnVlcyB0byBkaXNwbGF5LlxuICAgIC8vIFRoaXMgZ2l2ZXMgdXMgYSBtZWNoYW5pc20gdG8gcmVjb3ZlciBmcm9tIHRoZSBlcnJvciB3aGVuIHRoZSBsb2NhdGlvbiBjaGFuZ2VzLlxuICAgIC8vXG4gICAgLy8gV2hldGhlciB3ZSdyZSBpbiBhbiBlcnJvciBzdGF0ZSBvciBub3QsIHdlIHVwZGF0ZSB0aGUgbG9jYXRpb24gaW4gc3RhdGVcbiAgICAvLyBzbyB0aGF0IHdoZW4gd2UgYXJlIGluIGFuIGVycm9yIHN0YXRlLCBpdCBnZXRzIHJlc2V0IHdoZW4gYSBuZXcgbG9jYXRpb25cbiAgICAvLyBjb21lcyBpbiBhbmQgdGhlIHVzZXIgcmVjb3ZlcnMgZnJvbSB0aGUgZXJyb3IuXG4gICAgaWYgKHN0YXRlLmxvY2F0aW9uICE9PSBwcm9wcy5sb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IHByb3BzLmVycm9yLFxuICAgICAgICBsb2NhdGlvbjogcHJvcHMubG9jYXRpb25cbiAgICAgIH07XG4gICAgfSAvLyBJZiB3ZSdyZSBub3QgY2hhbmdpbmcgbG9jYXRpb25zLCBwcmVzZXJ2ZSB0aGUgbG9jYXRpb24gYnV0IHN0aWxsIHN1cmZhY2VcbiAgICAvLyBhbnkgbmV3IGVycm9ycyB0aGF0IG1heSBjb21lIHRocm91Z2guIFdlIHJldGFpbiB0aGUgZXhpc3RpbmcgZXJyb3IsIHdlIGRvXG4gICAgLy8gdGhpcyBiZWNhdXNlIHRoZSBlcnJvciBwcm92aWRlZCBmcm9tIHRoZSBhcHAgc3RhdGUgbWF5IGJlIGNsZWFyZWQgd2l0aG91dFxuICAgIC8vIHRoZSBsb2NhdGlvbiBjaGFuZ2luZy5cblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBwcm9wcy5lcnJvciB8fCBzdGF0ZS5lcnJvcixcbiAgICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvblxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgY29uc29sZS5lcnJvcihcIlJlYWN0IFJvdXRlciBjYXVnaHQgdGhlIGZvbGxvd2luZyBlcnJvciBkdXJpbmcgcmVuZGVyXCIsIGVycm9yLCBlcnJvckluZm8pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmVycm9yID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVFcnJvckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmVycm9yLFxuICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY29tcG9uZW50XG4gICAgfSkgOiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gUmVuZGVyZWRSb3V0ZShfcmVmKSB7XG4gIGxldCB7XG4gICAgcm91dGVDb250ZXh0LFxuICAgIG1hdGNoLFxuICAgIGNoaWxkcmVuXG4gIH0gPSBfcmVmO1xuICBsZXQgZGF0YVN0YXRpY1JvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0KTsgLy8gVHJhY2sgaG93IGRlZXAgd2UgZ290IGluIG91ciByZW5kZXIgcGFzcyB0byBlbXVsYXRlIFNTUiBjb21wb25lbnREaWRDYXRjaFxuICAvLyBpbiBhIERhdGFTdGF0aWNSb3V0ZXJcblxuICBpZiAoZGF0YVN0YXRpY1JvdXRlckNvbnRleHQgJiYgbWF0Y2gucm91dGUuZXJyb3JFbGVtZW50KSB7XG4gICAgZGF0YVN0YXRpY1JvdXRlckNvbnRleHQuX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQgPSBtYXRjaC5yb3V0ZS5pZDtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcm91dGVDb250ZXh0XG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlck1hdGNoZXMobWF0Y2hlcywgcGFyZW50TWF0Y2hlcywgZGF0YVJvdXRlclN0YXRlKSB7XG4gIGlmIChwYXJlbnRNYXRjaGVzID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRNYXRjaGVzID0gW107XG4gIH1cblxuICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgaWYgKGRhdGFSb3V0ZXJTdGF0ZSAhPSBudWxsICYmIGRhdGFSb3V0ZXJTdGF0ZS5lcnJvcnMpIHtcbiAgICAgIC8vIERvbid0IGJhaWwgaWYgd2UgaGF2ZSBkYXRhIHJvdXRlciBlcnJvcnMgc28gd2UgY2FuIHJlbmRlciB0aGVtIGluIHRoZVxuICAgICAgLy8gYm91bmRhcnkuICBVc2UgdGhlIHByZS1tYXRjaGVkIChvciBzaGltbWVkKSBtYXRjaGVzXG4gICAgICBtYXRjaGVzID0gZGF0YVJvdXRlclN0YXRlLm1hdGNoZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZW5kZXJlZE1hdGNoZXMgPSBtYXRjaGVzOyAvLyBJZiB3ZSBoYXZlIGRhdGEgZXJyb3JzLCB0cmltIG1hdGNoZXMgdG8gdGhlIGhpZ2hlc3QgZXJyb3IgYm91bmRhcnlcblxuICBsZXQgZXJyb3JzID0gZGF0YVJvdXRlclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBkYXRhUm91dGVyU3RhdGUuZXJyb3JzO1xuXG4gIGlmIChlcnJvcnMgIT0gbnVsbCkge1xuICAgIGxldCBlcnJvckluZGV4ID0gcmVuZGVyZWRNYXRjaGVzLmZpbmRJbmRleChtID0+IG0ucm91dGUuaWQgJiYgKGVycm9ycyA9PSBudWxsID8gdm9pZCAwIDogZXJyb3JzW20ucm91dGUuaWRdKSk7XG4gICAgIShlcnJvckluZGV4ID49IDApID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIkNvdWxkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgcm91dGUgZm9yIHRoZSBjdXJyZW50IGVycm9yczogXCIgKyBlcnJvcnMpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICByZW5kZXJlZE1hdGNoZXMgPSByZW5kZXJlZE1hdGNoZXMuc2xpY2UoMCwgTWF0aC5taW4ocmVuZGVyZWRNYXRjaGVzLmxlbmd0aCwgZXJyb3JJbmRleCArIDEpKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJlZE1hdGNoZXMucmVkdWNlUmlnaHQoKG91dGxldCwgbWF0Y2gsIGluZGV4KSA9PiB7XG4gICAgbGV0IGVycm9yID0gbWF0Y2gucm91dGUuaWQgPyBlcnJvcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yc1ttYXRjaC5yb3V0ZS5pZF0gOiBudWxsOyAvLyBPbmx5IGRhdGEgcm91dGVycyBoYW5kbGUgZXJyb3JzXG5cbiAgICBsZXQgZXJyb3JFbGVtZW50ID0gZGF0YVJvdXRlclN0YXRlID8gbWF0Y2gucm91dGUuZXJyb3JFbGVtZW50IHx8IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERlZmF1bHRFcnJvckVsZW1lbnQsIG51bGwpIDogbnVsbDtcblxuICAgIGxldCBnZXRDaGlsZHJlbiA9ICgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlbmRlcmVkUm91dGUsIHtcbiAgICAgIG1hdGNoOiBtYXRjaCxcbiAgICAgIHJvdXRlQ29udGV4dDoge1xuICAgICAgICBvdXRsZXQsXG4gICAgICAgIG1hdGNoZXM6IHBhcmVudE1hdGNoZXMuY29uY2F0KHJlbmRlcmVkTWF0Y2hlcy5zbGljZSgwLCBpbmRleCArIDEpKVxuICAgICAgfVxuICAgIH0sIGVycm9yID8gZXJyb3JFbGVtZW50IDogbWF0Y2gucm91dGUuZWxlbWVudCAhPT0gdW5kZWZpbmVkID8gbWF0Y2gucm91dGUuZWxlbWVudCA6IG91dGxldCk7IC8vIE9ubHkgd3JhcCBpbiBhbiBlcnJvciBib3VuZGFyeSB3aXRoaW4gZGF0YSByb3V0ZXIgdXNhZ2VzIHdoZW4gd2UgaGF2ZSBhblxuICAgIC8vIGVycm9yRWxlbWVudCBvbiB0aGlzIHJvdXRlLiAgT3RoZXJ3aXNlIGxldCBpdCBidWJibGUgdXAgdG8gYW4gYW5jZXN0b3JcbiAgICAvLyBlcnJvckVsZW1lbnRcblxuXG4gICAgcmV0dXJuIGRhdGFSb3V0ZXJTdGF0ZSAmJiAobWF0Y2gucm91dGUuZXJyb3JFbGVtZW50IHx8IGluZGV4ID09PSAwKSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlbmRlckVycm9yQm91bmRhcnksIHtcbiAgICAgIGxvY2F0aW9uOiBkYXRhUm91dGVyU3RhdGUubG9jYXRpb24sXG4gICAgICBjb21wb25lbnQ6IGVycm9yRWxlbWVudCxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgIGNoaWxkcmVuOiBnZXRDaGlsZHJlbigpXG4gICAgfSkgOiBnZXRDaGlsZHJlbigpO1xuICB9LCBudWxsKTtcbn1cbnZhciBEYXRhUm91dGVySG9vaztcblxuKGZ1bmN0aW9uIChEYXRhUm91dGVySG9vaykge1xuICBEYXRhUm91dGVySG9va1tcIlVzZVJldmFsaWRhdG9yXCJdID0gXCJ1c2VSZXZhbGlkYXRvclwiO1xufSkoRGF0YVJvdXRlckhvb2sgfHwgKERhdGFSb3V0ZXJIb29rID0ge30pKTtcblxudmFyIERhdGFSb3V0ZXJTdGF0ZUhvb2s7XG5cbihmdW5jdGlvbiAoRGF0YVJvdXRlclN0YXRlSG9vaykge1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlTG9hZGVyRGF0YVwiXSA9IFwidXNlTG9hZGVyRGF0YVwiO1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlQWN0aW9uRGF0YVwiXSA9IFwidXNlQWN0aW9uRGF0YVwiO1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlUm91dGVFcnJvclwiXSA9IFwidXNlUm91dGVFcnJvclwiO1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlTmF2aWdhdGlvblwiXSA9IFwidXNlTmF2aWdhdGlvblwiO1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlUm91dGVMb2FkZXJEYXRhXCJdID0gXCJ1c2VSb3V0ZUxvYWRlckRhdGFcIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZU1hdGNoZXNcIl0gPSBcInVzZU1hdGNoZXNcIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZVJldmFsaWRhdG9yXCJdID0gXCJ1c2VSZXZhbGlkYXRvclwiO1xufSkoRGF0YVJvdXRlclN0YXRlSG9vayB8fCAoRGF0YVJvdXRlclN0YXRlSG9vayA9IHt9KSk7XG5cbmZ1bmN0aW9uIGdldERhdGFSb3V0ZXJDb25zb2xlRXJyb3IoaG9va05hbWUpIHtcbiAgcmV0dXJuIGhvb2tOYW1lICsgXCIgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIGRhdGEgcm91dGVyLiAgU2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2VuL21haW4vcm91dGVycy9waWNraW5nLWEtcm91dGVyLlwiO1xufVxuXG5mdW5jdGlvbiB1c2VEYXRhUm91dGVyQ29udGV4dChob29rTmFtZSkge1xuICBsZXQgY3R4ID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyQ29udGV4dCk7XG4gICFjdHggPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGdldERhdGFSb3V0ZXJDb25zb2xlRXJyb3IoaG9va05hbWUpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBjdHg7XG59XG5cbmZ1bmN0aW9uIHVzZURhdGFSb3V0ZXJTdGF0ZShob29rTmFtZSkge1xuICBsZXQgc3RhdGUgPSBSZWFjdC51c2VDb250ZXh0KERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQpO1xuICAhc3RhdGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGdldERhdGFSb3V0ZXJDb25zb2xlRXJyb3IoaG9va05hbWUpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBzdGF0ZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLCBkZWZhdWx0aW5nIHRvIGFuIFwiaWRsZVwiIG5hdmlnYXRpb24gd2hlblxuICogbm8gbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzc1xuICovXG5cblxuZnVuY3Rpb24gdXNlTmF2aWdhdGlvbigpIHtcbiAgbGV0IHN0YXRlID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJTdGF0ZUhvb2suVXNlTmF2aWdhdGlvbik7XG4gIHJldHVybiBzdGF0ZS5uYXZpZ2F0aW9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmV2YWxpZGF0ZSBmdW5jdGlvbiBmb3IgbWFudWFsbHkgdHJpZ2dlcmluZyByZXZhbGlkYXRpb24sIGFzIHdlbGxcbiAqIGFzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFueSBtYW51YWwgcmV2YWxpZGF0aW9uc1xuICovXG5cbmZ1bmN0aW9uIHVzZVJldmFsaWRhdG9yKCkge1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSB1c2VEYXRhUm91dGVyQ29udGV4dChEYXRhUm91dGVySG9vay5Vc2VSZXZhbGlkYXRvcik7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZVJldmFsaWRhdG9yKTtcbiAgcmV0dXJuIHtcbiAgICByZXZhbGlkYXRlOiBkYXRhUm91dGVyQ29udGV4dC5yb3V0ZXIucmV2YWxpZGF0ZSxcbiAgICBzdGF0ZTogc3RhdGUucmV2YWxpZGF0aW9uXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGl2ZSByb3V0ZSBtYXRjaGVzLCB1c2VmdWwgZm9yIGFjY2Vzc2luZyBsb2FkZXJEYXRhIGZvclxuICogcGFyZW50L2NoaWxkIHJvdXRlcyBvciB0aGUgcm91dGUgXCJoYW5kbGVcIiBwcm9wZXJ0eVxuICovXG5cbmZ1bmN0aW9uIHVzZU1hdGNoZXMoKSB7XG4gIGxldCB7XG4gICAgbWF0Y2hlcyxcbiAgICBsb2FkZXJEYXRhXG4gIH0gPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VNYXRjaGVzKTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gbWF0Y2hlcy5tYXAobWF0Y2ggPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHBhcmFtc1xuICAgIH0gPSBtYXRjaDsgLy8gTm90ZTogVGhpcyBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGF0IGNyZWF0ZWQgYnkgY3JlYXRlVXNlTWF0Y2hlc01hdGNoXG4gICAgLy8gaW4gdGhlIEByZW1peC1ydW4vcm91dGVyICwgc28gaWYgeW91IGNoYW5nZSB0aGlzIHBsZWFzZSBhbHNvIGNoYW5nZVxuICAgIC8vIHRoYXQgOikgIEV2ZW50dWFsbHkgd2UnbGwgRFJZIHRoaXMgdXBcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogbWF0Y2gucm91dGUuaWQsXG4gICAgICBwYXRobmFtZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGRhdGE6IGxvYWRlckRhdGFbbWF0Y2gucm91dGUuaWRdLFxuICAgICAgaGFuZGxlOiBtYXRjaC5yb3V0ZS5oYW5kbGVcbiAgICB9O1xuICB9KSwgW21hdGNoZXMsIGxvYWRlckRhdGFdKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbG9hZGVyIGRhdGEgZm9yIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGxvYWRlclxuICovXG5cbmZ1bmN0aW9uIHVzZUxvYWRlckRhdGEoKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZUxvYWRlckRhdGEpO1xuICBsZXQgcm91dGUgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VMb2FkZXJEYXRhIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgdGhpc1JvdXRlID0gcm91dGUubWF0Y2hlc1tyb3V0ZS5tYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAhdGhpc1JvdXRlLnJvdXRlLmlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUxvYWRlckRhdGEgY2FuIG9ubHkgYmUgdXNlZCBvbiByb3V0ZXMgdGhhdCBjb250YWluIGEgdW5pcXVlIFxcXCJpZFxcXCJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gc3RhdGUubG9hZGVyRGF0YVt0aGlzUm91dGUucm91dGUuaWRdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb2FkZXJEYXRhIGZvciB0aGUgZ2l2ZW4gcm91dGVJZFxuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlTG9hZGVyRGF0YShyb3V0ZUlkKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZVJvdXRlTG9hZGVyRGF0YSk7XG4gIHJldHVybiBzdGF0ZS5sb2FkZXJEYXRhW3JvdXRlSWRdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gZGF0YSBmb3IgdGhlIG5lYXJlc3QgYW5jZXN0b3IgUm91dGUgYWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gdXNlQWN0aW9uRGF0YSgpIHtcbiAgbGV0IHN0YXRlID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJTdGF0ZUhvb2suVXNlQWN0aW9uRGF0YSk7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgIXJvdXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUFjdGlvbkRhdGEgbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKChzdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGUuYWN0aW9uRGF0YSkgfHwge30pWzBdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGVycm9yLCB3aGljaCBjb3VsZCBiZSBhIGxvYWRlci9hY3Rpb25cbiAqIGVycm9yIG9yIGEgcmVuZGVyIGVycm9yLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB5b3VyXG4gKiBlcnJvckVsZW1lbnQgdG8gZGlzcGxheSBhIHByb3BlciBlcnJvciBtZXNzYWdlLlxuICovXG5cbmZ1bmN0aW9uIHVzZVJvdXRlRXJyb3IoKSB7XG4gIHZhciBfc3RhdGUkZXJyb3JzO1xuXG4gIGxldCBlcnJvciA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVFcnJvckNvbnRleHQpO1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VSb3V0ZUVycm9yKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQgdGhpc1JvdXRlID0gcm91dGUubWF0Y2hlc1tyb3V0ZS5tYXRjaGVzLmxlbmd0aCAtIDFdOyAvLyBJZiB0aGlzIHdhcyBhIHJlbmRlciBlcnJvciwgd2UgcHV0IGl0IGluIGEgUm91dGVFcnJvciBjb250ZXh0IGluc2lkZVxuICAvLyBvZiBSZW5kZXJFcnJvckJvdW5kYXJ5XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgIXJvdXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVJvdXRlRXJyb3IgbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICF0aGlzUm91dGUucm91dGUuaWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlUm91dGVFcnJvciBjYW4gb25seSBiZSB1c2VkIG9uIHJvdXRlcyB0aGF0IGNvbnRhaW4gYSB1bmlxdWUgXFxcImlkXFxcIlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7IC8vIE90aGVyd2lzZSBsb29rIGZvciBlcnJvcnMgZnJvbSBvdXIgZGF0YSByb3V0ZXIgc3RhdGVcblxuICByZXR1cm4gKF9zdGF0ZSRlcnJvcnMgPSBzdGF0ZS5lcnJvcnMpID09IG51bGwgPyB2b2lkIDAgOiBfc3RhdGUkZXJyb3JzW3RoaXNSb3V0ZS5yb3V0ZS5pZF07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGhhcHB5LXBhdGggZGF0YSBmcm9tIHRoZSBuZWFyZXN0IGFuY2VzdG9yIDxBd2FpdCAvPiB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHVzZUFzeW5jVmFsdWUoKSB7XG4gIGxldCB2YWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoQXdhaXRDb250ZXh0KTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5fZGF0YTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZXJyb3IgZnJvbSB0aGUgbmVhcmVzdCBhbmNlc3RvciA8QXdhaXQgLz4gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiB1c2VBc3luY0Vycm9yKCkge1xuICBsZXQgdmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KEF3YWl0Q29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuX2Vycm9yO1xufVxuY29uc3QgYWxyZWFkeVdhcm5lZCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuaW5nT25jZShrZXksIGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kICYmICFhbHJlYWR5V2FybmVkW2tleV0pIHtcbiAgICBhbHJlYWR5V2FybmVkW2tleV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoZmFsc2UsIG1lc3NhZ2UpIDogdm9pZCAwO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZW1peCBSb3V0ZXIgaW5zdGFuY2UsIHJlbmRlciB0aGUgYXBwcm9wcmlhdGUgVUlcbiAqL1xuZnVuY3Rpb24gUm91dGVyUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgIGZhbGxiYWNrRWxlbWVudCxcbiAgICByb3V0ZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFN5bmMgcm91dGVyIHN0YXRlIHRvIG91ciBjb21wb25lbnQgc3RhdGUgdG8gZm9yY2UgcmUtcmVuZGVyc1xuICBsZXQgc3RhdGUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZShyb3V0ZXIuc3Vic2NyaWJlLCAoKSA9PiByb3V0ZXIuc3RhdGUsIC8vIFdlIGhhdmUgdG8gcHJvdmlkZSB0aGlzIHNvIFJlYWN0QDE4IGRvZXNuJ3QgY29tcGxhaW4gZHVyaW5nIGh5ZHJhdGlvbixcbiAgLy8gYnV0IHdlIHBhc3Mgb3VyIHNlcmlhbGl6ZWQgaHlkcmF0aW9uIGRhdGEgaW50byB0aGUgcm91dGVyIHNvIHN0YXRlIGhlcmVcbiAgLy8gaXMgYWxyZWFkeSBzeW5jZWQgd2l0aCB3aGF0IHRoZSBzZXJ2ZXIgc2F3XG4gICgpID0+IHJvdXRlci5zdGF0ZSk7XG4gIGxldCBuYXZpZ2F0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlSHJlZjogcm91dGVyLmNyZWF0ZUhyZWYsXG4gICAgICBnbzogbiA9PiByb3V0ZXIubmF2aWdhdGUobiksXG4gICAgICBwdXNoOiAodG8sIHN0YXRlLCBvcHRzKSA9PiByb3V0ZXIubmF2aWdhdGUodG8sIHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHByZXZlbnRTY3JvbGxSZXNldDogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5wcmV2ZW50U2Nyb2xsUmVzZXRcbiAgICAgIH0pLFxuICAgICAgcmVwbGFjZTogKHRvLCBzdGF0ZSwgb3B0cykgPT4gcm91dGVyLm5hdmlnYXRlKHRvLCB7XG4gICAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMucHJldmVudFNjcm9sbFJlc2V0XG4gICAgICB9KVxuICAgIH07XG4gIH0sIFtyb3V0ZXJdKTtcbiAgbGV0IGJhc2VuYW1lID0gcm91dGVyLmJhc2VuYW1lIHx8IFwiL1wiO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0YVJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgcm91dGVyLFxuICAgICAgbmF2aWdhdG9yLFxuICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgIC8vIERvIHdlIG5lZWQgdGhpcz9cbiAgICAgIGJhc2VuYW1lXG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXRhUm91dGVyU3RhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN0YXRlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiByb3V0ZXIuYmFzZW5hbWUsXG4gICAgbG9jYXRpb246IHJvdXRlci5zdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogcm91dGVyLnN0YXRlLmhpc3RvcnlBY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBuYXZpZ2F0b3JcbiAgfSwgcm91dGVyLnN0YXRlLmluaXRpYWxpemVkID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVzLCBudWxsKSA6IGZhbGxiYWNrRWxlbWVudCkpKTtcbn1cblxuLyoqXG4gKiBBIDxSb3V0ZXI+IHRoYXQgc3RvcmVzIGFsbCBlbnRyaWVzIGluIG1lbW9yeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvcm91dGVycy9tZW1vcnktcm91dGVyXG4gKi9cbmZ1bmN0aW9uIE1lbW9yeVJvdXRlcihfcmVmMikge1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuLFxuICAgIGluaXRpYWxFbnRyaWVzLFxuICAgIGluaXRpYWxJbmRleFxuICB9ID0gX3JlZjI7XG4gIGxldCBoaXN0b3J5UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgaWYgKGhpc3RvcnlSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgaGlzdG9yeVJlZi5jdXJyZW50ID0gY3JlYXRlTWVtb3J5SGlzdG9yeSh7XG4gICAgICBpbml0aWFsRW50cmllcyxcbiAgICAgIGluaXRpYWxJbmRleCxcbiAgICAgIHY1Q29tcGF0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IGhpc3RvcnlSZWYuY3VycmVudDtcbiAgbGV0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIE5vdGU6IFRoaXMgQVBJIGlzIG1vc3RseSB1c2VmdWwgaW4gUmVhY3QuQ29tcG9uZW50IHN1YmNsYXNzZXMgdGhhdCBhcmUgbm90XG4gKiBhYmxlIHRvIHVzZSBob29rcy4gSW4gZnVuY3Rpb25hbCBjb21wb25lbnRzLCB3ZSByZWNvbW1lbmQgeW91IHVzZSB0aGVcbiAqIGB1c2VOYXZpZ2F0ZWAgaG9vayBpbnN0ZWFkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL25hdmlnYXRlXG4gKi9cbmZ1bmN0aW9uIE5hdmlnYXRlKF9yZWYzKSB7XG4gIGxldCB7XG4gICAgdG8sXG4gICAgcmVwbGFjZSxcbiAgICBzdGF0ZSxcbiAgICByZWxhdGl2ZVxuICB9ID0gX3JlZjM7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2ZcbiAgLy8gdGhlIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCI8TmF2aWdhdGU+IG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCkuc3RhdGljLCBcIjxOYXZpZ2F0ZT4gbXVzdCBub3QgYmUgdXNlZCBvbiB0aGUgaW5pdGlhbCByZW5kZXIgaW4gYSA8U3RhdGljUm91dGVyPi4gXCIgKyBcIlRoaXMgaXMgYSBuby1vcCwgYnV0IHlvdSBzaG91bGQgbW9kaWZ5IHlvdXIgY29kZSBzbyB0aGUgPE5hdmlnYXRlPiBpcyBcIiArIFwib25seSBldmVyIHJlbmRlcmVkIGluIHJlc3BvbnNlIHRvIHNvbWUgdXNlciBpbnRlcmFjdGlvbiBvciBzdGF0ZSBjaGFuZ2UuXCIpIDogdm9pZCAwO1xuICBsZXQgZGF0YVJvdXRlclN0YXRlID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgbGV0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBdm9pZCBraWNraW5nIG9mZiBtdWx0aXBsZSBuYXZpZ2F0aW9ucyBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGFcbiAgICAvLyBkYXRhLXJvdXRlciBuYXZpZ2F0aW9uLCBzaW5jZSBjb21wb25lbnRzIGdldCByZS1yZW5kZXJlZCB3aGVuIHdlIGVudGVyXG4gICAgLy8gYSBzdWJtaXR0aW5nL2xvYWRpbmcgc3RhdGVcbiAgICBpZiAoZGF0YVJvdXRlclN0YXRlICYmIGRhdGFSb3V0ZXJTdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlICE9PSBcImlkbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5hdmlnYXRlKHRvLCB7XG4gICAgICByZXBsYWNlLFxuICAgICAgc3RhdGUsXG4gICAgICByZWxhdGl2ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY2hpbGQgcm91dGUncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2NvbXBvbmVudHMvb3V0bGV0XG4gKi9cbmZ1bmN0aW9uIE91dGxldChwcm9wcykge1xuICByZXR1cm4gdXNlT3V0bGV0KHByb3BzLmNvbnRleHQpO1xufVxuXG4vKipcbiAqIERlY2xhcmVzIGFuIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYXQgYSBjZXJ0YWluIFVSTCBwYXRoLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL3JvdXRlXG4gKi9cbmZ1bmN0aW9uIFJvdXRlKF9wcm9wcykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiQSA8Um91dGU+IGlzIG9ubHkgZXZlciB0byBiZSB1c2VkIGFzIHRoZSBjaGlsZCBvZiA8Um91dGVzPiBlbGVtZW50LCBcIiArIFwibmV2ZXIgcmVuZGVyZWQgZGlyZWN0bHkuIFBsZWFzZSB3cmFwIHlvdXIgPFJvdXRlPiBpbiBhIDxSb3V0ZXM+LlwiKSA6IGludmFyaWFudChmYWxzZSkgO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGxvY2F0aW9uIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBhcHAuXG4gKlxuICogTm90ZTogWW91IHVzdWFsbHkgd29uJ3QgcmVuZGVyIGEgPFJvdXRlcj4gZGlyZWN0bHkuIEluc3RlYWQsIHlvdSdsbCByZW5kZXIgYVxuICogcm91dGVyIHRoYXQgaXMgbW9yZSBzcGVjaWZpYyB0byB5b3VyIGVudmlyb25tZW50IHN1Y2ggYXMgYSA8QnJvd3NlclJvdXRlcj5cbiAqIGluIHdlYiBicm93c2VycyBvciBhIDxTdGF0aWNSb3V0ZXI+IGZvciBzZXJ2ZXIgcmVuZGVyaW5nLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9yb3V0ZXJzL3JvdXRlclxuICovXG5mdW5jdGlvbiBSb3V0ZXIoX3JlZjQpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWVQcm9wID0gXCIvXCIsXG4gICAgY2hpbGRyZW4gPSBudWxsLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvblByb3AsXG4gICAgbmF2aWdhdGlvblR5cGUgPSBBY3Rpb24uUG9wLFxuICAgIG5hdmlnYXRvcixcbiAgICBzdGF0aWM6IHN0YXRpY1Byb3AgPSBmYWxzZVxuICB9ID0gX3JlZjQ7XG4gICEhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IGNhbm5vdCByZW5kZXIgYSA8Um91dGVyPiBpbnNpZGUgYW5vdGhlciA8Um91dGVyPi5cIiArIFwiIFlvdSBzaG91bGQgbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gb25lIGluIHlvdXIgYXBwLlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7IC8vIFByZXNlcnZlIHRyYWlsaW5nIHNsYXNoZXMgb24gYmFzZW5hbWUsIHNvIHdlIGNhbiBsZXQgdGhlIHVzZXIgY29udHJvbFxuICAvLyB0aGUgZW5mb3JjZW1lbnQgb2YgdHJhaWxpbmcgc2xhc2hlcyB0aHJvdWdob3V0IHRoZSBhcHBcblxuICBsZXQgYmFzZW5hbWUgPSBiYXNlbmFtZVByb3AucmVwbGFjZSgvXlxcLyovLCBcIi9cIik7XG4gIGxldCBuYXZpZ2F0aW9uQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBiYXNlbmFtZSxcbiAgICBuYXZpZ2F0b3IsXG4gICAgc3RhdGljOiBzdGF0aWNQcm9wXG4gIH0pLCBbYmFzZW5hbWUsIG5hdmlnYXRvciwgc3RhdGljUHJvcF0pO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb25Qcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgbG9jYXRpb25Qcm9wID0gcGFyc2VQYXRoKGxvY2F0aW9uUHJvcCk7XG4gIH1cblxuICBsZXQge1xuICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIixcbiAgICBzdGF0ZSA9IG51bGwsXG4gICAga2V5ID0gXCJkZWZhdWx0XCJcbiAgfSA9IGxvY2F0aW9uUHJvcDtcbiAgbGV0IGxvY2F0aW9uID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHRyYWlsaW5nUGF0aG5hbWUgPSBzdHJpcEJhc2VuYW1lKHBhdGhuYW1lLCBiYXNlbmFtZSk7XG5cbiAgICBpZiAodHJhaWxpbmdQYXRobmFtZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHRyYWlsaW5nUGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoLFxuICAgICAgc3RhdGUsXG4gICAgICBrZXlcbiAgICB9O1xuICB9LCBbYmFzZW5hbWUsIHBhdGhuYW1lLCBzZWFyY2gsIGhhc2gsIHN0YXRlLCBrZXldKTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhsb2NhdGlvbiAhPSBudWxsLCBcIjxSb3V0ZXIgYmFzZW5hbWU9XFxcIlwiICsgYmFzZW5hbWUgKyBcIlxcXCI+IGlzIG5vdCBhYmxlIHRvIG1hdGNoIHRoZSBVUkwgXCIgKyAoXCJcXFwiXCIgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2ggKyBcIlxcXCIgYmVjYXVzZSBpdCBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBcIikgKyBcImJhc2VuYW1lLCBzbyB0aGUgPFJvdXRlcj4gd29uJ3QgcmVuZGVyIGFueXRoaW5nLlwiKSA6IHZvaWQgMDtcblxuICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5hdmlnYXRpb25Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG5hdmlnYXRpb25Db250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICB2YWx1ZToge1xuICAgICAgbG9jYXRpb24sXG4gICAgICBuYXZpZ2F0aW9uVHlwZVxuICAgIH1cbiAgfSkpO1xufVxuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBhIG5lc3RlZCB0cmVlIG9mIDxSb3V0ZT4gZWxlbWVudHMgdGhhdCByZW5kZXJzIHRoZSBicmFuY2hcbiAqIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL3JvdXRlc1xuICovXG5mdW5jdGlvbiBSb3V0ZXMoX3JlZjUpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlbixcbiAgICBsb2NhdGlvblxuICB9ID0gX3JlZjU7XG4gIGxldCBkYXRhUm91dGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlckNvbnRleHQpOyAvLyBXaGVuIGluIGEgRGF0YVJvdXRlckNvbnRleHQgX3dpdGhvdXRfIGNoaWxkcmVuLCB3ZSB1c2UgdGhlIHJvdXRlciByb3V0ZXNcbiAgLy8gZGlyZWN0bHkuICBJZiB3ZSBoYXZlIGNoaWxkcmVuLCB0aGVuIHdlJ3JlIGluIGEgZGVzY2VuZGFudCB0cmVlIGFuZCB3ZVxuICAvLyBuZWVkIHRvIHVzZSBjaGlsZCByb3V0ZXMuXG5cbiAgbGV0IHJvdXRlcyA9IGRhdGFSb3V0ZXJDb250ZXh0ICYmICFjaGlsZHJlbiA/IGRhdGFSb3V0ZXJDb250ZXh0LnJvdXRlci5yb3V0ZXMgOiBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICByZXR1cm4gdXNlUm91dGVzKHJvdXRlcywgbG9jYXRpb24pO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCB0byB1c2UgZm9yIHJlbmRlcmluZyBsYXppbHkgbG9hZGVkIGRhdGEgZnJvbSByZXR1cm5pbmcgZGVmZXIoKVxuICogaW4gYSBsb2FkZXIgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gQXdhaXQoX3JlZjYpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlbixcbiAgICBlcnJvckVsZW1lbnQsXG4gICAgcmVzb2x2ZVxuICB9ID0gX3JlZjY7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBd2FpdEVycm9yQm91bmRhcnksIHtcbiAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgIGVycm9yRWxlbWVudDogZXJyb3JFbGVtZW50XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlc29sdmVBd2FpdCwgbnVsbCwgY2hpbGRyZW4pKTtcbn1cbnZhciBBd2FpdFJlbmRlclN0YXR1cztcblxuKGZ1bmN0aW9uIChBd2FpdFJlbmRlclN0YXR1cykge1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcInBlbmRpbmdcIl0gPSAwXSA9IFwicGVuZGluZ1wiO1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcInN1Y2Nlc3NcIl0gPSAxXSA9IFwic3VjY2Vzc1wiO1xuICBBd2FpdFJlbmRlclN0YXR1c1tBd2FpdFJlbmRlclN0YXR1c1tcImVycm9yXCJdID0gMl0gPSBcImVycm9yXCI7XG59KShBd2FpdFJlbmRlclN0YXR1cyB8fCAoQXdhaXRSZW5kZXJTdGF0dXMgPSB7fSkpO1xuXG5jb25zdCBuZXZlclNldHRsZWRQcm9taXNlID0gbmV3IFByb21pc2UoKCkgPT4ge30pO1xuXG5jbGFzcyBBd2FpdEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3I6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvclxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgY29uc29sZS5lcnJvcihcIjxBd2FpdD4gY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlclwiLCBlcnJvciwgZXJyb3JJbmZvKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBlcnJvckVsZW1lbnQsXG4gICAgICByZXNvbHZlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHByb21pc2UgPSBudWxsO1xuICAgIGxldCBzdGF0dXMgPSBBd2FpdFJlbmRlclN0YXR1cy5wZW5kaW5nO1xuXG4gICAgaWYgKCEocmVzb2x2ZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICAvLyBEaWRuJ3QgZ2V0IGEgcHJvbWlzZSAtIHByb3ZpZGUgYXMgYSByZXNvbHZlZCBwcm9taXNlXG4gICAgICBzdGF0dXMgPSBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzO1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX3RyYWNrZWRcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHRydWVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2RhdGFcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgLy8gQ2F1Z2h0IGEgcmVuZGVyIGVycm9yLCBwcm92aWRlIGl0IGFzIGEgcmVqZWN0ZWQgcHJvbWlzZVxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3I7XG4gICAgICBsZXQgcmVuZGVyRXJyb3IgPSB0aGlzLnN0YXRlLmVycm9yO1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KCkuY2F0Y2goKCkgPT4ge30pOyAvLyBBdm9pZCB1bmhhbmRsZWQgcmVqZWN0aW9uIHdhcm5pbmdzXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gcmVuZGVyRXJyb3JcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZS5fdHJhY2tlZCkge1xuICAgICAgLy8gQWxyZWFkeSB0cmFja2VkIHByb21pc2UgLSBjaGVjayBjb250ZW50c1xuICAgICAgcHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICBzdGF0dXMgPSBwcm9taXNlLl9lcnJvciAhPT0gdW5kZWZpbmVkID8gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgOiBwcm9taXNlLl9kYXRhICE9PSB1bmRlZmluZWQgPyBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzIDogQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmF3ICh1bnRyYWNrZWQpIHByb21pc2UgLSB0cmFjayBpdFxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSByZXNvbHZlLnRoZW4oZGF0YSA9PiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfZGF0YVwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZGF0YVxuICAgICAgfSksIGVycm9yID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZXJyb3JcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvciAmJiBwcm9taXNlLl9lcnJvciBpbnN0YW5jZW9mIEFib3J0ZWREZWZlcnJlZEVycm9yKSB7XG4gICAgICAvLyBGcmVlemUgdGhlIFVJIGJ5IHRocm93aW5nIGEgbmV2ZXIgcmVzb2x2ZWQgcHJvbWlzZVxuICAgICAgdGhyb3cgbmV2ZXJTZXR0bGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvciAmJiAhZXJyb3JFbGVtZW50KSB7XG4gICAgICAvLyBObyBlcnJvckVsZW1lbnQsIHRocm93IHRvIHRoZSBuZWFyZXN0IHJvdXRlLWxldmVsIGVycm9yIGJvdW5kYXJ5XG4gICAgICB0aHJvdyBwcm9taXNlLl9lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5lcnJvcikge1xuICAgICAgLy8gUmVuZGVyIHZpYSBvdXIgZXJyb3JFbGVtZW50XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXdhaXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBwcm9taXNlLFxuICAgICAgICBjaGlsZHJlbjogZXJyb3JFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBBd2FpdFJlbmRlclN0YXR1cy5zdWNjZXNzKSB7XG4gICAgICAvLyBSZW5kZXIgY2hpbGRyZW4gd2l0aCByZXNvbHZlZCB2YWx1ZVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEF3YWl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogcHJvbWlzZSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KTtcbiAgICB9IC8vIFRocm93IHRvIHRoZSBzdXNwZW5zZSBib3VuZGFyeVxuXG5cbiAgICB0aHJvdyBwcm9taXNlO1xuICB9XG5cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIEluZGlyZWN0aW9uIHRvIGxldmVyYWdlIHVzZUFzeW5jVmFsdWUgZm9yIGEgcmVuZGVyLXByb3AgQVBJIG9uIDxBd2FpdD5cbiAqL1xuXG5cbmZ1bmN0aW9uIFJlc29sdmVBd2FpdChfcmVmNykge1xuICBsZXQge1xuICAgIGNoaWxkcmVuXG4gIH0gPSBfcmVmNztcbiAgbGV0IGRhdGEgPSB1c2VBc3luY1ZhbHVlKCk7XG5cbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuKGRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFVUSUxTXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlIGNvbmZpZyBmcm9tIGEgUmVhY3QgXCJjaGlsZHJlblwiIG9iamVjdCwgd2hpY2ggaXMgdXN1YWxseVxuICogZWl0aGVyIGEgYDxSb3V0ZT5gIGVsZW1lbnQgb3IgYW4gYXJyYXkgb2YgdGhlbS4gVXNlZCBpbnRlcm5hbGx5IGJ5XG4gKiBgPFJvdXRlcz5gIHRvIGNyZWF0ZSBhIHJvdXRlIGNvbmZpZyBmcm9tIGl0cyBjaGlsZHJlbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvY3JlYXRlLXJvdXRlcy1mcm9tLWNoaWxkcmVuXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oY2hpbGRyZW4sIHBhcmVudFBhdGgpIHtcbiAgaWYgKHBhcmVudFBhdGggPT09IHZvaWQgMCkge1xuICAgIHBhcmVudFBhdGggPSBbXTtcbiAgfVxuXG4gIGxldCByb3V0ZXMgPSBbXTtcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAvLyBJZ25vcmUgbm9uLWVsZW1lbnRzLiBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbW9yZSBlYXNpbHkgaW5saW5lXG4gICAgICAvLyBjb25kaXRpb25hbHMgaW4gdGhlaXIgcm91dGUgY29uZmlnLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgICAvLyBUcmFuc3BhcmVudGx5IHN1cHBvcnQgUmVhY3QuRnJhZ21lbnQgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICAgIHJvdXRlcy5wdXNoLmFwcGx5KHJvdXRlcywgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHBhcmVudFBhdGgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAhKGVsZW1lbnQudHlwZSA9PT0gUm91dGUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIltcIiArICh0eXBlb2YgZWxlbWVudC50eXBlID09PSBcInN0cmluZ1wiID8gZWxlbWVudC50eXBlIDogZWxlbWVudC50eXBlLm5hbWUpICsgXCJdIGlzIG5vdCBhIDxSb3V0ZT4gY29tcG9uZW50LiBBbGwgY29tcG9uZW50IGNoaWxkcmVuIG9mIDxSb3V0ZXM+IG11c3QgYmUgYSA8Um91dGU+IG9yIDxSZWFjdC5GcmFnbWVudD5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEoIWVsZW1lbnQucHJvcHMuaW5kZXggfHwgIWVsZW1lbnQucHJvcHMuY2hpbGRyZW4pID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIkFuIGluZGV4IHJvdXRlIGNhbm5vdCBoYXZlIGNoaWxkIHJvdXRlcy5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGxldCB0cmVlUGF0aCA9IFsuLi5wYXJlbnRQYXRoLCBpbmRleF07XG4gICAgbGV0IHJvdXRlID0ge1xuICAgICAgaWQ6IGVsZW1lbnQucHJvcHMuaWQgfHwgdHJlZVBhdGguam9pbihcIi1cIiksXG4gICAgICBjYXNlU2Vuc2l0aXZlOiBlbGVtZW50LnByb3BzLmNhc2VTZW5zaXRpdmUsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LnByb3BzLmVsZW1lbnQsXG4gICAgICBpbmRleDogZWxlbWVudC5wcm9wcy5pbmRleCxcbiAgICAgIHBhdGg6IGVsZW1lbnQucHJvcHMucGF0aCxcbiAgICAgIGxvYWRlcjogZWxlbWVudC5wcm9wcy5sb2FkZXIsXG4gICAgICBhY3Rpb246IGVsZW1lbnQucHJvcHMuYWN0aW9uLFxuICAgICAgZXJyb3JFbGVtZW50OiBlbGVtZW50LnByb3BzLmVycm9yRWxlbWVudCxcbiAgICAgIGhhc0Vycm9yQm91bmRhcnk6IGVsZW1lbnQucHJvcHMuZXJyb3JFbGVtZW50ICE9IG51bGwsXG4gICAgICBzaG91bGRSZXZhbGlkYXRlOiBlbGVtZW50LnByb3BzLnNob3VsZFJldmFsaWRhdGUsXG4gICAgICBoYW5kbGU6IGVsZW1lbnQucHJvcHMuaGFuZGxlXG4gICAgfTtcblxuICAgIGlmIChlbGVtZW50LnByb3BzLmNoaWxkcmVuKSB7XG4gICAgICByb3V0ZS5jaGlsZHJlbiA9IGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbihlbGVtZW50LnByb3BzLmNoaWxkcmVuLCB0cmVlUGF0aCk7XG4gICAgfVxuXG4gICAgcm91dGVzLnB1c2gocm91dGUpO1xuICB9KTtcbiAgcmV0dXJuIHJvdXRlcztcbn1cbi8qKlxuICogUmVuZGVycyB0aGUgcmVzdWx0IG9mIGBtYXRjaFJvdXRlcygpYCBpbnRvIGEgUmVhY3QgZWxlbWVudC5cbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJNYXRjaGVzKG1hdGNoZXMpIHtcbiAgcmV0dXJuIF9yZW5kZXJNYXRjaGVzKG1hdGNoZXMpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogV2FsayB0aGUgcm91dGUgdHJlZSBhbmQgYWRkIGhhc0Vycm9yQm91bmRhcnkgaWYgaXQncyBub3QgcHJvdmlkZWQsIHNvIHRoYXRcbiAqIHVzZXJzIHByb3ZpZGluZyBtYW51YWwgcm91dGUgYXJyYXlzIGNhbiBqdXN0IHNwZWNpZnkgZXJyb3JFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocm91dGUgPT4ge1xuICAgIGxldCByb3V0ZUNsb25lID0gX2V4dGVuZHMoe30sIHJvdXRlKTtcblxuICAgIGlmIChyb3V0ZUNsb25lLmhhc0Vycm9yQm91bmRhcnkgPT0gbnVsbCkge1xuICAgICAgcm91dGVDbG9uZS5oYXNFcnJvckJvdW5kYXJ5ID0gcm91dGVDbG9uZS5lcnJvckVsZW1lbnQgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocm91dGVDbG9uZS5jaGlsZHJlbikge1xuICAgICAgcm91dGVDbG9uZS5jaGlsZHJlbiA9IGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVDbG9uZS5jaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlQ2xvbmU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW1vcnlSb3V0ZXIocm91dGVzLCBvcHRzKSB7XG4gIHJldHVybiBjcmVhdGVSb3V0ZXIoe1xuICAgIGJhc2VuYW1lOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmJhc2VuYW1lLFxuICAgIGhpc3Rvcnk6IGNyZWF0ZU1lbW9yeUhpc3Rvcnkoe1xuICAgICAgaW5pdGlhbEVudHJpZXM6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaW5pdGlhbEVudHJpZXMsXG4gICAgICBpbml0aWFsSW5kZXg6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaW5pdGlhbEluZGV4XG4gICAgfSksXG4gICAgaHlkcmF0aW9uRGF0YTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5oeWRyYXRpb25EYXRhLFxuICAgIHJvdXRlczogZW5oYW5jZU1hbnVhbFJvdXRlT2JqZWN0cyhyb3V0ZXMpXG4gIH0pLmluaXRpYWxpemUoKTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgeyBBd2FpdCwgTWVtb3J5Um91dGVyLCBOYXZpZ2F0ZSwgT3V0bGV0LCBSb3V0ZSwgUm91dGVyLCBSb3V0ZXJQcm92aWRlciwgUm91dGVzLCBEYXRhUm91dGVyQ29udGV4dCBhcyBVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQsIERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgYXMgVU5TQUZFX0RhdGFSb3V0ZXJTdGF0ZUNvbnRleHQsIERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0IGFzIFVOU0FGRV9EYXRhU3RhdGljUm91dGVyQ29udGV4dCwgTG9jYXRpb25Db250ZXh0IGFzIFVOU0FGRV9Mb2NhdGlvbkNvbnRleHQsIE5hdmlnYXRpb25Db250ZXh0IGFzIFVOU0FGRV9OYXZpZ2F0aW9uQ29udGV4dCwgUm91dGVDb250ZXh0IGFzIFVOU0FGRV9Sb3V0ZUNvbnRleHQsIGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMgYXMgVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMsIGNyZWF0ZU1lbW9yeVJvdXRlciwgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuLCBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4gYXMgY3JlYXRlUm91dGVzRnJvbUVsZW1lbnRzLCByZW5kZXJNYXRjaGVzLCB1c2VBY3Rpb25EYXRhLCB1c2VBc3luY0Vycm9yLCB1c2VBc3luY1ZhbHVlLCB1c2VIcmVmLCB1c2VJblJvdXRlckNvbnRleHQsIHVzZUxvYWRlckRhdGEsIHVzZUxvY2F0aW9uLCB1c2VNYXRjaCwgdXNlTWF0Y2hlcywgdXNlTmF2aWdhdGUsIHVzZU5hdmlnYXRpb24sIHVzZU5hdmlnYXRpb25UeXBlLCB1c2VPdXRsZXQsIHVzZU91dGxldENvbnRleHQsIHVzZVBhcmFtcywgdXNlUmVzb2x2ZWRQYXRoLCB1c2VSZXZhbGlkYXRvciwgdXNlUm91dGVFcnJvciwgdXNlUm91dGVMb2FkZXJEYXRhLCB1c2VSb3V0ZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2VbMl0hLi9kM3Y0cHAuc2Nzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2VbMl0hLi9kM3Y0cHAuc2Nzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYWRnZSA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBCYWRnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQmFkZ2UsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQmFkZ2UoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQmFkZ2UucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogJ2JhZGdlICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQmFkZ2U7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5CYWRnZSA9IEJhZGdlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnV0dG9uID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIFdhdmVzXzEgPSByZXF1aXJlKFwiLi9XYXZlc1wiKTtcbnZhciBCdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1dHRvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdXR0b24ocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVsID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXNhdGlvbiBvZiB0aGUgd2F2ZSBlZmZlY3QgYWZ0ZXIgdGhlIGNvbXBvbmVudCBkaWQgbW91bnRcbiAgICAgKi9cbiAgICBCdXR0b24ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5lbCkge1xuICAgICAgICAgICAgbmV3IFdhdmVzXzEuZGVmYXVsdCh0aGlzLmVsLCB7IGR1cmF0aW9uOiA5NTAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJ1dHRvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gXCJidG4gd2F2ZXMtZWZmZWN0IFwiO1xuICAgICAgICAvLyBpZiAodGhpcy5wcm9wcy5tb2RlbCA9PSBcImNpcmNsZVwiKSB7XG4gICAgICAgIC8vICAgY2xhc3NOYW1lICs9IFwiYnRuLWZsb2F0aW5nIFwiO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmICh0aGlzLnByb3BzLnNpemUgPT0gXCJsYXJnZVwiKSB7XG4gICAgICAgIC8vICAgY2xhc3NOYW1lICs9IFwiYnRuLWxhcmdlIFwiO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmICh0aGlzLnByb3BzLnNpemUgPT0gXCJzbWFsbFwiKSB7XG4gICAgICAgIC8vICAgY2xhc3NOYW1lICs9IFwiYnRuLXNtYWxsIFwiO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5lbCA9IGVsO1xuICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBjbGFzc05hbWUgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1dHRvbjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkJ1dHRvbiA9IEJ1dHRvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFdhdmVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFdhdmVzKGNtcCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmVsID0gY21wO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAvL1dyYXAgaW5wdXQgaW5zaWRlIDxpPiB0YWdcbiAgICAgICAgdGhpcy53cmFwSW5wdXQoKTtcbiAgICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykge1xuICAgICAgICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy50cmlnZ2VyRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIF90aGlzLnRyaWdnZXJFZmZlY3QuYmluZChfdGhpcykoZSk7XG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG4gICAgV2F2ZXMucHJvdG90eXBlLnNob3dFZmZlY3QgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvLyBEaXNhYmxlIHJpZ2h0IGNsaWNrXG4gICAgICAgIGlmIChlLmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSByaXBwbGVcbiAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICByaXBwbGUuY2xhc3NOYW1lID0gJ3dhdmVzLXJpcHBsZSc7XG4gICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQocmlwcGxlKTtcbiAgICAgICAgdGhpcy5yaXBwbGUgPSByaXBwbGU7XG4gICAgICAgIC8vIEdldCBjbGljayBjb29yZGluYXRlIGFuZCBlbGVtZW50IHdpdGRoXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLm9mZnNldCgpO1xuICAgICAgICB2YXIgcmVsYXRpdmVZID0gKGUucGFnZVkgLSBwb3MudG9wKTtcbiAgICAgICAgdmFyIHJlbGF0aXZlWCA9IChlLnBhZ2VYIC0gcG9zLmxlZnQpO1xuICAgICAgICB2YXIgc2NhbGUgPSAnc2NhbGUoJyArICgodGhpcy5lbC5jbGllbnRXaWR0aCAvIDEwMCkgKiAxMCkgKyAnKSc7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHRvdWNoIGRldmljZXNcbiAgICAgICAgaWYgKCd0b3VjaGVzJyBpbiBlKSB7XG4gICAgICAgICAgICByZWxhdGl2ZVkgPSAoZS50b3VjaGVzWzBdLnBhZ2VZIC0gcG9zLnRvcCk7XG4gICAgICAgICAgICByZWxhdGl2ZVggPSAoZS50b3VjaGVzWzBdLnBhZ2VYIC0gcG9zLmxlZnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF0dGFjaCBkYXRhIHRvIGVsZW1lbnRcbiAgICAgICAgdGhpcy5yaXBwbGUuc2V0QXR0cmlidXRlKCdkYXRhLWhvbGQnLCBEYXRlLm5vdygpKTtcbiAgICAgICAgdGhpcy5yaXBwbGUuc2V0QXR0cmlidXRlKCdkYXRhLXNjYWxlJywgc2NhbGUpO1xuICAgICAgICB0aGlzLnJpcHBsZS5zZXRBdHRyaWJ1dGUoJ2RhdGEteCcsIHJlbGF0aXZlWCk7XG4gICAgICAgIHRoaXMucmlwcGxlLnNldEF0dHJpYnV0ZSgnZGF0YS15JywgcmVsYXRpdmVZKTtcbiAgICAgICAgLy8gU2V0IHJpcHBsZSBwb3NpdGlvblxuICAgICAgICB2YXIgcmlwcGxlU3R5bGUgPSB7XG4gICAgICAgICAgICAndG9wJzogcmVsYXRpdmVZICsgJ3B4JyxcbiAgICAgICAgICAgICdsZWZ0JzogcmVsYXRpdmVYICsgJ3B4J1xuICAgICAgICB9O1xuICAgICAgICAvL3RoaXMucmlwcGxlLmNsYXNzTmFtZSA9ICB0aGlzLnJpcHBsZS5jbGFzc05hbWUgKyAnIHdhdmVzLW5vdHJhbnNpdGlvbic7XG4gICAgICAgIHRoaXMucmlwcGxlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0aGlzLmNvbnZlcnRTdHlsZShyaXBwbGVTdHlsZSkpO1xuICAgICAgICB0aGlzLnJpcHBsZS5jbGFzc05hbWUgPSB0aGlzLnJpcHBsZS5jbGFzc05hbWUucmVwbGFjZSgnd2F2ZXMtbm90cmFuc2l0aW9uJywgJycpO1xuICAgICAgICAvLyBTY2FsZSB0aGUgcmlwcGxlXG4gICAgICAgIHJpcHBsZVN0eWxlWyctd2Via2l0LXRyYW5zZm9ybSddID0gc2NhbGU7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctbW96LXRyYW5zZm9ybSddID0gc2NhbGU7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctbXMtdHJhbnNmb3JtJ10gPSBzY2FsZTtcbiAgICAgICAgcmlwcGxlU3R5bGVbJy1vLXRyYW5zZm9ybSddID0gc2NhbGU7XG4gICAgICAgIHJpcHBsZVN0eWxlLnRyYW5zZm9ybSA9IHNjYWxlO1xuICAgICAgICByaXBwbGVTdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICByaXBwbGVTdHlsZVsnLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uJ10gPSAyICogdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcyc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctbW96LXRyYW5zaXRpb24tZHVyYXRpb24nXSA9IDIgKiB0aGlzLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJy1vLXRyYW5zaXRpb24tZHVyYXRpb24nXSA9IDIgKiB0aGlzLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJ3RyYW5zaXRpb24tZHVyYXRpb24nXSA9IDIgKiB0aGlzLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJy13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nXSA9ICdjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJy1tb3otdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nXSA9ICdjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJy1vLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJ10gPSAnY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiddID0gJ2N1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCknO1xuICAgICAgICB0aGlzLnJpcHBsZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdGhpcy5jb252ZXJ0U3R5bGUocmlwcGxlU3R5bGUpKTtcbiAgICB9O1xuICAgIFdhdmVzLnByb3RvdHlwZS5oaWRlRWZmZWN0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy9FZmZlY3QuaGlkZVxuICAgICAgICB2YXIgcmlwcGxlID0gdGhpcy5lbC5sYXN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAocmlwcGxlICYmIHJpcHBsZS5jbGFzc0xpc3QuY29udGFpbnMoXCJ3YXZlcy1yaXBwbGVcIikpIHtcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZVggPSByaXBwbGUuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKTtcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZVkgPSByaXBwbGUuZ2V0QXR0cmlidXRlKCdkYXRhLXknKTtcbiAgICAgICAgICAgIHZhciBzY2FsZSA9IHJpcHBsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2NhbGUnKTtcbiAgICAgICAgICAgIC8vIEdldCBkZWxheSBiZWV0d2VlbiBtb3VzZWRvd24gYW5kIG1vdXNlIGxlYXZlXG4gICAgICAgICAgICB2YXIgZGlmZiA9IERhdGUubm93KCkgLSBOdW1iZXIocmlwcGxlLmdldEF0dHJpYnV0ZSgnZGF0YS1ob2xkJykpO1xuICAgICAgICAgICAgdmFyIGRlbGF5ID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gMiAtIGRpZmY7XG4gICAgICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgICAgICAgIC8vIEZhZGUgb3V0IHJpcHBsZSBhZnRlciBkZWxheVxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgICAgICAndG9wJzogcmVsYXRpdmVZICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgJ2xlZnQnOiByZWxhdGl2ZVggKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eSc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gRHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbic6IG1lLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tb3otdHJhbnNpdGlvbi1kdXJhdGlvbic6IG1lLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zaXRpb24tZHVyYXRpb24nOiBtZS5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcycsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uLWR1cmF0aW9uJzogbWUub3B0aW9ucy5kdXJhdGlvbiAvIDMgKyAnbXMnLFxuICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0nOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgJy1tb3otdHJhbnNmb3JtJzogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICctby10cmFuc2Zvcm0nOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYW5zZm9ybSc6IHNjYWxlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmlwcGxlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBtZS5jb252ZXJ0U3R5bGUoc3R5bGUpKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lLmVsLnJlbW92ZUNoaWxkKHJpcHBsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIG1lLm9wdGlvbnMuZHVyYXRpb24pO1xuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBXYXZlcy5wcm90b3R5cGUud3JhcElucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmVsO1xuICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIC8vIElmIGlucHV0IGFscmVhZHkgaGF2ZSBwYXJlbnQganVzdCBwYXNzIHRocm91Z2hcbiAgICAgICAgICAgIGlmIChwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaScgJiYgcGFyZW50LmNsYXNzTmFtZS5pbmRleE9mKCd3YXZlcy1lZmZlY3QnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQdXQgZWxlbWVudCBjbGFzcyBhbmQgc3R5bGUgdG8gdGhlIHNwZWNpZmllZCBwYXJlbnRcbiAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICAgICAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAnIHdhdmVzLWlucHV0LXdyYXBwZXInO1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRTdHlsZSA9IGVsLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgICAgIGlmICghZWxlbWVudFN0eWxlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBlbGVtZW50U3R5bGUpO1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gJ3dhdmVzLWJ1dHRvbi1pbnB1dCc7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICAvLyBQdXQgZWxlbWVudCBhcyBjaGlsZFxuICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh3cmFwcGVyLCBlbCk7XG4gICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2F2ZXMucHJvdG90eXBlLnRyaWdnZXJFZmZlY3QgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnNob3dFZmZlY3QoZSk7XG4gICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhpZGVFZmZlY3QuYmluZChfdGhpcykoZSk7XG4gICAgICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oaWRlRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdGhpcy5oaWRlRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdGhpcy5oaWRlRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICB9LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdGhpcy5oaWRlRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICB9LCBmYWxzZSk7XG4gICAgfTtcbiAgICBXYXZlcy5wcm90b3R5cGUuaXNXaW5kb3cgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuICAgIH07XG4gICAgV2F2ZXMucHJvdG90eXBlLmdldFdpbmRvdyA9IGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzV2luZG93KGVsZW0pID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0VmlldztcbiAgICB9O1xuICAgIFdhdmVzLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkb2NFbGVtLCB3aW4sIGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sIGRvYyA9IHRoaXMuZWwgJiYgdGhpcy5lbC5vd25lckRvY3VtZW50O1xuICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gdHlwZW9mIHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYm94ID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB3aW4gPSB0aGlzLmdldFdpbmRvdyhkb2MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXG4gICAgICAgICAgICBsZWZ0OiBib3gubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0uY2xpZW50TGVmdFxuICAgICAgICB9O1xuICAgIH07XG4gICAgV2F2ZXMucHJvdG90eXBlLmNvbnZlcnRTdHlsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIHN0eWxlID0gJyc7XG4gICAgICAgIGZvciAodmFyIGEgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGEpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUgKz0gKGEgKyAnOicgKyBvYmpbYV0gKyAnOycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICAgIHJldHVybiBXYXZlcztcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBXYXZlcztcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNhcmRBY3Rpb24gPSBleHBvcnRzLkNhcmRUaXRsZSA9IGV4cG9ydHMuQ2FyZENvbnRlbnQgPSBleHBvcnRzLkNhcmQgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgQ2FyZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2FyZCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDYXJkKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIENhcmQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcImNhcmQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ2FyZDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNhcmQgPSBDYXJkO1xudmFyIENhcmRDb250ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDYXJkQ29udGVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDYXJkQ29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDYXJkQ29udGVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcImNhcmQtY29udGVudCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ2FyZENvbnRlbnQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5DYXJkQ29udGVudCA9IENhcmRDb250ZW50O1xudmFyIENhcmRUaXRsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2FyZFRpdGxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENhcmRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDYXJkVGl0bGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwiY2FyZC10aXRsZSBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ2FyZFRpdGxlO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ2FyZFRpdGxlID0gQ2FyZFRpdGxlO1xudmFyIENhcmRBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENhcmRBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2FyZEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDYXJkQWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwiY2FyZC1hY3Rpb24gIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBDYXJkQWN0aW9uO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ2FyZEFjdGlvbiA9IENhcmRBY3Rpb247XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DaGlwID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIENoaXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENoaXAsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2hpcCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDaGlwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogJ2NoaXAgJyArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKTsgfTtcbiAgICByZXR1cm4gQ2hpcDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNoaXAgPSBDaGlwO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ2hpcDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbGxhcHNUcmlnZ2VyID0gZXhwb3J0cy5Db2xsYXBzQm9keSA9IGV4cG9ydHMuQ29sbGFwc2libGUgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgSWNvbl8xID0gcmVxdWlyZShcIi4uL2ljb25zL0ljb25cIik7XG52YXIgQ29sbGFwc2libGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbGxhcHNpYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbGxhcHNpYmxlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIENvbGxhcHNpYmxlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJjb2xsYXBzaWJsZSBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sbGFwc2libGU7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Db2xsYXBzaWJsZSA9IENvbGxhcHNpYmxlO1xudmFyIENvbGxhcHNCb2R5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xsYXBzQm9keSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xsYXBzQm9keSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVsID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBDb2xsYXBzQm9keS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZWwgPSByZWY7XG4gICAgICAgICAgICB9LCBjbGFzc05hbWU6IFwiY29sbGFwc2libGUtYm9keSBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sbGFwc0JvZHk7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Db2xsYXBzQm9keSA9IENvbGxhcHNCb2R5O1xudmFyIENvbGxhcHNUcmlnZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xsYXBzVHJpZ2dlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xsYXBzVHJpZ2dlcigpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaXNPcGVuOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5lbCA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAgbmV3IFdhdmVzKHRoaXMuZWwsIHsgZHVyYXRpb246IDEwNTAgfSk7XG4gICAgfTtcbiAgICBDb2xsYXBzVHJpZ2dlci5wcm90b3R5cGUuc2hvd0hpZGVCb2R5ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZChlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLmNvbGxhcHNlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdmFyIGNvbGxhcHNpYmxlID0gdGhpcy5maW5kQ29sbGFwc2libGUuYmluZCh0aGlzKSgpO1xuICAgICAgICBpZiAoY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHZhciBib2R5RWwgPSBjb2xsYXBzaWJsZS5xdWVyeVNlbGVjdG9yKFwiLmNvbGxhcHNpYmxlLWJvZHlcIik7XG4gICAgICAgICAgICBpZiAoYm9keUVsKSB7XG4gICAgICAgICAgICAgICAgYm9keUVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLmZpbmRDb2xsYXBzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcmVudEVsID0gdGhpcy5lbCAmJiB0aGlzLmVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJlbnRFbCAmJiAhcGFyZW50RWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29sbGFwc2libGVcIikpIHtcbiAgICAgICAgICAgIHBhcmVudEVsID0gcGFyZW50RWwgJiYgcGFyZW50RWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50RWw7XG4gICAgfTtcbiAgICBDb2xsYXBzVHJpZ2dlci5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdmFyIGNvbGxhcHNpYmxlID0gdGhpcy5maW5kQ29sbGFwc2libGUuYmluZCh0aGlzKSgpO1xuICAgICAgICBpZiAoY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHZhciBib2R5RWwgPSBjb2xsYXBzaWJsZS5xdWVyeVNlbGVjdG9yKFwiLmNvbGxhcHNpYmxlLWJvZHlcIik7XG4gICAgICAgICAgICBpZiAoYm9keUVsKSB7XG4gICAgICAgICAgICAgICAgYm9keUVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNPcGVuO1xuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGljb24gPSAodGhpcy5zdGF0ZS5pc09wZW4gPT0gdHJ1ZSkgPyBSZWFjdC5jcmVhdGVFbGVtZW50KEljb25fMS5JY29uLCB7IHN0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIgfSB9LCBcImNoZXZyb25fZG93blwiKSA6XG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEljb25fMS5JY29uLCB7IHN0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIgfSB9LCBcImNoZXZyb25fcmlnaHRcIik7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyByZWY6IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5lbCA9IHJlZjtcbiAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJjb2xsYXBzaWJsZS1oZWFkZXIgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgb25DbGljazogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLnNob3dIaWRlQm9keS5iaW5kKF90aGlzKShlKTsgfSB9KSxcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sbGFwc1RyaWdnZXI7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Db2xsYXBzVHJpZ2dlciA9IENvbGxhcHNUcmlnZ2VyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29sbGVjdGlvbkl0ZW0gPSBleHBvcnRzLkNvbGxlY3Rpb24gPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgQ29sbGVjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29sbGVjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMucHJvcHMuY2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IHJlZjogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIF90aGlzLmVsID0gcjsgfSwgY2xhc3NOYW1lOiBcImNvbGxlY3Rpb24gXCIgKyAoY2xhc3NOYW1lIHx8IFwiXCIpIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xsZWN0aW9uO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ29sbGVjdGlvbiA9IENvbGxlY3Rpb247XG52YXIgQ29sbGVjdGlvbkl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbGxlY3Rpb25JdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbGxlY3Rpb25JdGVtKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIENvbGxlY3Rpb25JdGVtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyByZWY6IGZ1bmN0aW9uIChyKSB7IHJldHVybiBfdGhpcy5lbCA9IHI7IH0sIGNsYXNzTmFtZTogXCJjb2xsZWN0aW9uLWl0ZW0gXCIgKyAoY2xhc3NOYW1lIHx8IFwiXCIpIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xsZWN0aW9uSXRlbTtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNvbGxlY3Rpb25JdGVtID0gQ29sbGVjdGlvbkl0ZW07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWVsZCA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbi8vIEB0cy1pZ25vcmVcbnZhciBWID0gcmVxdWlyZShcIi4vcmV4XCIpO1xudmFyIEZpZWxkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaWVsZCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaWVsZChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBsYWJlbENsYXNzTmFtZTogJycsXG4gICAgICAgICAgICBmb2N1c0NvdW50OiAwLFxuICAgICAgICAgICAgZXJybXNnOiBcIlwiXG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmlkID0gX3RoaXMudXVpZHY0KCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRmllbGQucHJvdG90eXBlLmdldERlZmF1bHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgaWQ6IERhdGUubm93KCksXG4gICAgICAgICAgICBjbGFzc05hbWU6ICd2YWxpZGF0ZScsXG4gICAgICAgICAgICBsYWJlbDogJ1RleHQnLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgaWNvbjogJ2FjY291bnRfY2lyY2xlJ1xuICAgICAgICB9O1xuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbCAmJiB0aGlzLmVsLnZhbHVlO1xuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5lbCkge1xuICAgICAgICAgICAgdGhpcy5lbC52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZSh0cnVlKTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5vbkJsdXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsICYmICgodGhpcy5wcm9wcy5wbGFjZWhvbGRlciAhPT0gJycpIHx8ICh0aGlzLmVsICYmIHRoaXMuZWwudmFsdWUgIT09IFwiXCIpKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxhYmVsLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25CbHVyICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uQmx1ciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlKHRydWUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNDb3VudDogdGhpcy5zdGF0ZS5mb2N1c0NvdW50ICsgMSB9KTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5vbkZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWwgJiYgIXRoaXMubGFiZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uRm9jdXMgJiYgdHlwZW9mIHRoaXMucHJvcHMub25Gb2N1cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uRm9jdXMoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIChibHVyZSkge1xuICAgICAgICBpZiAoYmx1cmUgPT09IHZvaWQgMCkgeyBibHVyZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChibHVyZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzQ291bnQ6IHRoaXMuc3RhdGUuZm9jdXNDb3VudCArIDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZm9jdXNDb3VudCA+IDAgfHwgYmx1cmUpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG1pbiA9IF9hLm1pbiwgbWF4ID0gX2EubWF4LCByZXF1aXJlZCA9IF9hLnJlcXVpcmVkLCB2dHlwZSA9IF9hLnZ0eXBlLCB2dHlwZU1zZyA9IF9hLnZ0eXBlTXNnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC52YWx1ZSAmJiB0aGlzLmVsLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGhfMSA9IHRoaXMuZWwudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gJiYgbWF4ICYmIChsZW5ndGhfMSA8IG1pbiB8fCBsZW5ndGhfMSA+IG1heCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogbWluICE9IG1heCA/IFwiZG9pdCBhdm9pciB1bmUgbG9uZ2V1ciBjb21wcmlzZSBlbnRyZSBcIi5jb25jYXQobWluLCBcIiBldCBcIikuY29uY2F0KG1heCwgXCIuXCIpIDogXCJkb2l0IGF2b2lyIHVuZSBsb25nZXVyIGRlIFwiLmNvbmNhdChtaW4sIFwiIGNhcmFjdFxcdTAwRThyZXNcIikgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgndmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZUluVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbWluICYmIG1heCAmJiBsZW5ndGhfMSA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJybXNnOiBcImRvaXQgYXZvaXIgdW5lIGxvbmdldXIgbWF4aW1hbCBkZSBcIi5jb25jYXQobWF4LCBcIi5cIikgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgndmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZUluVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtaW4gJiYgIW1heCAmJiBsZW5ndGhfMSA8IG1pbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJybXNnOiBcImRvaXQgYXZvaXIgdW5lIGxvbmdldXIgbWluaW1hbCBkZSBcIi5jb25jYXQobWluLCBcIi5cIikgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgndmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZUluVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2dHlwZSAmJiAhVlt2dHlwZV0udGVzdCh0aGlzLmVsLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJybXNnOiB2dHlwZU1zZyB8fCBcIkRvaXQgXFx1MDBFQXRyZSB1biBcIi5jb25jYXQodnR5cGUsIFwiIHZhbGlkZS5cIikgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgndmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZUluVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogXCJcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgndmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJtc2c6IFwiTmUgcGV1IHBhcyBldHJlIHZpZGUuXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZUluVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogXCJcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlVmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmVsLmNsYXNzTGlzdC5hZGQoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUubWFrZUluVmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkJyk7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLm1ha2VWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgndmFsaWQnKTtcbiAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZCcpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsICYmICgodGhpcy5wcm9wcy5wbGFjZWhvbGRlciAhPT0gJycpIHx8ICh0aGlzLmVsICYmIHRoaXMuZWwudmFsdWUgIT09IFwiXCIpKSkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3NOYW1lOiAnYWN0aXZlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5vbktleVVwID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUgJiYgXCJFbnRlclwiID09PSBlLmtleSAmJiB0aGlzLnByb3BzLm9uRW50ZXJLZXkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uRW50ZXJLZXkoZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLnV1aWR2NCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICByZXR1cm4gKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLmdldEVycm9yVmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZXJybXNnICE9IG51bGwgJiYgdGhpcy5zdGF0ZS5lcnJtc2cgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImhlbHBlci10ZXh0XCIgfSwgdGhpcy5zdGF0ZS5lcnJtc2cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGVsZXRlIHByb3BzLnZ0eXBlTXNnO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyS2V5O1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1maWVsZFwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyByZWY6IGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIChfdGhpcy5sYWJlbCA9IHJlZik7IH0sIGh0bWxGb3I6IHRoaXMuaWQsIGNsYXNzTmFtZTogdGhpcy5zdGF0ZS5sYWJlbENsYXNzTmFtZSB9LCB0aGlzLnByb3BzLmxhYmVsICsgKHRoaXMucHJvcHMucmVxdWlyZWQgPT09IHRydWUgPyAnIConIDogJycpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfX2Fzc2lnbih7fSwgcHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVsID0gcmVmO1xuICAgICAgICAgICAgICAgIH0sIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8ICcnLCBvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIH0pLCBvbkZvY3VzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMub25Gb2N1cy5iaW5kKF90aGlzKShlKTsgfSwgdHlwZTogdGhpcy5wcm9wcy50eXBlIHx8IFwidGV4dFwiLCBvbkJsdXI6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5vbkJsdXIuYmluZChfdGhpcykoZSk7IH0sIG9uS2V5VXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5vbktleVVwLmJpbmQoX3RoaXMpKGUpOyB9LCBpZDogdGhpcy5pZCwgY2xhc3NOYW1lOiBcInZhbGlkYXRlIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpLFxuICAgICAgICAgICAgdGhpcy5nZXRFcnJvclZpZXcoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRmllbGQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5GaWVsZCA9IEZpZWxkO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGV4dGFyZWFBdXRvc2l6ZSA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBQcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcbnZhciBhdXRvc2l6ZSA9IHJlcXVpcmUoXCJhdXRvc2l6ZVwiKTtcbnZhciBsaW5lX2hlaWdodF8xID0gcmVxdWlyZShcIi4vbGluZS1oZWlnaHRcIik7XG52YXIgZ2V0TGluZUhlaWdodCA9IGxpbmVfaGVpZ2h0XzEuZGVmYXVsdDtcbnZhciBSRVNJWkVEID0gXCJhdXRvc2l6ZTpyZXNpemVkXCI7XG4vKipcbiAqIEEgbGlnaHQgcmVwbGFjZW1lbnQgZm9yIGJ1aWx0LWluIHRleHRhcmVhIGNvbXBvbmVudFxuICogd2hpY2ggYXV0b21hdGljYWx5IGFkanVzdHMgaXRzIGhlaWdodCB0byBtYXRjaCB0aGUgY29udGVudFxuICovXG52YXIgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUZXh0YXJlYUF1dG9zaXplQ2xhc3MsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGV4dGFyZWFBdXRvc2l6ZUNsYXNzKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICAgICAgX3RoaXMub25SZXNpemUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uUmVzaXplKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnVwZGF0ZUxpbmVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMudGV4dGFyZWEpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGdldExpbmVIZWlnaHQoX3RoaXMudGV4dGFyZWEpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBvbkNoYW5nZSA9IF90aGlzLnByb3BzLm9uQ2hhbmdlO1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbWF4Um93cyA9IF9hLm1heFJvd3MsIGFzeW5jID0gX2EuYXN5bmM7XG4gICAgICAgIGlmICh0eXBlb2YgbWF4Um93cyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMaW5lSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtYXhSb3dzID09PSBcIm51bWJlclwiIHx8IGFzeW5jKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICB0aGUgZGVmZXIgaXMgbmVlZGVkIHRvOlxuICAgICAgICAgICAgICAgIC0gZm9yY2UgXCJhdXRvc2l6ZVwiIHRvIGFjdGl2YXRlIHRoZSBzY3JvbGxiYXIgd2hlbiB0aGlzLnByb3BzLm1heFJvd3MgaXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgLSBzdXBwb3J0IFN0eWxlZENvbXBvbmVudHMgKHNlZSAjNzEpXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnRleHRhcmVhICYmIGF1dG9zaXplKF90aGlzLnRleHRhcmVhKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLnRleHRhcmVhICYmIGF1dG9zaXplKHRoaXMudGV4dGFyZWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRhcmVhLmFkZEV2ZW50TGlzdGVuZXIoUkVTSVpFRCwgdGhpcy5vblJlc2l6ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRleHRhcmVhQXV0b3NpemVDbGFzcy5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRhcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoUkVTSVpFRCwgdGhpcy5vblJlc2l6ZSk7XG4gICAgICAgICAgICBhdXRvc2l6ZS5kZXN0cm95KHRoaXMudGV4dGFyZWEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUZXh0YXJlYUF1dG9zaXplQ2xhc3MucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2IgPSBfYS5wcm9wcywgb25SZXNpemUgPSBfYi5vblJlc2l6ZSwgbWF4Um93cyA9IF9iLm1heFJvd3MsIG9uQ2hhbmdlID0gX2Iub25DaGFuZ2UsIHN0eWxlID0gX2Iuc3R5bGUsIGlubmVyUmVmID0gX2IuaW5uZXJSZWYsIGNoaWxkcmVuID0gX2IuY2hpbGRyZW4sIHByb3BzID0gX19yZXN0KF9iLCBbXCJvblJlc2l6ZVwiLCBcIm1heFJvd3NcIiwgXCJvbkNoYW5nZVwiLCBcInN0eWxlXCIsIFwiaW5uZXJSZWZcIiwgXCJjaGlsZHJlblwiXSksIGxpbmVIZWlnaHQgPSBfYS5zdGF0ZS5saW5lSGVpZ2h0O1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gbWF4Um93cyAmJiBsaW5lSGVpZ2h0ID8gbGluZUhlaWdodCAqIG1heFJvd3MgOiBudWxsO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCBfX2Fzc2lnbih7fSwgcHJvcHMsIHsgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNsYXNzTmFtZTogXCJ0ZXh0YXJlYSBcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSwgc3R5bGU6IG1heEhlaWdodCA/IF9fYXNzaWduKF9fYXNzaWduKHt9LCBzdHlsZSksIHsgbWF4SGVpZ2h0OiBtYXhIZWlnaHQgfSkgOiBzdHlsZSwgcmVmOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnRleHRhcmVhID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmlubmVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLmlubmVyUmVmKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5wcm9wcy5pbm5lclJlZikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5pbm5lclJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pLCBjaGlsZHJlbikpO1xuICAgIH07XG4gICAgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudGV4dGFyZWEgJiYgYXV0b3NpemUudXBkYXRlKHRoaXMudGV4dGFyZWEpO1xuICAgIH07XG4gICAgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgcm93czogMSxcbiAgICAgICAgYXN5bmM6IGZhbHNlXG4gICAgfTtcbiAgICBUZXh0YXJlYUF1dG9zaXplQ2xhc3MucHJvcFR5cGVzID0ge1xuICAgICAgICByb3dzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBtYXhSb3dzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGlubmVyUmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgICBhc3luYzogUHJvcFR5cGVzLmJvb2xcbiAgICB9O1xuICAgIHJldHVybiBUZXh0YXJlYUF1dG9zaXplQ2xhc3M7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5UZXh0YXJlYUF1dG9zaXplID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHRhcmVhQXV0b3NpemVDbGFzcywgX19hc3NpZ24oe30sIHByb3BzLCB7IGlubmVyUmVmOiByZWYgfSkpO1xufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIExvYWQgaW4gZGVwZW5kZW5jaWVzXG52YXIgY29tcHV0ZWRTdHlsZSA9IHJlcXVpcmUoJ2NvbXB1dGVkLXN0eWxlJyk7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYGxpbmUtaGVpZ2h0YCBvZiBhIGdpdmVuIG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBjYWxjdWxhdGUgbGluZSBoZWlnaHQgb2YuIE11c3QgYmUgaW4gdGhlIERPTS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGBsaW5lLWhlaWdodGAgb2YgdGhlIGVsZW1lbnQgaW4gcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGxpbmVIZWlnaHQobm9kZSkge1xuICAgIC8vIEdyYWIgdGhlIGxpbmUtaGVpZ2h0IHZpYSBzdHlsZVxuICAgIHZhciBsbkhlaWdodFN0ciA9IGNvbXB1dGVkU3R5bGUobm9kZSwgJ2xpbmUtaGVpZ2h0Jyk7XG4gICAgdmFyIGxuSGVpZ2h0ID0gcGFyc2VGbG9hdChsbkhlaWdodFN0cik7XG4gICAgLy8gSWYgdGhlIGxpbmVIZWlnaHQgZGlkIG5vdCBjb250YWluIGEgdW5pdCAoaS5lLiBpdCB3YXMgbnVtZXJpYyksIGNvbnZlcnQgaXQgdG8gZW1zIChlLmcuICcyLjMnID09PSAnMi4zZW0nKVxuICAgIGlmIChsbkhlaWdodFN0ciA9PT0gbG5IZWlnaHQgKyAnJykge1xuICAgICAgICAvLyBTYXZlIHRoZSBvbGQgbGluZUhlaWdodCBzdHlsZSBhbmQgdXBkYXRlIHRoZSBlbSB1bml0IHRvIHRoZSBlbGVtZW50XG4gICAgICAgIHZhciBfbG5IZWlnaHRTdHlsZSA9IG5vZGUuc3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgbm9kZS5zdHlsZS5saW5lSGVpZ2h0ID0gbG5IZWlnaHRTdHIgKyAnZW0nO1xuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGVtIGJhc2VkIGhlaWdodFxuICAgICAgICBsbkhlaWdodFN0ciA9IGNvbXB1dGVkU3R5bGUobm9kZSwgJ2xpbmUtaGVpZ2h0Jyk7XG4gICAgICAgIGxuSGVpZ2h0ID0gcGFyc2VGbG9hdChsbkhlaWdodFN0cik7XG4gICAgICAgIC8vIFJldmVydCB0aGUgbGluZUhlaWdodCBzdHlsZVxuICAgICAgICBpZiAoX2xuSGVpZ2h0U3R5bGUpIHtcbiAgICAgICAgICAgIG5vZGUuc3R5bGUubGluZUhlaWdodCA9IF9sbkhlaWdodFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy9kZWxldGUgbm9kZS5zdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBsaW5lSGVpZ2h0IGlzIGluIGBwdGAsIGNvbnZlcnQgaXQgdG8gcGl4ZWxzICg0cHggZm9yIDNwdClcbiAgICAvLyBERVY6IGBlbWAgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBgcHRgIGluIElFNlxuICAgIC8vIENvbnZlcnNpb24gcmF0aW8gZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGVuZ3RoXG4gICAgaWYgKGxuSGVpZ2h0U3RyLmluZGV4T2YoJ3B0JykgIT09IC0xKSB7XG4gICAgICAgIGxuSGVpZ2h0ICo9IDQ7XG4gICAgICAgIGxuSGVpZ2h0IC89IDM7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGxpbmVIZWlnaHQgaXMgaW4gYG1tYCwgY29udmVydCBpdCB0byBwaXhlbHMgKDk2cHggZm9yIDI1LjRtbSlcbiAgICB9XG4gICAgZWxzZSBpZiAobG5IZWlnaHRTdHIuaW5kZXhPZignbW0nKSAhPT0gLTEpIHtcbiAgICAgICAgbG5IZWlnaHQgKj0gOTY7XG4gICAgICAgIGxuSGVpZ2h0IC89IDI1LjQ7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGxpbmVIZWlnaHQgaXMgaW4gYGNtYCwgY29udmVydCBpdCB0byBwaXhlbHMgKDk2cHggZm9yIDIuNTRjbSlcbiAgICB9XG4gICAgZWxzZSBpZiAobG5IZWlnaHRTdHIuaW5kZXhPZignY20nKSAhPT0gLTEpIHtcbiAgICAgICAgbG5IZWlnaHQgKj0gOTY7XG4gICAgICAgIGxuSGVpZ2h0IC89IDIuNTQ7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGxpbmVIZWlnaHQgaXMgaW4gYGluYCwgY29udmVydCBpdCB0byBwaXhlbHMgKDk2cHggZm9yIDFpbilcbiAgICB9XG4gICAgZWxzZSBpZiAobG5IZWlnaHRTdHIuaW5kZXhPZignaW4nKSAhPT0gLTEpIHtcbiAgICAgICAgbG5IZWlnaHQgKj0gOTY7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGxpbmVIZWlnaHQgaXMgaW4gYHBjYCwgY29udmVydCBpdCB0byBwaXhlbHMgKDEycHQgZm9yIDFwYylcbiAgICB9XG4gICAgZWxzZSBpZiAobG5IZWlnaHRTdHIuaW5kZXhPZigncGMnKSAhPT0gLTEpIHtcbiAgICAgICAgbG5IZWlnaHQgKj0gMTY7XG4gICAgfVxuICAgIC8vIENvbnRpbnVlIG91ciBjb21wdXRhdGlvblxuICAgIGxuSGVpZ2h0ID0gTWF0aC5yb3VuZChsbkhlaWdodCk7XG4gICAgLy8gSWYgdGhlIGxpbmUtaGVpZ2h0IGlzIFwibm9ybWFsXCIsIGNhbGN1bGF0ZSBieSBmb250LXNpemVcbiAgICBpZiAobG5IZWlnaHRTdHIgPT09ICdub3JtYWwnKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBub2RlXG4gICAgICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG4gICAgICAgIHZhciBfbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO1xuICAgICAgICBfbm9kZS5pbm5lckhUTUwgPSAnJm5ic3A7JztcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHRleHQgYXJlYSwgcmVzZXQgaXQgdG8gb25seSAxIHJvd1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdvbGZzb24vbGluZS1oZWlnaHQvaXNzdWVzLzRcbiAgICAgICAgaWYgKG5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICAgIF9ub2RlLnNldEF0dHJpYnV0ZSgncm93cycsICcxJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBmb250LXNpemUgb2YgdGhlIGVsZW1lbnRcbiAgICAgICAgdmFyIGZvbnRTaXplU3RyID0gY29tcHV0ZWRTdHlsZShub2RlLCAnZm9udC1zaXplJyk7XG4gICAgICAgIF9ub2RlLnN0eWxlLmZvbnRTaXplID0gZm9udFNpemVTdHI7XG4gICAgICAgIC8vIFJlbW92ZSBkZWZhdWx0IHBhZGRpbmcvYm9yZGVyIHdoaWNoIGNhbiBhZmZlY3Qgb2Zmc2V0IGhlaWdodFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdvbGZzb24vbGluZS1oZWlnaHQvaXNzdWVzLzRcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L29mZnNldEhlaWdodFxuICAgICAgICBfbm9kZS5zdHlsZS5wYWRkaW5nID0gJzBweCc7XG4gICAgICAgIF9ub2RlLnN0eWxlLmJvcmRlciA9ICcwcHgnO1xuICAgICAgICAvLyBBcHBlbmQgaXQgdG8gdGhlIGJvZHlcbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBib2R5LmFwcGVuZENoaWxkKF9ub2RlKTtcbiAgICAgICAgLy8gQXNzdW1lIHRoZSBsaW5lIGhlaWdodCBvZiB0aGUgZWxlbWVudCBpcyB0aGUgaGVpZ2h0XG4gICAgICAgIHZhciBoZWlnaHQgPSBfbm9kZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGxuSGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAvLyBSZW1vdmUgb3VyIGNoaWxkIGZyb20gdGhlIERPTVxuICAgICAgICBib2R5LnJlbW92ZUNoaWxkKF9ub2RlKTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBjYWxjdWxhdGVkIGhlaWdodFxuICAgIHJldHVybiBsbkhlaWdodDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGxpbmVIZWlnaHQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFwibnVtXCI6IC9eWzAtOV0rJC8sXG4gICAgXCJudW1lcmljXCI6IC9eWzAtOV0rJC8sXG4gICAgXCJhbHBoYVwiOiAvXlthLXpBLVpfXSskLyxcbiAgICBcImFscGhhYmV0aWNcIjogL15bYS16QS1aX10rJC8sXG4gICAgXCJhbHBoYW51bVwiOiAvXlthLXpBLVowLTlfXSskLyxcbiAgICBcImFscGhhbnVtZXJpY1wiOiAvXlthLXpBLVowLTlfXSskLyxcbiAgICBcImVtYWlsXCI6IC9eKFwiKT8oPzpbXlxcLlwiXFxzXSkoPzooPzpbXFwuXSk/KD86W1xcd1xcLSEjJCUmJyorLz0/Xl9ge3x9fl0pKSpcXDFAKFxcd1tcXC1cXHddKlxcLil7MSw1fShbQS1aYS16XSl7Miw2fSQvLFxuICAgIFwidXJsXCI6IC8oKCheaHR0cHM/KXwoXmZ0cCkpOlxcL1xcLygoKFtcXC1cXHddK1xcLikrXFx3ezIsM30oXFwvWyVcXC1cXHddKyhcXC5cXHd7Mix9KT8pKigoW1xcd1xcLVxcLlxcP1xcXFxcXC8rQCYjO2B+PSUhXSopKFxcLlxcd3syLH0pPykqKXwobG9jYWxob3N0fExPQ0FMSE9TVCkpXFwvPykvaSxcbiAgICBcImlwQWRkcmVzc1wiOiAvXlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9JC8sXG4gICAgXCJwaG9uZVwiOiAvXig/Oig/OlxcK3wwMCkzM3wwKVxccypbMS05XSg/OlxcZHsyfSl7NH0kLyxcbiAgICBcImNvZGVQb3N0XCI6IC9eKCgoPyEoOTZ8OTd8OTh8OTl8MDApKSlbMC05XXs1fSkkfCgyQXwyQnwyYXwyYilbMC05XXszfSR8KDk3MXw5NzJ8OTczfDk3NHw5NzV8OTc2KVswLTldezJ9JC8sXG4gICAgXCJjb2RlUG9zdGFsXCI6IC9eKCgoPyEoOTZ8OTd8OTh8OTl8MDApKSlbMC05XXs1fSkkfCgyQXwyQnwyYXwyYilbMC05XXszfSR8KDk3MXw5NzJ8OTczfDk3NHw5NzV8OTc2KVswLTldezJ9JC8sXG4gICAgXCJ0aW1lXCI6IC9eKFsxLTldfDFbMC05XSk6KFswLTVdWzAtOV0pKFxcc1thfHBdbSkkLyxcbiAgICBcInByaWNlXCI6IC9eXFxkKyhcXC5cXGR7Mn0pPyQvLFxuICAgIFwicHJpeFwiOiAvXlxcZCsoXFwuXFxkezJ9KT8kLyxcbiAgICBcImRhdGVcIjogL14oMD9bMS05XXxbMTJdWzAtOV18M1swMV0pW1xcL1xcLV0oMD9bMS05XXwxWzAxMl0pW1xcL1xcLV1cXGR7NH0kLyxcbiAgICBcInR2YVwiOiAvXig1XFwuNXwxMHwyMCkkLyxcbiAgICBcInBhc3N3b3JkXCI6IC8oPz1eLns4LH0kKSg/PS4qXFxkKSg/PS4qWyFAIyQlXiYqXSspKD8hWy5cXG5dKSg/PS4qW0EtWl0pKD89LipbYS16XSkuKiQvLFxuICAgIFwibW90RGVQYXNzZVwiOiAvKD89Xi57OCx9JCkoPz0uKlxcZCkoPz0uKlshQCMkJV4mKl0rKSg/IVsuXFxuXSkoPz0uKltBLVpdKSg/PS4qW2Etel0pLiokLyxcbiAgICBcIm1hdHJpY3VsZVwiOiAvKF5cXGR7MSw0fVtBLVphLXpdezEsNH1cXGR7MSwyfSQpfCheW0EtWmEtel17MSwyfVxccypcXGR7MSwzfVxccypbQS1aYS16XXsxLDJ9KSQvLFxuICAgIFwidHZhSW50ZXJjb21cIjogL14oRlIpKFswLTldezExfSQpLyxcbiAgICBcImliYW5cIjogL15GUlxcZHsxMn1bQS1aMC05XXsxMX1cXGR7Mn0kLyxcbiAgICBcInRpbWVNYXNrXCI6IC9bXFxkXFxzOmFtcF0vaSxcbiAgICAnbnVtTWFzayc6IC9bMC05XS9pLFxuICAgICdhbHBoYU1hc2snOiAvW2Etel9dL2ksXG4gICAgJ2FscGhhbnVtTWFzayc6IC9bYS16MC05X10vaSxcbiAgICAnZW1haWxNYXNrJzogL1tcXHcuXFwtQCdcIiEjJCUmJyorLz0/Xl9ge3x9fl0vaSxcbiAgICAndXJsTWFzayc6IC9bYS16MC05X10vaSxcbiAgICAnaXBBZGRyZXNzTWFzayc6IC9bXFxkXFwuXS9pLFxuICAgIFwicGhvbmVNYXNrXCI6IC9bMC05XFwrXS9pLFxuICAgIFwiY29kZVBvc3RNYXNrXCI6IC9bMC05QUJhYl0vaSxcbiAgICAncGFzc3dvcmRNYXNrJzogL1tcXHcuXFwtQCdcIiEjJCUmJyorLz0/Xl9ge3x9fl0vaSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JY29uID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIEljb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEljb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBJY29uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwicy1pY29uIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEljb247XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5JY29uID0gSWNvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk92ZXJsYXkgPSBleHBvcnRzLkRpdmlkZXIgPSBleHBvcnRzLlBhcmFsbGF4ID0gZXhwb3J0cy5Sb3cgPSBleHBvcnRzLkNvbCA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBDb2wgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2woKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5lbCA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29sLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyByZWY6IGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIF90aGlzLmVsID0gcmVmOyB9LCBjbGFzc05hbWU6IFwiY29sIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2w7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Db2wgPSBDb2w7XG52YXIgUm93ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSb3csIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUm93KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZWwgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJvdy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7IHJldHVybiBfdGhpcy5lbCA9IHJlZjsgfSwgY2xhc3NOYW1lOiBcInJvdyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gUm93O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuUm93ID0gUm93O1xudmFyIFBhcmFsbGF4ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYXJhbGxheCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQYXJhbGxheCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBQYXJhbGxheC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3QgPSBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG4gICAgICAgIHN0LmJhY2tncm91bmRJbWFnZSA9IFwidXJsKFwiICsgdGhpcy5wcm9wcy5zcmMgKyBcIilcIjtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicGFyYWxsYXhcIiwgc3R5bGU6IHN0IH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIFBhcmFsbGF4O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuUGFyYWxsYXggPSBQYXJhbGxheDtcbnZhciBEaXZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEaXZpZGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERpdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgRGl2aWRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGl2aWRlclwiIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBEaXZpZGVyO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuRGl2aWRlciA9IERpdmlkZXI7XG52YXIgT3ZlcmxheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3ZlcmxheSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPdmVybGF5KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5lbCA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3ZlcmxheS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT3ZlcmxheS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdygpO1xuICAgIH07XG4gICAgT3ZlcmxheS5wcm90b3R5cGUuaXNWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS52aXNpYmxlO1xuICAgIH07XG4gICAgT3ZlcmxheS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE92ZXJsYXkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWRlKCk7XG4gICAgfTtcbiAgICBPdmVybGF5LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7IHJlZjogZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbCA9IHJlZjtcbiAgICAgICAgICAgICAgICB9IH0sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcIm1vZGFsLW92ZXJsYXkgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIE92ZXJsYXk7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5PdmVybGF5ID0gT3ZlcmxheTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vZGFsSGVhZGVyID0gZXhwb3J0cy5Nb2RhbEZvb3RlciA9IGV4cG9ydHMuTW9kYWxDb250ZW50ID0gZXhwb3J0cy5Nb2RhbCA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBNb2RhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTW9kYWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTW9kYWwoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNb2RhbC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBNb2RhbC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNPcGVuOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuKCk7XG4gICAgfTtcbiAgICBNb2RhbC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgICB9O1xuICAgIE1vZGFsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm1vZGFsLW92ZXJsYXlcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcIm1vZGFsIFwiICsgKHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCIpIH0pKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIE1vZGFsO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuTW9kYWwgPSBNb2RhbDtcbnZhciBNb2RhbENvbnRlbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1vZGFsQ29udGVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNb2RhbENvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTW9kYWxDb250ZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwibW9kYWwtY29udGVudCBcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1vZGFsQ29udGVudDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk1vZGFsQ29udGVudCA9IE1vZGFsQ29udGVudDtcbnZhciBNb2RhbEZvb3RlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTW9kYWxGb290ZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTW9kYWxGb290ZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTW9kYWxGb290ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJtb2RhbC1mb290ZXIgXCIgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIikgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBNb2RhbEZvb3Rlcjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk1vZGFsRm9vdGVyID0gTW9kYWxGb290ZXI7XG52YXIgTW9kYWxIZWFkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1vZGFsSGVhZGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1vZGFsSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE1vZGFsSGVhZGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwibW9kYWwtaGVhZGVyIFwiICsgKHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCIpIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTW9kYWxIZWFkZXI7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Nb2RhbEhlYWRlciA9IE1vZGFsSGVhZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTmF2QmFyQnJhbmQgPSBleHBvcnRzLk5hdkJhckl0ZW0gPSBleHBvcnRzLk5hdkJhckdyb3VwID0gZXhwb3J0cy5OYXZCYXIgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgTmF2QmFyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOYXZCYXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTmF2QmFyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE5hdkJhci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcIm5hdlwiLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwibmF2LXdyYXBwZXJcIiB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE5hdkJhcjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk5hdkJhciA9IE5hdkJhcjtcbnZhciBOYXZCYXJHcm91cCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTmF2QmFyR3JvdXAsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTmF2QmFyR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTmF2QmFyR3JvdXAucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwicmlnaHQgaGlkZS1vbi1tZWQtYW5kLWRvd24gwrdcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gTmF2QmFyR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5OYXZCYXJHcm91cCA9IE5hdkJhckdyb3VwO1xudmFyIE5hdkJhckl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE5hdkJhckl0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTmF2QmFySXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBOYXZCYXJJdGVtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMpKTtcbiAgICB9O1xuICAgIHJldHVybiBOYXZCYXJJdGVtO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuTmF2QmFySXRlbSA9IE5hdkJhckl0ZW07XG52YXIgTmF2QmFyQnJhbmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE5hdkJhckJyYW5kLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdkJhckJyYW5kKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE5hdkJhckJyYW5kLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwiYnJhbmQtbG9nb1wiIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBOYXZCYXJCcmFuZDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk5hdkJhckJyYW5kID0gTmF2QmFyQnJhbmQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5hdmlnYXRpb24gPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgTmF2QmFyXzEgPSByZXF1aXJlKFwiLi9OYXZCYXJcIik7XG52YXIgU2lkZU5hdl8xID0gcmVxdWlyZShcIi4vU2lkZU5hdlwiKTtcbnZhciBOYXZpZ2F0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOYXZpZ2F0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdmlnYXRpb24ocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBOYXZpZ2F0aW9uLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5uYXZiYXIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNpZGVuYXYpO1xuICAgIH07XG4gICAgTmF2aWdhdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2QmFyXzEuTmF2QmFyLCB7IHJlZjogZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5uYXZiYXIgPSByZWY7XG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHsgY2xhc3NOYW1lOiBcInNpZGVuYXYtdHJpZ2dlclwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNpZGVuYXYgJiYgX3RoaXMuc2lkZW5hdi50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgc3R5bGU6IHsgd2lkdGg6IFwiMjBweFwiIH0sIGZpbGw6IFwid2hpdGVcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLCBzdHJva2VXaWR0aDogXCIyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLCBkOiBcIk00IDZoMTZNNCAxMmgxNk00IDE4aDE2XCIgfSkpKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE5hdkJhcl8xLk5hdkJhckJyYW5kLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiB0aGlzLnByb3BzLmxvZ28gfHwgXCJodHRwczovL3N0YXRpY3MuZDN2NHBwLmZyL2xvZ28ucG5nXCIsIGNsYXNzTmFtZTogXCJjaXJjbGVcIiwgYWx0OiBcIkJyYW5kXCIgfSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2QmFyXzEuTmF2QmFyR3JvdXAsIG51bGwsIHRoaXMucHJvcHMucm91dGVzICYmIHRoaXMucHJvcHMucm91dGVzLm1hcChmdW5jdGlvbiAocm91dGUsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2QmFyXzEuTmF2QmFySXRlbSwgeyBrZXk6IGkgfSwgcm91dGUuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfSkpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZU5hdl8xLlNpZGVOYXYsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNpZGVuYXYgPSByZWY7XG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZU5hdl8xLlNpZGVOYXZVc2VyLCB7IHVzZXJuYW1lOiAnYXlvdWIgaGFzc2FuaScsIGVtYWlsOiAnYXlvdWJAZDN2NHBwLmZyJywgc3JjOiBcImh0dHBzOi8vc3RhdGljcy5kM3Y0cHAuZnIvbG9nby5wbmdcIiwgYmdfc3JjOiBcImh0dHBzOi8vaW1ncy5zZWFyY2guYnJhdmUuY29tL3lYMHZnYW1zWUVic09VOVhseVBHVU04RGRtcXhYcEFLeXpCTTRzM3dvbEEvcnM6Zml0OjEyMDA6MTAzMDoxL2c6Y2UvYUhSMGNITTZMeTkzZDNjdS9ZWFpwWVhOcGJTNWpiMjB2L2QzQXRZMjl1ZEdWdWRDOTEvY0d4dllXUnpMMkYyYVdGei9hVzB0YVcxaFoyVXRiblZoL1oyVnpMbXB3WndcIiB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJvdXRlcyAmJiB0aGlzLnByb3BzLnJvdXRlcy5tYXAoZnVuY3Rpb24gKHJvdXRlLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVOYXZfMS5TaWRlTmF2RWwsIHsgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc2lkZW5hdiAmJiBfdGhpcy5zaWRlbmF2LmhpZGUoKTsgfSwga2V5OiBpIH0sIHJvdXRlLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTmF2aWdhdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk5hdmlnYXRpb24gPSBOYXZpZ2F0aW9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2lkZU5hdkVsID0gZXhwb3J0cy5TaWRlTmF2VXNlciA9IGV4cG9ydHMuU2lkZU5hdiA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBTaWRlTmF2ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTaWRlTmF2LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNpZGVOYXYoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFNpZGVOYXYucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xuICAgIH07XG4gICAgU2lkZU5hdi5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogIXRoaXMuc3RhdGUub3BlbiB9KTtcbiAgICB9O1xuICAgIFNpZGVOYXYucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcbiAgICB9O1xuICAgIFNpZGVOYXYucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwic2lkZW5hdiBcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSwgc3R5bGU6IHsgdHJhbnNmb3JtOiB0aGlzLnN0YXRlLm9wZW4gPyBcInRyYW5zbGF0ZVgoMClcIiA6IFwidHJhbnNsYXRlWCgtMTA1JSlcIiB9IH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBTaWRlTmF2O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuU2lkZU5hdiA9IFNpZGVOYXY7XG52YXIgU2lkZU5hdlVzZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNpZGVOYXZVc2VyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNpZGVOYXZVc2VyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFNpZGVOYXZVc2VyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ1c2VyLXZpZXdcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IHRoaXMucHJvcHMuYmdfc3JjIH0pKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiLCBzcmM6IHRoaXMucHJvcHMuc3JjIH0pKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJibGFjay10ZXh0IG5hbWVcIiB9LCB0aGlzLnByb3BzLnVzZXJuYW1lKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwiYmxhY2stdGV4dCBlbWFpbFwiIH0sIHRoaXMucHJvcHMuZW1haWwpKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFNpZGVOYXZVc2VyO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuU2lkZU5hdlVzZXIgPSBTaWRlTmF2VXNlcjtcbnZhciBTaWRlTmF2RWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNpZGVOYXZFbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaWRlTmF2RWwoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgU2lkZU5hdkVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMpKTtcbiAgICB9O1xuICAgIHJldHVybiBTaWRlTmF2RWw7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5TaWRlTmF2RWwgPSBTaWRlTmF2RWw7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QcmVsb2FkZXIgPSBleHBvcnRzLlByb2dyZXNzID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIFByb2dyZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQcm9ncmVzcywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBQcm9ncmVzcy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6ICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSArIFwiIHByb2dyZXNzXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLnZhbHVlID8gXCJkZXRlcm1pbmF0ZVwiIDogXCJpbmRldGVybWluYXRlXCIsIHN0eWxlOiB7IHdpZHRoOiB0aGlzLnByb3BzLnZhbHVlICsgXCIlXCIgfSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gUHJvZ3Jlc3M7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Qcm9ncmVzcyA9IFByb2dyZXNzO1xudmFyIFByZWxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUHJlbG9hZGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFByZWxvYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBQcmVsb2FkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnByb3BzLnNpemUgPT0gXCJiaWdcIiA/IFwiYmlnXCIgOiB0aGlzLnByb3BzLnNpemUgPT0gXCJzbWFsbFwiID8gXCJzbWFsbFwiIDogXCJcIjtcbiAgICAgICAgdmFyIGNhID0gdGhpcy5wcm9wcy5jb2xvciA/IHRoaXMucHJvcHMuY29sb3Iuc3BsaXQoXCIsXCIpIDogWydibHVlJ107XG4gICAgICAgIGlmIChjYS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInByZWxvYWRlci13cmFwcGVyIFwiICsgcyArIFwiIGFjdGl2ZVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzcGlubmVyLWxheWVyIHNwaW5uZXItXCIgKyBjYVswXSArIFwiLW9ubHlcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZS1jbGlwcGVyIHJpZ2h0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlXCIgfSkpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImdhcC1wYXRjaFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGUtY2xpcHBlciBsZWZ0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlXCIgfSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwcmVsb2FkZXItd3JhcHBlciBcIiArIHMgKyBcIiBhY3RpdmVcIiB9LCBjYS5tYXAoZnVuY3Rpb24gKHNjb2xvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNwaW5uZXItbGF5ZXIgc3Bpbm5lci1cIiArIHNjb2xvciB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZS1jbGlwcGVyIGxlZnRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGVcIiB9KSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZ2FwLXBhdGNoXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlXCIgfSkpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZS1jbGlwcGVyIHJpZ2h0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlXCIgfSkpKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFByZWxvYWRlcjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLlByZWxvYWRlciA9IFByZWxvYWRlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9naW4gPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgRmllbGRfMSA9IHJlcXVpcmUoXCIuLi8uLi9jbXBzL2Zvcm1zL0ZpZWxkXCIpO1xuLy9cbi8vIGV4cG9ydCBmdW5jdGlvbiBMb2dpbiAoe29uTG9naW4sIG9uTG9naW5FcnJvciwgY2xhc3NOYW1lLCBjaGVja1VybH06IExvZ2luUHJvcHMpICB7XG4vLyAgICAgbGV0IGVtYWlsRjogeyBpc1ZhbGlkOiAoKSA9PiBhbnk7IH0sIHBhc3NGOiB7IGlzVmFsaWQ6ICgpID0+IGFueTsgfTtcbi8vICAgICBsZXQgW2VtYWlsT2ssIHNldEVtYWlsT2tdID0gdXNlU3RhdGUoZmFsc2UpXG4vLyAgICAgbGV0IFt1c2VyLCBzZXRVc2VyXSA9IHVzZVN0YXRlKHtcbi8vICAgICAgICAgcGFzc3dvcmQ6IFwiXCIsXG4vLyAgICAgICAgIGVtYWlsOiBcIlwiXG4vLyAgICAgfSk7XG4vLyAgICAgbGV0IG5leHQgPSAoKSA9PiB7XG4vLyAgICAgICAgIGlmIChlbWFpbEYgJiYgZW1haWxGLmlzVmFsaWQoKSkge1xuLy8gICAgICAgICAgICAgaWYgKGNoZWNrVXJsKSB7XG4vLyAgICAgICAgICAgICAgICAgZmV0Y2goY2hlY2tVcmwsIHtcbi8vICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbi8vICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbi8vICAgICAgICAgICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkodXNlcilcbi8vICAgICAgICAgICAgICAgICB9KS50aGVuKHIgPT4gci5qc29uKCkpLnRoZW4oanNvbiA9PiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnN1Y2Nlc3MpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVtYWlsT2sodHJ1ZSk7XG4vLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBvbkxvZ2luRXJyb3IgJiYgb25Mb2dpbkVycm9yKGpzb24pO1xuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuLy8gICAgICAgICAgICAgICAgICAgICBvbkxvZ2luRXJyb3IgJiYgb25Mb2dpbkVycm9yKGVycm9yKTtcbi8vICAgICAgICAgICAgICAgICB9KVxuLy8gICAgICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgICAgICBzZXRFbWFpbE9rKHRydWUpO1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGxldCBsb2dpbiA9ICgpID0+IHtcbi8vICAgICAgICAgaWYgKGVtYWlsRiAmJiBlbWFpbEYuaXNWYWxpZCgpICYmIHBhc3NGICYmIHBhc3NGLmlzVmFsaWQoKSkge1xuLy8gICAgICAgICAgICAgb25Mb2dpbiAmJiBvbkxvZ2luKHVzZXIpXG4vL1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGxldCBnZXRQYXNzd29yZFZpZXcgPSAoKSA9PiB7XG4vLyAgICAgICAgIGlmIChlbWFpbE9rKSB7XG4vLyAgICAgICAgICAgICByZXR1cm4gPD48RmllbGRcbi8vICAgICAgICAgICAgICAgICByZWY9eyhyOiBGaWVsZFJlZiB8IG51bGwgfCBhbnkpID0+IHtcbi8vICAgICAgICAgICAgICAgICAgICAgcGFzc0YgPSByO1xuLy8gICAgICAgICAgICAgICAgIH19XG4vLyAgICAgICAgICAgICAgICAgdmFsdWU9e3VzZXIucGFzc3dvcmR9XG4vLyAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gey4uLnVzZXJ9O1xuLy8gICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4vLyAgICAgICAgICAgICAgICAgICAgIHUucGFzc3dvcmQgPSBlLnRhcmdldC52YWx1ZTtcbi8vICAgICAgICAgICAgICAgICAgICAgc2V0VXNlcih1KTtcbi8vICAgICAgICAgICAgICAgICB9fVxuLy8gICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbi8vICAgICAgICAgICAgICAgICByZXF1aXJlZD17dHJ1ZX1cbi8vICAgICAgICAgICAgICAgICBsYWJlbD17XCJQYXNzd29yZFwifVxuLy8gICAgICAgICAgICAgICAgIHR5cGU9e1wicGFzc3dvcmRcIn1cbi8vICAgICAgICAgICAgICAgICB2dHlwZT17XCJwYXNzd29yZFwifVxuLy8gICAgICAgICAgICAgICAgIHZ0eXBlTXNnPXsnTmVlZCB0byBiZSBhIHZhbGlkIFBhc3N3b3JkJ31cbi8vICAgICAgICAgICAgICAgICBvbkVudGVyS2V5PXtsb2dpbn0vPlxuLy8gICAgICAgICAgICAgPC8+O1xuLy8gICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vL1xuLy8gICAgIGxldCBnZXRMb2dpblZpZXcgPSAoKSA9PiB7XG4vLyAgICAgICAgIGlmICghZW1haWxPaykge1xuLy8gICAgICAgICAgICAgcmV0dXJuIDw+PEZpZWxkXG4vLyAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuLy8gICAgICAgICAgICAgICAgIHJlcXVpcmVkPXt0cnVlfVxuLy8gICAgICAgICAgICAgICAgIHJlZj17KHI6IEZpZWxkUmVmIHwgbnVsbCB8IGFueSkgPT4ge1xuLy8gICAgICAgICAgICAgICAgICAgICBlbWFpbEYgPSByO1xuLy8gICAgICAgICAgICAgICAgIH19XG4vLyAgICAgICAgICAgICAgICAgdmFsdWU9e3VzZXIuZW1haWx9XG4vLyAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gey4uLnVzZXJ9O1xuLy8gICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4vLyAgICAgICAgICAgICAgICAgICAgIHUuZW1haWwgPSBlLnRhcmdldC52YWx1ZTtcbi8vICAgICAgICAgICAgICAgICAgICAgc2V0VXNlcih1KTtcbi8vICAgICAgICAgICAgICAgICB9fVxuLy8gICAgICAgICAgICAgICAgIGxhYmVsPXtcIkVtYWlsXCJ9XG4vLyAgICAgICAgICAgICAgICAgdHlwZT17XCJlbWFpbFwifVxuLy8gICAgICAgICAgICAgICAgIHZ0eXBlPXtcImVtYWlsXCJ9XG4vLyAgICAgICAgICAgICAgICAgdnR5cGVNc2c9eydOZWVkIHRvIGJlIGEgdmFsaWQgZW1haWwnfVxuLy8gICAgICAgICAgICAgICAgIG9uRW50ZXJLZXk9e25leHR9Lz5cbi8vICAgICAgICAgICAgIDwvPjtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuLy8gICAgICAgICB9XG4vL1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gPGRpdlxuLy8gICAgICAgICByZWY9e2VsID0+IHtcbi8vICAgICAgICAgICAgIGVsID0gZWw7XG4vLyAgICAgICAgIH19XG4vLyAgICAgICAgIGNsYXNzTmFtZT17KGNsYXNzTmFtZSB8fCBcIlwiKSArIFwiIGxvZ2luXCJ9XG4vLyAgICAgPlxuLy8gICAgICAgICB7Z2V0TG9naW5WaWV3KCl9XG4vLyAgICAgICAgIHtnZXRQYXNzd29yZFZpZXcoKX1cbi8vICAgICA8L2Rpdj5cbi8vIH1cbnZhciBMb2dpbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTG9naW4sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTG9naW4ocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZW1haWxPazogZmFsc2UsXG4gICAgICAgICAgICBlbWFpbDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuICAgICAgICAgICAgcGFzc09LOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIExvZ2luLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5lbWFpbEYgJiYgdGhpcy5lbWFpbEYuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5jaGVja1VybCkge1xuICAgICAgICAgICAgICAgIGZldGNoKHRoaXMucHJvcHMuY2hlY2tVcmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlbWFpbDogdGhpcy5zdGF0ZS5lbWFpbCwgfSlcbiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmpzb24oKTsgfSkudGhlbihmdW5jdGlvbiAoanNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGVtYWlsT2s6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkxvZ2luRXJyb3IgJiYgX3RoaXMucHJvcHMub25Mb2dpbkVycm9yKGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uTG9naW5FcnJvciAmJiBfdGhpcy5wcm9wcy5vbkxvZ2luRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVtYWlsT2s6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvZ2luLnByb3RvdHlwZS5sb2dpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZW1haWxPayAmJiB0aGlzLnBhc3N3b3JkRiAmJiB0aGlzLnBhc3N3b3JkRi5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25Mb2dpbiAmJiB0aGlzLnByb3BzLm9uTG9naW4oe1xuICAgICAgICAgICAgICAgIGVtYWlsOiB0aGlzLnN0YXRlLmVtYWlsLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB0aGlzLnN0YXRlLnBhc3N3b3JkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9naW4ucHJvdG90eXBlLmdldExvZ2luVmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmVtYWlsT2spIHtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRmllbGRfMS5GaWVsZCwgeyBhdXRvRm9jdXM6IHRydWUsIHJlcXVpcmVkOiB0cnVlLCByZWY6IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWFpbEYgPSByO1xuICAgICAgICAgICAgICAgICAgICB9LCB2YWx1ZTogdGhpcy5zdGF0ZS5lbWFpbCwgb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGVtYWlsOiBlLnRhcmdldC52YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgbGFiZWw6IFwiRW1haWxcIiwgdHlwZTogXCJlbWFpbFwiLCB2dHlwZTogXCJlbWFpbFwiLCB2dHlwZU1zZzogJ05lZWQgdG8gYmUgYSB2YWxpZCBlbWFpbCcsIG9uRW50ZXJLZXk6IHRoaXMubmV4dC5iaW5kKHRoaXMpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBMb2dpbi5wcm90b3R5cGUuZ2V0UGFzc3dvcmRWaWV3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5lbWFpbE9rKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEZpZWxkXzEuRmllbGQsIHsgcmVmOiBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucGFzc3dvcmRGID0gcjtcbiAgICAgICAgICAgICAgICAgICAgfSwgdmFsdWU6IHRoaXMuc3RhdGUucGFzc3dvcmQsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBwYXNzd29yZDogZS50YXJnZXQudmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGF1dG9Gb2N1czogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUsIGxhYmVsOiBcIlBhc3N3b3JkXCIsIHR5cGU6IFwicGFzc3dvcmRcIiwgdnR5cGU6IFwicGFzc3dvcmRcIiwgdnR5cGVNc2c6ICdOZWVkIHRvIGJlIGEgdmFsaWQgUGFzc3dvcmQnLCBvbkVudGVyS2V5OiB0aGlzLmxvZ2luLmJpbmQodGhpcykgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvZ2luLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZWwgPSBlbDtcbiAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogKHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCIpICsgXCIgbG9naW5cIiB9LFxuICAgICAgICAgICAgdGhpcy5nZXRMb2dpblZpZXcoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFzc3dvcmRWaWV3KCkpKTtcbiAgICB9O1xuICAgIHJldHVybiBMb2dpbjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkxvZ2luID0gTG9naW47XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9naW4gPSB2b2lkIDA7XG52YXIgTG9naW5fMSA9IHJlcXVpcmUoXCIuL2F1dGgvTG9naW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb2dpblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTG9naW5fMS5Mb2dpbjsgfSB9KTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJtYWluXCI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dpbiA9IGV4cG9ydHMuUm91dGVyID0gZXhwb3J0cy5Nb2RhbEhlYWRlciA9IGV4cG9ydHMuTW9kYWxGb290ZXIgPSBleHBvcnRzLk1vZGFsQ29udGVudCA9IGV4cG9ydHMuTW9kYWwgPSBleHBvcnRzLlByZWxvYWRlciA9IGV4cG9ydHMuUHJvZ3Jlc3MgPSBleHBvcnRzLlNpZGVOYXZVc2VyID0gZXhwb3J0cy5TaWRlTmF2RWwgPSBleHBvcnRzLlNpZGVOYXYgPSBleHBvcnRzLk5hdmlnYXRpb24gPSBleHBvcnRzLk5hdkJhckJyYW5kID0gZXhwb3J0cy5OYXZCYXJJdGVtID0gZXhwb3J0cy5OYXZCYXJHcm91cCA9IGV4cG9ydHMuTmF2QmFyID0gZXhwb3J0cy5DYXJkQWN0aW9uID0gZXhwb3J0cy5DYXJkVGl0bGUgPSBleHBvcnRzLkNhcmRDb250ZW50ID0gZXhwb3J0cy5DYXJkID0gZXhwb3J0cy5Db2xsYXBzQm9keSA9IGV4cG9ydHMuQ29sbGFwc2libGUgPSBleHBvcnRzLkNvbGxhcHNUcmlnZ2VyID0gZXhwb3J0cy5QYXJhbGxheCA9IGV4cG9ydHMuRGl2aWRlciA9IGV4cG9ydHMuT3ZlcmxheSA9IGV4cG9ydHMuQ29sID0gZXhwb3J0cy5Sb3cgPSBleHBvcnRzLkljb24gPSBleHBvcnRzLkNoaXAgPSBleHBvcnRzLkJhZGdlID0gZXhwb3J0cy5CdXR0b24gPSBleHBvcnRzLkNvbGxlY3Rpb25JdGVtID0gZXhwb3J0cy5Db2xsZWN0aW9uID0gZXhwb3J0cy5GaWVsZCA9IGV4cG9ydHMuVGV4dGFyZWEgPSB2b2lkIDA7XG5yZXF1aXJlKFwiLi9zYXNzL2QzdjRwcC5zY3NzXCIpO1xudmFyIFRleHRhcmVhXzEgPSByZXF1aXJlKFwiLi9jbXBzL2Zvcm1zL1RleHRhcmVhXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGV4dGFyZWFcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFRleHRhcmVhXzEuVGV4dGFyZWFBdXRvc2l6ZTsgfSB9KTtcbnZhciBGaWVsZF8xID0gcmVxdWlyZShcIi4vY21wcy9mb3Jtcy9GaWVsZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZpZWxkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBGaWVsZF8xLkZpZWxkOyB9IH0pO1xudmFyIENvbGxlY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2NtcHMvY29sbGVjdGlvbnMvQ29sbGVjdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbGxlY3Rpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbGxlY3Rpb25fMS5Db2xsZWN0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29sbGVjdGlvbkl0ZW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbGxlY3Rpb25fMS5Db2xsZWN0aW9uSXRlbTsgfSB9KTtcbnZhciBCdXR0b25fMSA9IHJlcXVpcmUoXCIuL2NtcHMvYnV0dG9uL0J1dHRvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJ1dHRvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQnV0dG9uXzEuQnV0dG9uOyB9IH0pO1xudmFyIEJhZGdlXzEgPSByZXF1aXJlKFwiLi9jbXBzL2JhZGdlL0JhZGdlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmFkZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhZGdlXzEuQmFkZ2U7IH0gfSk7XG52YXIgQ2hpcF8xID0gcmVxdWlyZShcIi4vY21wcy9jaGlwL0NoaXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDaGlwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDaGlwXzEuQ2hpcDsgfSB9KTtcbnZhciBJY29uXzEgPSByZXF1aXJlKFwiLi9jbXBzL2ljb25zL0ljb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJY29uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBJY29uXzEuSWNvbjsgfSB9KTtcbnZhciBMYXlvdXRzXzEgPSByZXF1aXJlKFwiLi9jbXBzL2xheW91dHMvTGF5b3V0c1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJvd1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTGF5b3V0c18xLlJvdzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTGF5b3V0c18xLkNvbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk92ZXJsYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExheW91dHNfMS5PdmVybGF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGl2aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTGF5b3V0c18xLkRpdmlkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQYXJhbGxheFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTGF5b3V0c18xLlBhcmFsbGF4OyB9IH0pO1xudmFyIENvbGxhcHNpYmxlXzEgPSByZXF1aXJlKFwiLi9jbXBzL2NvbGxhcHNpYmxlL0NvbGxhcHNpYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29sbGFwc1RyaWdnZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbGxhcHNpYmxlXzEuQ29sbGFwc1RyaWdnZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2xsYXBzaWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29sbGFwc2libGVfMS5Db2xsYXBzaWJsZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbGxhcHNCb2R5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb2xsYXBzaWJsZV8xLkNvbGxhcHNCb2R5OyB9IH0pO1xudmFyIENhcmRfMSA9IHJlcXVpcmUoXCIuL2NtcHMvY2FyZC9DYXJkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2FyZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FyZF8xLkNhcmQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDYXJkQ29udGVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FyZF8xLkNhcmRDb250ZW50OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2FyZFRpdGxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDYXJkXzEuQ2FyZFRpdGxlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2FyZEFjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FyZF8xLkNhcmRBY3Rpb247IH0gfSk7XG52YXIgTmF2QmFyXzEgPSByZXF1aXJlKFwiLi9jbXBzL25hdmlnYXRpb24vTmF2QmFyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmF2QmFyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOYXZCYXJfMS5OYXZCYXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYXZCYXJHcm91cFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmF2QmFyXzEuTmF2QmFyR3JvdXA7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYXZCYXJJdGVtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOYXZCYXJfMS5OYXZCYXJJdGVtOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmF2QmFyQnJhbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5hdkJhcl8xLk5hdkJhckJyYW5kOyB9IH0pO1xudmFyIE5hdmlnYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NtcHMvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmF2aWdhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmF2aWdhdGlvbl8xLk5hdmlnYXRpb247IH0gfSk7XG52YXIgU2lkZU5hdl8xID0gcmVxdWlyZShcIi4vY21wcy9uYXZpZ2F0aW9uL1NpZGVOYXZcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTaWRlTmF2XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTaWRlTmF2XzEuU2lkZU5hdjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNpZGVOYXZFbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2lkZU5hdl8xLlNpZGVOYXZFbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNpZGVOYXZVc2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTaWRlTmF2XzEuU2lkZU5hdlVzZXI7IH0gfSk7XG52YXIgUHJvZ3Jlc3NfMSA9IHJlcXVpcmUoXCIuL2NtcHMvcHJvZ3Jlc3MvUHJvZ3Jlc3NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm9ncmVzc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvZ3Jlc3NfMS5Qcm9ncmVzczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByZWxvYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvZ3Jlc3NfMS5QcmVsb2FkZXI7IH0gfSk7XG52YXIgTW9kYWxfMSA9IHJlcXVpcmUoXCIuL2NtcHMvbW9kYWwvTW9kYWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb2RhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTW9kYWxfMS5Nb2RhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1vZGFsQ29udGVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTW9kYWxfMS5Nb2RhbENvbnRlbnQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb2RhbEZvb3RlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTW9kYWxfMS5Nb2RhbEZvb3RlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1vZGFsSGVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBNb2RhbF8xLk1vZGFsSGVhZGVyOyB9IH0pO1xuZXhwb3J0cy5Sb3V0ZXIgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTtcbi8vLy8vLy8vdXhcbnZhciB1eF8xID0gcmVxdWlyZShcIi4vdXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb2dpblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXhfMS5Mb2dpbjsgfSB9KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==