| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615 | "no use strict";!(function(window) {if (typeof window.window != "undefined" && window.document)    return;if (window.require && window.define)    return;if (!window.console) {    window.console = function() {        var msgs = Array.prototype.slice.call(arguments, 0);        postMessage({type: "log", data: msgs});    };    window.console.error =    window.console.warn =     window.console.log =    window.console.trace = window.console;}window.window = window;window.ace = window;window.onerror = function(message, file, line, col, err) {    postMessage({type: "error", data: {        message: message,        data: err.data,        file: file,        line: line,         col: col,        stack: err.stack    }});};window.normalizeModule = function(parentId, moduleName) {    // normalize plugin requires    if (moduleName.indexOf("!") !== -1) {        var chunks = moduleName.split("!");        return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);    }    // normalize relative requires    if (moduleName.charAt(0) == ".") {        var base = parentId.split("/").slice(0, -1).join("/");        moduleName = (base ? base + "/" : "") + moduleName;                while (moduleName.indexOf(".") !== -1 && previous != moduleName) {            var previous = moduleName;            moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");        }    }        return moduleName;};window.require = function require(parentId, id) {    if (!id) {        id = parentId;        parentId = null;    }    if (!id.charAt)        throw new Error("worker.js require() accepts only (parentId, id) as arguments");    id = window.normalizeModule(parentId, id);    var module = window.require.modules[id];    if (module) {        if (!module.initialized) {            module.initialized = true;            module.exports = module.factory().exports;        }        return module.exports;    }       if (!window.require.tlns)        return console.log("unable to load " + id);        var path = resolveModuleId(id, window.require.tlns);    if (path.slice(-3) != ".js") path += ".js";        window.require.id = id;    window.require.modules[id] = {}; // prevent infinite loop on broken modules    importScripts(path);    return window.require(parentId, id);};function resolveModuleId(id, paths) {    var testPath = id, tail = "";    while (testPath) {        var alias = paths[testPath];        if (typeof alias == "string") {            return alias + tail;        } else if (alias) {            return  alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name);        } else if (alias === false) {            return "";        }        var i = testPath.lastIndexOf("/");        if (i === -1) break;        tail = testPath.substr(i) + tail;        testPath = testPath.slice(0, i);    }    return id;}window.require.modules = {};window.require.tlns = {};window.define = function(id, deps, factory) {    if (arguments.length == 2) {        factory = deps;        if (typeof id != "string") {            deps = id;            id = window.require.id;        }    } else if (arguments.length == 1) {        factory = id;        deps = [];        id = window.require.id;    }        if (typeof factory != "function") {        window.require.modules[id] = {            exports: factory,            initialized: true        };        return;    }    if (!deps.length)        // If there is no dependencies, we inject "require", "exports" and        // "module" as dependencies, to provide CommonJS compatibility.        deps = ["require", "exports", "module"];    var req = function(childId) {        return window.require(id, childId);    };    window.require.modules[id] = {        exports: {},        factory: function() {            var module = this;            var returnExports = factory.apply(this, deps.map(function(dep) {                switch (dep) {                    // Because "require", "exports" and "module" aren't actual                    // dependencies, we must handle them seperately.                    case "require": return req;                    case "exports": return module.exports;                    case "module":  return module;                    // But for all other dependencies, we can just go ahead and                    // require them.                    default:        return req(dep);                }            }));            if (returnExports)                module.exports = returnExports;            return module;        }    };};window.define.amd = {};require.tlns = {};window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {    for (var i in topLevelNamespaces)        require.tlns[i] = topLevelNamespaces[i];};window.initSender = function initSender() {    var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;    var oop = window.require("ace/lib/oop");        var Sender = function() {};        (function() {                oop.implement(this, EventEmitter);                        this.callback = function(data, callbackId) {            postMessage({                type: "call",                id: callbackId,                data: data            });        };            this.emit = function(name, data) {            postMessage({                type: "event",                name: name,                data: data            });        };            }).call(Sender.prototype);        return new Sender();};var main = window.main = null;var sender = window.sender = null;window.onmessage = function(e) {    var msg = e.data;    if (msg.event && sender) {        sender._signal(msg.event, msg.data);    }    else if (msg.command) {        if (main[msg.command])            main[msg.command].apply(main, msg.args);        else if (window[msg.command])            window[msg.command].apply(window, msg.args);        else            throw new Error("Unknown command:" + msg.command);    }    else if (msg.init) {        window.initBaseUrls(msg.tlns);        require("ace/lib/es5-shim");        sender = window.sender = window.initSender();        var clazz = require(msg.module)[msg.classname];        main = window.main = new clazz(sender);    }};})(this);ace.define("ace/lib/oop",[], function(require, exports, module) {"use strict";exports.inherits = function(ctor, superCtor) {    ctor.super_ = superCtor;    ctor.prototype = Object.create(superCtor.prototype, {        constructor: {            value: ctor,            enumerable: false,            writable: true,            configurable: true        }    });};exports.mixin = function(obj, mixin) {    for (var key in mixin) {        obj[key] = mixin[key];    }    return obj;};exports.implement = function(proto, mixin) {    exports.mixin(proto, mixin);};});ace.define("ace/lib/lang",[], function(require, exports, module) {"use strict";exports.last = function(a) {    return a[a.length - 1];};exports.stringReverse = function(string) {    return string.split("").reverse().join("");};exports.stringRepeat = function (string, count) {    var result = '';    while (count > 0) {        if (count & 1)            result += string;        if (count >>= 1)            string += string;    }    return result;};var trimBeginRegexp = /^\s\s*/;var trimEndRegexp = /\s\s*$/;exports.stringTrimLeft = function (string) {    return string.replace(trimBeginRegexp, '');};exports.stringTrimRight = function (string) {    return string.replace(trimEndRegexp, '');};exports.copyObject = function(obj) {    var copy = {};    for (var key in obj) {        copy[key] = obj[key];    }    return copy;};exports.copyArray = function(array){    var copy = [];    for (var i=0, l=array.length; i<l; i++) {        if (array[i] && typeof array[i] == "object")            copy[i] = this.copyObject(array[i]);        else             copy[i] = array[i];    }    return copy;};exports.deepCopy = function deepCopy(obj) {    if (typeof obj !== "object" || !obj)        return obj;    var copy;    if (Array.isArray(obj)) {        copy = [];        for (var key = 0; key < obj.length; key++) {            copy[key] = deepCopy(obj[key]);        }        return copy;    }    if (Object.prototype.toString.call(obj) !== "[object Object]")        return obj;        copy = {};    for (var key in obj)        copy[key] = deepCopy(obj[key]);    return copy;};exports.arrayToMap = function(arr) {    var map = {};    for (var i=0; i<arr.length; i++) {        map[arr[i]] = 1;    }    return map;};exports.createMap = function(props) {    var map = Object.create(null);    for (var i in props) {        map[i] = props[i];    }    return map;};exports.arrayRemove = function(array, value) {  for (var i = 0; i <= array.length; i++) {    if (value === array[i]) {      array.splice(i, 1);    }  }};exports.escapeRegExp = function(str) {    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');};exports.escapeHTML = function(str) {    return str.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<");};exports.getMatchOffsets = function(string, regExp) {    var matches = [];    string.replace(regExp, function(str) {        matches.push({            offset: arguments[arguments.length-2],            length: str.length        });    });    return matches;};exports.deferredCall = function(fcn) {    var timer = null;    var callback = function() {        timer = null;        fcn();    };    var deferred = function(timeout) {        deferred.cancel();        timer = setTimeout(callback, timeout || 0);        return deferred;    };    deferred.schedule = deferred;    deferred.call = function() {        this.cancel();        fcn();        return deferred;    };    deferred.cancel = function() {        clearTimeout(timer);        timer = null;        return deferred;    };        deferred.isPending = function() {        return timer;    };    return deferred;};exports.delayedCall = function(fcn, defaultTimeout) {    var timer = null;    var callback = function() {        timer = null;        fcn();    };    var _self = function(timeout) {        if (timer == null)            timer = setTimeout(callback, timeout || defaultTimeout);    };    _self.delay = function(timeout) {        timer && clearTimeout(timer);        timer = setTimeout(callback, timeout || defaultTimeout);    };    _self.schedule = _self;    _self.call = function() {        this.cancel();        fcn();    };    _self.cancel = function() {        timer && clearTimeout(timer);        timer = null;    };    _self.isPending = function() {        return timer;    };    return _self;};});ace.define("ace/range",[], function(require, exports, module) {"use strict";var comparePoints = function(p1, p2) {    return p1.row - p2.row || p1.column - p2.column;};var Range = function(startRow, startColumn, endRow, endColumn) {    this.start = {        row: startRow,        column: startColumn    };    this.end = {        row: endRow,        column: endColumn    };};(function() {    this.isEqual = function(range) {        return this.start.row === range.start.row &&            this.end.row === range.end.row &&            this.start.column === range.start.column &&            this.end.column === range.end.column;    };    this.toString = function() {        return ("Range: [" + this.start.row + "/" + this.start.column +            "] -> [" + this.end.row + "/" + this.end.column + "]");    };    this.contains = function(row, column) {        return this.compare(row, column) == 0;    };    this.compareRange = function(range) {        var cmp,            end = range.end,            start = range.start;        cmp = this.compare(end.row, end.column);        if (cmp == 1) {            cmp = this.compare(start.row, start.column);            if (cmp == 1) {                return 2;            } else if (cmp == 0) {                return 1;            } else {                return 0;            }        } else if (cmp == -1) {            return -2;        } else {            cmp = this.compare(start.row, start.column);            if (cmp == -1) {                return -1;            } else if (cmp == 1) {                return 42;            } else {                return 0;            }        }    };    this.comparePoint = function(p) {        return this.compare(p.row, p.column);    };    this.containsRange = function(range) {        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;    };    this.intersects = function(range) {        var cmp = this.compareRange(range);        return (cmp == -1 || cmp == 0 || cmp == 1);    };    this.isEnd = function(row, column) {        return this.end.row == row && this.end.column == column;    };    this.isStart = function(row, column) {        return this.start.row == row && this.start.column == column;    };    this.setStart = function(row, column) {        if (typeof row == "object") {            this.start.column = row.column;            this.start.row = row.row;        } else {            this.start.row = row;            this.start.column = column;        }    };    this.setEnd = function(row, column) {        if (typeof row == "object") {            this.end.column = row.column;            this.end.row = row.row;        } else {            this.end.row = row;            this.end.column = column;        }    };    this.inside = function(row, column) {        if (this.compare(row, column) == 0) {            if (this.isEnd(row, column) || this.isStart(row, column)) {                return false;            } else {                return true;            }        }        return false;    };    this.insideStart = function(row, column) {        if (this.compare(row, column) == 0) {            if (this.isEnd(row, column)) {                return false;            } else {                return true;            }        }        return false;    };    this.insideEnd = function(row, column) {        if (this.compare(row, column) == 0) {            if (this.isStart(row, column)) {                return false;            } else {                return true;            }        }        return false;    };    this.compare = function(row, column) {        if (!this.isMultiLine()) {            if (row === this.start.row) {                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);            }        }        if (row < this.start.row)            return -1;        if (row > this.end.row)            return 1;        if (this.start.row === row)            return column >= this.start.column ? 0 : -1;        if (this.end.row === row)            return column <= this.end.column ? 0 : 1;        return 0;    };    this.compareStart = function(row, column) {        if (this.start.row == row && this.start.column == column) {            return -1;        } else {            return this.compare(row, column);        }    };    this.compareEnd = function(row, column) {        if (this.end.row == row && this.end.column == column) {            return 1;        } else {            return this.compare(row, column);        }    };    this.compareInside = function(row, column) {        if (this.end.row == row && this.end.column == column) {            return 1;        } else if (this.start.row == row && this.start.column == column) {            return -1;        } else {            return this.compare(row, column);        }    };    this.clipRows = function(firstRow, lastRow) {        if (this.end.row > lastRow)            var end = {row: lastRow + 1, column: 0};        else if (this.end.row < firstRow)            var end = {row: firstRow, column: 0};        if (this.start.row > lastRow)            var start = {row: lastRow + 1, column: 0};        else if (this.start.row < firstRow)            var start = {row: firstRow, column: 0};        return Range.fromPoints(start || this.start, end || this.end);    };    this.extend = function(row, column) {        var cmp = this.compare(row, column);        if (cmp == 0)            return this;        else if (cmp == -1)            var start = {row: row, column: column};        else            var end = {row: row, column: column};        return Range.fromPoints(start || this.start, end || this.end);    };    this.isEmpty = function() {        return (this.start.row === this.end.row && this.start.column === this.end.column);    };    this.isMultiLine = function() {        return (this.start.row !== this.end.row);    };    this.clone = function() {        return Range.fromPoints(this.start, this.end);    };    this.collapseRows = function() {        if (this.end.column == 0)            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);        else            return new Range(this.start.row, 0, this.end.row, 0);    };    this.toScreenRange = function(session) {        var screenPosStart = session.documentToScreenPosition(this.start);        var screenPosEnd = session.documentToScreenPosition(this.end);        return new Range(            screenPosStart.row, screenPosStart.column,            screenPosEnd.row, screenPosEnd.column        );    };    this.moveBy = function(row, column) {        this.start.row += row;        this.start.column += column;        this.end.row += row;        this.end.column += column;    };}).call(Range.prototype);Range.fromPoints = function(start, end) {    return new Range(start.row, start.column, end.row, end.column);};Range.comparePoints = comparePoints;Range.comparePoints = function(p1, p2) {    return p1.row - p2.row || p1.column - p2.column;};exports.Range = Range;});ace.define("ace/apply_delta",[], function(require, exports, module) {"use strict";function throwDeltaError(delta, errorText){    console.log("Invalid Delta:", delta);    throw "Invalid Delta: " + errorText;}function positionInDocument(docLines, position) {    return position.row    >= 0 && position.row    <  docLines.length &&           position.column >= 0 && position.column <= docLines[position.row].length;}function validateDelta(docLines, delta) {    if (delta.action != "insert" && delta.action != "remove")        throwDeltaError(delta, "delta.action must be 'insert' or 'remove'");    if (!(delta.lines instanceof Array))        throwDeltaError(delta, "delta.lines must be an Array");    if (!delta.start || !delta.end)       throwDeltaError(delta, "delta.start/end must be an present");    var start = delta.start;    if (!positionInDocument(docLines, delta.start))        throwDeltaError(delta, "delta.start must be contained in document");    var end = delta.end;    if (delta.action == "remove" && !positionInDocument(docLines, end))        throwDeltaError(delta, "delta.end must contained in document for 'remove' actions");    var numRangeRows = end.row - start.row;    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)        throwDeltaError(delta, "delta.range must match delta lines");}exports.applyDelta = function(docLines, delta, doNotValidate) {    var row = delta.start.row;    var startColumn = delta.start.column;    var line = docLines[row] || "";    switch (delta.action) {        case "insert":            var lines = delta.lines;            if (lines.length === 1) {                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);            } else {                var args = [row, 1].concat(delta.lines);                docLines.splice.apply(docLines, args);                docLines[row] = line.substring(0, startColumn) + docLines[row];                docLines[row + delta.lines.length - 1] += line.substring(startColumn);            }            break;        case "remove":            var endColumn = delta.end.column;            var endRow = delta.end.row;            if (row === endRow) {                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);            } else {                docLines.splice(                    row, endRow - row + 1,                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)                );            }            break;    }};});ace.define("ace/lib/event_emitter",[], function(require, exports, module) {"use strict";var EventEmitter = {};var stopPropagation = function() { this.propagationStopped = true; };var preventDefault = function() { this.defaultPrevented = true; };EventEmitter._emit =EventEmitter._dispatchEvent = function(eventName, e) {    this._eventRegistry || (this._eventRegistry = {});    this._defaultHandlers || (this._defaultHandlers = {});    var listeners = this._eventRegistry[eventName] || [];    var defaultHandler = this._defaultHandlers[eventName];    if (!listeners.length && !defaultHandler)        return;    if (typeof e != "object" || !e)        e = {};    if (!e.type)        e.type = eventName;    if (!e.stopPropagation)        e.stopPropagation = stopPropagation;    if (!e.preventDefault)        e.preventDefault = preventDefault;    listeners = listeners.slice();    for (var i=0; i<listeners.length; i++) {        listeners[i](e, this);        if (e.propagationStopped)            break;    }        if (defaultHandler && !e.defaultPrevented)        return defaultHandler(e, this);};EventEmitter._signal = function(eventName, e) {    var listeners = (this._eventRegistry || {})[eventName];    if (!listeners)        return;    listeners = listeners.slice();    for (var i=0; i<listeners.length; i++)        listeners[i](e, this);};EventEmitter.once = function(eventName, callback) {    var _self = this;    callback && this.addEventListener(eventName, function newCallback() {        _self.removeEventListener(eventName, newCallback);        callback.apply(null, arguments);    });};EventEmitter.setDefaultHandler = function(eventName, callback) {    var handlers = this._defaultHandlers;    if (!handlers)        handlers = this._defaultHandlers = {_disabled_: {}};        if (handlers[eventName]) {        var old = handlers[eventName];        var disabled = handlers._disabled_[eventName];        if (!disabled)            handlers._disabled_[eventName] = disabled = [];        disabled.push(old);        var i = disabled.indexOf(callback);        if (i != -1)             disabled.splice(i, 1);    }    handlers[eventName] = callback;};EventEmitter.removeDefaultHandler = function(eventName, callback) {    var handlers = this._defaultHandlers;    if (!handlers)        return;    var disabled = handlers._disabled_[eventName];        if (handlers[eventName] == callback) {        var old = handlers[eventName];        if (disabled)            this.setDefaultHandler(eventName, disabled.pop());    } else if (disabled) {        var i = disabled.indexOf(callback);        if (i != -1)            disabled.splice(i, 1);    }};EventEmitter.on =EventEmitter.addEventListener = function(eventName, callback, capturing) {    this._eventRegistry = this._eventRegistry || {};    var listeners = this._eventRegistry[eventName];    if (!listeners)        listeners = this._eventRegistry[eventName] = [];    if (listeners.indexOf(callback) == -1)        listeners[capturing ? "unshift" : "push"](callback);    return callback;};EventEmitter.off =EventEmitter.removeListener =EventEmitter.removeEventListener = function(eventName, callback) {    this._eventRegistry = this._eventRegistry || {};    var listeners = this._eventRegistry[eventName];    if (!listeners)        return;    var index = listeners.indexOf(callback);    if (index !== -1)        listeners.splice(index, 1);};EventEmitter.removeAllListeners = function(eventName) {    if (this._eventRegistry) this._eventRegistry[eventName] = [];};exports.EventEmitter = EventEmitter;});ace.define("ace/anchor",[], function(require, exports, module) {"use strict";var oop = require("./lib/oop");var EventEmitter = require("./lib/event_emitter").EventEmitter;var Anchor = exports.Anchor = function(doc, row, column) {    this.$onChange = this.onChange.bind(this);    this.attach(doc);        if (typeof column == "undefined")        this.setPosition(row.row, row.column);    else        this.setPosition(row, column);};(function() {    oop.implement(this, EventEmitter);    this.getPosition = function() {        return this.$clipPositionToDocument(this.row, this.column);    };    this.getDocument = function() {        return this.document;    };    this.$insertRight = false;    this.onChange = function(delta) {        if (delta.start.row == delta.end.row && delta.start.row != this.row)            return;        if (delta.start.row > this.row)            return;                    var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);        this.setPosition(point.row, point.column, true);    };        function $pointsInOrder(point1, point2, equalPointsInOrder) {        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);    }                function $getTransformedPoint(delta, point, moveIfEqual) {        var deltaIsInsert = delta.action == "insert";        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);        var deltaStart = delta.start;        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {            return {                row: point.row,                column: point.column            };        }        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {            return {                row: point.row + deltaRowShift,                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)            };        }        return {            row: deltaStart.row,            column: deltaStart.column        };    }    this.setPosition = function(row, column, noClip) {        var pos;        if (noClip) {            pos = {                row: row,                column: column            };        } else {            pos = this.$clipPositionToDocument(row, column);        }        if (this.row == pos.row && this.column == pos.column)            return;        var old = {            row: this.row,            column: this.column        };        this.row = pos.row;        this.column = pos.column;        this._signal("change", {            old: old,            value: pos        });    };    this.detach = function() {        this.document.removeEventListener("change", this.$onChange);    };    this.attach = function(doc) {        this.document = doc || this.document;        this.document.on("change", this.$onChange);    };    this.$clipPositionToDocument = function(row, column) {        var pos = {};        if (row >= this.document.getLength()) {            pos.row = Math.max(0, this.document.getLength() - 1);            pos.column = this.document.getLine(pos.row).length;        }        else if (row < 0) {            pos.row = 0;            pos.column = 0;        }        else {            pos.row = row;            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));        }        if (column < 0)            pos.column = 0;        return pos;    };}).call(Anchor.prototype);});ace.define("ace/document",[], function(require, exports, module) {"use strict";var oop = require("./lib/oop");var applyDelta = require("./apply_delta").applyDelta;var EventEmitter = require("./lib/event_emitter").EventEmitter;var Range = require("./range").Range;var Anchor = require("./anchor").Anchor;var Document = function(textOrLines) {    this.$lines = [""];    if (textOrLines.length === 0) {        this.$lines = [""];    } else if (Array.isArray(textOrLines)) {        this.insertMergedLines({row: 0, column: 0}, textOrLines);    } else {        this.insert({row: 0, column:0}, textOrLines);    }};(function() {    oop.implement(this, EventEmitter);    this.setValue = function(text) {        var len = this.getLength() - 1;        this.remove(new Range(0, 0, len, this.getLine(len).length));        this.insert({row: 0, column: 0}, text);    };    this.getValue = function() {        return this.getAllLines().join(this.getNewLineCharacter());    };    this.createAnchor = function(row, column) {        return new Anchor(this, row, column);    };    if ("aaa".split(/a/).length === 0) {        this.$split = function(text) {            return text.replace(/\r\n|\r/g, "\n").split("\n");        };    } else {        this.$split = function(text) {            return text.split(/\r\n|\r|\n/);        };    }    this.$detectNewLine = function(text) {        var match = text.match(/^.*?(\r\n|\r|\n)/m);        this.$autoNewLine = match ? match[1] : "\n";        this._signal("changeNewLineMode");    };    this.getNewLineCharacter = function() {        switch (this.$newLineMode) {          case "windows":            return "\r\n";          case "unix":            return "\n";          default:            return this.$autoNewLine || "\n";        }    };    this.$autoNewLine = "";    this.$newLineMode = "auto";    this.setNewLineMode = function(newLineMode) {        if (this.$newLineMode === newLineMode)            return;        this.$newLineMode = newLineMode;        this._signal("changeNewLineMode");    };    this.getNewLineMode = function() {        return this.$newLineMode;    };    this.isNewLine = function(text) {        return (text == "\r\n" || text == "\r" || text == "\n");    };    this.getLine = function(row) {        return this.$lines[row] || "";    };    this.getLines = function(firstRow, lastRow) {        return this.$lines.slice(firstRow, lastRow + 1);    };    this.getAllLines = function() {        return this.getLines(0, this.getLength());    };    this.getLength = function() {        return this.$lines.length;    };    this.getTextRange = function(range) {        return this.getLinesForRange(range).join(this.getNewLineCharacter());    };    this.getLinesForRange = function(range) {        var lines;        if (range.start.row === range.end.row) {            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];        } else {            lines = this.getLines(range.start.row, range.end.row);            lines[0] = (lines[0] || "").substring(range.start.column);            var l = lines.length - 1;            if (range.end.row - range.start.row == l)                lines[l] = lines[l].substring(0, range.end.column);        }        return lines;    };    this.insertLines = function(row, lines) {        console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead.");        return this.insertFullLines(row, lines);    };    this.removeLines = function(firstRow, lastRow) {        console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead.");        return this.removeFullLines(firstRow, lastRow);    };    this.insertNewLine = function(position) {        console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.");        return this.insertMergedLines(position, ["", ""]);    };    this.insert = function(position, text) {        if (this.getLength() <= 1)            this.$detectNewLine(text);                return this.insertMergedLines(position, this.$split(text));    };    this.insertInLine = function(position, text) {        var start = this.clippedPos(position.row, position.column);        var end = this.pos(position.row, position.column + text.length);                this.applyDelta({            start: start,            end: end,            action: "insert",            lines: [text]        }, true);                return this.clonePos(end);    };        this.clippedPos = function(row, column) {        var length = this.getLength();        if (row === undefined) {            row = length;        } else if (row < 0) {            row = 0;        } else if (row >= length) {            row = length - 1;            column = undefined;        }        var line = this.getLine(row);        if (column == undefined)            column = line.length;        column = Math.min(Math.max(column, 0), line.length);        return {row: row, column: column};    };        this.clonePos = function(pos) {        return {row: pos.row, column: pos.column};    };        this.pos = function(row, column) {        return {row: row, column: column};    };        this.$clipPosition = function(position) {        var length = this.getLength();        if (position.row >= length) {            position.row = Math.max(0, length - 1);            position.column = this.getLine(length - 1).length;        } else {            position.row = Math.max(0, position.row);            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);        }        return position;    };    this.insertFullLines = function(row, lines) {        row = Math.min(Math.max(row, 0), this.getLength());        var column = 0;        if (row < this.getLength()) {            lines = lines.concat([""]);            column = 0;        } else {            lines = [""].concat(lines);            row--;            column = this.$lines[row].length;        }        this.insertMergedLines({row: row, column: column}, lines);    };    this.insertMergedLines = function(position, lines) {        var start = this.clippedPos(position.row, position.column);        var end = {            row: start.row + lines.length - 1,            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length        };                this.applyDelta({            start: start,            end: end,            action: "insert",            lines: lines        });                return this.clonePos(end);    };    this.remove = function(range) {        var start = this.clippedPos(range.start.row, range.start.column);        var end = this.clippedPos(range.end.row, range.end.column);        this.applyDelta({            start: start,            end: end,            action: "remove",            lines: this.getLinesForRange({start: start, end: end})        });        return this.clonePos(start);    };    this.removeInLine = function(row, startColumn, endColumn) {        var start = this.clippedPos(row, startColumn);        var end = this.clippedPos(row, endColumn);                this.applyDelta({            start: start,            end: end,            action: "remove",            lines: this.getLinesForRange({start: start, end: end})        }, true);                return this.clonePos(start);    };    this.removeFullLines = function(firstRow, lastRow) {        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;        var deleteLastNewLine  = lastRow  < this.getLength() - 1;        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length );         var range = new Range(startRow, startCol, endRow, endCol);        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);                this.applyDelta({            start: range.start,            end: range.end,            action: "remove",            lines: this.getLinesForRange(range)        });        return deletedLines;    };    this.removeNewLine = function(row) {        if (row < this.getLength() - 1 && row >= 0) {            this.applyDelta({                start: this.pos(row, this.getLine(row).length),                end: this.pos(row + 1, 0),                action: "remove",                lines: ["", ""]            });        }    };    this.replace = function(range, text) {        if (!(range instanceof Range))            range = Range.fromPoints(range.start, range.end);        if (text.length === 0 && range.isEmpty())            return range.start;        if (text == this.getTextRange(range))            return range.end;        this.remove(range);        var end;        if (text) {            end = this.insert(range.start, text);        }        else {            end = range.start;        }                return end;    };    this.applyDeltas = function(deltas) {        for (var i=0; i<deltas.length; i++) {            this.applyDelta(deltas[i]);        }    };    this.revertDeltas = function(deltas) {        for (var i=deltas.length-1; i>=0; i--) {            this.revertDelta(deltas[i]);        }    };    this.applyDelta = function(delta, doNotValidate) {        var isInsert = delta.action == "insert";        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]            : !Range.comparePoints(delta.start, delta.end)) {            return;        }                if (isInsert && delta.lines.length > 20000) {            this.$splitAndapplyLargeDelta(delta, 20000);        }        else {            applyDelta(this.$lines, delta, doNotValidate);            this._signal("change", delta);        }    };        this.$splitAndapplyLargeDelta = function(delta, MAX) {        var lines = delta.lines;        var l = lines.length - MAX + 1;        var row = delta.start.row;         var column = delta.start.column;        for (var from = 0, to = 0; from < l; from = to) {            to += MAX - 1;            var chunk = lines.slice(from, to);            chunk.push("");            this.applyDelta({                start: this.pos(row + from, column),                end: this.pos(row + to, column = 0),                action: delta.action,                lines: chunk            }, true);        }        delta.lines = lines.slice(from);        delta.start.row = row + from;        delta.start.column = column;        this.applyDelta(delta, true);    };    this.revertDelta = function(delta) {        this.applyDelta({            start: this.clonePos(delta.start),            end: this.clonePos(delta.end),            action: (delta.action == "insert" ? "remove" : "insert"),            lines: delta.lines.slice()        });    };    this.indexToPosition = function(index, startRow) {        var lines = this.$lines || this.getAllLines();        var newlineLength = this.getNewLineCharacter().length;        for (var i = startRow || 0, l = lines.length; i < l; i++) {            index -= lines[i].length + newlineLength;            if (index < 0)                return {row: i, column: index + lines[i].length + newlineLength};        }        return {row: l-1, column: index + lines[l-1].length + newlineLength};    };    this.positionToIndex = function(pos, startRow) {        var lines = this.$lines || this.getAllLines();        var newlineLength = this.getNewLineCharacter().length;        var index = 0;        var row = Math.min(pos.row, lines.length);        for (var i = startRow || 0; i < row; ++i)            index += lines[i].length + newlineLength;        return index + pos.column;    };}).call(Document.prototype);exports.Document = Document;});ace.define("ace/worker/mirror",[], function(require, exports, module) {"use strict";var Range = require("../range").Range;var Document = require("../document").Document;var lang = require("../lib/lang");    var Mirror = exports.Mirror = function(sender) {    this.sender = sender;    var doc = this.doc = new Document("");        var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));        var _self = this;    sender.on("change", function(e) {        var data = e.data;        if (data[0].start) {            doc.applyDeltas(data);        } else {            for (var i = 0; i < data.length; i += 2) {                if (Array.isArray(data[i+1])) {                    var d = {action: "insert", start: data[i], lines: data[i+1]};                } else {                    var d = {action: "remove", start: data[i], end: data[i+1]};                }                doc.applyDelta(d, true);            }        }        if (_self.$timeout)            return deferredUpdate.schedule(_self.$timeout);        _self.onUpdate();    });};(function() {        this.$timeout = 500;        this.setTimeout = function(timeout) {        this.$timeout = timeout;    };        this.setValue = function(value) {        this.doc.setValue(value);        this.deferredUpdate.schedule(this.$timeout);    };        this.getValue = function(callbackId) {        this.sender.callback(this.doc.getValue(), callbackId);    };        this.onUpdate = function() {    };        this.isPending = function() {        return this.deferredUpdate.isPending();    };    }).call(Mirror.prototype);});ace.define("ace/mode/html/saxparser",[], function(require, exports, module) {module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){function isScopeMarker(node) {	if (node.namespaceURI === "http://www.w3.org/1999/xhtml") {		return node.localName === "applet"			|| node.localName === "caption"			|| node.localName === "marquee"			|| node.localName === "object"			|| node.localName === "table"			|| node.localName === "td"			|| node.localName === "th";	}	if (node.namespaceURI === "http://www.w3.org/1998/Math/MathML") {		return node.localName === "mi"			|| node.localName === "mo"			|| node.localName === "mn"			|| node.localName === "ms"			|| node.localName === "mtext"			|| node.localName === "annotation-xml";	}	if (node.namespaceURI === "http://www.w3.org/2000/svg") {		return node.localName === "foreignObject"			|| node.localName === "desc"			|| node.localName === "title";	}}function isListItemScopeMarker(node) {	return isScopeMarker(node)		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'ol')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'ul');}function isTableScopeMarker(node) {	return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'table')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html');}function isTableBodyScopeMarker(node) {	return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tbody')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tfoot')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'thead')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html');}function isTableRowScopeMarker(node) {	return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tr')		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html');}function isButtonScopeMarker(node) {	return isScopeMarker(node)		|| (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'button');}function isSelectScopeMarker(node) {	return !(node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'optgroup')		&& !(node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'option');}function ElementStack() {	this.elements = [];	this.rootNode = null;	this.headElement = null;	this.bodyElement = null;}ElementStack.prototype._inScope = function(localName, isMarker) {	for (var i = this.elements.length - 1; i >= 0; i--) {		var node = this.elements[i];		if (node.localName === localName)			return true;		if (isMarker(node))			return false;	}};ElementStack.prototype.push = function(item) {	this.elements.push(item);};ElementStack.prototype.pushHtmlElement = function(item) {	this.rootNode = item.node;	this.push(item);};ElementStack.prototype.pushHeadElement = function(item) {	this.headElement = item.node;	this.push(item);};ElementStack.prototype.pushBodyElement = function(item) {	this.bodyElement = item.node;	this.push(item);};ElementStack.prototype.pop = function() {	return this.elements.pop();};ElementStack.prototype.remove = function(item) {	this.elements.splice(this.elements.indexOf(item), 1);};ElementStack.prototype.popUntilPopped = function(localName) {	var element;	do {		element = this.pop();	} while (element.localName != localName);};ElementStack.prototype.popUntilTableScopeMarker = function() {	while (!isTableScopeMarker(this.top))		this.pop();};ElementStack.prototype.popUntilTableBodyScopeMarker = function() {	while (!isTableBodyScopeMarker(this.top))		this.pop();};ElementStack.prototype.popUntilTableRowScopeMarker = function() {	while (!isTableRowScopeMarker(this.top))		this.pop();};ElementStack.prototype.item = function(index) {	return this.elements[index];};ElementStack.prototype.contains = function(element) {	return this.elements.indexOf(element) !== -1;};ElementStack.prototype.inScope = function(localName) {	return this._inScope(localName, isScopeMarker);};ElementStack.prototype.inListItemScope = function(localName) {	return this._inScope(localName, isListItemScopeMarker);};ElementStack.prototype.inTableScope = function(localName) {	return this._inScope(localName, isTableScopeMarker);};ElementStack.prototype.inButtonScope = function(localName) {	return this._inScope(localName, isButtonScopeMarker);};ElementStack.prototype.inSelectScope = function(localName) {	return this._inScope(localName, isSelectScopeMarker);};ElementStack.prototype.hasNumberedHeaderElementInScope = function() {	for (var i = this.elements.length - 1; i >= 0; i--) {		var node = this.elements[i];		if (node.isNumberedHeader())			return true;		if (isScopeMarker(node))			return false;	}};ElementStack.prototype.furthestBlockForFormattingElement = function(element) {	var furthestBlock = null;	for (var i = this.elements.length - 1; i >= 0; i--) {		var node = this.elements[i];		if (node.node === element)			break;		if (node.isSpecial())			furthestBlock = node;	}    return furthestBlock;};ElementStack.prototype.findIndex = function(localName) {	for (var i = this.elements.length - 1; i >= 0; i--) {		if (this.elements[i].localName == localName)			return i;	}    return -1;};ElementStack.prototype.remove_openElements_until = function(callback) {	var finished = false;	var element;	while (!finished) {		element = this.elements.pop();		finished = callback(element);	}	return element;};Object.defineProperty(ElementStack.prototype, 'top', {	get: function() {		return this.elements[this.elements.length - 1];	}});Object.defineProperty(ElementStack.prototype, 'length', {	get: function() {		return this.elements.length;	}});exports.ElementStack = ElementStack;},{}],2:[function(_dereq_,module,exports){var entities  = _dereq_('html5-entities');var InputStream = _dereq_('./InputStream').InputStream;var namedEntityPrefixes = {};Object.keys(entities).forEach(function (entityKey) {	for (var i = 0; i < entityKey.length; i++) {		namedEntityPrefixes[entityKey.substring(0, i + 1)] = true;	}});function isAlphaNumeric(c) {	return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');}function isHexDigit(c) {	return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');}function isDecimalDigit(c) {	return (c >= '0' && c <= '9');}var EntityParser = {};EntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {	var decodedCharacter = '';	var consumedCharacters = '';	var ch = buffer.char();	if (ch === InputStream.EOF)		return false;	consumedCharacters += ch;	if (ch == '\t' || ch == '\n' || ch == '\v' || ch == ' ' || ch == '<' || ch == '&') {		buffer.unget(consumedCharacters);		return false;	}	if (additionalAllowedCharacter === ch) {		buffer.unget(consumedCharacters);		return false;	}	if (ch == '#') {		ch = buffer.shift(1);		if (ch === InputStream.EOF) {			tokenizer._parseError("expected-numeric-entity-but-got-eof");			buffer.unget(consumedCharacters);			return false;		}		consumedCharacters += ch;		var radix = 10;		var isDigit = isDecimalDigit;		if (ch == 'x' || ch == 'X') {			radix = 16;			isDigit = isHexDigit;			ch = buffer.shift(1);			if (ch === InputStream.EOF) {				tokenizer._parseError("expected-numeric-entity-but-got-eof");				buffer.unget(consumedCharacters);				return false;			}			consumedCharacters += ch;		}		if (isDigit(ch)) {			var code = '';			while (ch !== InputStream.EOF && isDigit(ch)) {				code += ch;				ch = buffer.char();			}			code = parseInt(code, radix);			var replacement = this.replaceEntityNumbers(code);			if (replacement) {				tokenizer._parseError("invalid-numeric-entity-replaced");				code = replacement;			}			if (code > 0xFFFF && code <= 0x10FFFF) {		        code -= 0x10000;		        var first = ((0xffc00 & code) >> 10) + 0xD800;		        var second = (0x3ff & code) + 0xDC00;				decodedCharacter = String.fromCharCode(first, second);			} else				decodedCharacter = String.fromCharCode(code);			if (ch !== ';') {				tokenizer._parseError("numeric-entity-without-semicolon");				buffer.unget(ch);			}			return decodedCharacter;		}		buffer.unget(consumedCharacters);		tokenizer._parseError("expected-numeric-entity");		return false;	}	if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {		var mostRecentMatch = '';		while (namedEntityPrefixes[consumedCharacters]) {			if (entities[consumedCharacters]) {				mostRecentMatch = consumedCharacters;			}			if (ch == ';')				break;			ch = buffer.char();			if (ch === InputStream.EOF)				break;			consumedCharacters += ch;		}		if (!mostRecentMatch) {			tokenizer._parseError("expected-named-entity");			buffer.unget(consumedCharacters);			return false;		}		decodedCharacter = entities[mostRecentMatch];		if (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {			if (consumedCharacters.length > mostRecentMatch.length) {				buffer.unget(consumedCharacters.substring(mostRecentMatch.length));			}			if (ch !== ';') {				tokenizer._parseError("named-entity-without-semicolon");			}			return decodedCharacter;		}		buffer.unget(consumedCharacters);		return false;	}};EntityParser.replaceEntityNumbers = function(c) {	switch(c) {		case 0x00: return 0xFFFD; // REPLACEMENT CHARACTER		case 0x13: return 0x0010; // Carriage return		case 0x80: return 0x20AC; // EURO SIGN		case 0x81: return 0x0081; // <control>		case 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK		case 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK		case 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK		case 0x85: return 0x2026; // HORIZONTAL ELLIPSIS		case 0x86: return 0x2020; // DAGGER		case 0x87: return 0x2021; // DOUBLE DAGGER		case 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT		case 0x89: return 0x2030; // PER MILLE SIGN		case 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON		case 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK		case 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE		case 0x8D: return 0x008D; // <control>		case 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON		case 0x8F: return 0x008F; // <control>		case 0x90: return 0x0090; // <control>		case 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK		case 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK		case 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK		case 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK		case 0x95: return 0x2022; // BULLET		case 0x96: return 0x2013; // EN DASH		case 0x97: return 0x2014; // EM DASH		case 0x98: return 0x02DC; // SMALL TILDE		case 0x99: return 0x2122; // TRADE MARK SIGN		case 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON		case 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK		case 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE		case 0x9D: return 0x009D; // <control>		case 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON		case 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS		default:			if ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {				return 0xFFFD;			} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||				(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||				c == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||				c == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||				c == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||				c == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||				c == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||				c == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||				c == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||				c == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||				c == 0x10FFFF) {				return c;			}	}};exports.EntityParser = EntityParser;},{"./InputStream":3,"html5-entities":12}],3:[function(_dereq_,module,exports){function InputStream() {	this.data = '';	this.start = 0;	this.committed = 0;	this.eof = false;	this.lastLocation = {line: 0, column: 0};}InputStream.EOF = -1;InputStream.DRAIN = -2;InputStream.prototype = {	slice: function() {		if(this.start >= this.data.length) {			if(!this.eof) throw InputStream.DRAIN;			return InputStream.EOF;		}		return this.data.slice(this.start, this.data.length);	},	char: function() {		if(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;		if(this.start >= this.data.length) {			return InputStream.EOF;		}		var ch = this.data[this.start++];		if (ch === '\r')			ch = '\n';		return ch;	},	advance: function(amount) {		this.start += amount;		if(this.start >= this.data.length) {			if(!this.eof) throw InputStream.DRAIN;			return InputStream.EOF;		} else {			if(this.committed > this.data.length / 2) {				this.lastLocation = this.location();				this.data = this.data.slice(this.committed);				this.start = this.start - this.committed;				this.committed = 0;			}		}	},	matchWhile: function(re) {		if(this.eof && this.start >= this.data.length ) return '';		var r = new RegExp("^"+re+"+");		var m = r.exec(this.slice());		if(m) {			if(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;			this.advance(m[0].length);			return m[0];		} else {			return '';		}	},	matchUntil: function(re) {		var m, s;		s = this.slice();		if(s === InputStream.EOF) {			return '';		} else if(m = new RegExp(re + (this.eof ? "|$" : "")).exec(s)) {			var t = this.data.slice(this.start, this.start + m.index);			this.advance(m.index);			return t.replace(/\r/g, '\n').replace(/\n{2,}/g, '\n');		} else {			throw InputStream.DRAIN;		}	},	append: function(data) {		this.data += data;	},	shift: function(n) {		if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;		if(this.eof && this.start >= this.data.length) return InputStream.EOF;		var d = this.data.slice(this.start, this.start + n).toString();		this.advance(Math.min(n, this.data.length - this.start));		return d;	},	peek: function(n) {		if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;		if(this.eof && this.start >= this.data.length) return InputStream.EOF;		return this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();	},	length: function() {		return this.data.length - this.start - 1;	},	unget: function(d) {		if(d === InputStream.EOF) return;		this.start -= (d.length);	},	undo: function() {		this.start = this.committed;	},	commit: function() {		this.committed = this.start;	},	location: function() {		var lastLine = this.lastLocation.line;		var lastColumn = this.lastLocation.column;		var read = this.data.slice(0, this.committed);		var newlines = read.match(/\n/g);		var line = newlines ? lastLine + newlines.length : lastLine;		var column = newlines ? read.length - read.lastIndexOf('\n') - 1 : lastColumn + read.length;		return {line: line, column: column};	}};exports.InputStream = InputStream;},{}],4:[function(_dereq_,module,exports){var SpecialElements = {	"http://www.w3.org/1999/xhtml": [		'address',		'applet',		'area',		'article',		'aside',		'base',		'basefont',		'bgsound',		'blockquote',		'body',		'br',		'button',		'caption',		'center',		'col',		'colgroup',		'dd',		'details',		'dir',		'div',		'dl',		'dt',		'embed',		'fieldset',		'figcaption',		'figure',		'footer',		'form',		'frame',		'frameset',		'h1',		'h2',		'h3',		'h4',		'h5',		'h6',		'head',		'header',		'hgroup',		'hr',		'html',		'iframe',		'img',		'input',		'isindex',		'li',		'link',		'listing',		'main',		'marquee',		'menu',		'menuitem',		'meta',		'nav',		'noembed',		'noframes',		'noscript',		'object',		'ol',		'p',		'param',		'plaintext',		'pre',		'script',		'section',		'select',		'source',		'style',		'summary',		'table',		'tbody',		'td',		'textarea',		'tfoot',		'th',		'thead',		'title',		'tr',		'track',		'ul',		'wbr',		'xmp'	],	"http://www.w3.org/1998/Math/MathML": [		'mi',		'mo',		'mn',		'ms',		'mtext',		'annotation-xml'	],	"http://www.w3.org/2000/svg": [		'foreignObject',		'desc',		'title'	]};function StackItem(namespaceURI, localName, attributes, node) {	this.localName = localName;	this.namespaceURI = namespaceURI;	this.attributes = attributes;	this.node = node;}StackItem.prototype.isSpecial = function() {	return this.namespaceURI in SpecialElements &&		SpecialElements[this.namespaceURI].indexOf(this.localName) > -1;};StackItem.prototype.isFosterParenting = function() {	if (this.namespaceURI === "http://www.w3.org/1999/xhtml") {		return this.localName === 'table' ||			this.localName === 'tbody' ||			this.localName === 'tfoot' ||			this.localName === 'thead' ||			this.localName === 'tr';	}	return false;};StackItem.prototype.isNumberedHeader = function() {	if (this.namespaceURI === "http://www.w3.org/1999/xhtml") {		return this.localName === 'h1' ||			this.localName === 'h2' ||			this.localName === 'h3' ||			this.localName === 'h4' ||			this.localName === 'h5' ||			this.localName === 'h6';	}	return false;};StackItem.prototype.isForeign = function() {	return this.namespaceURI != "http://www.w3.org/1999/xhtml";};function getAttribute(item, name) {	for (var i = 0; i < item.attributes.length; i++) {		if (item.attributes[i].nodeName == name)			return item.attributes[i].nodeValue;	}	return null;}StackItem.prototype.isHtmlIntegrationPoint = function() {	if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") {		if (this.localName !== "annotation-xml")			return false;		var encoding = getAttribute(this, 'encoding');		if (!encoding)			return false;		encoding = encoding.toLowerCase();		return encoding === "text/html" || encoding === "application/xhtml+xml";	}	if (this.namespaceURI === "http://www.w3.org/2000/svg") {		return this.localName === "foreignObject"			|| this.localName === "desc"			|| this.localName === "title";	}	return false;};StackItem.prototype.isMathMLTextIntegrationPoint = function() {	if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") {		return this.localName === "mi"			|| this.localName === "mo"			|| this.localName === "mn"			|| this.localName === "ms"			|| this.localName === "mtext";	}	return false;};exports.StackItem = StackItem;},{}],5:[function(_dereq_,module,exports){var InputStream = _dereq_('./InputStream').InputStream;var EntityParser = _dereq_('./EntityParser').EntityParser;function isWhitespace(c){	return c === " " || c === "\n" || c === "\t" || c === "\r" || c === "\f";}function isAlpha(c) {	return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');}function Tokenizer(tokenHandler) {	this._tokenHandler = tokenHandler;	this._state = Tokenizer.DATA;	this._inputStream = new InputStream();	this._currentToken = null;	this._temporaryBuffer = '';	this._additionalAllowedCharacter = '';}Tokenizer.prototype._parseError = function(code, args) {	this._tokenHandler.parseError(code, args);};Tokenizer.prototype._emitToken = function(token) {	if (token.type === 'StartTag') {		for (var i = 1; i < token.data.length; i++) {			if (!token.data[i].nodeName)				token.data.splice(i--, 1);		}	} else if (token.type === 'EndTag') {		if (token.selfClosing) {			this._parseError('self-closing-flag-on-end-tag');		}		if (token.data.length !== 0) {			this._parseError('attributes-in-end-tag');		}	}	this._tokenHandler.processToken(token);	if (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {		this._parseError('non-void-element-with-trailing-solidus', {name: token.name});	}};Tokenizer.prototype._emitCurrentToken = function() {	this._state = Tokenizer.DATA;	this._emitToken(this._currentToken);};Tokenizer.prototype._currentAttribute = function() {	return this._currentToken.data[this._currentToken.data.length - 1];};Tokenizer.prototype.setState = function(state) {	this._state = state;};Tokenizer.prototype.tokenize = function(source) {	Tokenizer.DATA = data_state;	Tokenizer.RCDATA = rcdata_state;	Tokenizer.RAWTEXT = rawtext_state;	Tokenizer.SCRIPT_DATA = script_data_state;	Tokenizer.PLAINTEXT = plaintext_state;	this._state = Tokenizer.DATA;	this._inputStream.append(source);	this._tokenHandler.startTokenization(this);	this._inputStream.eof = true;	var tokenizer = this;	while (this._state.call(this, this._inputStream));	function data_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._emitToken({type: 'EOF', data: null});			return false;		} else if (data === '&') {			tokenizer.setState(character_reference_in_data_state);		} else if (data === '<') {			tokenizer.setState(tag_open_state);		} else if (data === '\u0000') {			tokenizer._emitToken({type: 'Characters', data: data});			buffer.commit();		} else {			var chars = buffer.matchUntil("&|<|\u0000");			tokenizer._emitToken({type: 'Characters', data: data + chars});			buffer.commit();		}		return true;	}	function character_reference_in_data_state(buffer) {		var character = EntityParser.consumeEntity(buffer, tokenizer);		tokenizer.setState(data_state);		tokenizer._emitToken({type: 'Characters', data: character || '&'});		return true;	}	function rcdata_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._emitToken({type: 'EOF', data: null});			return false;		} else if (data === '&') {			tokenizer.setState(character_reference_in_rcdata_state);		} else if (data === '<') {			tokenizer.setState(rcdata_less_than_sign_state);		} else if (data === "\u0000") {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			var chars = buffer.matchUntil("&|<|\u0000");			tokenizer._emitToken({type: 'Characters', data: data + chars});			buffer.commit();		}		return true;	}	function character_reference_in_rcdata_state(buffer) {		var character = EntityParser.consumeEntity(buffer, tokenizer);		tokenizer.setState(rcdata_state);		tokenizer._emitToken({type: 'Characters', data: character || '&'});		return true;	}	function rawtext_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._emitToken({type: 'EOF', data: null});			return false;		} else if (data === '<') {			tokenizer.setState(rawtext_less_than_sign_state);		} else if (data === "\u0000") {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			var chars = buffer.matchUntil("<|\u0000");			tokenizer._emitToken({type: 'Characters', data: data + chars});		}		return true;	}	function plaintext_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._emitToken({type: 'EOF', data: null});			return false;		} else if (data === "\u0000") {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			var chars = buffer.matchUntil("\u0000");			tokenizer._emitToken({type: 'Characters', data: data + chars});		}		return true;	}	function script_data_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._emitToken({type: 'EOF', data: null});			return false;		} else if (data === '<') {			tokenizer.setState(script_data_less_than_sign_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			var chars = buffer.matchUntil("<|\u0000");			tokenizer._emitToken({type: 'Characters', data: data + chars});		}		return true;	}	function rcdata_less_than_sign_state(buffer) {		var data = buffer.char();		if (data === "/") {			this._temporaryBuffer = '';			tokenizer.setState(rcdata_end_tag_open_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '<'});			buffer.unget(data);			tokenizer.setState(rcdata_state);		}		return true;	}	function rcdata_end_tag_open_state(buffer) {		var data = buffer.char();		if (isAlpha(data)) {			this._temporaryBuffer += data;			tokenizer.setState(rcdata_end_tag_name_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '</'});			buffer.unget(data);			tokenizer.setState(rcdata_state);		}		return true;	}	function rcdata_end_tag_name_state(buffer) {		var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());		var data = buffer.char();		if (isWhitespace(data) && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer.setState(before_attribute_name_state);		} else if (data === '/' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer.setState(self_closing_tag_state);		} else if (data === '>' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else if (isAlpha(data)) {			this._temporaryBuffer += data;			buffer.commit();		} else {			tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});			buffer.unget(data);			tokenizer.setState(rcdata_state);		}		return true;	}	function rawtext_less_than_sign_state(buffer) {		var data = buffer.char();		if (data === "/") {			this._temporaryBuffer = '';			tokenizer.setState(rawtext_end_tag_open_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '<'});			buffer.unget(data);			tokenizer.setState(rawtext_state);		}		return true;	}	function rawtext_end_tag_open_state(buffer) {		var data = buffer.char();		if (isAlpha(data)) {			this._temporaryBuffer += data;			tokenizer.setState(rawtext_end_tag_name_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '</'});			buffer.unget(data);			tokenizer.setState(rawtext_state);		}		return true;	}	function rawtext_end_tag_name_state(buffer) {		var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());		var data = buffer.char();		if (isWhitespace(data) && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer.setState(before_attribute_name_state);		} else if (data === '/' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer.setState(self_closing_tag_state);		} else if (data === '>' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else if (isAlpha(data)) {			this._temporaryBuffer += data;			buffer.commit();		} else {			tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});			buffer.unget(data);			tokenizer.setState(rawtext_state);		}		return true;	}	function script_data_less_than_sign_state(buffer) {		var data = buffer.char();		if (data === "/") {			this._temporaryBuffer = '';			tokenizer.setState(script_data_end_tag_open_state);		} else if (data === '!') {			tokenizer._emitToken({type: 'Characters', data: '<!'});			tokenizer.setState(script_data_escape_start_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '<'});			buffer.unget(data);			tokenizer.setState(script_data_state);		}		return true;	}	function script_data_end_tag_open_state(buffer) {		var data = buffer.char();		if (isAlpha(data)) {			this._temporaryBuffer += data;			tokenizer.setState(script_data_end_tag_name_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '</'});			buffer.unget(data);			tokenizer.setState(script_data_state);		}		return true;	}	function script_data_end_tag_name_state(buffer) {		var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());		var data = buffer.char();		if (isWhitespace(data) && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer.setState(before_attribute_name_state);		} else if (data === '/' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer.setState(self_closing_tag_state);		} else if (data === '>' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer._emitCurrentToken();		} else if (isAlpha(data)) {			this._temporaryBuffer += data;			buffer.commit();		} else {			tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});			buffer.unget(data);			tokenizer.setState(script_data_state);		}		return true;	}	function script_data_escape_start_state(buffer) {		var data = buffer.char();		if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_escape_start_dash_state);		} else {			buffer.unget(data);			tokenizer.setState(script_data_state);		}		return true;	}	function script_data_escape_start_dash_state(buffer) {		var data = buffer.char();		if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_escaped_dash_dash_state);		} else {			buffer.unget(data);			tokenizer.setState(script_data_state);		}		return true;	}	function script_data_escaped_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_escaped_dash_state);		} else if (data === '<') {			tokenizer.setState(script_data_escaped_less_then_sign_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			var chars = buffer.matchUntil('<|-|\u0000');			tokenizer._emitToken({type: 'Characters', data: data + chars});		}		return true;	}	function script_data_escaped_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_escaped_dash_dash_state);		} else if (data === '<') {			tokenizer.setState(script_data_escaped_less_then_sign_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			tokenizer.setState(script_data_escaped_state);		} else {			tokenizer._emitToken({type: 'Characters', data: data});			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_escaped_dash_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError('eof-in-script');			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '<') {			tokenizer.setState(script_data_escaped_less_then_sign_state);		} else if (data === '>') {			tokenizer._emitToken({type: 'Characters', data: '>'});			tokenizer.setState(script_data_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			tokenizer.setState(script_data_escaped_state);		} else {			tokenizer._emitToken({type: 'Characters', data: data});			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_escaped_less_then_sign_state(buffer) {		var data = buffer.char();		if (data === '/') {			this._temporaryBuffer = '';			tokenizer.setState(script_data_escaped_end_tag_open_state);		} else if (isAlpha(data)) {			tokenizer._emitToken({type: 'Characters', data: '<' + data});			this._temporaryBuffer = data;			tokenizer.setState(script_data_double_escape_start_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '<'});			buffer.unget(data);			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_escaped_end_tag_open_state(buffer) {		var data = buffer.char();		if (isAlpha(data)) {			this._temporaryBuffer = data;			tokenizer.setState(script_data_escaped_end_tag_name_state);		} else {			tokenizer._emitToken({type: 'Characters', data: '</'});			buffer.unget(data);			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_escaped_end_tag_name_state(buffer) {		var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());		var data = buffer.char();		if (isWhitespace(data) && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer.setState(before_attribute_name_state);		} else if (data === '/' && appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer.setState(self_closing_tag_state);		} else if (data === '>' &&  appropriate) {			tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isAlpha(data)) {			this._temporaryBuffer += data;			buffer.commit();		} else {			tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});			buffer.unget(data);			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_double_escape_start_state(buffer) {		var data = buffer.char();		if (isWhitespace(data) || data === '/' || data === '>') {			tokenizer._emitToken({type: 'Characters', data: data});			if (this._temporaryBuffer.toLowerCase() === 'script')				tokenizer.setState(script_data_double_escaped_state);			else				tokenizer.setState(script_data_escaped_state);		} else if (isAlpha(data)) {			tokenizer._emitToken({type: 'Characters', data: data});			this._temporaryBuffer += data;			buffer.commit();		} else {			buffer.unget(data);			tokenizer.setState(script_data_escaped_state);		}		return true;	}	function script_data_double_escaped_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError('eof-in-script');			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_double_escaped_dash_state);		} else if (data === '<') {			tokenizer._emitToken({type: 'Characters', data: '<'});			tokenizer.setState(script_data_double_escaped_less_than_sign_state);		} else if (data === '\u0000') {			tokenizer._parseError('invalid-codepoint');			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			buffer.commit();		} else {			tokenizer._emitToken({type: 'Characters', data: data});			buffer.commit();		}		return true;	}	function script_data_double_escaped_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError('eof-in-script');			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			tokenizer.setState(script_data_double_escaped_dash_dash_state);		} else if (data === '<') {			tokenizer._emitToken({type: 'Characters', data: '<'});			tokenizer.setState(script_data_double_escaped_less_than_sign_state);		} else if (data === '\u0000') {			tokenizer._parseError('invalid-codepoint');			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			tokenizer.setState(script_data_double_escaped_state);		} else {			tokenizer._emitToken({type: 'Characters', data: data});			tokenizer.setState(script_data_double_escaped_state);		}		return true;	}	function script_data_double_escaped_dash_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError('eof-in-script');			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._emitToken({type: 'Characters', data: '-'});			buffer.commit();		} else if (data === '<') {			tokenizer._emitToken({type: 'Characters', data: '<'});			tokenizer.setState(script_data_double_escaped_less_than_sign_state);		} else if (data === '>') {			tokenizer._emitToken({type: 'Characters', data: '>'});			tokenizer.setState(script_data_state);		} else if (data === '\u0000') {			tokenizer._parseError('invalid-codepoint');			tokenizer._emitToken({type: 'Characters', data: '\uFFFD'});			tokenizer.setState(script_data_double_escaped_state);		} else {			tokenizer._emitToken({type: 'Characters', data: data});			tokenizer.setState(script_data_double_escaped_state);		}		return true;	}	function script_data_double_escaped_less_than_sign_state(buffer) {		var data = buffer.char();		if (data === '/') {			tokenizer._emitToken({type: 'Characters', data: '/'});			this._temporaryBuffer = '';			tokenizer.setState(script_data_double_escape_end_state);		} else {			buffer.unget(data);			tokenizer.setState(script_data_double_escaped_state);		}		return true;	}	function script_data_double_escape_end_state(buffer) {		var data = buffer.char();		if (isWhitespace(data) || data === '/' || data === '>') {			tokenizer._emitToken({type: 'Characters', data: data});			if (this._temporaryBuffer.toLowerCase() === 'script')				tokenizer.setState(script_data_escaped_state);			else				tokenizer.setState(script_data_double_escaped_state);		} else if (isAlpha(data)) {			tokenizer._emitToken({type: 'Characters', data: data});			this._temporaryBuffer += data;			buffer.commit();		} else {			buffer.unget(data);			tokenizer.setState(script_data_double_escaped_state);		}		return true;	}	function tag_open_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("bare-less-than-sign-at-eof");			tokenizer._emitToken({type: 'Characters', data: '<'});			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isAlpha(data)) {			tokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};			tokenizer.setState(tag_name_state);		} else if (data === '!') {			tokenizer.setState(markup_declaration_open_state);		} else if (data === '/') {			tokenizer.setState(close_tag_open_state);		} else if (data === '>') {			tokenizer._parseError("expected-tag-name-but-got-right-bracket");			tokenizer._emitToken({type: 'Characters', data: "<>"});			tokenizer.setState(data_state);		} else if (data === '?') {			tokenizer._parseError("expected-tag-name-but-got-question-mark");			buffer.unget(data);			tokenizer.setState(bogus_comment_state);		} else {			tokenizer._parseError("expected-tag-name");			tokenizer._emitToken({type: 'Characters', data: "<"});			buffer.unget(data);			tokenizer.setState(data_state);		}		return true;	}	function close_tag_open_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-closing-tag-but-got-eof");			tokenizer._emitToken({type: 'Characters', data: '</'});			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isAlpha(data)) {			tokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};			tokenizer.setState(tag_name_state);		} else if (data === '>') {			tokenizer._parseError("expected-closing-tag-but-got-right-bracket");			tokenizer.setState(data_state);		} else {			tokenizer._parseError("expected-closing-tag-but-got-char", {data: data}); // param 1 is datavars:			buffer.unget(data);			tokenizer.setState(bogus_comment_state);		}		return true;	}	function tag_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError('eof-in-tag-name');			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			tokenizer.setState(before_attribute_name_state);		} else if (isAlpha(data)) {			tokenizer._currentToken.name += data.toLowerCase();		} else if (data === '>') {			tokenizer._emitCurrentToken();		} else if (data === '/') {			tokenizer.setState(self_closing_tag_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.name += "\uFFFD";		} else {			tokenizer._currentToken.name += data;		}		buffer.commit();		return true;	}	function before_attribute_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-attribute-name-but-got-eof");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			return true;		} else if (isAlpha(data)) {			tokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: ""});			tokenizer.setState(attribute_name_state);		} else if (data === '>') {			tokenizer._emitCurrentToken();		} else if (data === '/') {			tokenizer.setState(self_closing_tag_state);		} else if (data === "'" || data === '"' || data === '=' || data === '<') {			tokenizer._parseError("invalid-character-in-attribute-name");			tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""});			tokenizer.setState(attribute_name_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""});		} else {			tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""});			tokenizer.setState(attribute_name_state);		}		return true;	}	function attribute_name_state(buffer) {		var data = buffer.char();		var leavingThisState = true;		var shouldEmit = false;		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-attribute-name");			buffer.unget(data);			tokenizer.setState(data_state);			shouldEmit = true;		} else if (data === '=') {			tokenizer.setState(before_attribute_value_state);		} else if (isAlpha(data)) {			tokenizer._currentAttribute().nodeName += data.toLowerCase();			leavingThisState = false;		} else if (data === '>') {			shouldEmit = true;		} else if (isWhitespace(data)) {			tokenizer.setState(after_attribute_name_state);		} else if (data === '/') {			tokenizer.setState(self_closing_tag_state);		} else if (data === "'" || data === '"') {			tokenizer._parseError("invalid-character-in-attribute-name");			tokenizer._currentAttribute().nodeName += data;			leavingThisState = false;		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentAttribute().nodeName += "\uFFFD";		} else {			tokenizer._currentAttribute().nodeName += data;			leavingThisState = false;		}		if (leavingThisState) {			var attributes = tokenizer._currentToken.data;			var currentAttribute = attributes[attributes.length - 1];			for (var i = attributes.length - 2; i >= 0; i--) {				if (currentAttribute.nodeName === attributes[i].nodeName) {					tokenizer._parseError("duplicate-attribute", {name: currentAttribute.nodeName});					currentAttribute.nodeName = null;					break;				}			}			if (shouldEmit)				tokenizer._emitCurrentToken();		} else {			buffer.commit();		}		return true;	}	function after_attribute_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-end-of-tag-but-got-eof");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			return true;		} else if (data === '=') {			tokenizer.setState(before_attribute_value_state);		} else if (data === '>') {			tokenizer._emitCurrentToken();		} else if (isAlpha(data)) {			tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""});			tokenizer.setState(attribute_name_state);		} else if (data === '/') {			tokenizer.setState(self_closing_tag_state);		} else if (data === "'" || data === '"' || data === '<') {			tokenizer._parseError("invalid-character-after-attribute-name");			tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""});			tokenizer.setState(attribute_name_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""});		} else {			tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""});			tokenizer.setState(attribute_name_state);		}		return true;	}	function before_attribute_value_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-attribute-value-but-got-eof");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			return true;		} else if (data === '"') {			tokenizer.setState(attribute_value_double_quoted_state);		} else if (data === '&') {			tokenizer.setState(attribute_value_unquoted_state);			buffer.unget(data);		} else if (data === "'") {			tokenizer.setState(attribute_value_single_quoted_state);		} else if (data === '>') {			tokenizer._parseError("expected-attribute-value-but-got-right-bracket");			tokenizer._emitCurrentToken();		} else if (data === '=' || data === '<' || data === '`') {			tokenizer._parseError("unexpected-character-in-unquoted-attribute-value");			tokenizer._currentAttribute().nodeValue += data;			tokenizer.setState(attribute_value_unquoted_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentAttribute().nodeValue += "\uFFFD";		} else {			tokenizer._currentAttribute().nodeValue += data;			tokenizer.setState(attribute_value_unquoted_state);		}		return true;	}	function attribute_value_double_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-attribute-value-double-quote");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '"') {			tokenizer.setState(after_attribute_value_state);		} else if (data === '&') {			this._additionalAllowedCharacter = '"';			tokenizer.setState(character_reference_in_attribute_value_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentAttribute().nodeValue += "\uFFFD";		} else {			var s = buffer.matchUntil('[\0"&]');			data = data + s;			tokenizer._currentAttribute().nodeValue += data;		}		return true;	}	function attribute_value_single_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-attribute-value-single-quote");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === "'") {			tokenizer.setState(after_attribute_value_state);		} else if (data === '&') {			this._additionalAllowedCharacter = "'";			tokenizer.setState(character_reference_in_attribute_value_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentAttribute().nodeValue += "\uFFFD";		} else {			tokenizer._currentAttribute().nodeValue += data + buffer.matchUntil("\u0000|['&]");		}		return true;	}	function attribute_value_unquoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-after-attribute-value");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			tokenizer.setState(before_attribute_name_state);		} else if (data === '&') {			this._additionalAllowedCharacter = ">";			tokenizer.setState(character_reference_in_attribute_value_state);		} else if (data === '>') {			tokenizer._emitCurrentToken();		} else if (data === '"' || data === "'" || data === '=' || data === '`' || data === '<') {			tokenizer._parseError("unexpected-character-in-unquoted-attribute-value");			tokenizer._currentAttribute().nodeValue += data;			buffer.commit();		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentAttribute().nodeValue += "\uFFFD";		} else {			var o = buffer.matchUntil("\u0000|["+ "\t\n\v\f\x20\r" + "&<>\"'=`" +"]");			if (o === InputStream.EOF) {				tokenizer._parseError("eof-in-attribute-value-no-quotes");				tokenizer._emitCurrentToken();			}			buffer.commit();			tokenizer._currentAttribute().nodeValue += data + o;		}		return true;	}	function character_reference_in_attribute_value_state(buffer) {		var character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);		this._currentAttribute().nodeValue += character || '&';		if (this._additionalAllowedCharacter === '"')			tokenizer.setState(attribute_value_double_quoted_state);		else if (this._additionalAllowedCharacter === '\'')			tokenizer.setState(attribute_value_single_quoted_state);		else if (this._additionalAllowedCharacter === '>')			tokenizer.setState(attribute_value_unquoted_state);		return true;	}	function after_attribute_value_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-after-attribute-value");			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			tokenizer.setState(before_attribute_name_state);		} else if (data === '>') {			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (data === '/') {			tokenizer.setState(self_closing_tag_state);		} else {			tokenizer._parseError("unexpected-character-after-attribute-value");			buffer.unget(data);			tokenizer.setState(before_attribute_name_state);		}		return true;	}	function self_closing_tag_state(buffer) {		var c = buffer.char();		if (c === InputStream.EOF) {			tokenizer._parseError("unexpected-eof-after-solidus-in-tag");			buffer.unget(c);			tokenizer.setState(data_state);		} else if (c === '>') {			tokenizer._currentToken.selfClosing = true;			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			tokenizer._parseError("unexpected-character-after-solidus-in-tag");			buffer.unget(c);			tokenizer.setState(before_attribute_name_state);		}		return true;	}	function bogus_comment_state(buffer) {		var data = buffer.matchUntil('>');		data = data.replace(/\u0000/g, "\uFFFD");		buffer.char();		tokenizer._emitToken({type: 'Comment', data: data});		tokenizer.setState(data_state);		return true;	}	function markup_declaration_open_state(buffer) {		var chars = buffer.shift(2);		if (chars === '--') {			tokenizer._currentToken = {type: 'Comment', data: ''};			tokenizer.setState(comment_start_state);		} else {			var newchars = buffer.shift(5);			if (newchars === InputStream.EOF || chars === InputStream.EOF) {				tokenizer._parseError("expected-dashes-or-doctype");				tokenizer.setState(bogus_comment_state);				buffer.unget(chars);				return true;			}			chars += newchars;			if (chars.toUpperCase() === 'DOCTYPE') {				tokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};				tokenizer.setState(doctype_state);			} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {				tokenizer.setState(cdata_section_state);			} else {				tokenizer._parseError("expected-dashes-or-doctype");				buffer.unget(chars);				tokenizer.setState(bogus_comment_state);			}		}		return true;	}	function cdata_section_state(buffer) {		var data = buffer.matchUntil(']]>');		buffer.shift(3);		if (data) {			tokenizer._emitToken({type: 'Characters', data: data});		}		tokenizer.setState(data_state);		return true;	}	function comment_start_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer.setState(comment_start_dash_state);		} else if (data === '>') {			tokenizer._parseError("incorrect-comment");			tokenizer._emitToken(tokenizer._currentToken);			tokenizer.setState(data_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data += "\uFFFD";		} else {			tokenizer._currentToken.data += data;			tokenizer.setState(comment_state);		}		return true;	}	function comment_start_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer.setState(comment_end_state);		} else if (data === '>') {			tokenizer._parseError("incorrect-comment");			tokenizer._emitToken(tokenizer._currentToken);			tokenizer.setState(data_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data += "\uFFFD";		} else {			tokenizer._currentToken.data += '-' + data;			tokenizer.setState(comment_state);		}		return true;	}	function comment_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer.setState(comment_end_dash_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data += "\uFFFD";		} else {			tokenizer._currentToken.data += data;			buffer.commit();		}		return true;	}	function comment_end_dash_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment-end-dash");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer.setState(comment_end_state);		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data += "-\uFFFD";			tokenizer.setState(comment_state);		} else {			tokenizer._currentToken.data += '-' + data + buffer.matchUntil('\u0000|-');			buffer.char();		}		return true;	}	function comment_end_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment-double-dash");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '>') {			tokenizer._emitToken(tokenizer._currentToken);			tokenizer.setState(data_state);		} else if (data === '!') {			tokenizer._parseError("unexpected-bang-after-double-dash-in-comment");			tokenizer.setState(comment_end_bang_state);		} else if (data === '-') {			tokenizer._parseError("unexpected-dash-after-double-dash-in-comment");			tokenizer._currentToken.data += data;		} else if (data === '\u0000') {			tokenizer._parseError("invalid-codepoint");			tokenizer._currentToken.data += "--\uFFFD";			tokenizer.setState(comment_state);		} else {			tokenizer._parseError("unexpected-char-in-comment");			tokenizer._currentToken.data += '--' + data;			tokenizer.setState(comment_state);		}		return true;	}	function comment_end_bang_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-comment-end-bang-state");			tokenizer._emitToken(tokenizer._currentToken);			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '>') {			tokenizer._emitToken(tokenizer._currentToken);			tokenizer.setState(data_state);		} else if (data === '-') {			tokenizer._currentToken.data += '--!';			tokenizer.setState(comment_end_dash_state);		} else {			tokenizer._currentToken.data += '--!' + data;			tokenizer.setState(comment_state);		}		return true;	}	function doctype_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-doctype-name-but-got-eof");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {			tokenizer.setState(before_doctype_name_state);		} else {			tokenizer._parseError("need-space-after-doctype");			buffer.unget(data);			tokenizer.setState(before_doctype_name_state);		}		return true;	}	function before_doctype_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("expected-doctype-name-but-got-eof");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {		} else if (data === '>') {			tokenizer._parseError("expected-doctype-name-but-got-right-bracket");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			if (isAlpha(data))				data = data.toLowerCase();			tokenizer._currentToken.name = data;			tokenizer.setState(doctype_name_state);		}		return true;	}	function doctype_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer._parseError("eof-in-doctype-name");			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {			tokenizer.setState(after_doctype_name_state);		} else if (data === '>') {			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			if (isAlpha(data))				data = data.toLowerCase();			tokenizer._currentToken.name += data;			buffer.commit();		}		return true;	}	function after_doctype_name_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer._parseError("eof-in-doctype");			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {		} else if (data === '>') {			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			if (['p', 'P'].indexOf(data) > -1) {				var expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];				var matched = expected.every(function(expected){					data = buffer.char();					return expected.indexOf(data) > -1;				});				if (matched) {					tokenizer.setState(after_doctype_public_keyword_state);					return true;				}			} else if (['s', 'S'].indexOf(data) > -1) {				var expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];				var matched = expected.every(function(expected){					data = buffer.char();					return expected.indexOf(data) > -1;				});				if (matched) {					tokenizer.setState(after_doctype_system_keyword_state);					return true;				}			}			buffer.unget(data);			tokenizer._currentToken.forceQuirks = true;			if (data === InputStream.EOF) {				tokenizer._parseError("eof-in-doctype");				buffer.unget(data);				tokenizer.setState(data_state);				tokenizer._emitCurrentToken();			} else {				tokenizer._parseError("expected-space-or-right-bracket-in-doctype", {data: data});				tokenizer.setState(bogus_doctype_state);			}		}		return true;	}	function after_doctype_public_keyword_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {			tokenizer.setState(before_doctype_public_identifier_state);		} else if (data === "'" || data === '"') {			tokenizer._parseError("unexpected-char-in-doctype");			buffer.unget(data);			tokenizer.setState(before_doctype_public_identifier_state);		} else {			buffer.unget(data);			tokenizer.setState(before_doctype_public_identifier_state);		}		return true;	}	function before_doctype_public_identifier_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (isWhitespace(data)) {		} else if (data === '"') {			tokenizer._currentToken.publicId = '';			tokenizer.setState(doctype_public_identifier_double_quoted_state);		} else if (data === "'") {			tokenizer._currentToken.publicId = '';			tokenizer.setState(doctype_public_identifier_single_quoted_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(bogus_doctype_state);		}		return true;	}	function doctype_public_identifier_double_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (data === '"') {			tokenizer.setState(after_doctype_public_identifier_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			tokenizer._currentToken.publicId += data;		}		return true;	}	function doctype_public_identifier_single_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			buffer.unget(data);			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (data === "'") {			tokenizer.setState(after_doctype_public_identifier_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else {			tokenizer._currentToken.publicId += data;		}		return true;	}	function after_doctype_public_identifier_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			tokenizer.setState(between_doctype_public_and_system_identifiers_state);		} else if (data === '>') {			tokenizer.setState(data_state);			tokenizer._emitCurrentToken();		} else if (data === '"') {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_double_quoted_state);		} else if (data === "'") {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_single_quoted_state);		} else {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(bogus_doctype_state);		}		return true;	}	function between_doctype_public_and_system_identifiers_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {		} else if (data === '>') {			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else if (data === '"') {			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_double_quoted_state);		} else if (data === "'") {			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_single_quoted_state);		} else {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(bogus_doctype_state);		}		return true;	}	function after_doctype_system_keyword_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {			tokenizer.setState(before_doctype_system_identifier_state);		} else if (data === "'" || data === '"') {			tokenizer._parseError("unexpected-char-in-doctype");			buffer.unget(data);			tokenizer.setState(before_doctype_system_identifier_state);		} else {			buffer.unget(data);			tokenizer.setState(before_doctype_system_identifier_state);		}		return true;	}	function before_doctype_system_identifier_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {		} else if (data === '"') {			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_double_quoted_state);		} else if (data === "'") {			tokenizer._currentToken.systemId = '';			tokenizer.setState(doctype_system_identifier_single_quoted_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer.setState(bogus_doctype_state);		}		return true;	}	function doctype_system_identifier_double_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === '"') {			tokenizer.setState(after_doctype_system_identifier_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else {			tokenizer._currentToken.systemId += data;		}		return true;	}	function doctype_system_identifier_single_quoted_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (data === "'") {			tokenizer.setState(after_doctype_system_identifier_state);		} else if (data === '>') {			tokenizer._parseError("unexpected-end-of-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else {			tokenizer._currentToken.systemId += data;		}		return true;	}	function after_doctype_system_identifier_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			tokenizer._parseError("eof-in-doctype");			tokenizer._currentToken.forceQuirks = true;			tokenizer._emitCurrentToken();			buffer.unget(data);			tokenizer.setState(data_state);		} else if (isWhitespace(data)) {		} else if (data === '>') {			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else {			tokenizer._parseError("unexpected-char-in-doctype");			tokenizer.setState(bogus_doctype_state);		}		return true;	}	function bogus_doctype_state(buffer) {		var data = buffer.char();		if (data === InputStream.EOF) {			buffer.unget(data);			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		} else if (data === '>') {			tokenizer._emitCurrentToken();			tokenizer.setState(data_state);		}		return true;	}};Object.defineProperty(Tokenizer.prototype, 'lineNumber', {	get: function() {		return this._inputStream.location().line;	}});Object.defineProperty(Tokenizer.prototype, 'columnNumber', {	get: function() {		return this._inputStream.location().column;	}});exports.Tokenizer = Tokenizer;},{"./EntityParser":2,"./InputStream":3}],6:[function(_dereq_,module,exports){var assert = _dereq_('assert');var messages = _dereq_('./messages.json');var constants = _dereq_('./constants');var EventEmitter = _dereq_('events').EventEmitter;var Tokenizer = _dereq_('./Tokenizer').Tokenizer;var ElementStack = _dereq_('./ElementStack').ElementStack;var StackItem = _dereq_('./StackItem').StackItem;var Marker = {};function isWhitespace(ch) {	return ch === " " || ch === "\n" || ch === "\t" || ch === "\r" || ch === "\f";}function isWhitespaceOrReplacementCharacter(ch) {	return isWhitespace(ch) || ch === '\uFFFD';}function isAllWhitespace(characters) {	for (var i = 0; i < characters.length; i++) {		var ch = characters[i];		if (!isWhitespace(ch))			return false;	}	return true;}function isAllWhitespaceOrReplacementCharacters(characters) {	for (var i = 0; i < characters.length; i++) {		var ch = characters[i];		if (!isWhitespaceOrReplacementCharacter(ch))			return false;	}	return true;}function getAttribute(node, name) {	for (var i = 0; i < node.attributes.length; i++) {		var attribute = node.attributes[i];		if (attribute.nodeName === name) {			return attribute;		}	}	return null;}function CharacterBuffer(characters) {	this.characters = characters;	this.current = 0;	this.end = this.characters.length;}CharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {	if (this.characters[this.current] === '\n')		this.current++;};CharacterBuffer.prototype.skipLeadingWhitespace = function() {	while (isWhitespace(this.characters[this.current])) {		if (++this.current == this.end)			return;	}};CharacterBuffer.prototype.skipLeadingNonWhitespace = function() {	while (!isWhitespace(this.characters[this.current])) {		if (++this.current == this.end)			return;	}};CharacterBuffer.prototype.takeRemaining = function() {	return this.characters.substring(this.current);};CharacterBuffer.prototype.takeLeadingWhitespace = function() {	var start = this.current;	this.skipLeadingWhitespace();	if (start === this.current)		return "";	return this.characters.substring(start, this.current - start);};Object.defineProperty(CharacterBuffer.prototype, 'length', {	get: function(){		return this.end - this.current;	}});function TreeBuilder() {	this.tokenizer = null;	this.errorHandler = null;	this.scriptingEnabled = false;	this.document = null;	this.head = null;	this.form = null;	this.openElements = new ElementStack();	this.activeFormattingElements = [];	this.insertionMode = null;	this.insertionModeName = "";	this.originalInsertionMode = "";	this.inQuirksMode = false; // TODO quirks mode	this.compatMode = "no quirks";	this.framesetOk = true;	this.redirectAttachToFosterParent = false;	this.selfClosingFlagAcknowledged = false;	this.context = "";	this.pendingTableCharacters = [];	this.shouldSkipLeadingNewline = false;	var tree = this;	var modes = this.insertionModes = {};	modes.base = {		end_tag_handlers: {"-default": 'endTagOther'},		start_tag_handlers: {"-default": 'startTagOther'},		processEOF: function() {			tree.generateImpliedEndTags();			if (tree.openElements.length > 2) {				tree.parseError('expected-closing-tag-but-got-eof');			} else if (tree.openElements.length == 2 &&				tree.openElements.item(1).localName != 'body') {				tree.parseError('expected-closing-tag-but-got-eof');			} else if (tree.context && tree.openElements.length > 1) {			}		},		processComment: function(data) {			tree.insertComment(data, tree.currentStackItem().node);		},		processDoctype: function(name, publicId, systemId, forceQuirks) {			tree.parseError('unexpected-doctype');		},		processStartTag: function(name, attributes, selfClosing) {			if (this[this.start_tag_handlers[name]]) {				this[this.start_tag_handlers[name]](name, attributes, selfClosing);			} else if (this[this.start_tag_handlers["-default"]]) {				this[this.start_tag_handlers["-default"]](name, attributes, selfClosing);			} else {				throw(new Error("No handler found for "+name));			}		},		processEndTag: function(name) {			if (this[this.end_tag_handlers[name]]) {				this[this.end_tag_handlers[name]](name);			} else if (this[this.end_tag_handlers["-default"]]) {				this[this.end_tag_handlers["-default"]](name);			} else {				throw(new Error("No handler found for "+name));			}		},		startTagHtml: function(name, attributes) {			modes.inBody.startTagHtml(name, attributes);		}	};	modes.initial = Object.create(modes.base);	modes.initial.processEOF = function() {		tree.parseError("expected-doctype-but-got-eof");		this.anythingElse();		tree.insertionMode.processEOF();	};	modes.initial.processComment = function(data) {		tree.insertComment(data, tree.document);	};	modes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {		tree.insertDoctype(name || '', publicId || '', systemId || '');		if (forceQuirks || name != 'html' || (publicId != null && ([					"+//silmaril//dtd html pro v0r11 19970101//",					"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",					"-//as//dtd html 3.0 aswedit + extensions//",					"-//ietf//dtd html 2.0 level 1//",					"-//ietf//dtd html 2.0 level 2//",					"-//ietf//dtd html 2.0 strict level 1//",					"-//ietf//dtd html 2.0 strict level 2//",					"-//ietf//dtd html 2.0 strict//",					"-//ietf//dtd html 2.0//",					"-//ietf//dtd html 2.1e//",					"-//ietf//dtd html 3.0//",					"-//ietf//dtd html 3.0//",					"-//ietf//dtd html 3.2 final//",					"-//ietf//dtd html 3.2//",					"-//ietf//dtd html 3//",					"-//ietf//dtd html level 0//",					"-//ietf//dtd html level 0//",					"-//ietf//dtd html level 1//",					"-//ietf//dtd html level 1//",					"-//ietf//dtd html level 2//",					"-//ietf//dtd html level 2//",					"-//ietf//dtd html level 3//",					"-//ietf//dtd html level 3//",					"-//ietf//dtd html strict level 0//",					"-//ietf//dtd html strict level 0//",					"-//ietf//dtd html strict level 1//",					"-//ietf//dtd html strict level 1//",					"-//ietf//dtd html strict level 2//",					"-//ietf//dtd html strict level 2//",					"-//ietf//dtd html strict level 3//",					"-//ietf//dtd html strict level 3//",					"-//ietf//dtd html strict//",					"-//ietf//dtd html strict//",					"-//ietf//dtd html strict//",					"-//ietf//dtd html//",					"-//ietf//dtd html//",					"-//ietf//dtd html//",					"-//metrius//dtd metrius presentational//",					"-//microsoft//dtd internet explorer 2.0 html strict//",					"-//microsoft//dtd internet explorer 2.0 html//",					"-//microsoft//dtd internet explorer 2.0 tables//",					"-//microsoft//dtd internet explorer 3.0 html strict//",					"-//microsoft//dtd internet explorer 3.0 html//",					"-//microsoft//dtd internet explorer 3.0 tables//",					"-//netscape comm. corp.//dtd html//",					"-//netscape comm. corp.//dtd strict html//",					"-//o'reilly and associates//dtd html 2.0//",					"-//o'reilly and associates//dtd html extended 1.0//",					"-//spyglass//dtd html 2.0 extended//",					"-//sq//dtd html 2.0 hotmetal + extensions//",					"-//sun microsystems corp.//dtd hotjava html//",					"-//sun microsystems corp.//dtd hotjava strict html//",					"-//w3c//dtd html 3 1995-03-24//",					"-//w3c//dtd html 3.2 draft//",					"-//w3c//dtd html 3.2 final//",					"-//w3c//dtd html 3.2//",					"-//w3c//dtd html 3.2s draft//",					"-//w3c//dtd html 4.0 frameset//",					"-//w3c//dtd html 4.0 transitional//",					"-//w3c//dtd html experimental 19960712//",					"-//w3c//dtd html experimental 970421//",					"-//w3c//dtd w3 html//",					"-//w3o//dtd w3 html 3.0//",					"-//webtechs//dtd mozilla html 2.0//",					"-//webtechs//dtd mozilla html//",					"html"				].some(publicIdStartsWith)				|| [					"-//w3o//dtd w3 html strict 3.0//en//",					"-/w3c/dtd html 4.0 transitional/en",					"html"				].indexOf(publicId.toLowerCase()) > -1				|| (systemId == null && [					"-//w3c//dtd html 4.01 transitional//",					"-//w3c//dtd html 4.01 frameset//"				].some(publicIdStartsWith)))			)			|| (systemId != null && (systemId.toLowerCase() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"))		) {			tree.compatMode = "quirks";			tree.parseError("quirky-doctype");		} else if (publicId != null && ([				"-//w3c//dtd xhtml 1.0 transitional//",				"-//w3c//dtd xhtml 1.0 frameset//"			].some(publicIdStartsWith)			|| (systemId != null && [				"-//w3c//dtd html 4.01 transitional//",				"-//w3c//dtd html 4.01 frameset//"			].indexOf(publicId.toLowerCase()) > -1))		) {			tree.compatMode = "limited quirks";			tree.parseError("almost-standards-doctype");		} else {			if ((publicId == "-//W3C//DTD HTML 4.0//EN" && (systemId == null || systemId == "http://www.w3.org/TR/REC-html40/strict.dtd"))				|| (publicId == "-//W3C//DTD HTML 4.01//EN" && (systemId == null || systemId == "http://www.w3.org/TR/html4/strict.dtd"))				|| (publicId == "-//W3C//DTD XHTML 1.0 Strict//EN" && (systemId == "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"))				|| (publicId == "-//W3C//DTD XHTML 1.1//EN" && (systemId == "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"))			) {			} else if (!((systemId == null || systemId == "about:legacy-compat") && publicId == null)) {				tree.parseError("unknown-doctype");			}		}		tree.setInsertionMode('beforeHTML');		function publicIdStartsWith(string) {			return publicId.toLowerCase().indexOf(string) === 0;		}	};	modes.initial.processCharacters = function(buffer) {		buffer.skipLeadingWhitespace();		if (!buffer.length)			return;		tree.parseError('expected-doctype-but-got-chars');		this.anythingElse();		tree.insertionMode.processCharacters(buffer);	};	modes.initial.processStartTag = function(name, attributes, selfClosing) {		tree.parseError('expected-doctype-but-got-start-tag', {name: name});		this.anythingElse();		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.initial.processEndTag = function(name) {		tree.parseError('expected-doctype-but-got-end-tag', {name: name});		this.anythingElse();		tree.insertionMode.processEndTag(name);	};	modes.initial.anythingElse = function() {		tree.compatMode = 'quirks';		tree.setInsertionMode('beforeHTML');	};	modes.beforeHTML = Object.create(modes.base);	modes.beforeHTML.start_tag_handlers = {		html: 'startTagHtml',		'-default': 'startTagOther'	};	modes.beforeHTML.processEOF = function() {		this.anythingElse();		tree.insertionMode.processEOF();	};	modes.beforeHTML.processComment = function(data) {		tree.insertComment(data, tree.document);	};	modes.beforeHTML.processCharacters = function(buffer) {		buffer.skipLeadingWhitespace();		if (!buffer.length)			return;		this.anythingElse();		tree.insertionMode.processCharacters(buffer);	};	modes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {		tree.insertHtmlElement(attributes);		tree.setInsertionMode('beforeHead');	};	modes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {		this.anythingElse();		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.beforeHTML.processEndTag = function(name) {		this.anythingElse();		tree.insertionMode.processEndTag(name);	};	modes.beforeHTML.anythingElse = function() {		tree.insertHtmlElement();		tree.setInsertionMode('beforeHead');	};	modes.afterAfterBody = Object.create(modes.base);	modes.afterAfterBody.start_tag_handlers = {		html: 'startTagHtml',		'-default': 'startTagOther'	};	modes.afterAfterBody.processComment = function(data) {		tree.insertComment(data, tree.document);	};	modes.afterAfterBody.processDoctype = function(data) {		modes.inBody.processDoctype(data);	};	modes.afterAfterBody.startTagHtml = function(data, attributes) {		modes.inBody.startTagHtml(data, attributes);	};	modes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {		tree.parseError('unexpected-start-tag', {name: name});		tree.setInsertionMode('inBody');		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.afterAfterBody.endTagOther = function(name) {		tree.parseError('unexpected-end-tag', {name: name});		tree.setInsertionMode('inBody');		tree.insertionMode.processEndTag(name);	};	modes.afterAfterBody.processCharacters = function(data) {		if (!isAllWhitespace(data.characters)) {			tree.parseError('unexpected-char-after-body');			tree.setInsertionMode('inBody');			return tree.insertionMode.processCharacters(data);		}		modes.inBody.processCharacters(data);	};	modes.afterBody = Object.create(modes.base);	modes.afterBody.end_tag_handlers = {		html: 'endTagHtml',		'-default': 'endTagOther'	};	modes.afterBody.processComment = function(data) {		tree.insertComment(data, tree.openElements.rootNode);	};	modes.afterBody.processCharacters = function(data) {		if (!isAllWhitespace(data.characters)) {			tree.parseError('unexpected-char-after-body');			tree.setInsertionMode('inBody');			return tree.insertionMode.processCharacters(data);		}		modes.inBody.processCharacters(data);	};	modes.afterBody.processStartTag = function(name, attributes, selfClosing) {		tree.parseError('unexpected-start-tag-after-body', {name: name});		tree.setInsertionMode('inBody');		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.afterBody.endTagHtml = function(name) {		if (tree.context) {			tree.parseError('end-html-in-innerhtml');		} else {			tree.setInsertionMode('afterAfterBody');		}	};	modes.afterBody.endTagOther = function(name) {		tree.parseError('unexpected-end-tag-after-body', {name: name});		tree.setInsertionMode('inBody');		tree.insertionMode.processEndTag(name);	};	modes.afterFrameset = Object.create(modes.base);	modes.afterFrameset.start_tag_handlers = {		html: 'startTagHtml',		noframes: 'startTagNoframes',		'-default': 'startTagOther'	};	modes.afterFrameset.end_tag_handlers = {		html: 'endTagHtml',		'-default': 'endTagOther'	};	modes.afterFrameset.processCharacters = function(buffer) {		var characters = buffer.takeRemaining();		var whitespace = "";		for (var i = 0; i < characters.length; i++) {			var ch = characters[i];			if (isWhitespace(ch))				whitespace += ch;		}		if (whitespace) {			tree.insertText(whitespace);		}		if (whitespace.length < characters.length)			tree.parseError('expected-eof-but-got-char');	};	modes.afterFrameset.startTagNoframes = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.afterFrameset.startTagOther = function(name, attributes) {		tree.parseError("unexpected-start-tag-after-frameset", {name: name});	};	modes.afterFrameset.endTagHtml = function(name) {		tree.setInsertionMode('afterAfterFrameset');	};	modes.afterFrameset.endTagOther = function(name) {		tree.parseError("unexpected-end-tag-after-frameset", {name: name});	};	modes.beforeHead = Object.create(modes.base);	modes.beforeHead.start_tag_handlers = {		html: 'startTagHtml',		head: 'startTagHead',		'-default': 'startTagOther'	};	modes.beforeHead.end_tag_handlers = {		html: 'endTagImplyHead',		head: 'endTagImplyHead',		body: 'endTagImplyHead',		br: 'endTagImplyHead',		'-default': 'endTagOther'	};	modes.beforeHead.processEOF = function() {		this.startTagHead('head', []);		tree.insertionMode.processEOF();	};	modes.beforeHead.processCharacters = function(buffer) {		buffer.skipLeadingWhitespace();		if (!buffer.length)			return;		this.startTagHead('head', []);		tree.insertionMode.processCharacters(buffer);	};	modes.beforeHead.startTagHead = function(name, attributes) {		tree.insertHeadElement(attributes);		tree.setInsertionMode('inHead');	};	modes.beforeHead.startTagOther = function(name, attributes, selfClosing) {		this.startTagHead('head', []);		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.beforeHead.endTagImplyHead = function(name) {		this.startTagHead('head', []);		tree.insertionMode.processEndTag(name);	};	modes.beforeHead.endTagOther = function(name) {		tree.parseError('end-tag-after-implied-root', {name: name});	};	modes.inHead = Object.create(modes.base);	modes.inHead.start_tag_handlers = {		html: 'startTagHtml',		head: 'startTagHead',		title: 'startTagTitle',		script: 'startTagScript',		style: 'startTagNoFramesStyle',		noscript: 'startTagNoScript',		noframes: 'startTagNoFramesStyle',		base: 'startTagBaseBasefontBgsoundLink',		basefont: 'startTagBaseBasefontBgsoundLink',		bgsound: 'startTagBaseBasefontBgsoundLink',		link: 'startTagBaseBasefontBgsoundLink',		meta: 'startTagMeta',		"-default": 'startTagOther'	};	modes.inHead.end_tag_handlers = {		head: 'endTagHead',		html: 'endTagHtmlBodyBr',		body: 'endTagHtmlBodyBr',		br: 'endTagHtmlBodyBr',		"-default": 'endTagOther'	};	modes.inHead.processEOF = function() {		var name = tree.currentStackItem().localName;		if (['title', 'style', 'script'].indexOf(name) != -1) {			tree.parseError("expected-named-closing-tag-but-got-eof", {name: name});			tree.popElement();		}		this.anythingElse();		tree.insertionMode.processEOF();	};	modes.inHead.processCharacters = function(buffer) {		var leadingWhitespace = buffer.takeLeadingWhitespace();		if (leadingWhitespace)			tree.insertText(leadingWhitespace);		if (!buffer.length)			return;		this.anythingElse();		tree.insertionMode.processCharacters(buffer);	};	modes.inHead.startTagHtml = function(name, attributes) {		modes.inBody.processStartTag(name, attributes);	};	modes.inHead.startTagHead = function(name, attributes) {		tree.parseError('two-heads-are-not-better-than-one');	};	modes.inHead.startTagTitle = function(name, attributes) {		tree.processGenericRCDATAStartTag(name, attributes);	};	modes.inHead.startTagNoScript = function(name, attributes) {		if (tree.scriptingEnabled)			return tree.processGenericRawTextStartTag(name, attributes);		tree.insertElement(name, attributes);		tree.setInsertionMode('inHeadNoscript');	};	modes.inHead.startTagNoFramesStyle = function(name, attributes) {		tree.processGenericRawTextStartTag(name, attributes);	};	modes.inHead.startTagScript = function(name, attributes) {		tree.insertElement(name, attributes);		tree.tokenizer.setState(Tokenizer.SCRIPT_DATA);		tree.originalInsertionMode = tree.insertionModeName;		tree.setInsertionMode('text');	};	modes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {		tree.insertSelfClosingElement(name, attributes);	};	modes.inHead.startTagMeta = function(name, attributes) {		tree.insertSelfClosingElement(name, attributes);	};	modes.inHead.startTagOther = function(name, attributes, selfClosing) {		this.anythingElse();		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.inHead.endTagHead = function(name) {		if (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {			tree.openElements.pop();		} else {			tree.parseError('unexpected-end-tag', {name: 'head'});		}		tree.setInsertionMode('afterHead');	};	modes.inHead.endTagHtmlBodyBr = function(name) {		this.anythingElse();		tree.insertionMode.processEndTag(name);	};	modes.inHead.endTagOther = function(name) {		tree.parseError('unexpected-end-tag', {name: name});	};	modes.inHead.anythingElse = function() {		this.endTagHead('head');	};	modes.afterHead = Object.create(modes.base);	modes.afterHead.start_tag_handlers = {		html: 'startTagHtml',		head: 'startTagHead',		body: 'startTagBody',		frameset: 'startTagFrameset',		base: 'startTagFromHead',		link: 'startTagFromHead',		meta: 'startTagFromHead',		script: 'startTagFromHead',		style: 'startTagFromHead',		title: 'startTagFromHead',		"-default": 'startTagOther'	};	modes.afterHead.end_tag_handlers = {		body: 'endTagBodyHtmlBr',		html: 'endTagBodyHtmlBr',		br: 'endTagBodyHtmlBr',		"-default": 'endTagOther'	};	modes.afterHead.processEOF = function() {		this.anythingElse();		tree.insertionMode.processEOF();	};	modes.afterHead.processCharacters = function(buffer) {		var leadingWhitespace = buffer.takeLeadingWhitespace();		if (leadingWhitespace)			tree.insertText(leadingWhitespace);		if (!buffer.length)			return;		this.anythingElse();		tree.insertionMode.processCharacters(buffer);	};	modes.afterHead.startTagHtml = function(name, attributes) {		modes.inBody.processStartTag(name, attributes);	};	modes.afterHead.startTagBody = function(name, attributes) {		tree.framesetOk = false;		tree.insertBodyElement(attributes);		tree.setInsertionMode('inBody');	};	modes.afterHead.startTagFrameset = function(name, attributes) {		tree.insertElement(name, attributes);		tree.setInsertionMode('inFrameset');	};	modes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {		tree.parseError("unexpected-start-tag-out-of-my-head", {name: name});		tree.openElements.push(tree.head);		modes.inHead.processStartTag(name, attributes, selfClosing);		tree.openElements.remove(tree.head);	};	modes.afterHead.startTagHead = function(name, attributes, selfClosing) {		tree.parseError('unexpected-start-tag', {name: name});	};	modes.afterHead.startTagOther = function(name, attributes, selfClosing) {		this.anythingElse();		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.afterHead.endTagBodyHtmlBr = function(name) {		this.anythingElse();		tree.insertionMode.processEndTag(name);	};	modes.afterHead.endTagOther = function(name) {		tree.parseError('unexpected-end-tag', {name: name});	};	modes.afterHead.anythingElse = function() {		tree.insertBodyElement([]);		tree.setInsertionMode('inBody');		tree.framesetOk = true;	}	modes.inBody = Object.create(modes.base);	modes.inBody.start_tag_handlers = {		html: 'startTagHtml',		head: 'startTagMisplaced',		base: 'startTagProcessInHead',		basefont: 'startTagProcessInHead',		bgsound: 'startTagProcessInHead',		link: 'startTagProcessInHead',		meta: 'startTagProcessInHead',		noframes: 'startTagProcessInHead',		script: 'startTagProcessInHead',		style: 'startTagProcessInHead',		title: 'startTagProcessInHead',		body: 'startTagBody',		form: 'startTagForm',		plaintext: 'startTagPlaintext',		a: 'startTagA',		button: 'startTagButton',		xmp: 'startTagXmp',		table: 'startTagTable',		hr: 'startTagHr',		image: 'startTagImage',		input: 'startTagInput',		textarea: 'startTagTextarea',		select: 'startTagSelect',		isindex: 'startTagIsindex',		applet:	'startTagAppletMarqueeObject',		marquee:	'startTagAppletMarqueeObject',		object:	'startTagAppletMarqueeObject',		li: 'startTagListItem',		dd: 'startTagListItem',		dt: 'startTagListItem',		address: 'startTagCloseP',		article: 'startTagCloseP',		aside: 'startTagCloseP',		blockquote: 'startTagCloseP',		center: 'startTagCloseP',		details: 'startTagCloseP',		dir: 'startTagCloseP',		div: 'startTagCloseP',		dl: 'startTagCloseP',		fieldset: 'startTagCloseP',		figcaption: 'startTagCloseP',		figure: 'startTagCloseP',		footer: 'startTagCloseP',		header: 'startTagCloseP',		hgroup: 'startTagCloseP',		main: 'startTagCloseP',		menu: 'startTagCloseP',		nav: 'startTagCloseP',		ol: 'startTagCloseP',		p: 'startTagCloseP',		section: 'startTagCloseP',		summary: 'startTagCloseP',		ul: 'startTagCloseP',		listing: 'startTagPreListing',		pre: 'startTagPreListing',		b: 'startTagFormatting',		big: 'startTagFormatting',		code: 'startTagFormatting',		em: 'startTagFormatting',		font: 'startTagFormatting',		i: 'startTagFormatting',		s: 'startTagFormatting',		small: 'startTagFormatting',		strike: 'startTagFormatting',		strong: 'startTagFormatting',		tt: 'startTagFormatting',		u: 'startTagFormatting',		nobr: 'startTagNobr',		area: 'startTagVoidFormatting',		br: 'startTagVoidFormatting',		embed: 'startTagVoidFormatting',		img: 'startTagVoidFormatting',		keygen: 'startTagVoidFormatting',		wbr: 'startTagVoidFormatting',		param: 'startTagParamSourceTrack',		source: 'startTagParamSourceTrack',		track: 'startTagParamSourceTrack',		iframe: 'startTagIFrame',		noembed: 'startTagRawText',		noscript: 'startTagRawText',		h1: 'startTagHeading',		h2: 'startTagHeading',		h3: 'startTagHeading',		h4: 'startTagHeading',		h5: 'startTagHeading',		h6: 'startTagHeading',		caption: 'startTagMisplaced',		col: 'startTagMisplaced',		colgroup: 'startTagMisplaced',		frame: 'startTagMisplaced',		frameset: 'startTagFrameset',		tbody: 'startTagMisplaced',		td: 'startTagMisplaced',		tfoot: 'startTagMisplaced',		th: 'startTagMisplaced',		thead: 'startTagMisplaced',		tr: 'startTagMisplaced',		option: 'startTagOptionOptgroup',		optgroup: 'startTagOptionOptgroup',		math: 'startTagMath',		svg: 'startTagSVG',		rt: 'startTagRpRt',		rp: 'startTagRpRt',		"-default": 'startTagOther'	};	modes.inBody.end_tag_handlers = {		p: 'endTagP',		body: 'endTagBody',		html: 'endTagHtml',		address: 'endTagBlock',		article: 'endTagBlock',		aside: 'endTagBlock',		blockquote: 'endTagBlock',		button: 'endTagBlock',		center: 'endTagBlock',		details: 'endTagBlock',		dir: 'endTagBlock',		div: 'endTagBlock',		dl: 'endTagBlock',		fieldset: 'endTagBlock',		figcaption: 'endTagBlock',		figure: 'endTagBlock',		footer: 'endTagBlock',		header: 'endTagBlock',		hgroup: 'endTagBlock',		listing: 'endTagBlock',		main: 'endTagBlock',		menu: 'endTagBlock',		nav: 'endTagBlock',		ol: 'endTagBlock',		pre: 'endTagBlock',		section: 'endTagBlock',		summary: 'endTagBlock',		ul: 'endTagBlock',		form: 'endTagForm',		applet: 'endTagAppletMarqueeObject',		marquee: 'endTagAppletMarqueeObject',		object: 'endTagAppletMarqueeObject',		dd: 'endTagListItem',		dt: 'endTagListItem',		li: 'endTagListItem',		h1: 'endTagHeading',		h2: 'endTagHeading',		h3: 'endTagHeading',		h4: 'endTagHeading',		h5: 'endTagHeading',		h6: 'endTagHeading',		a: 'endTagFormatting',		b: 'endTagFormatting',		big: 'endTagFormatting',		code: 'endTagFormatting',		em: 'endTagFormatting',		font: 'endTagFormatting',		i: 'endTagFormatting',		nobr: 'endTagFormatting',		s: 'endTagFormatting',		small: 'endTagFormatting',		strike: 'endTagFormatting',		strong: 'endTagFormatting',		tt: 'endTagFormatting',		u: 'endTagFormatting',		br: 'endTagBr',		"-default": 'endTagOther'	};	modes.inBody.processCharacters = function(buffer) {		if (tree.shouldSkipLeadingNewline) {			tree.shouldSkipLeadingNewline = false;			buffer.skipAtMostOneLeadingNewline();		}		tree.reconstructActiveFormattingElements();		var characters = buffer.takeRemaining();		characters = characters.replace(/\u0000/g, function(match, index){			tree.parseError("invalid-codepoint");			return '';		});		if (!characters)			return;		tree.insertText(characters);		if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))			tree.framesetOk = false;	};	modes.inBody.startTagHtml = function(name, attributes) {		tree.parseError('non-html-root');		tree.addAttributesToElement(tree.openElements.rootNode, attributes);	};	modes.inBody.startTagProcessInHead = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.inBody.startTagBody = function(name, attributes) {		tree.parseError('unexpected-start-tag', {name: 'body'});		if (tree.openElements.length == 1 ||			tree.openElements.item(1).localName != 'body') {			assert.ok(tree.context);		} else {			tree.framesetOk = false;			tree.addAttributesToElement(tree.openElements.bodyElement, attributes);		}	};	modes.inBody.startTagFrameset = function(name, attributes) {		tree.parseError('unexpected-start-tag', {name: 'frameset'});		if (tree.openElements.length == 1 ||			tree.openElements.item(1).localName != 'body') {			assert.ok(tree.context);		} else if (tree.framesetOk) {			tree.detachFromParent(tree.openElements.bodyElement);			while (tree.openElements.length > 1)				tree.openElements.pop();			tree.insertElement(name, attributes);			tree.setInsertionMode('inFrameset');		}	};	modes.inBody.startTagCloseP = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		tree.insertElement(name, attributes);	};	modes.inBody.startTagPreListing = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		tree.insertElement(name, attributes);		tree.framesetOk = false;		tree.shouldSkipLeadingNewline = true;	};	modes.inBody.startTagForm = function(name, attributes) {		if (tree.form) {			tree.parseError('unexpected-start-tag', {name: name});		} else {			if (tree.openElements.inButtonScope('p'))				this.endTagP('p');			tree.insertElement(name, attributes);			tree.form = tree.currentStackItem();		}	};	modes.inBody.startTagRpRt = function(name, attributes) {		if (tree.openElements.inScope('ruby')) {			tree.generateImpliedEndTags();			if (tree.currentStackItem().localName != 'ruby') {				tree.parseError('unexpected-start-tag', {name: name});			}		}		tree.insertElement(name, attributes);	};	modes.inBody.startTagListItem = function(name, attributes) {		var stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};		var stopName = stopNames[name];		var els = tree.openElements;		for (var i = els.length - 1; i >= 0; i--) {			var node = els.item(i);			if (stopName.indexOf(node.localName) != -1) {				tree.insertionMode.processEndTag(node.localName);				break;			}			if (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')				break;		}		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		tree.insertElement(name, attributes);		tree.framesetOk = false;	};	modes.inBody.startTagPlaintext = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		tree.insertElement(name, attributes);		tree.tokenizer.setState(Tokenizer.PLAINTEXT);	};	modes.inBody.startTagHeading = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		if (tree.currentStackItem().isNumberedHeader()) {			tree.parseError('unexpected-start-tag', {name: name});			tree.popElement();		}		tree.insertElement(name, attributes);	};	modes.inBody.startTagA = function(name, attributes) {		var activeA = tree.elementInActiveFormattingElements('a');		if (activeA) {			tree.parseError("unexpected-start-tag-implies-end-tag", {startName: "a", endName: "a"});			tree.adoptionAgencyEndTag('a');			if (tree.openElements.contains(activeA))				tree.openElements.remove(activeA);			tree.removeElementFromActiveFormattingElements(activeA);		}		tree.reconstructActiveFormattingElements();		tree.insertFormattingElement(name, attributes);	};	modes.inBody.startTagFormatting = function(name, attributes) {		tree.reconstructActiveFormattingElements();		tree.insertFormattingElement(name, attributes);	};	modes.inBody.startTagNobr = function(name, attributes) {		tree.reconstructActiveFormattingElements();		if (tree.openElements.inScope('nobr')) {			tree.parseError("unexpected-start-tag-implies-end-tag", {startName: 'nobr', endName: 'nobr'});			this.processEndTag('nobr');				tree.reconstructActiveFormattingElements();		}		tree.insertFormattingElement(name, attributes);	};	modes.inBody.startTagButton = function(name, attributes) {		if (tree.openElements.inScope('button')) {			tree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});			this.processEndTag('button');			tree.insertionMode.processStartTag(name, attributes);		} else {			tree.framesetOk = false;			tree.reconstructActiveFormattingElements();			tree.insertElement(name, attributes);		}	};	modes.inBody.startTagAppletMarqueeObject = function(name, attributes) {		tree.reconstructActiveFormattingElements();		tree.insertElement(name, attributes);		tree.activeFormattingElements.push(Marker);		tree.framesetOk = false;	};	modes.inBody.endTagAppletMarqueeObject = function(name) {		if (!tree.openElements.inScope(name)) {			tree.parseError("unexpected-end-tag", {name: name});		} else {			tree.generateImpliedEndTags();			if (tree.currentStackItem().localName != name) {				tree.parseError('end-tag-too-early', {name: name});			}			tree.openElements.popUntilPopped(name);			tree.clearActiveFormattingElements();		}	};	modes.inBody.startTagXmp = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.processEndTag('p');		tree.reconstructActiveFormattingElements();		tree.processGenericRawTextStartTag(name, attributes);		tree.framesetOk = false;	};	modes.inBody.startTagTable = function(name, attributes) {		if (tree.compatMode !== "quirks")			if (tree.openElements.inButtonScope('p'))				this.processEndTag('p');		tree.insertElement(name, attributes);		tree.setInsertionMode('inTable');		tree.framesetOk = false;	};	modes.inBody.startTagVoidFormatting = function(name, attributes) {		tree.reconstructActiveFormattingElements();		tree.insertSelfClosingElement(name, attributes);		tree.framesetOk = false;	};	modes.inBody.startTagParamSourceTrack = function(name, attributes) {		tree.insertSelfClosingElement(name, attributes);	};	modes.inBody.startTagHr = function(name, attributes) {		if (tree.openElements.inButtonScope('p'))			this.endTagP('p');		tree.insertSelfClosingElement(name, attributes);		tree.framesetOk = false;	};	modes.inBody.startTagImage = function(name, attributes) {		tree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});		this.processStartTag('img', attributes);	};	modes.inBody.startTagInput = function(name, attributes) {		var currentFramesetOk = tree.framesetOk;		this.startTagVoidFormatting(name, attributes);		for (var key in attributes) {			if (attributes[key].nodeName == 'type') {				if (attributes[key].nodeValue.toLowerCase() == 'hidden')					tree.framesetOk = currentFramesetOk;				break;			}		}	};	modes.inBody.startTagIsindex = function(name, attributes) {		tree.parseError('deprecated-tag', {name: 'isindex'});		tree.selfClosingFlagAcknowledged = true;		if (tree.form)			return;		var formAttributes = [];		var inputAttributes = [];		var prompt = "This is a searchable index. Enter search keywords: ";		for (var key in attributes) {			switch (attributes[key].nodeName) {				case 'action':					formAttributes.push({nodeName: 'action',						nodeValue: attributes[key].nodeValue});					break;				case 'prompt':					prompt = attributes[key].nodeValue;					break;				case 'name':					break;				default:					inputAttributes.push({nodeName: attributes[key].nodeName,						nodeValue: attributes[key].nodeValue});			}		}		inputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});		this.processStartTag('form', formAttributes);		this.processStartTag('hr');		this.processStartTag('label');		this.processCharacters(new CharacterBuffer(prompt));		this.processStartTag('input', inputAttributes);		this.processEndTag('label');		this.processStartTag('hr');		this.processEndTag('form');	};	modes.inBody.startTagTextarea = function(name, attributes) {		tree.insertElement(name, attributes);		tree.tokenizer.setState(Tokenizer.RCDATA);		tree.originalInsertionMode = tree.insertionModeName;		tree.shouldSkipLeadingNewline = true;		tree.framesetOk = false;		tree.setInsertionMode('text');	};	modes.inBody.startTagIFrame = function(name, attributes) {		tree.framesetOk = false;		this.startTagRawText(name, attributes);	};	modes.inBody.startTagRawText = function(name, attributes) {		tree.processGenericRawTextStartTag(name, attributes);	};	modes.inBody.startTagSelect = function(name, attributes) {		tree.reconstructActiveFormattingElements();		tree.insertElement(name, attributes);		tree.framesetOk = false;		var insertionModeName = tree.insertionModeName;		if (insertionModeName == 'inTable' ||			insertionModeName == 'inCaption' ||			insertionModeName == 'inColumnGroup' ||			insertionModeName == 'inTableBody' ||			insertionModeName == 'inRow' ||			insertionModeName == 'inCell') {			tree.setInsertionMode('inSelectInTable');		} else {			tree.setInsertionMode('inSelect');		}	};	modes.inBody.startTagMisplaced = function(name, attributes) {		tree.parseError('unexpected-start-tag-ignored', {name: name});	};	modes.inBody.endTagMisplaced = function(name) {		tree.parseError("unexpected-end-tag", {name: name});	};	modes.inBody.endTagBr = function(name) {		tree.parseError("unexpected-end-tag-treated-as", {originalName: "br", newName: "br element"});		tree.reconstructActiveFormattingElements();		tree.insertElement(name, []);		tree.popElement();	};	modes.inBody.startTagOptionOptgroup = function(name, attributes) {		if (tree.currentStackItem().localName == 'option')			tree.popElement();		tree.reconstructActiveFormattingElements();		tree.insertElement(name, attributes);	};	modes.inBody.startTagOther = function(name, attributes) {		tree.reconstructActiveFormattingElements();		tree.insertElement(name, attributes);	};	modes.inBody.endTagOther = function(name) {		var node;		for (var i = tree.openElements.length - 1; i > 0; i--) {			node = tree.openElements.item(i);			if (node.localName == name) {				tree.generateImpliedEndTags(name);				if (tree.currentStackItem().localName != name)					tree.parseError('unexpected-end-tag', {name: name});				tree.openElements.remove_openElements_until(function(x) {return x === node;});				break;			}			if (node.isSpecial()) {				tree.parseError('unexpected-end-tag', {name: name});				break;			}		}	};	modes.inBody.startTagMath = function(name, attributes, selfClosing) {		tree.reconstructActiveFormattingElements();		attributes = tree.adjustMathMLAttributes(attributes);		attributes = tree.adjustForeignAttributes(attributes);		tree.insertForeignElement(name, attributes, "http://www.w3.org/1998/Math/MathML", selfClosing);	};	modes.inBody.startTagSVG = function(name, attributes, selfClosing) {		tree.reconstructActiveFormattingElements();		attributes = tree.adjustSVGAttributes(attributes);		attributes = tree.adjustForeignAttributes(attributes);		tree.insertForeignElement(name, attributes, "http://www.w3.org/2000/svg", selfClosing);	};	modes.inBody.endTagP = function(name) {		if (!tree.openElements.inButtonScope('p')) {			tree.parseError('unexpected-end-tag', {name: 'p'});			this.startTagCloseP('p', []);			this.endTagP('p');		} else {			tree.generateImpliedEndTags('p');			if (tree.currentStackItem().localName != 'p')				tree.parseError('unexpected-implied-end-tag', {name: 'p'});			tree.openElements.popUntilPopped(name);		}	};	modes.inBody.endTagBody = function(name) {		if (!tree.openElements.inScope('body')) {			tree.parseError('unexpected-end-tag', {name: name});			return;		}		if (tree.currentStackItem().localName != 'body') {			tree.parseError('expected-one-end-tag-but-got-another', {				expectedName: tree.currentStackItem().localName,				gotName: name			});		}		tree.setInsertionMode('afterBody');	};	modes.inBody.endTagHtml = function(name) {		if (!tree.openElements.inScope('body')) {			tree.parseError('unexpected-end-tag', {name: name});			return;		}		if (tree.currentStackItem().localName != 'body') {			tree.parseError('expected-one-end-tag-but-got-another', {				expectedName: tree.currentStackItem().localName,				gotName: name			});		}		tree.setInsertionMode('afterBody');		tree.insertionMode.processEndTag(name);	};	modes.inBody.endTagBlock = function(name) {		if (!tree.openElements.inScope(name)) {			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.generateImpliedEndTags();			if (tree.currentStackItem().localName != name) {				tree.parseError('end-tag-too-early', {name: name});			}			tree.openElements.popUntilPopped(name);		}	};	modes.inBody.endTagForm = function(name)  {		var node = tree.form;		tree.form = null;		if (!node || !tree.openElements.inScope(name)) {			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.generateImpliedEndTags();			if (tree.currentStackItem() != node) {				tree.parseError('end-tag-too-early-ignored', {name: 'form'});			}			tree.openElements.remove(node);		}	};	modes.inBody.endTagListItem = function(name) {		if (!tree.openElements.inListItemScope(name)) {			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.generateImpliedEndTags(name);			if (tree.currentStackItem().localName != name)				tree.parseError('end-tag-too-early', {name: name});			tree.openElements.popUntilPopped(name);		}	};	modes.inBody.endTagHeading = function(name) {		if (!tree.openElements.hasNumberedHeaderElementInScope()) {			tree.parseError('unexpected-end-tag', {name: name});			return;		}		tree.generateImpliedEndTags();		if (tree.currentStackItem().localName != name)			tree.parseError('end-tag-too-early', {name: name});		tree.openElements.remove_openElements_until(function(e) {			return e.isNumberedHeader();		});	};	modes.inBody.endTagFormatting = function(name, attributes) {		if (!tree.adoptionAgencyEndTag(name))			this.endTagOther(name, attributes);	};	modes.inCaption = Object.create(modes.base);	modes.inCaption.start_tag_handlers = {		html: 'startTagHtml',		caption: 'startTagTableElement',		col: 'startTagTableElement',		colgroup: 'startTagTableElement',		tbody: 'startTagTableElement',		td: 'startTagTableElement',		tfoot: 'startTagTableElement',		thead: 'startTagTableElement',		tr: 'startTagTableElement',		'-default': 'startTagOther'	};	modes.inCaption.end_tag_handlers = {		caption: 'endTagCaption',		table: 'endTagTable',		body: 'endTagIgnore',		col: 'endTagIgnore',		colgroup: 'endTagIgnore',		html: 'endTagIgnore',		tbody: 'endTagIgnore',		td: 'endTagIgnore',		tfood: 'endTagIgnore',		thead: 'endTagIgnore',		tr: 'endTagIgnore',		'-default': 'endTagOther'	};	modes.inCaption.processCharacters = function(data) {		modes.inBody.processCharacters(data);	};	modes.inCaption.startTagTableElement = function(name, attributes) {		tree.parseError('unexpected-end-tag', {name: name});		var ignoreEndTag = !tree.openElements.inTableScope('caption');		tree.insertionMode.processEndTag('caption');		if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);	};	modes.inCaption.startTagOther = function(name, attributes, selfClosing) {		modes.inBody.processStartTag(name, attributes, selfClosing);	};	modes.inCaption.endTagCaption = function(name) {		if (!tree.openElements.inTableScope('caption')) {			assert.ok(tree.context);			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.generateImpliedEndTags();			if (tree.currentStackItem().localName != 'caption') {				tree.parseError('expected-one-end-tag-but-got-another', {					gotName: "caption",					expectedName: tree.currentStackItem().localName				});			}			tree.openElements.popUntilPopped('caption');			tree.clearActiveFormattingElements();			tree.setInsertionMode('inTable');		}	};	modes.inCaption.endTagTable = function(name) {		tree.parseError("unexpected-end-table-in-caption");		var ignoreEndTag = !tree.openElements.inTableScope('caption');		tree.insertionMode.processEndTag('caption');		if (!ignoreEndTag) tree.insertionMode.processEndTag(name);	};	modes.inCaption.endTagIgnore = function(name) {		tree.parseError('unexpected-end-tag', {name: name});	};	modes.inCaption.endTagOther = function(name) {		modes.inBody.processEndTag(name);	};	modes.inCell = Object.create(modes.base);	modes.inCell.start_tag_handlers = {		html: 'startTagHtml',		caption: 'startTagTableOther',		col: 'startTagTableOther',		colgroup: 'startTagTableOther',		tbody: 'startTagTableOther',		td: 'startTagTableOther',		tfoot: 'startTagTableOther',		th: 'startTagTableOther',		thead: 'startTagTableOther',		tr: 'startTagTableOther',		'-default': 'startTagOther'	};	modes.inCell.end_tag_handlers = {		td: 'endTagTableCell',		th: 'endTagTableCell',		body: 'endTagIgnore',		caption: 'endTagIgnore',		col: 'endTagIgnore',		colgroup: 'endTagIgnore',		html: 'endTagIgnore',		table: 'endTagImply',		tbody: 'endTagImply',		tfoot: 'endTagImply',		thead: 'endTagImply',		tr: 'endTagImply',		'-default': 'endTagOther'	};	modes.inCell.processCharacters = function(data) {		modes.inBody.processCharacters(data);	};	modes.inCell.startTagTableOther = function(name, attributes, selfClosing) {		if (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {			this.closeCell();			tree.insertionMode.processStartTag(name, attributes, selfClosing);		} else {			tree.parseError('unexpected-start-tag', {name: name});		}	};	modes.inCell.startTagOther = function(name, attributes, selfClosing) {		modes.inBody.processStartTag(name, attributes, selfClosing);	};	modes.inCell.endTagTableCell = function(name) {		if (tree.openElements.inTableScope(name)) {			tree.generateImpliedEndTags(name);			if (tree.currentStackItem().localName != name.toLowerCase()) {				tree.parseError('unexpected-cell-end-tag', {name: name});				tree.openElements.popUntilPopped(name);			} else {				tree.popElement();			}			tree.clearActiveFormattingElements();			tree.setInsertionMode('inRow');		} else {			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inCell.endTagIgnore = function(name) {		tree.parseError('unexpected-end-tag', {name: name});	};	modes.inCell.endTagImply = function(name) {		if (tree.openElements.inTableScope(name)) {			this.closeCell();			tree.insertionMode.processEndTag(name);		} else {			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inCell.endTagOther = function(name) {		modes.inBody.processEndTag(name);	};	modes.inCell.closeCell = function() {		if (tree.openElements.inTableScope('td')) {			this.endTagTableCell('td');		} else if (tree.openElements.inTableScope('th')) {			this.endTagTableCell('th');		}	};	modes.inColumnGroup = Object.create(modes.base);	modes.inColumnGroup.start_tag_handlers = {		html: 'startTagHtml',		col: 'startTagCol',		'-default': 'startTagOther'	};	modes.inColumnGroup.end_tag_handlers = {		colgroup: 'endTagColgroup',		col: 'endTagCol',		'-default': 'endTagOther'	};	modes.inColumnGroup.ignoreEndTagColgroup = function() {		return tree.currentStackItem().localName == 'html';	};	modes.inColumnGroup.processCharacters = function(buffer) {		var leadingWhitespace = buffer.takeLeadingWhitespace();		if (leadingWhitespace)			tree.insertText(leadingWhitespace);		if (!buffer.length)			return;		var ignoreEndTag = this.ignoreEndTagColgroup();		this.endTagColgroup('colgroup');		if (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);	};	modes.inColumnGroup.startTagCol = function(name, attributes) {		tree.insertSelfClosingElement(name, attributes);	};	modes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {		var ignoreEndTag = this.ignoreEndTagColgroup();		this.endTagColgroup('colgroup');		if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.inColumnGroup.endTagColgroup = function(name) {		if (this.ignoreEndTagColgroup()) {			assert.ok(tree.context);			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.popElement();			tree.setInsertionMode('inTable');		}	};	modes.inColumnGroup.endTagCol = function(name) {		tree.parseError("no-end-tag", {name: 'col'});	};	modes.inColumnGroup.endTagOther = function(name) {		var ignoreEndTag = this.ignoreEndTagColgroup();		this.endTagColgroup('colgroup');		if (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;	};	modes.inForeignContent = Object.create(modes.base);	modes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {		if (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1				|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {			tree.parseError('unexpected-html-element-in-foreign-content', {name: name});			while (tree.currentStackItem().isForeign()				&& !tree.currentStackItem().isHtmlIntegrationPoint()				&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {				tree.openElements.pop();			}			tree.insertionMode.processStartTag(name, attributes, selfClosing);			return;		}		if (tree.currentStackItem().namespaceURI == "http://www.w3.org/1998/Math/MathML") {			attributes = tree.adjustMathMLAttributes(attributes);		}		if (tree.currentStackItem().namespaceURI == "http://www.w3.org/2000/svg") {			name = tree.adjustSVGTagNameCase(name);			attributes = tree.adjustSVGAttributes(attributes);		}		attributes = tree.adjustForeignAttributes(attributes);		tree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);	};	modes.inForeignContent.processEndTag = function(name) {		var node = tree.currentStackItem();		var index = tree.openElements.length - 1;		if (node.localName.toLowerCase() != name)			tree.parseError("unexpected-end-tag", {name: name});		while (true) {			if (index === 0)				break;			if (node.localName.toLowerCase() == name) {				while (tree.openElements.pop() != node);				break;			}			index -= 1;			node = tree.openElements.item(index);			if (node.isForeign()) {				continue;			} else {				tree.insertionMode.processEndTag(name);				break;			}		}	};	modes.inForeignContent.processCharacters = function(buffer) {		var characters = buffer.takeRemaining();		characters = characters.replace(/\u0000/g, function(match, index){			tree.parseError('invalid-codepoint');			return '\uFFFD';		});		if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))			tree.framesetOk = false;		tree.insertText(characters);	};	modes.inHeadNoscript = Object.create(modes.base);	modes.inHeadNoscript.start_tag_handlers = {		html: 'startTagHtml',		basefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		bgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		link: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		meta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		noframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		style: 'startTagBasefontBgsoundLinkMetaNoframesStyle',		head: 'startTagHeadNoscript',		noscript: 'startTagHeadNoscript',		"-default": 'startTagOther'	};	modes.inHeadNoscript.end_tag_handlers = {		noscript: 'endTagNoscript',		br: 'endTagBr',		'-default': 'endTagOther'	};	modes.inHeadNoscript.processCharacters = function(buffer) {		var leadingWhitespace = buffer.takeLeadingWhitespace();		if (leadingWhitespace)			tree.insertText(leadingWhitespace);		if (!buffer.length)			return;		tree.parseError("unexpected-char-in-frameset");		this.anythingElse();		tree.insertionMode.processCharacters(buffer);	};	modes.inHeadNoscript.processComment = function(data) {		modes.inHead.processComment(data);	};	modes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {		tree.parseError("unexpected-start-tag-in-frameset", {name: name});	};	modes.inHeadNoscript.startTagOther = function(name, attributes) {		tree.parseError("unexpected-start-tag-in-frameset", {name: name});		this.anythingElse();		tree.insertionMode.processStartTag(name, attributes);	};	modes.inHeadNoscript.endTagBr = function(name, attributes) {		tree.parseError("unexpected-end-tag-in-frameset", {name: name});		this.anythingElse();		tree.insertionMode.processEndTag(name, attributes);	};	modes.inHeadNoscript.endTagNoscript = function(name, attributes) {		tree.popElement();		tree.setInsertionMode('inHead');	};	modes.inHeadNoscript.endTagOther = function(name, attributes) {		tree.parseError("unexpected-end-tag-in-frameset", {name: name});	};	modes.inHeadNoscript.anythingElse = function() {		tree.popElement();		tree.setInsertionMode('inHead');	};	modes.inFrameset = Object.create(modes.base);	modes.inFrameset.start_tag_handlers = {		html: 'startTagHtml',		frameset: 'startTagFrameset',		frame: 'startTagFrame',		noframes: 'startTagNoframes',		"-default": 'startTagOther'	};	modes.inFrameset.end_tag_handlers = {		frameset: 'endTagFrameset',		noframes: 'endTagNoframes',		'-default': 'endTagOther'	};	modes.inFrameset.processCharacters = function(data) {		tree.parseError("unexpected-char-in-frameset");	};	modes.inFrameset.startTagFrameset = function(name, attributes) {		tree.insertElement(name, attributes);	};	modes.inFrameset.startTagFrame = function(name, attributes) {		tree.insertSelfClosingElement(name, attributes);	};	modes.inFrameset.startTagNoframes = function(name, attributes) {		modes.inBody.processStartTag(name, attributes);	};	modes.inFrameset.startTagOther = function(name, attributes) {		tree.parseError("unexpected-start-tag-in-frameset", {name: name});	};	modes.inFrameset.endTagFrameset = function(name, attributes) {		if (tree.currentStackItem().localName == 'html') {			tree.parseError("unexpected-frameset-in-frameset-innerhtml");		} else {			tree.popElement();		}		if (!tree.context && tree.currentStackItem().localName != 'frameset') {			tree.setInsertionMode('afterFrameset');		}	};	modes.inFrameset.endTagNoframes = function(name) {		modes.inBody.processEndTag(name);	};	modes.inFrameset.endTagOther = function(name) {		tree.parseError("unexpected-end-tag-in-frameset", {name: name});	};	modes.inTable = Object.create(modes.base);	modes.inTable.start_tag_handlers = {		html: 'startTagHtml',		caption: 'startTagCaption',		colgroup: 'startTagColgroup',		col: 'startTagCol',		table: 'startTagTable',		tbody: 'startTagRowGroup',		tfoot: 'startTagRowGroup',		thead: 'startTagRowGroup',		td: 'startTagImplyTbody',		th: 'startTagImplyTbody',		tr: 'startTagImplyTbody',		style: 'startTagStyleScript',		script: 'startTagStyleScript',		input: 'startTagInput',		form: 'startTagForm',		'-default': 'startTagOther'	};	modes.inTable.end_tag_handlers = {		table: 'endTagTable',		body: 'endTagIgnore',		caption: 'endTagIgnore',		col: 'endTagIgnore',		colgroup: 'endTagIgnore',		html: 'endTagIgnore',		tbody: 'endTagIgnore',		td: 'endTagIgnore',		tfoot: 'endTagIgnore',		th: 'endTagIgnore',		thead: 'endTagIgnore',		tr: 'endTagIgnore',		'-default': 'endTagOther'	};	modes.inTable.processCharacters =  function(data) {		if (tree.currentStackItem().isFosterParenting()) {			var originalInsertionMode = tree.insertionModeName;			tree.setInsertionMode('inTableText');			tree.originalInsertionMode = originalInsertionMode;			tree.insertionMode.processCharacters(data);		} else {			tree.redirectAttachToFosterParent = true;			modes.inBody.processCharacters(data);			tree.redirectAttachToFosterParent = false;		}	};	modes.inTable.startTagCaption = function(name, attributes) {		tree.openElements.popUntilTableScopeMarker();		tree.activeFormattingElements.push(Marker);		tree.insertElement(name, attributes);		tree.setInsertionMode('inCaption');	};	modes.inTable.startTagColgroup = function(name, attributes) {		tree.openElements.popUntilTableScopeMarker();		tree.insertElement(name, attributes);		tree.setInsertionMode('inColumnGroup');	};	modes.inTable.startTagCol = function(name, attributes) {		this.startTagColgroup('colgroup', []);		tree.insertionMode.processStartTag(name, attributes);	};	modes.inTable.startTagRowGroup = function(name, attributes) {		tree.openElements.popUntilTableScopeMarker();		tree.insertElement(name, attributes);		tree.setInsertionMode('inTableBody');	};	modes.inTable.startTagImplyTbody = function(name, attributes) {		this.startTagRowGroup('tbody', []);		tree.insertionMode.processStartTag(name, attributes);	};	modes.inTable.startTagTable = function(name, attributes) {		tree.parseError("unexpected-start-tag-implies-end-tag",				{startName: "table", endName: "table"});		tree.insertionMode.processEndTag('table');		if (!tree.context) tree.insertionMode.processStartTag(name, attributes);	};	modes.inTable.startTagStyleScript = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.inTable.startTagInput = function(name, attributes) {		for (var key in attributes) {			if (attributes[key].nodeName.toLowerCase() == 'type') {				if (attributes[key].nodeValue.toLowerCase() == 'hidden') {					tree.parseError("unexpected-hidden-input-in-table");					tree.insertElement(name, attributes);					tree.openElements.pop();					return;				}				break;			}		}		this.startTagOther(name, attributes);	};	modes.inTable.startTagForm = function(name, attributes) {		tree.parseError("unexpected-form-in-table");		if (!tree.form) {			tree.insertElement(name, attributes);			tree.form = tree.currentStackItem();			tree.openElements.pop();		}	};	modes.inTable.startTagOther = function(name, attributes, selfClosing) {		tree.parseError("unexpected-start-tag-implies-table-voodoo", {name: name});		tree.redirectAttachToFosterParent = true;		modes.inBody.processStartTag(name, attributes, selfClosing);		tree.redirectAttachToFosterParent = false;	};	modes.inTable.endTagTable = function(name) {		if (tree.openElements.inTableScope(name)) {			tree.generateImpliedEndTags();			if (tree.currentStackItem().localName != name) {				tree.parseError("end-tag-too-early-named", {gotName: 'table', expectedName: tree.currentStackItem().localName});			}			tree.openElements.popUntilPopped('table');			tree.resetInsertionMode();		} else {			assert.ok(tree.context);			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inTable.endTagIgnore = function(name) {		tree.parseError("unexpected-end-tag", {name: name});	};	modes.inTable.endTagOther = function(name) {		tree.parseError("unexpected-end-tag-implies-table-voodoo", {name: name});		tree.redirectAttachToFosterParent = true;		modes.inBody.processEndTag(name);		tree.redirectAttachToFosterParent = false;	};	modes.inTableText = Object.create(modes.base);	modes.inTableText.flushCharacters = function() {		var characters = tree.pendingTableCharacters.join('');		if (!isAllWhitespace(characters)) {			tree.redirectAttachToFosterParent = true;			tree.reconstructActiveFormattingElements();			tree.insertText(characters);			tree.framesetOk = false;			tree.redirectAttachToFosterParent = false;		} else {			tree.insertText(characters);		}		tree.pendingTableCharacters = [];	};	modes.inTableText.processComment = function(data) {		this.flushCharacters();		tree.setInsertionMode(tree.originalInsertionMode);		tree.insertionMode.processComment(data);	};	modes.inTableText.processEOF = function(data) {		this.flushCharacters();		tree.setInsertionMode(tree.originalInsertionMode);		tree.insertionMode.processEOF();	};	modes.inTableText.processCharacters = function(buffer) {		var characters = buffer.takeRemaining();		characters = characters.replace(/\u0000/g, function(match, index){			tree.parseError("invalid-codepoint");			return '';		});		if (!characters)			return;		tree.pendingTableCharacters.push(characters);	};	modes.inTableText.processStartTag = function(name, attributes, selfClosing) {		this.flushCharacters();		tree.setInsertionMode(tree.originalInsertionMode);		tree.insertionMode.processStartTag(name, attributes, selfClosing);	};	modes.inTableText.processEndTag = function(name, attributes) {		this.flushCharacters();		tree.setInsertionMode(tree.originalInsertionMode);		tree.insertionMode.processEndTag(name, attributes);	};	modes.inTableBody = Object.create(modes.base);	modes.inTableBody.start_tag_handlers = {		html: 'startTagHtml',		tr: 'startTagTr',		td: 'startTagTableCell',		th: 'startTagTableCell',		caption: 'startTagTableOther',		col: 'startTagTableOther',		colgroup: 'startTagTableOther',		tbody: 'startTagTableOther',		tfoot: 'startTagTableOther',		thead: 'startTagTableOther',		'-default': 'startTagOther'	};	modes.inTableBody.end_tag_handlers = {		table: 'endTagTable',		tbody: 'endTagTableRowGroup',		tfoot: 'endTagTableRowGroup',		thead: 'endTagTableRowGroup',		body: 'endTagIgnore',		caption: 'endTagIgnore',		col: 'endTagIgnore',		colgroup: 'endTagIgnore',		html: 'endTagIgnore',		td: 'endTagIgnore',		th: 'endTagIgnore',		tr: 'endTagIgnore',		'-default': 'endTagOther'	};	modes.inTableBody.processCharacters = function(data) {		modes.inTable.processCharacters(data);	};	modes.inTableBody.startTagTr = function(name, attributes) {		tree.openElements.popUntilTableBodyScopeMarker();		tree.insertElement(name, attributes);		tree.setInsertionMode('inRow');	};	modes.inTableBody.startTagTableCell = function(name, attributes) {		tree.parseError("unexpected-cell-in-table-body", {name: name});		this.startTagTr('tr', []);		tree.insertionMode.processStartTag(name, attributes);	};	modes.inTableBody.startTagTableOther = function(name, attributes) {		if (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {			tree.openElements.popUntilTableBodyScopeMarker();			this.endTagTableRowGroup(tree.currentStackItem().localName);			tree.insertionMode.processStartTag(name, attributes);		} else {			tree.parseError('unexpected-start-tag', {name: name});		}	};	modes.inTableBody.startTagOther = function(name, attributes) {		modes.inTable.processStartTag(name, attributes);	};	modes.inTableBody.endTagTableRowGroup = function(name) {		if (tree.openElements.inTableScope(name)) {			tree.openElements.popUntilTableBodyScopeMarker();			tree.popElement();			tree.setInsertionMode('inTable');		} else {			tree.parseError('unexpected-end-tag-in-table-body', {name: name});		}	};	modes.inTableBody.endTagTable = function(name) {		if (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {			tree.openElements.popUntilTableBodyScopeMarker();			this.endTagTableRowGroup(tree.currentStackItem().localName);			tree.insertionMode.processEndTag(name);		} else {			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inTableBody.endTagIgnore = function(name) {		tree.parseError("unexpected-end-tag-in-table-body", {name: name});	};	modes.inTableBody.endTagOther = function(name) {		modes.inTable.processEndTag(name);	};	modes.inSelect = Object.create(modes.base);	modes.inSelect.start_tag_handlers = {		html: 'startTagHtml',		option: 'startTagOption',		optgroup: 'startTagOptgroup',		select: 'startTagSelect',		input: 'startTagInput',		keygen: 'startTagInput',		textarea: 'startTagInput',		script: 'startTagScript',		'-default': 'startTagOther'	};	modes.inSelect.end_tag_handlers = {		option: 'endTagOption',		optgroup: 'endTagOptgroup',		select: 'endTagSelect',		caption: 'endTagTableElements',		table: 'endTagTableElements',		tbody: 'endTagTableElements',		tfoot: 'endTagTableElements',		thead: 'endTagTableElements',		tr: 'endTagTableElements',		td: 'endTagTableElements',		th: 'endTagTableElements',		'-default': 'endTagOther'	};	modes.inSelect.processCharacters = function(buffer) {		var data = buffer.takeRemaining();		data = data.replace(/\u0000/g, function(match, index){			tree.parseError("invalid-codepoint");			return '';		});		if (!data)			return;		tree.insertText(data);	};	modes.inSelect.startTagOption = function(name, attributes) {		if (tree.currentStackItem().localName == 'option')			tree.popElement();		tree.insertElement(name, attributes);	};	modes.inSelect.startTagOptgroup = function(name, attributes) {		if (tree.currentStackItem().localName == 'option')			tree.popElement();		if (tree.currentStackItem().localName == 'optgroup')			tree.popElement();		tree.insertElement(name, attributes);	};	modes.inSelect.endTagOption = function(name) {		if (tree.currentStackItem().localName !== 'option') {			tree.parseError('unexpected-end-tag-in-select', {name: name});			return;		}		tree.popElement();	};	modes.inSelect.endTagOptgroup = function(name) {		if (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {			tree.popElement();		}		if (tree.currentStackItem().localName == 'optgroup') {			tree.popElement();		} else {			tree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});		}	};	modes.inSelect.startTagSelect = function(name) {		tree.parseError("unexpected-select-in-select");		this.endTagSelect('select');	};	modes.inSelect.endTagSelect = function(name) {		if (tree.openElements.inTableScope('select')) {			tree.openElements.popUntilPopped('select');			tree.resetInsertionMode();		} else {			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inSelect.startTagInput = function(name, attributes) {		tree.parseError("unexpected-input-in-select");		if (tree.openElements.inSelectScope('select')) {			this.endTagSelect('select');			tree.insertionMode.processStartTag(name, attributes);		}	};	modes.inSelect.startTagScript = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.inSelect.endTagTableElements = function(name) {		tree.parseError('unexpected-end-tag-in-select', {name: name});		if (tree.openElements.inTableScope(name)) {			this.endTagSelect('select');			tree.insertionMode.processEndTag(name);		}	};	modes.inSelect.startTagOther = function(name, attributes) {		tree.parseError("unexpected-start-tag-in-select", {name: name});	};	modes.inSelect.endTagOther = function(name) {		tree.parseError('unexpected-end-tag-in-select', {name: name});	};	modes.inSelectInTable = Object.create(modes.base);	modes.inSelectInTable.start_tag_handlers = {		caption: 'startTagTable',		table: 'startTagTable',		tbody: 'startTagTable',		tfoot: 'startTagTable',		thead: 'startTagTable',		tr: 'startTagTable',		td: 'startTagTable',		th: 'startTagTable',		'-default': 'startTagOther'	};	modes.inSelectInTable.end_tag_handlers = {		caption: 'endTagTable',		table: 'endTagTable',		tbody: 'endTagTable',		tfoot: 'endTagTable',		thead: 'endTagTable',		tr: 'endTagTable',		td: 'endTagTable',		th: 'endTagTable',		'-default': 'endTagOther'	};	modes.inSelectInTable.processCharacters = function(data) {		modes.inSelect.processCharacters(data);	};	modes.inSelectInTable.startTagTable = function(name, attributes) {		tree.parseError("unexpected-table-element-start-tag-in-select-in-table", {name: name});		this.endTagOther("select");		tree.insertionMode.processStartTag(name, attributes);	};	modes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {		modes.inSelect.processStartTag(name, attributes, selfClosing);	};	modes.inSelectInTable.endTagTable = function(name) {		tree.parseError("unexpected-table-element-end-tag-in-select-in-table", {name: name});		if (tree.openElements.inTableScope(name)) {			this.endTagOther("select");			tree.insertionMode.processEndTag(name);		}	};	modes.inSelectInTable.endTagOther = function(name) {		modes.inSelect.processEndTag(name);	};	modes.inRow = Object.create(modes.base);	modes.inRow.start_tag_handlers = {		html: 'startTagHtml',		td: 'startTagTableCell',		th: 'startTagTableCell',		caption: 'startTagTableOther',		col: 'startTagTableOther',		colgroup: 'startTagTableOther',		tbody: 'startTagTableOther',		tfoot: 'startTagTableOther',		thead: 'startTagTableOther',		tr: 'startTagTableOther',		'-default': 'startTagOther'	};	modes.inRow.end_tag_handlers = {		tr: 'endTagTr',		table: 'endTagTable',		tbody: 'endTagTableRowGroup',		tfoot: 'endTagTableRowGroup',		thead: 'endTagTableRowGroup',		body: 'endTagIgnore',		caption: 'endTagIgnore',		col: 'endTagIgnore',		colgroup: 'endTagIgnore',		html: 'endTagIgnore',		td: 'endTagIgnore',		th: 'endTagIgnore',		'-default': 'endTagOther'	};	modes.inRow.processCharacters = function(data) {		modes.inTable.processCharacters(data);	};	modes.inRow.startTagTableCell = function(name, attributes) {		tree.openElements.popUntilTableRowScopeMarker();		tree.insertElement(name, attributes);		tree.setInsertionMode('inCell');		tree.activeFormattingElements.push(Marker);	};	modes.inRow.startTagTableOther = function(name, attributes) {		var ignoreEndTag = this.ignoreEndTagTr();		this.endTagTr('tr');		if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);	};	modes.inRow.startTagOther = function(name, attributes, selfClosing) {		modes.inTable.processStartTag(name, attributes, selfClosing);	};	modes.inRow.endTagTr = function(name) {		if (this.ignoreEndTagTr()) {			assert.ok(tree.context);			tree.parseError('unexpected-end-tag', {name: name});		} else {			tree.openElements.popUntilTableRowScopeMarker();			tree.popElement();			tree.setInsertionMode('inTableBody');		}	};	modes.inRow.endTagTable = function(name) {		var ignoreEndTag = this.ignoreEndTagTr();		this.endTagTr('tr');		if (!ignoreEndTag) tree.insertionMode.processEndTag(name);	};	modes.inRow.endTagTableRowGroup = function(name) {		if (tree.openElements.inTableScope(name)) {			this.endTagTr('tr');			tree.insertionMode.processEndTag(name);		} else {			tree.parseError('unexpected-end-tag', {name: name});		}	};	modes.inRow.endTagIgnore = function(name) {		tree.parseError("unexpected-end-tag-in-table-row", {name: name});	};	modes.inRow.endTagOther = function(name) {		modes.inTable.processEndTag(name);	};	modes.inRow.ignoreEndTagTr = function() {		return !tree.openElements.inTableScope('tr');	};	modes.afterAfterFrameset = Object.create(modes.base);	modes.afterAfterFrameset.start_tag_handlers = {		html: 'startTagHtml',		noframes: 'startTagNoFrames',		'-default': 'startTagOther'	};	modes.afterAfterFrameset.processEOF = function() {};	modes.afterAfterFrameset.processComment = function(data) {		tree.insertComment(data, tree.document);	};	modes.afterAfterFrameset.processCharacters = function(buffer) {		var characters = buffer.takeRemaining();		var whitespace = "";		for (var i = 0; i < characters.length; i++) {			var ch = characters[i];			if (isWhitespace(ch))				whitespace += ch;		}		if (whitespace) {			tree.reconstructActiveFormattingElements();			tree.insertText(whitespace);		}		if (whitespace.length < characters.length)			tree.parseError('expected-eof-but-got-char');	};	modes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {		modes.inHead.processStartTag(name, attributes);	};	modes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {		tree.parseError('expected-eof-but-got-start-tag', {name: name});	};	modes.afterAfterFrameset.processEndTag = function(name, attributes) {		tree.parseError('expected-eof-but-got-end-tag', {name: name});	};	modes.text = Object.create(modes.base);	modes.text.start_tag_handlers = {		'-default': 'startTagOther'	};	modes.text.end_tag_handlers = {		script: 'endTagScript',		'-default': 'endTagOther'	};	modes.text.processCharacters = function(buffer) {		if (tree.shouldSkipLeadingNewline) {			tree.shouldSkipLeadingNewline = false;			buffer.skipAtMostOneLeadingNewline();		}		var data = buffer.takeRemaining();		if (!data)			return;		tree.insertText(data);	};	modes.text.processEOF = function() {		tree.parseError("expected-named-closing-tag-but-got-eof",			{name: tree.currentStackItem().localName});		tree.openElements.pop();		tree.setInsertionMode(tree.originalInsertionMode);		tree.insertionMode.processEOF();	};	modes.text.startTagOther = function(name) {		throw "Tried to process start tag " + name + " in RCDATA/RAWTEXT mode";	};	modes.text.endTagScript = function(name) {		var node = tree.openElements.pop();		assert.ok(node.localName == 'script');		tree.setInsertionMode(tree.originalInsertionMode);	};	modes.text.endTagOther = function(name) {		tree.openElements.pop();		tree.setInsertionMode(tree.originalInsertionMode);	};}TreeBuilder.prototype.setInsertionMode = function(name) {	this.insertionMode = this.insertionModes[name];	this.insertionModeName = name;};TreeBuilder.prototype.adoptionAgencyEndTag = function(name) {	var outerIterationLimit = 8;	var innerIterationLimit = 3;	var formattingElement;	function isActiveFormattingElement(el) {		return el === formattingElement;	}	var outerLoopCounter = 0;	while (outerLoopCounter++ < outerIterationLimit) {		formattingElement = this.elementInActiveFormattingElements(name);		if (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {			this.parseError('adoption-agency-1.1', {name: name});			return false;		}		if (!this.openElements.contains(formattingElement)) {			this.parseError('adoption-agency-1.2', {name: name});			this.removeElementFromActiveFormattingElements(formattingElement);			return true;		}		if (!this.openElements.inScope(formattingElement.localName)) {			this.parseError('adoption-agency-4.4', {name: name});		}		if (formattingElement != this.currentStackItem()) {			this.parseError('adoption-agency-1.3', {name: name});		}		var furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);		if (!furthestBlock) {			this.openElements.remove_openElements_until(isActiveFormattingElement);			this.removeElementFromActiveFormattingElements(formattingElement);			return true;		}		var afeIndex = this.openElements.elements.indexOf(formattingElement);		var commonAncestor = this.openElements.item(afeIndex - 1);		var bookmark = this.activeFormattingElements.indexOf(formattingElement);		var node = furthestBlock;		var lastNode = furthestBlock;		var index = this.openElements.elements.indexOf(node);		var innerLoopCounter = 0;		while (innerLoopCounter++ < innerIterationLimit) {			index -= 1;			node = this.openElements.item(index);			if (this.activeFormattingElements.indexOf(node) < 0) {				this.openElements.elements.splice(index, 1);				continue;			}			if (node == formattingElement)				break;			if (lastNode == furthestBlock)				bookmark = this.activeFormattingElements.indexOf(node) + 1;			var clone = this.createElement(node.namespaceURI, node.localName, node.attributes);			var newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);			this.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;			this.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;			node = newNode;			this.detachFromParent(lastNode.node);			this.attachNode(lastNode.node, node.node);			lastNode = node;		}		this.detachFromParent(lastNode.node);		if (commonAncestor.isFosterParenting()) {			this.insertIntoFosterParent(lastNode.node);		} else {			this.attachNode(lastNode.node, commonAncestor.node);		}		var clone = this.createElement("http://www.w3.org/1999/xhtml", formattingElement.localName, formattingElement.attributes);		var formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);		this.reparentChildren(furthestBlock.node, clone);		this.attachNode(clone, furthestBlock.node);		this.removeElementFromActiveFormattingElements(formattingElement);		this.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);		this.openElements.remove(formattingElement);		this.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);	}	return true;};TreeBuilder.prototype.start = function() {	throw "Not mplemented";};TreeBuilder.prototype.startTokenization = function(tokenizer) {	this.tokenizer = tokenizer;	this.compatMode = "no quirks";	this.originalInsertionMode = "initial";	this.framesetOk = true;	this.openElements = new ElementStack();	this.activeFormattingElements = [];	this.start();	if (this.context) {		switch(this.context) {		case 'title':		case 'textarea':			this.tokenizer.setState(Tokenizer.RCDATA);			break;		case 'style':		case 'xmp':		case 'iframe':		case 'noembed':		case 'noframes':			this.tokenizer.setState(Tokenizer.RAWTEXT);			break;		case 'script':			this.tokenizer.setState(Tokenizer.SCRIPT_DATA);			break;		case 'noscript':			if (this.scriptingEnabled)				this.tokenizer.setState(Tokenizer.RAWTEXT);			break;		case 'plaintext':			this.tokenizer.setState(Tokenizer.PLAINTEXT);			break;		}		this.insertHtmlElement();		this.resetInsertionMode();	} else {		this.setInsertionMode('initial');	}};TreeBuilder.prototype.processToken = function(token) {	this.selfClosingFlagAcknowledged = false;	var currentNode = this.openElements.top || null;	var insertionMode;	if (!currentNode || !currentNode.isForeign() ||		(currentNode.isMathMLTextIntegrationPoint() &&			((token.type == 'StartTag' &&					!(token.name in {mglyph:0, malignmark:0})) ||				(token.type === 'Characters'))		) ||		(currentNode.namespaceURI == "http://www.w3.org/1998/Math/MathML" &&			currentNode.localName == 'annotation-xml' &&			token.type == 'StartTag' && token.name == 'svg'		) ||		(currentNode.isHtmlIntegrationPoint() &&			token.type in {StartTag:0, Characters:0}		) ||		token.type == 'EOF'	) {		insertionMode = this.insertionMode;	} else {		insertionMode = this.insertionModes.inForeignContent;	}	switch(token.type) {	case 'Characters':		var buffer = new CharacterBuffer(token.data);		insertionMode.processCharacters(buffer);		break;	case 'Comment':		insertionMode.processComment(token.data);		break;	case 'StartTag':		insertionMode.processStartTag(token.name, token.data, token.selfClosing);		break;	case 'EndTag':		insertionMode.processEndTag(token.name);		break;	case 'Doctype':		insertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);		break;	case 'EOF':		insertionMode.processEOF();		break;	}};TreeBuilder.prototype.isCdataSectionAllowed = function() {	return this.openElements.length > 0 && this.currentStackItem().isForeign();};TreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {	return this.selfClosingFlagAcknowledged;};TreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {	throw new Error("Not implemented");};TreeBuilder.prototype.attachNode = function(child, parent) {	throw new Error("Not implemented");};TreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {	throw new Error("Not implemented");};TreeBuilder.prototype.detachFromParent = function(node) {	throw new Error("Not implemented");};TreeBuilder.prototype.addAttributesToElement = function(element, attributes) {	throw new Error("Not implemented");};TreeBuilder.prototype.insertHtmlElement = function(attributes) {	var root = this.createElement("http://www.w3.org/1999/xhtml", 'html', attributes);	this.attachNode(root, this.document);	this.openElements.pushHtmlElement(new StackItem("http://www.w3.org/1999/xhtml", 'html', attributes, root));	return root;};TreeBuilder.prototype.insertHeadElement = function(attributes) {	var element = this.createElement("http://www.w3.org/1999/xhtml", "head", attributes);	this.head = new StackItem("http://www.w3.org/1999/xhtml", "head", attributes, element);	this.attachNode(element, this.openElements.top.node);	this.openElements.pushHeadElement(this.head);	return element;};TreeBuilder.prototype.insertBodyElement = function(attributes) {	var element = this.createElement("http://www.w3.org/1999/xhtml", "body", attributes);	this.attachNode(element, this.openElements.top.node);	this.openElements.pushBodyElement(new StackItem("http://www.w3.org/1999/xhtml", "body", attributes, element));	return element;};TreeBuilder.prototype.insertIntoFosterParent = function(node) {	var tableIndex = this.openElements.findIndex('table');	var tableElement = this.openElements.item(tableIndex).node;	if (tableIndex === 0)		return this.attachNode(node, tableElement);	this.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);};TreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {	if (!namespaceURI)		namespaceURI = "http://www.w3.org/1999/xhtml";	var element = this.createElement(namespaceURI, name, attributes);	if (this.shouldFosterParent())		this.insertIntoFosterParent(element);	else		this.attachNode(element, this.openElements.top.node);	if (!selfClosing)		this.openElements.push(new StackItem(namespaceURI, name, attributes, element));};TreeBuilder.prototype.insertFormattingElement = function(name, attributes) {	this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml");	this.appendElementToActiveFormattingElements(this.currentStackItem());};TreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {	this.selfClosingFlagAcknowledged = true;	this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml", true);};TreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {	if (selfClosing)		this.selfClosingFlagAcknowledged = true;	this.insertElement(name, attributes, namespaceURI, selfClosing);};TreeBuilder.prototype.insertComment = function(data, parent) {	throw new Error("Not implemented");};TreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {	throw new Error("Not implemented");};TreeBuilder.prototype.insertText = function(data) {	throw new Error("Not implemented");};TreeBuilder.prototype.currentStackItem = function() {	return this.openElements.top;};TreeBuilder.prototype.popElement = function() {	return this.openElements.pop();};TreeBuilder.prototype.shouldFosterParent = function() {	return this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();};TreeBuilder.prototype.generateImpliedEndTags = function(exclude) {	var name = this.openElements.top.localName;	if (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {		this.popElement();		this.generateImpliedEndTags(exclude);	}};TreeBuilder.prototype.reconstructActiveFormattingElements = function() {	if (this.activeFormattingElements.length === 0)		return;	var i = this.activeFormattingElements.length - 1;	var entry = this.activeFormattingElements[i];	if (entry == Marker || this.openElements.contains(entry))		return;	while (entry != Marker && !this.openElements.contains(entry)) {		i -= 1;		entry = this.activeFormattingElements[i];		if (!entry)			break;	}	while (true) {		i += 1;		entry = this.activeFormattingElements[i];		this.insertElement(entry.localName, entry.attributes);		var element = this.currentStackItem();		this.activeFormattingElements[i] = element;		if (element == this.activeFormattingElements[this.activeFormattingElements.length -1])			break;	}};TreeBuilder.prototype.ensureNoahsArkCondition = function(item) {	var kNoahsArkCapacity = 3;	if (this.activeFormattingElements.length < kNoahsArkCapacity)		return;	var candidates = [];	var newItemAttributeCount = item.attributes.length;	for (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {		var candidate = this.activeFormattingElements[i];		if (candidate === Marker)			break;		if (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)			continue;		if (candidate.attributes.length != newItemAttributeCount)			continue;		candidates.push(candidate);	}	if (candidates.length < kNoahsArkCapacity)		return;	var remainingCandidates = [];	var attributes = item.attributes;	for (var i = 0; i < attributes.length; i++) {		var attribute = attributes[i];		for (var j = 0; j < candidates.length; j++) {			var candidate = candidates[j];			var candidateAttribute = getAttribute(candidate, attribute.nodeName);			if (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)				remainingCandidates.push(candidate);		}		if (remainingCandidates.length < kNoahsArkCapacity)			return;		candidates = remainingCandidates;		remainingCandidates = [];	}	for (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)		this.removeElementFromActiveFormattingElements(candidates[i]);};TreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {	this.ensureNoahsArkCondition(item);	this.activeFormattingElements.push(item);};TreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {	var index = this.activeFormattingElements.indexOf(item);	if (index >= 0)		this.activeFormattingElements.splice(index, 1);};TreeBuilder.prototype.elementInActiveFormattingElements = function(name) {	var els = this.activeFormattingElements;	for (var i = els.length - 1; i >= 0; i--) {		if (els[i] == Marker) break;		if (els[i].localName == name) return els[i];	}	return false;};TreeBuilder.prototype.clearActiveFormattingElements = function() {    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));};TreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {	throw new Error("Not implemented");};TreeBuilder.prototype.setFragmentContext = function(context) {	this.context = context;};TreeBuilder.prototype.parseError = function(code, args) {	if (!this.errorHandler)		return;	var message = formatMessage(messages[code], args);	this.errorHandler.error(message, this.tokenizer._inputStream.location(), code);};TreeBuilder.prototype.resetInsertionMode = function() {	var last = false;	var node = null;	for (var i = this.openElements.length - 1; i >= 0; i--) {		node = this.openElements.item(i);		if (i === 0) {			assert.ok(this.context);			last = true;			node = new StackItem("http://www.w3.org/1999/xhtml", this.context, [], null);		}		if (node.namespaceURI === "http://www.w3.org/1999/xhtml") {			if (node.localName === 'select')				return this.setInsertionMode('inSelect');			if (node.localName === 'td' || node.localName === 'th')				return this.setInsertionMode('inCell');			if (node.localName === 'tr')				return this.setInsertionMode('inRow');			if (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')				return this.setInsertionMode('inTableBody');			if (node.localName === 'caption')				return this.setInsertionMode('inCaption');			if (node.localName === 'colgroup')				return this.setInsertionMode('inColumnGroup');			if (node.localName === 'table')				return this.setInsertionMode('inTable');			if (node.localName === 'head' && !last)				return this.setInsertionMode('inHead');			if (node.localName === 'body')				return this.setInsertionMode('inBody');			if (node.localName === 'frameset')				return this.setInsertionMode('inFrameset');			if (node.localName === 'html')				if (!this.openElements.headElement)					return this.setInsertionMode('beforeHead');				else					return this.setInsertionMode('afterHead');		}		if (last)			return this.setInsertionMode('inBody');	}};TreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {	this.insertElement(name, attributes);	this.tokenizer.setState(Tokenizer.RCDATA);	this.originalInsertionMode = this.insertionModeName;	this.setInsertionMode('text');};TreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {	this.insertElement(name, attributes);	this.tokenizer.setState(Tokenizer.RAWTEXT);	this.originalInsertionMode = this.insertionModeName;	this.setInsertionMode('text');};TreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {	attributes.forEach(function(a) {		a.namespaceURI = "http://www.w3.org/1998/Math/MathML";		if (constants.MATHMLAttributeMap[a.nodeName])			a.nodeName = constants.MATHMLAttributeMap[a.nodeName];	});	return attributes;};TreeBuilder.prototype.adjustSVGTagNameCase = function(name) {	return constants.SVGTagMap[name] || name;};TreeBuilder.prototype.adjustSVGAttributes = function(attributes) {	attributes.forEach(function(a) {		a.namespaceURI = "http://www.w3.org/2000/svg";		if (constants.SVGAttributeMap[a.nodeName])			a.nodeName = constants.SVGAttributeMap[a.nodeName];	});	return attributes;};TreeBuilder.prototype.adjustForeignAttributes = function(attributes) {	for (var i = 0; i < attributes.length; i++) {		var attribute = attributes[i];		var adjusted = constants.ForeignAttributeMap[attribute.nodeName];		if (adjusted) {			attribute.nodeName = adjusted.localName;			attribute.prefix = adjusted.prefix;			attribute.namespaceURI = adjusted.namespaceURI;		}	}	return attributes;};function formatMessage(format, args) {	return format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {		return args[match.slice(1, -1)] || match;	});}exports.TreeBuilder = TreeBuilder;},{"./ElementStack":1,"./StackItem":4,"./Tokenizer":5,"./constants":7,"./messages.json":8,"assert":13,"events":16}],7:[function(_dereq_,module,exports){exports.SVGTagMap = {	"altglyph": "altGlyph",	"altglyphdef": "altGlyphDef",	"altglyphitem": "altGlyphItem",	"animatecolor": "animateColor",	"animatemotion": "animateMotion",	"animatetransform": "animateTransform",	"clippath": "clipPath",	"feblend": "feBlend",	"fecolormatrix": "feColorMatrix",	"fecomponenttransfer": "feComponentTransfer",	"fecomposite": "feComposite",	"feconvolvematrix": "feConvolveMatrix",	"fediffuselighting": "feDiffuseLighting",	"fedisplacementmap": "feDisplacementMap",	"fedistantlight": "feDistantLight",	"feflood": "feFlood",	"fefunca": "feFuncA",	"fefuncb": "feFuncB",	"fefuncg": "feFuncG",	"fefuncr": "feFuncR",	"fegaussianblur": "feGaussianBlur",	"feimage": "feImage",	"femerge": "feMerge",	"femergenode": "feMergeNode",	"femorphology": "feMorphology",	"feoffset": "feOffset",	"fepointlight": "fePointLight",	"fespecularlighting": "feSpecularLighting",	"fespotlight": "feSpotLight",	"fetile": "feTile",	"feturbulence": "feTurbulence",	"foreignobject": "foreignObject",	"glyphref": "glyphRef",	"lineargradient": "linearGradient",	"radialgradient": "radialGradient",	"textpath": "textPath"};exports.MATHMLAttributeMap = {	definitionurl: 'definitionURL'};exports.SVGAttributeMap = {	attributename:	'attributeName',	attributetype:	'attributeType',	basefrequency:	'baseFrequency',	baseprofile:	'baseProfile',	calcmode:	'calcMode',	clippathunits:	'clipPathUnits',	contentscripttype:	'contentScriptType',	contentstyletype:	'contentStyleType',	diffuseconstant:	'diffuseConstant',	edgemode:	'edgeMode',	externalresourcesrequired:	'externalResourcesRequired',	filterres:	'filterRes',	filterunits:	'filterUnits',	glyphref:	'glyphRef',	gradienttransform:	'gradientTransform',	gradientunits:	'gradientUnits',	kernelmatrix:	'kernelMatrix',	kernelunitlength:	'kernelUnitLength',	keypoints:	'keyPoints',	keysplines:	'keySplines',	keytimes:	'keyTimes',	lengthadjust:	'lengthAdjust',	limitingconeangle:	'limitingConeAngle',	markerheight:	'markerHeight',	markerunits:	'markerUnits',	markerwidth:	'markerWidth',	maskcontentunits:	'maskContentUnits',	maskunits:	'maskUnits',	numoctaves:	'numOctaves',	pathlength:	'pathLength',	patterncontentunits:	'patternContentUnits',	patterntransform:	'patternTransform',	patternunits:	'patternUnits',	pointsatx:	'pointsAtX',	pointsaty:	'pointsAtY',	pointsatz:	'pointsAtZ',	preservealpha:	'preserveAlpha',	preserveaspectratio:	'preserveAspectRatio',	primitiveunits:	'primitiveUnits',	refx:	'refX',	refy:	'refY',	repeatcount:	'repeatCount',	repeatdur:	'repeatDur',	requiredextensions:	'requiredExtensions',	requiredfeatures:	'requiredFeatures',	specularconstant:	'specularConstant',	specularexponent:	'specularExponent',	spreadmethod:	'spreadMethod',	startoffset:	'startOffset',	stddeviation:	'stdDeviation',	stitchtiles:	'stitchTiles',	surfacescale:	'surfaceScale',	systemlanguage:	'systemLanguage',	tablevalues:	'tableValues',	targetx:	'targetX',	targety:	'targetY',	textlength:	'textLength',	viewbox:	'viewBox',	viewtarget:	'viewTarget',	xchannelselector:	'xChannelSelector',	ychannelselector:	'yChannelSelector',	zoomandpan:	'zoomAndPan'};exports.ForeignAttributeMap = {	"xlink:actuate": {prefix: "xlink", localName: "actuate", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:arcrole": {prefix: "xlink", localName: "arcrole", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:href": {prefix: "xlink", localName: "href", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:role": {prefix: "xlink", localName: "role", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:show": {prefix: "xlink", localName: "show", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:title": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"},	"xlink:type": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"},	"xml:base": {prefix: "xml", localName: "base", namespaceURI: "http://www.w3.org/XML/1998/namespace"},	"xml:lang": {prefix: "xml", localName: "lang", namespaceURI: "http://www.w3.org/XML/1998/namespace"},	"xml:space": {prefix: "xml", localName: "space", namespaceURI: "http://www.w3.org/XML/1998/namespace"},	"xmlns": {prefix: null, localName: "xmlns", namespaceURI: "http://www.w3.org/2000/xmlns/"},	"xmlns:xlink": {prefix: "xmlns", localName: "xlink", namespaceURI: "http://www.w3.org/2000/xmlns/"},};},{}],8:[function(_dereq_,module,exports){module.exports={	"null-character":		"Null character in input stream, replaced with U+FFFD.",	"invalid-codepoint":		"Invalid codepoint in stream",	"incorrectly-placed-solidus":		"Solidus (/) incorrectly placed in tag.",	"incorrect-cr-newline-entity":		"Incorrect CR newline entity, replaced with LF.",	"illegal-windows-1252-entity":		"Entity used with illegal number (windows-1252 reference).",	"cant-convert-numeric-entity":		"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).",	"invalid-numeric-entity-replaced":		"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.",	"numeric-entity-without-semicolon":		"Numeric entity didn't end with ';'.",	"expected-numeric-entity-but-got-eof":		"Numeric entity expected. Got end of file instead.",	"expected-numeric-entity":		"Numeric entity expected but none found.",	"named-entity-without-semicolon":		"Named entity didn't end with ';'.",	"expected-named-entity":		"Named entity expected. Got none.",	"attributes-in-end-tag":		"End tag contains unexpected attributes.",	"self-closing-flag-on-end-tag":		"End tag contains unexpected self-closing flag.",	"bare-less-than-sign-at-eof":		"End of file after <.",	"expected-tag-name-but-got-right-bracket":		"Expected tag name. Got '>' instead.",	"expected-tag-name-but-got-question-mark":		"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)",	"expected-tag-name":		"Expected tag name. Got something else instead.",	"expected-closing-tag-but-got-right-bracket":		"Expected closing tag. Got '>' instead. Ignoring '</>'.",	"expected-closing-tag-but-got-eof":		"Expected closing tag. Unexpected end of file.",	"expected-closing-tag-but-got-char":		"Expected closing tag. Unexpected character '{data}' found.",	"eof-in-tag-name":		"Unexpected end of file in the tag name.",	"expected-attribute-name-but-got-eof":		"Unexpected end of file. Expected attribute name instead.",	"eof-in-attribute-name":		"Unexpected end of file in attribute name.",	"invalid-character-in-attribute-name":		"Invalid character in attribute name.",	"duplicate-attribute":		"Dropped duplicate attribute '{name}' on tag.",	"expected-end-of-tag-but-got-eof":		"Unexpected end of file. Expected = or end of tag.",	"expected-attribute-value-but-got-eof":		"Unexpected end of file. Expected attribute value.",	"expected-attribute-value-but-got-right-bracket":		"Expected attribute value. Got '>' instead.",	"unexpected-character-in-unquoted-attribute-value":		"Unexpected character in unquoted attribute",	"invalid-character-after-attribute-name":		"Unexpected character after attribute name.",	"unexpected-character-after-attribute-value":		"Unexpected character after attribute value.",	"eof-in-attribute-value-double-quote":		"Unexpected end of file in attribute value (\").",	"eof-in-attribute-value-single-quote":		"Unexpected end of file in attribute value (').",	"eof-in-attribute-value-no-quotes":		"Unexpected end of file in attribute value.",	"eof-after-attribute-value":		"Unexpected end of file after attribute value.",	"unexpected-eof-after-solidus-in-tag":		"Unexpected end of file in tag. Expected >.",	"unexpected-character-after-solidus-in-tag":		"Unexpected character after / in tag. Expected >.",	"expected-dashes-or-doctype":		"Expected '--' or 'DOCTYPE'. Not found.",	"unexpected-bang-after-double-dash-in-comment":		"Unexpected ! after -- in comment.",	"incorrect-comment":		"Incorrect comment.",	"eof-in-comment":		"Unexpected end of file in comment.",	"eof-in-comment-end-dash":		"Unexpected end of file in comment (-).",	"unexpected-dash-after-double-dash-in-comment":		"Unexpected '-' after '--' found in comment.",	"eof-in-comment-double-dash":		"Unexpected end of file in comment (--).",	"eof-in-comment-end-bang-state":		"Unexpected end of file in comment.",	"unexpected-char-in-comment":		"Unexpected character in comment found.",	"need-space-after-doctype":		"No space after literal string 'DOCTYPE'.",	"expected-doctype-name-but-got-right-bracket":		"Unexpected > character. Expected DOCTYPE name.",	"expected-doctype-name-but-got-eof":		"Unexpected end of file. Expected DOCTYPE name.",	"eof-in-doctype-name":		"Unexpected end of file in DOCTYPE name.",	"eof-in-doctype":		"Unexpected end of file in DOCTYPE.",	"expected-space-or-right-bracket-in-doctype":		"Expected space or '>'. Got '{data}'.",	"unexpected-end-of-doctype":		"Unexpected end of DOCTYPE.",	"unexpected-char-in-doctype":		"Unexpected character in DOCTYPE.",	"eof-in-bogus-doctype":		"Unexpected end of file in bogus doctype.",	"eof-in-innerhtml":		"Unexpected EOF in inner html mode.",	"unexpected-doctype":		"Unexpected DOCTYPE. Ignored.",	"non-html-root":		"html needs to be the first start tag.",	"expected-doctype-but-got-eof":		"Unexpected End of file. Expected DOCTYPE.",	"unknown-doctype":		"Erroneous DOCTYPE. Expected <!DOCTYPE html>.",	"quirky-doctype":		"Quirky doctype. Expected <!DOCTYPE html>.",	"almost-standards-doctype":		"Almost standards mode doctype. Expected <!DOCTYPE html>.",	"obsolete-doctype":		"Obsolete doctype. Expected <!DOCTYPE html>.",	"expected-doctype-but-got-chars":		"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.",	"expected-doctype-but-got-start-tag":		"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.",	"expected-doctype-but-got-end-tag":		"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.",	"end-tag-after-implied-root":		"Unexpected end tag ({name}) after the (implied) root element.",	"expected-named-closing-tag-but-got-eof":		"Unexpected end of file. Expected end tag ({name}).",	"two-heads-are-not-better-than-one":		"Unexpected start tag head in existing head. Ignored.",	"unexpected-end-tag":		"Unexpected end tag ({name}). Ignored.",	"unexpected-implied-end-tag":		"End tag {name} implied, but there were open elements.",	"unexpected-start-tag-out-of-my-head":		"Unexpected start tag ({name}) that can be in head. Moved.",	"unexpected-start-tag":		"Unexpected start tag ({name}).",	"missing-end-tag":		"Missing end tag ({name}).",	"missing-end-tags":		"Missing end tags ({name}).",	"unexpected-start-tag-implies-end-tag":		"Unexpected start tag ({startName}) implies end tag ({endName}).",	"unexpected-start-tag-treated-as":		"Unexpected start tag ({originalName}). Treated as {newName}.",	"deprecated-tag":		"Unexpected start tag {name}. Don't use it!",	"unexpected-start-tag-ignored":		"Unexpected start tag {name}. Ignored.",	"expected-one-end-tag-but-got-another":		"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).",	"end-tag-too-early":		"End tag ({name}) seen too early. Expected other end tag.",	"end-tag-too-early-named":		"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.",	"end-tag-too-early-ignored":		"End tag ({name}) seen too early. Ignored.",	"adoption-agency-1.1":		"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.",	"adoption-agency-1.2":		"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.",	"adoption-agency-1.3":		"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.",	"adoption-agency-4.4":		"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.",	"unexpected-end-tag-treated-as":		"Unexpected end tag ({originalName}). Treated as {newName}.",	"no-end-tag":		"This element ({name}) has no end tag.",	"unexpected-implied-end-tag-in-table":		"Unexpected implied end tag ({name}) in the table phase.",	"unexpected-implied-end-tag-in-table-body":		"Unexpected implied end tag ({name}) in the table body phase.",	"unexpected-char-implies-table-voodoo":		"Unexpected non-space characters in table context caused voodoo mode.",	"unexpected-hidden-input-in-table":		"Unexpected input with type hidden in table context.",	"unexpected-form-in-table":		"Unexpected form in table context.",	"unexpected-start-tag-implies-table-voodoo":		"Unexpected start tag ({name}) in table context caused voodoo mode.",	"unexpected-end-tag-implies-table-voodoo":		"Unexpected end tag ({name}) in table context caused voodoo mode.",	"unexpected-cell-in-table-body":		"Unexpected table cell start tag ({name}) in the table body phase.",	"unexpected-cell-end-tag":		"Got table cell end tag ({name}) while required end tags are missing.",	"unexpected-end-tag-in-table-body":		"Unexpected end tag ({name}) in the table body phase. Ignored.",	"unexpected-implied-end-tag-in-table-row":		"Unexpected implied end tag ({name}) in the table row phase.",	"unexpected-end-tag-in-table-row":		"Unexpected end tag ({name}) in the table row phase. Ignored.",	"unexpected-select-in-select":		"Unexpected select start tag in the select phase treated as select end tag.",	"unexpected-input-in-select":		"Unexpected input start tag in the select phase.",	"unexpected-start-tag-in-select":		"Unexpected start tag token ({name}) in the select phase. Ignored.",	"unexpected-end-tag-in-select":		"Unexpected end tag ({name}) in the select phase. Ignored.",	"unexpected-table-element-start-tag-in-select-in-table":		"Unexpected table element start tag ({name}) in the select in table phase.",	"unexpected-table-element-end-tag-in-select-in-table":		"Unexpected table element end tag ({name}) in the select in table phase.",	"unexpected-char-after-body":		"Unexpected non-space characters in the after body phase.",	"unexpected-start-tag-after-body":		"Unexpected start tag token ({name}) in the after body phase.",	"unexpected-end-tag-after-body":		"Unexpected end tag token ({name}) in the after body phase.",	"unexpected-char-in-frameset":		"Unepxected characters in the frameset phase. Characters ignored.",	"unexpected-start-tag-in-frameset":		"Unexpected start tag token ({name}) in the frameset phase. Ignored.",	"unexpected-frameset-in-frameset-innerhtml":		"Unexpected end tag token (frameset in the frameset phase (innerHTML).",	"unexpected-end-tag-in-frameset":		"Unexpected end tag token ({name}) in the frameset phase. Ignored.",	"unexpected-char-after-frameset":		"Unexpected non-space characters in the after frameset phase. Ignored.",	"unexpected-start-tag-after-frameset":		"Unexpected start tag ({name}) in the after frameset phase. Ignored.",	"unexpected-end-tag-after-frameset":		"Unexpected end tag ({name}) in the after frameset phase. Ignored.",	"expected-eof-but-got-char":		"Unexpected non-space characters. Expected end of file.",	"expected-eof-but-got-start-tag":		"Unexpected start tag ({name}). Expected end of file.",	"expected-eof-but-got-end-tag":		"Unexpected end tag ({name}). Expected end of file.",	"unexpected-end-table-in-caption":		"Unexpected end table tag in caption. Generates implied end caption.",	"end-html-in-innerhtml": 		"Unexpected html end tag in inner html mode.",	"eof-in-table":		"Unexpected end of file. Expected table content.",	"eof-in-script":		"Unexpected end of file. Expected script content.",	"non-void-element-with-trailing-solidus":		"Trailing solidus not allowed on element {name}.",	"unexpected-html-element-in-foreign-content":		"HTML start tag \"{name}\" in a foreign namespace context.",	"unexpected-start-tag-in-table":		"Unexpected {name}. Expected table content."}},{}],9:[function(_dereq_,module,exports){var SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;var Tokenizer = _dereq_('../Tokenizer').Tokenizer;var TreeParser = _dereq_('./TreeParser').TreeParser;function SAXParser() {	this.contentHandler = null;	this._errorHandler = null;	this._treeBuilder = new SAXTreeBuilder();	this._tokenizer = new Tokenizer(this._treeBuilder);	this._scriptingEnabled = false;}SAXParser.prototype.parse = function(source) {	this._tokenizer.tokenize(source);	var document = this._treeBuilder.document;	if (document) {		new TreeParser(this.contentHandler).parse(document);	}};SAXParser.prototype.parseFragment = function(source, context) {	this._treeBuilder.setFragmentContext(context);	this._tokenizer.tokenize(source);	var fragment = this._treeBuilder.getFragment();	if (fragment) {		new TreeParser(this.contentHandler).parse(fragment);	}};Object.defineProperty(SAXParser.prototype, 'scriptingEnabled', {	get: function() {		return this._scriptingEnabled;	},	set: function(value) {		this._scriptingEnabled = value;		this._treeBuilder.scriptingEnabled = value;	}});Object.defineProperty(SAXParser.prototype, 'errorHandler', {	get: function() {		return this._errorHandler;	},	set: function(value) {		this._errorHandler = value;		this._treeBuilder.errorHandler = value;	}});exports.SAXParser = SAXParser;},{"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}],10:[function(_dereq_,module,exports){var util = _dereq_('util');var TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;function SAXTreeBuilder() {	TreeBuilder.call(this);}util.inherits(SAXTreeBuilder, TreeBuilder);SAXTreeBuilder.prototype.start = function(tokenizer) {	this.document = new Document(this.tokenizer);};SAXTreeBuilder.prototype.end = function() {	this.document.endLocator = this.tokenizer;};SAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {	var doctype = new DTD(this.tokenizer, name, publicId, systemId);	doctype.endLocator = this.tokenizer;	this.document.appendChild(doctype);};SAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {	var element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);	return element;};SAXTreeBuilder.prototype.insertComment = function(data, parent) {	if (!parent)		parent = this.currentStackItem();	var comment = new Comment(this.tokenizer, data);	parent.appendChild(comment);};SAXTreeBuilder.prototype.appendCharacters = function(parent, data) {	var text = new Characters(this.tokenizer, data);	parent.appendChild(text);};SAXTreeBuilder.prototype.insertText = function(data) {	if (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {		var tableIndex = this.openElements.findIndex('table');		var tableItem = this.openElements.item(tableIndex);		var table = tableItem.node;		if (tableIndex === 0) {			return this.appendCharacters(table, data);		}		var text = new Characters(this.tokenizer, data);		var parent = table.parentNode;		if (parent) {			parent.insertBetween(text, table.previousSibling, table);			return;		}		var stackParent = this.openElements.item(tableIndex - 1).node;		stackParent.appendChild(text);		return;	}	this.appendCharacters(this.currentStackItem().node, data);};SAXTreeBuilder.prototype.attachNode = function(node, parent) {	parent.appendChild(node);};SAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {	var parent = table.parentNode;	if (parent)		parent.insertBetween(child, table.previousSibling, table);	else		stackParent.appendChild(child);};SAXTreeBuilder.prototype.detachFromParent = function(element) {	element.detach();};SAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {	newParent.appendChildren(oldParent.firstChild);};SAXTreeBuilder.prototype.getFragment = function() {	var fragment = new DocumentFragment();	this.reparentChildren(this.openElements.rootNode, fragment);	return fragment;};function getAttribute(node, name) {	for (var i = 0; i < node.attributes.length; i++) {		var attribute = node.attributes[i];		if (attribute.nodeName === name)			return attribute.nodeValue;	}}SAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {	for (var i = 0; i < attributes.length; i++) {		var attribute = attributes[i];		if (!getAttribute(element, attribute.nodeName))			element.attributes.push(attribute);	}};var NodeType = {	CDATA: 1,	CHARACTERS: 2,	COMMENT: 3,	DOCUMENT: 4,	DOCUMENT_FRAGMENT: 5,	DTD: 6,	ELEMENT: 7,	ENTITY: 8,	IGNORABLE_WHITESPACE: 9,	PROCESSING_INSTRUCTION: 10,	SKIPPED_ENTITY: 11};function Node(locator) {	if (!locator) {		this.columnNumber = -1;		this.lineNumber = -1;	} else {		this.columnNumber = locator.columnNumber;		this.lineNumber = locator.lineNumber;	}	this.parentNode = null;	this.nextSibling = null;	this.firstChild = null;}Node.prototype.visit = function(treeParser) {	throw new Error("Not Implemented");};Node.prototype.revisit = function(treeParser) {	return;};Node.prototype.detach = function() {	if (this.parentNode !== null) {		this.parentNode.removeChild(this);		this.parentNode = null;	}};Object.defineProperty(Node.prototype, 'previousSibling', {	get: function() {		var prev = null;		var next = this.parentNode.firstChild;		for(;;) {			if (this == next) {				return prev;			}			prev = next;			next = next.nextSibling;		}	}});function ParentNode(locator) {	Node.call(this, locator);	this.lastChild = null;	this._endLocator = null;}ParentNode.prototype = Object.create(Node.prototype);ParentNode.prototype.insertBefore = function(child, sibling) {	if (!sibling) {		return this.appendChild(child);	}	child.detach();	child.parentNode = this;	if (this.firstChild == sibling) {		child.nextSibling = sibling;		this.firstChild = child;	} else {		var prev = this.firstChild;		var next = this.firstChild.nextSibling;		while (next != sibling) {			prev = next;			next = next.nextSibling;		}		prev.nextSibling = child;		child.nextSibling = next;	}	return child;};ParentNode.prototype.insertBetween = function(child, prev, next) {	if (!next) {		return this.appendChild(child);	}	child.detach();	child.parentNode = this;	child.nextSibling = next;	if (!prev) {		firstChild = child;	} else {		prev.nextSibling = child;	}	return child;};ParentNode.prototype.appendChild = function(child) {	child.detach();	child.parentNode = this;	if (!this.firstChild) {		this.firstChild = child;	} else {		this.lastChild.nextSibling = child;	}	this.lastChild = child;	return child;};ParentNode.prototype.appendChildren = function(parent) {	var child = parent.firstChild;	if (!child) {		return;	}	var another = parent;	if (!this.firstChild) {		this.firstChild = child;	} else {		this.lastChild.nextSibling = child;	}	this.lastChild = another.lastChild;	do {		child.parentNode = this;	} while ((child = child.nextSibling));	another.firstChild = null;	another.lastChild = null;};ParentNode.prototype.removeChild = function(node) {	if (this.firstChild == node) {		this.firstChild = node.nextSibling;		if (this.lastChild == node) {			this.lastChild = null;		}	} else {		var prev = this.firstChild;		var next = this.firstChild.nextSibling;		while (next != node) {			prev = next;			next = next.nextSibling;		}		prev.nextSibling = node.nextSibling;		if (this.lastChild == node) {			this.lastChild = prev;		}	}	node.parentNode = null;	return node;};Object.defineProperty(ParentNode.prototype, 'endLocator', {	get: function() {		return this._endLocator;	},	set: function(endLocator) {		this._endLocator = {			lineNumber: endLocator.lineNumber,			columnNumber: endLocator.columnNumber		};	}});function Document (locator) {	ParentNode.call(this, locator);	this.nodeType = NodeType.DOCUMENT;}Document.prototype = Object.create(ParentNode.prototype);Document.prototype.visit = function(treeParser) {	treeParser.startDocument(this);};Document.prototype.revisit = function(treeParser) {	treeParser.endDocument(this.endLocator);};function DocumentFragment() {	ParentNode.call(this, new Locator());	this.nodeType = NodeType.DOCUMENT_FRAGMENT;}DocumentFragment.prototype = Object.create(ParentNode.prototype);DocumentFragment.prototype.visit = function(treeParser) {};function Element(locator, uri, localName, qName, atts, prefixMappings) {	ParentNode.call(this, locator);	this.uri = uri;	this.localName = localName;	this.qName = qName;	this.attributes = atts;	this.prefixMappings = prefixMappings;	this.nodeType = NodeType.ELEMENT;}Element.prototype = Object.create(ParentNode.prototype);Element.prototype.visit = function(treeParser) {	if (this.prefixMappings) {		for (var key in prefixMappings) {			var mapping = prefixMappings[key];			treeParser.startPrefixMapping(mapping.getPrefix(),					mapping.getUri(), this);		}	}	treeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);};Element.prototype.revisit = function(treeParser) {	treeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);	if (this.prefixMappings) {		for (var key in prefixMappings) {			var mapping = prefixMappings[key];			treeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);		}	}};function Characters(locator, data){	Node.call(this, locator);	this.data = data;	this.nodeType = NodeType.CHARACTERS;}Characters.prototype = Object.create(Node.prototype);Characters.prototype.visit = function (treeParser) {	treeParser.characters(this.data, 0, this.data.length, this);};function IgnorableWhitespace(locator, data) {	Node.call(this, locator);	this.data = data;	this.nodeType = NodeType.IGNORABLE_WHITESPACE;}IgnorableWhitespace.prototype = Object.create(Node.prototype);IgnorableWhitespace.prototype.visit = function(treeParser) {	treeParser.ignorableWhitespace(this.data, 0, this.data.length, this);};function Comment(locator, data) {	Node.call(this, locator);	this.data = data;	this.nodeType = NodeType.COMMENT;}Comment.prototype = Object.create(Node.prototype);Comment.prototype.visit = function(treeParser) {	treeParser.comment(this.data, 0, this.data.length, this);};function CDATA(locator) {	ParentNode.call(this, locator);	this.nodeType = NodeType.CDATA;}CDATA.prototype = Object.create(ParentNode.prototype);CDATA.prototype.visit = function(treeParser) {	treeParser.startCDATA(this);};CDATA.prototype.revisit = function(treeParser) {	treeParser.endCDATA(this.endLocator);};function Entity(name) {	ParentNode.call(this);	this.name = name;	this.nodeType = NodeType.ENTITY;}Entity.prototype = Object.create(ParentNode.prototype);Entity.prototype.visit = function(treeParser) {	treeParser.startEntity(this.name, this);};Entity.prototype.revisit = function(treeParser) {	treeParser.endEntity(this.name);};function SkippedEntity(name) {	Node.call(this);	this.name = name;	this.nodeType = NodeType.SKIPPED_ENTITY;}SkippedEntity.prototype = Object.create(Node.prototype);SkippedEntity.prototype.visit = function(treeParser) {	treeParser.skippedEntity(this.name, this);};function ProcessingInstruction(target, data) {	Node.call(this);	this.target = target;	this.data = data;}ProcessingInstruction.prototype = Object.create(Node.prototype);ProcessingInstruction.prototype.visit = function(treeParser) {	treeParser.processingInstruction(this.target, this.data, this);};ProcessingInstruction.prototype.getNodeType = function() {	return NodeType.PROCESSING_INSTRUCTION;};function DTD(name, publicIdentifier, systemIdentifier) {	ParentNode.call(this);	this.name = name;	this.publicIdentifier = publicIdentifier;	this.systemIdentifier = systemIdentifier;	this.nodeType = NodeType.DTD;}DTD.prototype = Object.create(ParentNode.prototype);DTD.prototype.visit = function(treeParser) {	treeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);};DTD.prototype.revisit = function(treeParser) {	treeParser.endDTD();};exports.SAXTreeBuilder = SAXTreeBuilder;},{"../TreeBuilder":6,"util":20}],11:[function(_dereq_,module,exports){function TreeParser(contentHandler, lexicalHandler){	this.contentHandler;	this.lexicalHandler;	this.locatorDelegate;	if (!contentHandler) {		throw new IllegalArgumentException("contentHandler was null.");	}	this.contentHandler = contentHandler;	if (!lexicalHandler) {		this.lexicalHandler = new NullLexicalHandler();	} else {		this.lexicalHandler = lexicalHandler;	}}TreeParser.prototype.parse = function(node) {	this.contentHandler.documentLocator = this;	var current = node;	var next;	for (;;) {		current.visit(this);		if (next = current.firstChild) {			current = next;			continue;		}		for (;;) {			current.revisit(this);			if (current == node) {				return;			}			if (next = current.nextSibling) {				current = next;				break;			}			current = current.parentNode;		}	}};TreeParser.prototype.characters = function(ch, start, length, locator) {	this.locatorDelegate = locator;	this.contentHandler.characters(ch, start, length);};TreeParser.prototype.endDocument = function(locator) {	this.locatorDelegate = locator;	this.contentHandler.endDocument();};TreeParser.prototype.endElement = function(uri, localName, qName, locator) {	this.locatorDelegate = locator;	this.contentHandler.endElement(uri, localName, qName);};TreeParser.prototype.endPrefixMapping = function(prefix, locator) {	this.locatorDelegate = locator;	this.contentHandler.endPrefixMapping(prefix);};TreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {	this.locatorDelegate = locator;	this.contentHandler.ignorableWhitespace(ch, start, length);};TreeParser.prototype.processingInstruction = function(target, data, locator) {	this.locatorDelegate = locator;	this.contentHandler.processingInstruction(target, data);};TreeParser.prototype.skippedEntity = function(name, locator) {	this.locatorDelegate = locator;	this.contentHandler.skippedEntity(name);};TreeParser.prototype.startDocument = function(locator) {	this.locatorDelegate = locator;	this.contentHandler.startDocument();};TreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {	this.locatorDelegate = locator;	this.contentHandler.startElement(uri, localName, qName, atts);};TreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {	this.locatorDelegate = locator;	this.contentHandler.startPrefixMapping(prefix, uri);};TreeParser.prototype.comment = function(ch, start, length, locator) {	this.locatorDelegate = locator;	this.lexicalHandler.comment(ch, start, length);};TreeParser.prototype.endCDATA = function(locator) {	this.locatorDelegate = locator;	this.lexicalHandler.endCDATA();};TreeParser.prototype.endDTD = function(locator) {	this.locatorDelegate = locator;	this.lexicalHandler.endDTD();};TreeParser.prototype.endEntity = function(name, locator) {	this.locatorDelegate = locator;	this.lexicalHandler.endEntity(name);};TreeParser.prototype.startCDATA = function(locator) {	this.locatorDelegate = locator;	this.lexicalHandler.startCDATA();};TreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {	this.locatorDelegate = locator;	this.lexicalHandler.startDTD(name, publicId, systemId);};TreeParser.prototype.startEntity = function(name, locator) {	this.locatorDelegate = locator;	this.lexicalHandler.startEntity(name);};Object.defineProperty(TreeParser.prototype, 'columnNumber', {	get: function() {		if (!this.locatorDelegate)			return -1;		else			return this.locatorDelegate.columnNumber;	}});Object.defineProperty(TreeParser.prototype, 'lineNumber', {	get: function() {		if (!this.locatorDelegate)			return -1;		else			return this.locatorDelegate.lineNumber;	}});function NullLexicalHandler() {}NullLexicalHandler.prototype.comment = function() {};NullLexicalHandler.prototype.endCDATA = function() {};NullLexicalHandler.prototype.endDTD = function() {};NullLexicalHandler.prototype.endEntity = function() {};NullLexicalHandler.prototype.startCDATA = function() {};NullLexicalHandler.prototype.startDTD = function() {};NullLexicalHandler.prototype.startEntity = function() {};exports.TreeParser = TreeParser;},{}],12:[function(_dereq_,module,exports){module.exports = {	"Aacute;": "\u00C1",	"Aacute": "\u00C1",	"aacute;": "\u00E1",	"aacute": "\u00E1",	"Abreve;": "\u0102",	"abreve;": "\u0103",	"ac;": "\u223E",	"acd;": "\u223F",	"acE;": "\u223E\u0333",	"Acirc;": "\u00C2",	"Acirc": "\u00C2",	"acirc;": "\u00E2",	"acirc": "\u00E2",	"acute;": "\u00B4",	"acute": "\u00B4",	"Acy;": "\u0410",	"acy;": "\u0430",	"AElig;": "\u00C6",	"AElig": "\u00C6",	"aelig;": "\u00E6",	"aelig": "\u00E6",	"af;": "\u2061",	"Afr;": "\uD835\uDD04",	"afr;": "\uD835\uDD1E",	"Agrave;": "\u00C0",	"Agrave": "\u00C0",	"agrave;": "\u00E0",	"agrave": "\u00E0",	"alefsym;": "\u2135",	"aleph;": "\u2135",	"Alpha;": "\u0391",	"alpha;": "\u03B1",	"Amacr;": "\u0100",	"amacr;": "\u0101",	"amalg;": "\u2A3F",	"amp;": "\u0026",	"amp": "\u0026",	"AMP;": "\u0026",	"AMP": "\u0026",	"andand;": "\u2A55",	"And;": "\u2A53",	"and;": "\u2227",	"andd;": "\u2A5C",	"andslope;": "\u2A58",	"andv;": "\u2A5A",	"ang;": "\u2220",	"ange;": "\u29A4",	"angle;": "\u2220",	"angmsdaa;": "\u29A8",	"angmsdab;": "\u29A9",	"angmsdac;": "\u29AA",	"angmsdad;": "\u29AB",	"angmsdae;": "\u29AC",	"angmsdaf;": "\u29AD",	"angmsdag;": "\u29AE",	"angmsdah;": "\u29AF",	"angmsd;": "\u2221",	"angrt;": "\u221F",	"angrtvb;": "\u22BE",	"angrtvbd;": "\u299D",	"angsph;": "\u2222",	"angst;": "\u00C5",	"angzarr;": "\u237C",	"Aogon;": "\u0104",	"aogon;": "\u0105",	"Aopf;": "\uD835\uDD38",	"aopf;": "\uD835\uDD52",	"apacir;": "\u2A6F",	"ap;": "\u2248",	"apE;": "\u2A70",	"ape;": "\u224A",	"apid;": "\u224B",	"apos;": "\u0027",	"ApplyFunction;": "\u2061",	"approx;": "\u2248",	"approxeq;": "\u224A",	"Aring;": "\u00C5",	"Aring": "\u00C5",	"aring;": "\u00E5",	"aring": "\u00E5",	"Ascr;": "\uD835\uDC9C",	"ascr;": "\uD835\uDCB6",	"Assign;": "\u2254",	"ast;": "\u002A",	"asymp;": "\u2248",	"asympeq;": "\u224D",	"Atilde;": "\u00C3",	"Atilde": "\u00C3",	"atilde;": "\u00E3",	"atilde": "\u00E3",	"Auml;": "\u00C4",	"Auml": "\u00C4",	"auml;": "\u00E4",	"auml": "\u00E4",	"awconint;": "\u2233",	"awint;": "\u2A11",	"backcong;": "\u224C",	"backepsilon;": "\u03F6",	"backprime;": "\u2035",	"backsim;": "\u223D",	"backsimeq;": "\u22CD",	"Backslash;": "\u2216",	"Barv;": "\u2AE7",	"barvee;": "\u22BD",	"barwed;": "\u2305",	"Barwed;": "\u2306",	"barwedge;": "\u2305",	"bbrk;": "\u23B5",	"bbrktbrk;": "\u23B6",	"bcong;": "\u224C",	"Bcy;": "\u0411",	"bcy;": "\u0431",	"bdquo;": "\u201E",	"becaus;": "\u2235",	"because;": "\u2235",	"Because;": "\u2235",	"bemptyv;": "\u29B0",	"bepsi;": "\u03F6",	"bernou;": "\u212C",	"Bernoullis;": "\u212C",	"Beta;": "\u0392",	"beta;": "\u03B2",	"beth;": "\u2136",	"between;": "\u226C",	"Bfr;": "\uD835\uDD05",	"bfr;": "\uD835\uDD1F",	"bigcap;": "\u22C2",	"bigcirc;": "\u25EF",	"bigcup;": "\u22C3",	"bigodot;": "\u2A00",	"bigoplus;": "\u2A01",	"bigotimes;": "\u2A02",	"bigsqcup;": "\u2A06",	"bigstar;": "\u2605",	"bigtriangledown;": "\u25BD",	"bigtriangleup;": "\u25B3",	"biguplus;": "\u2A04",	"bigvee;": "\u22C1",	"bigwedge;": "\u22C0",	"bkarow;": "\u290D",	"blacklozenge;": "\u29EB",	"blacksquare;": "\u25AA",	"blacktriangle;": "\u25B4",	"blacktriangledown;": "\u25BE",	"blacktriangleleft;": "\u25C2",	"blacktriangleright;": "\u25B8",	"blank;": "\u2423",	"blk12;": "\u2592",	"blk14;": "\u2591",	"blk34;": "\u2593",	"block;": "\u2588",	"bne;": "\u003D\u20E5",	"bnequiv;": "\u2261\u20E5",	"bNot;": "\u2AED",	"bnot;": "\u2310",	"Bopf;": "\uD835\uDD39",	"bopf;": "\uD835\uDD53",	"bot;": "\u22A5",	"bottom;": "\u22A5",	"bowtie;": "\u22C8",	"boxbox;": "\u29C9",	"boxdl;": "\u2510",	"boxdL;": "\u2555",	"boxDl;": "\u2556",	"boxDL;": "\u2557",	"boxdr;": "\u250C",	"boxdR;": "\u2552",	"boxDr;": "\u2553",	"boxDR;": "\u2554",	"boxh;": "\u2500",	"boxH;": "\u2550",	"boxhd;": "\u252C",	"boxHd;": "\u2564",	"boxhD;": "\u2565",	"boxHD;": "\u2566",	"boxhu;": "\u2534",	"boxHu;": "\u2567",	"boxhU;": "\u2568",	"boxHU;": "\u2569",	"boxminus;": "\u229F",	"boxplus;": "\u229E",	"boxtimes;": "\u22A0",	"boxul;": "\u2518",	"boxuL;": "\u255B",	"boxUl;": "\u255C",	"boxUL;": "\u255D",	"boxur;": "\u2514",	"boxuR;": "\u2558",	"boxUr;": "\u2559",	"boxUR;": "\u255A",	"boxv;": "\u2502",	"boxV;": "\u2551",	"boxvh;": "\u253C",	"boxvH;": "\u256A",	"boxVh;": "\u256B",	"boxVH;": "\u256C",	"boxvl;": "\u2524",	"boxvL;": "\u2561",	"boxVl;": "\u2562",	"boxVL;": "\u2563",	"boxvr;": "\u251C",	"boxvR;": "\u255E",	"boxVr;": "\u255F",	"boxVR;": "\u2560",	"bprime;": "\u2035",	"breve;": "\u02D8",	"Breve;": "\u02D8",	"brvbar;": "\u00A6",	"brvbar": "\u00A6",	"bscr;": "\uD835\uDCB7",	"Bscr;": "\u212C",	"bsemi;": "\u204F",	"bsim;": "\u223D",	"bsime;": "\u22CD",	"bsolb;": "\u29C5",	"bsol;": "\u005C",	"bsolhsub;": "\u27C8",	"bull;": "\u2022",	"bullet;": "\u2022",	"bump;": "\u224E",	"bumpE;": "\u2AAE",	"bumpe;": "\u224F",	"Bumpeq;": "\u224E",	"bumpeq;": "\u224F",	"Cacute;": "\u0106",	"cacute;": "\u0107",	"capand;": "\u2A44",	"capbrcup;": "\u2A49",	"capcap;": "\u2A4B",	"cap;": "\u2229",	"Cap;": "\u22D2",	"capcup;": "\u2A47",	"capdot;": "\u2A40",	"CapitalDifferentialD;": "\u2145",	"caps;": "\u2229\uFE00",	"caret;": "\u2041",	"caron;": "\u02C7",	"Cayleys;": "\u212D",	"ccaps;": "\u2A4D",	"Ccaron;": "\u010C",	"ccaron;": "\u010D",	"Ccedil;": "\u00C7",	"Ccedil": "\u00C7",	"ccedil;": "\u00E7",	"ccedil": "\u00E7",	"Ccirc;": "\u0108",	"ccirc;": "\u0109",	"Cconint;": "\u2230",	"ccups;": "\u2A4C",	"ccupssm;": "\u2A50",	"Cdot;": "\u010A",	"cdot;": "\u010B",	"cedil;": "\u00B8",	"cedil": "\u00B8",	"Cedilla;": "\u00B8",	"cemptyv;": "\u29B2",	"cent;": "\u00A2",	"cent": "\u00A2",	"centerdot;": "\u00B7",	"CenterDot;": "\u00B7",	"cfr;": "\uD835\uDD20",	"Cfr;": "\u212D",	"CHcy;": "\u0427",	"chcy;": "\u0447",	"check;": "\u2713",	"checkmark;": "\u2713",	"Chi;": "\u03A7",	"chi;": "\u03C7",	"circ;": "\u02C6",	"circeq;": "\u2257",	"circlearrowleft;": "\u21BA",	"circlearrowright;": "\u21BB",	"circledast;": "\u229B",	"circledcirc;": "\u229A",	"circleddash;": "\u229D",	"CircleDot;": "\u2299",	"circledR;": "\u00AE",	"circledS;": "\u24C8",	"CircleMinus;": "\u2296",	"CirclePlus;": "\u2295",	"CircleTimes;": "\u2297",	"cir;": "\u25CB",	"cirE;": "\u29C3",	"cire;": "\u2257",	"cirfnint;": "\u2A10",	"cirmid;": "\u2AEF",	"cirscir;": "\u29C2",	"ClockwiseContourIntegral;": "\u2232",	"CloseCurlyDoubleQuote;": "\u201D",	"CloseCurlyQuote;": "\u2019",	"clubs;": "\u2663",	"clubsuit;": "\u2663",	"colon;": "\u003A",	"Colon;": "\u2237",	"Colone;": "\u2A74",	"colone;": "\u2254",	"coloneq;": "\u2254",	"comma;": "\u002C",	"commat;": "\u0040",	"comp;": "\u2201",	"compfn;": "\u2218",	"complement;": "\u2201",	"complexes;": "\u2102",	"cong;": "\u2245",	"congdot;": "\u2A6D",	"Congruent;": "\u2261",	"conint;": "\u222E",	"Conint;": "\u222F",	"ContourIntegral;": "\u222E",	"copf;": "\uD835\uDD54",	"Copf;": "\u2102",	"coprod;": "\u2210",	"Coproduct;": "\u2210",	"copy;": "\u00A9",	"copy": "\u00A9",	"COPY;": "\u00A9",	"COPY": "\u00A9",	"copysr;": "\u2117",	"CounterClockwiseContourIntegral;": "\u2233",	"crarr;": "\u21B5",	"cross;": "\u2717",	"Cross;": "\u2A2F",	"Cscr;": "\uD835\uDC9E",	"cscr;": "\uD835\uDCB8",	"csub;": "\u2ACF",	"csube;": "\u2AD1",	"csup;": "\u2AD0",	"csupe;": "\u2AD2",	"ctdot;": "\u22EF",	"cudarrl;": "\u2938",	"cudarrr;": "\u2935",	"cuepr;": "\u22DE",	"cuesc;": "\u22DF",	"cularr;": "\u21B6",	"cularrp;": "\u293D",	"cupbrcap;": "\u2A48",	"cupcap;": "\u2A46",	"CupCap;": "\u224D",	"cup;": "\u222A",	"Cup;": "\u22D3",	"cupcup;": "\u2A4A",	"cupdot;": "\u228D",	"cupor;": "\u2A45",	"cups;": "\u222A\uFE00",	"curarr;": "\u21B7",	"curarrm;": "\u293C",	"curlyeqprec;": "\u22DE",	"curlyeqsucc;": "\u22DF",	"curlyvee;": "\u22CE",	"curlywedge;": "\u22CF",	"curren;": "\u00A4",	"curren": "\u00A4",	"curvearrowleft;": "\u21B6",	"curvearrowright;": "\u21B7",	"cuvee;": "\u22CE",	"cuwed;": "\u22CF",	"cwconint;": "\u2232",	"cwint;": "\u2231",	"cylcty;": "\u232D",	"dagger;": "\u2020",	"Dagger;": "\u2021",	"daleth;": "\u2138",	"darr;": "\u2193",	"Darr;": "\u21A1",	"dArr;": "\u21D3",	"dash;": "\u2010",	"Dashv;": "\u2AE4",	"dashv;": "\u22A3",	"dbkarow;": "\u290F",	"dblac;": "\u02DD",	"Dcaron;": "\u010E",	"dcaron;": "\u010F",	"Dcy;": "\u0414",	"dcy;": "\u0434",	"ddagger;": "\u2021",	"ddarr;": "\u21CA",	"DD;": "\u2145",	"dd;": "\u2146",	"DDotrahd;": "\u2911",	"ddotseq;": "\u2A77",	"deg;": "\u00B0",	"deg": "\u00B0",	"Del;": "\u2207",	"Delta;": "\u0394",	"delta;": "\u03B4",	"demptyv;": "\u29B1",	"dfisht;": "\u297F",	"Dfr;": "\uD835\uDD07",	"dfr;": "\uD835\uDD21",	"dHar;": "\u2965",	"dharl;": "\u21C3",	"dharr;": "\u21C2",	"DiacriticalAcute;": "\u00B4",	"DiacriticalDot;": "\u02D9",	"DiacriticalDoubleAcute;": "\u02DD",	"DiacriticalGrave;": "\u0060",	"DiacriticalTilde;": "\u02DC",	"diam;": "\u22C4",	"diamond;": "\u22C4",	"Diamond;": "\u22C4",	"diamondsuit;": "\u2666",	"diams;": "\u2666",	"die;": "\u00A8",	"DifferentialD;": "\u2146",	"digamma;": "\u03DD",	"disin;": "\u22F2",	"div;": "\u00F7",	"divide;": "\u00F7",	"divide": "\u00F7",	"divideontimes;": "\u22C7",	"divonx;": "\u22C7",	"DJcy;": "\u0402",	"djcy;": "\u0452",	"dlcorn;": "\u231E",	"dlcrop;": "\u230D",	"dollar;": "\u0024",	"Dopf;": "\uD835\uDD3B",	"dopf;": "\uD835\uDD55",	"Dot;": "\u00A8",	"dot;": "\u02D9",	"DotDot;": "\u20DC",	"doteq;": "\u2250",	"doteqdot;": "\u2251",	"DotEqual;": "\u2250",	"dotminus;": "\u2238",	"dotplus;": "\u2214",	"dotsquare;": "\u22A1",	"doublebarwedge;": "\u2306",	"DoubleContourIntegral;": "\u222F",	"DoubleDot;": "\u00A8",	"DoubleDownArrow;": "\u21D3",	"DoubleLeftArrow;": "\u21D0",	"DoubleLeftRightArrow;": "\u21D4",	"DoubleLeftTee;": "\u2AE4",	"DoubleLongLeftArrow;": "\u27F8",	"DoubleLongLeftRightArrow;": "\u27FA",	"DoubleLongRightArrow;": "\u27F9",	"DoubleRightArrow;": "\u21D2",	"DoubleRightTee;": "\u22A8",	"DoubleUpArrow;": "\u21D1",	"DoubleUpDownArrow;": "\u21D5",	"DoubleVerticalBar;": "\u2225",	"DownArrowBar;": "\u2913",	"downarrow;": "\u2193",	"DownArrow;": "\u2193",	"Downarrow;": "\u21D3",	"DownArrowUpArrow;": "\u21F5",	"DownBreve;": "\u0311",	"downdownarrows;": "\u21CA",	"downharpoonleft;": "\u21C3",	"downharpoonright;": "\u21C2",	"DownLeftRightVector;": "\u2950",	"DownLeftTeeVector;": "\u295E",	"DownLeftVectorBar;": "\u2956",	"DownLeftVector;": "\u21BD",	"DownRightTeeVector;": "\u295F",	"DownRightVectorBar;": "\u2957",	"DownRightVector;": "\u21C1",	"DownTeeArrow;": "\u21A7",	"DownTee;": "\u22A4",	"drbkarow;": "\u2910",	"drcorn;": "\u231F",	"drcrop;": "\u230C",	"Dscr;": "\uD835\uDC9F",	"dscr;": "\uD835\uDCB9",	"DScy;": "\u0405",	"dscy;": "\u0455",	"dsol;": "\u29F6",	"Dstrok;": "\u0110",	"dstrok;": "\u0111",	"dtdot;": "\u22F1",	"dtri;": "\u25BF",	"dtrif;": "\u25BE",	"duarr;": "\u21F5",	"duhar;": "\u296F",	"dwangle;": "\u29A6",	"DZcy;": "\u040F",	"dzcy;": "\u045F",	"dzigrarr;": "\u27FF",	"Eacute;": "\u00C9",	"Eacute": "\u00C9",	"eacute;": "\u00E9",	"eacute": "\u00E9",	"easter;": "\u2A6E",	"Ecaron;": "\u011A",	"ecaron;": "\u011B",	"Ecirc;": "\u00CA",	"Ecirc": "\u00CA",	"ecirc;": "\u00EA",	"ecirc": "\u00EA",	"ecir;": "\u2256",	"ecolon;": "\u2255",	"Ecy;": "\u042D",	"ecy;": "\u044D",	"eDDot;": "\u2A77",	"Edot;": "\u0116",	"edot;": "\u0117",	"eDot;": "\u2251",	"ee;": "\u2147",	"efDot;": "\u2252",	"Efr;": "\uD835\uDD08",	"efr;": "\uD835\uDD22",	"eg;": "\u2A9A",	"Egrave;": "\u00C8",	"Egrave": "\u00C8",	"egrave;": "\u00E8",	"egrave": "\u00E8",	"egs;": "\u2A96",	"egsdot;": "\u2A98",	"el;": "\u2A99",	"Element;": "\u2208",	"elinters;": "\u23E7",	"ell;": "\u2113",	"els;": "\u2A95",	"elsdot;": "\u2A97",	"Emacr;": "\u0112",	"emacr;": "\u0113",	"empty;": "\u2205",	"emptyset;": "\u2205",	"EmptySmallSquare;": "\u25FB",	"emptyv;": "\u2205",	"EmptyVerySmallSquare;": "\u25AB",	"emsp13;": "\u2004",	"emsp14;": "\u2005",	"emsp;": "\u2003",	"ENG;": "\u014A",	"eng;": "\u014B",	"ensp;": "\u2002",	"Eogon;": "\u0118",	"eogon;": "\u0119",	"Eopf;": "\uD835\uDD3C",	"eopf;": "\uD835\uDD56",	"epar;": "\u22D5",	"eparsl;": "\u29E3",	"eplus;": "\u2A71",	"epsi;": "\u03B5",	"Epsilon;": "\u0395",	"epsilon;": "\u03B5",	"epsiv;": "\u03F5",	"eqcirc;": "\u2256",	"eqcolon;": "\u2255",	"eqsim;": "\u2242",	"eqslantgtr;": "\u2A96",	"eqslantless;": "\u2A95",	"Equal;": "\u2A75",	"equals;": "\u003D",	"EqualTilde;": "\u2242",	"equest;": "\u225F",	"Equilibrium;": "\u21CC",	"equiv;": "\u2261",	"equivDD;": "\u2A78",	"eqvparsl;": "\u29E5",	"erarr;": "\u2971",	"erDot;": "\u2253",	"escr;": "\u212F",	"Escr;": "\u2130",	"esdot;": "\u2250",	"Esim;": "\u2A73",	"esim;": "\u2242",	"Eta;": "\u0397",	"eta;": "\u03B7",	"ETH;": "\u00D0",	"ETH": "\u00D0",	"eth;": "\u00F0",	"eth": "\u00F0",	"Euml;": "\u00CB",	"Euml": "\u00CB",	"euml;": "\u00EB",	"euml": "\u00EB",	"euro;": "\u20AC",	"excl;": "\u0021",	"exist;": "\u2203",	"Exists;": "\u2203",	"expectation;": "\u2130",	"exponentiale;": "\u2147",	"ExponentialE;": "\u2147",	"fallingdotseq;": "\u2252",	"Fcy;": "\u0424",	"fcy;": "\u0444",	"female;": "\u2640",	"ffilig;": "\uFB03",	"fflig;": "\uFB00",	"ffllig;": "\uFB04",	"Ffr;": "\uD835\uDD09",	"ffr;": "\uD835\uDD23",	"filig;": "\uFB01",	"FilledSmallSquare;": "\u25FC",	"FilledVerySmallSquare;": "\u25AA",	"fjlig;": "\u0066\u006A",	"flat;": "\u266D",	"fllig;": "\uFB02",	"fltns;": "\u25B1",	"fnof;": "\u0192",	"Fopf;": "\uD835\uDD3D",	"fopf;": "\uD835\uDD57",	"forall;": "\u2200",	"ForAll;": "\u2200",	"fork;": "\u22D4",	"forkv;": "\u2AD9",	"Fouriertrf;": "\u2131",	"fpartint;": "\u2A0D",	"frac12;": "\u00BD",	"frac12": "\u00BD",	"frac13;": "\u2153",	"frac14;": "\u00BC",	"frac14": "\u00BC",	"frac15;": "\u2155",	"frac16;": "\u2159",	"frac18;": "\u215B",	"frac23;": "\u2154",	"frac25;": "\u2156",	"frac34;": "\u00BE",	"frac34": "\u00BE",	"frac35;": "\u2157",	"frac38;": "\u215C",	"frac45;": "\u2158",	"frac56;": "\u215A",	"frac58;": "\u215D",	"frac78;": "\u215E",	"frasl;": "\u2044",	"frown;": "\u2322",	"fscr;": "\uD835\uDCBB",	"Fscr;": "\u2131",	"gacute;": "\u01F5",	"Gamma;": "\u0393",	"gamma;": "\u03B3",	"Gammad;": "\u03DC",	"gammad;": "\u03DD",	"gap;": "\u2A86",	"Gbreve;": "\u011E",	"gbreve;": "\u011F",	"Gcedil;": "\u0122",	"Gcirc;": "\u011C",	"gcirc;": "\u011D",	"Gcy;": "\u0413",	"gcy;": "\u0433",	"Gdot;": "\u0120",	"gdot;": "\u0121",	"ge;": "\u2265",	"gE;": "\u2267",	"gEl;": "\u2A8C",	"gel;": "\u22DB",	"geq;": "\u2265",	"geqq;": "\u2267",	"geqslant;": "\u2A7E",	"gescc;": "\u2AA9",	"ges;": "\u2A7E",	"gesdot;": "\u2A80",	"gesdoto;": "\u2A82",	"gesdotol;": "\u2A84",	"gesl;": "\u22DB\uFE00",	"gesles;": "\u2A94",	"Gfr;": "\uD835\uDD0A",	"gfr;": "\uD835\uDD24",	"gg;": "\u226B",	"Gg;": "\u22D9",	"ggg;": "\u22D9",	"gimel;": "\u2137",	"GJcy;": "\u0403",	"gjcy;": "\u0453",	"gla;": "\u2AA5",	"gl;": "\u2277",	"glE;": "\u2A92",	"glj;": "\u2AA4",	"gnap;": "\u2A8A",	"gnapprox;": "\u2A8A",	"gne;": "\u2A88",	"gnE;": "\u2269",	"gneq;": "\u2A88",	"gneqq;": "\u2269",	"gnsim;": "\u22E7",	"Gopf;": "\uD835\uDD3E",	"gopf;": "\uD835\uDD58",	"grave;": "\u0060",	"GreaterEqual;": "\u2265",	"GreaterEqualLess;": "\u22DB",	"GreaterFullEqual;": "\u2267",	"GreaterGreater;": "\u2AA2",	"GreaterLess;": "\u2277",	"GreaterSlantEqual;": "\u2A7E",	"GreaterTilde;": "\u2273",	"Gscr;": "\uD835\uDCA2",	"gscr;": "\u210A",	"gsim;": "\u2273",	"gsime;": "\u2A8E",	"gsiml;": "\u2A90",	"gtcc;": "\u2AA7",	"gtcir;": "\u2A7A",	"gt;": "\u003E",	"gt": "\u003E",	"GT;": "\u003E",	"GT": "\u003E",	"Gt;": "\u226B",	"gtdot;": "\u22D7",	"gtlPar;": "\u2995",	"gtquest;": "\u2A7C",	"gtrapprox;": "\u2A86",	"gtrarr;": "\u2978",	"gtrdot;": "\u22D7",	"gtreqless;": "\u22DB",	"gtreqqless;": "\u2A8C",	"gtrless;": "\u2277",	"gtrsim;": "\u2273",	"gvertneqq;": "\u2269\uFE00",	"gvnE;": "\u2269\uFE00",	"Hacek;": "\u02C7",	"hairsp;": "\u200A",	"half;": "\u00BD",	"hamilt;": "\u210B",	"HARDcy;": "\u042A",	"hardcy;": "\u044A",	"harrcir;": "\u2948",	"harr;": "\u2194",	"hArr;": "\u21D4",	"harrw;": "\u21AD",	"Hat;": "\u005E",	"hbar;": "\u210F",	"Hcirc;": "\u0124",	"hcirc;": "\u0125",	"hearts;": "\u2665",	"heartsuit;": "\u2665",	"hellip;": "\u2026",	"hercon;": "\u22B9",	"hfr;": "\uD835\uDD25",	"Hfr;": "\u210C",	"HilbertSpace;": "\u210B",	"hksearow;": "\u2925",	"hkswarow;": "\u2926",	"hoarr;": "\u21FF",	"homtht;": "\u223B",	"hookleftarrow;": "\u21A9",	"hookrightarrow;": "\u21AA",	"hopf;": "\uD835\uDD59",	"Hopf;": "\u210D",	"horbar;": "\u2015",	"HorizontalLine;": "\u2500",	"hscr;": "\uD835\uDCBD",	"Hscr;": "\u210B",	"hslash;": "\u210F",	"Hstrok;": "\u0126",	"hstrok;": "\u0127",	"HumpDownHump;": "\u224E",	"HumpEqual;": "\u224F",	"hybull;": "\u2043",	"hyphen;": "\u2010",	"Iacute;": "\u00CD",	"Iacute": "\u00CD",	"iacute;": "\u00ED",	"iacute": "\u00ED",	"ic;": "\u2063",	"Icirc;": "\u00CE",	"Icirc": "\u00CE",	"icirc;": "\u00EE",	"icirc": "\u00EE",	"Icy;": "\u0418",	"icy;": "\u0438",	"Idot;": "\u0130",	"IEcy;": "\u0415",	"iecy;": "\u0435",	"iexcl;": "\u00A1",	"iexcl": "\u00A1",	"iff;": "\u21D4",	"ifr;": "\uD835\uDD26",	"Ifr;": "\u2111",	"Igrave;": "\u00CC",	"Igrave": "\u00CC",	"igrave;": "\u00EC",	"igrave": "\u00EC",	"ii;": "\u2148",	"iiiint;": "\u2A0C",	"iiint;": "\u222D",	"iinfin;": "\u29DC",	"iiota;": "\u2129",	"IJlig;": "\u0132",	"ijlig;": "\u0133",	"Imacr;": "\u012A",	"imacr;": "\u012B",	"image;": "\u2111",	"ImaginaryI;": "\u2148",	"imagline;": "\u2110",	"imagpart;": "\u2111",	"imath;": "\u0131",	"Im;": "\u2111",	"imof;": "\u22B7",	"imped;": "\u01B5",	"Implies;": "\u21D2",	"incare;": "\u2105",	"in;": "\u2208",	"infin;": "\u221E",	"infintie;": "\u29DD",	"inodot;": "\u0131",	"intcal;": "\u22BA",	"int;": "\u222B",	"Int;": "\u222C",	"integers;": "\u2124",	"Integral;": "\u222B",	"intercal;": "\u22BA",	"Intersection;": "\u22C2",	"intlarhk;": "\u2A17",	"intprod;": "\u2A3C",	"InvisibleComma;": "\u2063",	"InvisibleTimes;": "\u2062",	"IOcy;": "\u0401",	"iocy;": "\u0451",	"Iogon;": "\u012E",	"iogon;": "\u012F",	"Iopf;": "\uD835\uDD40",	"iopf;": "\uD835\uDD5A",	"Iota;": "\u0399",	"iota;": "\u03B9",	"iprod;": "\u2A3C",	"iquest;": "\u00BF",	"iquest": "\u00BF",	"iscr;": "\uD835\uDCBE",	"Iscr;": "\u2110",	"isin;": "\u2208",	"isindot;": "\u22F5",	"isinE;": "\u22F9",	"isins;": "\u22F4",	"isinsv;": "\u22F3",	"isinv;": "\u2208",	"it;": "\u2062",	"Itilde;": "\u0128",	"itilde;": "\u0129",	"Iukcy;": "\u0406",	"iukcy;": "\u0456",	"Iuml;": "\u00CF",	"Iuml": "\u00CF",	"iuml;": "\u00EF",	"iuml": "\u00EF",	"Jcirc;": "\u0134",	"jcirc;": "\u0135",	"Jcy;": "\u0419",	"jcy;": "\u0439",	"Jfr;": "\uD835\uDD0D",	"jfr;": "\uD835\uDD27",	"jmath;": "\u0237",	"Jopf;": "\uD835\uDD41",	"jopf;": "\uD835\uDD5B",	"Jscr;": "\uD835\uDCA5",	"jscr;": "\uD835\uDCBF",	"Jsercy;": "\u0408",	"jsercy;": "\u0458",	"Jukcy;": "\u0404",	"jukcy;": "\u0454",	"Kappa;": "\u039A",	"kappa;": "\u03BA",	"kappav;": "\u03F0",	"Kcedil;": "\u0136",	"kcedil;": "\u0137",	"Kcy;": "\u041A",	"kcy;": "\u043A",	"Kfr;": "\uD835\uDD0E",	"kfr;": "\uD835\uDD28",	"kgreen;": "\u0138",	"KHcy;": "\u0425",	"khcy;": "\u0445",	"KJcy;": "\u040C",	"kjcy;": "\u045C",	"Kopf;": "\uD835\uDD42",	"kopf;": "\uD835\uDD5C",	"Kscr;": "\uD835\uDCA6",	"kscr;": "\uD835\uDCC0",	"lAarr;": "\u21DA",	"Lacute;": "\u0139",	"lacute;": "\u013A",	"laemptyv;": "\u29B4",	"lagran;": "\u2112",	"Lambda;": "\u039B",	"lambda;": "\u03BB",	"lang;": "\u27E8",	"Lang;": "\u27EA",	"langd;": "\u2991",	"langle;": "\u27E8",	"lap;": "\u2A85",	"Laplacetrf;": "\u2112",	"laquo;": "\u00AB",	"laquo": "\u00AB",	"larrb;": "\u21E4",	"larrbfs;": "\u291F",	"larr;": "\u2190",	"Larr;": "\u219E",	"lArr;": "\u21D0",	"larrfs;": "\u291D",	"larrhk;": "\u21A9",	"larrlp;": "\u21AB",	"larrpl;": "\u2939",	"larrsim;": "\u2973",	"larrtl;": "\u21A2",	"latail;": "\u2919",	"lAtail;": "\u291B",	"lat;": "\u2AAB",	"late;": "\u2AAD",	"lates;": "\u2AAD\uFE00",	"lbarr;": "\u290C",	"lBarr;": "\u290E",	"lbbrk;": "\u2772",	"lbrace;": "\u007B",	"lbrack;": "\u005B",	"lbrke;": "\u298B",	"lbrksld;": "\u298F",	"lbrkslu;": "\u298D",	"Lcaron;": "\u013D",	"lcaron;": "\u013E",	"Lcedil;": "\u013B",	"lcedil;": "\u013C",	"lceil;": "\u2308",	"lcub;": "\u007B",	"Lcy;": "\u041B",	"lcy;": "\u043B",	"ldca;": "\u2936",	"ldquo;": "\u201C",	"ldquor;": "\u201E",	"ldrdhar;": "\u2967",	"ldrushar;": "\u294B",	"ldsh;": "\u21B2",	"le;": "\u2264",	"lE;": "\u2266",	"LeftAngleBracket;": "\u27E8",	"LeftArrowBar;": "\u21E4",	"leftarrow;": "\u2190",	"LeftArrow;": "\u2190",	"Leftarrow;": "\u21D0",	"LeftArrowRightArrow;": "\u21C6",	"leftarrowtail;": "\u21A2",	"LeftCeiling;": "\u2308",	"LeftDoubleBracket;": "\u27E6",	"LeftDownTeeVector;": "\u2961",	"LeftDownVectorBar;": "\u2959",	"LeftDownVector;": "\u21C3",	"LeftFloor;": "\u230A",	"leftharpoondown;": "\u21BD",	"leftharpoonup;": "\u21BC",	"leftleftarrows;": "\u21C7",	"leftrightarrow;": "\u2194",	"LeftRightArrow;": "\u2194",	"Leftrightarrow;": "\u21D4",	"leftrightarrows;": "\u21C6",	"leftrightharpoons;": "\u21CB",	"leftrightsquigarrow;": "\u21AD",	"LeftRightVector;": "\u294E",	"LeftTeeArrow;": "\u21A4",	"LeftTee;": "\u22A3",	"LeftTeeVector;": "\u295A",	"leftthreetimes;": "\u22CB",	"LeftTriangleBar;": "\u29CF",	"LeftTriangle;": "\u22B2",	"LeftTriangleEqual;": "\u22B4",	"LeftUpDownVector;": "\u2951",	"LeftUpTeeVector;": "\u2960",	"LeftUpVectorBar;": "\u2958",	"LeftUpVector;": "\u21BF",	"LeftVectorBar;": "\u2952",	"LeftVector;": "\u21BC",	"lEg;": "\u2A8B",	"leg;": "\u22DA",	"leq;": "\u2264",	"leqq;": "\u2266",	"leqslant;": "\u2A7D",	"lescc;": "\u2AA8",	"les;": "\u2A7D",	"lesdot;": "\u2A7F",	"lesdoto;": "\u2A81",	"lesdotor;": "\u2A83",	"lesg;": "\u22DA\uFE00",	"lesges;": "\u2A93",	"lessapprox;": "\u2A85",	"lessdot;": "\u22D6",	"lesseqgtr;": "\u22DA",	"lesseqqgtr;": "\u2A8B",	"LessEqualGreater;": "\u22DA",	"LessFullEqual;": "\u2266",	"LessGreater;": "\u2276",	"lessgtr;": "\u2276",	"LessLess;": "\u2AA1",	"lesssim;": "\u2272",	"LessSlantEqual;": "\u2A7D",	"LessTilde;": "\u2272",	"lfisht;": "\u297C",	"lfloor;": "\u230A",	"Lfr;": "\uD835\uDD0F",	"lfr;": "\uD835\uDD29",	"lg;": "\u2276",	"lgE;": "\u2A91",	"lHar;": "\u2962",	"lhard;": "\u21BD",	"lharu;": "\u21BC",	"lharul;": "\u296A",	"lhblk;": "\u2584",	"LJcy;": "\u0409",	"ljcy;": "\u0459",	"llarr;": "\u21C7",	"ll;": "\u226A",	"Ll;": "\u22D8",	"llcorner;": "\u231E",	"Lleftarrow;": "\u21DA",	"llhard;": "\u296B",	"lltri;": "\u25FA",	"Lmidot;": "\u013F",	"lmidot;": "\u0140",	"lmoustache;": "\u23B0",	"lmoust;": "\u23B0",	"lnap;": "\u2A89",	"lnapprox;": "\u2A89",	"lne;": "\u2A87",	"lnE;": "\u2268",	"lneq;": "\u2A87",	"lneqq;": "\u2268",	"lnsim;": "\u22E6",	"loang;": "\u27EC",	"loarr;": "\u21FD",	"lobrk;": "\u27E6",	"longleftarrow;": "\u27F5",	"LongLeftArrow;": "\u27F5",	"Longleftarrow;": "\u27F8",	"longleftrightarrow;": "\u27F7",	"LongLeftRightArrow;": "\u27F7",	"Longleftrightarrow;": "\u27FA",	"longmapsto;": "\u27FC",	"longrightarrow;": "\u27F6",	"LongRightArrow;": "\u27F6",	"Longrightarrow;": "\u27F9",	"looparrowleft;": "\u21AB",	"looparrowright;": "\u21AC",	"lopar;": "\u2985",	"Lopf;": "\uD835\uDD43",	"lopf;": "\uD835\uDD5D",	"loplus;": "\u2A2D",	"lotimes;": "\u2A34",	"lowast;": "\u2217",	"lowbar;": "\u005F",	"LowerLeftArrow;": "\u2199",	"LowerRightArrow;": "\u2198",	"loz;": "\u25CA",	"lozenge;": "\u25CA",	"lozf;": "\u29EB",	"lpar;": "\u0028",	"lparlt;": "\u2993",	"lrarr;": "\u21C6",	"lrcorner;": "\u231F",	"lrhar;": "\u21CB",	"lrhard;": "\u296D",	"lrm;": "\u200E",	"lrtri;": "\u22BF",	"lsaquo;": "\u2039",	"lscr;": "\uD835\uDCC1",	"Lscr;": "\u2112",	"lsh;": "\u21B0",	"Lsh;": "\u21B0",	"lsim;": "\u2272",	"lsime;": "\u2A8D",	"lsimg;": "\u2A8F",	"lsqb;": "\u005B",	"lsquo;": "\u2018",	"lsquor;": "\u201A",	"Lstrok;": "\u0141",	"lstrok;": "\u0142",	"ltcc;": "\u2AA6",	"ltcir;": "\u2A79",	"lt;": "\u003C",	"lt": "\u003C",	"LT;": "\u003C",	"LT": "\u003C",	"Lt;": "\u226A",	"ltdot;": "\u22D6",	"lthree;": "\u22CB",	"ltimes;": "\u22C9",	"ltlarr;": "\u2976",	"ltquest;": "\u2A7B",	"ltri;": "\u25C3",	"ltrie;": "\u22B4",	"ltrif;": "\u25C2",	"ltrPar;": "\u2996",	"lurdshar;": "\u294A",	"luruhar;": "\u2966",	"lvertneqq;": "\u2268\uFE00",	"lvnE;": "\u2268\uFE00",	"macr;": "\u00AF",	"macr": "\u00AF",	"male;": "\u2642",	"malt;": "\u2720",	"maltese;": "\u2720",	"Map;": "\u2905",	"map;": "\u21A6",	"mapsto;": "\u21A6",	"mapstodown;": "\u21A7",	"mapstoleft;": "\u21A4",	"mapstoup;": "\u21A5",	"marker;": "\u25AE",	"mcomma;": "\u2A29",	"Mcy;": "\u041C",	"mcy;": "\u043C",	"mdash;": "\u2014",	"mDDot;": "\u223A",	"measuredangle;": "\u2221",	"MediumSpace;": "\u205F",	"Mellintrf;": "\u2133",	"Mfr;": "\uD835\uDD10",	"mfr;": "\uD835\uDD2A",	"mho;": "\u2127",	"micro;": "\u00B5",	"micro": "\u00B5",	"midast;": "\u002A",	"midcir;": "\u2AF0",	"mid;": "\u2223",	"middot;": "\u00B7",	"middot": "\u00B7",	"minusb;": "\u229F",	"minus;": "\u2212",	"minusd;": "\u2238",	"minusdu;": "\u2A2A",	"MinusPlus;": "\u2213",	"mlcp;": "\u2ADB",	"mldr;": "\u2026",	"mnplus;": "\u2213",	"models;": "\u22A7",	"Mopf;": "\uD835\uDD44",	"mopf;": "\uD835\uDD5E",	"mp;": "\u2213",	"mscr;": "\uD835\uDCC2",	"Mscr;": "\u2133",	"mstpos;": "\u223E",	"Mu;": "\u039C",	"mu;": "\u03BC",	"multimap;": "\u22B8",	"mumap;": "\u22B8",	"nabla;": "\u2207",	"Nacute;": "\u0143",	"nacute;": "\u0144",	"nang;": "\u2220\u20D2",	"nap;": "\u2249",	"napE;": "\u2A70\u0338",	"napid;": "\u224B\u0338",	"napos;": "\u0149",	"napprox;": "\u2249",	"natural;": "\u266E",	"naturals;": "\u2115",	"natur;": "\u266E",	"nbsp;": "\u00A0",	"nbsp": "\u00A0",	"nbump;": "\u224E\u0338",	"nbumpe;": "\u224F\u0338",	"ncap;": "\u2A43",	"Ncaron;": "\u0147",	"ncaron;": "\u0148",	"Ncedil;": "\u0145",	"ncedil;": "\u0146",	"ncong;": "\u2247",	"ncongdot;": "\u2A6D\u0338",	"ncup;": "\u2A42",	"Ncy;": "\u041D",	"ncy;": "\u043D",	"ndash;": "\u2013",	"nearhk;": "\u2924",	"nearr;": "\u2197",	"neArr;": "\u21D7",	"nearrow;": "\u2197",	"ne;": "\u2260",	"nedot;": "\u2250\u0338",	"NegativeMediumSpace;": "\u200B",	"NegativeThickSpace;": "\u200B",	"NegativeThinSpace;": "\u200B",	"NegativeVeryThinSpace;": "\u200B",	"nequiv;": "\u2262",	"nesear;": "\u2928",	"nesim;": "\u2242\u0338",	"NestedGreaterGreater;": "\u226B",	"NestedLessLess;": "\u226A",	"NewLine;": "\u000A",	"nexist;": "\u2204",	"nexists;": "\u2204",	"Nfr;": "\uD835\uDD11",	"nfr;": "\uD835\uDD2B",	"ngE;": "\u2267\u0338",	"nge;": "\u2271",	"ngeq;": "\u2271",	"ngeqq;": "\u2267\u0338",	"ngeqslant;": "\u2A7E\u0338",	"nges;": "\u2A7E\u0338",	"nGg;": "\u22D9\u0338",	"ngsim;": "\u2275",	"nGt;": "\u226B\u20D2",	"ngt;": "\u226F",	"ngtr;": "\u226F",	"nGtv;": "\u226B\u0338",	"nharr;": "\u21AE",	"nhArr;": "\u21CE",	"nhpar;": "\u2AF2",	"ni;": "\u220B",	"nis;": "\u22FC",	"nisd;": "\u22FA",	"niv;": "\u220B",	"NJcy;": "\u040A",	"njcy;": "\u045A",	"nlarr;": "\u219A",	"nlArr;": "\u21CD",	"nldr;": "\u2025",	"nlE;": "\u2266\u0338",	"nle;": "\u2270",	"nleftarrow;": "\u219A",	"nLeftarrow;": "\u21CD",	"nleftrightarrow;": "\u21AE",	"nLeftrightarrow;": "\u21CE",	"nleq;": "\u2270",	"nleqq;": "\u2266\u0338",	"nleqslant;": "\u2A7D\u0338",	"nles;": "\u2A7D\u0338",	"nless;": "\u226E",	"nLl;": "\u22D8\u0338",	"nlsim;": "\u2274",	"nLt;": "\u226A\u20D2",	"nlt;": "\u226E",	"nltri;": "\u22EA",	"nltrie;": "\u22EC",	"nLtv;": "\u226A\u0338",	"nmid;": "\u2224",	"NoBreak;": "\u2060",	"NonBreakingSpace;": "\u00A0",	"nopf;": "\uD835\uDD5F",	"Nopf;": "\u2115",	"Not;": "\u2AEC",	"not;": "\u00AC",	"not": "\u00AC",	"NotCongruent;": "\u2262",	"NotCupCap;": "\u226D",	"NotDoubleVerticalBar;": "\u2226",	"NotElement;": "\u2209",	"NotEqual;": "\u2260",	"NotEqualTilde;": "\u2242\u0338",	"NotExists;": "\u2204",	"NotGreater;": "\u226F",	"NotGreaterEqual;": "\u2271",	"NotGreaterFullEqual;": "\u2267\u0338",	"NotGreaterGreater;": "\u226B\u0338",	"NotGreaterLess;": "\u2279",	"NotGreaterSlantEqual;": "\u2A7E\u0338",	"NotGreaterTilde;": "\u2275",	"NotHumpDownHump;": "\u224E\u0338",	"NotHumpEqual;": "\u224F\u0338",	"notin;": "\u2209",	"notindot;": "\u22F5\u0338",	"notinE;": "\u22F9\u0338",	"notinva;": "\u2209",	"notinvb;": "\u22F7",	"notinvc;": "\u22F6",	"NotLeftTriangleBar;": "\u29CF\u0338",	"NotLeftTriangle;": "\u22EA",	"NotLeftTriangleEqual;": "\u22EC",	"NotLess;": "\u226E",	"NotLessEqual;": "\u2270",	"NotLessGreater;": "\u2278",	"NotLessLess;": "\u226A\u0338",	"NotLessSlantEqual;": "\u2A7D\u0338",	"NotLessTilde;": "\u2274",	"NotNestedGreaterGreater;": "\u2AA2\u0338",	"NotNestedLessLess;": "\u2AA1\u0338",	"notni;": "\u220C",	"notniva;": "\u220C",	"notnivb;": "\u22FE",	"notnivc;": "\u22FD",	"NotPrecedes;": "\u2280",	"NotPrecedesEqual;": "\u2AAF\u0338",	"NotPrecedesSlantEqual;": "\u22E0",	"NotReverseElement;": "\u220C",	"NotRightTriangleBar;": "\u29D0\u0338",	"NotRightTriangle;": "\u22EB",	"NotRightTriangleEqual;": "\u22ED",	"NotSquareSubset;": "\u228F\u0338",	"NotSquareSubsetEqual;": "\u22E2",	"NotSquareSuperset;": "\u2290\u0338",	"NotSquareSupersetEqual;": "\u22E3",	"NotSubset;": "\u2282\u20D2",	"NotSubsetEqual;": "\u2288",	"NotSucceeds;": "\u2281",	"NotSucceedsEqual;": "\u2AB0\u0338",	"NotSucceedsSlantEqual;": "\u22E1",	"NotSucceedsTilde;": "\u227F\u0338",	"NotSuperset;": "\u2283\u20D2",	"NotSupersetEqual;": "\u2289",	"NotTilde;": "\u2241",	"NotTildeEqual;": "\u2244",	"NotTildeFullEqual;": "\u2247",	"NotTildeTilde;": "\u2249",	"NotVerticalBar;": "\u2224",	"nparallel;": "\u2226",	"npar;": "\u2226",	"nparsl;": "\u2AFD\u20E5",	"npart;": "\u2202\u0338",	"npolint;": "\u2A14",	"npr;": "\u2280",	"nprcue;": "\u22E0",	"nprec;": "\u2280",	"npreceq;": "\u2AAF\u0338",	"npre;": "\u2AAF\u0338",	"nrarrc;": "\u2933\u0338",	"nrarr;": "\u219B",	"nrArr;": "\u21CF",	"nrarrw;": "\u219D\u0338",	"nrightarrow;": "\u219B",	"nRightarrow;": "\u21CF",	"nrtri;": "\u22EB",	"nrtrie;": "\u22ED",	"nsc;": "\u2281",	"nsccue;": "\u22E1",	"nsce;": "\u2AB0\u0338",	"Nscr;": "\uD835\uDCA9",	"nscr;": "\uD835\uDCC3",	"nshortmid;": "\u2224",	"nshortparallel;": "\u2226",	"nsim;": "\u2241",	"nsime;": "\u2244",	"nsimeq;": "\u2244",	"nsmid;": "\u2224",	"nspar;": "\u2226",	"nsqsube;": "\u22E2",	"nsqsupe;": "\u22E3",	"nsub;": "\u2284",	"nsubE;": "\u2AC5\u0338",	"nsube;": "\u2288",	"nsubset;": "\u2282\u20D2",	"nsubseteq;": "\u2288",	"nsubseteqq;": "\u2AC5\u0338",	"nsucc;": "\u2281",	"nsucceq;": "\u2AB0\u0338",	"nsup;": "\u2285",	"nsupE;": "\u2AC6\u0338",	"nsupe;": "\u2289",	"nsupset;": "\u2283\u20D2",	"nsupseteq;": "\u2289",	"nsupseteqq;": "\u2AC6\u0338",	"ntgl;": "\u2279",	"Ntilde;": "\u00D1",	"Ntilde": "\u00D1",	"ntilde;": "\u00F1",	"ntilde": "\u00F1",	"ntlg;": "\u2278",	"ntriangleleft;": "\u22EA",	"ntrianglelefteq;": "\u22EC",	"ntriangleright;": "\u22EB",	"ntrianglerighteq;": "\u22ED",	"Nu;": "\u039D",	"nu;": "\u03BD",	"num;": "\u0023",	"numero;": "\u2116",	"numsp;": "\u2007",	"nvap;": "\u224D\u20D2",	"nvdash;": "\u22AC",	"nvDash;": "\u22AD",	"nVdash;": "\u22AE",	"nVDash;": "\u22AF",	"nvge;": "\u2265\u20D2",	"nvgt;": "\u003E\u20D2",	"nvHarr;": "\u2904",	"nvinfin;": "\u29DE",	"nvlArr;": "\u2902",	"nvle;": "\u2264\u20D2",	"nvlt;": "\u003C\u20D2",	"nvltrie;": "\u22B4\u20D2",	"nvrArr;": "\u2903",	"nvrtrie;": "\u22B5\u20D2",	"nvsim;": "\u223C\u20D2",	"nwarhk;": "\u2923",	"nwarr;": "\u2196",	"nwArr;": "\u21D6",	"nwarrow;": "\u2196",	"nwnear;": "\u2927",	"Oacute;": "\u00D3",	"Oacute": "\u00D3",	"oacute;": "\u00F3",	"oacute": "\u00F3",	"oast;": "\u229B",	"Ocirc;": "\u00D4",	"Ocirc": "\u00D4",	"ocirc;": "\u00F4",	"ocirc": "\u00F4",	"ocir;": "\u229A",	"Ocy;": "\u041E",	"ocy;": "\u043E",	"odash;": "\u229D",	"Odblac;": "\u0150",	"odblac;": "\u0151",	"odiv;": "\u2A38",	"odot;": "\u2299",	"odsold;": "\u29BC",	"OElig;": "\u0152",	"oelig;": "\u0153",	"ofcir;": "\u29BF",	"Ofr;": "\uD835\uDD12",	"ofr;": "\uD835\uDD2C",	"ogon;": "\u02DB",	"Ograve;": "\u00D2",	"Ograve": "\u00D2",	"ograve;": "\u00F2",	"ograve": "\u00F2",	"ogt;": "\u29C1",	"ohbar;": "\u29B5",	"ohm;": "\u03A9",	"oint;": "\u222E",	"olarr;": "\u21BA",	"olcir;": "\u29BE",	"olcross;": "\u29BB",	"oline;": "\u203E",	"olt;": "\u29C0",	"Omacr;": "\u014C",	"omacr;": "\u014D",	"Omega;": "\u03A9",	"omega;": "\u03C9",	"Omicron;": "\u039F",	"omicron;": "\u03BF",	"omid;": "\u29B6",	"ominus;": "\u2296",	"Oopf;": "\uD835\uDD46",	"oopf;": "\uD835\uDD60",	"opar;": "\u29B7",	"OpenCurlyDoubleQuote;": "\u201C",	"OpenCurlyQuote;": "\u2018",	"operp;": "\u29B9",	"oplus;": "\u2295",	"orarr;": "\u21BB",	"Or;": "\u2A54",	"or;": "\u2228",	"ord;": "\u2A5D",	"order;": "\u2134",	"orderof;": "\u2134",	"ordf;": "\u00AA",	"ordf": "\u00AA",	"ordm;": "\u00BA",	"ordm": "\u00BA",	"origof;": "\u22B6",	"oror;": "\u2A56",	"orslope;": "\u2A57",	"orv;": "\u2A5B",	"oS;": "\u24C8",	"Oscr;": "\uD835\uDCAA",	"oscr;": "\u2134",	"Oslash;": "\u00D8",	"Oslash": "\u00D8",	"oslash;": "\u00F8",	"oslash": "\u00F8",	"osol;": "\u2298",	"Otilde;": "\u00D5",	"Otilde": "\u00D5",	"otilde;": "\u00F5",	"otilde": "\u00F5",	"otimesas;": "\u2A36",	"Otimes;": "\u2A37",	"otimes;": "\u2297",	"Ouml;": "\u00D6",	"Ouml": "\u00D6",	"ouml;": "\u00F6",	"ouml": "\u00F6",	"ovbar;": "\u233D",	"OverBar;": "\u203E",	"OverBrace;": "\u23DE",	"OverBracket;": "\u23B4",	"OverParenthesis;": "\u23DC",	"para;": "\u00B6",	"para": "\u00B6",	"parallel;": "\u2225",	"par;": "\u2225",	"parsim;": "\u2AF3",	"parsl;": "\u2AFD",	"part;": "\u2202",	"PartialD;": "\u2202",	"Pcy;": "\u041F",	"pcy;": "\u043F",	"percnt;": "\u0025",	"period;": "\u002E",	"permil;": "\u2030",	"perp;": "\u22A5",	"pertenk;": "\u2031",	"Pfr;": "\uD835\uDD13",	"pfr;": "\uD835\uDD2D",	"Phi;": "\u03A6",	"phi;": "\u03C6",	"phiv;": "\u03D5",	"phmmat;": "\u2133",	"phone;": "\u260E",	"Pi;": "\u03A0",	"pi;": "\u03C0",	"pitchfork;": "\u22D4",	"piv;": "\u03D6",	"planck;": "\u210F",	"planckh;": "\u210E",	"plankv;": "\u210F",	"plusacir;": "\u2A23",	"plusb;": "\u229E",	"pluscir;": "\u2A22",	"plus;": "\u002B",	"plusdo;": "\u2214",	"plusdu;": "\u2A25",	"pluse;": "\u2A72",	"PlusMinus;": "\u00B1",	"plusmn;": "\u00B1",	"plusmn": "\u00B1",	"plussim;": "\u2A26",	"plustwo;": "\u2A27",	"pm;": "\u00B1",	"Poincareplane;": "\u210C",	"pointint;": "\u2A15",	"popf;": "\uD835\uDD61",	"Popf;": "\u2119",	"pound;": "\u00A3",	"pound": "\u00A3",	"prap;": "\u2AB7",	"Pr;": "\u2ABB",	"pr;": "\u227A",	"prcue;": "\u227C",	"precapprox;": "\u2AB7",	"prec;": "\u227A",	"preccurlyeq;": "\u227C",	"Precedes;": "\u227A",	"PrecedesEqual;": "\u2AAF",	"PrecedesSlantEqual;": "\u227C",	"PrecedesTilde;": "\u227E",	"preceq;": "\u2AAF",	"precnapprox;": "\u2AB9",	"precneqq;": "\u2AB5",	"precnsim;": "\u22E8",	"pre;": "\u2AAF",	"prE;": "\u2AB3",	"precsim;": "\u227E",	"prime;": "\u2032",	"Prime;": "\u2033",	"primes;": "\u2119",	"prnap;": "\u2AB9",	"prnE;": "\u2AB5",	"prnsim;": "\u22E8",	"prod;": "\u220F",	"Product;": "\u220F",	"profalar;": "\u232E",	"profline;": "\u2312",	"profsurf;": "\u2313",	"prop;": "\u221D",	"Proportional;": "\u221D",	"Proportion;": "\u2237",	"propto;": "\u221D",	"prsim;": "\u227E",	"prurel;": "\u22B0",	"Pscr;": "\uD835\uDCAB",	"pscr;": "\uD835\uDCC5",	"Psi;": "\u03A8",	"psi;": "\u03C8",	"puncsp;": "\u2008",	"Qfr;": "\uD835\uDD14",	"qfr;": "\uD835\uDD2E",	"qint;": "\u2A0C",	"qopf;": "\uD835\uDD62",	"Qopf;": "\u211A",	"qprime;": "\u2057",	"Qscr;": "\uD835\uDCAC",	"qscr;": "\uD835\uDCC6",	"quaternions;": "\u210D",	"quatint;": "\u2A16",	"quest;": "\u003F",	"questeq;": "\u225F",	"quot;": "\u0022",	"quot": "\u0022",	"QUOT;": "\u0022",	"QUOT": "\u0022",	"rAarr;": "\u21DB",	"race;": "\u223D\u0331",	"Racute;": "\u0154",	"racute;": "\u0155",	"radic;": "\u221A",	"raemptyv;": "\u29B3",	"rang;": "\u27E9",	"Rang;": "\u27EB",	"rangd;": "\u2992",	"range;": "\u29A5",	"rangle;": "\u27E9",	"raquo;": "\u00BB",	"raquo": "\u00BB",	"rarrap;": "\u2975",	"rarrb;": "\u21E5",	"rarrbfs;": "\u2920",	"rarrc;": "\u2933",	"rarr;": "\u2192",	"Rarr;": "\u21A0",	"rArr;": "\u21D2",	"rarrfs;": "\u291E",	"rarrhk;": "\u21AA",	"rarrlp;": "\u21AC",	"rarrpl;": "\u2945",	"rarrsim;": "\u2974",	"Rarrtl;": "\u2916",	"rarrtl;": "\u21A3",	"rarrw;": "\u219D",	"ratail;": "\u291A",	"rAtail;": "\u291C",	"ratio;": "\u2236",	"rationals;": "\u211A",	"rbarr;": "\u290D",	"rBarr;": "\u290F",	"RBarr;": "\u2910",	"rbbrk;": "\u2773",	"rbrace;": "\u007D",	"rbrack;": "\u005D",	"rbrke;": "\u298C",	"rbrksld;": "\u298E",	"rbrkslu;": "\u2990",	"Rcaron;": "\u0158",	"rcaron;": "\u0159",	"Rcedil;": "\u0156",	"rcedil;": "\u0157",	"rceil;": "\u2309",	"rcub;": "\u007D",	"Rcy;": "\u0420",	"rcy;": "\u0440",	"rdca;": "\u2937",	"rdldhar;": "\u2969",	"rdquo;": "\u201D",	"rdquor;": "\u201D",	"rdsh;": "\u21B3",	"real;": "\u211C",	"realine;": "\u211B",	"realpart;": "\u211C",	"reals;": "\u211D",	"Re;": "\u211C",	"rect;": "\u25AD",	"reg;": "\u00AE",	"reg": "\u00AE",	"REG;": "\u00AE",	"REG": "\u00AE",	"ReverseElement;": "\u220B",	"ReverseEquilibrium;": "\u21CB",	"ReverseUpEquilibrium;": "\u296F",	"rfisht;": "\u297D",	"rfloor;": "\u230B",	"rfr;": "\uD835\uDD2F",	"Rfr;": "\u211C",	"rHar;": "\u2964",	"rhard;": "\u21C1",	"rharu;": "\u21C0",	"rharul;": "\u296C",	"Rho;": "\u03A1",	"rho;": "\u03C1",	"rhov;": "\u03F1",	"RightAngleBracket;": "\u27E9",	"RightArrowBar;": "\u21E5",	"rightarrow;": "\u2192",	"RightArrow;": "\u2192",	"Rightarrow;": "\u21D2",	"RightArrowLeftArrow;": "\u21C4",	"rightarrowtail;": "\u21A3",	"RightCeiling;": "\u2309",	"RightDoubleBracket;": "\u27E7",	"RightDownTeeVector;": "\u295D",	"RightDownVectorBar;": "\u2955",	"RightDownVector;": "\u21C2",	"RightFloor;": "\u230B",	"rightharpoondown;": "\u21C1",	"rightharpoonup;": "\u21C0",	"rightleftarrows;": "\u21C4",	"rightleftharpoons;": "\u21CC",	"rightrightarrows;": "\u21C9",	"rightsquigarrow;": "\u219D",	"RightTeeArrow;": "\u21A6",	"RightTee;": "\u22A2",	"RightTeeVector;": "\u295B",	"rightthreetimes;": "\u22CC",	"RightTriangleBar;": "\u29D0",	"RightTriangle;": "\u22B3",	"RightTriangleEqual;": "\u22B5",	"RightUpDownVector;": "\u294F",	"RightUpTeeVector;": "\u295C",	"RightUpVectorBar;": "\u2954",	"RightUpVector;": "\u21BE",	"RightVectorBar;": "\u2953",	"RightVector;": "\u21C0",	"ring;": "\u02DA",	"risingdotseq;": "\u2253",	"rlarr;": "\u21C4",	"rlhar;": "\u21CC",	"rlm;": "\u200F",	"rmoustache;": "\u23B1",	"rmoust;": "\u23B1",	"rnmid;": "\u2AEE",	"roang;": "\u27ED",	"roarr;": "\u21FE",	"robrk;": "\u27E7",	"ropar;": "\u2986",	"ropf;": "\uD835\uDD63",	"Ropf;": "\u211D",	"roplus;": "\u2A2E",	"rotimes;": "\u2A35",	"RoundImplies;": "\u2970",	"rpar;": "\u0029",	"rpargt;": "\u2994",	"rppolint;": "\u2A12",	"rrarr;": "\u21C9",	"Rrightarrow;": "\u21DB",	"rsaquo;": "\u203A",	"rscr;": "\uD835\uDCC7",	"Rscr;": "\u211B",	"rsh;": "\u21B1",	"Rsh;": "\u21B1",	"rsqb;": "\u005D",	"rsquo;": "\u2019",	"rsquor;": "\u2019",	"rthree;": "\u22CC",	"rtimes;": "\u22CA",	"rtri;": "\u25B9",	"rtrie;": "\u22B5",	"rtrif;": "\u25B8",	"rtriltri;": "\u29CE",	"RuleDelayed;": "\u29F4",	"ruluhar;": "\u2968",	"rx;": "\u211E",	"Sacute;": "\u015A",	"sacute;": "\u015B",	"sbquo;": "\u201A",	"scap;": "\u2AB8",	"Scaron;": "\u0160",	"scaron;": "\u0161",	"Sc;": "\u2ABC",	"sc;": "\u227B",	"sccue;": "\u227D",	"sce;": "\u2AB0",	"scE;": "\u2AB4",	"Scedil;": "\u015E",	"scedil;": "\u015F",	"Scirc;": "\u015C",	"scirc;": "\u015D",	"scnap;": "\u2ABA",	"scnE;": "\u2AB6",	"scnsim;": "\u22E9",	"scpolint;": "\u2A13",	"scsim;": "\u227F",	"Scy;": "\u0421",	"scy;": "\u0441",	"sdotb;": "\u22A1",	"sdot;": "\u22C5",	"sdote;": "\u2A66",	"searhk;": "\u2925",	"searr;": "\u2198",	"seArr;": "\u21D8",	"searrow;": "\u2198",	"sect;": "\u00A7",	"sect": "\u00A7",	"semi;": "\u003B",	"seswar;": "\u2929",	"setminus;": "\u2216",	"setmn;": "\u2216",	"sext;": "\u2736",	"Sfr;": "\uD835\uDD16",	"sfr;": "\uD835\uDD30",	"sfrown;": "\u2322",	"sharp;": "\u266F",	"SHCHcy;": "\u0429",	"shchcy;": "\u0449",	"SHcy;": "\u0428",	"shcy;": "\u0448",	"ShortDownArrow;": "\u2193",	"ShortLeftArrow;": "\u2190",	"shortmid;": "\u2223",	"shortparallel;": "\u2225",	"ShortRightArrow;": "\u2192",	"ShortUpArrow;": "\u2191",	"shy;": "\u00AD",	"shy": "\u00AD",	"Sigma;": "\u03A3",	"sigma;": "\u03C3",	"sigmaf;": "\u03C2",	"sigmav;": "\u03C2",	"sim;": "\u223C",	"simdot;": "\u2A6A",	"sime;": "\u2243",	"simeq;": "\u2243",	"simg;": "\u2A9E",	"simgE;": "\u2AA0",	"siml;": "\u2A9D",	"simlE;": "\u2A9F",	"simne;": "\u2246",	"simplus;": "\u2A24",	"simrarr;": "\u2972",	"slarr;": "\u2190",	"SmallCircle;": "\u2218",	"smallsetminus;": "\u2216",	"smashp;": "\u2A33",	"smeparsl;": "\u29E4",	"smid;": "\u2223",	"smile;": "\u2323",	"smt;": "\u2AAA",	"smte;": "\u2AAC",	"smtes;": "\u2AAC\uFE00",	"SOFTcy;": "\u042C",	"softcy;": "\u044C",	"solbar;": "\u233F",	"solb;": "\u29C4",	"sol;": "\u002F",	"Sopf;": "\uD835\uDD4A",	"sopf;": "\uD835\uDD64",	"spades;": "\u2660",	"spadesuit;": "\u2660",	"spar;": "\u2225",	"sqcap;": "\u2293",	"sqcaps;": "\u2293\uFE00",	"sqcup;": "\u2294",	"sqcups;": "\u2294\uFE00",	"Sqrt;": "\u221A",	"sqsub;": "\u228F",	"sqsube;": "\u2291",	"sqsubset;": "\u228F",	"sqsubseteq;": "\u2291",	"sqsup;": "\u2290",	"sqsupe;": "\u2292",	"sqsupset;": "\u2290",	"sqsupseteq;": "\u2292",	"square;": "\u25A1",	"Square;": "\u25A1",	"SquareIntersection;": "\u2293",	"SquareSubset;": "\u228F",	"SquareSubsetEqual;": "\u2291",	"SquareSuperset;": "\u2290",	"SquareSupersetEqual;": "\u2292",	"SquareUnion;": "\u2294",	"squarf;": "\u25AA",	"squ;": "\u25A1",	"squf;": "\u25AA",	"srarr;": "\u2192",	"Sscr;": "\uD835\uDCAE",	"sscr;": "\uD835\uDCC8",	"ssetmn;": "\u2216",	"ssmile;": "\u2323",	"sstarf;": "\u22C6",	"Star;": "\u22C6",	"star;": "\u2606",	"starf;": "\u2605",	"straightepsilon;": "\u03F5",	"straightphi;": "\u03D5",	"strns;": "\u00AF",	"sub;": "\u2282",	"Sub;": "\u22D0",	"subdot;": "\u2ABD",	"subE;": "\u2AC5",	"sube;": "\u2286",	"subedot;": "\u2AC3",	"submult;": "\u2AC1",	"subnE;": "\u2ACB",	"subne;": "\u228A",	"subplus;": "\u2ABF",	"subrarr;": "\u2979",	"subset;": "\u2282",	"Subset;": "\u22D0",	"subseteq;": "\u2286",	"subseteqq;": "\u2AC5",	"SubsetEqual;": "\u2286",	"subsetneq;": "\u228A",	"subsetneqq;": "\u2ACB",	"subsim;": "\u2AC7",	"subsub;": "\u2AD5",	"subsup;": "\u2AD3",	"succapprox;": "\u2AB8",	"succ;": "\u227B",	"succcurlyeq;": "\u227D",	"Succeeds;": "\u227B",	"SucceedsEqual;": "\u2AB0",	"SucceedsSlantEqual;": "\u227D",	"SucceedsTilde;": "\u227F",	"succeq;": "\u2AB0",	"succnapprox;": "\u2ABA",	"succneqq;": "\u2AB6",	"succnsim;": "\u22E9",	"succsim;": "\u227F",	"SuchThat;": "\u220B",	"sum;": "\u2211",	"Sum;": "\u2211",	"sung;": "\u266A",	"sup1;": "\u00B9",	"sup1": "\u00B9",	"sup2;": "\u00B2",	"sup2": "\u00B2",	"sup3;": "\u00B3",	"sup3": "\u00B3",	"sup;": "\u2283",	"Sup;": "\u22D1",	"supdot;": "\u2ABE",	"supdsub;": "\u2AD8",	"supE;": "\u2AC6",	"supe;": "\u2287",	"supedot;": "\u2AC4",	"Superset;": "\u2283",	"SupersetEqual;": "\u2287",	"suphsol;": "\u27C9",	"suphsub;": "\u2AD7",	"suplarr;": "\u297B",	"supmult;": "\u2AC2",	"supnE;": "\u2ACC",	"supne;": "\u228B",	"supplus;": "\u2AC0",	"supset;": "\u2283",	"Supset;": "\u22D1",	"supseteq;": "\u2287",	"supseteqq;": "\u2AC6",	"supsetneq;": "\u228B",	"supsetneqq;": "\u2ACC",	"supsim;": "\u2AC8",	"supsub;": "\u2AD4",	"supsup;": "\u2AD6",	"swarhk;": "\u2926",	"swarr;": "\u2199",	"swArr;": "\u21D9",	"swarrow;": "\u2199",	"swnwar;": "\u292A",	"szlig;": "\u00DF",	"szlig": "\u00DF",	"Tab;": "\u0009",	"target;": "\u2316",	"Tau;": "\u03A4",	"tau;": "\u03C4",	"tbrk;": "\u23B4",	"Tcaron;": "\u0164",	"tcaron;": "\u0165",	"Tcedil;": "\u0162",	"tcedil;": "\u0163",	"Tcy;": "\u0422",	"tcy;": "\u0442",	"tdot;": "\u20DB",	"telrec;": "\u2315",	"Tfr;": "\uD835\uDD17",	"tfr;": "\uD835\uDD31",	"there4;": "\u2234",	"therefore;": "\u2234",	"Therefore;": "\u2234",	"Theta;": "\u0398",	"theta;": "\u03B8",	"thetasym;": "\u03D1",	"thetav;": "\u03D1",	"thickapprox;": "\u2248",	"thicksim;": "\u223C",	"ThickSpace;": "\u205F\u200A",	"ThinSpace;": "\u2009",	"thinsp;": "\u2009",	"thkap;": "\u2248",	"thksim;": "\u223C",	"THORN;": "\u00DE",	"THORN": "\u00DE",	"thorn;": "\u00FE",	"thorn": "\u00FE",	"tilde;": "\u02DC",	"Tilde;": "\u223C",	"TildeEqual;": "\u2243",	"TildeFullEqual;": "\u2245",	"TildeTilde;": "\u2248",	"timesbar;": "\u2A31",	"timesb;": "\u22A0",	"times;": "\u00D7",	"times": "\u00D7",	"timesd;": "\u2A30",	"tint;": "\u222D",	"toea;": "\u2928",	"topbot;": "\u2336",	"topcir;": "\u2AF1",	"top;": "\u22A4",	"Topf;": "\uD835\uDD4B",	"topf;": "\uD835\uDD65",	"topfork;": "\u2ADA",	"tosa;": "\u2929",	"tprime;": "\u2034",	"trade;": "\u2122",	"TRADE;": "\u2122",	"triangle;": "\u25B5",	"triangledown;": "\u25BF",	"triangleleft;": "\u25C3",	"trianglelefteq;": "\u22B4",	"triangleq;": "\u225C",	"triangleright;": "\u25B9",	"trianglerighteq;": "\u22B5",	"tridot;": "\u25EC",	"trie;": "\u225C",	"triminus;": "\u2A3A",	"TripleDot;": "\u20DB",	"triplus;": "\u2A39",	"trisb;": "\u29CD",	"tritime;": "\u2A3B",	"trpezium;": "\u23E2",	"Tscr;": "\uD835\uDCAF",	"tscr;": "\uD835\uDCC9",	"TScy;": "\u0426",	"tscy;": "\u0446",	"TSHcy;": "\u040B",	"tshcy;": "\u045B",	"Tstrok;": "\u0166",	"tstrok;": "\u0167",	"twixt;": "\u226C",	"twoheadleftarrow;": "\u219E",	"twoheadrightarrow;": "\u21A0",	"Uacute;": "\u00DA",	"Uacute": "\u00DA",	"uacute;": "\u00FA",	"uacute": "\u00FA",	"uarr;": "\u2191",	"Uarr;": "\u219F",	"uArr;": "\u21D1",	"Uarrocir;": "\u2949",	"Ubrcy;": "\u040E",	"ubrcy;": "\u045E",	"Ubreve;": "\u016C",	"ubreve;": "\u016D",	"Ucirc;": "\u00DB",	"Ucirc": "\u00DB",	"ucirc;": "\u00FB",	"ucirc": "\u00FB",	"Ucy;": "\u0423",	"ucy;": "\u0443",	"udarr;": "\u21C5",	"Udblac;": "\u0170",	"udblac;": "\u0171",	"udhar;": "\u296E",	"ufisht;": "\u297E",	"Ufr;": "\uD835\uDD18",	"ufr;": "\uD835\uDD32",	"Ugrave;": "\u00D9",	"Ugrave": "\u00D9",	"ugrave;": "\u00F9",	"ugrave": "\u00F9",	"uHar;": "\u2963",	"uharl;": "\u21BF",	"uharr;": "\u21BE",	"uhblk;": "\u2580",	"ulcorn;": "\u231C",	"ulcorner;": "\u231C",	"ulcrop;": "\u230F",	"ultri;": "\u25F8",	"Umacr;": "\u016A",	"umacr;": "\u016B",	"uml;": "\u00A8",	"uml": "\u00A8",	"UnderBar;": "\u005F",	"UnderBrace;": "\u23DF",	"UnderBracket;": "\u23B5",	"UnderParenthesis;": "\u23DD",	"Union;": "\u22C3",	"UnionPlus;": "\u228E",	"Uogon;": "\u0172",	"uogon;": "\u0173",	"Uopf;": "\uD835\uDD4C",	"uopf;": "\uD835\uDD66",	"UpArrowBar;": "\u2912",	"uparrow;": "\u2191",	"UpArrow;": "\u2191",	"Uparrow;": "\u21D1",	"UpArrowDownArrow;": "\u21C5",	"updownarrow;": "\u2195",	"UpDownArrow;": "\u2195",	"Updownarrow;": "\u21D5",	"UpEquilibrium;": "\u296E",	"upharpoonleft;": "\u21BF",	"upharpoonright;": "\u21BE",	"uplus;": "\u228E",	"UpperLeftArrow;": "\u2196",	"UpperRightArrow;": "\u2197",	"upsi;": "\u03C5",	"Upsi;": "\u03D2",	"upsih;": "\u03D2",	"Upsilon;": "\u03A5",	"upsilon;": "\u03C5",	"UpTeeArrow;": "\u21A5",	"UpTee;": "\u22A5",	"upuparrows;": "\u21C8",	"urcorn;": "\u231D",	"urcorner;": "\u231D",	"urcrop;": "\u230E",	"Uring;": "\u016E",	"uring;": "\u016F",	"urtri;": "\u25F9",	"Uscr;": "\uD835\uDCB0",	"uscr;": "\uD835\uDCCA",	"utdot;": "\u22F0",	"Utilde;": "\u0168",	"utilde;": "\u0169",	"utri;": "\u25B5",	"utrif;": "\u25B4",	"uuarr;": "\u21C8",	"Uuml;": "\u00DC",	"Uuml": "\u00DC",	"uuml;": "\u00FC",	"uuml": "\u00FC",	"uwangle;": "\u29A7",	"vangrt;": "\u299C",	"varepsilon;": "\u03F5",	"varkappa;": "\u03F0",	"varnothing;": "\u2205",	"varphi;": "\u03D5",	"varpi;": "\u03D6",	"varpropto;": "\u221D",	"varr;": "\u2195",	"vArr;": "\u21D5",	"varrho;": "\u03F1",	"varsigma;": "\u03C2",	"varsubsetneq;": "\u228A\uFE00",	"varsubsetneqq;": "\u2ACB\uFE00",	"varsupsetneq;": "\u228B\uFE00",	"varsupsetneqq;": "\u2ACC\uFE00",	"vartheta;": "\u03D1",	"vartriangleleft;": "\u22B2",	"vartriangleright;": "\u22B3",	"vBar;": "\u2AE8",	"Vbar;": "\u2AEB",	"vBarv;": "\u2AE9",	"Vcy;": "\u0412",	"vcy;": "\u0432",	"vdash;": "\u22A2",	"vDash;": "\u22A8",	"Vdash;": "\u22A9",	"VDash;": "\u22AB",	"Vdashl;": "\u2AE6",	"veebar;": "\u22BB",	"vee;": "\u2228",	"Vee;": "\u22C1",	"veeeq;": "\u225A",	"vellip;": "\u22EE",	"verbar;": "\u007C",	"Verbar;": "\u2016",	"vert;": "\u007C",	"Vert;": "\u2016",	"VerticalBar;": "\u2223",	"VerticalLine;": "\u007C",	"VerticalSeparator;": "\u2758",	"VerticalTilde;": "\u2240",	"VeryThinSpace;": "\u200A",	"Vfr;": "\uD835\uDD19",	"vfr;": "\uD835\uDD33",	"vltri;": "\u22B2",	"vnsub;": "\u2282\u20D2",	"vnsup;": "\u2283\u20D2",	"Vopf;": "\uD835\uDD4D",	"vopf;": "\uD835\uDD67",	"vprop;": "\u221D",	"vrtri;": "\u22B3",	"Vscr;": "\uD835\uDCB1",	"vscr;": "\uD835\uDCCB",	"vsubnE;": "\u2ACB\uFE00",	"vsubne;": "\u228A\uFE00",	"vsupnE;": "\u2ACC\uFE00",	"vsupne;": "\u228B\uFE00",	"Vvdash;": "\u22AA",	"vzigzag;": "\u299A",	"Wcirc;": "\u0174",	"wcirc;": "\u0175",	"wedbar;": "\u2A5F",	"wedge;": "\u2227",	"Wedge;": "\u22C0",	"wedgeq;": "\u2259",	"weierp;": "\u2118",	"Wfr;": "\uD835\uDD1A",	"wfr;": "\uD835\uDD34",	"Wopf;": "\uD835\uDD4E",	"wopf;": "\uD835\uDD68",	"wp;": "\u2118",	"wr;": "\u2240",	"wreath;": "\u2240",	"Wscr;": "\uD835\uDCB2",	"wscr;": "\uD835\uDCCC",	"xcap;": "\u22C2",	"xcirc;": "\u25EF",	"xcup;": "\u22C3",	"xdtri;": "\u25BD",	"Xfr;": "\uD835\uDD1B",	"xfr;": "\uD835\uDD35",	"xharr;": "\u27F7",	"xhArr;": "\u27FA",	"Xi;": "\u039E",	"xi;": "\u03BE",	"xlarr;": "\u27F5",	"xlArr;": "\u27F8",	"xmap;": "\u27FC",	"xnis;": "\u22FB",	"xodot;": "\u2A00",	"Xopf;": "\uD835\uDD4F",	"xopf;": "\uD835\uDD69",	"xoplus;": "\u2A01",	"xotime;": "\u2A02",	"xrarr;": "\u27F6",	"xrArr;": "\u27F9",	"Xscr;": "\uD835\uDCB3",	"xscr;": "\uD835\uDCCD",	"xsqcup;": "\u2A06",	"xuplus;": "\u2A04",	"xutri;": "\u25B3",	"xvee;": "\u22C1",	"xwedge;": "\u22C0",	"Yacute;": "\u00DD",	"Yacute": "\u00DD",	"yacute;": "\u00FD",	"yacute": "\u00FD",	"YAcy;": "\u042F",	"yacy;": "\u044F",	"Ycirc;": "\u0176",	"ycirc;": "\u0177",	"Ycy;": "\u042B",	"ycy;": "\u044B",	"yen;": "\u00A5",	"yen": "\u00A5",	"Yfr;": "\uD835\uDD1C",	"yfr;": "\uD835\uDD36",	"YIcy;": "\u0407",	"yicy;": "\u0457",	"Yopf;": "\uD835\uDD50",	"yopf;": "\uD835\uDD6A",	"Yscr;": "\uD835\uDCB4",	"yscr;": "\uD835\uDCCE",	"YUcy;": "\u042E",	"yucy;": "\u044E",	"yuml;": "\u00FF",	"yuml": "\u00FF",	"Yuml;": "\u0178",	"Zacute;": "\u0179",	"zacute;": "\u017A",	"Zcaron;": "\u017D",	"zcaron;": "\u017E",	"Zcy;": "\u0417",	"zcy;": "\u0437",	"Zdot;": "\u017B",	"zdot;": "\u017C",	"zeetrf;": "\u2128",	"ZeroWidthSpace;": "\u200B",	"Zeta;": "\u0396",	"zeta;": "\u03B6",	"zfr;": "\uD835\uDD37",	"Zfr;": "\u2128",	"ZHcy;": "\u0416",	"zhcy;": "\u0436",	"zigrarr;": "\u21DD",	"zopf;": "\uD835\uDD6B",	"Zopf;": "\u2124",	"Zscr;": "\uD835\uDCB5",	"zscr;": "\uD835\uDCCF",	"zwj;": "\u200D",	"zwnj;": "\u200C"};},{}],13:[function(_dereq_,module,exports){//////////var util = _dereq_('util/');var pSlice = Array.prototype.slice;var hasOwn = Object.prototype.hasOwnProperty;var assert = module.exports = ok;assert.AssertionError = function AssertionError(options) {  this.name = 'AssertionError';  this.actual = options.actual;  this.expected = options.expected;  this.operator = options.operator;  if (options.message) {    this.message = options.message;    this.generatedMessage = false;  } else {    this.message = getMessage(this);    this.generatedMessage = true;  }  var stackStartFunction = options.stackStartFunction || fail;  if (Error.captureStackTrace) {    Error.captureStackTrace(this, stackStartFunction);  }  else {    var err = new Error();    if (err.stack) {      var out = err.stack;      var fn_name = stackStartFunction.name;      var idx = out.indexOf('\n' + fn_name);      if (idx >= 0) {        var next_line = out.indexOf('\n', idx + 1);        out = out.substring(next_line + 1);      }      this.stack = out;    }  }};util.inherits(assert.AssertionError, Error);function replacer(key, value) {  if (util.isUndefined(value)) {    return '' + value;  }  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {    return value.toString();  }  if (util.isFunction(value) || util.isRegExp(value)) {    return value.toString();  }  return value;}function truncate(s, n) {  if (util.isString(s)) {    return s.length < n ? s : s.slice(0, n);  } else {    return s;  }}function getMessage(self) {  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +         self.operator + ' ' +         truncate(JSON.stringify(self.expected, replacer), 128);}function fail(actual, expected, message, operator, stackStartFunction) {  throw new assert.AssertionError({    message: message,    actual: actual,    expected: expected,    operator: operator,    stackStartFunction: stackStartFunction  });}assert.fail = fail;function ok(value, message) {  if (!value) fail(value, true, message, '==', assert.ok);}assert.ok = ok;assert.equal = function equal(actual, expected, message) {  if (actual != expected) fail(actual, expected, message, '==', assert.equal);};assert.notEqual = function notEqual(actual, expected, message) {  if (actual == expected) {    fail(actual, expected, message, '!=', assert.notEqual);  }};assert.deepEqual = function deepEqual(actual, expected, message) {  if (!_deepEqual(actual, expected)) {    fail(actual, expected, message, 'deepEqual', assert.deepEqual);  }};function _deepEqual(actual, expected) {  if (actual === expected) {    return true;  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {    if (actual.length != expected.length) return false;    for (var i = 0; i < actual.length; i++) {      if (actual[i] !== expected[i]) return false;    }    return true;  } else if (util.isDate(actual) && util.isDate(expected)) {    return actual.getTime() === expected.getTime();  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {    return actual.source === expected.source &&           actual.global === expected.global &&           actual.multiline === expected.multiline &&           actual.lastIndex === expected.lastIndex &&           actual.ignoreCase === expected.ignoreCase;  } else if (!util.isObject(actual) && !util.isObject(expected)) {    return actual == expected;  } else {    return objEquiv(actual, expected);  }}function isArguments(object) {  return Object.prototype.toString.call(object) == '[object Arguments]';}function objEquiv(a, b) {  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))    return false;  if (a.prototype !== b.prototype) return false;  if (isArguments(a)) {    if (!isArguments(b)) {      return false;    }    a = pSlice.call(a);    b = pSlice.call(b);    return _deepEqual(a, b);  }  try {    var ka = objectKeys(a),        kb = objectKeys(b),        key, i;  } catch (e) {//happens when one is a string literal and the other isn't    return false;  }  if (ka.length != kb.length)    return false;  ka.sort();  kb.sort();  for (i = ka.length - 1; i >= 0; i--) {    if (ka[i] != kb[i])      return false;  }  for (i = ka.length - 1; i >= 0; i--) {    key = ka[i];    if (!_deepEqual(a[key], b[key])) return false;  }  return true;}assert.notDeepEqual = function notDeepEqual(actual, expected, message) {  if (_deepEqual(actual, expected)) {    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);  }};assert.strictEqual = function strictEqual(actual, expected, message) {  if (actual !== expected) {    fail(actual, expected, message, '===', assert.strictEqual);  }};assert.notStrictEqual = function notStrictEqual(actual, expected, message) {  if (actual === expected) {    fail(actual, expected, message, '!==', assert.notStrictEqual);  }};function expectedException(actual, expected) {  if (!actual || !expected) {    return false;  }  if (Object.prototype.toString.call(expected) == '[object RegExp]') {    return expected.test(actual);  } else if (actual instanceof expected) {    return true;  } else if (expected.call({}, actual) === true) {    return true;  }  return false;}function _throws(shouldThrow, block, expected, message) {  var actual;  if (util.isString(expected)) {    message = expected;    expected = null;  }  try {    block();  } catch (e) {    actual = e;  }  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +            (message ? ' ' + message : '.');  if (shouldThrow && !actual) {    fail(actual, expected, 'Missing expected exception' + message);  }  if (!shouldThrow && expectedException(actual, expected)) {    fail(actual, expected, 'Got unwanted exception' + message);  }  if ((shouldThrow && actual && expected &&      !expectedException(actual, expected)) || (!shouldThrow && actual)) {    throw actual;  }}assert.throws = function(block, /*optional*/error, /*optional*/message) {  _throws.apply(this, [true].concat(pSlice.call(arguments)));};assert.doesNotThrow = function(block, /*optional*/message) {  _throws.apply(this, [false].concat(pSlice.call(arguments)));};assert.ifError = function(err) { if (err) {throw err;}};var objectKeys = Object.keys || function (obj) {  var keys = [];  for (var key in obj) {    if (hasOwn.call(obj, key)) keys.push(key);  }  return keys;};},{"util/":15}],14:[function(_dereq_,module,exports){module.exports = function isBuffer(arg) {  return arg && typeof arg === 'object'    && typeof arg.copy === 'function'    && typeof arg.fill === 'function'    && typeof arg.readUInt8 === 'function';}},{}],15:[function(_dereq_,module,exports){(function (process,global){//////var formatRegExp = /%[sdj%]/g;exports.format = function(f) {  if (!isString(f)) {    var objects = [];    for (var i = 0; i < arguments.length; i++) {      objects.push(inspect(arguments[i]));    }    return objects.join(' ');  }  var i = 1;  var args = arguments;  var len = args.length;  var str = String(f).replace(formatRegExp, function(x) {    if (x === '%%') return '%';    if (i >= len) return x;    switch (x) {      case '%s': return String(args[i++]);      case '%d': return Number(args[i++]);      case '%j':        try {          return JSON.stringify(args[i++]);        } catch (_) {          return '[Circular]';        }      default:        return x;    }  });  for (var x = args[i]; i < len; x = args[++i]) {    if (isNull(x) || !isObject(x)) {      str += ' ' + x;    } else {      str += ' ' + inspect(x);    }  }  return str;};exports.deprecate = function(fn, msg) {  if (isUndefined(global.process)) {    return function() {      return exports.deprecate(fn, msg).apply(this, arguments);    };  }  if (process.noDeprecation === true) {    return fn;  }  var warned = false;  function deprecated() {    if (!warned) {      if (process.throwDeprecation) {        throw new Error(msg);      } else if (process.traceDeprecation) {        console.trace(msg);      } else {        console.error(msg);      }      warned = true;    }    return fn.apply(this, arguments);  }  return deprecated;};var debugs = {};var debugEnviron;exports.debuglog = function(set) {  if (isUndefined(debugEnviron))    debugEnviron = process.env.NODE_DEBUG || '';  set = set.toUpperCase();  if (!debugs[set]) {    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {      var pid = process.pid;      debugs[set] = function() {        var msg = exports.format.apply(exports, arguments);        console.error('%s %d: %s', set, pid, msg);      };    } else {      debugs[set] = function() {};    }  }  return debugs[set];};function inspect(obj, opts) {  var ctx = {    seen: [],    stylize: stylizeNoColor  };  if (arguments.length >= 3) ctx.depth = arguments[2];  if (arguments.length >= 4) ctx.colors = arguments[3];  if (isBoolean(opts)) {    ctx.showHidden = opts;  } else if (opts) {    exports._extend(ctx, opts);  }  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;  if (isUndefined(ctx.depth)) ctx.depth = 2;  if (isUndefined(ctx.colors)) ctx.colors = false;  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;  if (ctx.colors) ctx.stylize = stylizeWithColor;  return formatValue(ctx, obj, ctx.depth);}exports.inspect = inspect;inspect.colors = {  'bold' : [1, 22],  'italic' : [3, 23],  'underline' : [4, 24],  'inverse' : [7, 27],  'white' : [37, 39],  'grey' : [90, 39],  'black' : [30, 39],  'blue' : [34, 39],  'cyan' : [36, 39],  'green' : [32, 39],  'magenta' : [35, 39],  'red' : [31, 39],  'yellow' : [33, 39]};inspect.styles = {  'special': 'cyan',  'number': 'yellow',  'boolean': 'yellow',  'undefined': 'grey',  'null': 'bold',  'string': 'green',  'date': 'magenta',  'regexp': 'red'};function stylizeWithColor(str, styleType) {  var style = inspect.styles[styleType];  if (style) {    return '\u001b[' + inspect.colors[style][0] + 'm' + str +           '\u001b[' + inspect.colors[style][1] + 'm';  } else {    return str;  }}function stylizeNoColor(str, styleType) {  return str;}function arrayToHash(array) {  var hash = {};  array.forEach(function(val, idx) {    hash[val] = true;  });  return hash;}function formatValue(ctx, value, recurseTimes) {  if (ctx.customInspect &&      value &&      isFunction(value.inspect) &&      value.inspect !== exports.inspect &&      !(value.constructor && value.constructor.prototype === value)) {    var ret = value.inspect(recurseTimes, ctx);    if (!isString(ret)) {      ret = formatValue(ctx, ret, recurseTimes);    }    return ret;  }  var primitive = formatPrimitive(ctx, value);  if (primitive) {    return primitive;  }  var keys = Object.keys(value);  var visibleKeys = arrayToHash(keys);  if (ctx.showHidden) {    keys = Object.getOwnPropertyNames(value);  }  if (isError(value)      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {    return formatError(value);  }  if (keys.length === 0) {    if (isFunction(value)) {      var name = value.name ? ': ' + value.name : '';      return ctx.stylize('[Function' + name + ']', 'special');    }    if (isRegExp(value)) {      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');    }    if (isDate(value)) {      return ctx.stylize(Date.prototype.toString.call(value), 'date');    }    if (isError(value)) {      return formatError(value);    }  }  var base = '', array = false, braces = ['{', '}'];  if (isArray(value)) {    array = true;    braces = ['[', ']'];  }  if (isFunction(value)) {    var n = value.name ? ': ' + value.name : '';    base = ' [Function' + n + ']';  }  if (isRegExp(value)) {    base = ' ' + RegExp.prototype.toString.call(value);  }  if (isDate(value)) {    base = ' ' + Date.prototype.toUTCString.call(value);  }  if (isError(value)) {    base = ' ' + formatError(value);  }  if (keys.length === 0 && (!array || value.length == 0)) {    return braces[0] + base + braces[1];  }  if (recurseTimes < 0) {    if (isRegExp(value)) {      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');    } else {      return ctx.stylize('[Object]', 'special');    }  }  ctx.seen.push(value);  var output;  if (array) {    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);  } else {    output = keys.map(function(key) {      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);    });  }  ctx.seen.pop();  return reduceToSingleString(output, base, braces);}function formatPrimitive(ctx, value) {  if (isUndefined(value))    return ctx.stylize('undefined', 'undefined');  if (isString(value)) {    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')                                             .replace(/'/g, "\\'")                                             .replace(/\\"/g, '"') + '\'';    return ctx.stylize(simple, 'string');  }  if (isNumber(value))    return ctx.stylize('' + value, 'number');  if (isBoolean(value))    return ctx.stylize('' + value, 'boolean');  if (isNull(value))    return ctx.stylize('null', 'null');}function formatError(value) {  return '[' + Error.prototype.toString.call(value) + ']';}function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {  var output = [];  for (var i = 0, l = value.length; i < l; ++i) {    if (hasOwnProperty(value, String(i))) {      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,          String(i), true));    } else {      output.push('');    }  }  keys.forEach(function(key) {    if (!key.match(/^\d+$/)) {      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,          key, true));    }  });  return output;}function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {  var name, str, desc;  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };  if (desc.get) {    if (desc.set) {      str = ctx.stylize('[Getter/Setter]', 'special');    } else {      str = ctx.stylize('[Getter]', 'special');    }  } else {    if (desc.set) {      str = ctx.stylize('[Setter]', 'special');    }  }  if (!hasOwnProperty(visibleKeys, key)) {    name = '[' + key + ']';  }  if (!str) {    if (ctx.seen.indexOf(desc.value) < 0) {      if (isNull(recurseTimes)) {        str = formatValue(ctx, desc.value, null);      } else {        str = formatValue(ctx, desc.value, recurseTimes - 1);      }      if (str.indexOf('\n') > -1) {        if (array) {          str = str.split('\n').map(function(line) {            return '  ' + line;          }).join('\n').substr(2);        } else {          str = '\n' + str.split('\n').map(function(line) {            return '   ' + line;          }).join('\n');        }      }    } else {      str = ctx.stylize('[Circular]', 'special');    }  }  if (isUndefined(name)) {    if (array && key.match(/^\d+$/)) {      return str;    }    name = JSON.stringify('' + key);    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {      name = name.substr(1, name.length - 2);      name = ctx.stylize(name, 'name');    } else {      name = name.replace(/'/g, "\\'")                 .replace(/\\"/g, '"')                 .replace(/(^"|"$)/g, "'");      name = ctx.stylize(name, 'string');    }  }  return name + ': ' + str;}function reduceToSingleString(output, base, braces) {  var numLinesEst = 0;  var length = output.reduce(function(prev, cur) {    numLinesEst++;    if (cur.indexOf('\n') >= 0) numLinesEst++;    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;  }, 0);  if (length > 60) {    return braces[0] +           (base === '' ? '' : base + '\n ') +           ' ' +           output.join(',\n  ') +           ' ' +           braces[1];  }  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];}function isArray(ar) {  return Array.isArray(ar);}exports.isArray = isArray;function isBoolean(arg) {  return typeof arg === 'boolean';}exports.isBoolean = isBoolean;function isNull(arg) {  return arg === null;}exports.isNull = isNull;function isNullOrUndefined(arg) {  return arg == null;}exports.isNullOrUndefined = isNullOrUndefined;function isNumber(arg) {  return typeof arg === 'number';}exports.isNumber = isNumber;function isString(arg) {  return typeof arg === 'string';}exports.isString = isString;function isSymbol(arg) {  return typeof arg === 'symbol';}exports.isSymbol = isSymbol;function isUndefined(arg) {  return arg === void 0;}exports.isUndefined = isUndefined;function isRegExp(re) {  return isObject(re) && objectToString(re) === '[object RegExp]';}exports.isRegExp = isRegExp;function isObject(arg) {  return typeof arg === 'object' && arg !== null;}exports.isObject = isObject;function isDate(d) {  return isObject(d) && objectToString(d) === '[object Date]';}exports.isDate = isDate;function isError(e) {  return isObject(e) &&      (objectToString(e) === '[object Error]' || e instanceof Error);}exports.isError = isError;function isFunction(arg) {  return typeof arg === 'function';}exports.isFunction = isFunction;function isPrimitive(arg) {  return arg === null ||         typeof arg === 'boolean' ||         typeof arg === 'number' ||         typeof arg === 'string' ||         typeof arg === 'symbol' ||  // ES6 symbol         typeof arg === 'undefined';}exports.isPrimitive = isPrimitive;exports.isBuffer = _dereq_('./support/isBuffer');function objectToString(o) {  return Object.prototype.toString.call(o);}function pad(n) {  return n < 10 ? '0' + n.toString(10) : n.toString(10);}var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',              'Oct', 'Nov', 'Dec'];function timestamp() {  var d = new Date();  var time = [pad(d.getHours()),              pad(d.getMinutes()),              pad(d.getSeconds())].join(':');  return [d.getDate(), months[d.getMonth()], time].join(' ');}exports.log = function() {  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));};exports.inherits = _dereq_('inherits');exports._extend = function(origin, add) {  if (!add || !isObject(add)) return origin;  var keys = Object.keys(add);  var i = keys.length;  while (i--) {    origin[keys[i]] = add[keys[i]];  }  return origin;};function hasOwnProperty(obj, prop) {  return Object.prototype.hasOwnProperty.call(obj, prop);}}).call(this,_dereq_("/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})},{"./support/isBuffer":14,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}],16:[function(_dereq_,module,exports){//////function EventEmitter() {  this._events = this._events || {};  this._maxListeners = this._maxListeners || undefined;}module.exports = EventEmitter;EventEmitter.EventEmitter = EventEmitter;EventEmitter.prototype._events = undefined;EventEmitter.prototype._maxListeners = undefined;EventEmitter.defaultMaxListeners = 10;EventEmitter.prototype.setMaxListeners = function(n) {  if (!isNumber(n) || n < 0 || isNaN(n))    throw TypeError('n must be a positive number');  this._maxListeners = n;  return this;};EventEmitter.prototype.emit = function(type) {  var er, handler, len, args, i, listeners;  if (!this._events)    this._events = {};  if (type === 'error') {    if (!this._events.error ||        (isObject(this._events.error) && !this._events.error.length)) {      er = arguments[1];      if (er instanceof Error) {        throw er; // Unhandled 'error' event      } else {        throw TypeError('Uncaught, unspecified "error" event.');      }      return false;    }  }  handler = this._events[type];  if (isUndefined(handler))    return false;  if (isFunction(handler)) {    switch (arguments.length) {      case 1:        handler.call(this);        break;      case 2:        handler.call(this, arguments[1]);        break;      case 3:        handler.call(this, arguments[1], arguments[2]);        break;      default:        len = arguments.length;        args = new Array(len - 1);        for (i = 1; i < len; i++)          args[i - 1] = arguments[i];        handler.apply(this, args);    }  } else if (isObject(handler)) {    len = arguments.length;    args = new Array(len - 1);    for (i = 1; i < len; i++)      args[i - 1] = arguments[i];    listeners = handler.slice();    len = listeners.length;    for (i = 0; i < len; i++)      listeners[i].apply(this, args);  }  return true;};EventEmitter.prototype.addListener = function(type, listener) {  var m;  if (!isFunction(listener))    throw TypeError('listener must be a function');  if (!this._events)    this._events = {};  if (this._events.newListener)    this.emit('newListener', type,              isFunction(listener.listener) ?              listener.listener : listener);  if (!this._events[type])    this._events[type] = listener;  else if (isObject(this._events[type]))    this._events[type].push(listener);  else    this._events[type] = [this._events[type], listener];  if (isObject(this._events[type]) && !this._events[type].warned) {    var m;    if (!isUndefined(this._maxListeners)) {      m = this._maxListeners;    } else {      m = EventEmitter.defaultMaxListeners;    }    if (m && m > 0 && this._events[type].length > m) {      this._events[type].warned = true;      console.error('(node) warning: possible EventEmitter memory ' +                    'leak detected. %d listeners added. ' +                    'Use emitter.setMaxListeners() to increase limit.',                    this._events[type].length);      console.trace();    }  }  return this;};EventEmitter.prototype.on = EventEmitter.prototype.addListener;EventEmitter.prototype.once = function(type, listener) {  if (!isFunction(listener))    throw TypeError('listener must be a function');  var fired = false;  function g() {    this.removeListener(type, g);    if (!fired) {      fired = true;      listener.apply(this, arguments);    }  }  g.listener = listener;  this.on(type, g);  return this;};EventEmitter.prototype.removeListener = function(type, listener) {  var list, position, length, i;  if (!isFunction(listener))    throw TypeError('listener must be a function');  if (!this._events || !this._events[type])    return this;  list = this._events[type];  length = list.length;  position = -1;  if (list === listener ||      (isFunction(list.listener) && list.listener === listener)) {    delete this._events[type];    if (this._events.removeListener)      this.emit('removeListener', type, listener);  } else if (isObject(list)) {    for (i = length; i-- > 0;) {      if (list[i] === listener ||          (list[i].listener && list[i].listener === listener)) {        position = i;        break;      }    }    if (position < 0)      return this;    if (list.length === 1) {      list.length = 0;      delete this._events[type];    } else {      list.splice(position, 1);    }    if (this._events.removeListener)      this.emit('removeListener', type, listener);  }  return this;};EventEmitter.prototype.removeAllListeners = function(type) {  var key, listeners;  if (!this._events)    return this;  if (!this._events.removeListener) {    if (arguments.length === 0)      this._events = {};    else if (this._events[type])      delete this._events[type];    return this;  }  if (arguments.length === 0) {    for (key in this._events) {      if (key === 'removeListener') continue;      this.removeAllListeners(key);    }    this.removeAllListeners('removeListener');    this._events = {};    return this;  }  listeners = this._events[type];  if (isFunction(listeners)) {    this.removeListener(type, listeners);  } else {    while (listeners.length)      this.removeListener(type, listeners[listeners.length - 1]);  }  delete this._events[type];  return this;};EventEmitter.prototype.listeners = function(type) {  var ret;  if (!this._events || !this._events[type])    ret = [];  else if (isFunction(this._events[type]))    ret = [this._events[type]];  else    ret = this._events[type].slice();  return ret;};EventEmitter.listenerCount = function(emitter, type) {  var ret;  if (!emitter._events || !emitter._events[type])    ret = 0;  else if (isFunction(emitter._events[type]))    ret = 1;  else    ret = emitter._events[type].length;  return ret;};function isFunction(arg) {  return typeof arg === 'function';}function isNumber(arg) {  return typeof arg === 'number';}function isObject(arg) {  return typeof arg === 'object' && arg !== null;}function isUndefined(arg) {  return arg === void 0;}},{}],17:[function(_dereq_,module,exports){if (typeof Object.create === 'function') {  module.exports = function inherits(ctor, superCtor) {    ctor.super_ = superCtor    ctor.prototype = Object.create(superCtor.prototype, {      constructor: {        value: ctor,        enumerable: false,        writable: true,        configurable: true      }    });  };} else {  module.exports = function inherits(ctor, superCtor) {    ctor.super_ = superCtor    var TempCtor = function () {}    TempCtor.prototype = superCtor.prototype    ctor.prototype = new TempCtor()    ctor.prototype.constructor = ctor  }}},{}],18:[function(_dereq_,module,exports){var process = module.exports = {};process.nextTick = (function () {    var canSetImmediate = typeof window !== 'undefined'    && window.setImmediate;    var canPost = typeof window !== 'undefined'    && window.postMessage && window.addEventListener    ;    if (canSetImmediate) {        return function (f) { return window.setImmediate(f) };    }    if (canPost) {        var queue = [];        window.addEventListener('message', function (ev) {            var source = ev.source;            if ((source === window || source === null) && ev.data === 'process-tick') {                ev.stopPropagation();                if (queue.length > 0) {                    var fn = queue.shift();                    fn();                }            }        }, true);        return function nextTick(fn) {            queue.push(fn);            window.postMessage('process-tick', '*');        };    }    return function nextTick(fn) {        setTimeout(fn, 0);    };})();process.title = 'browser';process.browser = true;process.env = {};process.argv = [];function noop() {}process.on = noop;process.once = noop;process.off = noop;process.emit = noop;process.binding = function (name) {    throw new Error('process.binding is not supported');}process.cwd = function () { return '/' };process.chdir = function (dir) {    throw new Error('process.chdir is not supported');};},{}],19:[function(_dereq_,module,exports){module.exports=_dereq_(14)},{}],20:[function(_dereq_,module,exports){module.exports=_dereq_(15)},{"./support/isBuffer":19,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}]},{},[9])(9)});ace.define("ace/mode/html_worker",[], function(require, exports, module) {"use strict";var oop = require("../lib/oop");var lang = require("../lib/lang");var Mirror = require("../worker/mirror").Mirror;var SAXParser = require("./html/saxparser").SAXParser;var errorTypes = {    "expected-doctype-but-got-start-tag": "info",    "expected-doctype-but-got-chars": "info",    "non-html-root": "info"};var Worker = exports.Worker = function(sender) {    Mirror.call(this, sender);    this.setTimeout(400);    this.context = null;};oop.inherits(Worker, Mirror);(function() {    this.setOptions = function(options) {        this.context = options.context;    };    this.onUpdate = function() {        var value = this.doc.getValue();        if (!value)            return;        var parser = new SAXParser();        var errors = [];        var noop = function(){};        parser.contentHandler = {           startDocument: noop,           endDocument: noop,           startElement: noop,           endElement: noop,           characters: noop        };        parser.errorHandler = {            error: function(message, location, code) {                errors.push({                    row: location.line,                    column: location.column,                    text: message,                    type: errorTypes[code] || "error"                });            }        };        if (this.context)            parser.parseFragment(value, this.context);        else            parser.parse(value);        this.sender.emit("error", errors);    };}).call(Worker.prototype);});ace.define("ace/lib/es5-shim",[], function(require, exports, module) {////function Empty() {}if (!Function.prototype.bind) {    Function.prototype.bind = function bind(that) { // .length is 1        var target = this;        if (typeof target != "function") {            throw new TypeError("Function.prototype.bind called on incompatible " + target);        }        var args = slice.call(arguments, 1); // for normal call        var bound = function () {            if (this instanceof bound) {                var result = target.apply(                    this,                    args.concat(slice.call(arguments))                );                if (Object(result) === result) {                    return result;                }                return this;            } else {                return target.apply(                    that,                    args.concat(slice.call(arguments))                );            }        };        if(target.prototype) {            Empty.prototype = target.prototype;            bound.prototype = new Empty();            Empty.prototype = null;        }        //        return bound;    };}var call = Function.prototype.call;var prototypeOfArray = Array.prototype;var prototypeOfObject = Object.prototype;var slice = prototypeOfArray.slice;var _toString = call.bind(prototypeOfObject.toString);var owns = call.bind(prototypeOfObject.hasOwnProperty);var defineGetter;var defineSetter;var lookupGetter;var lookupSetter;var supportsAccessors;if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {    defineGetter = call.bind(prototypeOfObject.__defineGetter__);    defineSetter = call.bind(prototypeOfObject.__defineSetter__);    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);}////if ([1,2].splice(0).length != 2) {    if(function() { // test IE < 9 to splice bug - see issue #138        function makeArray(l) {            var a = new Array(l+2);            a[0] = a[1] = 0;            return a;        }        var array = [], lengthBefore;                array.splice.apply(array, makeArray(20));        array.splice.apply(array, makeArray(26));        lengthBefore = array.length; //46        array.splice(5, 0, "XXX"); // add one element        lengthBefore + 1 == array.length        if (lengthBefore + 1 == array.length) {            return true;// has right splice implementation without bugs        }    }()) {//IE 6/7        var array_splice = Array.prototype.splice;        Array.prototype.splice = function(start, deleteCount) {            if (!arguments.length) {                return [];            } else {                return array_splice.apply(this, [                    start === void 0 ? 0 : start,                    deleteCount === void 0 ? (this.length - start) : deleteCount                ].concat(slice.call(arguments, 2)))            }        };    } else {//IE8        Array.prototype.splice = function(pos, removeCount){            var length = this.length;            if (pos > 0) {                if (pos > length)                    pos = length;            } else if (pos == void 0) {                pos = 0;            } else if (pos < 0) {                pos = Math.max(length + pos, 0);            }            if (!(pos+removeCount < length))                removeCount = length - pos;            var removed = this.slice(pos, pos+removeCount);            var insert = slice.call(arguments, 2);            var add = insert.length;                        if (pos === length) {                if (add) {                    this.push.apply(this, insert);                }            } else {                var remove = Math.min(removeCount, length - pos);                var tailOldPos = pos + remove;                var tailNewPos = tailOldPos + add - remove;                var tailCount = length - tailOldPos;                var lengthAfterRemove = length - remove;                if (tailNewPos < tailOldPos) { // case A                    for (var i = 0; i < tailCount; ++i) {                        this[tailNewPos+i] = this[tailOldPos+i];                    }                } else if (tailNewPos > tailOldPos) { // case B                    for (i = tailCount; i--; ) {                        this[tailNewPos+i] = this[tailOldPos+i];                    }                } // else, add == remove (nothing to do)                if (add && pos === lengthAfterRemove) {                    this.length = lengthAfterRemove; // truncate array                    this.push.apply(this, insert);                } else {                    this.length = lengthAfterRemove + add; // reserves space                    for (i = 0; i < add; ++i) {                        this[pos+i] = insert[i];                    }                }            }            return removed;        };    }}if (!Array.isArray) {    Array.isArray = function isArray(obj) {        return _toString(obj) == "[object Array]";    };}var boxedString = Object("a"),    splitString = boxedString[0] != "a" || !(0 in boxedString);if (!Array.prototype.forEach) {    Array.prototype.forEach = function forEach(fun /*, thisp*/) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            thisp = arguments[1],            i = -1,            length = self.length >>> 0;        if (_toString(fun) != "[object Function]") {            throw new TypeError(); // TODO message        }        while (++i < length) {            if (i in self) {                fun.call(thisp, self[i], i, object);            }        }    };}if (!Array.prototype.map) {    Array.prototype.map = function map(fun /*, thisp*/) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            length = self.length >>> 0,            result = Array(length),            thisp = arguments[1];        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        for (var i = 0; i < length; i++) {            if (i in self)                result[i] = fun.call(thisp, self[i], i, object);        }        return result;    };}if (!Array.prototype.filter) {    Array.prototype.filter = function filter(fun /*, thisp */) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                    object,            length = self.length >>> 0,            result = [],            value,            thisp = arguments[1];        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        for (var i = 0; i < length; i++) {            if (i in self) {                value = self[i];                if (fun.call(thisp, value, i, object)) {                    result.push(value);                }            }        }        return result;    };}if (!Array.prototype.every) {    Array.prototype.every = function every(fun /*, thisp */) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            length = self.length >>> 0,            thisp = arguments[1];        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        for (var i = 0; i < length; i++) {            if (i in self && !fun.call(thisp, self[i], i, object)) {                return false;            }        }        return true;    };}if (!Array.prototype.some) {    Array.prototype.some = function some(fun /*, thisp */) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            length = self.length >>> 0,            thisp = arguments[1];        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        for (var i = 0; i < length; i++) {            if (i in self && fun.call(thisp, self[i], i, object)) {                return true;            }        }        return false;    };}if (!Array.prototype.reduce) {    Array.prototype.reduce = function reduce(fun /*, initial*/) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            length = self.length >>> 0;        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        if (!length && arguments.length == 1) {            throw new TypeError("reduce of empty array with no initial value");        }        var i = 0;        var result;        if (arguments.length >= 2) {            result = arguments[1];        } else {            do {                if (i in self) {                    result = self[i++];                    break;                }                if (++i >= length) {                    throw new TypeError("reduce of empty array with no initial value");                }            } while (true);        }        for (; i < length; i++) {            if (i in self) {                result = fun.call(void 0, result, self[i], i, object);            }        }        return result;    };}if (!Array.prototype.reduceRight) {    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {        var object = toObject(this),            self = splitString && _toString(this) == "[object String]" ?                this.split("") :                object,            length = self.length >>> 0;        if (_toString(fun) != "[object Function]") {            throw new TypeError(fun + " is not a function");        }        if (!length && arguments.length == 1) {            throw new TypeError("reduceRight of empty array with no initial value");        }        var result, i = length - 1;        if (arguments.length >= 2) {            result = arguments[1];        } else {            do {                if (i in self) {                    result = self[i--];                    break;                }                if (--i < 0) {                    throw new TypeError("reduceRight of empty array with no initial value");                }            } while (true);        }        do {            if (i in this) {                result = fun.call(void 0, result, self[i], i, object);            }        } while (i--);        return result;    };}if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {        var self = splitString && _toString(this) == "[object String]" ?                this.split("") :                toObject(this),            length = self.length >>> 0;        if (!length) {            return -1;        }        var i = 0;        if (arguments.length > 1) {            i = toInteger(arguments[1]);        }        i = i >= 0 ? i : Math.max(0, length + i);        for (; i < length; i++) {            if (i in self && self[i] === sought) {                return i;            }        }        return -1;    };}if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {        var self = splitString && _toString(this) == "[object String]" ?                this.split("") :                toObject(this),            length = self.length >>> 0;        if (!length) {            return -1;        }        var i = length - 1;        if (arguments.length > 1) {            i = Math.min(i, toInteger(arguments[1]));        }        i = i >= 0 ? i : length - Math.abs(i);        for (; i >= 0; i--) {            if (i in self && sought === self[i]) {                return i;            }        }        return -1;    };}////if (!Object.getPrototypeOf) {    Object.getPrototypeOf = function getPrototypeOf(object) {        return object.__proto__ || (            object.constructor ?            object.constructor.prototype :            prototypeOfObject        );    };}if (!Object.getOwnPropertyDescriptor) {    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +                         "non-object: ";    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {        if ((typeof object != "object" && typeof object != "function") || object === null)            throw new TypeError(ERR_NON_OBJECT + object);        if (!owns(object, property))            return;        var descriptor, getter, setter;        descriptor =  { enumerable: true, configurable: true };        if (supportsAccessors) {            var prototype = object.__proto__;            object.__proto__ = prototypeOfObject;            var getter = lookupGetter(object, property);            var setter = lookupSetter(object, property);            object.__proto__ = prototype;            if (getter || setter) {                if (getter) descriptor.get = getter;                if (setter) descriptor.set = setter;                return descriptor;            }        }        descriptor.value = object[property];        return descriptor;    };}if (!Object.getOwnPropertyNames) {    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {        return Object.keys(object);    };}if (!Object.create) {    var createEmpty;    if (Object.prototype.__proto__ === null) {        createEmpty = function () {            return { "__proto__": null };        };    } else {        createEmpty = function () {            var empty = {};            for (var i in empty)                empty[i] = null;            empty.constructor =            empty.hasOwnProperty =            empty.propertyIsEnumerable =            empty.isPrototypeOf =            empty.toLocaleString =            empty.toString =            empty.valueOf =            empty.__proto__ = null;            return empty;        }    }    Object.create = function create(prototype, properties) {        var object;        if (prototype === null) {            object = createEmpty();        } else {            if (typeof prototype != "object")                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");            var Type = function () {};            Type.prototype = prototype;            object = new Type();            object.__proto__ = prototype;        }        if (properties !== void 0)            Object.defineProperties(object, properties);        return object;    };}function doesDefinePropertyWork(object) {    try {        Object.defineProperty(object, "sentinel", {});        return "sentinel" in object;    } catch (exception) {    }}if (Object.defineProperty) {    var definePropertyWorksOnObject = doesDefinePropertyWork({});    var definePropertyWorksOnDom = typeof document == "undefined" ||        doesDefinePropertyWork(document.createElement("div"));    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {        var definePropertyFallback = Object.defineProperty;    }}if (!Object.defineProperty || definePropertyFallback) {    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +                                      "on this javascript engine";    Object.defineProperty = function defineProperty(object, property, descriptor) {        if ((typeof object != "object" && typeof object != "function") || object === null)            throw new TypeError(ERR_NON_OBJECT_TARGET + object);        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);        if (definePropertyFallback) {            try {                return definePropertyFallback.call(Object, object, property, descriptor);            } catch (exception) {            }        }        if (owns(descriptor, "value")) {            if (supportsAccessors && (lookupGetter(object, property) ||                                      lookupSetter(object, property)))            {                var prototype = object.__proto__;                object.__proto__ = prototypeOfObject;                delete object[property];                object[property] = descriptor.value;                object.__proto__ = prototype;            } else {                object[property] = descriptor.value;            }        } else {            if (!supportsAccessors)                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);            if (owns(descriptor, "get"))                defineGetter(object, property, descriptor.get);            if (owns(descriptor, "set"))                defineSetter(object, property, descriptor.set);        }        return object;    };}if (!Object.defineProperties) {    Object.defineProperties = function defineProperties(object, properties) {        for (var property in properties) {            if (owns(properties, property))                Object.defineProperty(object, property, properties[property]);        }        return object;    };}if (!Object.seal) {    Object.seal = function seal(object) {        return object;    };}if (!Object.freeze) {    Object.freeze = function freeze(object) {        return object;    };}try {    Object.freeze(function () {});} catch (exception) {    Object.freeze = (function freeze(freezeObject) {        return function freeze(object) {            if (typeof object == "function") {                return object;            } else {                return freezeObject(object);            }        };    })(Object.freeze);}if (!Object.preventExtensions) {    Object.preventExtensions = function preventExtensions(object) {        return object;    };}if (!Object.isSealed) {    Object.isSealed = function isSealed(object) {        return false;    };}if (!Object.isFrozen) {    Object.isFrozen = function isFrozen(object) {        return false;    };}if (!Object.isExtensible) {    Object.isExtensible = function isExtensible(object) {        if (Object(object) === object) {            throw new TypeError(); // TODO message        }        var name = '';        while (owns(object, name)) {            name += '?';        }        object[name] = true;        var returnValue = owns(object, name);        delete object[name];        return returnValue;    };}if (!Object.keys) {    var hasDontEnumBug = true,        dontEnums = [            "toString",            "toLocaleString",            "valueOf",            "hasOwnProperty",            "isPrototypeOf",            "propertyIsEnumerable",            "constructor"        ],        dontEnumsLength = dontEnums.length;    for (var key in {"toString": null}) {        hasDontEnumBug = false;    }    Object.keys = function keys(object) {        if (            (typeof object != "object" && typeof object != "function") ||            object === null        ) {            throw new TypeError("Object.keys called on a non-object");        }        var keys = [];        for (var name in object) {            if (owns(object, name)) {                keys.push(name);            }        }        if (hasDontEnumBug) {            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {                var dontEnum = dontEnums[i];                if (owns(object, dontEnum)) {                    keys.push(dontEnum);                }            }        }        return keys;    };}////if (!Date.now) {    Date.now = function now() {        return new Date().getTime();    };}////var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +    "\u2029\uFEFF";if (!String.prototype.trim || ws.trim()) {    ws = "[" + ws + "]";    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),        trimEndRegexp = new RegExp(ws + ws + "*$");    String.prototype.trim = function trim() {        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");    };}////function toInteger(n) {    n = +n;    if (n !== n) { // isNaN        n = 0;    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {        n = (n > 0 || -1) * Math.floor(Math.abs(n));    }    return n;}function isPrimitive(input) {    var type = typeof input;    return (        input === null ||        type === "undefined" ||        type === "boolean" ||        type === "number" ||        type === "string"    );}function toPrimitive(input) {    var val, valueOf, toString;    if (isPrimitive(input)) {        return input;    }    valueOf = input.valueOf;    if (typeof valueOf === "function") {        val = valueOf.call(input);        if (isPrimitive(val)) {            return val;        }    }    toString = input.toString;    if (typeof toString === "function") {        val = toString.call(input);        if (isPrimitive(val)) {            return val;        }    }    throw new TypeError();}var toObject = function (o) {    if (o == null) { // this matches both null and undefined        throw new TypeError("can't convert "+o+" to object");    }    return Object(o);};});
 |