farmhash.cc 277 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871
  1. // Copyright (c) 2014 Google, Inc.
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy
  4. // of this software and associated documentation files (the "Software"), to deal
  5. // in the Software without restriction, including without limitation the rights
  6. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. // copies of the Software, and to permit persons to whom the Software is
  8. // furnished to do so, subject to the following conditions:
  9. //
  10. // The above copyright notice and this permission notice shall be included in
  11. // all copies or substantial portions of the Software.
  12. //
  13. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. // THE SOFTWARE.
  20. //
  21. // FarmHash, by Geoff Pike
  22. #include "farmhash.h"
  23. // FARMHASH ASSUMPTIONS: Modify as needed, or use -DFARMHASH_ASSUME_SSE42 etc.
  24. // Note that if you use -DFARMHASH_ASSUME_SSE42 you likely need -msse42
  25. // (or its equivalent for your compiler); if you use -DFARMHASH_ASSUME_AESNI
  26. // you likely need -maes (or its equivalent for your compiler).
  27. #ifdef FARMHASH_ASSUME_SSSE3
  28. #undef FARMHASH_ASSUME_SSSE3
  29. #define FARMHASH_ASSUME_SSSE3
  30. #endif
  31. #ifdef FARMHASH_ASSUME_SSE41
  32. #undef FARMHASH_ASSUME_SSE41
  33. #define FARMHASH_ASSUME_SSE41
  34. #endif
  35. #ifdef FARMHASH_ASSUME_SSE42
  36. #undef FARMHASH_ASSUME_SSE42
  37. #define FARMHASH_ASSUME_SSE42
  38. #endif
  39. #ifdef FARMHASH_ASSUME_AESNI
  40. #undef FARMHASH_ASSUME_AESNI
  41. #define FARMHASH_ASSUME_AESNI
  42. #endif
  43. #ifdef FARMHASH_ASSUME_AVX
  44. #undef FARMHASH_ASSUME_AVX
  45. #define FARMHASH_ASSUME_AVX
  46. #endif
  47. #if !defined(FARMHASH_CAN_USE_CXX11) && defined(LANG_CXX11)
  48. #define FARMHASH_CAN_USE_CXX11 1
  49. #else
  50. #undef FARMHASH_CAN_USE_CXX11
  51. #define FARMHASH_CAN_USE_CXX11 0
  52. #endif
  53. // FARMHASH PORTABILITY LAYER: Runtime error if misconfigured
  54. #ifndef FARMHASH_DIE_IF_MISCONFIGURED
  55. #define FARMHASH_DIE_IF_MISCONFIGURED do { *(char*)(len % 17) = 0; } while (0)
  56. #endif
  57. // FARMHASH PORTABILITY LAYER: "static inline" or similar
  58. #ifndef STATIC_INLINE
  59. #define STATIC_INLINE static inline
  60. #endif
  61. // FARMHASH PORTABILITY LAYER: LIKELY and UNLIKELY
  62. #if !defined(LIKELY)
  63. #if defined(FARMHASH_NO_BUILTIN_EXPECT) || !defined(HAVE_BUILTIN_EXPECT)
  64. #define LIKELY(x) (x)
  65. #else
  66. #define LIKELY(x) (__builtin_expect(!!(x), 1))
  67. #endif
  68. #endif
  69. #undef UNLIKELY
  70. #define UNLIKELY(x) !LIKELY(!(x))
  71. // FARMHASH PORTABILITY LAYER: endianness and byteswapping functions
  72. #ifdef WORDS_BIGENDIAN
  73. #undef FARMHASH_BIG_ENDIAN
  74. #define FARMHASH_BIG_ENDIAN 1
  75. #endif
  76. #if defined(FARMHASH_LITTLE_ENDIAN) && defined(FARMHASH_BIG_ENDIAN)
  77. #error
  78. #endif
  79. #if !defined(FARMHASH_LITTLE_ENDIAN) && !defined(FARMHASH_BIG_ENDIAN)
  80. #define FARMHASH_UNKNOWN_ENDIAN 1
  81. #endif
  82. #if !defined(bswap_32) || !defined(bswap_64)
  83. #undef bswap_32
  84. #undef bswap_64
  85. #if defined(HAVE_BUILTIN_BSWAP) || defined(__clang__) || \
  86. (defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || \
  87. __GNUC__ >= 5))
  88. // Easy case for bswap: no header file needed.
  89. #define bswap_32(x) __builtin_bswap32(x)
  90. #define bswap_64(x) __builtin_bswap64(x)
  91. #endif
  92. #endif
  93. #if defined(FARMHASH_UNKNOWN_ENDIAN) || !defined(bswap_64)
  94. #ifdef _MSC_VER
  95. #undef bswap_32
  96. #undef bswap_64
  97. #define bswap_32(x) _byteswap_ulong(x)
  98. #define bswap_64(x) _byteswap_uint64(x)
  99. #elif defined(__APPLE__)
  100. // Mac OS X / Darwin features
  101. #include <libkern/OSByteOrder.h>
  102. #undef bswap_32
  103. #undef bswap_64
  104. #define bswap_32(x) OSSwapInt32(x)
  105. #define bswap_64(x) OSSwapInt64(x)
  106. #elif defined(__sun) || defined(sun)
  107. #include <sys/byteorder.h>
  108. #undef bswap_32
  109. #undef bswap_64
  110. #define bswap_32(x) BSWAP_32(x)
  111. #define bswap_64(x) BSWAP_64(x)
  112. #elif defined(__FreeBSD__)
  113. #include <sys/endian.h>
  114. #undef bswap_32
  115. #undef bswap_64
  116. #define bswap_32(x) bswap32(x)
  117. #define bswap_64(x) bswap64(x)
  118. #elif defined(__OpenBSD__)
  119. #include <sys/types.h>
  120. #undef bswap_32
  121. #undef bswap_64
  122. #define bswap_32(x) swap32(x)
  123. #define bswap_64(x) swap64(x)
  124. #elif defined(__NetBSD__)
  125. #include <sys/types.h>
  126. #include <machine/bswap.h>
  127. #if defined(__BSWAP_RENAME) && !defined(__bswap_32)
  128. #undef bswap_32
  129. #undef bswap_64
  130. #define bswap_32(x) bswap32(x)
  131. #define bswap_64(x) bswap64(x)
  132. #endif
  133. #else
  134. #undef bswap_32
  135. #undef bswap_64
  136. #include <byteswap.h>
  137. #endif
  138. #ifdef WORDS_BIGENDIAN
  139. #define FARMHASH_BIG_ENDIAN 1
  140. #endif
  141. #endif
  142. #ifdef FARMHASH_BIG_ENDIAN
  143. #define uint32_in_expected_order(x) (bswap_32(x))
  144. #define uint64_in_expected_order(x) (bswap_64(x))
  145. #else
  146. #define uint32_in_expected_order(x) (x)
  147. #define uint64_in_expected_order(x) (x)
  148. #endif
  149. namespace NAMESPACE_FOR_HASH_FUNCTIONS {
  150. STATIC_INLINE uint64_t Fetch64(const char *p) {
  151. uint64_t result;
  152. memcpy(&result, p, sizeof(result));
  153. return uint64_in_expected_order(result);
  154. }
  155. STATIC_INLINE uint32_t Fetch32(const char *p) {
  156. uint32_t result;
  157. memcpy(&result, p, sizeof(result));
  158. return uint32_in_expected_order(result);
  159. }
  160. STATIC_INLINE uint32_t Bswap32(uint32_t val) { return bswap_32(val); }
  161. STATIC_INLINE uint64_t Bswap64(uint64_t val) { return bswap_64(val); }
  162. // FARMHASH PORTABILITY LAYER: bitwise rot
  163. STATIC_INLINE uint32_t BasicRotate32(uint32_t val, int shift) {
  164. // Avoid shifting by 32: doing so yields an undefined result.
  165. return shift == 0 ? val : ((val >> shift) | (val << (32 - shift)));
  166. }
  167. STATIC_INLINE uint64_t BasicRotate64(uint64_t val, int shift) {
  168. // Avoid shifting by 64: doing so yields an undefined result.
  169. return shift == 0 ? val : ((val >> shift) | (val << (64 - shift)));
  170. }
  171. #if defined(_MSC_VER) && defined(FARMHASH_ROTR)
  172. STATIC_INLINE uint32_t Rotate32(uint32_t val, int shift) {
  173. return sizeof(unsigned long) == sizeof(val) ?
  174. _lrotr(val, shift) :
  175. BasicRotate32(val, shift);
  176. }
  177. STATIC_INLINE uint64_t Rotate64(uint64_t val, int shift) {
  178. return sizeof(unsigned long) == sizeof(val) ?
  179. _lrotr(val, shift) :
  180. BasicRotate64(val, shift);
  181. }
  182. #else
  183. STATIC_INLINE uint32_t Rotate32(uint32_t val, int shift) {
  184. return BasicRotate32(val, shift);
  185. }
  186. STATIC_INLINE uint64_t Rotate64(uint64_t val, int shift) {
  187. return BasicRotate64(val, shift);
  188. }
  189. #endif
  190. } // namespace NAMESPACE_FOR_HASH_FUNCTIONS
  191. // FARMHASH PORTABILITY LAYER: debug mode or max speed?
  192. // One may use -DFARMHASH_DEBUG=1 or -DFARMHASH_DEBUG=0 to force the issue.
  193. #if !defined(FARMHASH_DEBUG) && (!defined(NDEBUG) || defined(_DEBUG))
  194. #define FARMHASH_DEBUG 1
  195. #endif
  196. #undef debug_mode
  197. #if FARMHASH_DEBUG
  198. #define debug_mode 1
  199. #else
  200. #define debug_mode 0
  201. #endif
  202. // PLATFORM-SPECIFIC FUNCTIONS AND MACROS
  203. // TODO: See https://stackoverflow.com/questions/11228855/header-files-for-simd-intrinsics
  204. #undef x86_64
  205. #if defined (__x86_64) || defined (__x86_64__)
  206. #define x86_64 1
  207. #else
  208. #define x86_64 0
  209. #endif
  210. #undef x86
  211. #if defined(__i386__) || defined(__i386) || defined(__X86__)
  212. #define x86 1
  213. #else
  214. #define x86 x86_64
  215. #endif
  216. #if !defined(is_64bit)
  217. #define is_64bit (x86_64 || (sizeof(void*) == 8))
  218. #endif
  219. #undef can_use_ssse3
  220. #if defined(__SSSE3__) || defined(FARMHASH_ASSUME_SSSE3)
  221. # ifdef __GNUC__
  222. # define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
  223. # if GCC_VERSION > 403
  224. # include <immintrin.h>
  225. # define can_use_ssse3 1
  226. # else
  227. # define can_use_ssse3 0
  228. # endif
  229. # else
  230. # include <immintrin.h>
  231. # define can_use_ssse3 1
  232. # endif
  233. // Now we can use _mm_hsub_epi16 and so on.
  234. #else
  235. # define can_use_ssse3 0
  236. #endif
  237. #undef can_use_sse41
  238. #if can_use_ssse3 && (defined(__SSE4_1__) || defined(FARMHASH_ASSUME_SSE41))
  239. #include <immintrin.h>
  240. #define can_use_sse41 1
  241. // Now we can use _mm_insert_epi64 and so on.
  242. #else
  243. #define can_use_sse41 0
  244. #endif
  245. #undef can_use_sse42
  246. #if defined(__SSE4_2__) || defined(FARMHASH_ASSUME_SSE42)
  247. #include <nmmintrin.h>
  248. #define can_use_sse42 1
  249. // Now we can use _mm_crc32_u{32,16,8}. And on 64-bit platforms, _mm_crc32_u64.
  250. #else
  251. #define can_use_sse42 0
  252. #endif
  253. #undef can_use_aesni
  254. #if defined(__AES__) || defined(FARMHASH_ASSUME_AESNI)
  255. #include <wmmintrin.h>
  256. #define can_use_aesni 1
  257. // Now we can use _mm_aesimc_si128 and so on.
  258. #else
  259. #define can_use_aesni 0
  260. #endif
  261. #undef can_use_avx
  262. #if defined(__AVX__) || defined(FARMHASH_ASSUME_AVX)
  263. #include <immintrin.h>
  264. #define can_use_avx 1
  265. #else
  266. #define can_use_avx 0
  267. #endif
  268. #if can_use_ssse3 || can_use_sse41 || can_use_sse42 || can_use_aesni || can_use_avx
  269. STATIC_INLINE __m128i Fetch128(const char* s) {
  270. return _mm_loadu_si128(reinterpret_cast<const __m128i*>(s));
  271. }
  272. #endif
  273. // Building blocks for hash functions
  274. // std::swap() was in <algorithm> but is in <utility> from C++11 on.
  275. #if !FARMHASH_CAN_USE_CXX11
  276. #include <algorithm>
  277. #endif
  278. #undef PERMUTE3
  279. #define PERMUTE3(a, b, c) do { std::swap(a, b); std::swap(a, c); } while (0)
  280. namespace NAMESPACE_FOR_HASH_FUNCTIONS {
  281. // Some primes between 2^63 and 2^64 for various uses.
  282. static const uint64_t k0 = 0xc3a5c85c97cb3127ULL;
  283. static const uint64_t k1 = 0xb492b66fbe98f273ULL;
  284. static const uint64_t k2 = 0x9ae16a3b2f90404fULL;
  285. // Magic numbers for 32-bit hashing. Copied from Murmur3.
  286. static const uint32_t c1 = 0xcc9e2d51;
  287. static const uint32_t c2 = 0x1b873593;
  288. // A 32-bit to 32-bit integer hash copied from Murmur3.
  289. STATIC_INLINE uint32_t fmix(uint32_t h)
  290. {
  291. h ^= h >> 16;
  292. h *= 0x85ebca6b;
  293. h ^= h >> 13;
  294. h *= 0xc2b2ae35;
  295. h ^= h >> 16;
  296. return h;
  297. }
  298. STATIC_INLINE uint32_t Mur(uint32_t a, uint32_t h) {
  299. // Helper from Murmur3 for combining two 32-bit values.
  300. a *= c1;
  301. a = Rotate32(a, 17);
  302. a *= c2;
  303. h ^= a;
  304. h = Rotate32(h, 19);
  305. return h * 5 + 0xe6546b64;
  306. }
  307. template <typename T> STATIC_INLINE T DebugTweak(T x) {
  308. if (debug_mode) {
  309. if (sizeof(x) == 4) {
  310. x = ~Bswap32(x * c1);
  311. } else {
  312. x = ~Bswap64(x * k1);
  313. }
  314. }
  315. return x;
  316. }
  317. template <> uint128_t DebugTweak(uint128_t x) {
  318. if (debug_mode) {
  319. uint64_t y = DebugTweak(Uint128Low64(x));
  320. uint64_t z = DebugTweak(Uint128High64(x));
  321. y += z;
  322. z += y;
  323. x = Uint128(y, z * k1);
  324. }
  325. return x;
  326. }
  327. } // namespace NAMESPACE_FOR_HASH_FUNCTIONS
  328. using namespace std;
  329. using namespace NAMESPACE_FOR_HASH_FUNCTIONS;
  330. namespace farmhashna {
  331. #undef Fetch
  332. #define Fetch Fetch64
  333. #undef Rotate
  334. #define Rotate Rotate64
  335. #undef Bswap
  336. #define Bswap Bswap64
  337. STATIC_INLINE uint64_t ShiftMix(uint64_t val) {
  338. return val ^ (val >> 47);
  339. }
  340. STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v) {
  341. return Hash128to64(Uint128(u, v));
  342. }
  343. STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
  344. // Murmur-inspired hashing.
  345. uint64_t a = (u ^ v) * mul;
  346. a ^= (a >> 47);
  347. uint64_t b = (v ^ a) * mul;
  348. b ^= (b >> 47);
  349. b *= mul;
  350. return b;
  351. }
  352. STATIC_INLINE uint64_t HashLen0to16(const char *s, size_t len) {
  353. if (len >= 8) {
  354. uint64_t mul = k2 + len * 2;
  355. uint64_t a = Fetch(s) + k2;
  356. uint64_t b = Fetch(s + len - 8);
  357. uint64_t c = Rotate(b, 37) * mul + a;
  358. uint64_t d = (Rotate(a, 25) + b) * mul;
  359. return HashLen16(c, d, mul);
  360. }
  361. if (len >= 4) {
  362. uint64_t mul = k2 + len * 2;
  363. uint64_t a = Fetch32(s);
  364. return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
  365. }
  366. if (len > 0) {
  367. uint8_t a = s[0];
  368. uint8_t b = s[len >> 1];
  369. uint8_t c = s[len - 1];
  370. uint32_t y = static_cast<uint32_t>(a) + (static_cast<uint32_t>(b) << 8);
  371. uint32_t z = len + (static_cast<uint32_t>(c) << 2);
  372. return ShiftMix(y * k2 ^ z * k0) * k2;
  373. }
  374. return k2;
  375. }
  376. // This probably works well for 16-byte strings as well, but it may be overkill
  377. // in that case.
  378. STATIC_INLINE uint64_t HashLen17to32(const char *s, size_t len) {
  379. uint64_t mul = k2 + len * 2;
  380. uint64_t a = Fetch(s) * k1;
  381. uint64_t b = Fetch(s + 8);
  382. uint64_t c = Fetch(s + len - 8) * mul;
  383. uint64_t d = Fetch(s + len - 16) * k2;
  384. return HashLen16(Rotate(a + b, 43) + Rotate(c, 30) + d,
  385. a + Rotate(b + k2, 18) + c, mul);
  386. }
  387. // Return a 16-byte hash for 48 bytes. Quick and dirty.
  388. // Callers do best to use "random-looking" values for a and b.
  389. STATIC_INLINE pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
  390. uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) {
  391. a += w;
  392. b = Rotate(b + a + z, 21);
  393. uint64_t c = a;
  394. a += x;
  395. a += y;
  396. b += Rotate(a, 44);
  397. return make_pair(a + z, b + c);
  398. }
  399. // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty.
  400. STATIC_INLINE pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
  401. const char* s, uint64_t a, uint64_t b) {
  402. return WeakHashLen32WithSeeds(Fetch(s),
  403. Fetch(s + 8),
  404. Fetch(s + 16),
  405. Fetch(s + 24),
  406. a,
  407. b);
  408. }
  409. // Return an 8-byte hash for 33 to 64 bytes.
  410. STATIC_INLINE uint64_t HashLen33to64(const char *s, size_t len) {
  411. uint64_t mul = k2 + len * 2;
  412. uint64_t a = Fetch(s) * k2;
  413. uint64_t b = Fetch(s + 8);
  414. uint64_t c = Fetch(s + len - 8) * mul;
  415. uint64_t d = Fetch(s + len - 16) * k2;
  416. uint64_t y = Rotate(a + b, 43) + Rotate(c, 30) + d;
  417. uint64_t z = HashLen16(y, a + Rotate(b + k2, 18) + c, mul);
  418. uint64_t e = Fetch(s + 16) * mul;
  419. uint64_t f = Fetch(s + 24);
  420. uint64_t g = (y + Fetch(s + len - 32)) * mul;
  421. uint64_t h = (z + Fetch(s + len - 24)) * mul;
  422. return HashLen16(Rotate(e + f, 43) + Rotate(g, 30) + h,
  423. e + Rotate(f + a, 18) + g, mul);
  424. }
  425. uint64_t Hash64(const char *s, size_t len) {
  426. const uint64_t seed = 81;
  427. if (len <= 32) {
  428. if (len <= 16) {
  429. return HashLen0to16(s, len);
  430. } else {
  431. return HashLen17to32(s, len);
  432. }
  433. } else if (len <= 64) {
  434. return HashLen33to64(s, len);
  435. }
  436. // For strings over 64 bytes we loop. Internal state consists of
  437. // 56 bytes: v, w, x, y, and z.
  438. uint64_t x = seed;
  439. uint64_t y = seed * k1 + 113;
  440. uint64_t z = ShiftMix(y * k2 + 113) * k2;
  441. pair<uint64_t, uint64_t> v = make_pair(0, 0);
  442. pair<uint64_t, uint64_t> w = make_pair(0, 0);
  443. x = x * k2 + Fetch(s);
  444. // Set end so that after the loop we have 1 to 64 bytes left to process.
  445. const char* end = s + ((len - 1) / 64) * 64;
  446. const char* last64 = end + ((len - 1) & 63) - 63;
  447. assert(s + len - 64 == last64);
  448. do {
  449. x = Rotate(x + y + v.first + Fetch(s + 8), 37) * k1;
  450. y = Rotate(y + v.second + Fetch(s + 48), 42) * k1;
  451. x ^= w.second;
  452. y += v.first + Fetch(s + 40);
  453. z = Rotate(z + w.first, 33) * k1;
  454. v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
  455. w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16));
  456. std::swap(z, x);
  457. s += 64;
  458. } while (s != end);
  459. uint64_t mul = k1 + ((z & 0xff) << 1);
  460. // Make s point to the last 64 bytes of input.
  461. s = last64;
  462. w.first += ((len - 1) & 63);
  463. v.first += w.first;
  464. w.first += v.first;
  465. x = Rotate(x + y + v.first + Fetch(s + 8), 37) * mul;
  466. y = Rotate(y + v.second + Fetch(s + 48), 42) * mul;
  467. x ^= w.second * 9;
  468. y += v.first * 9 + Fetch(s + 40);
  469. z = Rotate(z + w.first, 33) * mul;
  470. v = WeakHashLen32WithSeeds(s, v.second * mul, x + w.first);
  471. w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16));
  472. std::swap(z, x);
  473. return HashLen16(HashLen16(v.first, w.first, mul) + ShiftMix(y) * k0 + z,
  474. HashLen16(v.second, w.second, mul) + x,
  475. mul);
  476. }
  477. uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1);
  478. uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) {
  479. return Hash64WithSeeds(s, len, k2, seed);
  480. }
  481. uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) {
  482. return HashLen16(Hash64(s, len) - seed0, seed1);
  483. }
  484. } // namespace farmhashna
  485. namespace farmhashuo {
  486. #undef Fetch
  487. #define Fetch Fetch64
  488. #undef Rotate
  489. #define Rotate Rotate64
  490. STATIC_INLINE uint64_t H(uint64_t x, uint64_t y, uint64_t mul, int r) {
  491. uint64_t a = (x ^ y) * mul;
  492. a ^= (a >> 47);
  493. uint64_t b = (y ^ a) * mul;
  494. return Rotate(b, r) * mul;
  495. }
  496. uint64_t Hash64WithSeeds(const char *s, size_t len,
  497. uint64_t seed0, uint64_t seed1) {
  498. if (len <= 64) {
  499. return farmhashna::Hash64WithSeeds(s, len, seed0, seed1);
  500. }
  501. // For strings over 64 bytes we loop. Internal state consists of
  502. // 64 bytes: u, v, w, x, y, and z.
  503. uint64_t x = seed0;
  504. uint64_t y = seed1 * k2 + 113;
  505. uint64_t z = farmhashna::ShiftMix(y * k2) * k2;
  506. pair<uint64_t, uint64_t> v = make_pair(seed0, seed1);
  507. pair<uint64_t, uint64_t> w = make_pair(0, 0);
  508. uint64_t u = x - z;
  509. x *= k2;
  510. uint64_t mul = k2 + (u & 0x82);
  511. // Set end so that after the loop we have 1 to 64 bytes left to process.
  512. const char* end = s + ((len - 1) / 64) * 64;
  513. const char* last64 = end + ((len - 1) & 63) - 63;
  514. assert(s + len - 64 == last64);
  515. do {
  516. uint64_t a0 = Fetch(s);
  517. uint64_t a1 = Fetch(s + 8);
  518. uint64_t a2 = Fetch(s + 16);
  519. uint64_t a3 = Fetch(s + 24);
  520. uint64_t a4 = Fetch(s + 32);
  521. uint64_t a5 = Fetch(s + 40);
  522. uint64_t a6 = Fetch(s + 48);
  523. uint64_t a7 = Fetch(s + 56);
  524. x += a0 + a1;
  525. y += a2;
  526. z += a3;
  527. v.first += a4;
  528. v.second += a5 + a1;
  529. w.first += a6;
  530. w.second += a7;
  531. x = Rotate(x, 26);
  532. x *= 9;
  533. y = Rotate(y, 29);
  534. z *= mul;
  535. v.first = Rotate(v.first, 33);
  536. v.second = Rotate(v.second, 30);
  537. w.first ^= x;
  538. w.first *= 9;
  539. z = Rotate(z, 32);
  540. z += w.second;
  541. w.second += z;
  542. z *= 9;
  543. std::swap(u, y);
  544. z += a0 + a6;
  545. v.first += a2;
  546. v.second += a3;
  547. w.first += a4;
  548. w.second += a5 + a6;
  549. x += a1;
  550. y += a7;
  551. y += v.first;
  552. v.first += x - y;
  553. v.second += w.first;
  554. w.first += v.second;
  555. w.second += x - y;
  556. x += w.second;
  557. w.second = Rotate(w.second, 34);
  558. std::swap(u, z);
  559. s += 64;
  560. } while (s != end);
  561. // Make s point to the last 64 bytes of input.
  562. s = last64;
  563. u *= 9;
  564. v.second = Rotate(v.second, 28);
  565. v.first = Rotate(v.first, 20);
  566. w.first += ((len - 1) & 63);
  567. u += y;
  568. y += u;
  569. x = Rotate(y - x + v.first + Fetch(s + 8), 37) * mul;
  570. y = Rotate(y ^ v.second ^ Fetch(s + 48), 42) * mul;
  571. x ^= w.second * 9;
  572. y += v.first + Fetch(s + 40);
  573. z = Rotate(z + w.first, 33) * mul;
  574. v = farmhashna::WeakHashLen32WithSeeds(s, v.second * mul, x + w.first);
  575. w = farmhashna::WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16));
  576. return H(farmhashna::HashLen16(v.first + x, w.first ^ y, mul) + z - u,
  577. H(v.second + y, w.second + z, k2, 30) ^ x,
  578. k2,
  579. 31);
  580. }
  581. uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) {
  582. return len <= 64 ? farmhashna::Hash64WithSeed(s, len, seed) :
  583. Hash64WithSeeds(s, len, 0, seed);
  584. }
  585. uint64_t Hash64(const char *s, size_t len) {
  586. return len <= 64 ? farmhashna::Hash64(s, len) :
  587. Hash64WithSeeds(s, len, 81, 0);
  588. }
  589. } // namespace farmhashuo
  590. namespace farmhashxo {
  591. #undef Fetch
  592. #define Fetch Fetch64
  593. #undef Rotate
  594. #define Rotate Rotate64
  595. STATIC_INLINE uint64_t H32(const char *s, size_t len, uint64_t mul,
  596. uint64_t seed0 = 0, uint64_t seed1 = 0) {
  597. uint64_t a = Fetch(s) * k1;
  598. uint64_t b = Fetch(s + 8);
  599. uint64_t c = Fetch(s + len - 8) * mul;
  600. uint64_t d = Fetch(s + len - 16) * k2;
  601. uint64_t u = Rotate(a + b, 43) + Rotate(c, 30) + d + seed0;
  602. uint64_t v = a + Rotate(b + k2, 18) + c + seed1;
  603. a = farmhashna::ShiftMix((u ^ v) * mul);
  604. b = farmhashna::ShiftMix((v ^ a) * mul);
  605. return b;
  606. }
  607. // Return an 8-byte hash for 33 to 64 bytes.
  608. STATIC_INLINE uint64_t HashLen33to64(const char *s, size_t len) {
  609. uint64_t mul0 = k2 - 30;
  610. uint64_t mul1 = k2 - 30 + 2 * len;
  611. uint64_t h0 = H32(s, 32, mul0);
  612. uint64_t h1 = H32(s + len - 32, 32, mul1);
  613. return ((h1 * mul1) + h0) * mul1;
  614. }
  615. // Return an 8-byte hash for 65 to 96 bytes.
  616. STATIC_INLINE uint64_t HashLen65to96(const char *s, size_t len) {
  617. uint64_t mul0 = k2 - 114;
  618. uint64_t mul1 = k2 - 114 + 2 * len;
  619. uint64_t h0 = H32(s, 32, mul0);
  620. uint64_t h1 = H32(s + 32, 32, mul1);
  621. uint64_t h2 = H32(s + len - 32, 32, mul1, h0, h1);
  622. return (h2 * 9 + (h0 >> 17) + (h1 >> 21)) * mul1;
  623. }
  624. uint64_t Hash64(const char *s, size_t len) {
  625. if (len <= 32) {
  626. if (len <= 16) {
  627. return farmhashna::HashLen0to16(s, len);
  628. } else {
  629. return farmhashna::HashLen17to32(s, len);
  630. }
  631. } else if (len <= 64) {
  632. return HashLen33to64(s, len);
  633. } else if (len <= 96) {
  634. return HashLen65to96(s, len);
  635. } else if (len <= 256) {
  636. return farmhashna::Hash64(s, len);
  637. } else {
  638. return farmhashuo::Hash64(s, len);
  639. }
  640. }
  641. uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) {
  642. return farmhashuo::Hash64WithSeeds(s, len, seed0, seed1);
  643. }
  644. uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) {
  645. return farmhashuo::Hash64WithSeed(s, len, seed);
  646. }
  647. } // namespace farmhashxo
  648. namespace farmhashte {
  649. #if !can_use_sse41 || !x86_64
  650. uint64_t Hash64(const char *s, size_t len) {
  651. FARMHASH_DIE_IF_MISCONFIGURED;
  652. return s == NULL ? 0 : len;
  653. }
  654. uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) {
  655. FARMHASH_DIE_IF_MISCONFIGURED;
  656. return seed + Hash64(s, len);
  657. }
  658. uint64_t Hash64WithSeeds(const char *s, size_t len,
  659. uint64_t seed0, uint64_t seed1) {
  660. FARMHASH_DIE_IF_MISCONFIGURED;
  661. return seed0 + seed1 + Hash64(s, len);
  662. }
  663. #else
  664. #undef Fetch
  665. #define Fetch Fetch64
  666. #undef Rotate
  667. #define Rotate Rotate64
  668. #undef Bswap
  669. #define Bswap Bswap64
  670. // Helpers for data-parallel operations (1x 128 bits or 2x 64 or 4x 32).
  671. STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi64(x, y); }
  672. STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); }
  673. STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); }
  674. STATIC_INLINE __m128i Shuf(__m128i x, __m128i y) { return _mm_shuffle_epi8(y, x); }
  675. // Requires n >= 256. Requires SSE4.1. Should be slightly faster if the
  676. // compiler uses AVX instructions (e.g., use the -mavx flag with GCC).
  677. STATIC_INLINE uint64_t Hash64Long(const char* s, size_t n,
  678. uint64_t seed0, uint64_t seed1) {
  679. const __m128i kShuf =
  680. _mm_set_epi8(4, 11, 10, 5, 8, 15, 6, 9, 12, 2, 14, 13, 0, 7, 3, 1);
  681. const __m128i kMult =
  682. _mm_set_epi8(0xbd, 0xd6, 0x33, 0x39, 0x45, 0x54, 0xfa, 0x03,
  683. 0x34, 0x3e, 0x33, 0xed, 0xcc, 0x9e, 0x2d, 0x51);
  684. uint64_t seed2 = (seed0 + 113) * (seed1 + 9);
  685. uint64_t seed3 = (Rotate(seed0, 23) + 27) * (Rotate(seed1, 30) + 111);
  686. __m128i d0 = _mm_cvtsi64_si128(seed0);
  687. __m128i d1 = _mm_cvtsi64_si128(seed1);
  688. __m128i d2 = Shuf(kShuf, d0);
  689. __m128i d3 = Shuf(kShuf, d1);
  690. __m128i d4 = Xor(d0, d1);
  691. __m128i d5 = Xor(d1, d2);
  692. __m128i d6 = Xor(d2, d4);
  693. __m128i d7 = _mm_set1_epi32(seed2 >> 32);
  694. __m128i d8 = Mul(kMult, d2);
  695. __m128i d9 = _mm_set1_epi32(seed3 >> 32);
  696. __m128i d10 = _mm_set1_epi32(seed3);
  697. __m128i d11 = Add(d2, _mm_set1_epi32(seed2));
  698. const char* end = s + (n & ~static_cast<size_t>(255));
  699. do {
  700. __m128i z;
  701. z = Fetch128(s);
  702. d0 = Add(d0, z);
  703. d1 = Shuf(kShuf, d1);
  704. d2 = Xor(d2, d0);
  705. d4 = Xor(d4, z);
  706. d4 = Xor(d4, d1);
  707. std::swap(d0, d6);
  708. z = Fetch128(s + 16);
  709. d5 = Add(d5, z);
  710. d6 = Shuf(kShuf, d6);
  711. d8 = Shuf(kShuf, d8);
  712. d7 = Xor(d7, d5);
  713. d0 = Xor(d0, z);
  714. d0 = Xor(d0, d6);
  715. std::swap(d5, d11);
  716. z = Fetch128(s + 32);
  717. d1 = Add(d1, z);
  718. d2 = Shuf(kShuf, d2);
  719. d4 = Shuf(kShuf, d4);
  720. d5 = Xor(d5, z);
  721. d5 = Xor(d5, d2);
  722. std::swap(d10, d4);
  723. z = Fetch128(s + 48);
  724. d6 = Add(d6, z);
  725. d7 = Shuf(kShuf, d7);
  726. d0 = Shuf(kShuf, d0);
  727. d8 = Xor(d8, d6);
  728. d1 = Xor(d1, z);
  729. d1 = Add(d1, d7);
  730. z = Fetch128(s + 64);
  731. d2 = Add(d2, z);
  732. d5 = Shuf(kShuf, d5);
  733. d4 = Add(d4, d2);
  734. d6 = Xor(d6, z);
  735. d6 = Xor(d6, d11);
  736. std::swap(d8, d2);
  737. z = Fetch128(s + 80);
  738. d7 = Xor(d7, z);
  739. d8 = Shuf(kShuf, d8);
  740. d1 = Shuf(kShuf, d1);
  741. d0 = Add(d0, d7);
  742. d2 = Add(d2, z);
  743. d2 = Add(d2, d8);
  744. std::swap(d1, d7);
  745. z = Fetch128(s + 96);
  746. d4 = Shuf(kShuf, d4);
  747. d6 = Shuf(kShuf, d6);
  748. d8 = Mul(kMult, d8);
  749. d5 = Xor(d5, d11);
  750. d7 = Xor(d7, z);
  751. d7 = Add(d7, d4);
  752. std::swap(d6, d0);
  753. z = Fetch128(s + 112);
  754. d8 = Add(d8, z);
  755. d0 = Shuf(kShuf, d0);
  756. d2 = Shuf(kShuf, d2);
  757. d1 = Xor(d1, d8);
  758. d10 = Xor(d10, z);
  759. d10 = Xor(d10, d0);
  760. std::swap(d11, d5);
  761. z = Fetch128(s + 128);
  762. d4 = Add(d4, z);
  763. d5 = Shuf(kShuf, d5);
  764. d7 = Shuf(kShuf, d7);
  765. d6 = Add(d6, d4);
  766. d8 = Xor(d8, z);
  767. d8 = Xor(d8, d5);
  768. std::swap(d4, d10);
  769. z = Fetch128(s + 144);
  770. d0 = Add(d0, z);
  771. d1 = Shuf(kShuf, d1);
  772. d2 = Add(d2, d0);
  773. d4 = Xor(d4, z);
  774. d4 = Xor(d4, d1);
  775. z = Fetch128(s + 160);
  776. d5 = Add(d5, z);
  777. d6 = Shuf(kShuf, d6);
  778. d8 = Shuf(kShuf, d8);
  779. d7 = Xor(d7, d5);
  780. d0 = Xor(d0, z);
  781. d0 = Xor(d0, d6);
  782. std::swap(d2, d8);
  783. z = Fetch128(s + 176);
  784. d1 = Add(d1, z);
  785. d2 = Shuf(kShuf, d2);
  786. d4 = Shuf(kShuf, d4);
  787. d5 = Mul(kMult, d5);
  788. d5 = Xor(d5, z);
  789. d5 = Xor(d5, d2);
  790. std::swap(d7, d1);
  791. z = Fetch128(s + 192);
  792. d6 = Add(d6, z);
  793. d7 = Shuf(kShuf, d7);
  794. d0 = Shuf(kShuf, d0);
  795. d8 = Add(d8, d6);
  796. d1 = Xor(d1, z);
  797. d1 = Xor(d1, d7);
  798. std::swap(d0, d6);
  799. z = Fetch128(s + 208);
  800. d2 = Add(d2, z);
  801. d5 = Shuf(kShuf, d5);
  802. d4 = Xor(d4, d2);
  803. d6 = Xor(d6, z);
  804. d6 = Xor(d6, d9);
  805. std::swap(d5, d11);
  806. z = Fetch128(s + 224);
  807. d7 = Add(d7, z);
  808. d8 = Shuf(kShuf, d8);
  809. d1 = Shuf(kShuf, d1);
  810. d0 = Xor(d0, d7);
  811. d2 = Xor(d2, z);
  812. d2 = Xor(d2, d8);
  813. std::swap(d10, d4);
  814. z = Fetch128(s + 240);
  815. d3 = Add(d3, z);
  816. d4 = Shuf(kShuf, d4);
  817. d6 = Shuf(kShuf, d6);
  818. d7 = Mul(kMult, d7);
  819. d5 = Add(d5, d3);
  820. d7 = Xor(d7, z);
  821. d7 = Xor(d7, d4);
  822. std::swap(d3, d9);
  823. s += 256;
  824. } while (s != end);
  825. d6 = Add(Mul(kMult, d6), _mm_cvtsi64_si128(n));
  826. if (n % 256 != 0) {
  827. d7 = Add(_mm_shuffle_epi32(d8, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0)), d7);
  828. d8 = Add(Mul(kMult, d8), _mm_cvtsi64_si128(farmhashxo::Hash64(s, n % 256)));
  829. }
  830. __m128i t[8];
  831. d0 = Mul(kMult, Shuf(kShuf, Mul(kMult, d0)));
  832. d3 = Mul(kMult, Shuf(kShuf, Mul(kMult, d3)));
  833. d9 = Mul(kMult, Shuf(kShuf, Mul(kMult, d9)));
  834. d1 = Mul(kMult, Shuf(kShuf, Mul(kMult, d1)));
  835. d0 = Add(d11, d0);
  836. d3 = Xor(d7, d3);
  837. d9 = Add(d8, d9);
  838. d1 = Add(d10, d1);
  839. d4 = Add(d3, d4);
  840. d5 = Add(d9, d5);
  841. d6 = Xor(d1, d6);
  842. d2 = Add(d0, d2);
  843. t[0] = d0;
  844. t[1] = d3;
  845. t[2] = d9;
  846. t[3] = d1;
  847. t[4] = d4;
  848. t[5] = d5;
  849. t[6] = d6;
  850. t[7] = d2;
  851. return farmhashxo::Hash64(reinterpret_cast<const char*>(t), sizeof(t));
  852. }
  853. uint64_t Hash64(const char *s, size_t len) {
  854. // Empirically, farmhashxo seems faster until length 512.
  855. return len >= 512 ? Hash64Long(s, len, k2, k1) : farmhashxo::Hash64(s, len);
  856. }
  857. uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) {
  858. return len >= 512 ? Hash64Long(s, len, k1, seed) :
  859. farmhashxo::Hash64WithSeed(s, len, seed);
  860. }
  861. uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) {
  862. return len >= 512 ? Hash64Long(s, len, seed0, seed1) :
  863. farmhashxo::Hash64WithSeeds(s, len, seed0, seed1);
  864. }
  865. #endif
  866. } // namespace farmhashte
  867. namespace farmhashnt {
  868. // Note that this will lead to different hash values to the SSE4.1 variant,
  869. // thus not portable and not recommended. Disabled in SMHasher
  870. #if !can_use_sse41 || !x86_64
  871. uint32_t Hash32(const char *s, size_t len) {
  872. FARMHASH_DIE_IF_MISCONFIGURED;
  873. return s == NULL ? 0 : len;
  874. }
  875. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  876. FARMHASH_DIE_IF_MISCONFIGURED;
  877. return seed + Hash32(s, len);
  878. }
  879. #else
  880. uint32_t Hash32(const char *s, size_t len) {
  881. return static_cast<uint32_t>(farmhashte::Hash64(s, len));
  882. }
  883. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  884. return static_cast<uint32_t>(farmhashte::Hash64WithSeed(s, len, seed));
  885. }
  886. #endif
  887. } // namespace farmhashnt
  888. namespace farmhashmk {
  889. #undef Fetch
  890. #define Fetch Fetch32
  891. #undef Rotate
  892. #define Rotate Rotate32
  893. #undef Bswap
  894. #define Bswap Bswap32
  895. STATIC_INLINE uint32_t Hash32Len13to24(const char *s, size_t len, uint32_t seed = 0) {
  896. uint32_t a = Fetch(s - 4 + (len >> 1));
  897. uint32_t b = Fetch(s + 4);
  898. uint32_t c = Fetch(s + len - 8);
  899. uint32_t d = Fetch(s + (len >> 1));
  900. uint32_t e = Fetch(s);
  901. uint32_t f = Fetch(s + len - 4);
  902. uint32_t h = d * c1 + len + seed;
  903. a = Rotate(a, 12) + f;
  904. h = Mur(c, h) + a;
  905. a = Rotate(a, 3) + c;
  906. h = Mur(e, h) + a;
  907. a = Rotate(a + f, 12) + d;
  908. h = Mur(b ^ seed, h) + a;
  909. return fmix(h);
  910. }
  911. STATIC_INLINE uint32_t Hash32Len0to4(const char *s, size_t len, uint32_t seed = 0) {
  912. uint32_t b = seed;
  913. uint32_t c = 9;
  914. for (size_t i = 0; i < len; i++) {
  915. signed char v = s[i];
  916. b = b * c1 + v;
  917. c ^= b;
  918. }
  919. return fmix(Mur(b, Mur(len, c)));
  920. }
  921. STATIC_INLINE uint32_t Hash32Len5to12(const char *s, size_t len, uint32_t seed = 0) {
  922. uint32_t a = len, b = len * 5, c = 9, d = b + seed;
  923. a += Fetch(s);
  924. b += Fetch(s + len - 4);
  925. c += Fetch(s + ((len >> 1) & 4));
  926. return fmix(seed ^ Mur(c, Mur(b, Mur(a, d))));
  927. }
  928. uint32_t Hash32(const char *s, size_t len) {
  929. if (len <= 24) {
  930. return len <= 12 ?
  931. (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) :
  932. Hash32Len13to24(s, len);
  933. }
  934. // len > 24
  935. uint32_t h = len, g = c1 * len, f = g;
  936. uint32_t a0 = Rotate(Fetch(s + len - 4) * c1, 17) * c2;
  937. uint32_t a1 = Rotate(Fetch(s + len - 8) * c1, 17) * c2;
  938. uint32_t a2 = Rotate(Fetch(s + len - 16) * c1, 17) * c2;
  939. uint32_t a3 = Rotate(Fetch(s + len - 12) * c1, 17) * c2;
  940. uint32_t a4 = Rotate(Fetch(s + len - 20) * c1, 17) * c2;
  941. h ^= a0;
  942. h = Rotate(h, 19);
  943. h = h * 5 + 0xe6546b64;
  944. h ^= a2;
  945. h = Rotate(h, 19);
  946. h = h * 5 + 0xe6546b64;
  947. g ^= a1;
  948. g = Rotate(g, 19);
  949. g = g * 5 + 0xe6546b64;
  950. g ^= a3;
  951. g = Rotate(g, 19);
  952. g = g * 5 + 0xe6546b64;
  953. f += a4;
  954. f = Rotate(f, 19) + 113;
  955. size_t iters = (len - 1) / 20;
  956. do {
  957. uint32_t a = Fetch(s);
  958. uint32_t b = Fetch(s + 4);
  959. uint32_t c = Fetch(s + 8);
  960. uint32_t d = Fetch(s + 12);
  961. uint32_t e = Fetch(s + 16);
  962. h += a;
  963. g += b;
  964. f += c;
  965. h = Mur(d, h) + e;
  966. g = Mur(c, g) + a;
  967. f = Mur(b + e * c1, f) + d;
  968. f += g;
  969. g += f;
  970. s += 20;
  971. } while (--iters != 0);
  972. g = Rotate(g, 11) * c1;
  973. g = Rotate(g, 17) * c1;
  974. f = Rotate(f, 11) * c1;
  975. f = Rotate(f, 17) * c1;
  976. h = Rotate(h + g, 19);
  977. h = h * 5 + 0xe6546b64;
  978. h = Rotate(h, 17) * c1;
  979. h = Rotate(h + f, 19);
  980. h = h * 5 + 0xe6546b64;
  981. h = Rotate(h, 17) * c1;
  982. return h;
  983. }
  984. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  985. if (len <= 24) {
  986. if (len >= 13) return Hash32Len13to24(s, len, seed * c1);
  987. else if (len >= 5) return Hash32Len5to12(s, len, seed);
  988. else return Hash32Len0to4(s, len, seed);
  989. }
  990. uint32_t h = Hash32Len13to24(s, 24, seed ^ len);
  991. return Mur(Hash32(s + 24, len - 24) + seed, h);
  992. }
  993. } // namespace farmhashmk
  994. namespace farmhashsu {
  995. #if !can_use_sse42 || !can_use_aesni
  996. uint32_t Hash32(const char *s, size_t len) {
  997. FARMHASH_DIE_IF_MISCONFIGURED;
  998. return s == NULL ? 0 : len;
  999. }
  1000. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  1001. FARMHASH_DIE_IF_MISCONFIGURED;
  1002. return seed + Hash32(s, len);
  1003. }
  1004. #else
  1005. #undef Fetch
  1006. #define Fetch Fetch32
  1007. #undef Rotate
  1008. #define Rotate Rotate32
  1009. #undef Bswap
  1010. #define Bswap Bswap32
  1011. // Helpers for data-parallel operations (4x 32-bits).
  1012. STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi32(x, y); }
  1013. STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); }
  1014. STATIC_INLINE __m128i Or(__m128i x, __m128i y) { return _mm_or_si128(x, y); }
  1015. STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); }
  1016. STATIC_INLINE __m128i Mul5(__m128i x) { return Add(x, _mm_slli_epi32(x, 2)); }
  1017. STATIC_INLINE __m128i RotateLeft(__m128i x, int c) {
  1018. return Or(_mm_slli_epi32(x, c),
  1019. _mm_srli_epi32(x, 32 - c));
  1020. }
  1021. STATIC_INLINE __m128i Rol17(__m128i x) { return RotateLeft(x, 17); }
  1022. STATIC_INLINE __m128i Rol19(__m128i x) { return RotateLeft(x, 19); }
  1023. STATIC_INLINE __m128i Shuffle0321(__m128i x) {
  1024. return _mm_shuffle_epi32(x, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0));
  1025. }
  1026. uint32_t Hash32(const char *s, size_t len) {
  1027. const uint32_t seed = 81;
  1028. if (len <= 24) {
  1029. return len <= 12 ?
  1030. (len <= 4 ?
  1031. farmhashmk::Hash32Len0to4(s, len) :
  1032. farmhashmk::Hash32Len5to12(s, len)) :
  1033. farmhashmk::Hash32Len13to24(s, len);
  1034. }
  1035. if (len < 40) {
  1036. uint32_t a = len, b = seed * c2, c = a + b;
  1037. a += Fetch(s + len - 4);
  1038. b += Fetch(s + len - 20);
  1039. c += Fetch(s + len - 16);
  1040. uint32_t d = a;
  1041. a = NAMESPACE_FOR_HASH_FUNCTIONS::Rotate32(a, 21);
  1042. a = Mur(a, Mur(b, _mm_crc32_u32(c, d)));
  1043. a += Fetch(s + len - 12);
  1044. b += Fetch(s + len - 8);
  1045. d += a;
  1046. a += d;
  1047. b = Mur(b, d) * c2;
  1048. a = _mm_crc32_u32(a, b + c);
  1049. return farmhashmk::Hash32Len13to24(s, (len + 1) / 2, a) + b;
  1050. }
  1051. #undef Mulc1
  1052. #define Mulc1(x) Mul((x), cc1)
  1053. #undef Mulc2
  1054. #define Mulc2(x) Mul((x), cc2)
  1055. #undef Murk
  1056. #define Murk(a, h) \
  1057. Add(k, \
  1058. Mul5( \
  1059. Rol19( \
  1060. Xor( \
  1061. Mulc2( \
  1062. Rol17( \
  1063. Mulc1(a))), \
  1064. (h)))))
  1065. const __m128i cc1 = _mm_set1_epi32(c1);
  1066. const __m128i cc2 = _mm_set1_epi32(c2);
  1067. __m128i h = _mm_set1_epi32(seed);
  1068. __m128i g = _mm_set1_epi32(c1 * seed);
  1069. __m128i f = g;
  1070. __m128i k = _mm_set1_epi32(0xe6546b64);
  1071. __m128i q;
  1072. if (len < 80) {
  1073. __m128i a = Fetch128(s);
  1074. __m128i b = Fetch128(s + 16);
  1075. __m128i c = Fetch128(s + (len - 15) / 2);
  1076. __m128i d = Fetch128(s + len - 32);
  1077. __m128i e = Fetch128(s + len - 16);
  1078. h = Add(h, a);
  1079. g = Add(g, b);
  1080. q = g;
  1081. g = Shuffle0321(g);
  1082. f = Add(f, c);
  1083. __m128i be = Add(b, Mulc1(e));
  1084. h = Add(h, f);
  1085. f = Add(f, h);
  1086. h = Add(Murk(d, h), e);
  1087. k = Xor(k, _mm_shuffle_epi8(g, f));
  1088. g = Add(Xor(c, g), a);
  1089. f = Add(Xor(be, f), d);
  1090. k = Add(k, be);
  1091. k = Add(k, _mm_shuffle_epi8(f, h));
  1092. f = Add(f, g);
  1093. g = Add(g, f);
  1094. g = Add(_mm_set1_epi32(len), Mulc1(g));
  1095. } else {
  1096. // len >= 80
  1097. // The following is loosely modelled after farmhashmk::Hash32.
  1098. size_t iters = (len - 1) / 80;
  1099. len -= iters * 80;
  1100. #undef Chunk
  1101. #define Chunk() do { \
  1102. __m128i a = Fetch128(s); \
  1103. __m128i b = Fetch128(s + 16); \
  1104. __m128i c = Fetch128(s + 32); \
  1105. __m128i d = Fetch128(s + 48); \
  1106. __m128i e = Fetch128(s + 64); \
  1107. h = Add(h, a); \
  1108. g = Add(g, b); \
  1109. g = Shuffle0321(g); \
  1110. f = Add(f, c); \
  1111. __m128i be = Add(b, Mulc1(e)); \
  1112. h = Add(h, f); \
  1113. f = Add(f, h); \
  1114. h = Add(h, d); \
  1115. q = Add(q, e); \
  1116. h = Rol17(h); \
  1117. h = Mulc1(h); \
  1118. k = Xor(k, _mm_shuffle_epi8(g, f)); \
  1119. g = Add(Xor(c, g), a); \
  1120. f = Add(Xor(be, f), d); \
  1121. std::swap(f, q); \
  1122. q = _mm_aesimc_si128(q); \
  1123. k = Add(k, be); \
  1124. k = Add(k, _mm_shuffle_epi8(f, h)); \
  1125. f = Add(f, g); \
  1126. g = Add(g, f); \
  1127. f = Mulc1(f); \
  1128. } while (0)
  1129. q = g;
  1130. while (iters-- != 0) {
  1131. Chunk();
  1132. s += 80;
  1133. }
  1134. if (len != 0) {
  1135. h = Add(h, _mm_set1_epi32(len));
  1136. s = s + len - 80;
  1137. Chunk();
  1138. }
  1139. }
  1140. g = Shuffle0321(g);
  1141. k = Xor(k, g);
  1142. k = Xor(k, q);
  1143. h = Xor(h, q);
  1144. f = Mulc1(f);
  1145. k = Mulc2(k);
  1146. g = Mulc1(g);
  1147. h = Mulc2(h);
  1148. k = Add(k, _mm_shuffle_epi8(g, f));
  1149. h = Add(h, f);
  1150. f = Add(f, h);
  1151. g = Add(g, k);
  1152. k = Add(k, g);
  1153. k = Xor(k, _mm_shuffle_epi8(f, h));
  1154. __m128i buf[4];
  1155. buf[0] = f;
  1156. buf[1] = g;
  1157. buf[2] = k;
  1158. buf[3] = h;
  1159. s = reinterpret_cast<char*>(buf);
  1160. uint32_t x = Fetch(s);
  1161. uint32_t y = Fetch(s+4);
  1162. uint32_t z = Fetch(s+8);
  1163. x = _mm_crc32_u32(x, Fetch(s+12));
  1164. y = _mm_crc32_u32(y, Fetch(s+16));
  1165. z = _mm_crc32_u32(z * c1, Fetch(s+20));
  1166. x = _mm_crc32_u32(x, Fetch(s+24));
  1167. y = _mm_crc32_u32(y * c1, Fetch(s+28));
  1168. uint32_t o = y;
  1169. z = _mm_crc32_u32(z, Fetch(s+32));
  1170. x = _mm_crc32_u32(x * c1, Fetch(s+36));
  1171. y = _mm_crc32_u32(y, Fetch(s+40));
  1172. z = _mm_crc32_u32(z * c1, Fetch(s+44));
  1173. x = _mm_crc32_u32(x, Fetch(s+48));
  1174. y = _mm_crc32_u32(y * c1, Fetch(s+52));
  1175. z = _mm_crc32_u32(z, Fetch(s+56));
  1176. x = _mm_crc32_u32(x, Fetch(s+60));
  1177. return (o - x + y - z) * c1;
  1178. }
  1179. #undef Chunk
  1180. #undef Murk
  1181. #undef Mulc2
  1182. #undef Mulc1
  1183. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  1184. if (len <= 24) {
  1185. if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * c1);
  1186. else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed);
  1187. else return farmhashmk::Hash32Len0to4(s, len, seed);
  1188. }
  1189. uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len);
  1190. return _mm_crc32_u32(Hash32(s + 24, len - 24) + seed, h);
  1191. }
  1192. #endif
  1193. } // namespace farmhashsu
  1194. namespace farmhashsa {
  1195. #if !can_use_sse42
  1196. uint32_t Hash32(const char *s, size_t len) {
  1197. FARMHASH_DIE_IF_MISCONFIGURED;
  1198. return s == NULL ? 0 : len;
  1199. }
  1200. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  1201. FARMHASH_DIE_IF_MISCONFIGURED;
  1202. return seed + Hash32(s, len);
  1203. }
  1204. #else
  1205. #undef Fetch
  1206. #define Fetch Fetch32
  1207. #undef Rotate
  1208. #define Rotate Rotate32
  1209. #undef Bswap
  1210. #define Bswap Bswap32
  1211. // Helpers for data-parallel operations (4x 32-bits).
  1212. STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi32(x, y); }
  1213. STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); }
  1214. STATIC_INLINE __m128i Or(__m128i x, __m128i y) { return _mm_or_si128(x, y); }
  1215. STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); }
  1216. STATIC_INLINE __m128i Mul5(__m128i x) { return Add(x, _mm_slli_epi32(x, 2)); }
  1217. STATIC_INLINE __m128i Rotate(__m128i x, int c) {
  1218. return Or(_mm_slli_epi32(x, c),
  1219. _mm_srli_epi32(x, 32 - c));
  1220. }
  1221. STATIC_INLINE __m128i Rot17(__m128i x) { return Rotate(x, 17); }
  1222. STATIC_INLINE __m128i Rot19(__m128i x) { return Rotate(x, 19); }
  1223. STATIC_INLINE __m128i Shuffle0321(__m128i x) {
  1224. return _mm_shuffle_epi32(x, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0));
  1225. }
  1226. uint32_t Hash32(const char *s, size_t len) {
  1227. const uint32_t seed = 81;
  1228. if (len <= 24) {
  1229. return len <= 12 ?
  1230. (len <= 4 ?
  1231. farmhashmk::Hash32Len0to4(s, len) :
  1232. farmhashmk::Hash32Len5to12(s, len)) :
  1233. farmhashmk::Hash32Len13to24(s, len);
  1234. }
  1235. if (len < 40) {
  1236. uint32_t a = len, b = seed * c2, c = a + b;
  1237. a += Fetch(s + len - 4);
  1238. b += Fetch(s + len - 20);
  1239. c += Fetch(s + len - 16);
  1240. uint32_t d = a;
  1241. a = NAMESPACE_FOR_HASH_FUNCTIONS::Rotate32(a, 21);
  1242. a = Mur(a, Mur(b, Mur(c, d)));
  1243. a += Fetch(s + len - 12);
  1244. b += Fetch(s + len - 8);
  1245. d += a;
  1246. a += d;
  1247. b = Mur(b, d) * c2;
  1248. a = _mm_crc32_u32(a, b + c);
  1249. return farmhashmk::Hash32Len13to24(s, (len + 1) / 2, a) + b;
  1250. }
  1251. #undef Mulc1
  1252. #define Mulc1(x) Mul((x), cc1)
  1253. #undef Mulc2
  1254. #define Mulc2(x) Mul((x), cc2)
  1255. #undef Murk
  1256. #define Murk(a, h) \
  1257. Add(k, \
  1258. Mul5( \
  1259. Rot19( \
  1260. Xor( \
  1261. Mulc2( \
  1262. Rot17( \
  1263. Mulc1(a))), \
  1264. (h)))))
  1265. const __m128i cc1 = _mm_set1_epi32(c1);
  1266. const __m128i cc2 = _mm_set1_epi32(c2);
  1267. __m128i h = _mm_set1_epi32(seed);
  1268. __m128i g = _mm_set1_epi32(c1 * seed);
  1269. __m128i f = g;
  1270. __m128i k = _mm_set1_epi32(0xe6546b64);
  1271. if (len < 80) {
  1272. __m128i a = Fetch128(s);
  1273. __m128i b = Fetch128(s + 16);
  1274. __m128i c = Fetch128(s + (len - 15) / 2);
  1275. __m128i d = Fetch128(s + len - 32);
  1276. __m128i e = Fetch128(s + len - 16);
  1277. h = Add(h, a);
  1278. g = Add(g, b);
  1279. g = Shuffle0321(g);
  1280. f = Add(f, c);
  1281. __m128i be = Add(b, Mulc1(e));
  1282. h = Add(h, f);
  1283. f = Add(f, h);
  1284. h = Add(Murk(d, h), e);
  1285. k = Xor(k, _mm_shuffle_epi8(g, f));
  1286. g = Add(Xor(c, g), a);
  1287. f = Add(Xor(be, f), d);
  1288. k = Add(k, be);
  1289. k = Add(k, _mm_shuffle_epi8(f, h));
  1290. f = Add(f, g);
  1291. g = Add(g, f);
  1292. g = Add(_mm_set1_epi32(len), Mulc1(g));
  1293. } else {
  1294. // len >= 80
  1295. // The following is loosely modelled after farmhashmk::Hash32.
  1296. size_t iters = (len - 1) / 80;
  1297. len -= iters * 80;
  1298. #undef Chunk
  1299. #define Chunk() do { \
  1300. __m128i a = Fetch128(s); \
  1301. __m128i b = Fetch128(s + 16); \
  1302. __m128i c = Fetch128(s + 32); \
  1303. __m128i d = Fetch128(s + 48); \
  1304. __m128i e = Fetch128(s + 64); \
  1305. h = Add(h, a); \
  1306. g = Add(g, b); \
  1307. g = Shuffle0321(g); \
  1308. f = Add(f, c); \
  1309. __m128i be = Add(b, Mulc1(e)); \
  1310. h = Add(h, f); \
  1311. f = Add(f, h); \
  1312. h = Add(Murk(d, h), e); \
  1313. k = Xor(k, _mm_shuffle_epi8(g, f)); \
  1314. g = Add(Xor(c, g), a); \
  1315. f = Add(Xor(be, f), d); \
  1316. k = Add(k, be); \
  1317. k = Add(k, _mm_shuffle_epi8(f, h)); \
  1318. f = Add(f, g); \
  1319. g = Add(g, f); \
  1320. f = Mulc1(f); \
  1321. } while (0)
  1322. while (iters-- != 0) {
  1323. Chunk();
  1324. s += 80;
  1325. }
  1326. if (len != 0) {
  1327. h = Add(h, _mm_set1_epi32(len));
  1328. s = s + len - 80;
  1329. Chunk();
  1330. }
  1331. }
  1332. g = Shuffle0321(g);
  1333. k = Xor(k, g);
  1334. f = Mulc1(f);
  1335. k = Mulc2(k);
  1336. g = Mulc1(g);
  1337. h = Mulc2(h);
  1338. k = Add(k, _mm_shuffle_epi8(g, f));
  1339. h = Add(h, f);
  1340. f = Add(f, h);
  1341. g = Add(g, k);
  1342. k = Add(k, g);
  1343. k = Xor(k, _mm_shuffle_epi8(f, h));
  1344. __m128i buf[4];
  1345. buf[0] = f;
  1346. buf[1] = g;
  1347. buf[2] = k;
  1348. buf[3] = h;
  1349. s = reinterpret_cast<char*>(buf);
  1350. uint32_t x = Fetch(s);
  1351. uint32_t y = Fetch(s+4);
  1352. uint32_t z = Fetch(s+8);
  1353. x = _mm_crc32_u32(x, Fetch(s+12));
  1354. y = _mm_crc32_u32(y, Fetch(s+16));
  1355. z = _mm_crc32_u32(z * c1, Fetch(s+20));
  1356. x = _mm_crc32_u32(x, Fetch(s+24));
  1357. y = _mm_crc32_u32(y * c1, Fetch(s+28));
  1358. uint32_t o = y;
  1359. z = _mm_crc32_u32(z, Fetch(s+32));
  1360. x = _mm_crc32_u32(x * c1, Fetch(s+36));
  1361. y = _mm_crc32_u32(y, Fetch(s+40));
  1362. z = _mm_crc32_u32(z * c1, Fetch(s+44));
  1363. x = _mm_crc32_u32(x, Fetch(s+48));
  1364. y = _mm_crc32_u32(y * c1, Fetch(s+52));
  1365. z = _mm_crc32_u32(z, Fetch(s+56));
  1366. x = _mm_crc32_u32(x, Fetch(s+60));
  1367. return (o - x + y - z) * c1;
  1368. }
  1369. #undef Chunk
  1370. #undef Murk
  1371. #undef Mulc2
  1372. #undef Mulc1
  1373. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  1374. if (len <= 24) {
  1375. if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * c1);
  1376. else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed);
  1377. else return farmhashmk::Hash32Len0to4(s, len, seed);
  1378. }
  1379. uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len);
  1380. return _mm_crc32_u32(Hash32(s + 24, len - 24) + seed, h);
  1381. }
  1382. #endif
  1383. } // namespace farmhashsa
  1384. namespace farmhashcc {
  1385. // This file provides a 32-bit hash equivalent to CityHash32 (v1.1.1)
  1386. // and a 128-bit hash equivalent to CityHash128 (v1.1.1). It also provides
  1387. // a seeded 32-bit hash function similar to CityHash32.
  1388. #undef Fetch
  1389. #define Fetch Fetch32
  1390. #undef Rotate
  1391. #define Rotate Rotate32
  1392. #undef Bswap
  1393. #define Bswap Bswap32
  1394. STATIC_INLINE uint32_t Hash32Len13to24(const char *s, size_t len) {
  1395. uint32_t a = Fetch(s - 4 + (len >> 1));
  1396. uint32_t b = Fetch(s + 4);
  1397. uint32_t c = Fetch(s + len - 8);
  1398. uint32_t d = Fetch(s + (len >> 1));
  1399. uint32_t e = Fetch(s);
  1400. uint32_t f = Fetch(s + len - 4);
  1401. uint32_t h = len;
  1402. return fmix(Mur(f, Mur(e, Mur(d, Mur(c, Mur(b, Mur(a, h)))))));
  1403. }
  1404. STATIC_INLINE uint32_t Hash32Len0to4(const char *s, size_t len) {
  1405. uint32_t b = 0;
  1406. uint32_t c = 9;
  1407. for (size_t i = 0; i < len; i++) {
  1408. signed char v = s[i];
  1409. b = b * c1 + v;
  1410. c ^= b;
  1411. }
  1412. return fmix(Mur(b, Mur(len, c)));
  1413. }
  1414. STATIC_INLINE uint32_t Hash32Len5to12(const char *s, size_t len) {
  1415. uint32_t a = len, b = len * 5, c = 9, d = b;
  1416. a += Fetch(s);
  1417. b += Fetch(s + len - 4);
  1418. c += Fetch(s + ((len >> 1) & 4));
  1419. return fmix(Mur(c, Mur(b, Mur(a, d))));
  1420. }
  1421. uint32_t Hash32(const char *s, size_t len) {
  1422. if (len <= 24) {
  1423. return len <= 12 ?
  1424. (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) :
  1425. Hash32Len13to24(s, len);
  1426. }
  1427. // len > 24
  1428. uint32_t h = len, g = c1 * len, f = g;
  1429. uint32_t a0 = Rotate(Fetch(s + len - 4) * c1, 17) * c2;
  1430. uint32_t a1 = Rotate(Fetch(s + len - 8) * c1, 17) * c2;
  1431. uint32_t a2 = Rotate(Fetch(s + len - 16) * c1, 17) * c2;
  1432. uint32_t a3 = Rotate(Fetch(s + len - 12) * c1, 17) * c2;
  1433. uint32_t a4 = Rotate(Fetch(s + len - 20) * c1, 17) * c2;
  1434. h ^= a0;
  1435. h = Rotate(h, 19);
  1436. h = h * 5 + 0xe6546b64;
  1437. h ^= a2;
  1438. h = Rotate(h, 19);
  1439. h = h * 5 + 0xe6546b64;
  1440. g ^= a1;
  1441. g = Rotate(g, 19);
  1442. g = g * 5 + 0xe6546b64;
  1443. g ^= a3;
  1444. g = Rotate(g, 19);
  1445. g = g * 5 + 0xe6546b64;
  1446. f += a4;
  1447. f = Rotate(f, 19);
  1448. f = f * 5 + 0xe6546b64;
  1449. size_t iters = (len - 1) / 20;
  1450. do {
  1451. uint32_t a0 = Rotate(Fetch(s) * c1, 17) * c2;
  1452. uint32_t a1 = Fetch(s + 4);
  1453. uint32_t a2 = Rotate(Fetch(s + 8) * c1, 17) * c2;
  1454. uint32_t a3 = Rotate(Fetch(s + 12) * c1, 17) * c2;
  1455. uint32_t a4 = Fetch(s + 16);
  1456. h ^= a0;
  1457. h = Rotate(h, 18);
  1458. h = h * 5 + 0xe6546b64;
  1459. f += a1;
  1460. f = Rotate(f, 19);
  1461. f = f * c1;
  1462. g += a2;
  1463. g = Rotate(g, 18);
  1464. g = g * 5 + 0xe6546b64;
  1465. h ^= a3 + a1;
  1466. h = Rotate(h, 19);
  1467. h = h * 5 + 0xe6546b64;
  1468. g ^= a4;
  1469. g = Bswap(g) * 5;
  1470. h += a4 * 5;
  1471. h = Bswap(h);
  1472. f += a0;
  1473. PERMUTE3(f, h, g);
  1474. s += 20;
  1475. } while (--iters != 0);
  1476. g = Rotate(g, 11) * c1;
  1477. g = Rotate(g, 17) * c1;
  1478. f = Rotate(f, 11) * c1;
  1479. f = Rotate(f, 17) * c1;
  1480. h = Rotate(h + g, 19);
  1481. h = h * 5 + 0xe6546b64;
  1482. h = Rotate(h, 17) * c1;
  1483. h = Rotate(h + f, 19);
  1484. h = h * 5 + 0xe6546b64;
  1485. h = Rotate(h, 17) * c1;
  1486. return h;
  1487. }
  1488. uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) {
  1489. if (len <= 24) {
  1490. if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * c1);
  1491. else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed);
  1492. else return farmhashmk::Hash32Len0to4(s, len, seed);
  1493. }
  1494. uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len);
  1495. return Mur(Hash32(s + 24, len - 24) + seed, h);
  1496. }
  1497. #undef Fetch
  1498. #define Fetch Fetch64
  1499. #undef Rotate
  1500. #define Rotate Rotate64
  1501. #undef Bswap
  1502. #define Bswap Bswap64
  1503. STATIC_INLINE uint64_t ShiftMix(uint64_t val) {
  1504. return val ^ (val >> 47);
  1505. }
  1506. STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v) {
  1507. return Hash128to64(Uint128(u, v));
  1508. }
  1509. STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
  1510. // Murmur-inspired hashing.
  1511. uint64_t a = (u ^ v) * mul;
  1512. a ^= (a >> 47);
  1513. uint64_t b = (v ^ a) * mul;
  1514. b ^= (b >> 47);
  1515. b *= mul;
  1516. return b;
  1517. }
  1518. STATIC_INLINE uint64_t HashLen0to16(const char *s, size_t len) {
  1519. if (len >= 8) {
  1520. uint64_t mul = k2 + len * 2;
  1521. uint64_t a = Fetch(s) + k2;
  1522. uint64_t b = Fetch(s + len - 8);
  1523. uint64_t c = Rotate(b, 37) * mul + a;
  1524. uint64_t d = (Rotate(a, 25) + b) * mul;
  1525. return HashLen16(c, d, mul);
  1526. }
  1527. if (len >= 4) {
  1528. uint64_t mul = k2 + len * 2;
  1529. uint64_t a = Fetch32(s);
  1530. return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
  1531. }
  1532. if (len > 0) {
  1533. uint8_t a = s[0];
  1534. uint8_t b = s[len >> 1];
  1535. uint8_t c = s[len - 1];
  1536. uint32_t y = static_cast<uint32_t>(a) + (static_cast<uint32_t>(b) << 8);
  1537. uint32_t z = len + (static_cast<uint32_t>(c) << 2);
  1538. return ShiftMix(y * k2 ^ z * k0) * k2;
  1539. }
  1540. return k2;
  1541. }
  1542. // Return a 16-byte hash for 48 bytes. Quick and dirty.
  1543. // Callers do best to use "random-looking" values for a and b.
  1544. STATIC_INLINE pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
  1545. uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) {
  1546. a += w;
  1547. b = Rotate(b + a + z, 21);
  1548. uint64_t c = a;
  1549. a += x;
  1550. a += y;
  1551. b += Rotate(a, 44);
  1552. return make_pair(a + z, b + c);
  1553. }
  1554. // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty.
  1555. STATIC_INLINE pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
  1556. const char* s, uint64_t a, uint64_t b) {
  1557. return WeakHashLen32WithSeeds(Fetch(s),
  1558. Fetch(s + 8),
  1559. Fetch(s + 16),
  1560. Fetch(s + 24),
  1561. a,
  1562. b);
  1563. }
  1564. // A subroutine for CityHash128(). Returns a decent 128-bit hash for strings
  1565. // of any length representable in signed long. Based on City and Murmur.
  1566. STATIC_INLINE uint128_t CityMurmur(const char *s, size_t len, uint128_t seed) {
  1567. uint64_t a = Uint128Low64(seed);
  1568. uint64_t b = Uint128High64(seed);
  1569. uint64_t c = 0;
  1570. uint64_t d = 0;
  1571. signed long l = len - 16;
  1572. if (l <= 0) { // len <= 16
  1573. a = ShiftMix(a * k1) * k1;
  1574. c = b * k1 + HashLen0to16(s, len);
  1575. d = ShiftMix(a + (len >= 8 ? Fetch(s) : c));
  1576. } else { // len > 16
  1577. c = HashLen16(Fetch(s + len - 8) + k1, a);
  1578. d = HashLen16(b + len, c + Fetch(s + len - 16));
  1579. a += d;
  1580. do {
  1581. a ^= ShiftMix(Fetch(s) * k1) * k1;
  1582. a *= k1;
  1583. b ^= a;
  1584. c ^= ShiftMix(Fetch(s + 8) * k1) * k1;
  1585. c *= k1;
  1586. d ^= c;
  1587. s += 16;
  1588. l -= 16;
  1589. } while (l > 0);
  1590. }
  1591. a = HashLen16(a, c);
  1592. b = HashLen16(d, b);
  1593. return uint128_t(a ^ b, HashLen16(b, a));
  1594. }
  1595. uint128_t CityHash128WithSeed(const char *s, size_t len, uint128_t seed) {
  1596. if (len < 128) {
  1597. return CityMurmur(s, len, seed);
  1598. }
  1599. // We expect len >= 128 to be the common case. Keep 56 bytes of state:
  1600. // v, w, x, y, and z.
  1601. pair<uint64_t, uint64_t> v, w;
  1602. uint64_t x = Uint128Low64(seed);
  1603. uint64_t y = Uint128High64(seed);
  1604. uint64_t z = len * k1;
  1605. v.first = Rotate(y ^ k1, 49) * k1 + Fetch(s);
  1606. v.second = Rotate(v.first, 42) * k1 + Fetch(s + 8);
  1607. w.first = Rotate(y + z, 35) * k1 + x;
  1608. w.second = Rotate(x + Fetch(s + 88), 53) * k1;
  1609. // This is the same inner loop as CityHash64(), manually unrolled.
  1610. do {
  1611. x = Rotate(x + y + v.first + Fetch(s + 8), 37) * k1;
  1612. y = Rotate(y + v.second + Fetch(s + 48), 42) * k1;
  1613. x ^= w.second;
  1614. y += v.first + Fetch(s + 40);
  1615. z = Rotate(z + w.first, 33) * k1;
  1616. v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
  1617. w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16));
  1618. std::swap(z, x);
  1619. s += 64;
  1620. x = Rotate(x + y + v.first + Fetch(s + 8), 37) * k1;
  1621. y = Rotate(y + v.second + Fetch(s + 48), 42) * k1;
  1622. x ^= w.second;
  1623. y += v.first + Fetch(s + 40);
  1624. z = Rotate(z + w.first, 33) * k1;
  1625. v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
  1626. w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16));
  1627. std::swap(z, x);
  1628. s += 64;
  1629. len -= 128;
  1630. } while (LIKELY(len >= 128));
  1631. x += Rotate(v.first + z, 49) * k0;
  1632. y = y * k0 + Rotate(w.second, 37);
  1633. z = z * k0 + Rotate(w.first, 27);
  1634. w.first *= 9;
  1635. v.first *= k0;
  1636. // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s.
  1637. for (size_t tail_done = 0; tail_done < len; ) {
  1638. tail_done += 32;
  1639. y = Rotate(x + y, 42) * k0 + v.second;
  1640. w.first += Fetch(s + len - tail_done + 16);
  1641. x = x * k0 + w.first;
  1642. z += w.second + Fetch(s + len - tail_done);
  1643. w.second += v.first;
  1644. v = WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second);
  1645. v.first *= k0;
  1646. }
  1647. // At this point our 56 bytes of state should contain more than
  1648. // enough information for a strong 128-bit hash. We use two
  1649. // different 56-byte-to-8-byte hashes to get a 16-byte final result.
  1650. x = HashLen16(x, v.first);
  1651. y = HashLen16(y + z, w.first);
  1652. return uint128_t(HashLen16(x + v.second, w.second) + y,
  1653. HashLen16(x + w.second, y + v.second));
  1654. }
  1655. STATIC_INLINE uint128_t CityHash128(const char *s, size_t len) {
  1656. return len >= 16 ?
  1657. CityHash128WithSeed(s + 16, len - 16,
  1658. uint128_t(Fetch(s), Fetch(s + 8) + k0)) :
  1659. CityHash128WithSeed(s, len, uint128_t(k0, k1));
  1660. }
  1661. uint128_t Fingerprint128(const char* s, size_t len) {
  1662. return CityHash128(s, len);
  1663. }
  1664. } // namespace farmhashcc
  1665. namespace NAMESPACE_FOR_HASH_FUNCTIONS {
  1666. // BASIC STRING HASHING
  1667. // Hash function for a byte array. See also Hash(), below.
  1668. // May change from time to time, may differ on different platforms, may differ
  1669. // depending on NDEBUG.
  1670. uint32_t Hash32(const char* s, size_t len) {
  1671. return DebugTweak(
  1672. (can_use_sse41 & x86_64) ? farmhashnt::Hash32(s, len) :
  1673. (can_use_sse42 & can_use_aesni) ? farmhashsu::Hash32(s, len) :
  1674. can_use_sse42 ? farmhashsa::Hash32(s, len) :
  1675. farmhashmk::Hash32(s, len));
  1676. }
  1677. // Hash function for a byte array. For convenience, a 32-bit seed is also
  1678. // hashed into the result.
  1679. // May change from time to time, may differ on different platforms, may differ
  1680. // depending on NDEBUG.
  1681. uint32_t Hash32WithSeed(const char* s, size_t len, uint32_t seed) {
  1682. return DebugTweak(
  1683. (can_use_sse41 & x86_64) ? farmhashnt::Hash32WithSeed(s, len, seed) :
  1684. (can_use_sse42 & can_use_aesni) ? farmhashsu::Hash32WithSeed(s, len, seed) :
  1685. can_use_sse42 ? farmhashsa::Hash32WithSeed(s, len, seed) :
  1686. farmhashmk::Hash32WithSeed(s, len, seed));
  1687. }
  1688. // Hash function for a byte array. For convenience, a 64-bit seed is also
  1689. // hashed into the result. See also Hash(), below.
  1690. // May change from time to time, may differ on different platforms, may differ
  1691. // depending on NDEBUG.
  1692. uint64_t Hash64(const char* s, size_t len) {
  1693. return DebugTweak(
  1694. (can_use_sse42 & x86_64) ?
  1695. farmhashte::Hash64(s, len) :
  1696. farmhashxo::Hash64(s, len));
  1697. }
  1698. // Hash function for a byte array.
  1699. // May change from time to time, may differ on different platforms, may differ
  1700. // depending on NDEBUG.
  1701. size_t Hash(const char* s, size_t len) {
  1702. return sizeof(size_t) == 8 ? Hash64(s, len) : Hash32(s, len);
  1703. }
  1704. // Hash function for a byte array. For convenience, a 64-bit seed is also
  1705. // hashed into the result.
  1706. // May change from time to time, may differ on different platforms, may differ
  1707. // depending on NDEBUG.
  1708. uint64_t Hash64WithSeed(const char* s, size_t len, uint64_t seed) {
  1709. return DebugTweak(farmhashna::Hash64WithSeed(s, len, seed));
  1710. }
  1711. // Hash function for a byte array. For convenience, two seeds are also
  1712. // hashed into the result.
  1713. // May change from time to time, may differ on different platforms, may differ
  1714. // depending on NDEBUG.
  1715. uint64_t Hash64WithSeeds(const char* s, size_t len, uint64_t seed0, uint64_t seed1) {
  1716. return DebugTweak(farmhashna::Hash64WithSeeds(s, len, seed0, seed1));
  1717. }
  1718. // Hash function for a byte array.
  1719. // May change from time to time, may differ on different platforms, may differ
  1720. // depending on NDEBUG.
  1721. uint128_t Hash128(const char* s, size_t len) {
  1722. return DebugTweak(farmhashcc::Fingerprint128(s, len));
  1723. }
  1724. // Hash function for a byte array. For convenience, a 128-bit seed is also
  1725. // hashed into the result.
  1726. // May change from time to time, may differ on different platforms, may differ
  1727. // depending on NDEBUG.
  1728. uint128_t Hash128WithSeed(const char* s, size_t len, uint128_t seed) {
  1729. return DebugTweak(farmhashcc::CityHash128WithSeed(s, len, seed));
  1730. }
  1731. // BASIC NON-STRING HASHING
  1732. // FINGERPRINTING (i.e., good, portable, forever-fixed hash functions)
  1733. // Fingerprint function for a byte array. Most useful in 32-bit binaries.
  1734. uint32_t Fingerprint32(const char* s, size_t len) {
  1735. return farmhashmk::Hash32(s, len);
  1736. }
  1737. // Fingerprint function for a byte array.
  1738. uint64_t Fingerprint64(const char* s, size_t len) {
  1739. return farmhashna::Hash64(s, len);
  1740. }
  1741. // Fingerprint function for a byte array.
  1742. uint128_t Fingerprint128(const char* s, size_t len) {
  1743. return farmhashcc::Fingerprint128(s, len);
  1744. }
  1745. // Older and still available but perhaps not as fast as the above:
  1746. // farmhashns::Hash32{,WithSeed}()
  1747. } // namespace NAMESPACE_FOR_HASH_FUNCTIONS
  1748. #if FARMHASHSELFTEST
  1749. #ifndef FARMHASH_SELF_TEST_GUARD
  1750. #define FARMHASH_SELF_TEST_GUARD
  1751. #include <cstdio>
  1752. #include <iostream>
  1753. #include <string.h>
  1754. using std::cout;
  1755. using std::cerr;
  1756. using std::endl;
  1757. using std::hex;
  1758. static const uint64_t kSeed0 = 1234567;
  1759. static const uint64_t kSeed1 = k0;
  1760. static const int kDataSize = 1 << 20;
  1761. static const int kTestSize = 300;
  1762. #define kSeed128 Uint128(kSeed0, kSeed1)
  1763. static char data[kDataSize];
  1764. static int completed_self_tests = 0;
  1765. static int errors = 0;
  1766. // Initialize data to pseudorandom values.
  1767. void Setup() {
  1768. if (completed_self_tests == 0) {
  1769. uint64_t a = 9;
  1770. uint64_t b = 777;
  1771. for (int i = 0; i < kDataSize; i++) {
  1772. a += b;
  1773. b += a;
  1774. a = (a ^ (a >> 41)) * k0;
  1775. b = (b ^ (b >> 41)) * k0 + i;
  1776. uint8_t u = b >> 37;
  1777. memcpy(data + i, &u, 1); // uint8_t -> char
  1778. }
  1779. }
  1780. }
  1781. int NoteErrors() {
  1782. #define NUM_SELF_TESTS 9
  1783. if (++completed_self_tests == NUM_SELF_TESTS)
  1784. std::exit(errors > 0);
  1785. return errors;
  1786. }
  1787. template <typename T> inline bool IsNonZero(T x) {
  1788. return x != 0;
  1789. }
  1790. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  1791. return x != Uint128(0, 0);
  1792. }
  1793. #endif // FARMHASH_SELF_TEST_GUARD
  1794. namespace farmhashccTest {
  1795. uint32_t CreateSeed(int offset, int salt) {
  1796. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  1797. h = h * c1;
  1798. h ^= (h >> 17);
  1799. h = h * c1;
  1800. h ^= (h >> 17);
  1801. h = h * c1;
  1802. h ^= (h >> 17);
  1803. h += static_cast<uint32_t>(offset & 0xffffffff);
  1804. h = h * c1;
  1805. h ^= (h >> 17);
  1806. h = h * c1;
  1807. h ^= (h >> 17);
  1808. h = h * c1;
  1809. h ^= (h >> 17);
  1810. return h;
  1811. }
  1812. #undef SEED
  1813. #undef SEED1
  1814. #undef SEED0
  1815. #define SEED CreateSeed(offset, -1)
  1816. #define SEED0 CreateSeed(offset, 0)
  1817. #define SEED1 CreateSeed(offset, 1)
  1818. #undef TESTING
  1819. #define TESTING 1
  1820. #if TESTING
  1821. uint32_t expected[] = {
  1822. 4223616069u,
  1823. 3696677242u,
  1824. 1039179260u, 1690343979u, 1018511555u, 2464489001u,
  1825. 20368522u, 2663783964u, 175201532u, 1619210592u,
  1826. 4081014168u,
  1827. 2576519988u,
  1828. 3285042206u, 502478099u, 739479538u, 1500332790u,
  1829. 13754768u, 3789353455u, 3473868058u, 1909255088u,
  1830. 2212771159u,
  1831. 1112731063u,
  1832. 826915357u, 2893489933u, 118369799u, 1848668220u,
  1833. 1308219822u, 249416982u, 64306364u, 4221800195u,
  1834. 1020067935u,
  1835. 3955445564u,
  1836. 563346294u, 550236731u, 2339016688u, 1826259714u,
  1837. 3872358639u, 2295981050u, 1870005390u, 4015628802u,
  1838. 1451961420u,
  1839. 653440099u,
  1840. 1292493871u, 164377749u, 1717712483u, 463414587u,
  1841. 3924343675u, 1050492084u, 3566618804u, 2046983362u,
  1842. 31917516u,
  1843. 2957164615u,
  1844. 230718965u, 999595115u, 3534822176u, 2175709186u,
  1845. 965707431u, 441796222u, 2481718051u, 1827777486u,
  1846. 2590087362u,
  1847. 3879448744u,
  1848. 3515079898u, 1601433082u, 982764532u, 254808716u,
  1849. 1293372530u, 4205605817u, 947001462u, 1138890052u,
  1850. 176305566u,
  1851. 2447367541u,
  1852. 2973802542u, 4123621138u, 3083865840u, 1706367795u,
  1853. 792114347u, 2880110657u, 440613768u, 195054868u,
  1854. 1359016305u,
  1855. 3363804638u,
  1856. 649488537u, 1624045597u, 1441938215u, 3147758996u,
  1857. 3199173578u, 2597283203u, 2191333609u, 3763129144u,
  1858. 1117290165u,
  1859. 1062549743u,
  1860. 2565615889u, 1046361554u, 1581968261u, 1058773671u,
  1861. 1123053168u, 3807622275u, 1486749916u, 3900816089u,
  1862. 2437877004u,
  1863. 1894455839u,
  1864. 1912520953u, 1914997013u, 561048608u, 1643267444u,
  1865. 3671572006u, 194811086u, 1468911468u, 2179206286u,
  1866. 673206794u,
  1867. 3486923651u,
  1868. 3741426466u, 3292160512u, 697001377u, 1900763774u,
  1869. 3726097344u, 629282039u, 3578723715u, 2868028489u,
  1870. 3269862919u,
  1871. 2303349487u,
  1872. 3643953525u, 2307255916u, 849996280u, 732080434u,
  1873. 909961480u, 3542445214u, 2628347095u, 4236856917u,
  1874. 1380660650u,
  1875. 2631821908u,
  1876. 2007289004u, 3509705198u, 3788541675u, 789457322u,
  1877. 3090670546u, 638977894u, 3503881773u, 947102987u,
  1878. 1525325287u,
  1879. 1816697045u,
  1880. 2706647405u, 288763142u, 3505438495u, 481308609u,
  1881. 2882636782u, 3745162621u, 3503467033u, 428247823u,
  1882. 176408838u,
  1883. 333551502u,
  1884. 1001068721u, 1681483651u, 75380831u, 4191469679u,
  1885. 3627361839u, 2736617386u, 3120737438u, 1297502456u,
  1886. 864896482u,
  1887. 85674920u,
  1888. 2886047255u, 4119881331u, 2496990525u, 3442502055u,
  1889. 1806582817u, 3186345024u, 4099591287u, 2560171465u,
  1890. 3489229104u,
  1891. 3065015872u,
  1892. 2755089808u, 3098442882u, 378524719u, 2664097023u,
  1893. 1771960725u, 2901182183u, 55258521u, 1266621443u,
  1894. 581644891u,
  1895. 37790450u,
  1896. 1800731704u, 3601350920u, 53428754u, 2759476837u,
  1897. 3391093099u, 1496510311u, 2511119507u, 2636877410u,
  1898. 631613207u,
  1899. 1573846064u,
  1900. 260484875u, 1088212603u, 2369525206u, 322522428u,
  1901. 3191396600u, 2076543340u, 1552496658u, 2739811558u,
  1902. 3867875546u,
  1903. 2051584261u,
  1904. 2126250818u, 901517871u, 3651631165u, 1323139145u,
  1905. 1521111765u, 477802997u, 3508559783u, 383954241u,
  1906. 3804516756u,
  1907. 4250206331u,
  1908. 2655954340u, 2484996477u, 1417544845u, 1520282298u,
  1909. 2745204366u, 2869345147u, 1872738335u, 2592877343u,
  1910. 1619744564u,
  1911. 1804962124u,
  1912. 3458679890u, 423948620u, 273645618u, 4187865426u,
  1913. 376057175u, 2943431463u, 3581950599u, 1035398331u,
  1914. 1088213445u,
  1915. 861988903u,
  1916. 1323370244u, 777069428u, 506235917u, 369720851u,
  1917. 2789995854u, 230915180u, 1505086948u, 940361236u,
  1918. 3727873235u,
  1919. 1159167499u,
  1920. 1860302871u, 3456858862u, 3923555152u, 2131072714u,
  1921. 2910461068u, 3671950363u, 2010742682u, 4088068851u,
  1922. 3616470388u,
  1923. 2087714788u,
  1924. 221675509u, 1230154072u, 3450704646u, 1463226695u,
  1925. 1998357699u, 266026801u, 619568740u, 3560427266u,
  1926. 4148162586u,
  1927. 3150417316u,
  1928. 1356375822u, 2056097622u, 627905802u, 3881675638u,
  1929. 2309738053u, 971916703u, 3447805361u, 1673575328u,
  1930. 673084328u,
  1931. 3317849401u,
  1932. 2836362782u, 2377208890u, 3275350588u, 158350552u,
  1933. 2553241779u, 2497264995u, 3262882649u, 3897937187u,
  1934. 1598963653u,
  1935. 3068514414u,
  1936. 601541505u, 374517071u, 3380795976u, 235752573u,
  1937. 284670003u, 2990192160u, 904937105u, 2306579150u,
  1938. 2117362589u,
  1939. 1635274830u,
  1940. 3355572906u, 170799903u, 1226685528u, 664567688u,
  1941. 413219134u, 878324258u, 4026159448u, 3620649295u,
  1942. 1823625377u,
  1943. 3175888439u,
  1944. 1759344347u, 2640637095u, 3549558u, 2192984935u,
  1945. 978623493u, 804017880u, 3877562323u, 3843116489u,
  1946. 1641748342u,
  1947. 1853539444u,
  1948. 3001178468u, 3443560727u, 2685426077u, 1653064722u,
  1949. 349231508u, 2726789654u, 3136215581u, 768402830u,
  1950. 269384321u,
  1951. 531936536u,
  1952. 2592883487u, 1343156334u, 3628619802u, 1477143570u,
  1953. 4269458419u, 3285611028u, 959104925u, 2712290710u,
  1954. 3480237248u,
  1955. 835796333u,
  1956. 2020636251u, 1191914589u, 126521603u, 4288023938u,
  1957. 3731699932u, 2136758855u, 985780142u, 193807575u,
  1958. 1850544433u,
  1959. 653947619u,
  1960. 3929316796u, 381871169u, 950486363u, 1787262279u,
  1961. 360480382u, 1800636585u, 1039258631u, 3682073259u,
  1962. 1262819303u,
  1963. 1786000319u,
  1964. 1570627191u, 893065837u, 301304916u, 1478469809u,
  1965. 623018819u, 2742232545u, 2058913014u, 1706060059u,
  1966. 2421125401u,
  1967. 1315829592u,
  1968. 3208766775u, 1805586156u, 575853086u, 3085025513u,
  1969. 4010908260u, 2344058256u, 3814407434u, 1458485673u,
  1970. 2474514786u,
  1971. 3581895658u,
  1972. 2710719679u, 190812706u, 2135454262u, 2620080728u,
  1973. 3400757986u, 1669914857u, 1559978393u, 1629811331u,
  1974. 3096616493u,
  1975. 1391424435u,
  1976. 4158376003u, 1015657076u, 794783832u, 479952178u,
  1977. 1150290207u, 2497437906u, 231815090u, 755078067u,
  1978. 3832053281u,
  1979. 63649475u,
  1980. 2415822606u, 4105027719u, 1706992318u, 1106598740u,
  1981. 3941945667u, 1271300761u, 505882259u, 760186809u,
  1982. 2657183368u,
  1983. 1925422058u,
  1984. 1039773764u, 880219458u, 4275949176u, 1556833823u,
  1985. 925882132u, 4216310340u, 757497522u, 461833914u,
  1986. 3884002070u,
  1987. 2790957660u,
  1988. 2100050089u, 651959176u, 1380301291u, 1289124125u,
  1989. 452314403u, 226156280u, 3306924715u, 1750807758u,
  1990. 2290180542u,
  1991. 1953760569u,
  1992. 2253069096u, 3960924806u, 1786291620u, 60736185u,
  1993. 2569018293u, 3870479674u, 2247005661u, 2239850953u,
  1994. 4261808536u,
  1995. 3282975782u,
  1996. 780945879u, 3349849383u, 1579362556u, 2265045884u,
  1997. 905088740u, 725212379u, 3156479246u, 2501620391u,
  1998. 3062836263u,
  1999. 4070422690u,
  2000. 996797869u, 4082582315u, 976105756u, 303983602u,
  2001. 1862104804u, 3864508254u, 3383979677u, 2835500286u,
  2002. 2798364010u,
  2003. 519359476u,
  2004. 3447342725u, 194373889u, 3313466630u, 232399983u,
  2005. 2841787856u, 1672751454u, 3345183154u, 1805381384u,
  2006. 2226129336u,
  2007. 2847829057u,
  2008. 2350774567u, 2838540121u, 2757948482u, 1017002062u,
  2009. 2329150951u, 2171488196u, 3668619047u, 3874977844u,
  2010. 3287966998u,
  2011. 262346753u,
  2012. 2493054715u, 2298644430u, 2926101182u, 1528457638u,
  2013. 598656233u, 2615845874u, 989110727u, 820441411u,
  2014. 253617372u,
  2015. 2201077208u,
  2016. 2047569338u, 3114356329u, 3335563734u, 2967673540u,
  2017. 768438341u, 1417708203u, 3873718246u, 1538441843u,
  2018. 1279167650u,
  2019. 3917966776u,
  2020. 2218481734u, 1015935150u, 1957845042u, 1318150213u,
  2021. 3146423971u, 4218994877u, 1162470863u, 1519718292u,
  2022. 2594658906u,
  2023. 665870414u,
  2024. 3430347817u, 3933868731u, 1597041394u, 3138684682u,
  2025. 3398212027u, 1064647658u, 1576321132u, 14792918u,
  2026. 224938029u,
  2027. 3706456050u,
  2028. 847274786u, 2645698692u, 1743374687u, 2343133224u,
  2029. 3066596790u, 2857270120u, 200596308u, 452055528u,
  2030. 2319312082u,
  2031. 3488655402u,
  2032. 4146865894u, 608206438u, 2699777051u, 3687240713u,
  2033. 327957508u, 3664730153u, 568134564u, 2993484554u,
  2034. 4159860363u,
  2035. 4274533921u,
  2036. 1079994063u, 2360220210u, 3609597760u, 3639708902u,
  2037. 2836180437u, 1069910270u, 1892427666u, 1874729790u,
  2038. 1267712826u,
  2039. 121886940u,
  2040. 3572289214u, 2475945610u, 783779452u, 588827737u,
  2041. 1531395014u, 2085084212u, 2219189792u, 3981444548u,
  2042. 2218885336u,
  2043. 1691622694u,
  2044. 2053232885u, 1386558530u, 2182946189u, 2365247285u,
  2045. 1871081313u, 2935751853u, 38413723u, 543465863u,
  2046. 900691890u,
  2047. 2899905665u,
  2048. 575120562u, 93133904u, 457154948u, 2983705792u,
  2049. 4232229200u, 2038565963u, 614693984u, 3405328302u,
  2050. 4083090010u,
  2051. 2088004171u,
  2052. 244031209u, 1861889294u, 2417109253u, 3299562328u,
  2053. 4158642443u, 4199064449u, 3161611046u, 885015950u,
  2054. 3677904099u,
  2055. 2969861785u,
  2056. 772348805u, 1712263832u, 3219357614u, 484271305u,
  2057. 3645706114u, 2059620251u, 409557488u, 2278896731u,
  2058. 224475749u,
  2059. 3523022952u,
  2060. 2057140088u, 449131785u, 1149879244u, 4255363996u,
  2061. 3602720135u, 1690010854u, 2503998822u, 2750828466u,
  2062. 3340671802u,
  2063. 1447583863u,
  2064. 2649684943u, 2764747249u, 3046070595u, 3441726138u,
  2065. 3840332559u, 3156747501u, 1288666680u, 1472744459u,
  2066. 3452391933u,
  2067. 1617542784u,
  2068. 217869690u, 3718469527u, 348639731u, 590532355u,
  2069. 43789787u, 22606314u, 1621559290u, 2231743261u,
  2070. 2234620879u,
  2071. 544748955u,
  2072. 3169387920u, 203343594u, 3272552527u, 1078282365u,
  2073. 809576321u, 854207584u, 3625491053u, 1193737267u,
  2074. 1628966807u,
  2075. 2661421060u,
  2076. 2433442061u, 3886639039u, 2149304418u, 303000565u,
  2077. 1432830882u, 137378235u, 1135974068u, 318705754u,
  2078. 2491227157u,
  2079. 2627534472u,
  2080. 3520352233u, 2488397682u, 3969194920u, 3843962181u,
  2081. 2135981459u, 2611933220u, 799460731u, 2300968851u,
  2082. 3412851628u,
  2083. 3070914013u,
  2084. 3555224260u, 4125937572u, 240359903u, 722496673u,
  2085. 2061023600u, 3843919221u, 2759960043u, 1191155322u,
  2086. 1504041490u,
  2087. 3735253656u,
  2088. 1773124736u, 101110011u, 1627699578u, 2645634551u,
  2089. 263603947u, 1388368439u, 677146538u, 1644201982u,
  2090. 2625699644u,
  2091. 2403862553u,
  2092. 2426069017u, 3613511705u, 915141802u, 2981654265u,
  2093. 3474818167u, 2611101773u, 627891434u, 762754924u,
  2094. 2143021902u,
  2095. 51067670u,
  2096. 4017746573u, 2269879853u, 3037857950u, 2388899692u,
  2097. 582729171u, 1886116725u, 2281219772u, 264704948u,
  2098. 3509984037u,
  2099. 4078683368u,
  2100. 2172959411u, 1807195632u, 3357092302u, 2253764928u,
  2101. 2320369390u, 3076335959u, 2623583210u, 168378015u,
  2102. 1435562650u,
  2103. 1100977467u,
  2104. 3160490319u, 2550328495u, 2396855930u, 1347823908u,
  2105. 1617990918u, 3849653099u, 3224111576u, 1681539821u,
  2106. 4171542880u,
  2107. 552200045u,
  2108. 3562947778u, 1676237880u, 3747732307u, 2453332913u,
  2109. 865530667u, 3566636849u, 3485502777u, 336779723u,
  2110. 2535942410u,
  2111. 1685000184u,
  2112. 820545711u, 1893670486u, 1273910461u, 1193758569u,
  2113. 970365241u, 381205962u, 3612810852u, 1160577445u,
  2114. 541488143u,
  2115. 4005031080u,
  2116. 2333965236u, 2419855455u, 3484533538u, 3073937876u,
  2117. 908466956u, 661391539u, 2342122412u, 1467049112u,
  2118. 1785800827u,
  2119. 135343033u,
  2120. 139643209u, 2438375667u, 974654058u, 3216478230u,
  2121. 3807620420u, 779043363u, 2812846449u, 333254784u,
  2122. 1025244024u,
  2123. 2242303095u,
  2124. 2476683742u, 350018683u, 174652916u, 933097576u,
  2125. 826905896u, 559603581u, 2777181260u, 164915169u,
  2126. 4070353203u,
  2127. 1459055748u,
  2128. 297303985u, 3103837241u, 3812514233u, 232265137u,
  2129. 2032819099u, 1523091376u, 3531238208u, 1403510182u,
  2130. 2886832080u,
  2131. 2599705941u,
  2132. 2789695716u, 68437968u, 3823813791u, 1040994569u,
  2133. 3024194990u, 2461740520u, 3735391266u, 2042207153u,
  2134. 2461678616u,
  2135. 3519231840u,
  2136. 1344224923u, 411442756u, 1179779351u, 7661528u,
  2137. 778352196u, 3288808867u, 589356197u, 2627504511u,
  2138. 3374744599u,
  2139. 3312172905u,
  2140. 357423007u, 3539567796u, 4044452215u, 1445118403u,
  2141. 2937983820u, 184089910u, 346201845u, 2427295202u,
  2142. 1345448010u,
  2143. 2884434843u,
  2144. 3085001879u, 2640105409u, 315310640u, 3530289798u,
  2145. 3362974764u, 963602652u, 75228477u, 3509381180u,
  2146. 4012777756u,
  2147. 2380345941u,
  2148. 1073137836u, 2083960378u, 1220315185u, 3628720934u,
  2149. 3508867818u, 67148343u, 3558085158u, 1753943368u,
  2150. 863309561u,
  2151. 2844713625u,
  2152. 441921850u, 854732254u, 816793316u, 2555428747u,
  2153. 3440623414u, 1707304366u, 3189874375u, 1623229221u,
  2154. 1220335976u,
  2155. 806745430u,
  2156. 3909262947u, 1680369031u, 2926179486u, 3410391660u,
  2157. 3991630434u, 2876458763u, 1179167079u, 536360759u,
  2158. 1592117159u,
  2159. 1514343977u,
  2160. 1032622306u, 2057494855u, 784938958u, 178402996u,
  2161. 1152907972u, 2326185495u, 2939973666u, 4181120253u,
  2162. 552831733u,
  2163. 664251856u,
  2164. 1297139539u, 1969357631u, 1474065957u, 3055419017u,
  2165. 3395829380u, 3316562752u, 2168409017u, 614624786u,
  2166. 3585854336u,
  2167. 668291094u,
  2168. 1162889217u, 3773171307u, 2263271126u, 355089668u,
  2169. 3195850578u, 3396793277u, 3519870267u, 527857605u,
  2170. 3972392320u,
  2171. 2224315010u,
  2172. 4047225561u, 3271434798u, 3192704713u, 2798505213u,
  2173. 3932215896u, 3792924012u, 3796843756u, 453872975u,
  2174. 4050552799u,
  2175. 1056432676u,
  2176. 928166947u, 121311642u, 930989547u, 2087070683u,
  2177. 1288978057u, 1556325239u, 1812435626u, 1682385724u,
  2178. 1214364933u,
  2179. 904760776u,
  2180. 3957045528u, 3949822847u, 2411065880u, 3716420732u,
  2181. 3424837835u, 3833550693u, 1799375326u, 2012368921u,
  2182. 2768764136u,
  2183. 1786111037u,
  2184. 4055479315u, 3751639533u, 2808224623u, 3492656387u,
  2185. 1306824780u, 2624000170u, 3134795218u, 1778409297u,
  2186. 3900821801u,
  2187. 593336325u,
  2188. 2772069220u, 2980873673u, 3574497158u, 3994780459u,
  2189. 4246519854u, 3482758570u, 4228015183u, 33101083u,
  2190. 1769887734u,
  2191. 4158035314u,
  2192. 3690638998u, 1119035482u, 4134969651u, 2483207353u,
  2193. 3932823321u, 285829887u, 3485140138u, 1304815138u,
  2194. 995608264u,
  2195. 3133997465u,
  2196. 1195477617u, 2147693728u, 3506673112u, 4234467492u,
  2197. 1183174337u, 1395340482u, 769199343u, 193262308u,
  2198. 2798920256u,
  2199. 3827889422u,
  2200. 3399695609u, 3036045724u, 2999477386u, 3567001759u,
  2201. 2682864314u, 1414023907u, 3699872975u, 3369870701u,
  2202. 2662284872u,
  2203. 2179640019u,
  2204. 2485080099u, 3234415609u, 3755915606u, 1339453220u,
  2205. 1567403399u, 2076272391u, 293946298u, 3861962750u,
  2206. 1291949822u,
  2207. 2916864995u,
  2208. 132642326u, 2215117062u, 2205863575u, 2488805750u,
  2209. 405632860u, 3248129390u, 2952606864u, 896734759u,
  2210. 2047417173u,
  2211. 3865951392u,
  2212. 657296855u, 1328547532u, 3966511825u, 3959682388u,
  2213. 4171801020u, 2981416957u, 1868896247u, 790081075u,
  2214. 3143666398u,
  2215. 2950766549u,
  2216. 2065854887u, 2737081890u, 995061774u, 1510712611u,
  2217. 2865954809u, 565044286u, 1565631102u, 1500654931u,
  2218. 494822108u,
  2219. 2803515503u,
  2220. 1058154996u, 3506280187u, 856885925u, 4204610546u,
  2221. 800905649u, 1130711562u, 558146282u, 2053400666u,
  2222. 449794061u,
  2223. 2643520245u,
  2224. 2101248725u, 3123292429u, 3583524041u, 983372394u,
  2225. 1587743780u, 672870813u, 444833475u, 100741452u,
  2226. 366232251u,
  2227. 1717951248u,
  2228. 524144122u, 1362432726u, 1304947719u, 674306020u,
  2229. 405665887u, 4081931036u, 1580408204u, 2343242778u,
  2230. 3901654006u,
  2231. 2627173567u,
  2232. 3015148205u, 814686701u, 1327920712u, 1346494176u,
  2233. 2468632605u, 2259795544u, 2519278184u, 2129281928u,
  2234. 2860266380u,
  2235. 4001619412u,
  2236. 1154910973u, 2841022216u, 1199925485u, 1372200293u,
  2237. 2713179055u, 3609776550u, 2896463880u, 1056406892u,
  2238. 177413841u,
  2239. 40180172u,
  2240. 3274788406u, 660921784u, 1686225028u, 4003382965u,
  2241. 2532691887u, 4256809101u, 1186018983u, 667359096u,
  2242. 2375266493u,
  2243. 2760222015u,
  2244. 745187078u, 312264012u, 396822261u, 2588536966u,
  2245. 2026998998u, 1766454365u, 3218807676u, 3915487497u,
  2246. 2630550356u,
  2247. 4130063378u,
  2248. 4231937074u, 752212123u, 3085144349u, 3267186363u,
  2249. 4103872100u, 4193207863u, 1306401710u, 3014853131u,
  2250. 1067760598u,
  2251. 2306188342u,
  2252. 2437881506u, 4258185052u, 2506507580u, 130876929u,
  2253. 1076894205u, 4106981702u, 2799540844u, 945747327u,
  2254. 1436722291u,
  2255. 2499772225u,
  2256. 2571537041u, 2038830635u, 2066826058u, 2892892912u,
  2257. 524875858u, 3392572161u, 2869992096u, 1308273341u,
  2258. 923668994u,
  2259. 1980407857u,
  2260. 2275009652u, 240598096u, 2658376530u, 3505603048u,
  2261. 1022603789u, 582423424u, 846379327u, 4092636095u,
  2262. 4177298326u,
  2263. 1004173023u,
  2264. 2154027018u, 2993634669u, 1098364089u, 3035642175u,
  2265. 1335688126u, 1376393415u, 1252369770u, 3815033328u,
  2266. 1999309358u,
  2267. 1234054757u,
  2268. 1388595255u, 2859334775u, 366532860u, 3453410395u,
  2269. 4226967708u, 1321729870u, 2078463405u, 156766592u,
  2270. 3157683394u,
  2271. 3549293384u,
  2272. 3348214547u, 2879648344u, 1144813399u, 2758966254u,
  2273. 647753581u, 813615926u, 2035441590u, 1961053117u,
  2274. 600168686u,
  2275. 2192833387u,
  2276. 3156481401u, 3627320321u, 383550248u, 81209584u,
  2277. 2339331745u, 1284116690u, 1980144976u, 2955724163u,
  2278. 789301728u,
  2279. 3842040415u,
  2280. 1115881490u, 965249078u, 4098663322u, 1870257033u,
  2281. 2923150701u, 4217108433u, 183816559u, 2104089285u,
  2282. 2640095343u,
  2283. 3173757052u,
  2284. 927847464u, 2383114981u, 4287174363u, 1886129652u,
  2285. 70635161u, 1182924521u, 1121440038u, 4246220730u,
  2286. 3890583049u,
  2287. 975913757u,
  2288. 2436253031u, 1074894869u, 1301280627u, 992471939u,
  2289. 735658128u, 244441856u, 1541612456u, 3457776165u,
  2290. 3503534059u,
  2291. 1931651133u,
  2292. 349142786u, 3669028584u, 1828812038u, 99128389u,
  2293. 1364272849u, 1963678455u, 3971963311u, 2316950886u,
  2294. 1308901796u,
  2295. 2789591580u,
  2296. 1460494965u, 2380227479u, 1577190651u, 1755822080u,
  2297. 2911014607u, 859387544u, 13023113u, 2319243370u,
  2298. 2522582211u,
  2299. 2299110490u,
  2300. 3342378874u, 2589323490u, 1884430765u, 3739058655u,
  2301. 2419330954u, 355389916u, 273950915u, 3670136553u,
  2302. 410946824u,
  2303. 3174041420u,
  2304. 2609010298u, 3059091350u, 2300275014u, 725729828u,
  2305. 2548380995u, 1738849964u, 1257081412u, 79430455u,
  2306. 810321297u,
  2307. 3246190593u,
  2308. 1007937684u, 912115394u, 40880059u, 3450073327u,
  2309. 4289832174u, 2253485111u, 1065639151u, 2953189309u,
  2310. 124779113u,
  2311. 654299738u,
  2312. 115760833u, 1250932069u, 884995826u, 3998908281u,
  2313. 1382882981u, 1134187162u, 3202324501u, 487502928u,
  2314. 3032756345u,
  2315. 4057517628u,
  2316. 933197381u, 2319223127u, 2044528655u, 2554572663u,
  2317. 4049450620u, 1620812836u, 2832905391u, 2273005481u,
  2318. 1913090121u,
  2319. 1055456023u,
  2320. 510593296u, 3285343192u, 2912822536u, 1645225063u,
  2321. 638418430u, 452701300u, 1025483165u, 1639370512u,
  2322. 167948643u,
  2323. 2809842730u,
  2324. 2983135664u, 407521332u, 1543756616u, 3949773145u,
  2325. 4283462892u, 659962275u, 3878013463u, 1000748756u,
  2326. 4053212051u,
  2327. 4099239406u,
  2328. 3467581965u, 354635541u, 21301844u, 3831212473u,
  2329. 3189450571u, 2264401966u, 4096484849u, 1736448515u,
  2330. 3976926096u,
  2331. 3727194724u,
  2332. 2243487039u, 585209095u, 3143046007u, 969558123u,
  2333. 3037113502u, 3594170243u, 2835860223u, 3775493975u,
  2334. 2787220812u,
  2335. 2274252217u,
  2336. 2915380701u, 3077533278u, 1252871826u, 1519790952u,
  2337. 205297661u, 2950557658u, 3956882191u, 2724439401u,
  2338. 3694608025u,
  2339. 124028038u,
  2340. 216019153u, 1533010676u, 2259986336u, 2014061617u,
  2341. 2068617849u, 3078123052u, 2692046098u, 1582812948u,
  2342. 396916232u,
  2343. 1470894001u,
  2344. 1694309312u, 300268215u, 1553892743u, 671176040u,
  2345. 1544988994u, 2793402821u, 4194972569u, 2296476154u,
  2346. 748354332u,
  2347. 3491325898u,
  2348. 4261053291u, 1104998242u, 797816835u, 243564059u,
  2349. 2197717393u, 299029458u, 1675252188u, 3139770041u,
  2350. 583018574u,
  2351. 2532106100u,
  2352. 2099391658u, 3760526730u, 3422719327u, 3556917689u,
  2353. 2374009285u, 2130865894u, 3710563151u, 1437538307u,
  2354. 3938030842u,
  2355. 2006930694u,
  2356. 2151243336u, 1939741287u, 1957068175u, 2135147479u,
  2357. 649553342u, 1713643042u, 4188696599u, 1698739939u,
  2358. 3549427584u,
  2359. 1016382174u,
  2360. 322644378u, 2476164549u, 2037263020u, 88036019u,
  2361. 2548960923u, 539867919u, 2871157727u, 4031659929u,
  2362. 754087252u,
  2363. 972656559u,
  2364. 4246379429u, 3877308578u, 2059459630u, 3614934323u,
  2365. 1410565271u, 2102980459u, 215395636u, 1083393481u,
  2366. 3775523015u,
  2367. 2062750105u,
  2368. 2475645882u, 3041186774u, 3534315423u, 758607219u,
  2369. 1686100614u, 180500983u, 1155581185u, 1476664671u,
  2370. 2918661695u,
  2371. 3812731350u,
  2372. 4003853737u, 4148884881u, 1468469436u, 3278880418u,
  2373. 1045838071u, 1049161262u, 360450415u, 3158065524u,
  2374. 814443735u,
  2375. 3391401707u,
  2376. 729968410u, 738771593u, 3662738792u, 1672830580u,
  2377. 4199496163u, 188487238u, 219098233u, 2141731267u,
  2378. 3890250614u,
  2379. 2988780375u,
  2380. 4026279523u, 3489429375u, 2468433807u, 1178270701u,
  2381. 2685094218u, 2716621497u, 3718335529u, 2273344755u,
  2382. 701110882u,
  2383. 1925717409u,
  2384. 1515176562u, 2325460593u, 3954798930u, 784566105u,
  2385. 3769422266u, 1641530321u, 2703876862u, 2907480267u,
  2386. 1828076455u,
  2387. 1805635221u,
  2388. 3883381245u, 1476756210u, 2072514392u, 3658557081u,
  2389. 2003610746u, 2556845550u, 729594004u, 3303898266u,
  2390. 1968227254u,
  2391. 423204951u,
  2392. 231828688u, 4223697811u, 698619045u, 3636824418u,
  2393. 2738779239u, 2333529003u, 2833158642u, 580285428u,
  2394. 3038148234u,
  2395. 1012378004u,
  2396. 1113647298u, 1424593483u, 4053247723u, 1167152941u,
  2397. 2677383578u, 3419485379u, 2135673840u, 440478166u,
  2398. 1682229112u,
  2399. 3226724137u,
  2400. 1217439806u, 3828726923u, 3636576271u, 3467643156u,
  2401. 2005614908u, 2655346461u, 2345488441u, 1027557096u,
  2402. 3594084220u,
  2403. 1372306343u,
  2404. 2342583762u, 4291342905u, 4094931814u, 3254771759u,
  2405. 821978248u, 2404930117u, 1143937655u, 3156949255u,
  2406. 3460606610u,
  2407. 449701786u,
  2408. 3474906110u, 1932585294u, 2283357584u, 1808481478u,
  2409. 3522851029u, 3040164731u, 1530172182u, 2950426149u,
  2410. 1402416557u,
  2411. 756419859u,
  2412. 4132576145u, 724994790u, 2852015871u, 2177908339u,
  2413. 899914731u, 139675671u, 1423281870u, 3198458070u,
  2414. 807581308u,
  2415. 2021611521u,
  2416. 1801452575u, 1425984297u, 2833835949u, 1536827865u,
  2417. 3902351840u, 164546042u, 1872840974u, 3986194780u,
  2418. 792156290u,
  2419. 3378681896u,
  2420. 941547959u, 3931328334u, 3661060482u, 2386420777u,
  2421. 3920146272u, 3458621279u, 3348500844u, 2269586542u,
  2422. 797371473u,
  2423. 3188953649u,
  2424. 80514771u, 2913333490u, 1246325623u, 3253846094u,
  2425. 1723906239u, 1606413555u, 587500718u, 1412413859u,
  2426. 2310046829u,
  2427. 2113313263u,
  2428. 3855635608u, 47271944u, 1112281934u, 3440228404u,
  2429. 2633519166u, 425094457u, 307659635u, 67338587u,
  2430. 2412987939u,
  2431. 2363930989u,
  2432. 2853008596u, 2844637339u, 922568813u, 130379293u,
  2433. 2825204405u, 2904442145u, 1176875333u, 1511685505u,
  2434. 599177514u,
  2435. 1872681372u,
  2436. 682394826u, 1888849790u, 3635304282u, 1761257265u,
  2437. 1571292431u, 355247075u, 1177210823u, 1691529530u,
  2438. 3629531121u,
  2439. 3760474006u,
  2440. 1129340625u, 868116266u, 3908237785u, 1942124366u,
  2441. 1266630014u, 3214841995u, 334023850u, 1110037019u,
  2442. 369650727u,
  2443. 1288666741u,
  2444. 70535706u, 20230114u, 4284225520u, 727856157u,
  2445. 293696779u, 1244943770u, 3976592462u, 560421917u,
  2446. 4171688499u,
  2447. 2438786950u,
  2448. 1218144639u, 3809125983u, 1302395746u, 534542359u,
  2449. 2121993015u, 2899519374u, 3192177626u, 1761707794u,
  2450. 3101683464u,
  2451. 1555403906u,
  2452. 3225675390u, 1875263768u, 4278894569u, 651707603u,
  2453. 2111591484u, 3802716028u, 2900262228u, 1181469202u,
  2454. 3254743797u,
  2455. 1822684466u,
  2456. 860641829u, 3046128268u, 1284833012u, 1125261608u,
  2457. 461384524u, 2331344566u, 1274400010u, 990498321u,
  2458. 3462536298u,
  2459. 3796842585u,
  2460. 2346607194u, 279495949u, 3951194590u, 3522664971u,
  2461. 3169688303u, 726831706u, 1123875117u, 1816166599u,
  2462. 3759808754u,
  2463. 2918558151u,
  2464. 3713203220u, 3369939267u, 466047109u, 384042536u,
  2465. 587271104u, 2191634696u, 2449929095u, 1157932232u,
  2466. 2084466674u,
  2467. 841370485u,
  2468. 3241372562u, 4277738486u, 2150836793u, 1173569449u,
  2469. 778768930u, 2594706485u, 3065269405u, 3019263663u,
  2470. 2660146610u,
  2471. 2789946230u,
  2472. 77056913u, 728174395u, 3647185904u, 804562358u,
  2473. 2697276483u, 881311175u, 1178696435u, 2059173891u,
  2474. 2308303791u,
  2475. 221481230u,
  2476. 50241451u, 3689414100u, 1969074761u, 2732071529u,
  2477. 1900890356u, 840789500u, 2100609300u, 985565597u,
  2478. 1220850414u,
  2479. 2456636259u,
  2480. 223607678u, 1016310244u, 1937434395u, 85717256u,
  2481. 275058190u, 3712011133u, 171916016u, 2389569096u,
  2482. 3679765802u,
  2483. 3575358777u,
  2484. 3481108261u, 3178286380u, 2489642395u, 2931039055u,
  2485. 3086601621u, 3079518902u, 3027718495u, 2506894644u,
  2486. 2976869602u,
  2487. 2134336365u,
  2488. 2420172217u, 918054427u, 661522682u, 1403791357u,
  2489. 3587174388u, 2623673551u, 1355661457u, 4159477684u,
  2490. 1109013587u,
  2491. 3112183488u,
  2492. 2217849279u, 3500291996u, 2419603731u, 2929886201u,
  2493. 3854470013u, 1358382103u, 1357666555u, 21053566u,
  2494. 2716621233u,
  2495. 3094836862u,
  2496. 3309729704u, 57086558u, 839187419u, 2757944838u,
  2497. 3651040558u, 3607536716u, 3691257732u, 2312878285u,
  2498. 1202511724u,
  2499. 183479927u,
  2500. 2509829803u, 109313218u, 478173887u, 2072044014u,
  2501. 190631406u, 2495604975u, 1010416260u, 3679857586u,
  2502. 726566957u,
  2503. 258500881u,
  2504. 1805873908u, 3081447051u, 2352101327u, 534922207u,
  2505. 1584552873u, 813470716u, 255914637u, 249169434u,
  2506. 3193498057u,
  2507. 1038802706u,
  2508. 2590158653u, 3147907290u, 663060128u, 1156177857u,
  2509. 634616100u, 312879189u, 1545020368u, 2054634247u,
  2510. 3271451914u,
  2511. 3438291534u,
  2512. 2181454946u, 3864535432u, 2398586877u, 896491075u,
  2513. 2810631478u, 2770357487u, 3372930052u, 898070638u,
  2514. 2051007323u,
  2515. 392959778u,
  2516. 36645539u, 3743556044u, 4134529680u, 4124451188u,
  2517. 566806297u, 2936523982u, 1304761965u, 537399498u,
  2518. 1940818842u,
  2519. 40862381u,
  2520. 36288410u, 3063605629u, 2826611650u, 3961972098u,
  2521. 1871578006u, 2392095486u, 1136931591u, 513864488u,
  2522. 173276451u,
  2523. 3039055682u,
  2524. 3543322032u, 1943592006u, 657217094u, 1751698246u,
  2525. 2969618445u, 456616022u, 900309519u, 113892716u,
  2526. 1126392103u,
  2527. 1235651045u,
  2528. 1882073852u, 2136610853u, 2353639710u, 2819956700u,
  2529. 3980083530u, 828773559u, 224069850u, 902434120u,
  2530. 2802008036u,
  2531. 94358995u,
  2532. 2777723394u, 2812641403u, 2525832595u, 4157388110u,
  2533. 4235563782u, 937800324u, 141690749u, 568062536u,
  2534. 550123849u,
  2535. 1330316521u,
  2536. 1949488696u, 2296431366u, 1958465262u, 3564751729u,
  2537. 3748252207u, 120455129u, 1607318832u, 2525729790u,
  2538. 2640987481u,
  2539. 2332096657u,
  2540. 1775969159u, 1555085077u, 2913525137u, 1347085183u,
  2541. 2376253113u, 3194050574u, 1806090610u, 678641356u,
  2542. 1499146713u,
  2543. 383849715u,
  2544. 3299835823u, 2284860330u, 2614269636u, 3913628844u,
  2545. 2761334210u, 1959484587u, 529797021u, 239966995u,
  2546. 3102194829u,
  2547. 3602307804u,
  2548. 1122192627u, 3577510006u, 164486066u, 1680137310u,
  2549. 1473396395u, 1467801424u, 903493660u, 1185943071u,
  2550. 2798556505u,
  2551. 2306744492u,
  2552. 3167201310u, 3577947177u, 3067592134u, 2905506289u,
  2553. 1210366329u, 204484056u, 2347778932u, 3862374472u,
  2554. 3277439508u,
  2555. 4187414621u,
  2556. 1646699310u, 621385800u, 3934869089u, 3975491588u,
  2557. 3580085916u, 1925674500u, 2436305348u, 3983301539u,
  2558. 2739439523u,
  2559. 3291507446u,
  2560. 3395637920u, 3753389171u, 2955202032u, 2654255623u,
  2561. 3771089254u, 2140443405u, 2779834738u, 3261942805u,
  2562. 3526889244u,
  2563. 1842009139u,
  2564. 4048484340u, 2106218403u, 2161244271u, 772152700u,
  2565. 1158647659u, 3776791619u, 3882186721u, 699525237u,
  2566. 2954670460u,
  2567. 1007105869u,
  2568. 3359152025u, 1146388699u, 1401550303u, 2326582541u,
  2569. 4181783540u, 1085644043u, 1942143795u, 1038368308u,
  2570. 1526153809u,
  2571. 4042547244u,
  2572. 1891441000u, 2573991874u, 1281441253u, 3635098284u,
  2573. 1980545715u, 825985487u, 3934748116u, 4228386979u,
  2574. 1480870944u,
  2575. 1042194545u,
  2576. 2397771642u, 2248490001u, 3817869868u, 878654626u,
  2577. 3785629484u, 1672470870u, 3229367873u, 1894538933u,
  2578. 1010692731u,
  2579. 1733824268u,
  2580. 656620328u, 3048283803u, 3353340056u, 2324965120u,
  2581. 4192585951u, 2284524675u, 3483884368u, 1510168293u,
  2582. 1554942691u,
  2583. 1309709396u,
  2584. 1241133168u, 3162179280u, 4046378054u, 3171681593u,
  2585. 1165297136u, 3496703563u, 150437903u, 1948622072u,
  2586. 1076332463u,
  2587. 2292479143u,
  2588. 1464229958u, 3479738093u, 2328067598u, 2334503110u,
  2589. 833324834u, 3981605747u, 3002629155u, 2854644186u,
  2590. 2832201336u,
  2591. 95796957u,
  2592. 3269249397u, 2358313329u, 3411860910u, 4283292480u,
  2593. 2802208697u, 1305947955u, 2156803420u, 1991340283u,
  2594. 189678024u,
  2595. 447602599u,
  2596. 1055411517u, 1531748363u, 1555852656u, 412402681u,
  2597. 3774988152u, 20597551u, 2925024131u, 1423989620u,
  2598. 3749428061u,
  2599. 1541439448u,
  2600. 112270416u, 1936224776u, 132162941u, 3772011507u,
  2601. 3814102518u, 1908807815u, 444154079u, 823765347u,
  2602. 3362275567u,
  2603. 3419047430u,
  2604. 2108287005u, 2315102125u, 658593738u, 3195094029u,
  2605. 3721937534u, 3176229204u, 3398835373u, 1271898712u,
  2606. 1142546577u,
  2607. 3185986817u,
  2608. 3562705803u, 2046119567u, 912990621u, 1829977672u,
  2609. 3459576979u, 1118045834u, 1369529376u, 3320601076u,
  2610. 3954988953u,
  2611. 4002467635u,
  2612. 3359456351u, 1314849568u, 1766750942u, 2998874853u,
  2613. 1181800239u, 707328036u, 3314954697u, 2066721120u,
  2614. 598194215u,
  2615. 1124451278u,
  2616. 3156679616u, 3742684743u, 2960199690u, 2683497915u,
  2617. 2566077529u, 937014607u, 102095219u, 4262922475u,
  2618. 3132264275u,
  2619. 1262099830u,
  2620. 862722905u, 2717653494u, 3245583534u, 3427209989u,
  2621. 3220278124u, 85457091u, 2222333500u, 3513997967u,
  2622. 3522324951u,
  2623. 2830855552u,
  2624. 2215004781u, 3482411840u, 4227160614u, 2030964411u,
  2625. 1741393851u, 2643723748u, 942813508u, 403442675u,
  2626. 3112048748u,
  2627. 530556423u,
  2628. 3817755244u, 3543286628u, 2247276090u, 1532920842u,
  2629. 4101962711u, 1446540991u, 3297821473u, 1861255389u,
  2630. 1984398u,
  2631. 2366525138u,
  2632. 377589481u, 3549193828u, 1427765914u, 506831657u,
  2633. 277278988u, 1447652775u, 3214362239u, 3142198690u,
  2634. 2843087541u,
  2635. 468915015u,
  2636. 807895062u, 2198723907u, 4031145069u, 2417156212u,
  2637. 4027298697u, 637175947u, 1229254212u, 1773257887u,
  2638. 1659444818u,
  2639. 451148891u,
  2640. 2099741368u, 735351990u, 2534775713u, 3261804619u,
  2641. 712519954u, 3527962772u, 3758642738u, 4245823575u,
  2642. 1281314264u,
  2643. 1167866160u,
  2644. 1489546151u, 1197354389u, 1043278102u, 2563326586u,
  2645. 371937794u, 2320164817u, 3189512691u, 573685198u,
  2646. 4108603513u,
  2647. 3758899588u,
  2648. 3507030163u, 2947201212u, 2529492585u, 578234375u,
  2649. 3362349842u, 3318878925u, 3611203517u, 3059253190u,
  2650. 4270755916u,
  2651. 4291274625u,
  2652. 4237586791u, 4137422245u, 2927218651u, 2444687041u,
  2653. 797128811u, 2043057612u, 396533859u, 2665256178u,
  2654. 3346510674u,
  2655. 1779586176u,
  2656. 3076562062u, 1882746214u, 921095362u, 2026988397u,
  2657. 514514911u, 3886379478u, 4218272420u, 1480386793u,
  2658. 3900160816u,
  2659. 2292273451u,
  2660. 1276138356u, 1125461821u, 1912885715u, 3365266013u,
  2661. 1333211627u, 4085009861u, 1390530102u, 3347984752u,
  2662. 2721771301u,
  2663. 1419492325u,
  2664. 4066766256u, 3250852311u, 820111852u, 1382201318u,
  2665. 2366036798u, 938032241u, 3100979439u, 487048687u,
  2666. 2292851045u,
  2667. 3241399180u,
  2668. 3912670510u, 2416437067u, 2973194517u, 3507707986u,
  2669. 1935099406u, 2533441488u, 104616731u, 2892622820u,
  2670. 3801190339u,
  2671. 4239188808u,
  2672. 807238241u, 3300121546u, 2249406147u, 4032114017u,
  2673. 3713738189u, 3324425575u, 4275607376u, 3663120298u,
  2674. 4173658372u,
  2675. 3984289690u,
  2676. 1827636846u, 3264588778u, 3297165529u, 558623533u,
  2677. 2728945672u, 1566297318u, 3447249966u, 481719551u,
  2678. 1596842050u,
  2679. 1838185946u,
  2680. 265271620u, 1050246315u, 4046655705u, 1844193138u,
  2681. 3807563245u, 1075384804u, 1292554949u, 1506525927u,
  2682. 2921816148u,
  2683. 2051885269u,
  2684. 1930534041u, 3872721086u, 1564489377u, 2272482181u,
  2685. 2849358683u, 589618304u, 2262072443u, 290363051u,
  2686. 299168363u,
  2687. 3867603931u,
  2688. 2868688756u, 2545263115u, 1092098533u, 3885725603u,
  2689. 2352430409u, 1981595469u, 2047946646u, 1332642839u,
  2690. 793806516u,
  2691. 214858837u,
  2692. 1061484659u, 3192394476u, 1115054785u, 3690637234u,
  2693. 996792368u, 2023479706u, 3046498231u, 4205835102u,
  2694. 3870714754u,
  2695. 257472875u,
  2696. 3549864599u, 2040276129u, 2414778670u, 812235477u,
  2697. 2674248196u, 1864096101u, 2257492689u, 1332556794u,
  2698. 1079540713u,
  2699. 465530720u,
  2700. 2304763972u, 830724724u, 3354588920u, 2510713652u,
  2701. 3103749409u, 468835585u, 1707620787u, 3038024846u,
  2702. 1000303198u,
  2703. 3462270146u,
  2704. 2748698899u, 2100348093u, 511537258u, 1237187486u,
  2705. 102049383u, 2268226698u, 3162251739u, 4219404629u,
  2706. 838822407u,
  2707. 1481440623u,
  2708. 2989224077u, 2676681975u, 3246551821u, 3812079906u,
  2709. 370572963u, 2283154352u, 3084789986u, 1961085583u,
  2710. 1955640586u,
  2711. 2409348147u,
  2712. 2284780581u, 1634818716u, 4018221729u, 2320761377u,
  2713. 3566831899u, 1799560520u, 91431959u, 1754113747u,
  2714. 1459430477u,
  2715. 3613658517u,
  2716. 924489906u, 3406317699u, 866289774u, 3924821603u,
  2717. 1265394945u, 1870668109u, 151949856u, 2747006534u,
  2718. 3111906201u,
  2719. 64039467u,
  2720. 2314447545u, 2600195638u, 4095795204u, 4162096026u,
  2721. 1026756826u, 2460047982u, 52686887u, 823198739u,
  2722. 1518045160u,
  2723. 2867527376u,
  2724. 566410761u, 2200433819u, 2114146405u, 2893790965u,
  2725. 881504901u, 974783212u, 490815659u, 937300283u,
  2726. 1523735309u,
  2727. 2511976468u,
  2728. 2634644947u, 355119367u, 1373773092u, 309232995u,
  2729. 3088671051u, 787126032u, 3442836843u, 4289194567u,
  2730. 2177850062u,
  2731. 1174136430u,
  2732. 3248982914u, 3129039732u, 1166851580u, 2196451882u,
  2733. 469595580u, 2130837700u, 3783349021u, 3745262548u,
  2734. 1236930515u,
  2735. 3032131496u,
  2736. 1525591437u, 1823628217u, 1939019255u, 1950270463u,
  2737. 3659899927u, 3688643445u, 3004399289u, 1155199552u,
  2738. 357547234u,
  2739. 2213110526u,
  2740. 3122658210u, 2667800490u, 2718690333u, 3512372076u,
  2741. 1098611683u, 2657518392u, 4248458835u, 3109874532u,
  2742. 1592908438u,
  2743. 2864927516u,
  2744. 3635248840u, 1251777186u, 3797340158u, 3508496870u,
  2745. 303354834u, 1482394062u, 2087100120u, 1595931912u,
  2746. 608574156u,
  2747. 723367884u,
  2748. 907938402u, 3357047807u, 1619629851u, 3092082995u,
  2749. 89030300u, 916336992u, 1861180168u, 3436334155u,
  2750. 1375000544u,
  2751. 3472936241u,
  2752. 1321217853u, 791356402u, 2872410224u, 2326250297u,
  2753. 2657644088u, 1748314108u, 4146771421u, 2913114440u,
  2754. 2924821844u,
  2755. 2101101496u,
  2756. 3268017251u, 2109603066u, 690665520u, 1830067573u,
  2757. 951427661u, 2982533150u, 3884512506u, 2358657479u,
  2758. 2833210784u,
  2759. 3419798214u,
  2760. 3785893994u, 2103940206u, 86759766u, 4031230616u,
  2761. 3745237192u, 2739453927u, 497038072u, 3303159408u,
  2762. 1251537249u,
  2763. 1993408196u,
  2764. 3185905715u, 2885948408u, 3154277110u, 2444150313u,
  2765. 2505582079u, 2120610195u, 3266465773u, 1814611964u,
  2766. 3080050407u,
  2767. 1079915522u,
  2768. 1819346505u, 2529946763u, 892097374u, 3740257161u,
  2769. 3618100441u, 1079900094u, 3607172225u, 737863389u,
  2770. 360704560u,
  2771. 3341993089u,
  2772. 1139047381u, 3132219631u, 1248981859u, 1109338159u,
  2773. 2004908615u, 4022302594u, 4166640860u, 2959140950u,
  2774. 3949235962u,
  2775. 2832278473u,
  2776. 2200524012u, 2634933043u, 2495844522u, 2613799818u,
  2777. 4034096813u, 683271795u, 1673546817u, 1363163726u,
  2778. 1805395136u,
  2779. 511749501u,
  2780. 1231032599u, 2305979751u, 345737783u, 3339868854u,
  2781. 2931857933u, 2323251738u, 1332068477u, 51846558u,
  2782. 3927238177u,
  2783. 1387182179u,
  2784. 1701238601u, 1419275173u, 2580882268u, 3357874599u,
  2785. 1726558907u, 1292901039u, 1371322339u, 1311713044u,
  2786. 3526735232u,
  2787. 4017884184u,
  2788. 3366093428u, 77140994u, 2128996229u, 1357915765u,
  2789. 4019691901u, 483989024u, 2390311750u, 2766065288u,
  2790. 3938587520u,
  2791. 3064810344u,
  2792. 1054589198u, 1274997019u, 4040589616u, 1277751144u,
  2793. 2274907047u, 4170399945u, 2886368209u, 4168922115u,
  2794. 3901237033u,
  2795. 3252972311u,
  2796. 2205185840u, 3403097556u, 3385493699u, 2809751370u,
  2797. 555319628u, 399539034u, 2998971454u, 1521596214u,
  2798. 178870216u,
  2799. 1471733541u,
  2800. 519629198u, 514159209u, 1500582242u, 1928616587u,
  2801. 2686427928u, 4133138798u, 1225914083u, 1432713584u,
  2802. 3559310915u,
  2803. 3925489366u,
  2804. 1055613123u, 4126676029u, 2723867653u, 3290604111u,
  2805. 1377022957u, 2373608155u, 3615237379u, 594338683u,
  2806. 2645257602u,
  2807. 2408427260u,
  2808. 917033274u, 750455097u, 625657657u, 121713200u,
  2809. 2191273413u, 4043949724u, 3293146785u, 3809297972u,
  2810. 3947296919u,
  2811. 115456894u,
  2812. 1529576616u, 1459278275u, 2157117997u, 1747859293u,
  2813. 4106665903u, 996939232u, 2007976332u, 4274649009u,
  2814. 1017725787u,
  2815. 4244666096u,
  2816. 1219631331u, 3072426253u, 3547691720u, 1620822012u,
  2817. 1397717508u, 2031597325u, 3345983430u, 2459068000u,
  2818. 3645130467u,
  2819. 2308642742u,
  2820. 359955852u, 1348467968u, 1133123059u, 2435919062u,
  2821. 2800365907u, 4213217210u, 4056565603u, 2811666556u,
  2822. 2318007236u,
  2823. 3823652401u,
  2824. 3654086429u, 1273260424u, 1591610446u, 943349350u,
  2825. 3441227678u, 3779964757u, 233818224u, 3469971032u,
  2826. 3764095096u,
  2827. 4009204587u,
  2828. 678472092u, 1990559652u, 2583121088u, 2978143652u,
  2829. 2496370864u, 2139539656u, 4287972050u, 295832576u,
  2830. 3536742861u,
  2831. 2257466133u,
  2832. 2738052161u, 1988611898u, 2466189642u, 3294419573u,
  2833. 2311186273u, 474374532u, 3081964174u, 2515138278u,
  2834. 835731677u,
  2835. 1178182694u,
  2836. 3352119543u, 2884763225u, 3462399574u, 2900817210u,
  2837. 1993698511u, 2868445043u, 2746444849u, 1205258179u,
  2838. 2353442946u,
  2839. 4079040070u,
  2840. 3624133102u, 2907136076u, 2902521697u, 426813211u,
  2841. 1418185512u, 3711189488u, 1351506552u, 1934749519u,
  2842. 46595543u,
  2843. 401688809u,
  2844. 3514602124u, 1396852607u, 1951477943u, 2502249173u,
  2845. 3199695820u, 2890250638u, 4205072507u, 1715623846u,
  2846. 3266686789u,
  2847. 3218688128u,
  2848. 1697759742u, 851227671u, 2358709645u, 4174233268u,
  2849. 500583683u, 3805940955u, 736234120u, 2710563712u,
  2850. 1949664540u,
  2851. 3139414003u,
  2852. 4293073253u, 1284406972u, 1785182449u, 1051548274u,
  2853. 2994248357u, 2499882522u, 717208669u, 2039517285u,
  2854. 518424929u,
  2855. 143136433u,
  2856. 2303774671u, 1272930860u, 2286410920u, 788459311u,
  2857. 273225293u, 2439291703u, 2254505236u, 3446287701u,
  2858. 3655156558u,
  2859. 1546628787u,
  2860. 340081500u, 3285722006u, 1324810435u, 1053980860u,
  2861. 1779472859u, 2700355724u, 686005017u, 3762376315u,
  2862. 3963193100u,
  2863. 1370881135u,
  2864. 661300087u, 1152753704u, 2349891598u, 3910051187u,
  2865. 2109444785u, 1311123870u, 2639837565u, 1896770931u,
  2866. 1081414128u,
  2867. 869877586u,
  2868. 4284220400u, 63045374u, 235968615u, 184451062u,
  2869. 1271099822u, 1319179857u, 3274963209u, 4172272710u,
  2870. 3388797445u,
  2871. 2965973320u,
  2872. 3793110097u, 3327241723u, 2991804005u, 1199544355u,
  2873. 771553759u, 2031749842u, 2596517372u, 1199888213u,
  2874. 858347951u,
  2875. 3340178832u,
  2876. 2903875412u, 763490382u, 76949161u, 2056544406u,
  2877. 1145227689u, 998233136u, 2354530024u, 427713587u,
  2878. 3537837347u,
  2879. 604661755u,
  2880. 923986833u, 1023730418u, 798294227u, 432557449u,
  2881. 801802449u, 1861313429u, 3899128441u, 4068407979u,
  2882. 2352677083u,
  2883. 3783539925u,
  2884. 10731973u, 3390767975u, 3949540249u, 1920121661u,
  2885. 3248580201u, 641956426u, 2104847395u, 604835744u,
  2886. 1491663404u,
  2887. 4255204651u,
  2888. 1520970746u, 2845653368u, 3247412938u, 3730629005u,
  2889. 855569514u, 3073294700u, 2429691698u, 3818342476u,
  2890. 3938869985u,
  2891. 2731201328u,
  2892. 2335202643u, 778117742u, 13298408u, 228780590u,
  2893. 2871715314u, 3253688653u, 4150999702u, 3846220408u,
  2894. 930808u,
  2895. 1397128726u,
  2896. 1964216488u, 2781092828u, 116285375u, 2271239476u,
  2897. 3724347554u, 2931203895u, 3893169206u, 1883912528u,
  2898. 2093892660u,
  2899. 3658787024u,
  2900. 3095016046u, 1094059199u, 3640239610u, 558564267u,
  2901. 2102812456u, 464734873u, 925262247u, 1609838036u,
  2902. 588364741u,
  2903. 1731409233u,
  2904. 1576165139u, 3933979268u, 375316394u, 4247099643u,
  2905. 3670508019u, 4080496835u, 2371248533u, 183762693u,
  2906. 2078935389u,
  2907. 2699810414u,
  2908. 1491815683u, 2999180789u, 1831158425u, 1603373553u,
  2909. 2006136905u, 3210230591u, 416748595u, 1536971415u,
  2910. 3271869367u,
  2911. 1266062739u,
  2912. 2138414557u, 3337114778u, 1634586826u, 36472629u,
  2913. 4482244u, 568009609u, 2721216780u, 4037289545u,
  2914. 2235138807u,
  2915. 1789351460u,
  2916. 4067539527u, 1323062829u, 3864620647u, 4192026301u,
  2917. 4278901241u, 1399025382u, 2826652805u, 1363860382u,
  2918. 1801770651u,
  2919. 1613381526u,
  2920. 1165249276u, 4046576622u, 2535596946u, 3260388176u,
  2921. 1078898578u, 2259750862u, 643387587u, 237144235u,
  2922. 4199571427u,
  2923. 3440917581u,
  2924. 3067939258u, 2018625455u, 1460528353u, 3138629939u,
  2925. 1666223528u, 3841139376u, 2528281125u, 885565193u,
  2926. 2609492686u,
  2927. 2517257479u,
  2928. 560864620u, 2261471820u, 3491559165u, 1329620416u,
  2929. 622383582u, 1759597655u, 2877873893u, 584692817u,
  2930. 1901728399u,
  2931. 2599000260u,
  2932. 3169771644u, 296332336u, 774719455u, 4175920823u,
  2933. 2287316070u, 4115615023u, 1073335619u, 4240292725u,
  2934. 1359158837u,
  2935. 1960974237u,
  2936. 3173724597u, 1619084286u, 2876340752u, 4065675347u,
  2937. 480741335u, 1237329941u, 701055566u, 3729009837u,
  2938. 1314736422u,
  2939. 4003180069u,
  2940. 3118519317u, 3035354420u, 3380357671u, 4020909015u,
  2941. 253958714u, 3545798863u, 3008185002u, 2624719888u,
  2942. 3219955575u,
  2943. 3060719376u,
  2944. 573101682u, 1580316843u, 2610493412u, 3490983536u,
  2945. 3601975611u, 851470366u, 635384901u, 3427048824u,
  2946. 1470002757u,
  2947. 3592460087u,
  2948. 2265226856u, 4124282457u, 2106385486u, 3334305617u,
  2949. 4208282753u, 3798749815u, 225396466u, 118791182u,
  2950. 2523395972u,
  2951. 194595464u,
  2952. 2563824631u, 2521301383u, 4224409406u, 468670274u,
  2953. 1761966400u, 1300908277u, 2570709228u, 1847901526u,
  2954. 1470099163u,
  2955. 2690466752u,
  2956. 1472536718u, 2399279735u, 4150607803u, 1775080054u,
  2957. 2082537685u, 4080034578u, 1256001880u, 392967725u,
  2958. 2055838940u,
  2959. 3349115816u,
  2960. 1745947263u, 2213925887u, 1836572741u, 2417722792u,
  2961. 636223705u, 2423329294u, 3960951311u, 1543591052u,
  2962. 1547914361u,
  2963. 2760945653u,
  2964. 3519014111u, 313543871u, 4119598884u, 1071003714u,
  2965. 2192556597u, 1526995535u, 3929839778u, 536388591u,
  2966. 3040873792u,
  2967. 3752682932u,
  2968. 1640614237u, 2432794021u, 385337403u, 2794410617u,
  2969. 2386128075u, 1055206708u, 1422747714u, 3759330929u,
  2970. 2533597496u,
  2971. 30440955u,
  2972. 1482899460u, 3350385050u, 616259409u, 3980103795u,
  2973. 1211364140u, 1040071544u, 594746920u, 1645973936u,
  2974. 2547331531u,
  2975. 1097726368u,
  2976. 700666526u, 2976247482u, 1144906608u, 996506677u,
  2977. 1997130756u, 800321417u, 1392942823u, 1601662248u,
  2978. 2079778663u,
  2979. 529512908u,
  2980. 2925120134u, 4106433085u, 630221833u, 2423086156u,
  2981. 1119859778u, 1726827981u, 1870859181u, 2559832707u,
  2982. 1792284257u,
  2983. 2059356387u,
  2984. 3572353364u, 3229407475u, 575621095u, 3221893291u,
  2985. 2372428048u, 2020123035u, 961449593u, 2243824063u,
  2986. 3803906611u,
  2987. 3735348189u,
  2988. 2981620804u, 4180681078u, 1555330629u, 230736535u,
  2989. 2075526640u, 749652975u, 713664372u, 2152096659u,
  2990. 2142067223u,
  2991. 3322302242u,
  2992. 1421646830u, 2092832615u, 1213735101u, 3192136753u,
  2993. 1106723940u, 3455398230u, 2541685524u, 2529956739u,
  2994. 3789430647u,
  2995. 1950084508u,
  2996. 2157395621u, 850457360u, 2758902426u, 2848030169u,
  2997. 6506379u, 1162213157u, 2981459221u, 272690871u,
  2998. 3059420255u,
  2999. 4242691285u,
  3000. 588065598u, 1206949936u, 3968214184u, 566348532u,
  3001. 126142880u, 1480567086u, 2959621988u, 2050218418u,
  3002. 2242731195u,
  3003. 3833514449u,
  3004. 1898070331u, 3687399477u, 3891859374u, 868185955u,
  3005. 2335308774u, 3676335246u, 3871121805u, 2189032743u,
  3006. 3275728647u,
  3007. 860492892u,
  3008. 1590764344u, 4130384758u, 262871548u, 3004764525u,
  3009. 2685542071u, 991231482u, 435122019u, 3031116998u,
  3010. 2898921700u,
  3011. 2917932604u,
  3012. 4238665148u, 2459072654u, 3444612545u, 4207731740u,
  3013. 1808564313u, 2798532269u, 3944553556u, 3926395409u,
  3014. 1633200670u,
  3015. 4138335224u,
  3016. 2524878605u, 4184292650u, 3563398268u, 4288943552u,
  3017. 3802121210u, 957502058u, 2410820887u, 4227117506u,
  3018. 4018625153u,
  3019. 4284329158u,
  3020. 530216712u, 2978986531u, 863452221u, 1910162118u,
  3021. 4088211378u, 4091971261u, 3150811451u, 4200871487u,
  3022. 3794038652u,
  3023. 3041564310u,
  3024. 2045287082u, 887805614u, 2889167251u, 4120352181u,
  3025. 1699912580u, 3478922097u, 3211994687u, 3136177842u,
  3026. 1500806861u,
  3027. 3211881347u,
  3028. 2147976385u, 3342722260u, 3359650541u, 4197378460u,
  3029. 781354073u, 1533623029u, 2204677828u, 3228172832u,
  3030. 3248592437u,
  3031. 3355841359u,
  3032. 560815159u, 1144951236u, 4027015711u, 2882625391u,
  3033. 339363613u, 2354572719u, 1769831876u, 4238589331u,
  3034. 1519732871u,
  3035. 2185834614u,
  3036. 1601096831u, 129709881u, 39655633u, 367604993u,
  3037. 1737681770u, 3259114599u, 2767070452u, 872365177u,
  3038. 1574125529u,
  3039. 3405020189u,
  3040. 4181346685u, 1134030380u, 403769171u, 2193351164u,
  3041. 1426232618u, 2885309450u, 3033612627u, 924948363u,
  3042. 935514094u,
  3043. 3202053329u,
  3044. 912294839u, 1618472324u, 4159158431u, 3744999487u,
  3045. 777064358u, 3974213124u, 1990246048u, 309725290u,
  3046. 2449849392u,
  3047. 1943692420u,
  3048. 2288635750u, 2433793635u, 2168904061u, 683315308u,
  3049. 3081493019u, 3477759434u, 3815496269u, 2823504699u,
  3050. 586945121u,
  3051. 3088963200u,
  3052. 3492287335u, 636875049u, 1111206944u, 2037346120u,
  3053. 1282050044u, 1409681512u, 1786128584u, 755810950u,
  3054. 2332676758u,
  3055. 2178142310u,
  3056. 957827166u, 1014983590u, 1888800725u, 3608595803u,
  3057. 3200072714u, 2534008478u, 659336139u, 1281728287u,
  3058. 4060560529u,
  3059. 2915575125u,
  3060. 3521503774u, 2926487340u, 1096297674u, 653489861u,
  3061. 2352326980u, 2561136777u, 1224141198u, 1250479629u,
  3062. 1297625391u,
  3063. 2409997371u,
  3064. 1942483722u, 2481835750u, 1394715707u, 1673070941u,
  3065. 2456039704u, 3980558014u, 3547934764u, 1882038812u,
  3066. 1078160498u,
  3067. 2488279087u,
  3068. 1848235245u, 1211914722u, 2264928765u, 2807773070u,
  3069. 270145554u, 583747883u, 3826009010u, 2996618216u,
  3070. 425727157u,
  3071. 992726957u,
  3072. 3384462280u, 726650661u, 1955043265u, 1923879512u,
  3073. 1854693773u, 2987614542u, 2660044993u, 2457260810u,
  3074. 426299370u,
  3075. 2671892900u,
  3076. 1827308087u, 3083953443u, 1791749638u, 3265087416u,
  3077. 2119752201u, 2547122538u, 3990783236u, 1912713468u,
  3078. 3688865211u,
  3079. 1815780016u,
  3080. 303699291u, 2416763742u, 2690891610u, 1535193548u,
  3081. 1107803989u, 1504143133u, 2235270371u, 2545884083u,
  3082. 2276278682u,
  3083. 411724404u,
  3084. 3416925704u, 2565792091u, 3383911757u, 546058824u,
  3085. 3374654444u, 2364630415u, 2693473470u, 2622125691u,
  3086. 261864817u,
  3087. 55682470u,
  3088. 857617568u, 141304067u, 1885488541u, 155368182u,
  3089. 1281949051u, 3384522408u, 3254816901u, 1959816782u,
  3090. 1452224057u,
  3091. 2830267691u,
  3092. 3709231247u, 58988202u, 4218130458u, 2984061349u,
  3093. 1888707848u, 4223605071u, 4241442486u, 375269213u,
  3094. 3208327038u,
  3095. 2199916493u,
  3096. 550337252u, 2855061437u, 276088636u, 114362204u,
  3097. 2321163647u, 2127813633u, 3289403024u, 2686973202u,
  3098. 2717376797u,
  3099. 3593428039u,
  3100. 3648831666u, 890925902u, 3289404818u, 3289516821u,
  3101. 4248913260u, 1858916580u, 3303932308u, 1752797086u,
  3102. 1628149686u,
  3103. 3245893605u,
  3104. 1568537311u, 2844194502u, 1593855770u, 2408174109u,
  3105. 124797514u, 2085649512u, 3188565660u, 2264996276u,
  3106. 1926696513u,
  3107. 3053957740u,
  3108. 2238806881u, 2189050973u, 203685243u, 379855590u,
  3109. 3920271562u, 1058600179u, 3698061923u, 4255106849u,
  3110. 608401664u,
  3111. 1598041932u,
  3112. 3318266418u, 2535016555u, 852760884u, 1918098822u,
  3113. 2200437599u, 1532285043u, 3425662132u, 3561293706u,
  3114. 2231633206u,
  3115. 4108785088u,
  3116. 3359152801u, 173534780u, 208383607u, 2862988169u,
  3117. 2406642243u, 426814583u, 2777335795u, 3322703596u,
  3118. 954190623u,
  3119. 615093090u,
  3120. 4179102978u, 2452847930u, 100239619u, 42471741u,
  3121. 818352432u, 2190624654u, 504379960u, 3631619975u,
  3122. 633412456u,
  3123. 1018421783u,
  3124. 842645419u, 711808707u, 3424580813u, 2132457941u,
  3125. 1158335882u, 3567952480u, 2302183699u, 1145788151u,
  3126. 3474264138u,
  3127. 3105085243u,
  3128. 3115506027u, 2783713015u, 3871785309u, 539583269u,
  3129. 1400252405u, 3857849984u, 4231186588u, 1278653799u,
  3130. 1760227022u,
  3131. 761044088u,
  3132. 3838185417u, 2439542532u, 585283357u, 2055995220u,
  3133. 937117124u, 3831944855u, 1823586038u, 3287917855u,
  3134. 485082427u,
  3135. 3209172809u,
  3136. 1984570176u, 2818337297u, 2691869057u, 3790476953u,
  3137. 839035557u, 3203129010u, 669981176u, 4121157385u,
  3138. 3519870450u,
  3139. 3792633352u,
  3140. 3017650322u, 1603459507u, 4225677666u, 376555451u,
  3141. 473780127u, 2018786277u, 3299822439u, 1010254499u,
  3142. 2383887565u,
  3143. 3155009499u,
  3144. 3108110655u, 2641738274u, 3684908622u, 1606463047u,
  3145. 3311068174u, 52708046u, 754181455u, 1018079176u,
  3146. 3915670272u,
  3147. 3366999425u,
  3148. 1012880204u, 1339439715u, 466437962u, 1402662350u,
  3149. 2504046911u, 736323938u, 2037800124u, 1725908589u,
  3150. 716341840u,
  3151. 1750123474u,
  3152. 3366342464u, 1743666195u, 2975303189u, 3821364027u,
  3153. 3253707772u, 3635548377u, 3840413796u, 1955642085u,
  3154. 1018315169u,
  3155. 1258092848u,
  3156. 2095540656u, 1076256607u, 117289557u, 1311658655u,
  3157. 2118301000u, 68721550u, 2886814107u, 2712432819u,
  3158. 4201862886u,
  3159. 753807148u,
  3160. 1940229047u, 731347296u, 1068901393u, 3873155894u,
  3161. 2852787666u, 1973464853u, 79735652u, 3966380587u,
  3162. 3245740712u,
  3163. 2525773438u,
  3164. 734938109u, 3045656416u, 3335746354u, 4099732691u,
  3165. 1911896517u, 1697006473u, 1145487066u, 1605663299u,
  3166. 3053606724u,
  3167. 2386289465u,
  3168. 3821211369u, 1006215345u, 1256304829u, 1053001668u,
  3169. 1289194958u, 118761054u, 1853688730u, 2803418011u,
  3170. 188650809u,
  3171. 3763686458u,
  3172. 1006829556u, 2961984133u, 3390525025u, 2061199893u,
  3173. 141792681u, 2439893463u, 2652982650u, 1804942682u,
  3174. 1546510005u,
  3175. 1246961405u,
  3176. 2407577046u, 565772575u, 3751844810u, 2943166103u,
  3177. 3750052451u, 3022527280u, 25162928u, 397381043u,
  3178. 1818337632u,
  3179. 3447363730u,
  3180. 3936437150u, 2569420703u, 2215592390u, 2171555672u,
  3181. 3665571006u, 4021712412u, 2939158353u, 4057813172u,
  3182. 1823237318u,
  3183. 103999245u,
  3184. 3251978010u, 3591914940u, 3582495283u, 2519035265u,
  3185. 3905726135u, 3180393349u, 2743117123u, 55247368u,
  3186. 3325286701u,
  3187. 705195946u,
  3188. 1857526853u, 1480518550u, 3809990433u, 1398189338u,
  3189. 3126362926u, 3959531492u, 1503658285u, 1977847740u,
  3190. 3043964489u,
  3191. 2613086143u,
  3192. 1518119282u, 4238434900u, 3905746486u, 3064949667u,
  3193. 1028122931u, 3309119457u, 4071194920u, 3096098907u,
  3194. 4137180520u,
  3195. 494467959u,
  3196. 1231408687u, 1691606157u, 1793452569u, 2722196118u,
  3197. 3478603952u, 1059665738u, 2282032278u, 3990268388u,
  3198. 1719514651u,
  3199. 4248311578u,
  3200. 3799146721u, 898026304u, 3367808954u, 4162472815u,
  3201. 170495870u, 1308116609u, 3428285344u, 1714716475u,
  3202. 395576794u,
  3203. 4153638621u,
  3204. 2999745812u, 3483315953u, 304980828u, 595337120u,
  3205. 3486516729u, 2331563143u, 2583609459u, 1885928417u,
  3206. 3834283777u,
  3207. 979337825u,
  3208. 932057378u, 3124081189u, 1930356777u, 3865887996u,
  3209. 4178282217u, 4214219408u, 3669465884u, 1472413856u,
  3210. 3356866587u,
  3211. 1012769806u,
  3212. 3043639963u, 996996396u, 207308216u, 982967331u,
  3213. 2991319933u, 318066902u, 721489670u, 1249967713u,
  3214. 749240921u,
  3215. 591392325u,
  3216. 2379365192u, 2250868849u, 2163259329u, 143191325u,
  3217. 3778285606u, 982149096u, 3536906200u, 2244353244u,
  3218. 1443862317u,
  3219. 3161549210u,
  3220. 2183127464u, 2015409516u, 547003700u, 2032484282u,
  3221. 523677821u, 4275663308u, 3827205526u, 3903778273u,
  3222. 2444530525u,
  3223. 2543645801u,
  3224. 1173958423u, 784740616u, 2878693675u, 3127696736u,
  3225. 3832037316u, 3161002398u, 4084166400u, 4213346853u,
  3226. 223390424u,
  3227. 4273380883u,
  3228. 2130315482u, 3429606032u, 3367732613u, 1912357694u,
  3229. 422632590u, 1266957023u, 3437535648u, 736404240u,
  3230. 2281709372u,
  3231. 415859912u,
  3232. 212948797u, 351612650u, 3920561440u, 112963586u,
  3233. 2230727543u, 2851076612u, 1990662634u, 2264296857u,
  3234. 3131463650u,
  3235. 2704034623u,
  3236. 3541637839u, 2954232792u, 533986918u, 4158757533u,
  3237. 65174248u, 4232639593u, 865906667u, 1948225652u,
  3238. 779656112u,
  3239. 3873989249u,
  3240. 2372984749u, 2346988193u, 1104345713u, 1165654138u,
  3241. 4045762610u, 3588205178u, 461363991u, 1111215752u,
  3242. 1389675192u,
  3243. 2404325151u,
  3244. 2152228101u, 3808973622u, 1901235912u, 3458690696u,
  3245. 314513238u, 2539459143u, 2847998873u, 952026138u,
  3246. 2325705328u,
  3247. 407844712u,
  3248. 3727960715u, 2996448351u, 2374336760u, 3138756390u,
  3249. 2600015243u, 539980418u, 1876285352u, 1670330799u,
  3250. 1709360377u,
  3251. 2868531654u,
  3252. 494777964u, 2773053597u, 599486162u, 3962209577u,
  3253. 1871328846u, 2171933018u, 110279472u, 384074780u,
  3254. 4147021936u,
  3255. 2333589647u,
  3256. 4251778066u, 40493468u, 3099342316u, 4108779767u,
  3257. 2812424588u, 954542332u, 2040682331u, 2251152306u,
  3258. 45915516u,
  3259. 259525626u,
  3260. 1045384743u, 4134656562u, 749389261u, 874399445u,
  3261. 616549904u, 2200447504u, 436024539u, 78972290u,
  3262. 3210485762u,
  3263. 1907985531u,
  3264. 3013721395u, 4214533685u, 4198804243u, 534879265u,
  3265. 1517190881u, 3756787754u, 1152563554u, 1718750948u,
  3266. 777737463u,
  3267. 1402478860u,
  3268. 1824562784u, 1879401449u, 3515818786u, 513165201u,
  3269. 1423491227u, 2103067918u, 2291777410u, 1097943000u,
  3270. };
  3271. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  3272. bool Test(int offset, int len = 0) {
  3273. #undef Check
  3274. #undef IsAlive
  3275. #define Check(x) do { \
  3276. const uint32_t actual = (x), e = expected[index++]; \
  3277. bool ok = actual == e; \
  3278. if (!ok) { \
  3279. cerr << "expected " << hex << e << " but got " << actual << endl; \
  3280. ++errors; \
  3281. } \
  3282. assert(ok); \
  3283. } while (0)
  3284. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  3285. // After the following line is where the uses of "Check" and such will go.
  3286. static int index = 0;
  3287. if (offset == -1) { int alive = 0; IsAlive(farmhashcc::Hash32WithSeed(data, len++, SEED)); IsAlive(farmhashcc::Hash32(data, len++)); { uint128_t u = farmhashcc::Fingerprint128(data, len++); uint64_t h = Uint128Low64(u); IsAlive(h >> 32); IsAlive((h << 32) >> 32); h = Uint128High64(u); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } len -= 3; return alive > 0; }
  3288. Check(farmhashcc::Hash32WithSeed(data + offset, len, SEED));
  3289. Check(farmhashcc::Hash32(data + offset, len));
  3290. { uint128_t u = farmhashcc::Fingerprint128(data + offset, len); uint64_t h = Uint128Low64(u); Check(h >> 32); Check((h << 32) >> 32); h = Uint128High64(u); Check(h >> 32); Check((h << 32) >> 32); }
  3291. { uint128_t u = farmhashcc::CityHash128WithSeed(data + offset, len, Uint128(SEED0, SEED1)); uint64_t h = Uint128Low64(u); Check(h >> 32); Check((h << 32) >> 32); h = Uint128High64(u); Check(h >> 32); Check((h << 32) >> 32); }
  3292. return true;
  3293. #undef Check
  3294. #undef IsAlive
  3295. }
  3296. int RunTest() {
  3297. Setup();
  3298. int i = 0;
  3299. cout << "Running farmhashccTest";
  3300. if (!Test(-1)) {
  3301. cout << "... Unavailable\n";
  3302. return NoteErrors();
  3303. }
  3304. // Good. The function is attempting to hash, so run the full test.
  3305. int errors_prior_to_test = errors;
  3306. for ( ; i < kTestSize - 1; i++) {
  3307. Test(i * i, i);
  3308. }
  3309. for ( ; i < kDataSize; i += i / 7) {
  3310. Test(0, i);
  3311. }
  3312. Test(0, kDataSize);
  3313. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  3314. return NoteErrors();
  3315. }
  3316. #else
  3317. // After the following line is where the code to print hash codes will go.
  3318. void Dump(int offset, int len) {
  3319. cout << farmhashcc::Hash32WithSeed(data + offset, len, SEED) << "u," << endl;
  3320. cout << farmhashcc::Hash32(data + offset, len) << "u," << endl;
  3321. { uint128_t u = farmhashcc::Fingerprint128(data + offset, len); uint64_t h = Uint128Low64(u); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u, "; h = Uint128High64(u); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  3322. { uint128_t u = farmhashcc::CityHash128WithSeed(data + offset, len, Uint128(SEED0, SEED1)); uint64_t h = Uint128Low64(u); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u, "; h = Uint128High64(u); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  3323. }
  3324. #endif
  3325. #undef SEED
  3326. #undef SEED1
  3327. #undef SEED0
  3328. } // namespace farmhashccTest
  3329. #if TESTING
  3330. static int farmhashccTestResult = farmhashccTest::RunTest();
  3331. #else
  3332. int main(int argc, char** argv) {
  3333. Setup();
  3334. cout << "uint32_t expected[] = {\n";
  3335. int i = 0;
  3336. for ( ; i < kTestSize - 1; i++) {
  3337. farmhashccTest::Dump(i * i, i);
  3338. }
  3339. for ( ; i < kDataSize; i += i / 7) {
  3340. farmhashccTest::Dump(0, i);
  3341. }
  3342. farmhashccTest::Dump(0, kDataSize);
  3343. cout << "};\n";
  3344. }
  3345. #endif
  3346. #ifndef FARMHASH_SELF_TEST_GUARD
  3347. #define FARMHASH_SELF_TEST_GUARD
  3348. #include <cstdio>
  3349. #include <iostream>
  3350. #include <string.h>
  3351. using std::cout;
  3352. using std::cerr;
  3353. using std::endl;
  3354. using std::hex;
  3355. static const uint64_t kSeed0 = 1234567;
  3356. static const uint64_t kSeed1 = k0;
  3357. static const int kDataSize = 1 << 20;
  3358. static const int kTestSize = 300;
  3359. #define kSeed128 Uint128(kSeed0, kSeed1)
  3360. static char data[kDataSize];
  3361. static int completed_self_tests = 0;
  3362. static int errors = 0;
  3363. // Initialize data to pseudorandom values.
  3364. void Setup() {
  3365. if (completed_self_tests == 0) {
  3366. uint64_t a = 9;
  3367. uint64_t b = 777;
  3368. for (int i = 0; i < kDataSize; i++) {
  3369. a += b;
  3370. b += a;
  3371. a = (a ^ (a >> 41)) * k0;
  3372. b = (b ^ (b >> 41)) * k0 + i;
  3373. uint8_t u = b >> 37;
  3374. memcpy(data + i, &u, 1); // uint8_t -> char
  3375. }
  3376. }
  3377. }
  3378. int NoteErrors() {
  3379. #define NUM_SELF_TESTS 9
  3380. if (++completed_self_tests == NUM_SELF_TESTS)
  3381. std::exit(errors > 0);
  3382. return errors;
  3383. }
  3384. template <typename T> inline bool IsNonZero(T x) {
  3385. return x != 0;
  3386. }
  3387. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  3388. return x != Uint128(0, 0);
  3389. }
  3390. #endif // FARMHASH_SELF_TEST_GUARD
  3391. namespace farmhashmkTest {
  3392. uint32_t CreateSeed(int offset, int salt) {
  3393. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  3394. h = h * c1;
  3395. h ^= (h >> 17);
  3396. h = h * c1;
  3397. h ^= (h >> 17);
  3398. h = h * c1;
  3399. h ^= (h >> 17);
  3400. h += static_cast<uint32_t>(offset & 0xffffffff);
  3401. h = h * c1;
  3402. h ^= (h >> 17);
  3403. h = h * c1;
  3404. h ^= (h >> 17);
  3405. h = h * c1;
  3406. h ^= (h >> 17);
  3407. return h;
  3408. }
  3409. #undef SEED
  3410. #undef SEED1
  3411. #undef SEED0
  3412. #define SEED CreateSeed(offset, -1)
  3413. #define SEED0 CreateSeed(offset, 0)
  3414. #define SEED1 CreateSeed(offset, 1)
  3415. #undef TESTING
  3416. #define TESTING 1
  3417. #if TESTING
  3418. uint32_t expected[] = {
  3419. 4223616069u,
  3420. 3696677242u,
  3421. 4081014168u,
  3422. 2576519988u,
  3423. 2212771159u,
  3424. 1112731063u,
  3425. 1020067935u,
  3426. 3955445564u,
  3427. 1451961420u,
  3428. 653440099u,
  3429. 31917516u,
  3430. 2957164615u,
  3431. 2590087362u,
  3432. 3879448744u,
  3433. 176305566u,
  3434. 2447367541u,
  3435. 1359016305u,
  3436. 3363804638u,
  3437. 1117290165u,
  3438. 1062549743u,
  3439. 2437877004u,
  3440. 1894455839u,
  3441. 673206794u,
  3442. 3486923651u,
  3443. 3269862919u,
  3444. 2303349487u,
  3445. 1380660650u,
  3446. 595525107u,
  3447. 1525325287u,
  3448. 2025609358u,
  3449. 176408838u,
  3450. 1592885012u,
  3451. 864896482u,
  3452. 2101378090u,
  3453. 3489229104u,
  3454. 2118965695u,
  3455. 581644891u,
  3456. 2718789079u,
  3457. 631613207u,
  3458. 4228658372u,
  3459. 3867875546u,
  3460. 3531368319u,
  3461. 3804516756u,
  3462. 3317755099u,
  3463. 1619744564u,
  3464. 2884717286u,
  3465. 1088213445u,
  3466. 2667691076u,
  3467. 3727873235u,
  3468. 2330406762u,
  3469. 3616470388u,
  3470. 967660719u,
  3471. 4148162586u,
  3472. 315219121u,
  3473. 673084328u,
  3474. 3047602355u,
  3475. 1598963653u,
  3476. 1267826661u,
  3477. 2117362589u,
  3478. 2861192253u,
  3479. 1823625377u,
  3480. 1380350078u,
  3481. 1641748342u,
  3482. 1176094482u,
  3483. 269384321u,
  3484. 2178982315u,
  3485. 3480237248u,
  3486. 2660755208u,
  3487. 1850544433u,
  3488. 3429699438u,
  3489. 1262819303u,
  3490. 640556464u,
  3491. 2421125401u,
  3492. 2188368608u,
  3493. 2612932825u,
  3494. 1474432581u,
  3495. 173790449u,
  3496. 2124882189u,
  3497. 831272654u,
  3498. 622960146u,
  3499. 4238751051u,
  3500. 3250317967u,
  3501. 2120810248u,
  3502. 1948231495u,
  3503. 1389029321u,
  3504. 2200398357u,
  3505. 2134232963u,
  3506. 2948072329u,
  3507. 617717625u,
  3508. 681164587u,
  3509. 114859387u,
  3510. 430545646u,
  3511. 57239089u,
  3512. 3163338012u,
  3513. 3482496399u,
  3514. 557662576u,
  3515. 1102441413u,
  3516. 2670159360u,
  3517. 991116729u,
  3518. 846014240u,
  3519. 4233741566u,
  3520. 1802317242u,
  3521. 3129528802u,
  3522. 1459456375u,
  3523. 1305643039u,
  3524. 3258671612u,
  3525. 1578285833u,
  3526. 868590079u,
  3527. 1631034517u,
  3528. 1695432937u,
  3529. 561078856u,
  3530. 1004115553u,
  3531. 3086090507u,
  3532. 3818348650u,
  3533. 731596645u,
  3534. 780926790u,
  3535. 2544205955u,
  3536. 158479164u,
  3537. 3983514188u,
  3538. 2004735250u,
  3539. 3436218400u,
  3540. 673684751u,
  3541. 1463431419u,
  3542. 2880490219u,
  3543. 3223748024u,
  3544. 2218318859u,
  3545. 1474466194u,
  3546. 2636437533u,
  3547. 2206794961u,
  3548. 140995728u,
  3549. 1186394086u,
  3550. 1805716888u,
  3551. 1640037724u,
  3552. 3942729099u,
  3553. 1944727013u,
  3554. 918951560u,
  3555. 498666871u,
  3556. 3486974657u,
  3557. 2967205462u,
  3558. 1167253804u,
  3559. 1884281041u,
  3560. 2866015002u,
  3561. 4158319270u,
  3562. 2627220079u,
  3563. 3733319624u,
  3564. 3317092271u,
  3565. 438323662u,
  3566. 3195868065u,
  3567. 3426606709u,
  3568. 360708338u,
  3569. 1905491012u,
  3570. 650004803u,
  3571. 1351266252u,
  3572. 3133279000u,
  3573. 3722811115u,
  3574. 2722412434u,
  3575. 918432408u,
  3576. 3678271248u,
  3577. 269599647u,
  3578. 621514057u,
  3579. 3117077855u,
  3580. 1545425390u,
  3581. 2597567410u,
  3582. 1221437820u,
  3583. 3493254589u,
  3584. 102787342u,
  3585. 918861168u,
  3586. 348795089u,
  3587. 3439883229u,
  3588. 2353641807u,
  3589. 2209585469u,
  3590. 4035884492u,
  3591. 2686995435u,
  3592. 1649888022u,
  3593. 3852893848u,
  3594. 3042700028u,
  3595. 314103172u,
  3596. 726977769u,
  3597. 2489830276u,
  3598. 2872753660u,
  3599. 1316214989u,
  3600. 1488801501u,
  3601. 1811420390u,
  3602. 639581627u,
  3603. 2362837215u,
  3604. 3634581834u,
  3605. 3648576802u,
  3606. 1257314182u,
  3607. 762118371u,
  3608. 4268447045u,
  3609. 730167096u,
  3610. 755561509u,
  3611. 882614845u,
  3612. 3696972894u,
  3613. 228263661u,
  3614. 1478636142u,
  3615. 2767751651u,
  3616. 1532617116u,
  3617. 3838657661u,
  3618. 1944359935u,
  3619. 1401102137u,
  3620. 3772933173u,
  3621. 1050098254u,
  3622. 1658079354u,
  3623. 1846025728u,
  3624. 2204244794u,
  3625. 2017217424u,
  3626. 1275162853u,
  3627. 1429816745u,
  3628. 2175565479u,
  3629. 1716109139u,
  3630. 1187506761u,
  3631. 2434641075u,
  3632. 2725597783u,
  3633. 1795687662u,
  3634. 1393312782u,
  3635. 3511565397u,
  3636. 627885430u,
  3637. 4145733164u,
  3638. 2519005353u,
  3639. 231414775u,
  3640. 1242015635u,
  3641. 2760723497u,
  3642. 2185540568u,
  3643. 727314436u,
  3644. 2358790354u,
  3645. 1186393454u,
  3646. 4234795645u,
  3647. 350567813u,
  3648. 866773875u,
  3649. 3145590392u,
  3650. 1158374055u,
  3651. 3903123687u,
  3652. 1862119793u,
  3653. 2204587556u,
  3654. 4266276976u,
  3655. 4151548555u,
  3656. 915250402u,
  3657. 2874695320u,
  3658. 2360311410u,
  3659. 1099212769u,
  3660. 1271542714u,
  3661. 3473148363u,
  3662. 1637325418u,
  3663. 1807795989u,
  3664. 2493819794u,
  3665. 3800917924u,
  3666. 4001205856u,
  3667. 2582153621u,
  3668. 3365872040u,
  3669. 2890146216u,
  3670. 2626363824u,
  3671. 3133351295u,
  3672. 4046827296u,
  3673. 3053118771u,
  3674. 4113026751u,
  3675. 884356716u,
  3676. 3828347401u,
  3677. 10608262u,
  3678. 830987972u,
  3679. 1841080500u,
  3680. 3202717763u,
  3681. 3561778749u,
  3682. 1906000052u,
  3683. 3058284660u,
  3684. 1432904514u,
  3685. 2567431677u,
  3686. 2550162530u,
  3687. 665557986u,
  3688. 936887821u,
  3689. 2101205308u,
  3690. 4253535847u,
  3691. 1662043545u,
  3692. 1253611611u,
  3693. 2091370094u,
  3694. 2635077370u,
  3695. 2602176041u,
  3696. 3624115809u,
  3697. 748442714u,
  3698. 2709749154u,
  3699. 1023493343u,
  3700. 860291012u,
  3701. 3924715584u,
  3702. 1536436740u,
  3703. 2551145800u,
  3704. 2391782865u,
  3705. 1467705048u,
  3706. 2583909796u,
  3707. 3616666170u,
  3708. 1162857372u,
  3709. 4228631071u,
  3710. 1510132376u,
  3711. 2739165009u,
  3712. 2656606142u,
  3713. 3454996358u,
  3714. 3155038853u,
  3715. 1022087316u,
  3716. 100044110u,
  3717. 494208296u,
  3718. 2746186477u,
  3719. 4216782431u,
  3720. 225448834u,
  3721. 3728320521u,
  3722. 335282866u,
  3723. 3148194874u,
  3724. 953503703u,
  3725. 1293353960u,
  3726. 202372387u,
  3727. 1326119870u,
  3728. 4045123735u,
  3729. 3819994846u,
  3730. 1629004186u,
  3731. 1081099186u,
  3732. 3591584153u,
  3733. 1670825804u,
  3734. 3404257979u,
  3735. 3262192301u,
  3736. 2572846095u,
  3737. 3714992543u,
  3738. 4264142572u,
  3739. 529616678u,
  3740. 2882154574u,
  3741. 3006354178u,
  3742. 3865969421u,
  3743. 2007174907u,
  3744. 308283107u,
  3745. 2629833703u,
  3746. 3159124075u,
  3747. 1146492131u,
  3748. 494104332u,
  3749. 493149727u,
  3750. 1342910585u,
  3751. 521642387u,
  3752. 2201695937u,
  3753. 2517980959u,
  3754. 2426821287u,
  3755. 777374655u,
  3756. 2228189792u,
  3757. 4027055486u,
  3758. 228976000u,
  3759. 3842083468u,
  3760. 1723920223u,
  3761. 1192126094u,
  3762. 787744493u,
  3763. 2740368380u,
  3764. 2284153001u,
  3765. 2773829458u,
  3766. 442000614u,
  3767. 387830783u,
  3768. 2169780670u,
  3769. 2253144627u,
  3770. 3532502484u,
  3771. 1969684059u,
  3772. 1165351416u,
  3773. 3055056536u,
  3774. 3582324253u,
  3775. 231419363u,
  3776. 770979865u,
  3777. 3213983597u,
  3778. 3690452836u,
  3779. 935794639u,
  3780. 3230602762u,
  3781. 2841762457u,
  3782. 407598927u,
  3783. 1164479891u,
  3784. 3721799696u,
  3785. 354738136u,
  3786. 1801566618u,
  3787. 3206038542u,
  3788. 2621379981u,
  3789. 1943487262u,
  3790. 3534745636u,
  3791. 1074424589u,
  3792. 1304517521u,
  3793. 4133400969u,
  3794. 2339317978u,
  3795. 2135116860u,
  3796. 4180643791u,
  3797. 2415309340u,
  3798. 1855926417u,
  3799. 3418648630u,
  3800. 1968113037u,
  3801. 597304222u,
  3802. 3668824865u,
  3803. 3810008716u,
  3804. 3014702569u,
  3805. 3151212026u,
  3806. 156057449u,
  3807. 373134533u,
  3808. 2068234004u,
  3809. 191580563u,
  3810. 3832754488u,
  3811. 2924104199u,
  3812. 2026044494u,
  3813. 4065780435u,
  3814. 122565840u,
  3815. 4194985167u,
  3816. 2744823717u,
  3817. 2494098735u,
  3818. 3753793370u,
  3819. 1885739217u,
  3820. 2488161225u,
  3821. 3643797615u,
  3822. 2653367310u,
  3823. 2494061477u,
  3824. 189968132u,
  3825. 899646597u,
  3826. 392100396u,
  3827. 4012318310u,
  3828. 3855777086u,
  3829. 3566860954u,
  3830. 2698574996u,
  3831. 2414249905u,
  3832. 1330623339u,
  3833. 1263222732u,
  3834. 1277741760u,
  3835. 2194959402u,
  3836. 1629656136u,
  3837. 120494320u,
  3838. 1072368005u,
  3839. 1084245077u,
  3840. 4011372748u,
  3841. 1366613353u,
  3842. 3108643228u,
  3843. 3332219532u,
  3844. 2114746095u,
  3845. 3964007334u,
  3846. 371687128u,
  3847. 1084813876u,
  3848. 126459896u,
  3849. 4292782331u,
  3850. 321283184u,
  3851. 398168499u,
  3852. 3604983506u,
  3853. 560701543u,
  3854. 2073961354u,
  3855. 4240841868u,
  3856. 4151211362u,
  3857. 1338986875u,
  3858. 4093476832u,
  3859. 2269279497u,
  3860. 3500846299u,
  3861. 2510225147u,
  3862. 598000444u,
  3863. 1330391422u,
  3864. 1432533385u,
  3865. 4171226231u,
  3866. 426821154u,
  3867. 2932270996u,
  3868. 3378981077u,
  3869. 2217871549u,
  3870. 1619647984u,
  3871. 4051608043u,
  3872. 3180237819u,
  3873. 12919578u,
  3874. 1375401767u,
  3875. 371320427u,
  3876. 2986640571u,
  3877. 2336669859u,
  3878. 3796464715u,
  3879. 1892383284u,
  3880. 306814912u,
  3881. 2125823211u,
  3882. 1863678891u,
  3883. 3249703818u,
  3884. 3840225752u,
  3885. 281579900u,
  3886. 264680257u,
  3887. 4266359110u,
  3888. 4182229890u,
  3889. 2239659703u,
  3890. 3627947372u,
  3891. 2373929191u,
  3892. 224082765u,
  3893. 4053639058u,
  3894. 1862360303u,
  3895. 3187739624u,
  3896. 3392706679u,
  3897. 948039509u,
  3898. 817505760u,
  3899. 1215842393u,
  3900. 3462222651u,
  3901. 536021853u,
  3902. 182346832u,
  3903. 2731944883u,
  3904. 2346674384u,
  3905. 2640961678u,
  3906. 3446695687u,
  3907. 2271722179u,
  3908. 1301069656u,
  3909. 2803881468u,
  3910. 2832614405u,
  3911. 1691544398u,
  3912. 698756814u,
  3913. 3980620906u,
  3914. 3565421410u,
  3915. 754769376u,
  3916. 4115923404u,
  3917. 3909962218u,
  3918. 2747614077u,
  3919. 2888289845u,
  3920. 1016920862u,
  3921. 2790946178u,
  3922. 3067070960u,
  3923. 3173251481u,
  3924. 1572132982u,
  3925. 255048203u,
  3926. 2996538818u,
  3927. 3405398987u,
  3928. 136106013u,
  3929. 3581605228u,
  3930. 4277437977u,
  3931. 2147300534u,
  3932. 3728426265u,
  3933. 3483629996u,
  3934. 1478452694u,
  3935. 20756076u,
  3936. 2774992067u,
  3937. 432987927u,
  3938. 1516771026u,
  3939. 3511588664u,
  3940. 2130994978u,
  3941. 509385406u,
  3942. 873090347u,
  3943. 2163904107u,
  3944. 4192239086u,
  3945. 2532489989u,
  3946. 1090772651u,
  3947. 3910797408u,
  3948. 3710882132u,
  3949. 155010959u,
  3950. 1369823531u,
  3951. 1599664937u,
  3952. 4035593587u,
  3953. 1212746925u,
  3954. 795822552u,
  3955. 116689518u,
  3956. 3674240941u,
  3957. 1135576664u,
  3958. 756750261u,
  3959. 1027431362u,
  3960. 390555140u,
  3961. 2228460216u,
  3962. 1506940482u,
  3963. 3733857700u,
  3964. 3048762971u,
  3965. 2511703196u,
  3966. 548609887u,
  3967. 1607354252u,
  3968. 659053982u,
  3969. 259884450u,
  3970. 1793130460u,
  3971. 4083364495u,
  3972. 3148555881u,
  3973. 1764350138u,
  3974. 2436485683u,
  3975. 4031563025u,
  3976. 3261860724u,
  3977. 2475833430u,
  3978. 2101726086u,
  3979. 3191176464u,
  3980. 2646658847u,
  3981. 2127042126u,
  3982. 771316100u,
  3983. 2115922959u,
  3984. 3208515045u,
  3985. 2355437783u,
  3986. 3621147793u,
  3987. 1580163615u,
  3988. 3211555675u,
  3989. 3299188490u,
  3990. 191613920u,
  3991. 466733956u,
  3992. 2939029038u,
  3993. 1509152039u,
  3994. 130591314u,
  3995. 1892874677u,
  3996. 1646908044u,
  3997. 3452406523u,
  3998. 3998376606u,
  3999. 1199243832u,
  4000. 2187108812u,
  4001. 3189230066u,
  4002. 4161151481u,
  4003. 3371454980u,
  4004. 3681788646u,
  4005. 180842187u,
  4006. 3685022399u,
  4007. 3058749895u,
  4008. 3250165163u,
  4009. 2895367943u,
  4010. 2627101723u,
  4011. 771755098u,
  4012. 1332921024u,
  4013. 3638871848u,
  4014. 514215135u,
  4015. 3591227378u,
  4016. 2300310870u,
  4017. 3689533503u,
  4018. 851607114u,
  4019. 114330368u,
  4020. 2709027386u,
  4021. 1743034877u,
  4022. 1013693860u,
  4023. 288169008u,
  4024. 3545190686u,
  4025. 1052165084u,
  4026. 3995862307u,
  4027. 96902755u,
  4028. 1097819851u,
  4029. 2645431442u,
  4030. 2184148618u,
  4031. 2151206566u,
  4032. 350979797u,
  4033. 3467920900u,
  4034. 421116779u,
  4035. 1246252u,
  4036. 4057835428u,
  4037. 329324407u,
  4038. 4104482417u,
  4039. 844624570u,
  4040. 3306265806u,
  4041. 3787625025u,
  4042. 4263241191u,
  4043. 3251413927u,
  4044. 2921204431u,
  4045. 2931915325u,
  4046. 992134330u,
  4047. 3986338354u,
  4048. 1327895216u,
  4049. 1458363596u,
  4050. 1480608532u,
  4051. 728594368u,
  4052. 3804366693u,
  4053. 794404223u,
  4054. 1643240863u,
  4055. 793417255u,
  4056. 4167916443u,
  4057. 2683488959u,
  4058. 3124925324u,
  4059. 4184843652u,
  4060. 3750971752u,
  4061. 308509829u,
  4062. 1054550805u,
  4063. 2797511972u,
  4064. 4043123412u,
  4065. 1587158240u,
  4066. 4050518606u,
  4067. 3030062190u,
  4068. 2589912753u,
  4069. 603440067u,
  4070. 937013191u,
  4071. 1071662315u,
  4072. 2100661456u,
  4073. 2602005741u,
  4074. 435516078u,
  4075. 2260470147u,
  4076. 1256268350u,
  4077. 3612035u,
  4078. 3368856141u,
  4079. 151516099u,
  4080. 3081868591u,
  4081. 3363755681u,
  4082. 2049963149u,
  4083. 2885320434u,
  4084. 84682005u,
  4085. 2411758308u,
  4086. 2695174275u,
  4087. 3099904644u,
  4088. 1787308684u,
  4089. 1132379308u,
  4090. 564634346u,
  4091. 510236510u,
  4092. 2804443681u,
  4093. 3931864252u,
  4094. 2064427949u,
  4095. 1893979229u,
  4096. 2916544974u,
  4097. 1885887717u,
  4098. 2978018250u,
  4099. 494192125u,
  4100. 2642662373u,
  4101. 901112508u,
  4102. 636035003u,
  4103. 1658643797u,
  4104. 172746975u,
  4105. 517504890u,
  4106. 3440019372u,
  4107. 4144498044u,
  4108. 1854755456u,
  4109. 3672653905u,
  4110. 4176892856u,
  4111. 382159097u,
  4112. 282871690u,
  4113. 3629300472u,
  4114. 2500754041u,
  4115. 1677659759u,
  4116. 1067175061u,
  4117. 161654075u,
  4118. 1672575536u,
  4119. 346120493u,
  4120. 2730229631u,
  4121. 203466442u,
  4122. 1244549529u,
  4123. 199761971u,
  4124. 2744895408u,
  4125. 3195315331u,
  4126. 2124618519u,
  4127. 3261045496u,
  4128. 985339699u,
  4129. 3385585455u,
  4130. 1545740710u,
  4131. 3636652160u,
  4132. 2167020081u,
  4133. 1207897204u,
  4134. 28752417u,
  4135. 2895834146u,
  4136. 3640845375u,
  4137. 3750293073u,
  4138. 548997850u,
  4139. 4207814196u,
  4140. 4183030708u,
  4141. 2462810989u,
  4142. 3929965401u,
  4143. };
  4144. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  4145. bool Test(int offset, int len = 0) {
  4146. #undef Check
  4147. #undef IsAlive
  4148. #define Check(x) do { \
  4149. const uint32_t actual = (x), e = expected[index++]; \
  4150. bool ok = actual == e; \
  4151. if (!ok) { \
  4152. cerr << "expected " << hex << e << " but got " << actual << endl; \
  4153. ++errors; \
  4154. } \
  4155. assert(ok); \
  4156. } while (0)
  4157. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  4158. // After the following line is where the uses of "Check" and such will go.
  4159. static int index = 0;
  4160. if (offset == -1) { int alive = 0; IsAlive(farmhashmk::Hash32WithSeed(data, len++, SEED)); IsAlive(farmhashmk::Hash32(data, len++)); IsAlive(farmhashmk::Hash32(data, len++)); len -= 3; return alive > 0; }
  4161. Check(farmhashmk::Hash32WithSeed(data + offset, len, SEED));
  4162. Check(farmhashmk::Hash32(data + offset, len));
  4163. return true;
  4164. #undef Check
  4165. #undef IsAlive
  4166. }
  4167. int RunTest() {
  4168. Setup();
  4169. int i = 0;
  4170. cout << "Running farmhashmkTest";
  4171. if (!Test(-1)) {
  4172. cout << "... Unavailable\n";
  4173. return NoteErrors();
  4174. }
  4175. // Good. The function is attempting to hash, so run the full test.
  4176. int errors_prior_to_test = errors;
  4177. for ( ; i < kTestSize - 1; i++) {
  4178. Test(i * i, i);
  4179. }
  4180. for ( ; i < kDataSize; i += i / 7) {
  4181. Test(0, i);
  4182. }
  4183. Test(0, kDataSize);
  4184. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  4185. return NoteErrors();
  4186. }
  4187. #else
  4188. // After the following line is where the code to print hash codes will go.
  4189. void Dump(int offset, int len) {
  4190. cout << farmhashmk::Hash32WithSeed(data + offset, len, SEED) << "u," << endl;
  4191. cout << farmhashmk::Hash32(data + offset, len) << "u," << endl;
  4192. }
  4193. #endif
  4194. #undef SEED
  4195. #undef SEED1
  4196. #undef SEED0
  4197. } // namespace farmhashmkTest
  4198. #if TESTING
  4199. static int farmhashmkTestResult = farmhashmkTest::RunTest();
  4200. #else
  4201. int main(int argc, char** argv) {
  4202. Setup();
  4203. cout << "uint32_t expected[] = {\n";
  4204. int i = 0;
  4205. for ( ; i < kTestSize - 1; i++) {
  4206. farmhashmkTest::Dump(i * i, i);
  4207. }
  4208. for ( ; i < kDataSize; i += i / 7) {
  4209. farmhashmkTest::Dump(0, i);
  4210. }
  4211. farmhashmkTest::Dump(0, kDataSize);
  4212. cout << "};\n";
  4213. }
  4214. #endif
  4215. #ifndef FARMHASH_SELF_TEST_GUARD
  4216. #define FARMHASH_SELF_TEST_GUARD
  4217. #include <cstdio>
  4218. #include <iostream>
  4219. #include <string.h>
  4220. using std::cout;
  4221. using std::cerr;
  4222. using std::endl;
  4223. using std::hex;
  4224. static const uint64_t kSeed0 = 1234567;
  4225. static const uint64_t kSeed1 = k0;
  4226. static const int kDataSize = 1 << 20;
  4227. static const int kTestSize = 300;
  4228. #define kSeed128 Uint128(kSeed0, kSeed1)
  4229. static char data[kDataSize];
  4230. static int completed_self_tests = 0;
  4231. static int errors = 0;
  4232. // Initialize data to pseudorandom values.
  4233. void Setup() {
  4234. if (completed_self_tests == 0) {
  4235. uint64_t a = 9;
  4236. uint64_t b = 777;
  4237. for (int i = 0; i < kDataSize; i++) {
  4238. a += b;
  4239. b += a;
  4240. a = (a ^ (a >> 41)) * k0;
  4241. b = (b ^ (b >> 41)) * k0 + i;
  4242. uint8_t u = b >> 37;
  4243. memcpy(data + i, &u, 1); // uint8_t -> char
  4244. }
  4245. }
  4246. }
  4247. int NoteErrors() {
  4248. #define NUM_SELF_TESTS 9
  4249. if (++completed_self_tests == NUM_SELF_TESTS)
  4250. std::exit(errors > 0);
  4251. return errors;
  4252. }
  4253. template <typename T> inline bool IsNonZero(T x) {
  4254. return x != 0;
  4255. }
  4256. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  4257. return x != Uint128(0, 0);
  4258. }
  4259. #endif // FARMHASH_SELF_TEST_GUARD
  4260. namespace farmhashnaTest {
  4261. uint32_t CreateSeed(int offset, int salt) {
  4262. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  4263. h = h * c1;
  4264. h ^= (h >> 17);
  4265. h = h * c1;
  4266. h ^= (h >> 17);
  4267. h = h * c1;
  4268. h ^= (h >> 17);
  4269. h += static_cast<uint32_t>(offset & 0xffffffff);
  4270. h = h * c1;
  4271. h ^= (h >> 17);
  4272. h = h * c1;
  4273. h ^= (h >> 17);
  4274. h = h * c1;
  4275. h ^= (h >> 17);
  4276. return h;
  4277. }
  4278. #undef SEED
  4279. #undef SEED1
  4280. #undef SEED0
  4281. #define SEED CreateSeed(offset, -1)
  4282. #define SEED0 CreateSeed(offset, 0)
  4283. #define SEED1 CreateSeed(offset, 1)
  4284. #undef TESTING
  4285. #define TESTING 1
  4286. #if TESTING
  4287. uint32_t expected[] = {
  4288. 1140953930u, 861465670u,
  4289. 3277735313u, 2681724312u,
  4290. 2598464059u, 797982799u,
  4291. 890626835u, 800175912u,
  4292. 2603993599u, 921001710u,
  4293. 1410420968u, 2134990486u,
  4294. 3283896453u, 1867689945u,
  4295. 2914424215u, 2244477846u,
  4296. 255297188u, 2992121793u,
  4297. 1110588164u, 4186314283u,
  4298. 161451183u, 3943596029u,
  4299. 4019337850u, 452431531u,
  4300. 283198166u, 2741341286u,
  4301. 3379021470u, 2557197665u,
  4302. 299850021u, 2532580744u,
  4303. 452473466u, 1706958772u,
  4304. 1298374911u, 3099673830u,
  4305. 2199864459u, 3696623795u,
  4306. 236935126u, 2976578695u,
  4307. 4055299123u, 3281581178u,
  4308. 1053458494u, 1882212500u,
  4309. 2305012065u, 2169731866u,
  4310. 3456121707u, 275903667u,
  4311. 458884671u, 3033004529u,
  4312. 3058973506u, 2379411653u,
  4313. 1898235244u, 1402319660u,
  4314. 2700149065u, 2699376854u,
  4315. 147814787u, 720739346u,
  4316. 2433714046u, 4222949502u,
  4317. 4220361840u, 1712034059u,
  4318. 3425469811u, 3690733394u,
  4319. 4148372108u, 1330324210u,
  4320. 594028478u, 2921867846u,
  4321. 1635026870u, 192883107u,
  4322. 780716741u, 1728752234u,
  4323. 3280331829u, 326029180u,
  4324. 3969463346u, 1436364519u,
  4325. 393215742u, 3349570000u,
  4326. 3824583307u, 1612122221u,
  4327. 2859809759u, 3808705738u,
  4328. 1379537552u, 1646032583u,
  4329. 2233466664u, 1432476832u,
  4330. 4023053163u, 2650381482u,
  4331. 2052294713u, 3552092450u,
  4332. 1628777059u, 1499109081u,
  4333. 3476440786u, 3829307897u,
  4334. 2960536756u, 1554038301u,
  4335. 1145519619u, 3190844552u,
  4336. 2902102606u, 3600725550u,
  4337. 237495366u, 540224401u,
  4338. 65721842u, 489963606u,
  4339. 1448662590u, 397635823u,
  4340. 1596489240u, 1562872448u,
  4341. 1790705123u, 2128624475u,
  4342. 180854224u, 2604346966u,
  4343. 1435705557u, 1262831810u,
  4344. 155445229u, 1672724608u,
  4345. 1669465176u, 1341975128u,
  4346. 663607706u, 2077310004u,
  4347. 3610042449u, 1911523866u,
  4348. 1043692997u, 1454396064u,
  4349. 2563776023u, 294527927u,
  4350. 1099072299u, 1389770549u,
  4351. 703505868u, 678706990u,
  4352. 2952353448u, 2026137563u,
  4353. 3603803785u, 629449419u,
  4354. 1933894405u, 3043213226u,
  4355. 226132789u, 2489287368u,
  4356. 1552847036u, 645684964u,
  4357. 3828089804u, 3632594520u,
  4358. 187883449u, 230403464u,
  4359. 3151491850u, 3272648435u,
  4360. 3729087873u, 1303930448u,
  4361. 2002861219u, 165370827u,
  4362. 916494250u, 1230085527u,
  4363. 3103338579u, 3064290191u,
  4364. 3807265751u, 3628174014u,
  4365. 231181488u, 851743255u,
  4366. 2295806711u, 1781190011u,
  4367. 2988893883u, 1554380634u,
  4368. 1142264800u, 3667013118u,
  4369. 1968445277u, 315203929u,
  4370. 2638023604u, 2290487377u,
  4371. 732137533u, 1909203251u,
  4372. 440398219u, 1891630171u,
  4373. 1380301172u, 1498556724u,
  4374. 4072067757u, 4165088768u,
  4375. 4204318635u, 441430649u,
  4376. 3931792696u, 197618179u,
  4377. 956300927u, 914413116u,
  4378. 3010839769u, 2837339569u,
  4379. 2148126371u, 1913303225u,
  4380. 3074915312u, 3117299654u,
  4381. 4139181436u, 2993479124u,
  4382. 3178848746u, 1357272220u,
  4383. 1438494951u, 507436733u,
  4384. 667183474u, 2084369203u,
  4385. 3854939912u, 1413396341u,
  4386. 126024219u, 146044391u,
  4387. 1016656857u, 3022024459u,
  4388. 3254014218u, 429095991u,
  4389. 165589978u, 1578546616u,
  4390. 985653208u, 1718653828u,
  4391. 623071693u, 366414107u,
  4392. 249776086u, 1207522198u,
  4393. 3047342438u, 2991127487u,
  4394. 3120876698u, 1684583131u,
  4395. 46987739u, 1157614300u,
  4396. 863214540u, 1087193030u,
  4397. 199124911u, 520792961u,
  4398. 3614377032u, 586863115u,
  4399. 3331828431u, 1013201099u,
  4400. 1716848157u, 4033596884u,
  4401. 1164298657u, 4140791139u,
  4402. 1146169032u, 1434258493u,
  4403. 3824360466u, 3242407770u,
  4404. 3725511003u, 232064808u,
  4405. 872586426u, 762243036u,
  4406. 2736953692u, 816692935u,
  4407. 512845449u, 3748861010u,
  4408. 2266795890u, 3781899767u,
  4409. 4290630595u, 517646945u,
  4410. 22638523u, 648000590u,
  4411. 959214578u, 558910384u,
  4412. 1283799121u, 3047062993u,
  4413. 1024246061u, 4027776454u,
  4414. 3544509313u, 622325861u,
  4415. 834785312u, 382936554u,
  4416. 411505255u, 1973395102u,
  4417. 1825135056u, 2725923798u,
  4418. 580988377u, 2826990641u,
  4419. 3474970689u, 1029055034u,
  4420. 812546227u, 2506885666u,
  4421. 2584372201u, 1758123094u,
  4422. 589567754u, 325737734u,
  4423. 345313518u, 2022370576u,
  4424. 3886113119u, 3338548567u,
  4425. 257578986u, 3698087965u,
  4426. 1776047957u, 1771384107u,
  4427. 3604937815u, 3198590202u,
  4428. 2305332220u, 191910725u,
  4429. 4232136669u, 427759438u,
  4430. 4244322689u, 542201663u,
  4431. 3315355162u, 2135941665u,
  4432. 556609672u, 45845311u,
  4433. 1175961330u, 3948351189u,
  4434. 23075771u, 3252374102u,
  4435. 1634635545u, 4151937410u,
  4436. 713127376u, 1467786451u,
  4437. 663013031u, 3444053918u,
  4438. 2638154051u, 810082938u,
  4439. 3077742128u, 1062268187u,
  4440. 2115441882u, 4081398201u,
  4441. 3735739145u, 2794294783u,
  4442. 2335576331u, 2560479831u,
  4443. 1379288194u, 4225182569u,
  4444. 2442302747u, 3948961926u,
  4445. 3958366652u, 3067277639u,
  4446. 3667516477u, 1709989541u,
  4447. 1516711748u, 2339636583u,
  4448. 4188504038u, 59581167u,
  4449. 2725013602u, 3639843023u,
  4450. 2658147000u, 2643979752u,
  4451. 3758739543u, 4189944477u,
  4452. 2470483982u, 877580602u,
  4453. 2995362413u, 118817200u,
  4454. 3252925478u, 2062343506u,
  4455. 3981838403u, 3762572073u,
  4456. 1231633714u, 4168280671u,
  4457. 2931588131u, 3284356565u,
  4458. 1129162571u, 732225574u,
  4459. 4173605289u, 1407328702u,
  4460. 1677744031u, 3532596884u,
  4461. 3232041815u, 1652884780u,
  4462. 2256541290u, 3459463480u,
  4463. 3740979556u, 259034107u,
  4464. 2227121257u, 1426140634u,
  4465. 3606709555u, 3424793077u,
  4466. 315836068u, 3200749877u,
  4467. 1386256573u, 24035717u,
  4468. 2982018998u, 1811050648u,
  4469. 234531934u, 1115203611u,
  4470. 1598686658u, 3146815575u,
  4471. 1603559457u, 323296368u,
  4472. 2632963283u, 1778459926u,
  4473. 739944537u, 579625482u,
  4474. 3486330348u, 492621815u,
  4475. 1231665285u, 2457048126u,
  4476. 3903349120u, 389846205u,
  4477. 3355404249u, 3275550588u,
  4478. 1052645068u, 862072556u,
  4479. 2834153464u, 1481069623u,
  4480. 2657392572u, 4279236653u,
  4481. 1688445808u, 701920051u,
  4482. 3740748788u, 3388062747u,
  4483. 1873358321u, 2152785640u,
  4484. 883382081u, 1005815394u,
  4485. 1020177209u, 734239551u,
  4486. 2371453141u, 100326520u,
  4487. 3488500412u, 1279682138u,
  4488. 2610427744u, 49703572u,
  4489. 3026361211u, 605900428u,
  4490. 302392721u, 2509302188u,
  4491. 1416453607u, 2815915291u,
  4492. 1862819968u, 519710058u,
  4493. 2450888314u, 4017598378u,
  4494. 937074653u, 3035635454u,
  4495. 1590230729u, 3268013438u,
  4496. 2710029305u, 12886044u,
  4497. 3711259084u, 2627383582u,
  4498. 3895772404u, 648534979u,
  4499. 260307902u, 855990313u,
  4500. 3669691805u, 263366740u,
  4501. 2938543471u, 414331688u,
  4502. 3080542944u, 3405007814u,
  4503. 3565059103u, 1190977418u,
  4504. 390836981u, 1606450012u,
  4505. 2649808239u, 2514169310u,
  4506. 2747519432u, 4129538640u,
  4507. 1721522849u, 492099164u,
  4508. 792990594u, 3625507637u,
  4509. 2271095827u, 2993032712u,
  4510. 2302363854u, 4013112951u,
  4511. 1111617969u, 2183845740u,
  4512. 795918276u, 1116991810u,
  4513. 3110898804u, 3963062126u,
  4514. 2737064702u, 462795667u,
  4515. 937372240u, 1343017609u,
  4516. 1091041189u, 2790555455u,
  4517. 277024217u, 25485284u,
  4518. 1166522068u, 1623631848u,
  4519. 241727183u, 2836158787u,
  4520. 3112996740u, 573836428u,
  4521. 2721658101u, 1937681565u,
  4522. 4175169209u, 3190765433u,
  4523. 1970000788u, 1668258120u,
  4524. 114616703u, 954762543u,
  4525. 199237753u, 4094644498u,
  4526. 2522281978u, 732086117u,
  4527. 1756889687u, 2936126607u,
  4528. 2437031370u, 4103143808u,
  4529. 3883389541u, 3171090854u,
  4530. 2483004780u, 1927385370u,
  4531. 2360538162u, 2740855009u,
  4532. 4241185118u, 1492209542u,
  4533. 1672737098u, 2148675559u,
  4534. 1789864670u, 2434313103u,
  4535. 2319172611u, 2760941207u,
  4536. 2636210123u, 1338083267u,
  4537. 1128080590u, 822806371u,
  4538. 1199583556u, 314727461u,
  4539. 1335160250u, 2084630531u,
  4540. 1156261526u, 316766066u,
  4541. 112090465u, 3129033323u,
  4542. 2746885618u, 636616055u,
  4543. 2582210744u, 1721064910u,
  4544. 3468394263u, 470463518u,
  4545. 2076016059u, 408721884u,
  4546. 2121041886u, 378460278u,
  4547. 1915948002u, 357324860u,
  4548. 2301682622u, 2691859523u,
  4549. 1869756364u, 2429314418u,
  4550. 2193146527u, 1185564327u,
  4551. 2614088922u, 1975527044u,
  4552. 919067651u, 2855948894u,
  4553. 3662539576u, 1943802836u,
  4554. 3529473373u, 1490330107u,
  4555. 366036094u, 3384241033u,
  4556. 4276268604u, 448403661u,
  4557. 4271796078u, 1910401882u,
  4558. 3077107698u, 299427366u,
  4559. 2035665349u, 3201262636u,
  4560. 3738454258u, 2554452696u,
  4561. 3588997135u, 3363895827u,
  4562. 1267505995u, 1852004679u,
  4563. 2237827073u, 2803250686u,
  4564. 3468044908u, 2143572850u,
  4565. 1728158656u, 1022551180u,
  4566. 1996680960u, 839529273u,
  4567. 2400647871u, 2201096054u,
  4568. 3606433628u, 2597259793u,
  4569. 3544595875u, 3909443124u,
  4570. 819278607u, 3447346709u,
  4571. 806136613u, 2711436388u,
  4572. 3656063205u, 837475154u,
  4573. 694525336u, 4070212073u,
  4574. 4011303412u, 1068395209u,
  4575. 438095290u, 484603494u,
  4576. 2673730227u, 737767009u,
  4577. 642310823u, 3914002299u,
  4578. 308425103u, 268427550u,
  4579. 1334387085u, 4069797497u,
  4580. 4280783219u, 2914011058u,
  4581. 4243643405u, 2849988118u,
  4582. 2504230175u, 1817156623u,
  4583. 2804200483u, 3406991497u,
  4584. 2948254999u, 2102063419u,
  4585. 1071272117u, 514889942u,
  4586. 571972433u, 1246595599u,
  4587. 1735616066u, 1539151988u,
  4588. 1230831543u, 277987182u,
  4589. 4269526481u, 991511607u,
  4590. 95237878u, 2005032160u,
  4591. 1291113144u, 626619670u,
  4592. 3560835907u, 164940926u,
  4593. 1433635018u, 116647396u,
  4594. 3039097112u, 2868163232u,
  4595. 1141645918u, 1764165478u,
  4596. 881378302u, 2159170082u,
  4597. 2953647681u, 1011320066u,
  4598. 184856151u, 1723308975u,
  4599. 336034862u, 2017579106u,
  4600. 1476681709u, 147523618u,
  4601. 3896252223u, 2264728166u,
  4602. 944743644u, 1694443528u,
  4603. 2690700128u, 1947321519u,
  4604. 735478508u, 4058183171u,
  4605. 260177668u, 505662155u,
  4606. 2391691262u, 1920739747u,
  4607. 3216960415u, 1898176786u,
  4608. 3722741628u, 1511077569u,
  4609. 449636564u, 983350414u,
  4610. 2580237367u, 2055059789u,
  4611. 1103819072u, 2089123665u,
  4612. 3873755579u, 2718467458u,
  4613. 3124338704u, 3204250304u,
  4614. 2475035432u, 1120017626u,
  4615. 3873758287u, 1982999824u,
  4616. 2950794582u, 780634378u,
  4617. 2842141483u, 4029205195u,
  4618. 1656892865u, 3330993377u,
  4619. 80890710u, 1953796601u,
  4620. 3873078673u, 136118734u,
  4621. 2317676604u, 4199091610u,
  4622. 1864448181u, 3063437608u,
  4623. 1699452298u, 1403506686u,
  4624. 1513069466u, 2348491299u,
  4625. 4273657745u, 4055855649u,
  4626. 1805475756u, 2562064338u,
  4627. 973124563u, 4197091358u,
  4628. 172861513u, 2858726767u,
  4629. 4271866024u, 3071338162u,
  4630. 3590386266u, 2328277259u,
  4631. 1096050703u, 1189614342u,
  4632. 459509140u, 771592405u,
  4633. 817999971u, 3740825152u,
  4634. 520400189u, 1941874618u,
  4635. 185232757u, 4032960199u,
  4636. 3928245258u, 3527721294u,
  4637. 1301118856u, 752188080u,
  4638. 3512945009u, 308584855u,
  4639. 2105373972u, 752872278u,
  4640. 3823368815u, 3760952096u,
  4641. 4250142168u, 2565680167u,
  4642. 3646354146u, 1259957455u,
  4643. 1085857127u, 3471066607u,
  4644. 38924274u, 3770488806u,
  4645. 1083869477u, 3312508103u,
  4646. 71956383u, 3738784936u,
  4647. 3099963860u, 1255084262u,
  4648. 4286969992u, 3621849251u,
  4649. 1190908967u, 1831557743u,
  4650. 2363435042u, 54945052u,
  4651. 4059585566u, 4023974274u,
  4652. 1788578453u, 3442180039u,
  4653. 2534883189u, 2432427547u,
  4654. 3909757989u, 731996369u,
  4655. 4168347425u, 1356028512u,
  4656. 2741583197u, 1280920000u,
  4657. 312887059u, 3259015297u,
  4658. 3946278527u, 4135481831u,
  4659. 1281043691u, 1121403845u,
  4660. 3312292477u, 1819941269u,
  4661. 1741932545u, 3293015483u,
  4662. 2127558730u, 713121337u,
  4663. 2635469238u, 486003418u,
  4664. 4015067527u, 2976737859u,
  4665. 2108187161u, 927011680u,
  4666. 1970188338u, 4177613234u,
  4667. 1799789551u, 2118505126u,
  4668. 4134691985u, 1958963937u,
  4669. 1929210029u, 2555835851u,
  4670. 2768832862u, 910892050u,
  4671. 2567532373u, 4075249328u,
  4672. 86689814u, 3726640307u,
  4673. 1392137718u, 1240000030u,
  4674. 4104757832u, 3026358429u,
  4675. 313797689u, 1435798509u,
  4676. 3101500919u, 1241665335u,
  4677. 3573008472u, 3615577014u,
  4678. 3767659003u, 3134294021u,
  4679. 4063565523u, 2296824134u,
  4680. 1541946015u, 3087190425u,
  4681. 2693152531u, 2199672572u,
  4682. 2123763822u, 1034244398u,
  4683. 857839960u, 2515339233u,
  4684. 2228007483u, 1628096047u,
  4685. 2116502287u, 2502657424u,
  4686. 2809830736u, 460237542u,
  4687. 450205998u, 3646921704u,
  4688. 3818199357u, 1808504491u,
  4689. 1950698961u, 2069753399u,
  4690. 3657033172u, 3734547671u,
  4691. 4067859590u, 3292597295u,
  4692. 1106466069u, 356742959u,
  4693. 2469567432u, 3495418823u,
  4694. 183440071u, 3248055817u,
  4695. 3662626864u, 1750561299u,
  4696. 3926138664u, 4088592524u,
  4697. 567122118u, 3810297651u,
  4698. 992181339u, 3384018814u,
  4699. 3272124369u, 3177596743u,
  4700. 320086295u, 2316548367u,
  4701. 100741310u, 451656820u,
  4702. 4086604273u, 3759628395u,
  4703. 2553391092u, 1745659881u,
  4704. 3650357479u, 2390172694u,
  4705. 330172533u, 767377322u,
  4706. 526742034u, 4102497288u,
  4707. 2088767754u, 164402616u,
  4708. 2482632320u, 2352347393u,
  4709. 1873658044u, 3861555476u,
  4710. 2751052984u, 1767810825u,
  4711. 20037241u, 545143220u,
  4712. 2594532522u, 472304191u,
  4713. 3441135892u, 3323383489u,
  4714. 258785117u, 2977745165u,
  4715. 2781737565u, 2963590112u,
  4716. 2756998822u, 207428029u,
  4717. 2581558559u, 3824717027u,
  4718. 1258619503u, 3472047571u,
  4719. 2648427775u, 2360400900u,
  4720. 2393763818u, 2332399088u,
  4721. 3932701729u, 884421165u,
  4722. 1396468647u, 1377764574u,
  4723. 4061795938u, 1559119087u,
  4724. 3343596838u, 3604258095u,
  4725. 1435134775u, 1099809675u,
  4726. 908163739u, 1418405656u,
  4727. 368446627u, 3741651161u,
  4728. 3374512975u, 3542220540u,
  4729. 3244772570u, 200009340u,
  4730. 3198975081u, 2521038253u,
  4731. 4081637863u, 337070226u,
  4732. 3235259030u, 3897262827u,
  4733. 736956644u, 641040550u,
  4734. 644850146u, 1306761320u,
  4735. 4219448634u, 193750500u,
  4736. 3293278106u, 1383997679u,
  4737. 1242645122u, 4109252858u,
  4738. 450747727u, 3716617561u,
  4739. 362725793u, 2252520167u,
  4740. 3377483696u, 1788337208u,
  4741. 8130777u, 3226734120u,
  4742. 759239140u, 1012411364u,
  4743. 1658628529u, 2911512007u,
  4744. 1002580201u, 1681898320u,
  4745. 3039016929u, 4294520281u,
  4746. 367022558u, 3071359622u,
  4747. 3205848570u, 152989999u,
  4748. 3839042136u, 2357687350u,
  4749. 4273132307u, 3898950547u,
  4750. 1176841812u, 1314157485u,
  4751. 75443951u, 1027027239u,
  4752. 1858986613u, 2040551642u,
  4753. 36574105u, 2603059541u,
  4754. 3456147251u, 2137668425u,
  4755. 4077477194u, 3565689036u,
  4756. 491832241u, 363703593u,
  4757. 2579177168u, 3589545214u,
  4758. 265993036u, 1864569342u,
  4759. 4149035573u, 3189253455u,
  4760. 1072259310u, 3153745937u,
  4761. 923017956u, 490608221u,
  4762. 855846773u, 845706553u,
  4763. 1018226240u, 1604548872u,
  4764. 3833372385u, 3287246572u,
  4765. 2757959551u, 2452872151u,
  4766. 1553870564u, 1713154780u,
  4767. 2649450292u, 500120236u,
  4768. 84251717u, 661869670u,
  4769. 1444911517u, 2489716881u,
  4770. 2810524030u, 1561519055u,
  4771. 3884088359u, 2509890699u,
  4772. 4247155916u, 1005636939u,
  4773. 3224066062u, 2774151984u,
  4774. 2035978240u, 2514910366u,
  4775. 1478837908u, 3144450144u,
  4776. 2107011431u, 96459446u,
  4777. 3587732908u, 2389230590u,
  4778. 3287635953u, 250533792u,
  4779. 1235983679u, 4237425634u,
  4780. 3704645833u, 3882376657u,
  4781. 2976369049u, 1187061987u,
  4782. 276949224u, 4100839753u,
  4783. 1698347543u, 1629662314u,
  4784. 1556151829u, 3784939568u,
  4785. 427484362u, 4246879223u,
  4786. 3155311770u, 4285163791u,
  4787. 1693376813u, 124492786u,
  4788. 1858777639u, 3476334357u,
  4789. 1941442701u, 1121980173u,
  4790. 3485932087u, 820852908u,
  4791. 358032121u, 2511026735u,
  4792. 1873607283u, 2556067450u,
  4793. 2248275536u, 1528632094u,
  4794. 1535473864u, 556796152u,
  4795. 1499201704u, 1472623890u,
  4796. 1526518503u, 3692729434u,
  4797. 1476438092u, 2913077464u,
  4798. 335109599u, 2167614601u,
  4799. 4121131078u, 3158127917u,
  4800. 3051522276u, 4046477658u,
  4801. 2857717851u, 1863977403u,
  4802. 1341023343u, 692059110u,
  4803. 1802040304u, 990407433u,
  4804. 3285847572u, 319814144u,
  4805. 561105582u, 1540183799u,
  4806. 4052924496u, 2926590471u,
  4807. 2244539806u, 439121871u,
  4808. 3317903224u, 3178387550u,
  4809. 4265214507u, 82077489u,
  4810. 1978918971u, 4279668976u,
  4811. 128732476u, 2853224222u,
  4812. 464407878u, 4190838199u,
  4813. 997819001u, 3250520802u,
  4814. 2330081301u, 4095846095u,
  4815. 733509243u, 1583801700u,
  4816. 722314527u, 3552883023u,
  4817. 1403784280u, 432327540u,
  4818. 1877837196u, 3912423882u,
  4819. 505219998u, 696031431u,
  4820. 908238873u, 4189387259u,
  4821. 8759461u, 2540185277u,
  4822. 3385159748u, 381355877u,
  4823. 2519951681u, 1679786240u,
  4824. 2019419351u, 4051584612u,
  4825. 1933923923u, 3768201861u,
  4826. 1670133081u, 3454981037u,
  4827. 700836153u, 1675560450u,
  4828. 371560700u, 338262316u,
  4829. 847351840u, 2222395828u,
  4830. 3130433948u, 405251683u,
  4831. 3037574880u, 184098830u,
  4832. 453340528u, 1385561439u,
  4833. 2224044848u, 4071581802u,
  4834. 1431235296u, 5570097u,
  4835. 570114376u, 2287305551u,
  4836. 2272418128u, 803575837u,
  4837. 3943113491u, 414959787u,
  4838. 708083137u, 2452657767u,
  4839. 4019147902u, 3841480082u,
  4840. 3791794715u, 2965956183u,
  4841. 2763690963u, 2350937598u,
  4842. 3424361375u, 779434428u,
  4843. 1274947212u, 686105485u,
  4844. 3426668051u, 3692865672u,
  4845. 3057021940u, 2285701422u,
  4846. 349809124u, 1379278508u,
  4847. 3623750518u, 215970497u,
  4848. 1783152480u, 823305654u,
  4849. 216118434u, 1787189830u,
  4850. 3692048450u, 2272612521u,
  4851. 3032187389u, 4159715581u,
  4852. 1388133148u, 1611772864u,
  4853. 2544383526u, 552925303u,
  4854. 3420960112u, 3198900547u,
  4855. 3503230228u, 2603352423u,
  4856. 2318375898u, 4064071435u,
  4857. 3006227299u, 4194096960u,
  4858. 1283392422u, 1510460996u,
  4859. 174272138u, 3671038966u,
  4860. 1775955687u, 1719108984u,
  4861. 1763892006u, 1385029063u,
  4862. 4083790740u, 406757708u,
  4863. 684087286u, 531310503u,
  4864. 3329923157u, 3492083607u,
  4865. 1059031410u, 3037314475u,
  4866. 3105682208u, 3382290593u,
  4867. 2292208503u, 426380557u,
  4868. 97373678u, 3842309471u,
  4869. 777173623u, 3241407531u,
  4870. 303065016u, 1477104583u,
  4871. 4234905200u, 2512514774u,
  4872. 2649684057u, 1397502982u,
  4873. 1802596032u, 3973022223u,
  4874. 2543566442u, 3139578968u,
  4875. 3193669211u, 811750340u,
  4876. 4013496209u, 567361887u,
  4877. 4169410406u, 3622282782u,
  4878. 3403136990u, 2540585554u,
  4879. 895210040u, 3862229802u,
  4880. 1145435213u, 4146963980u,
  4881. 784952939u, 943914610u,
  4882. 573034522u, 464420660u,
  4883. 2356867109u, 3054347639u,
  4884. 3985088434u, 1911188923u,
  4885. 583391304u, 176468511u,
  4886. 2990150068u, 2338031599u,
  4887. 519948041u, 3181425568u,
  4888. 496106033u, 4110294665u,
  4889. 2736756930u, 1196757691u,
  4890. 1089679033u, 240953857u,
  4891. 3399092928u, 4040779538u,
  4892. 2843673626u, 240495962u,
  4893. 3017658263u, 3828377737u,
  4894. 4243717901u, 2448373688u,
  4895. 2759616657u, 2246245780u,
  4896. 308018483u, 4262383425u,
  4897. 2731780771u, 328023017u,
  4898. 2884443148u, 841480070u,
  4899. 3188015819u, 4051263539u,
  4900. 2298178908u, 2944209234u,
  4901. 1372958390u, 4164532914u,
  4902. 4074952232u, 1683612329u,
  4903. 2155036654u, 1872815858u,
  4904. 2041174279u, 2368092311u,
  4905. 206775997u, 2283918569u,
  4906. 645945606u, 115406202u,
  4907. 4206471368u, 3923500892u,
  4908. 2217060665u, 350160869u,
  4909. 706531239u, 2824302286u,
  4910. 509981657u, 1469342315u,
  4911. 140980u, 1891558063u,
  4912. 164887091u, 3094962711u,
  4913. 3437115622u, 13327420u,
  4914. 422986366u, 330624974u,
  4915. 3630863408u, 2425505046u,
  4916. 824008515u, 3543885677u,
  4917. 918718096u, 376390582u,
  4918. 3224043675u, 3724791476u,
  4919. 1837192976u, 2968738516u,
  4920. 3424344721u, 3187805406u,
  4921. 1550978788u, 1743089918u,
  4922. 4251270061u, 645016762u,
  4923. 3855037968u, 1928519266u,
  4924. 1373803416u, 2289007286u,
  4925. 1889218686u, 1610271373u,
  4926. 3059200728u, 2108753646u,
  4927. 582042641u, 812347242u,
  4928. 3188172418u, 191994904u,
  4929. 1343511943u, 2247006571u,
  4930. 463291708u, 2697254095u,
  4931. 1534175504u, 1106275740u,
  4932. 622521957u, 917121602u,
  4933. 4095777215u, 3955972648u,
  4934. 3852234638u, 2845309942u,
  4935. 3299763344u, 2864033668u,
  4936. 2554947496u, 799569078u,
  4937. 2551629074u, 1102873346u,
  4938. 2661022773u, 2006922227u,
  4939. 2900438444u, 1448194126u,
  4940. 1321567432u, 1983773590u,
  4941. 1237256330u, 3449066284u,
  4942. 1691553115u, 3274671549u,
  4943. 4271625619u, 2741371614u,
  4944. 3285899651u, 786322314u,
  4945. 1586632825u, 564385522u,
  4946. 2530557509u, 2974240289u,
  4947. 1244759631u, 3263135197u,
  4948. 3592389776u, 3570296884u,
  4949. 2749873561u, 521432811u,
  4950. 987586766u, 3206261120u,
  4951. 1327840078u, 4078716491u,
  4952. 1753812954u, 976892272u,
  4953. 1827135136u, 1781944746u,
  4954. 1328622957u, 1015377974u,
  4955. 3439601008u, 2209584557u,
  4956. 2482286699u, 1109175923u,
  4957. 874877499u, 2036083451u,
  4958. 483570344u, 1091877599u,
  4959. 4190721328u, 1129462471u,
  4960. 640035849u, 1867372700u,
  4961. 920761165u, 3273688770u,
  4962. 1623777358u, 3389003793u,
  4963. 3241132743u, 2734783008u,
  4964. 696674661u, 2502161880u,
  4965. 1646071378u, 1164309901u,
  4966. 350411888u, 1978005963u,
  4967. 2253937037u, 7371540u,
  4968. 989577914u, 3626554867u,
  4969. 3214796883u, 531343826u,
  4970. 398899695u, 1145247203u,
  4971. 1516846461u, 3656006011u,
  4972. 529303412u, 3318455811u,
  4973. 3062828129u, 1696355359u,
  4974. 3698796465u, 3155218919u,
  4975. 1457595996u, 3191404246u,
  4976. 1395609912u, 2917345728u,
  4977. 1237411891u, 1854985978u,
  4978. 1091884675u, 3504488111u,
  4979. 3109924189u, 1628881950u,
  4980. 3939149151u, 878608872u,
  4981. 778235395u, 1052990614u,
  4982. 903730231u, 2069566979u,
  4983. 2437686324u, 3163786257u,
  4984. 2257884264u, 2123173186u,
  4985. 939764916u, 2933010098u,
  4986. 1235300371u, 1256485167u,
  4987. 1950274665u, 2180372319u,
  4988. 2648400302u, 122035049u,
  4989. 1883344352u, 2083771672u,
  4990. 3712110541u, 321199441u,
  4991. 1896357377u, 508560958u,
  4992. 3066325351u, 2770847216u,
  4993. 3177982504u, 296902736u,
  4994. 1486926688u, 456842861u,
  4995. 601221482u, 3992583643u,
  4996. 2794121515u, 1533934172u,
  4997. 1706465470u, 4281971893u,
  4998. 2557027816u, 900741486u,
  4999. 227175484u, 550595824u,
  5000. 690918144u, 2825943628u,
  5001. 90375300u, 300318232u,
  5002. 1985329734u, 1440763373u,
  5003. 3670603707u, 2533900859u,
  5004. 3253901179u, 542270815u,
  5005. 3677388841u, 307706478u,
  5006. 2570910669u, 3320103693u,
  5007. 1273768482u, 1216399252u,
  5008. 1652924805u, 1043647584u,
  5009. 1120323676u, 639941430u,
  5010. 325675502u, 3652676161u,
  5011. 4241680335u, 1545838362u,
  5012. 1991398008u, 4100211814u,
  5013. 1097584090u, 3262252593u,
  5014. 2254324292u, 1765019121u,
  5015. 4060211241u, 2315856188u,
  5016. 3704419305u, 411263051u,
  5017. 238929055u, 3540688404u,
  5018. 3094544537u, 3250435765u,
  5019. 3460621305u, 1967599860u,
  5020. 2016157366u, 847389916u,
  5021. 1659615591u, 4020453639u,
  5022. 901109753u, 2682611693u,
  5023. 1661364280u, 177155177u,
  5024. 3210561911u, 3802058181u,
  5025. 797089608u, 3286110054u,
  5026. 2110358240u, 1353279028u,
  5027. 2479975820u, 471725410u,
  5028. 2219863904u, 3623364733u,
  5029. 3167128228u, 1052188336u,
  5030. 3656587111u, 721788662u,
  5031. 3061255808u, 1615375832u,
  5032. 924941453u, 2547780700u,
  5033. 3328169224u, 1310964134u,
  5034. 2701956286u, 4145497671u,
  5035. 1421461094u, 1221397398u,
  5036. 1589183618u, 1492533854u,
  5037. 449740816u, 2686506989u,
  5038. 3035198924u, 1682886232u,
  5039. 2529760244u, 3342031659u,
  5040. 1235084019u, 2151665147u,
  5041. 2315686577u, 3282027660u,
  5042. 1140138691u, 2754346599u,
  5043. 2091754612u, 1178454681u,
  5044. 4226896579u, 2942520471u,
  5045. 2122168506u, 3751680858u,
  5046. 3213794286u, 2601416506u,
  5047. 4142747914u, 3951404257u,
  5048. 4243249649u, 748595836u,
  5049. 4004834921u, 238887261u,
  5050. 1927321047u, 2217148444u,
  5051. 205977665u, 1885975275u,
  5052. 186020771u, 2367569534u,
  5053. 2941662631u, 2608559272u,
  5054. 3342096731u, 741809437u,
  5055. 1962659444u, 3539886328u,
  5056. 3036596491u, 2282550094u,
  5057. 2366462727u, 2748286642u,
  5058. 2144472852u, 1390394371u,
  5059. 1257385924u, 2205425874u,
  5060. 2119055686u, 46865323u,
  5061. 3597555910u, 3188438773u,
  5062. 2372320753u, 3641116924u,
  5063. 3116286108u, 2680722658u,
  5064. 3371014971u, 2058751609u,
  5065. 2966943726u, 2345078707u,
  5066. 2330535244u, 4013841927u,
  5067. 1169588594u, 857915866u,
  5068. 1875260989u, 3175831309u,
  5069. 3193475664u, 1955181430u,
  5070. 923161569u, 4068653043u,
  5071. 776445899u, 954196929u,
  5072. 61509556u, 4248237857u,
  5073. 3808667664u, 581227317u,
  5074. 2893240187u, 4159497403u,
  5075. 4212264930u, 3973886195u,
  5076. 2077539039u, 851579036u,
  5077. 2957587591u, 772351886u,
  5078. 1173659554u, 946748363u,
  5079. 2794103714u, 2094375930u,
  5080. 4234750213u, 3671645488u,
  5081. 2614250782u, 2620465358u,
  5082. 3122317317u, 2365436865u,
  5083. 3393973390u, 523513960u,
  5084. 3645735309u, 2766686992u,
  5085. 2023960931u, 2312244996u,
  5086. 1875932218u, 3253711056u,
  5087. 3622416881u, 3274929205u,
  5088. 612094988u, 1555465129u,
  5089. 2114270406u, 3553762793u,
  5090. 1832633644u, 1087551556u,
  5091. 3306195841u, 1702313921u,
  5092. 3675066046u, 1735998785u,
  5093. 1690923980u, 1482649756u,
  5094. 1171351291u, 2043136409u,
  5095. 1962596992u, 461214626u,
  5096. 3278253346u, 1392428048u,
  5097. 3744621107u, 1028502697u,
  5098. 3991171462u, 1014064003u,
  5099. 3642345425u, 3186995039u,
  5100. 6114625u, 3359104346u,
  5101. 414856965u, 2814387514u,
  5102. 3583605071u, 2497896367u,
  5103. 1024572712u, 1927582962u,
  5104. 2892797583u, 845302635u,
  5105. 328548052u, 1523379748u,
  5106. 3392622118u, 1347167673u,
  5107. 1012316581u, 37767602u,
  5108. 2647726017u, 1070326065u,
  5109. 2075035198u, 4202817168u,
  5110. 2502924707u, 2612406822u,
  5111. 2187115553u, 1180137213u,
  5112. 701024148u, 1481965992u,
  5113. 3223787553u, 2083541843u,
  5114. 203230202u, 3876887380u,
  5115. 1334816273u, 2870251538u,
  5116. 2186205850u, 3985213979u,
  5117. 333533378u, 806507642u,
  5118. 1010064531u, 713520765u,
  5119. 3084131515u, 2637421459u,
  5120. 1703168933u, 1517562266u,
  5121. 4089081247u, 3231042924u,
  5122. 3079916123u, 3154574447u,
  5123. 2253948262u, 1725190035u,
  5124. 2452539325u, 1343734533u,
  5125. 213706059u, 2519409656u,
  5126. 108055211u, 2916327746u,
  5127. 587001593u, 1917607088u,
  5128. 4202913084u, 926304016u,
  5129. 469255411u, 4042080256u,
  5130. 3498936874u, 246692543u,
  5131. 495780578u, 438717281u,
  5132. 2259272650u, 4011324645u,
  5133. 2836854664u, 2317249321u,
  5134. 946828752u, 1280403658u,
  5135. 1905648354u, 2034241661u,
  5136. 774652981u, 1285694082u,
  5137. 2200307766u, 2158671727u,
  5138. 1135162148u, 232040752u,
  5139. 397012087u, 1717527689u,
  5140. 1720414106u, 918797022u,
  5141. 2580119304u, 3568069742u,
  5142. 2904461070u, 3893453420u,
  5143. 973817938u, 667499332u,
  5144. 3785870412u, 2088861715u,
  5145. 1565179401u, 600903026u,
  5146. 591806775u, 3512242245u,
  5147. 997964515u, 2339605347u,
  5148. 1134342772u, 3234226304u,
  5149. 4084179455u, 302315791u,
  5150. 2445626811u, 2590372496u,
  5151. 345572299u, 2274770442u,
  5152. 3600587867u, 3706939009u,
  5153. 1430507980u, 2656330434u,
  5154. 1079209397u, 2122849632u,
  5155. 1423705223u, 3826321888u,
  5156. 3683385276u, 1057038163u,
  5157. 1242840526u, 3987000643u,
  5158. 2398253089u, 1538190921u,
  5159. 1295898647u, 3570196893u,
  5160. 3065138774u, 3111336863u,
  5161. 2524949549u, 4203895425u,
  5162. 3025864372u, 968800353u,
  5163. 1023721001u, 3763083325u,
  5164. 526350786u, 635552097u,
  5165. 2308118370u, 2166472723u,
  5166. 2196937373u, 2643841788u,
  5167. 3040011470u, 4010301879u,
  5168. 2782379560u, 3474682856u,
  5169. 4201389782u, 4223278891u,
  5170. 1457302296u, 2251842132u,
  5171. 1090062008u, 3188219189u,
  5172. 292733931u, 1424229089u,
  5173. 1590782640u, 1365212370u,
  5174. 3975957073u, 3982969588u,
  5175. 2927147928u, 1048291071u,
  5176. 2766680094u, 884908196u,
  5177. 35237839u, 2221180633u,
  5178. 2490333812u, 4098360768u,
  5179. 4029081103u, 3490831871u,
  5180. 2392516272u, 3455379186u,
  5181. 3948800722u, 335456628u,
  5182. 2105117968u, 4181629008u,
  5183. 1044201772u, 3335754111u,
  5184. 540133451u, 3313113759u,
  5185. 3786107905u, 2627207327u,
  5186. 3540337875u, 3473113388u,
  5187. 3430536378u, 2514123129u,
  5188. 2124531276u, 3872633376u,
  5189. 3272957388u, 3501994650u,
  5190. 2418881542u, 487365389u,
  5191. 3877672368u, 1512866656u,
  5192. 3486531087u, 2102955203u,
  5193. 1136054817u, 3004241477u,
  5194. 1549075351u, 1302002008u,
  5195. 3936430045u, 2258587644u,
  5196. 4109233936u, 3679809321u,
  5197. 3467083076u, 2484463221u,
  5198. 1594979755u, 529218470u,
  5199. 3527024461u, 1147434678u,
  5200. 106799023u, 1823161970u,
  5201. 1704656738u, 1675883700u,
  5202. 3308746763u, 1875093248u,
  5203. 1352868568u, 1898561846u,
  5204. 2508994984u, 3177750780u,
  5205. 4217929592u, 400784472u,
  5206. 80090315u, 3564414786u,
  5207. 3841585648u, 3379293868u,
  5208. 160353261u, 2413172925u,
  5209. 2378499279u, 673436726u,
  5210. 1505702418u, 1330977363u,
  5211. 1853298225u, 3201741245u,
  5212. 2135714208u, 4069554166u,
  5213. 3715612384u, 3692488887u,
  5214. 3680311316u, 4274382900u,
  5215. 914186796u, 2264886523u,
  5216. 3869634032u, 1254199592u,
  5217. 1131020455u, 194781179u,
  5218. 429923922u, 2763792336u,
  5219. 2052895198u, 3997373194u,
  5220. 3440090658u, 2165746386u,
  5221. 1575500242u, 3463310191u,
  5222. 2064974716u, 3779513671u,
  5223. 3106421434u, 880320527u,
  5224. 3281914119u, 286569042u,
  5225. 3909096631u, 122359727u,
  5226. 1429837716u, 252230074u,
  5227. 4111461225u, 762273136u,
  5228. 93658514u, 2766407143u,
  5229. 3623657004u, 3869801679u,
  5230. 3925695921u, 2390397316u,
  5231. 2499025338u, 2741806539u,
  5232. 2507199021u, 1659221866u,
  5233. 361292116u, 4048761557u,
  5234. 3797133396u, 1517903247u,
  5235. 3121647246u, 3884308578u,
  5236. 1697201500u, 1558800262u,
  5237. 4150812360u, 3161302278u,
  5238. 2610217849u, 641564641u,
  5239. 183814518u, 2075245419u,
  5240. 611996508u, 2223461433u,
  5241. 329123979u, 121860586u,
  5242. 860985829u, 1137889144u,
  5243. 4018949439u, 2904348960u,
  5244. 947795261u, 1992594155u,
  5245. 4255427501u, 2281583851u,
  5246. 2892637604u, 1478186924u,
  5247. 3050771207u, 2767035539u,
  5248. 373510582u, 1963520320u,
  5249. 3763848370u, 3756817798u,
  5250. 627269409u, 1806905031u,
  5251. 1814444610u, 3646665053u,
  5252. 1822693920u, 278515794u,
  5253. 584050483u, 4142579188u,
  5254. 2149745808u, 3193071606u,
  5255. 1179706341u, 2693495182u,
  5256. 3259749808u, 644172091u,
  5257. 880509048u, 3340630542u,
  5258. 3365160815u, 2384445068u,
  5259. 3053081915u, 2840648309u,
  5260. 1986990122u, 1084703471u,
  5261. 2370410550u, 1627743573u,
  5262. 2244943480u, 4057483496u,
  5263. 2611595995u, 2470013639u,
  5264. 4024732359u, 3987190386u,
  5265. 873421687u, 2447660175u,
  5266. 3226583022u, 767655877u,
  5267. 2528024413u, 1962070688u,
  5268. 1233635843u, 2163464207u,
  5269. 659054446u, 854207134u,
  5270. 258410943u, 4197831420u,
  5271. 2515400215u, 3100476924u,
  5272. 1961549594u, 2219491151u,
  5273. 3997658851u, 163850514u,
  5274. 470325051u, 2598261204u,
  5275. 3052145580u, 59836528u,
  5276. 1376188597u, 966733415u,
  5277. 850667549u, 3622479237u,
  5278. 1083731990u, 1525777459u,
  5279. 4005126532u, 1428155540u,
  5280. 2781907007u, 943739431u,
  5281. 1493961005u, 2839096988u,
  5282. 2000057832u, 1941829603u,
  5283. 1901484772u, 939810041u,
  5284. 3377407371u, 3090115837u,
  5285. 3310840540u, 2068409688u,
  5286. 3261383939u, 2212130277u,
  5287. 2594774045u, 2912652418u,
  5288. 4179816101u, 3534504531u,
  5289. 3349254805u, 2796552902u,
  5290. 1385421283u, 4259908631u,
  5291. 3714780837u, 3070073945u,
  5292. 3372846298u, 3835884044u,
  5293. 3047965714u, 3009018735u,
  5294. 744091167u, 1861124263u,
  5295. 2764936304u, 1338171648u,
  5296. 4222019554u, 1395200692u,
  5297. 1371426007u, 3338031581u,
  5298. 2525665319u, 4196233786u,
  5299. 2332743921u, 1474702008u,
  5300. 2274266301u, 4255175517u,
  5301. 2290169528u, 1793910997u,
  5302. 2188254024u, 354202001u,
  5303. 3864458796u, 4280290498u,
  5304. 1554419340u, 1733094688u,
  5305. 2010552302u, 1561807039u,
  5306. 664313606u, 2548990879u,
  5307. 1084699349u, 3233936866u,
  5308. 973895284u, 2386881969u,
  5309. 1831995860u, 2961465052u,
  5310. 1428704144u, 3269904970u,
  5311. 231648253u, 2602483763u,
  5312. 4125013173u, 3319187387u,
  5313. 3347011944u, 1892898231u,
  5314. 4019114049u, 868879116u,
  5315. 4085937045u, 2378411019u,
  5316. 1072588531u, 3547435717u,
  5317. 2208070766u, 1069899078u,
  5318. 3142980597u, 2337088907u,
  5319. 1593338562u, 919414554u,
  5320. 688077849u, 3625708135u,
  5321. 1472447348u, 1947711896u,
  5322. 3953006207u, 877438080u,
  5323. 845995820u, 3150361443u,
  5324. 3053496713u, 2484577841u,
  5325. 224271045u, 2914958001u,
  5326. 2682612949u, 806655563u,
  5327. 2436224507u, 1907729235u,
  5328. 2920583824u, 1251814062u,
  5329. 2070814520u, 4034325578u,
  5330. 497847539u, 2714317144u,
  5331. 385182008u, 640855184u,
  5332. 1327075087u, 1062468773u,
  5333. 1757405994u, 1374270191u,
  5334. 4263183176u, 3041193150u,
  5335. 1037871524u, 3633173991u,
  5336. 4231821821u, 2830131945u,
  5337. 3505072908u, 2830570613u,
  5338. 4195208715u, 575398021u,
  5339. 3992840257u, 3691788221u,
  5340. 1949847968u, 2999344380u,
  5341. 3183782163u, 3723754342u,
  5342. 759716128u, 3284107364u,
  5343. 1714496583u, 15918244u,
  5344. 820509475u, 2553936299u,
  5345. 2201876606u, 4237151697u,
  5346. 2605688266u, 3253705097u,
  5347. 1008333207u, 712158730u,
  5348. 1722280252u, 1933868287u,
  5349. 4152736859u, 2097020806u,
  5350. 584426382u, 2836501956u,
  5351. 2522777566u, 1996172430u,
  5352. 2122199776u, 1069285218u,
  5353. 1474209360u, 690831894u,
  5354. 107482532u, 3695525410u,
  5355. 670591796u, 768977505u,
  5356. 2412057331u, 3647886687u,
  5357. 3110327607u, 1072658422u,
  5358. 379861934u, 1557579480u,
  5359. 4124127129u, 2271365865u,
  5360. 3880613089u, 739218494u,
  5361. 547346027u, 388559045u,
  5362. 3147335977u, 176230425u,
  5363. 3094853730u, 2554321205u,
  5364. 1495176194u, 4093461535u,
  5365. 3521297827u, 4108148413u,
  5366. 1913727929u, 1177947623u,
  5367. 1911655402u, 1053371241u,
  5368. 3265708874u, 1266515850u,
  5369. 1045540427u, 3194420196u,
  5370. 3717104621u, 1144474110u,
  5371. 1464392345u, 52070157u,
  5372. 4144237690u, 3350490823u,
  5373. 4166253320u, 2747410691u,
  5374. };
  5375. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  5376. bool Test(int offset, int len = 0) {
  5377. #undef Check
  5378. #undef IsAlive
  5379. #define Check(x) do { \
  5380. const uint32_t actual = (x), e = expected[index++]; \
  5381. bool ok = actual == e; \
  5382. if (!ok) { \
  5383. cerr << "expected " << hex << e << " but got " << actual << endl; \
  5384. ++errors; \
  5385. } \
  5386. assert(ok); \
  5387. } while (0)
  5388. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  5389. // After the following line is where the uses of "Check" and such will go.
  5390. static int index = 0;
  5391. if (offset == -1) { int alive = 0; { uint64_t h = farmhashna::Hash64WithSeeds(data, len++, SEED0, SEED1); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashna::Hash64WithSeed(data, len++, SEED); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashna::Hash64(data, len++); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } len -= 3; return alive > 0; }
  5392. { uint64_t h = farmhashna::Hash64WithSeeds(data + offset, len, SEED0, SEED1); Check(h >> 32); Check((h << 32) >> 32); }
  5393. { uint64_t h = farmhashna::Hash64WithSeed(data + offset, len, SEED); Check(h >> 32); Check((h << 32) >> 32); }
  5394. { uint64_t h = farmhashna::Hash64(data + offset, len); Check(h >> 32); Check((h << 32) >> 32); }
  5395. return true;
  5396. #undef Check
  5397. #undef IsAlive
  5398. }
  5399. int RunTest() {
  5400. Setup();
  5401. int i = 0;
  5402. cout << "Running farmhashnaTest";
  5403. if (!Test(-1)) {
  5404. cout << "... Unavailable\n";
  5405. return NoteErrors();
  5406. }
  5407. // Good. The function is attempting to hash, so run the full test.
  5408. int errors_prior_to_test = errors;
  5409. for ( ; i < kTestSize - 1; i++) {
  5410. Test(i * i, i);
  5411. }
  5412. for ( ; i < kDataSize; i += i / 7) {
  5413. Test(0, i);
  5414. }
  5415. Test(0, kDataSize);
  5416. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  5417. return NoteErrors();
  5418. }
  5419. #else
  5420. // After the following line is where the code to print hash codes will go.
  5421. void Dump(int offset, int len) {
  5422. { uint64_t h = farmhashna::Hash64WithSeeds(data + offset, len, SEED0, SEED1); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  5423. { uint64_t h = farmhashna::Hash64WithSeed(data + offset, len, SEED); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  5424. { uint64_t h = farmhashna::Hash64(data + offset, len); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  5425. }
  5426. #endif
  5427. #undef SEED
  5428. #undef SEED1
  5429. #undef SEED0
  5430. } // namespace farmhashnaTest
  5431. #if TESTING
  5432. static int farmhashnaTestResult = farmhashnaTest::RunTest();
  5433. #else
  5434. int main(int argc, char** argv) {
  5435. Setup();
  5436. cout << "uint32_t expected[] = {\n";
  5437. int i = 0;
  5438. for ( ; i < kTestSize - 1; i++) {
  5439. farmhashnaTest::Dump(i * i, i);
  5440. }
  5441. for ( ; i < kDataSize; i += i / 7) {
  5442. farmhashnaTest::Dump(0, i);
  5443. }
  5444. farmhashnaTest::Dump(0, kDataSize);
  5445. cout << "};\n";
  5446. }
  5447. #endif
  5448. #ifndef FARMHASH_SELF_TEST_GUARD
  5449. #define FARMHASH_SELF_TEST_GUARD
  5450. #include <cstdio>
  5451. #include <iostream>
  5452. #include <string.h>
  5453. using std::cout;
  5454. using std::cerr;
  5455. using std::endl;
  5456. using std::hex;
  5457. static const uint64_t kSeed0 = 1234567;
  5458. static const uint64_t kSeed1 = k0;
  5459. static const int kDataSize = 1 << 20;
  5460. static const int kTestSize = 300;
  5461. #define kSeed128 Uint128(kSeed0, kSeed1)
  5462. static char data[kDataSize];
  5463. static int completed_self_tests = 0;
  5464. static int errors = 0;
  5465. // Initialize data to pseudorandom values.
  5466. void Setup() {
  5467. if (completed_self_tests == 0) {
  5468. uint64_t a = 9;
  5469. uint64_t b = 777;
  5470. for (int i = 0; i < kDataSize; i++) {
  5471. a += b;
  5472. b += a;
  5473. a = (a ^ (a >> 41)) * k0;
  5474. b = (b ^ (b >> 41)) * k0 + i;
  5475. uint8_t u = b >> 37;
  5476. memcpy(data + i, &u, 1); // uint8_t -> char
  5477. }
  5478. }
  5479. }
  5480. int NoteErrors() {
  5481. #define NUM_SELF_TESTS 9
  5482. if (++completed_self_tests == NUM_SELF_TESTS)
  5483. std::exit(errors > 0);
  5484. return errors;
  5485. }
  5486. template <typename T> inline bool IsNonZero(T x) {
  5487. return x != 0;
  5488. }
  5489. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  5490. return x != Uint128(0, 0);
  5491. }
  5492. #endif // FARMHASH_SELF_TEST_GUARD
  5493. namespace farmhashntTest {
  5494. uint32_t CreateSeed(int offset, int salt) {
  5495. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  5496. h = h * c1;
  5497. h ^= (h >> 17);
  5498. h = h * c1;
  5499. h ^= (h >> 17);
  5500. h = h * c1;
  5501. h ^= (h >> 17);
  5502. h += static_cast<uint32_t>(offset & 0xffffffff);
  5503. h = h * c1;
  5504. h ^= (h >> 17);
  5505. h = h * c1;
  5506. h ^= (h >> 17);
  5507. h = h * c1;
  5508. h ^= (h >> 17);
  5509. return h;
  5510. }
  5511. #undef SEED
  5512. #undef SEED1
  5513. #undef SEED0
  5514. #define SEED CreateSeed(offset, -1)
  5515. #define SEED0 CreateSeed(offset, 0)
  5516. #define SEED1 CreateSeed(offset, 1)
  5517. #undef TESTING
  5518. #define TESTING 1
  5519. #if TESTING
  5520. uint32_t expected[] = {
  5521. 2681724312u,
  5522. 797982799u,
  5523. 921001710u,
  5524. 2134990486u,
  5525. 2244477846u,
  5526. 2992121793u,
  5527. 3943596029u,
  5528. 452431531u,
  5529. 2557197665u,
  5530. 2532580744u,
  5531. 3099673830u,
  5532. 3696623795u,
  5533. 3281581178u,
  5534. 1882212500u,
  5535. 275903667u,
  5536. 3033004529u,
  5537. 1402319660u,
  5538. 2699376854u,
  5539. 4222949502u,
  5540. 1712034059u,
  5541. 1330324210u,
  5542. 2921867846u,
  5543. 1728752234u,
  5544. 326029180u,
  5545. 3349570000u,
  5546. 1612122221u,
  5547. 1646032583u,
  5548. 1432476832u,
  5549. 3552092450u,
  5550. 1499109081u,
  5551. 1554038301u,
  5552. 3190844552u,
  5553. 540224401u,
  5554. 489963606u,
  5555. 1562872448u,
  5556. 2128624475u,
  5557. 1262831810u,
  5558. 1672724608u,
  5559. 2077310004u,
  5560. 1911523866u,
  5561. 294527927u,
  5562. 1389770549u,
  5563. 2026137563u,
  5564. 629449419u,
  5565. 2489287368u,
  5566. 645684964u,
  5567. 230403464u,
  5568. 3272648435u,
  5569. 165370827u,
  5570. 1230085527u,
  5571. 3628174014u,
  5572. 851743255u,
  5573. 1554380634u,
  5574. 3667013118u,
  5575. 2290487377u,
  5576. 1909203251u,
  5577. 1498556724u,
  5578. 4165088768u,
  5579. 197618179u,
  5580. 914413116u,
  5581. 1913303225u,
  5582. 3117299654u,
  5583. 1357272220u,
  5584. 507436733u,
  5585. 1413396341u,
  5586. 146044391u,
  5587. 429095991u,
  5588. 3056862311u,
  5589. 366414107u,
  5590. 2293458109u,
  5591. 1684583131u,
  5592. 1170404994u,
  5593. 520792961u,
  5594. 1577421232u,
  5595. 4033596884u,
  5596. 4229339322u,
  5597. 3242407770u,
  5598. 2649785113u,
  5599. 816692935u,
  5600. 3555213933u,
  5601. 517646945u,
  5602. 2180594090u,
  5603. 3047062993u,
  5604. 2391606125u,
  5605. 382936554u,
  5606. 788479970u,
  5607. 2826990641u,
  5608. 3167748333u,
  5609. 1758123094u,
  5610. 389974094u,
  5611. 3338548567u,
  5612. 2583576230u,
  5613. 3198590202u,
  5614. 4155628142u,
  5615. 542201663u,
  5616. 2856634168u,
  5617. 3948351189u,
  5618. 4194218315u,
  5619. 1467786451u,
  5620. 2743592929u,
  5621. 1062268187u,
  5622. 3810665822u,
  5623. 2560479831u,
  5624. 997658837u,
  5625. 3067277639u,
  5626. 1211737169u,
  5627. 59581167u,
  5628. 1389679610u,
  5629. 4189944477u,
  5630. 100876854u,
  5631. 2062343506u,
  5632. 3088828656u,
  5633. 3284356565u,
  5634. 3130054947u,
  5635. 3532596884u,
  5636. 3887208531u,
  5637. 259034107u,
  5638. 3233195759u,
  5639. 3200749877u,
  5640. 760633989u,
  5641. 1115203611u,
  5642. 1516407838u,
  5643. 1778459926u,
  5644. 2146672889u,
  5645. 2457048126u,
  5646. 2217471853u,
  5647. 862072556u,
  5648. 3745267835u,
  5649. 701920051u,
  5650. 581695350u,
  5651. 1410111809u,
  5652. 3326135446u,
  5653. 2187968410u,
  5654. 4267859263u,
  5655. 479241367u,
  5656. 2868987960u,
  5657. 704325635u,
  5658. 1418509533u,
  5659. 735688735u,
  5660. 3283299459u,
  5661. 813690332u,
  5662. 1439630796u,
  5663. 3195309868u,
  5664. 1616408198u,
  5665. 3254795114u,
  5666. 2799925823u,
  5667. 3929484338u,
  5668. 1798536177u,
  5669. 4205965408u,
  5670. 1499475160u,
  5671. 4247675634u,
  5672. 3779953975u,
  5673. 785893184u,
  5674. 2778575413u,
  5675. 1160134629u,
  5676. 823113169u,
  5677. 4116162021u,
  5678. 4167766971u,
  5679. 2487440590u,
  5680. 4004655503u,
  5681. 4044418876u,
  5682. 1462554406u,
  5683. 2011102035u,
  5684. 4265993528u,
  5685. 576405853u,
  5686. 4038839101u,
  5687. 2425317635u,
  5688. 1401013391u,
  5689. 3062418115u,
  5690. 3167030094u,
  5691. 2602636307u,
  5692. 4264167741u,
  5693. 4017058800u,
  5694. 1029665228u,
  5695. 4036354071u,
  5696. 2670703363u,
  5697. 688472265u,
  5698. 1054670286u,
  5699. 338058159u,
  5700. 1539305024u,
  5701. 146827036u,
  5702. 4060134777u,
  5703. 2502815838u,
  5704. 1603444633u,
  5705. 2448966429u,
  5706. 3891353218u,
  5707. 1082330589u,
  5708. 201837927u,
  5709. 2848283092u,
  5710. 883849006u,
  5711. 1982110346u,
  5712. 541496720u,
  5713. 133643215u,
  5714. 3847827123u,
  5715. 4015671361u,
  5716. 2849988118u,
  5717. 3452457457u,
  5718. 2102063419u,
  5719. 3281002516u,
  5720. 1539151988u,
  5721. 1147951686u,
  5722. 2005032160u,
  5723. 2415262714u,
  5724. 116647396u,
  5725. 1029284767u,
  5726. 2159170082u,
  5727. 1919171906u,
  5728. 2017579106u,
  5729. 2473524405u,
  5730. 1694443528u,
  5731. 3671562289u,
  5732. 505662155u,
  5733. 1019936943u,
  5734. 1511077569u,
  5735. 773792826u,
  5736. 2089123665u,
  5737. 484732447u,
  5738. 1120017626u,
  5739. 2809286837u,
  5740. 4029205195u,
  5741. 1097806406u,
  5742. 136118734u,
  5743. 4017075736u,
  5744. 1403506686u,
  5745. 1516736273u,
  5746. 2562064338u,
  5747. 2984955003u,
  5748. 3071338162u,
  5749. 1923531348u,
  5750. 771592405u,
  5751. 2586632018u,
  5752. 4032960199u,
  5753. 2687561076u,
  5754. 308584855u,
  5755. 1692079268u,
  5756. 2565680167u,
  5757. 3674576684u,
  5758. 3770488806u,
  5759. 69201295u,
  5760. 1255084262u,
  5761. 3593730713u,
  5762. 54945052u,
  5763. 1939595371u,
  5764. 2432427547u,
  5765. 2295501078u,
  5766. 1280920000u,
  5767. 82177963u,
  5768. 1121403845u,
  5769. 2889101923u,
  5770. 713121337u,
  5771. 1747052377u,
  5772. 927011680u,
  5773. 4142246789u,
  5774. 1958963937u,
  5775. 1636932722u,
  5776. 4075249328u,
  5777. 2025886508u,
  5778. 3026358429u,
  5779. 1845587644u,
  5780. 3615577014u,
  5781. 1363253259u,
  5782. 3087190425u,
  5783. 341851980u,
  5784. 2515339233u,
  5785. 1276595523u,
  5786. 460237542u,
  5787. 4198897105u,
  5788. 2069753399u,
  5789. 4278599955u,
  5790. 356742959u,
  5791. 3735275001u,
  5792. 1750561299u,
  5793. 668829411u,
  5794. 3384018814u,
  5795. 4233785523u,
  5796. 451656820u,
  5797. 107312677u,
  5798. 2390172694u,
  5799. 1216645846u,
  5800. 164402616u,
  5801. 1689811113u,
  5802. 1767810825u,
  5803. 1397772514u,
  5804. 3323383489u,
  5805. 2986430557u,
  5806. 207428029u,
  5807. 2260498180u,
  5808. 2360400900u,
  5809. 1263709570u,
  5810. 1377764574u,
  5811. 4252610345u,
  5812. 1099809675u,
  5813. 2776960536u,
  5814. 3542220540u,
  5815. 3752806924u,
  5816. 337070226u,
  5817. 3267551635u,
  5818. 1306761320u,
  5819. 2220373824u,
  5820. 4109252858u,
  5821. 896322512u,
  5822. 1788337208u,
  5823. 1336556841u,
  5824. 2911512007u,
  5825. 3712582785u,
  5826. 3071359622u,
  5827. 2561488770u,
  5828. 3898950547u,
  5829. 536047554u,
  5830. 2040551642u,
  5831. 3528794619u,
  5832. 3565689036u,
  5833. 1197100813u,
  5834. 1864569342u,
  5835. 3329594980u,
  5836. 490608221u,
  5837. 1174785921u,
  5838. 3287246572u,
  5839. 2163330264u,
  5840. 500120236u,
  5841. 2520062970u,
  5842. 1561519055u,
  5843. 4042710240u,
  5844. 2774151984u,
  5845. 3160666939u,
  5846. 96459446u,
  5847. 1878067032u,
  5848. 4237425634u,
  5849. 2952135524u,
  5850. 4100839753u,
  5851. 1265237690u,
  5852. 4246879223u,
  5853. 834830418u,
  5854. 3476334357u,
  5855. 4277111759u,
  5856. 2511026735u,
  5857. 3065234219u,
  5858. 556796152u,
  5859. 198182691u,
  5860. 2913077464u,
  5861. 1535115487u,
  5862. 4046477658u,
  5863. 140762681u,
  5864. 990407433u,
  5865. 2198985327u,
  5866. 2926590471u,
  5867. 559702706u,
  5868. 82077489u,
  5869. 1096697687u,
  5870. 4190838199u,
  5871. 3046872820u,
  5872. 1583801700u,
  5873. 2185339100u,
  5874. 3912423882u,
  5875. 3703603898u,
  5876. 2540185277u,
  5877. 1446869792u,
  5878. 4051584612u,
  5879. 2719373510u,
  5880. 1675560450u,
  5881. 1996164093u,
  5882. 405251683u,
  5883. 2864244470u,
  5884. 4071581802u,
  5885. 2028708916u,
  5886. 803575837u,
  5887. 557660441u,
  5888. 3841480082u,
  5889. 255451671u,
  5890. 779434428u,
  5891. 3452203069u,
  5892. 2285701422u,
  5893. 1568745354u,
  5894. 823305654u,
  5895. 3184047862u,
  5896. 4159715581u,
  5897. 3160134214u,
  5898. 3198900547u,
  5899. 1566527339u,
  5900. 4194096960u,
  5901. 1496132623u,
  5902. 1719108984u,
  5903. 2584236470u,
  5904. 531310503u,
  5905. 3456882941u,
  5906. 3382290593u,
  5907. 467441309u,
  5908. 3241407531u,
  5909. 2540270567u,
  5910. 1397502982u,
  5911. 3348545480u,
  5912. 811750340u,
  5913. 1017047954u,
  5914. 2540585554u,
  5915. 3531646869u,
  5916. 943914610u,
  5917. 1903578924u,
  5918. 1911188923u,
  5919. 241574049u,
  5920. 3181425568u,
  5921. 3529565564u,
  5922. 240953857u,
  5923. 2964595704u,
  5924. 3828377737u,
  5925. 4260564140u,
  5926. 4262383425u,
  5927. 383233885u,
  5928. 4051263539u,
  5929. 919677938u,
  5930. 1683612329u,
  5931. 4204155962u,
  5932. 2283918569u,
  5933. 4153726847u,
  5934. 350160869u,
  5935. 1387233546u,
  5936. 1891558063u,
  5937. 740563169u,
  5938. 330624974u,
  5939. 2948665536u,
  5940. 376390582u,
  5941. 3799363969u,
  5942. 3187805406u,
  5943. 2263421398u,
  5944. 1928519266u,
  5945. 2746577402u,
  5946. 2108753646u,
  5947. 768287270u,
  5948. 2247006571u,
  5949. 212490675u,
  5950. 917121602u,
  5951. 2549835613u,
  5952. 2864033668u,
  5953. 3738062408u,
  5954. 2006922227u,
  5955. 2616619070u,
  5956. 3449066284u,
  5957. 431292293u,
  5958. 786322314u,
  5959. 1415970351u,
  5960. 3263135197u,
  5961. 2954777083u,
  5962. 3206261120u,
  5963. 2287507921u,
  5964. 1781944746u,
  5965. 4081586725u,
  5966. 1109175923u,
  5967. 1813855658u,
  5968. 1129462471u,
  5969. 1037031473u,
  5970. 3389003793u,
  5971. 3122687303u,
  5972. 1164309901u,
  5973. 3193251135u,
  5974. 3626554867u,
  5975. 3071568023u,
  5976. 3656006011u,
  5977. 1167681812u,
  5978. 3155218919u,
  5979. 2704165015u,
  5980. 1854985978u,
  5981. 1712976649u,
  5982. 878608872u,
  5983. 4155949943u,
  5984. 3163786257u,
  5985. 1626463554u,
  5986. 1256485167u,
  5987. 582664250u,
  5988. 2083771672u,
  5989. 804336148u,
  5990. 2770847216u,
  5991. 1674051445u,
  5992. 3992583643u,
  5993. 2966108111u,
  5994. 900741486u,
  5995. 4014551783u,
  5996. 300318232u,
  5997. 3517585534u,
  5998. 542270815u,
  5999. 760762191u,
  6000. 1216399252u,
  6001. 643179562u,
  6002. 3652676161u,
  6003. 2990167340u,
  6004. 3262252593u,
  6005. 2134299399u,
  6006. 411263051u,
  6007. 1342880802u,
  6008. 1967599860u,
  6009. 853593042u,
  6010. 2682611693u,
  6011. 850464484u,
  6012. 3286110054u,
  6013. 3842907484u,
  6014. 3623364733u,
  6015. 3693536939u,
  6016. 1615375832u,
  6017. 2318423400u,
  6018. 4145497671u,
  6019. 1728968857u,
  6020. 2686506989u,
  6021. 1502282913u,
  6022. 2151665147u,
  6023. 3651607391u,
  6024. 1178454681u,
  6025. 4146839064u,
  6026. 2601416506u,
  6027. 1448097974u,
  6028. 238887261u,
  6029. 4093725287u,
  6030. 2367569534u,
  6031. 679517009u,
  6032. 3539886328u,
  6033. 3086277222u,
  6034. 1390394371u,
  6035. 119173722u,
  6036. 1766260771u,
  6037. 751439914u,
  6038. 215917713u,
  6039. 2656990891u,
  6040. 1570750352u,
  6041. 3533987737u,
  6042. 3576119563u,
  6043. 963183826u,
  6044. 3796810515u,
  6045. 136547246u,
  6046. 2592925324u,
  6047. 427154472u,
  6048. 1228758574u,
  6049. 1464255968u,
  6050. 2984611177u,
  6051. 2001585786u,
  6052. 1525438381u,
  6053. 1348536411u,
  6054. 2861338018u,
  6055. 764077711u,
  6056. 3785343245u,
  6057. 457568934u,
  6058. 4104954272u,
  6059. 2381948487u,
  6060. 3148473363u,
  6061. 2180270337u,
  6062. 1387729170u,
  6063. 951677556u,
  6064. 2721005055u,
  6065. 66786703u,
  6066. 1149351924u,
  6067. 1895026827u,
  6068. 3711056516u,
  6069. 3638638708u,
  6070. 2263003308u,
  6071. 3448840877u,
  6072. 225333538u,
  6073. 3797521928u,
  6074. 3262952567u,
  6075. 2078619498u,
  6076. 1178073973u,
  6077. 3288261538u,
  6078. 1496966875u,
  6079. 2481012988u,
  6080. 114945840u,
  6081. 1632780103u,
  6082. 2087949619u,
  6083. 3787017905u,
  6084. 2575395164u,
  6085. 2971726178u,
  6086. 3642087909u,
  6087. 3894199764u,
  6088. 203853421u,
  6089. 425935223u,
  6090. 3565833278u,
  6091. 1748785729u,
  6092. 580966986u,
  6093. 2124704694u,
  6094. 1107045577u,
  6095. 1067532701u,
  6096. 1406028344u,
  6097. 18613994u,
  6098. 3476683808u,
  6099. 3762914298u,
  6100. 1844996900u,
  6101. 904215228u,
  6102. 1118521573u,
  6103. 3657647605u,
  6104. 3136157065u,
  6105. 2287683323u,
  6106. 126005630u,
  6107. 3555092974u,
  6108. 49515858u,
  6109. 1010661841u,
  6110. 1902040126u,
  6111. 1400735275u,
  6112. 2771676666u,
  6113. 2225229957u,
  6114. 3454177594u,
  6115. 2883475137u,
  6116. 4144472319u,
  6117. 1051332394u,
  6118. 542648229u,
  6119. 1669710469u,
  6120. 553041029u,
  6121. 584127807u,
  6122. 2993670925u,
  6123. 3587959456u,
  6124. 1745399498u,
  6125. 1404723176u,
  6126. 1334333531u,
  6127. 3239516985u,
  6128. 1275954779u,
  6129. 367320647u,
  6130. 3684418197u,
  6131. 4030809053u,
  6132. 484559105u,
  6133. 4255931645u,
  6134. 4271715616u,
  6135. 3171911678u,
  6136. 928543347u,
  6137. 2159512867u,
  6138. 313902234u,
  6139. 647086234u,
  6140. 577214736u,
  6141. 1130129573u,
  6142. 995791646u,
  6143. 1645086060u,
  6144. 4122335794u,
  6145. 1064648931u,
  6146. 2752145076u,
  6147. 3312498873u,
  6148. 4238535494u,
  6149. 1471227427u,
  6150. 633688562u,
  6151. 1959779970u,
  6152. 766642813u,
  6153. 1380896111u,
  6154. 3647601207u,
  6155. 1733961041u,
  6156. 521947915u,
  6157. 189164145u,
  6158. 486382294u,
  6159. 3770038872u,
  6160. 3235740744u,
  6161. 1912506671u,
  6162. 2276864677u,
  6163. 1588060152u,
  6164. 2504457929u,
  6165. 1471020554u,
  6166. 3623212998u,
  6167. 3026631806u,
  6168. 2342164722u,
  6169. 1674890530u,
  6170. 3011542850u,
  6171. 3549160092u,
  6172. 4290680005u,
  6173. 3943068002u,
  6174. 2273781461u,
  6175. 2127663659u,
  6176. 1646681121u,
  6177. 447810651u,
  6178. 2366308558u,
  6179. 970504950u,
  6180. 2008155560u,
  6181. 2695940969u,
  6182. 3444688454u,
  6183. 1739318893u,
  6184. 2683090634u,
  6185. 2774816580u,
  6186. 437560100u,
  6187. 512012738u,
  6188. 3305170944u,
  6189. 665292744u,
  6190. 3580039116u,
  6191. 1579404983u,
  6192. 3397891494u,
  6193. 710590371u,
  6194. 2514565805u,
  6195. 3624609754u,
  6196. 3516075816u,
  6197. 1314000850u,
  6198. 1935166880u,
  6199. 3257747610u,
  6200. 3776931214u,
  6201. 3183054185u,
  6202. 675129307u,
  6203. 3333261712u,
  6204. 1154611403u,
  6205. 2759854023u,
  6206. 1963228038u,
  6207. 505138315u,
  6208. 1803966773u,
  6209. 4032705384u,
  6210. 798395739u,
  6211. 3473799845u,
  6212. 476400898u,
  6213. 602972493u,
  6214. 3289878097u,
  6215. 2520311409u,
  6216. 3214794876u,
  6217. 748160407u,
  6218. 1326769504u,
  6219. 902775872u,
  6220. 1372805534u,
  6221. 1213925114u,
  6222. 3009384989u,
  6223. 3781981134u,
  6224. 2835608783u,
  6225. 2716786748u,
  6226. 1669490957u,
  6227. 1089334066u,
  6228. 250756920u,
  6229. 4041016629u,
  6230. 2495807367u,
  6231. 2008251381u,
  6232. 106212622u,
  6233. 1927268995u,
  6234. 2251978818u,
  6235. 3788056262u,
  6236. 3678660147u,
  6237. 2656772270u,
  6238. 1997584981u,
  6239. 2668998785u,
  6240. 2954162084u,
  6241. 845687881u,
  6242. 776018378u,
  6243. 2066910012u,
  6244. 918315064u,
  6245. };
  6246. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  6247. bool Test(int offset, int len = 0) {
  6248. #undef Check
  6249. #undef IsAlive
  6250. #define Check(x) do { \
  6251. const uint32_t actual = (x), e = expected[index++]; \
  6252. bool ok = actual == e; \
  6253. if (!ok) { \
  6254. cerr << "expected " << hex << e << " but got " << actual << endl; \
  6255. ++errors; \
  6256. } \
  6257. assert(ok); \
  6258. } while (0)
  6259. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  6260. // After the following line is where the uses of "Check" and such will go.
  6261. static int index = 0;
  6262. if (offset == -1) { int alive = 0; IsAlive(farmhashnt::Hash32WithSeed(data, len++, SEED)); IsAlive(farmhashnt::Hash32(data, len++)); IsAlive(farmhashnt::Hash32(data, len++)); len -= 3; return alive > 0; }
  6263. Check(farmhashnt::Hash32WithSeed(data + offset, len, SEED));
  6264. Check(farmhashnt::Hash32(data + offset, len));
  6265. return true;
  6266. #undef Check
  6267. #undef IsAlive
  6268. }
  6269. int RunTest() {
  6270. Setup();
  6271. int i = 0;
  6272. cout << "Running farmhashntTest";
  6273. if (!Test(-1)) {
  6274. cout << "... Unavailable\n";
  6275. return NoteErrors();
  6276. }
  6277. // Good. The function is attempting to hash, so run the full test.
  6278. int errors_prior_to_test = errors;
  6279. for ( ; i < kTestSize - 1; i++) {
  6280. Test(i * i, i);
  6281. }
  6282. for ( ; i < kDataSize; i += i / 7) {
  6283. Test(0, i);
  6284. }
  6285. Test(0, kDataSize);
  6286. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  6287. return NoteErrors();
  6288. }
  6289. #else
  6290. // After the following line is where the code to print hash codes will go.
  6291. void Dump(int offset, int len) {
  6292. cout << farmhashnt::Hash32WithSeed(data + offset, len, SEED) << "u," << endl;
  6293. cout << farmhashnt::Hash32(data + offset, len) << "u," << endl;
  6294. }
  6295. #endif
  6296. #undef SEED
  6297. #undef SEED1
  6298. #undef SEED0
  6299. } // namespace farmhashntTest
  6300. #if TESTING
  6301. static int farmhashntTestResult = farmhashntTest::RunTest();
  6302. #else
  6303. int main(int argc, char** argv) {
  6304. Setup();
  6305. cout << "uint32_t expected[] = {\n";
  6306. int i = 0;
  6307. for ( ; i < kTestSize - 1; i++) {
  6308. farmhashntTest::Dump(i * i, i);
  6309. }
  6310. for ( ; i < kDataSize; i += i / 7) {
  6311. farmhashntTest::Dump(0, i);
  6312. }
  6313. farmhashntTest::Dump(0, kDataSize);
  6314. cout << "};\n";
  6315. }
  6316. #endif
  6317. #ifndef FARMHASH_SELF_TEST_GUARD
  6318. #define FARMHASH_SELF_TEST_GUARD
  6319. #include <cstdio>
  6320. #include <iostream>
  6321. #include <string.h>
  6322. using std::cout;
  6323. using std::cerr;
  6324. using std::endl;
  6325. using std::hex;
  6326. static const uint64_t kSeed0 = 1234567;
  6327. static const uint64_t kSeed1 = k0;
  6328. static const int kDataSize = 1 << 20;
  6329. static const int kTestSize = 300;
  6330. #define kSeed128 Uint128(kSeed0, kSeed1)
  6331. static char data[kDataSize];
  6332. static int completed_self_tests = 0;
  6333. static int errors = 0;
  6334. // Initialize data to pseudorandom values.
  6335. void Setup() {
  6336. if (completed_self_tests == 0) {
  6337. uint64_t a = 9;
  6338. uint64_t b = 777;
  6339. for (int i = 0; i < kDataSize; i++) {
  6340. a += b;
  6341. b += a;
  6342. a = (a ^ (a >> 41)) * k0;
  6343. b = (b ^ (b >> 41)) * k0 + i;
  6344. uint8_t u = b >> 37;
  6345. memcpy(data + i, &u, 1); // uint8_t -> char
  6346. }
  6347. }
  6348. }
  6349. int NoteErrors() {
  6350. #define NUM_SELF_TESTS 9
  6351. if (++completed_self_tests == NUM_SELF_TESTS)
  6352. std::exit(errors > 0);
  6353. return errors;
  6354. }
  6355. template <typename T> inline bool IsNonZero(T x) {
  6356. return x != 0;
  6357. }
  6358. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  6359. return x != Uint128(0, 0);
  6360. }
  6361. #endif // FARMHASH_SELF_TEST_GUARD
  6362. namespace farmhashsaTest {
  6363. uint32_t CreateSeed(int offset, int salt) {
  6364. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  6365. h = h * c1;
  6366. h ^= (h >> 17);
  6367. h = h * c1;
  6368. h ^= (h >> 17);
  6369. h = h * c1;
  6370. h ^= (h >> 17);
  6371. h += static_cast<uint32_t>(offset & 0xffffffff);
  6372. h = h * c1;
  6373. h ^= (h >> 17);
  6374. h = h * c1;
  6375. h ^= (h >> 17);
  6376. h = h * c1;
  6377. h ^= (h >> 17);
  6378. return h;
  6379. }
  6380. #undef SEED
  6381. #undef SEED1
  6382. #undef SEED0
  6383. #define SEED CreateSeed(offset, -1)
  6384. #define SEED0 CreateSeed(offset, 0)
  6385. #define SEED1 CreateSeed(offset, 1)
  6386. #undef TESTING
  6387. #define TESTING 1
  6388. #if TESTING
  6389. uint32_t expected[] = {
  6390. 4223616069u,
  6391. 3696677242u,
  6392. 4081014168u,
  6393. 2576519988u,
  6394. 2212771159u,
  6395. 1112731063u,
  6396. 1020067935u,
  6397. 3955445564u,
  6398. 1451961420u,
  6399. 653440099u,
  6400. 31917516u,
  6401. 2957164615u,
  6402. 2590087362u,
  6403. 3879448744u,
  6404. 176305566u,
  6405. 2447367541u,
  6406. 1359016305u,
  6407. 3363804638u,
  6408. 1117290165u,
  6409. 1062549743u,
  6410. 2437877004u,
  6411. 1894455839u,
  6412. 673206794u,
  6413. 3486923651u,
  6414. 3269862919u,
  6415. 2303349487u,
  6416. 1380660650u,
  6417. 595525107u,
  6418. 1525325287u,
  6419. 2025609358u,
  6420. 176408838u,
  6421. 1592885012u,
  6422. 864896482u,
  6423. 2101378090u,
  6424. 3489229104u,
  6425. 2118965695u,
  6426. 581644891u,
  6427. 2718789079u,
  6428. 631613207u,
  6429. 4228658372u,
  6430. 3867875546u,
  6431. 3531368319u,
  6432. 3804516756u,
  6433. 3317755099u,
  6434. 1619744564u,
  6435. 2884717286u,
  6436. 1088213445u,
  6437. 2667691076u,
  6438. 3727873235u,
  6439. 2330406762u,
  6440. 858590707u,
  6441. 123802208u,
  6442. 4150036245u,
  6443. 182283099u,
  6444. 1478882570u,
  6445. 3282617403u,
  6446. 819171187u,
  6447. 1172627392u,
  6448. 4254302102u,
  6449. 2957028020u,
  6450. 437030323u,
  6451. 2452147680u,
  6452. 2868246750u,
  6453. 3530169402u,
  6454. 3154852132u,
  6455. 215019192u,
  6456. 357580983u,
  6457. 1354454461u,
  6458. 1108813287u,
  6459. 2324008118u,
  6460. 2315997713u,
  6461. 4181601562u,
  6462. 1360882441u,
  6463. 92423273u,
  6464. 3048866755u,
  6465. 3369188505u,
  6466. 3664371439u,
  6467. 2920710428u,
  6468. 1027891570u,
  6469. 2653166430u,
  6470. 3461888315u,
  6471. 1475780447u,
  6472. 292769636u,
  6473. 1737473313u,
  6474. 4064110516u,
  6475. 4170160075u,
  6476. 762850927u,
  6477. 3630603695u,
  6478. 2803307356u,
  6479. 844987665u,
  6480. 460980967u,
  6481. 3005635467u,
  6482. 2802568977u,
  6483. 588668033u,
  6484. 2148940781u,
  6485. 3239099984u,
  6486. 1266953698u,
  6487. 3197808789u,
  6488. 3519942533u,
  6489. 2511995334u,
  6490. 2553810188u,
  6491. 871667697u,
  6492. 1358675720u,
  6493. 1499319171u,
  6494. 2044931270u,
  6495. 1210355103u,
  6496. 807152540u,
  6497. 3262320756u,
  6498. 2810214575u,
  6499. 1813386141u,
  6500. 4089465863u,
  6501. 903928165u,
  6502. 1388899322u,
  6503. 3209183659u,
  6504. 834536144u,
  6505. 2733354550u,
  6506. 2742289921u,
  6507. 3689042563u,
  6508. 2655593281u,
  6509. 4169686303u,
  6510. 415985561u,
  6511. 138892376u,
  6512. 516115393u,
  6513. 65683883u,
  6514. 4162865100u,
  6515. 889944635u,
  6516. 313566528u,
  6517. 3346420907u,
  6518. 1504303591u,
  6519. 2256809275u,
  6520. 742243229u,
  6521. 779775302u,
  6522. 3140940172u,
  6523. 2312556111u,
  6524. 2304095772u,
  6525. 1151741606u,
  6526. 2194712422u,
  6527. 1714084652u,
  6528. 3272736835u,
  6529. 1311540658u,
  6530. 191179665u,
  6531. 3996605106u,
  6532. 1657345233u,
  6533. 4205442903u,
  6534. 1553339212u,
  6535. 2351843044u,
  6536. 1647502006u,
  6537. 2525516233u,
  6538. 292202846u,
  6539. 1498646290u,
  6540. 1429323381u,
  6541. 974274898u,
  6542. 3759331561u,
  6543. 2881238887u,
  6544. 826787221u,
  6545. 1069622448u,
  6546. 221991032u,
  6547. 1462969082u,
  6548. 2799661508u,
  6549. 364022781u,
  6550. 2594244377u,
  6551. 797773898u,
  6552. 4097839290u,
  6553. 1529150125u,
  6554. 2456805570u,
  6555. 541503425u,
  6556. 3936326142u,
  6557. 3112719954u,
  6558. 775223581u,
  6559. 3074018423u,
  6560. 3198488875u,
  6561. 1772191849u,
  6562. 2456535211u,
  6563. 3154686028u,
  6564. 1520862019u,
  6565. 4005829426u,
  6566. 1306433767u,
  6567. 1943028506u,
  6568. 2246000782u,
  6569. 1057766454u,
  6570. 3761996982u,
  6571. 3441075333u,
  6572. 898641979u,
  6573. 3450209088u,
  6574. 3941329307u,
  6575. 3289922449u,
  6576. 3085075827u,
  6577. 1814193220u,
  6578. 690422997u,
  6579. 2627846676u,
  6580. 2653520704u,
  6581. 3739145533u,
  6582. 3996776010u,
  6583. 2287072592u,
  6584. 1346671698u,
  6585. 3082629900u,
  6586. 2298811274u,
  6587. 3639722036u,
  6588. 1729419228u,
  6589. 1836765953u,
  6590. 3708118742u,
  6591. 213436u,
  6592. 950223749u,
  6593. 3734247682u,
  6594. 2924575678u,
  6595. 1382024841u,
  6596. 2431637732u,
  6597. 3448846682u,
  6598. 1341301397u,
  6599. 4206956590u,
  6600. 1730650902u,
  6601. 2581075456u,
  6602. 1542359141u,
  6603. 707222542u,
  6604. 2925350541u,
  6605. 3846303536u,
  6606. 3579103295u,
  6607. 3932175763u,
  6608. 1339615732u,
  6609. 848825750u,
  6610. 1070170828u,
  6611. 1964973818u,
  6612. 577060344u,
  6613. 607721296u,
  6614. 4031023048u,
  6615. 406883794u,
  6616. 3991905552u,
  6617. 1198544082u,
  6618. 872468460u,
  6619. 1044847096u,
  6620. 3159976313u,
  6621. 3020028266u,
  6622. 2108700400u,
  6623. 3373767922u,
  6624. 264431841u,
  6625. 2817097007u,
  6626. 3700061048u,
  6627. 1733731531u,
  6628. 3459415893u,
  6629. 80378591u,
  6630. 1479875104u,
  6631. 19735612u,
  6632. 1382658977u,
  6633. 3416562245u,
  6634. 1959852842u,
  6635. 2384002344u,
  6636. 124683828u,
  6637. 3725782174u,
  6638. 2300301222u,
  6639. 393852269u,
  6640. 1302492002u,
  6641. 3623776492u,
  6642. 3787086417u,
  6643. 1730024749u,
  6644. 1710531361u,
  6645. 443700716u,
  6646. 1461987482u,
  6647. 671998131u,
  6648. 3018380746u,
  6649. 2592292305u,
  6650. 3390799372u,
  6651. 3945101155u,
  6652. 3743494852u,
  6653. 3716045582u,
  6654. 996005166u,
  6655. 320698449u,
  6656. 3420221765u,
  6657. 1518157951u,
  6658. 2555810666u,
  6659. 3381929684u,
  6660. 2019638523u,
  6661. 3088262796u,
  6662. 2072178906u,
  6663. 3433649364u,
  6664. 203906916u,
  6665. 34663784u,
  6666. 290301305u,
  6667. 1188021504u,
  6668. 3754681145u,
  6669. 3920313139u,
  6670. 2840496520u,
  6671. 1656802962u,
  6672. 2288475489u,
  6673. 3399185138u,
  6674. 1296000826u,
  6675. 2362384746u,
  6676. 309633360u,
  6677. 2719851778u,
  6678. 776035930u,
  6679. 3200733043u,
  6680. 365690832u,
  6681. 3326378243u,
  6682. 1500331457u,
  6683. 1625708592u,
  6684. 4230903462u,
  6685. 715344888u,
  6686. 3363777768u,
  6687. 2243620288u,
  6688. 2890765789u,
  6689. 553154234u,
  6690. 4044100108u,
  6691. 4056887320u,
  6692. 1185656496u,
  6693. 3671476744u,
  6694. 1064586897u,
  6695. 1154949698u,
  6696. 3493481974u,
  6697. 1294573722u,
  6698. 1869224012u,
  6699. 2530084956u,
  6700. 995321553u,
  6701. 833419249u,
  6702. 563815282u,
  6703. 250258043u,
  6704. 2970801822u,
  6705. 441007535u,
  6706. 42246961u,
  6707. 2820426655u,
  6708. 2878882436u,
  6709. 2363245780u,
  6710. 2138489282u,
  6711. 2972360481u,
  6712. 2312619393u,
  6713. 3598664848u,
  6714. 3071556076u,
  6715. 776990325u,
  6716. 3220427357u,
  6717. 2257939577u,
  6718. 3817305903u,
  6719. 1502979698u,
  6720. 3159755934u,
  6721. 3955997276u,
  6722. 2423850008u,
  6723. 1959927572u,
  6724. 1219782288u,
  6725. 4119776679u,
  6726. 1124253854u,
  6727. 3678052422u,
  6728. 2620644947u,
  6729. 1262408666u,
  6730. 3480072280u,
  6731. 2627137665u,
  6732. 807538749u,
  6733. 3276646337u,
  6734. 518510128u,
  6735. 1137828655u,
  6736. 1498449110u,
  6737. 3031692317u,
  6738. 1125635969u,
  6739. 1130096111u,
  6740. 780007336u,
  6741. 3111856399u,
  6742. 1014917264u,
  6743. 780877352u,
  6744. 2909458336u,
  6745. 4235949214u,
  6746. 2423879289u,
  6747. 275888892u,
  6748. 3891926795u,
  6749. 3538163953u,
  6750. 54815161u,
  6751. 162228302u,
  6752. 258154068u,
  6753. 3554455591u,
  6754. 1801469029u,
  6755. 2801563220u,
  6756. 726560058u,
  6757. 2450221940u,
  6758. 3677582978u,
  6759. 440993800u,
  6760. 424762443u,
  6761. 2624525253u,
  6762. 2587715329u,
  6763. 2292264424u,
  6764. 1074856749u,
  6765. 3294752007u,
  6766. 3164112672u,
  6767. 2399146799u,
  6768. 1920182465u,
  6769. 3858835361u,
  6770. 193755240u,
  6771. 3333610311u,
  6772. 1757504059u,
  6773. 2576027039u,
  6774. 2775253365u,
  6775. 2939191561u,
  6776. 1046147275u,
  6777. 235149906u,
  6778. 4262218222u,
  6779. 2900542726u,
  6780. 2260154702u,
  6781. 1019551635u,
  6782. 1194720570u,
  6783. 3519118691u,
  6784. 3039483153u,
  6785. 84918216u,
  6786. 3053381097u,
  6787. 2572396843u,
  6788. 3849763371u,
  6789. 2782686780u,
  6790. 3710049554u,
  6791. 3403430713u,
  6792. 2346080784u,
  6793. 2496307442u,
  6794. 1597281872u,
  6795. 696018239u,
  6796. 704625714u,
  6797. 623026921u,
  6798. 3182413559u,
  6799. 3794540330u,
  6800. 305497722u,
  6801. 1592680199u,
  6802. 2377854072u,
  6803. 3060601746u,
  6804. 3953057908u,
  6805. 3941551588u,
  6806. 1033716182u,
  6807. 2765716854u,
  6808. 1309699058u,
  6809. 3519400181u,
  6810. 3073370877u,
  6811. 115583008u,
  6812. 4032909296u,
  6813. 2944563574u,
  6814. 3762753718u,
  6815. 192842727u,
  6816. 1711348701u,
  6817. 3086147235u,
  6818. 1658229443u,
  6819. 1479783872u,
  6820. 3839977157u,
  6821. 225619117u,
  6822. 1349684817u,
  6823. 1964813173u,
  6824. 565753187u,
  6825. 2530252046u,
  6826. 840014353u,
  6827. 1645183704u,
  6828. 3668429078u,
  6829. 3438418557u,
  6830. 639704059u,
  6831. 360837811u,
  6832. 2531807958u,
  6833. 1572353913u,
  6834. 2116037299u,
  6835. 1948437512u,
  6836. 744553393u,
  6837. 2380697034u,
  6838. 3775234105u,
  6839. 3816065157u,
  6840. 301868653u,
  6841. 2960939561u,
  6842. 3306528247u,
  6843. 2389296549u,
  6844. 805918610u,
  6845. 1759358265u,
  6846. 1760876328u,
  6847. 2827601706u,
  6848. 2944594708u,
  6849. 3313666458u,
  6850. 2022601495u,
  6851. 730938791u,
  6852. 193539397u,
  6853. 2026103244u,
  6854. 802928398u,
  6855. 2630934308u,
  6856. 782805818u,
  6857. 3499326016u,
  6858. 293509489u,
  6859. 3646131514u,
  6860. 3182478647u,
  6861. 854800333u,
  6862. 2284531628u,
  6863. 438528022u,
  6864. 2339298129u,
  6865. 1692289216u,
  6866. 2427728723u,
  6867. 46501288u,
  6868. 350652353u,
  6869. 1355971222u,
  6870. 889682372u,
  6871. 944799254u,
  6872. 2763906061u,
  6873. 2807550612u,
  6874. 2683762637u,
  6875. 100870317u,
  6876. 2449357318u,
  6877. 2638348436u,
  6878. 4206088869u,
  6879. 1788948473u,
  6880. 3537588549u,
  6881. 2782490204u,
  6882. 134406470u,
  6883. 2409190528u,
  6884. 2362439849u,
  6885. 1861661528u,
  6886. 2101513194u,
  6887. 1424834765u,
  6888. 3581765745u,
  6889. 3185999525u,
  6890. 2057487100u,
  6891. 2303941176u,
  6892. 3639628788u,
  6893. 1180265315u,
  6894. 230437935u,
  6895. 2108319366u,
  6896. 1131685143u,
  6897. 1055685292u,
  6898. 1509007009u,
  6899. 1258485140u,
  6900. 560525005u,
  6901. 3598799040u,
  6902. 3835680585u,
  6903. 1851859628u,
  6904. 332858996u,
  6905. 641769248u,
  6906. 4252450037u,
  6907. 865386707u,
  6908. 720719117u,
  6909. 3133612164u,
  6910. 3833045874u,
  6911. 3492515435u,
  6912. 2465970289u,
  6913. 4234420011u,
  6914. 573859916u,
  6915. 252532886u,
  6916. 870392318u,
  6917. 4051320920u,
  6918. 894929092u,
  6919. 3748361688u,
  6920. 699355960u,
  6921. 1885212350u,
  6922. 1609756949u,
  6923. 461896870u,
  6924. 1337065461u,
  6925. 1775211059u,
  6926. 1786193749u,
  6927. 2815154643u,
  6928. 2128729882u,
  6929. 969639529u,
  6930. 3960427545u,
  6931. 859416958u,
  6932. 2739758802u,
  6933. 2698032197u,
  6934. 2813292418u,
  6935. 1985467524u,
  6936. 396604317u,
  6937. 4122172759u,
  6938. 1201259789u,
  6939. 4282051702u,
  6940. 3270018895u,
  6941. 961215209u,
  6942. 961075860u,
  6943. 4211926998u,
  6944. 4088374597u,
  6945. 577510509u,
  6946. 3058349487u,
  6947. 4025377754u,
  6948. 2815478438u,
  6949. 471023164u,
  6950. 3947959608u,
  6951. 4161486934u,
  6952. 2299888461u,
  6953. 1103571511u,
  6954. 2450153872u,
  6955. 1839939275u,
  6956. 108299608u,
  6957. 858086440u,
  6958. 1030152945u,
  6959. 3895328530u,
  6960. 3009080718u,
  6961. 3690840454u,
  6962. 3847025277u,
  6963. 152331362u,
  6964. 161365689u,
  6965. 831319961u,
  6966. 2166017294u,
  6967. 3945322722u,
  6968. 4059970216u,
  6969. 1420824131u,
  6970. 2770648308u,
  6971. 1567250186u,
  6972. 2181067149u,
  6973. 1939743488u,
  6974. 3080158120u,
  6975. 3435218248u,
  6976. 2495237495u,
  6977. 3814085102u,
  6978. 3180983013u,
  6979. 3199054292u,
  6980. 2204745908u,
  6981. 1140337267u,
  6982. 2213569784u,
  6983. 1941879842u,
  6984. 2105562605u,
  6985. 3618835614u,
  6986. 2247103645u,
  6987. 2492473487u,
  6988. 856414299u,
  6989. 166022030u,
  6990. 4080104712u,
  6991. 3218935344u,
  6992. 3284220561u,
  6993. 4261581452u,
  6994. 1206944836u,
  6995. 3496705432u,
  6996. 2215996876u,
  6997. 3154627465u,
  6998. 3384005496u,
  6999. 742170556u,
  7000. 1333047620u,
  7001. 802680366u,
  7002. 156833431u,
  7003. 2682100354u,
  7004. 2493654830u,
  7005. 584848366u,
  7006. 1691693131u,
  7007. 2169934170u,
  7008. 779968026u,
  7009. 2099545800u,
  7010. 1423039695u,
  7011. 4292110968u,
  7012. 4266576788u,
  7013. 149142597u,
  7014. 748501873u,
  7015. 3865014822u,
  7016. 1913588198u,
  7017. 130285614u,
  7018. 3500768879u,
  7019. 915458923u,
  7020. 3071792750u,
  7021. 1339986633u,
  7022. 4143929149u,
  7023. 4048379479u,
  7024. 725193827u,
  7025. 1375113643u,
  7026. 2425277412u,
  7027. 4144659274u,
  7028. 465714768u,
  7029. 226991589u,
  7030. 2212127704u,
  7031. 3936145258u,
  7032. 2891024846u,
  7033. 3816000225u,
  7034. 979331165u,
  7035. 1749907536u,
  7036. 53847318u,
  7037. 1462525833u,
  7038. 2961425455u,
  7039. 368859113u,
  7040. 3572721452u,
  7041. 453048644u,
  7042. 1628629918u,
  7043. 3497673923u,
  7044. 3619079585u,
  7045. 139870565u,
  7046. 1518176798u,
  7047. 3933074281u,
  7048. 1878623729u,
  7049. 2074035641u,
  7050. 3016759257u,
  7051. 1313053591u,
  7052. 2557706970u,
  7053. 2348296582u,
  7054. 962370022u,
  7055. 2337285014u,
  7056. 1618936717u,
  7057. 1915877085u,
  7058. 2743743122u,
  7059. 3250783882u,
  7060. 1346652536u,
  7061. 143311109u,
  7062. 2443788461u,
  7063. 1048248964u,
  7064. 2806619339u,
  7065. 3263266976u,
  7066. 1668146349u,
  7067. 3397428868u,
  7068. 3276188862u,
  7069. 1774196343u,
  7070. 1993847813u,
  7071. 2771079610u,
  7072. 476672419u,
  7073. 2119050359u,
  7074. 2918326659u,
  7075. 2245402721u,
  7076. 2692910474u,
  7077. 2374383269u,
  7078. 342400227u,
  7079. 2961437795u,
  7080. 3899230368u,
  7081. 337787132u,
  7082. 3664444935u,
  7083. 1269451153u,
  7084. 2971526729u,
  7085. 1486511182u,
  7086. 791070133u,
  7087. 2570319890u,
  7088. 3482497490u,
  7089. 2134230518u,
  7090. 4273391202u,
  7091. 1825511330u,
  7092. 3947753714u,
  7093. 1389755724u,
  7094. 3995075516u,
  7095. 2081052615u,
  7096. 3626343470u,
  7097. 4213603435u,
  7098. 2137917278u,
  7099. 2898987303u,
  7100. 3059215715u,
  7101. 3383237881u,
  7102. 3003674434u,
  7103. 409174425u,
  7104. 1911915604u,
  7105. 2087728055u,
  7106. 2942005882u,
  7107. 3386522440u,
  7108. 714936074u,
  7109. 261924004u,
  7110. 3268784033u,
  7111. 1141188757u,
  7112. 2413217552u,
  7113. 1515163433u,
  7114. };
  7115. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  7116. bool Test(int offset, int len = 0) {
  7117. #undef Check
  7118. #undef IsAlive
  7119. #define Check(x) do { \
  7120. const uint32_t actual = (x), e = expected[index++]; \
  7121. bool ok = actual == e; \
  7122. if (!ok) { \
  7123. cerr << "expected " << hex << e << " but got " << actual << endl; \
  7124. ++errors; \
  7125. } \
  7126. assert(ok); \
  7127. } while (0)
  7128. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  7129. // After the following line is where the uses of "Check" and such will go.
  7130. static int index = 0;
  7131. if (offset == -1) { int alive = 0; IsAlive(farmhashsa::Hash32WithSeed(data, len++, SEED)); IsAlive(farmhashsa::Hash32(data, len++)); IsAlive(farmhashsa::Hash32(data, len++)); len -= 3; return alive > 0; }
  7132. Check(farmhashsa::Hash32WithSeed(data + offset, len, SEED));
  7133. Check(farmhashsa::Hash32(data + offset, len));
  7134. return true;
  7135. #undef Check
  7136. #undef IsAlive
  7137. }
  7138. int RunTest() {
  7139. Setup();
  7140. int i = 0;
  7141. cout << "Running farmhashsaTest";
  7142. if (!Test(-1)) {
  7143. cout << "... Unavailable\n";
  7144. return NoteErrors();
  7145. }
  7146. // Good. The function is attempting to hash, so run the full test.
  7147. int errors_prior_to_test = errors;
  7148. for ( ; i < kTestSize - 1; i++) {
  7149. Test(i * i, i);
  7150. }
  7151. for ( ; i < kDataSize; i += i / 7) {
  7152. Test(0, i);
  7153. }
  7154. Test(0, kDataSize);
  7155. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  7156. return NoteErrors();
  7157. }
  7158. #else
  7159. // After the following line is where the code to print hash codes will go.
  7160. void Dump(int offset, int len) {
  7161. cout << farmhashsa::Hash32WithSeed(data + offset, len, SEED) << "u," << endl;
  7162. cout << farmhashsa::Hash32(data + offset, len) << "u," << endl;
  7163. }
  7164. #endif
  7165. #undef SEED
  7166. #undef SEED1
  7167. #undef SEED0
  7168. } // namespace farmhashsaTest
  7169. #if TESTING
  7170. static int farmhashsaTestResult = farmhashsaTest::RunTest();
  7171. #else
  7172. int main(int argc, char** argv) {
  7173. Setup();
  7174. cout << "uint32_t expected[] = {\n";
  7175. int i = 0;
  7176. for ( ; i < kTestSize - 1; i++) {
  7177. farmhashsaTest::Dump(i * i, i);
  7178. }
  7179. for ( ; i < kDataSize; i += i / 7) {
  7180. farmhashsaTest::Dump(0, i);
  7181. }
  7182. farmhashsaTest::Dump(0, kDataSize);
  7183. cout << "};\n";
  7184. }
  7185. #endif
  7186. #ifndef FARMHASH_SELF_TEST_GUARD
  7187. #define FARMHASH_SELF_TEST_GUARD
  7188. #include <cstdio>
  7189. #include <iostream>
  7190. #include <string.h>
  7191. using std::cout;
  7192. using std::cerr;
  7193. using std::endl;
  7194. using std::hex;
  7195. static const uint64_t kSeed0 = 1234567;
  7196. static const uint64_t kSeed1 = k0;
  7197. static const int kDataSize = 1 << 20;
  7198. static const int kTestSize = 300;
  7199. #define kSeed128 Uint128(kSeed0, kSeed1)
  7200. static char data[kDataSize];
  7201. static int completed_self_tests = 0;
  7202. static int errors = 0;
  7203. // Initialize data to pseudorandom values.
  7204. void Setup() {
  7205. if (completed_self_tests == 0) {
  7206. uint64_t a = 9;
  7207. uint64_t b = 777;
  7208. for (int i = 0; i < kDataSize; i++) {
  7209. a += b;
  7210. b += a;
  7211. a = (a ^ (a >> 41)) * k0;
  7212. b = (b ^ (b >> 41)) * k0 + i;
  7213. uint8_t u = b >> 37;
  7214. memcpy(data + i, &u, 1); // uint8_t -> char
  7215. }
  7216. }
  7217. }
  7218. int NoteErrors() {
  7219. #define NUM_SELF_TESTS 9
  7220. if (++completed_self_tests == NUM_SELF_TESTS)
  7221. std::exit(errors > 0);
  7222. return errors;
  7223. }
  7224. template <typename T> inline bool IsNonZero(T x) {
  7225. return x != 0;
  7226. }
  7227. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  7228. return x != Uint128(0, 0);
  7229. }
  7230. #endif // FARMHASH_SELF_TEST_GUARD
  7231. namespace farmhashsuTest {
  7232. uint32_t CreateSeed(int offset, int salt) {
  7233. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  7234. h = h * c1;
  7235. h ^= (h >> 17);
  7236. h = h * c1;
  7237. h ^= (h >> 17);
  7238. h = h * c1;
  7239. h ^= (h >> 17);
  7240. h += static_cast<uint32_t>(offset & 0xffffffff);
  7241. h = h * c1;
  7242. h ^= (h >> 17);
  7243. h = h * c1;
  7244. h ^= (h >> 17);
  7245. h = h * c1;
  7246. h ^= (h >> 17);
  7247. return h;
  7248. }
  7249. #undef SEED
  7250. #undef SEED1
  7251. #undef SEED0
  7252. #define SEED CreateSeed(offset, -1)
  7253. #define SEED0 CreateSeed(offset, 0)
  7254. #define SEED1 CreateSeed(offset, 1)
  7255. #undef TESTING
  7256. #define TESTING 1
  7257. #if TESTING
  7258. uint32_t expected[] = {
  7259. 4223616069u,
  7260. 3696677242u,
  7261. 4081014168u,
  7262. 2576519988u,
  7263. 2212771159u,
  7264. 1112731063u,
  7265. 1020067935u,
  7266. 3955445564u,
  7267. 1451961420u,
  7268. 653440099u,
  7269. 31917516u,
  7270. 2957164615u,
  7271. 2590087362u,
  7272. 3879448744u,
  7273. 176305566u,
  7274. 2447367541u,
  7275. 1359016305u,
  7276. 3363804638u,
  7277. 1117290165u,
  7278. 1062549743u,
  7279. 2437877004u,
  7280. 1894455839u,
  7281. 673206794u,
  7282. 3486923651u,
  7283. 3269862919u,
  7284. 2303349487u,
  7285. 1380660650u,
  7286. 595525107u,
  7287. 1525325287u,
  7288. 2025609358u,
  7289. 176408838u,
  7290. 1592885012u,
  7291. 864896482u,
  7292. 2101378090u,
  7293. 3489229104u,
  7294. 2118965695u,
  7295. 581644891u,
  7296. 2718789079u,
  7297. 631613207u,
  7298. 4228658372u,
  7299. 3867875546u,
  7300. 3531368319u,
  7301. 3804516756u,
  7302. 3317755099u,
  7303. 1619744564u,
  7304. 2884717286u,
  7305. 1088213445u,
  7306. 2667691076u,
  7307. 3727873235u,
  7308. 2330406762u,
  7309. 858590707u,
  7310. 457744844u,
  7311. 4150036245u,
  7312. 2000404290u,
  7313. 1478882570u,
  7314. 901678172u,
  7315. 819171187u,
  7316. 195942998u,
  7317. 4254302102u,
  7318. 3967266927u,
  7319. 437030323u,
  7320. 4018009204u,
  7321. 2868246750u,
  7322. 3540087514u,
  7323. 3154852132u,
  7324. 3319116625u,
  7325. 357580983u,
  7326. 3177665294u,
  7327. 1108813287u,
  7328. 1253366798u,
  7329. 2315997713u,
  7330. 510718750u,
  7331. 1360882441u,
  7332. 2770216279u,
  7333. 3048866755u,
  7334. 3406961221u,
  7335. 3664371439u,
  7336. 1151145514u,
  7337. 1027891570u,
  7338. 2699067992u,
  7339. 3461888315u,
  7340. 198061905u,
  7341. 292769636u,
  7342. 1106771795u,
  7343. 4064110516u,
  7344. 3258279756u,
  7345. 762850927u,
  7346. 1818699721u,
  7347. 2803307356u,
  7348. 3919169404u,
  7349. 460980967u,
  7350. 3125535078u,
  7351. 2802568977u,
  7352. 3582546426u,
  7353. 2148940781u,
  7354. 3963274378u,
  7355. 1266953698u,
  7356. 204185123u,
  7357. 1100034381u,
  7358. 3009193601u,
  7359. 4200651967u,
  7360. 274889605u,
  7361. 2700589508u,
  7362. 952511689u,
  7363. 3765324859u,
  7364. 3465498478u,
  7365. 4014967037u,
  7366. 2070988082u,
  7367. 2972423530u,
  7368. 3068638223u,
  7369. 4156773651u,
  7370. 489509804u,
  7371. 1323863238u,
  7372. 3731914806u,
  7373. 2846098469u,
  7374. 2728930632u,
  7375. 346814072u,
  7376. 848146907u,
  7377. 551160669u,
  7378. 4165126521u,
  7379. 2039095001u,
  7380. 4179859388u,
  7381. 2434936359u,
  7382. 2764414551u,
  7383. 238491210u,
  7384. 732483969u,
  7385. 3366512764u,
  7386. 478307468u,
  7387. 4124179572u,
  7388. 4142733597u,
  7389. 1953448206u,
  7390. 4199329278u,
  7391. 865077060u,
  7392. 2627662116u,
  7393. 2802499360u,
  7394. 3141206831u,
  7395. 1959218197u,
  7396. 911371451u,
  7397. 125987200u,
  7398. 2821366175u,
  7399. 2530992747u,
  7400. 2409206225u,
  7401. 117991880u,
  7402. 2133402461u,
  7403. 895510531u,
  7404. 428719601u,
  7405. 3036014536u,
  7406. 1223783733u,
  7407. 733793540u,
  7408. 970650405u,
  7409. 547701766u,
  7410. 570764615u,
  7411. 3224485368u,
  7412. 3192714940u,
  7413. 319942831u,
  7414. 3940200341u,
  7415. 362056204u,
  7416. 2832368105u,
  7417. 1853281226u,
  7418. 3296434636u,
  7419. 3752508307u,
  7420. 604292768u,
  7421. 2231940616u,
  7422. 1204094681u,
  7423. 866194005u,
  7424. 2405201650u,
  7425. 2466384396u,
  7426. 380829379u,
  7427. 230033818u,
  7428. 2783417588u,
  7429. 4249886729u,
  7430. 829569301u,
  7431. 2988322580u,
  7432. 2299983554u,
  7433. 74748560u,
  7434. 737514425u,
  7435. 3153050211u,
  7436. 652642663u,
  7437. 1270205115u,
  7438. 227197032u,
  7439. 2773091790u,
  7440. 325849216u,
  7441. 49998791u,
  7442. 4043203010u,
  7443. 3662748068u,
  7444. 1709364383u,
  7445. 1179105165u,
  7446. 1478504366u,
  7447. 2980456610u,
  7448. 1167476429u,
  7449. 1590390732u,
  7450. 1306256496u,
  7451. 292008135u,
  7452. 374690995u,
  7453. 1809200819u,
  7454. 1680595904u,
  7455. 646040226u,
  7456. 1742445560u,
  7457. 2435776844u,
  7458. 3703683804u,
  7459. 478742495u,
  7460. 814967947u,
  7461. 2698190177u,
  7462. 1003617993u,
  7463. 1436118705u,
  7464. 217056304u,
  7465. 1412287094u,
  7466. 2738417466u,
  7467. 2933279339u,
  7468. 3461877733u,
  7469. 1203141205u,
  7470. 2119492857u,
  7471. 1134895723u,
  7472. 1560001021u,
  7473. 3786320122u,
  7474. 3748116258u,
  7475. 3486219595u,
  7476. 702138030u,
  7477. 1062984182u,
  7478. 232789133u,
  7479. 1566523968u,
  7480. 3885443778u,
  7481. 1820171888u,
  7482. 3655858585u,
  7483. 2316903005u,
  7484. 2678779620u,
  7485. 395625433u,
  7486. 1609107564u,
  7487. 3108726411u,
  7488. 2937837224u,
  7489. 3911907151u,
  7490. 557272509u,
  7491. 3893435978u,
  7492. 1542613576u,
  7493. 1079886893u,
  7494. 2624566322u,
  7495. 1413700616u,
  7496. 2796974006u,
  7497. 1922556114u,
  7498. 562820464u,
  7499. 2845409784u,
  7500. 54180312u,
  7501. 1898782464u,
  7502. 3681814953u,
  7503. 2417064617u,
  7504. 1815464483u,
  7505. 911626132u,
  7506. 2964575550u,
  7507. 1852696128u,
  7508. 2319647785u,
  7509. 1998904590u,
  7510. 619992689u,
  7511. 3073207513u,
  7512. 1238163512u,
  7513. 3199435982u,
  7514. 828667254u,
  7515. 3561155502u,
  7516. 3943095163u,
  7517. 1045711849u,
  7518. 2238679131u,
  7519. 2114975398u,
  7520. 713808403u,
  7521. 3871787494u,
  7522. 2572031161u,
  7523. 2360934075u,
  7524. 2337781107u,
  7525. 262596504u,
  7526. 693836699u,
  7527. 2129369850u,
  7528. 3543189427u,
  7529. 962205222u,
  7530. 3685581020u,
  7531. 692974477u,
  7532. 725182211u,
  7533. 646123906u,
  7534. 2368836544u,
  7535. 2505872733u,
  7536. 1999977610u,
  7537. 1639885802u,
  7538. 1475058032u,
  7539. 207023609u,
  7540. 2773581234u,
  7541. 3524857793u,
  7542. 3433371102u,
  7543. 3243027613u,
  7544. 1787668353u,
  7545. 985757946u,
  7546. 3896012929u,
  7547. 702356957u,
  7548. 3559331129u,
  7549. 884084870u,
  7550. 4009998120u,
  7551. 648888720u,
  7552. 1403349048u,
  7553. 1624342778u,
  7554. 1766674171u,
  7555. 2518582204u,
  7556. 3251243146u,
  7557. 792751003u,
  7558. 1377201813u,
  7559. 3629686054u,
  7560. 1583734324u,
  7561. 3647107626u,
  7562. 4258564381u,
  7563. 1469878609u,
  7564. 1940598241u,
  7565. 2755003690u,
  7566. 1907120418u,
  7567. 109916701u,
  7568. 775347954u,
  7569. 2090960874u,
  7570. 611281803u,
  7571. 3470490146u,
  7572. 3301663253u,
  7573. 1835412158u,
  7574. 1803066146u,
  7575. 591872433u,
  7576. 550703713u,
  7577. 1495089683u,
  7578. 826492808u,
  7579. 817200035u,
  7580. 4177474571u,
  7581. 688070143u,
  7582. 971427632u,
  7583. 1442499481u,
  7584. 3568640348u,
  7585. 2789993738u,
  7586. 85808128u,
  7587. 2058346726u,
  7588. 394058570u,
  7589. 3466511434u,
  7590. 318905230u,
  7591. 4149248030u,
  7592. 415308316u,
  7593. 165997598u,
  7594. 1219639412u,
  7595. 1648022659u,
  7596. 2857432523u,
  7597. 1422508004u,
  7598. 468095522u,
  7599. 296968649u,
  7600. 430250611u,
  7601. 1775562314u,
  7602. 2976361671u,
  7603. 1040036362u,
  7604. 1372510167u,
  7605. 292746272u,
  7606. 3408238954u,
  7607. 626061886u,
  7608. 1317637569u,
  7609. 1237775792u,
  7610. 1218490455u,
  7611. 2224234499u,
  7612. 590942419u,
  7613. 713995643u,
  7614. 3541889330u,
  7615. 4140218960u,
  7616. 3529791107u,
  7617. 354462673u,
  7618. 842607274u,
  7619. 365048533u,
  7620. 2638303414u,
  7621. 3560458014u,
  7622. 31621379u,
  7623. 4210854794u,
  7624. 1273118792u,
  7625. 2572743762u,
  7626. 3513175801u,
  7627. 402066986u,
  7628. 602524471u,
  7629. 565029192u,
  7630. 180576438u,
  7631. 1288605959u,
  7632. 2896244423u,
  7633. 1420543484u,
  7634. 1329862227u,
  7635. 1791567324u,
  7636. 4248690247u,
  7637. 12917038u,
  7638. 3483481310u,
  7639. 2082050731u,
  7640. 1611921143u,
  7641. 2443766548u,
  7642. 2216338811u,
  7643. 2528006095u,
  7644. 2984009021u,
  7645. 674210884u,
  7646. 2857608106u,
  7647. 2155534809u,
  7648. 1023105067u,
  7649. 2968955846u,
  7650. 3303624302u,
  7651. 2502112850u,
  7652. 245749006u,
  7653. 3175229091u,
  7654. 3342796184u,
  7655. 3613785362u,
  7656. 1614168851u,
  7657. 2582149283u,
  7658. 895403488u,
  7659. 416205023u,
  7660. 3792242000u,
  7661. 529397534u,
  7662. 299415203u,
  7663. 4284673348u,
  7664. 2096851282u,
  7665. 1864524731u,
  7666. 2012577738u,
  7667. 3426363316u,
  7668. 1387308508u,
  7669. 1143610148u,
  7670. 2027467219u,
  7671. 3772856163u,
  7672. 3453862623u,
  7673. 2661437174u,
  7674. 2047145955u,
  7675. 2533381447u,
  7676. 2059534115u,
  7677. 439426587u,
  7678. 1537543414u,
  7679. 2384289877u,
  7680. 3174229055u,
  7681. 2658017753u,
  7682. 2293148474u,
  7683. 2359450158u,
  7684. 3930242475u,
  7685. 1510302397u,
  7686. 3354288821u,
  7687. 920095603u,
  7688. 2415746928u,
  7689. 2729472638u,
  7690. 2261143371u,
  7691. 848667611u,
  7692. 919157153u,
  7693. 3322393117u,
  7694. 4103299943u,
  7695. 413569608u,
  7696. 68911216u,
  7697. 3334990170u,
  7698. 1228068652u,
  7699. 1570056373u,
  7700. 1905477543u,
  7701. 2622302276u,
  7702. 2935063895u,
  7703. 3224810004u,
  7704. 4211768578u,
  7705. 828688131u,
  7706. 3556122839u,
  7707. 1930935348u,
  7708. 2605825202u,
  7709. 1540993970u,
  7710. 3209115883u,
  7711. 122847500u,
  7712. 665638794u,
  7713. 506571051u,
  7714. 2691795295u,
  7715. 3996966556u,
  7716. 714660621u,
  7717. 3662432239u,
  7718. 470651837u,
  7719. 1807432621u,
  7720. 3755290953u,
  7721. 359878860u,
  7722. 2793081615u,
  7723. 4065031431u,
  7724. 904653062u,
  7725. 2317800777u,
  7726. 568501094u,
  7727. 3492871707u,
  7728. 2738806116u,
  7729. 2883859610u,
  7730. 3242080257u,
  7731. 364246691u,
  7732. 3601786516u,
  7733. 3159362524u,
  7734. 1578272201u,
  7735. 1283574375u,
  7736. 2912186103u,
  7737. 2256279032u,
  7738. 1540671086u,
  7739. 2356088973u,
  7740. 2892277779u,
  7741. 3441449267u,
  7742. 2225005503u,
  7743. 3846428419u,
  7744. 2014549218u,
  7745. 2290734767u,
  7746. 2126684614u,
  7747. 4235463487u,
  7748. 3811556204u,
  7749. 174739661u,
  7750. 767525888u,
  7751. 47684458u,
  7752. 4211168099u,
  7753. 889063422u,
  7754. 469864411u,
  7755. 767407110u,
  7756. 413337343u,
  7757. 1618456644u,
  7758. 2814499820u,
  7759. 2401124192u,
  7760. 632089437u,
  7761. 1234980238u,
  7762. 1288585402u,
  7763. 3153169944u,
  7764. 2917822069u,
  7765. 1843320264u,
  7766. 3794359132u,
  7767. 3074573530u,
  7768. 258629454u,
  7769. 3813357060u,
  7770. 3806887248u,
  7771. 1665524736u,
  7772. 3324533324u,
  7773. 3005091922u,
  7774. 793108368u,
  7775. 1529669805u,
  7776. 2332660395u,
  7777. 2217730223u,
  7778. 2634687611u,
  7779. 442806463u,
  7780. 1968135266u,
  7781. 454523002u,
  7782. 3177866230u,
  7783. 2808960136u,
  7784. 4259114138u,
  7785. 4103264843u,
  7786. 3103714075u,
  7787. 2462967542u,
  7788. 1466891491u,
  7789. 477973764u,
  7790. 834565647u,
  7791. 741089037u,
  7792. 218837573u,
  7793. 1710536528u,
  7794. 2469088212u,
  7795. 1229072375u,
  7796. 2828341u,
  7797. 176923431u,
  7798. 985763350u,
  7799. 4095477420u,
  7800. 1984145538u,
  7801. 1870791084u,
  7802. 674956677u,
  7803. 1978138947u,
  7804. 1296493993u,
  7805. 1818183554u,
  7806. 3443333721u,
  7807. 2124949983u,
  7808. 2549590262u,
  7809. 2700850794u,
  7810. 2662736367u,
  7811. 739638109u,
  7812. 4061447096u,
  7813. 2960078422u,
  7814. 2453781158u,
  7815. 929570940u,
  7816. 3200328383u,
  7817. 2406328791u,
  7818. 1419180666u,
  7819. 2152455739u,
  7820. 2805741044u,
  7821. 3305999074u,
  7822. 3183816361u,
  7823. 2303165050u,
  7824. 4922104u,
  7825. 63096005u,
  7826. 936656347u,
  7827. 3104453886u,
  7828. 1088673880u,
  7829. 1113407526u,
  7830. 1457890086u,
  7831. 453478383u,
  7832. 1107686695u,
  7833. 3626027824u,
  7834. 1159687359u,
  7835. 2248467888u,
  7836. 2004578380u,
  7837. 3274954621u,
  7838. 1787958646u,
  7839. 2628726704u,
  7840. 1138419798u,
  7841. 3735442315u,
  7842. 692385301u,
  7843. 313807213u,
  7844. 2329068673u,
  7845. 59375364u,
  7846. 3261084359u,
  7847. 2088644507u,
  7848. 2471153194u,
  7849. 788336435u,
  7850. 4024527246u,
  7851. 141504460u,
  7852. 2307553888u,
  7853. 1930559950u,
  7854. 48975711u,
  7855. 2745693338u,
  7856. 230161982u,
  7857. 3429230862u,
  7858. 1335968626u,
  7859. 609591304u,
  7860. 57435073u,
  7861. 4279281136u,
  7862. 3152151665u,
  7863. 3984484924u,
  7864. 3459883943u,
  7865. 397478330u,
  7866. 1738762229u,
  7867. 3033590066u,
  7868. 3611539498u,
  7869. 1363463523u,
  7870. 3319364965u,
  7871. 2671169141u,
  7872. 3819548561u,
  7873. 1691193757u,
  7874. 2423834608u,
  7875. 2820147055u,
  7876. 1378120632u,
  7877. 1240565187u,
  7878. 3180720050u,
  7879. 680831086u,
  7880. 3309658414u,
  7881. 1986166490u,
  7882. 762099827u,
  7883. 510883662u,
  7884. 2047373648u,
  7885. 3606742294u,
  7886. 3894965352u,
  7887. 2342078853u,
  7888. 1091255717u,
  7889. 776594727u,
  7890. 3217317445u,
  7891. 1574468485u,
  7892. 3844504016u,
  7893. 2819598918u,
  7894. 1037401010u,
  7895. 2550943503u,
  7896. 3867184001u,
  7897. 1687911772u,
  7898. 165313836u,
  7899. 1679575281u,
  7900. 2418947263u,
  7901. 2038774952u,
  7902. 3913543652u,
  7903. 3209155736u,
  7904. 149905221u,
  7905. 3859604717u,
  7906. 713919631u,
  7907. 4069810796u,
  7908. 1882959164u,
  7909. 1019939034u,
  7910. 2379867302u,
  7911. 3666323035u,
  7912. 1157389013u,
  7913. 2422300650u,
  7914. 3366777340u,
  7915. 2526452062u,
  7916. 1313747885u,
  7917. 1039617868u,
  7918. 1620553692u,
  7919. 2032976978u,
  7920. 578789528u,
  7921. 1592846839u,
  7922. 2270630604u,
  7923. 897850577u,
  7924. 1603294178u,
  7925. 3105664807u,
  7926. 1442670138u,
  7927. 1728019360u,
  7928. 79313861u,
  7929. 1683031101u,
  7930. 1913067024u,
  7931. 4070719870u,
  7932. 708986470u,
  7933. 2586453359u,
  7934. 3993348863u,
  7935. 3358251279u,
  7936. 3003552537u,
  7937. 750174793u,
  7938. 836888956u,
  7939. 4190747426u,
  7940. 4251291318u,
  7941. 4145164938u,
  7942. 1366883260u,
  7943. 1912910955u,
  7944. 510192669u,
  7945. 1851315039u,
  7946. 3574241274u,
  7947. 3220062924u,
  7948. 2821142039u,
  7949. 1317082195u,
  7950. 2274293302u,
  7951. 1839219569u,
  7952. 126586168u,
  7953. 3989293643u,
  7954. 2680178207u,
  7955. 347056948u,
  7956. 799681430u,
  7957. 2864517481u,
  7958. 3180404853u,
  7959. 213140045u,
  7960. 1956305184u,
  7961. 1474675286u,
  7962. 3085723423u,
  7963. 2841859626u,
  7964. 308421914u,
  7965. 3670309263u,
  7966. 1765052231u,
  7967. 245459238u,
  7968. 113434331u,
  7969. 4079521092u,
  7970. 2115235526u,
  7971. 2943408816u,
  7972. 1055476938u,
  7973. 1506442339u,
  7974. 2291296392u,
  7975. 3267864332u,
  7976. 1282145528u,
  7977. 3700108015u,
  7978. 1932843667u,
  7979. 2677701670u,
  7980. 6041177u,
  7981. 3889648557u,
  7982. 1461025478u,
  7983. };
  7984. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  7985. bool Test(int offset, int len = 0) {
  7986. #undef Check
  7987. #undef IsAlive
  7988. #define Check(x) do { \
  7989. const uint32_t actual = (x), e = expected[index++]; \
  7990. bool ok = actual == e; \
  7991. if (!ok) { \
  7992. cerr << "expected " << hex << e << " but got " << actual << endl; \
  7993. ++errors; \
  7994. } \
  7995. assert(ok); \
  7996. } while (0)
  7997. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  7998. // After the following line is where the uses of "Check" and such will go.
  7999. static int index = 0;
  8000. if (offset == -1) { int alive = 0; IsAlive(farmhashsu::Hash32WithSeed(data, len++, SEED)); IsAlive(farmhashsu::Hash32(data, len++)); IsAlive(farmhashsu::Hash32(data, len++)); len -= 3; return alive > 0; }
  8001. Check(farmhashsu::Hash32WithSeed(data + offset, len, SEED));
  8002. Check(farmhashsu::Hash32(data + offset, len));
  8003. return true;
  8004. #undef Check
  8005. #undef IsAlive
  8006. }
  8007. int RunTest() {
  8008. Setup();
  8009. int i = 0;
  8010. cout << "Running farmhashsuTest";
  8011. if (!Test(-1)) {
  8012. cout << "... Unavailable\n";
  8013. return NoteErrors();
  8014. }
  8015. // Good. The function is attempting to hash, so run the full test.
  8016. int errors_prior_to_test = errors;
  8017. for ( ; i < kTestSize - 1; i++) {
  8018. Test(i * i, i);
  8019. }
  8020. for ( ; i < kDataSize; i += i / 7) {
  8021. Test(0, i);
  8022. }
  8023. Test(0, kDataSize);
  8024. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  8025. return NoteErrors();
  8026. }
  8027. #else
  8028. // After the following line is where the code to print hash codes will go.
  8029. void Dump(int offset, int len) {
  8030. cout << farmhashsu::Hash32WithSeed(data + offset, len, SEED) << "u," << endl;
  8031. cout << farmhashsu::Hash32(data + offset, len) << "u," << endl;
  8032. }
  8033. #endif
  8034. #undef SEED
  8035. #undef SEED1
  8036. #undef SEED0
  8037. } // namespace farmhashsuTest
  8038. #if TESTING
  8039. static int farmhashsuTestResult = farmhashsuTest::RunTest();
  8040. #else
  8041. int main(int argc, char** argv) {
  8042. Setup();
  8043. cout << "uint32_t expected[] = {\n";
  8044. int i = 0;
  8045. for ( ; i < kTestSize - 1; i++) {
  8046. farmhashsuTest::Dump(i * i, i);
  8047. }
  8048. for ( ; i < kDataSize; i += i / 7) {
  8049. farmhashsuTest::Dump(0, i);
  8050. }
  8051. farmhashsuTest::Dump(0, kDataSize);
  8052. cout << "};\n";
  8053. }
  8054. #endif
  8055. #ifndef FARMHASH_SELF_TEST_GUARD
  8056. #define FARMHASH_SELF_TEST_GUARD
  8057. #include <cstdio>
  8058. #include <iostream>
  8059. #include <string.h>
  8060. using std::cout;
  8061. using std::cerr;
  8062. using std::endl;
  8063. using std::hex;
  8064. static const uint64_t kSeed0 = 1234567;
  8065. static const uint64_t kSeed1 = k0;
  8066. static const int kDataSize = 1 << 20;
  8067. static const int kTestSize = 300;
  8068. #define kSeed128 Uint128(kSeed0, kSeed1)
  8069. static char data[kDataSize];
  8070. static int completed_self_tests = 0;
  8071. static int errors = 0;
  8072. // Initialize data to pseudorandom values.
  8073. void Setup() {
  8074. if (completed_self_tests == 0) {
  8075. uint64_t a = 9;
  8076. uint64_t b = 777;
  8077. for (int i = 0; i < kDataSize; i++) {
  8078. a += b;
  8079. b += a;
  8080. a = (a ^ (a >> 41)) * k0;
  8081. b = (b ^ (b >> 41)) * k0 + i;
  8082. uint8_t u = b >> 37;
  8083. memcpy(data + i, &u, 1); // uint8_t -> char
  8084. }
  8085. }
  8086. }
  8087. int NoteErrors() {
  8088. #define NUM_SELF_TESTS 9
  8089. if (++completed_self_tests == NUM_SELF_TESTS)
  8090. std::exit(errors > 0);
  8091. return errors;
  8092. }
  8093. template <typename T> inline bool IsNonZero(T x) {
  8094. return x != 0;
  8095. }
  8096. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  8097. return x != Uint128(0, 0);
  8098. }
  8099. #endif // FARMHASH_SELF_TEST_GUARD
  8100. namespace farmhashteTest {
  8101. uint32_t CreateSeed(int offset, int salt) {
  8102. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  8103. h = h * c1;
  8104. h ^= (h >> 17);
  8105. h = h * c1;
  8106. h ^= (h >> 17);
  8107. h = h * c1;
  8108. h ^= (h >> 17);
  8109. h += static_cast<uint32_t>(offset & 0xffffffff);
  8110. h = h * c1;
  8111. h ^= (h >> 17);
  8112. h = h * c1;
  8113. h ^= (h >> 17);
  8114. h = h * c1;
  8115. h ^= (h >> 17);
  8116. return h;
  8117. }
  8118. #undef SEED
  8119. #undef SEED1
  8120. #undef SEED0
  8121. #define SEED CreateSeed(offset, -1)
  8122. #define SEED0 CreateSeed(offset, 0)
  8123. #define SEED1 CreateSeed(offset, 1)
  8124. #undef TESTING
  8125. #define TESTING 1
  8126. #if TESTING
  8127. uint32_t expected[] = {
  8128. 1140953930u, 861465670u,
  8129. 3277735313u, 2681724312u,
  8130. 2598464059u, 797982799u,
  8131. 890626835u, 800175912u,
  8132. 2603993599u, 921001710u,
  8133. 1410420968u, 2134990486u,
  8134. 3283896453u, 1867689945u,
  8135. 2914424215u, 2244477846u,
  8136. 255297188u, 2992121793u,
  8137. 1110588164u, 4186314283u,
  8138. 161451183u, 3943596029u,
  8139. 4019337850u, 452431531u,
  8140. 283198166u, 2741341286u,
  8141. 3379021470u, 2557197665u,
  8142. 299850021u, 2532580744u,
  8143. 452473466u, 1706958772u,
  8144. 1298374911u, 3099673830u,
  8145. 2199864459u, 3696623795u,
  8146. 236935126u, 2976578695u,
  8147. 4055299123u, 3281581178u,
  8148. 1053458494u, 1882212500u,
  8149. 2305012065u, 2169731866u,
  8150. 3456121707u, 275903667u,
  8151. 458884671u, 3033004529u,
  8152. 3058973506u, 2379411653u,
  8153. 1898235244u, 1402319660u,
  8154. 2700149065u, 2699376854u,
  8155. 147814787u, 720739346u,
  8156. 2433714046u, 4222949502u,
  8157. 4220361840u, 1712034059u,
  8158. 3425469811u, 3690733394u,
  8159. 4148372108u, 1330324210u,
  8160. 594028478u, 2921867846u,
  8161. 1635026870u, 192883107u,
  8162. 780716741u, 1728752234u,
  8163. 3280331829u, 326029180u,
  8164. 3969463346u, 1436364519u,
  8165. 393215742u, 3349570000u,
  8166. 3824583307u, 1612122221u,
  8167. 2859809759u, 3808705738u,
  8168. 1379537552u, 1646032583u,
  8169. 2233466664u, 1432476832u,
  8170. 4023053163u, 2650381482u,
  8171. 2052294713u, 3552092450u,
  8172. 1628777059u, 1499109081u,
  8173. 3476440786u, 3829307897u,
  8174. 2960536756u, 1554038301u,
  8175. 1145519619u, 3190844552u,
  8176. 2902102606u, 3600725550u,
  8177. 237495366u, 540224401u,
  8178. 65721842u, 489963606u,
  8179. 1448662590u, 397635823u,
  8180. 1596489240u, 1562872448u,
  8181. 1790705123u, 2128624475u,
  8182. 180854224u, 2604346966u,
  8183. 1435705557u, 1262831810u,
  8184. 155445229u, 1672724608u,
  8185. 1669465176u, 1341975128u,
  8186. 663607706u, 2077310004u,
  8187. 3610042449u, 1911523866u,
  8188. 1043692997u, 1454396064u,
  8189. 2563776023u, 294527927u,
  8190. 1099072299u, 1389770549u,
  8191. 703505868u, 678706990u,
  8192. 2952353448u, 2026137563u,
  8193. 3603803785u, 629449419u,
  8194. 1933894405u, 3043213226u,
  8195. 226132789u, 2489287368u,
  8196. 1552847036u, 645684964u,
  8197. 3828089804u, 3632594520u,
  8198. 187883449u, 230403464u,
  8199. 3151491850u, 3272648435u,
  8200. 3729087873u, 1303930448u,
  8201. 2002861219u, 165370827u,
  8202. 916494250u, 1230085527u,
  8203. 3103338579u, 3064290191u,
  8204. 3807265751u, 3628174014u,
  8205. 231181488u, 851743255u,
  8206. 2295806711u, 1781190011u,
  8207. 2988893883u, 1554380634u,
  8208. 1142264800u, 3667013118u,
  8209. 1968445277u, 315203929u,
  8210. 2638023604u, 2290487377u,
  8211. 732137533u, 1909203251u,
  8212. 440398219u, 1891630171u,
  8213. 1380301172u, 1498556724u,
  8214. 4072067757u, 4165088768u,
  8215. 4204318635u, 441430649u,
  8216. 3931792696u, 197618179u,
  8217. 956300927u, 914413116u,
  8218. 3010839769u, 2837339569u,
  8219. 2148126371u, 1913303225u,
  8220. 3074915312u, 3117299654u,
  8221. 4139181436u, 2993479124u,
  8222. 3178848746u, 1357272220u,
  8223. 1438494951u, 507436733u,
  8224. 667183474u, 2084369203u,
  8225. 3854939912u, 1413396341u,
  8226. 126024219u, 146044391u,
  8227. 1016656857u, 3022024459u,
  8228. 3254014218u, 429095991u,
  8229. 990500595u, 3056862311u,
  8230. 985653208u, 1718653828u,
  8231. 623071693u, 366414107u,
  8232. 1771289760u, 2293458109u,
  8233. 3047342438u, 2991127487u,
  8234. 3120876698u, 1684583131u,
  8235. 3638043310u, 1170404994u,
  8236. 863214540u, 1087193030u,
  8237. 199124911u, 520792961u,
  8238. 3169775996u, 1577421232u,
  8239. 3331828431u, 1013201099u,
  8240. 1716848157u, 4033596884u,
  8241. 1770708857u, 4229339322u,
  8242. 1146169032u, 1434258493u,
  8243. 3824360466u, 3242407770u,
  8244. 1926419493u, 2649785113u,
  8245. 872586426u, 762243036u,
  8246. 2736953692u, 816692935u,
  8247. 1571283333u, 3555213933u,
  8248. 2266795890u, 3781899767u,
  8249. 4290630595u, 517646945u,
  8250. 3006163611u, 2180594090u,
  8251. 959214578u, 558910384u,
  8252. 1283799121u, 3047062993u,
  8253. 3830962609u, 2391606125u,
  8254. 3544509313u, 622325861u,
  8255. 834785312u, 382936554u,
  8256. 1421463872u, 788479970u,
  8257. 1825135056u, 2725923798u,
  8258. 580988377u, 2826990641u,
  8259. 247825043u, 3167748333u,
  8260. 812546227u, 2506885666u,
  8261. 2584372201u, 1758123094u,
  8262. 1891789696u, 389974094u,
  8263. 345313518u, 2022370576u,
  8264. 3886113119u, 3338548567u,
  8265. 1083486947u, 2583576230u,
  8266. 1776047957u, 1771384107u,
  8267. 3604937815u, 3198590202u,
  8268. 3027522813u, 4155628142u,
  8269. 4232136669u, 427759438u,
  8270. 4244322689u, 542201663u,
  8271. 1549591985u, 2856634168u,
  8272. 556609672u, 45845311u,
  8273. 1175961330u, 3948351189u,
  8274. 4165739882u, 4194218315u,
  8275. 1634635545u, 4151937410u,
  8276. 713127376u, 1467786451u,
  8277. 1327394015u, 2743592929u,
  8278. 2638154051u, 810082938u,
  8279. 3077742128u, 1062268187u,
  8280. 4084325664u, 3810665822u,
  8281. 3735739145u, 2794294783u,
  8282. 2335576331u, 2560479831u,
  8283. 690240711u, 997658837u,
  8284. 2442302747u, 3948961926u,
  8285. 3958366652u, 3067277639u,
  8286. 2059157774u, 1211737169u,
  8287. 1516711748u, 2339636583u,
  8288. 4188504038u, 59581167u,
  8289. 2767897792u, 1389679610u,
  8290. 2658147000u, 2643979752u,
  8291. 3758739543u, 4189944477u,
  8292. 1454470782u, 100876854u,
  8293. 2995362413u, 118817200u,
  8294. 3252925478u, 2062343506u,
  8295. 2804483644u, 3088828656u,
  8296. 1231633714u, 4168280671u,
  8297. 2931588131u, 3284356565u,
  8298. 1255909792u, 3130054947u,
  8299. 4173605289u, 1407328702u,
  8300. 1677744031u, 3532596884u,
  8301. 3162657845u, 3887208531u,
  8302. 2256541290u, 3459463480u,
  8303. 3740979556u, 259034107u,
  8304. 392987633u, 3233195759u,
  8305. 3606709555u, 3424793077u,
  8306. 315836068u, 3200749877u,
  8307. 4065431359u, 760633989u,
  8308. 2982018998u, 1811050648u,
  8309. 234531934u, 1115203611u,
  8310. 3897494162u, 1516407838u,
  8311. 1603559457u, 323296368u,
  8312. 2632963283u, 1778459926u,
  8313. 2879836826u, 2146672889u,
  8314. 3486330348u, 492621815u,
  8315. 1231665285u, 2457048126u,
  8316. 3438440082u, 2217471853u,
  8317. 3355404249u, 3275550588u,
  8318. 1052645068u, 862072556u,
  8319. 4110617119u, 3745267835u,
  8320. 2657392572u, 4279236653u,
  8321. 1688445808u, 701920051u,
  8322. 956734128u, 581695350u,
  8323. 3157862788u, 2585726058u,
  8324. 1192588249u, 1410111809u,
  8325. 1651193125u, 3326135446u,
  8326. 1073280453u, 97376972u,
  8327. 2513844237u, 2187968410u,
  8328. 3976859649u, 4267859263u,
  8329. 3429034542u, 564493077u,
  8330. 3000537321u, 479241367u,
  8331. 3845637831u, 2868987960u,
  8332. 51544337u, 1029173765u,
  8333. 393624922u, 704325635u,
  8334. 2357610553u, 1418509533u,
  8335. 2007814586u, 3866658271u,
  8336. 3082385053u, 735688735u,
  8337. 916110004u, 3283299459u,
  8338. 1051684175u, 1083796807u,
  8339. 4074716319u, 813690332u,
  8340. 144264390u, 1439630796u,
  8341. 1508556987u, 675582689u,
  8342. 3748881891u, 3195309868u,
  8343. 362884708u, 1616408198u,
  8344. 43233176u, 837301135u,
  8345. 881504822u, 3254795114u,
  8346. 1385506591u, 2799925823u,
  8347. 1469874582u, 3464841997u,
  8348. 497175391u, 3929484338u,
  8349. 3975771289u, 1798536177u,
  8350. 2926265846u, 1374242438u,
  8351. 3675707838u, 4205965408u,
  8352. 3153165629u, 1499475160u,
  8353. 187287713u, 548490821u,
  8354. 3255259608u, 4247675634u,
  8355. 1940181471u, 3779953975u,
  8356. 687167150u, 2319566715u,
  8357. 1742785722u, 785893184u,
  8358. 2296977392u, 2778575413u,
  8359. 1794720651u, 48131484u,
  8360. 4084891412u, 1160134629u,
  8361. 3737623280u, 823113169u,
  8362. 3423207646u, 3803213486u,
  8363. 710625654u, 4116162021u,
  8364. 3693420287u, 4167766971u,
  8365. 1666602807u, 295320990u,
  8366. 3513255468u, 2487440590u,
  8367. 234080704u, 4004655503u,
  8368. 2971762528u, 1479656873u,
  8369. 4090178629u, 4044418876u,
  8370. 391947536u, 1462554406u,
  8371. 3909295855u, 1239580330u,
  8372. 1515601363u, 2011102035u,
  8373. 1442068334u, 4265993528u,
  8374. 1191921695u, 2291355695u,
  8375. 4257172787u, 576405853u,
  8376. 314332944u, 4038839101u,
  8377. 55559918u, 2378985842u,
  8378. 711098718u, 2425317635u,
  8379. 1644327317u, 1401013391u,
  8380. 4193760037u, 2958260436u,
  8381. 3167371443u, 3062418115u,
  8382. 3800755475u, 3167030094u,
  8383. 3489648204u, 1405430357u,
  8384. 526177822u, 2602636307u,
  8385. 915406019u, 4264167741u,
  8386. 1484090483u, 3070944737u,
  8387. 254529415u, 4017058800u,
  8388. 1702710265u, 1029665228u,
  8389. 2000382906u, 3185573940u,
  8390. 1381258384u, 4036354071u,
  8391. 2900841028u, 2670703363u,
  8392. 2921748807u, 2899069938u,
  8393. 4130543625u, 688472265u,
  8394. 4186808827u, 1054670286u,
  8395. 1132985391u, 2840525968u,
  8396. 4175776103u, 338058159u,
  8397. 1735964501u, 1539305024u,
  8398. 3497121710u, 1568260669u,
  8399. 2227290760u, 146827036u,
  8400. 3977176001u, 4060134777u,
  8401. 857488494u, 250055052u,
  8402. 4284109679u, 2502815838u,
  8403. 2592281721u, 1603444633u,
  8404. 1390562014u, 1556658131u,
  8405. 616327404u, 2448966429u,
  8406. 3051191726u, 3891353218u,
  8407. 1213304082u, 762328245u,
  8408. 2239052397u, 1082330589u,
  8409. 2455957292u, 201837927u,
  8410. 405397452u, 3079886794u,
  8411. 2583939798u, 2848283092u,
  8412. 3750724631u, 883849006u,
  8413. 3204198988u, 3341327098u,
  8414. 1855234968u, 1982110346u,
  8415. 1485529487u, 541496720u,
  8416. 4117290321u, 3607433551u,
  8417. 2168864636u, 133643215u,
  8418. 1055817409u, 3847827123u,
  8419. 2960769387u, 4046101649u,
  8420. 1176127003u, 4015671361u,
  8421. 4243643405u, 2849988118u,
  8422. 517111221u, 1796672358u,
  8423. 2045051700u, 3452457457u,
  8424. 2948254999u, 2102063419u,
  8425. 1556410577u, 1536380876u,
  8426. 3776661467u, 3281002516u,
  8427. 1735616066u, 1539151988u,
  8428. 1087795162u, 3332431596u,
  8429. 685631442u, 1147951686u,
  8430. 95237878u, 2005032160u,
  8431. 4012206915u, 4224354805u,
  8432. 3204999386u, 2415262714u,
  8433. 1433635018u, 116647396u,
  8434. 83167836u, 2881562655u,
  8435. 2729416454u, 1029284767u,
  8436. 881378302u, 2159170082u,
  8437. 555057366u, 1169104445u,
  8438. 3963877000u, 1919171906u,
  8439. 336034862u, 2017579106u,
  8440. 4059340529u, 3020819343u,
  8441. 865146997u, 2473524405u,
  8442. 944743644u, 1694443528u,
  8443. 1804513294u, 2904752429u,
  8444. 617975720u, 3671562289u,
  8445. 260177668u, 505662155u,
  8446. 1885941445u, 2504509403u,
  8447. 2260041112u, 1019936943u,
  8448. 3722741628u, 1511077569u,
  8449. 3100701179u, 1379422864u,
  8450. 1535670711u, 773792826u,
  8451. 1103819072u, 2089123665u,
  8452. 1157547425u, 329152940u,
  8453. 4142587430u, 484732447u,
  8454. 2475035432u, 1120017626u,
  8455. 412145504u, 965125959u,
  8456. 324924679u, 2809286837u,
  8457. 2842141483u, 4029205195u,
  8458. 2974306813u, 515627448u,
  8459. 3791551981u, 1097806406u,
  8460. 3873078673u, 136118734u,
  8461. 1872130856u, 3632422367u,
  8462. 3574135531u, 4017075736u,
  8463. 1699452298u, 1403506686u,
  8464. 344414660u, 1189129691u,
  8465. 3487080616u, 1516736273u,
  8466. 1805475756u, 2562064338u,
  8467. 163335594u, 2732147834u,
  8468. 4077452507u, 2984955003u,
  8469. 4271866024u, 3071338162u,
  8470. 2347111903u, 873829983u,
  8471. 1948409509u, 1923531348u,
  8472. 459509140u, 771592405u,
  8473. 1750124750u, 2334938333u,
  8474. 213811117u, 2586632018u,
  8475. 185232757u, 4032960199u,
  8476. 2447383637u, 284777551u,
  8477. 1654276320u, 2687561076u,
  8478. 3512945009u, 308584855u,
  8479. 1861027147u, 4102279334u,
  8480. 3203802620u, 1692079268u,
  8481. 4250142168u, 2565680167u,
  8482. 1507046104u, 841195925u,
  8483. 520565830u, 3674576684u,
  8484. 38924274u, 3770488806u,
  8485. 2414430882u, 3978473838u,
  8486. 3703994407u, 69201295u,
  8487. 3099963860u, 1255084262u,
  8488. 690971838u, 3539996781u,
  8489. 3696902571u, 3593730713u,
  8490. 2363435042u, 54945052u,
  8491. 1785765213u, 184911581u,
  8492. 1586241476u, 1939595371u,
  8493. 2534883189u, 2432427547u,
  8494. 2374171993u, 2039128933u,
  8495. 2955715987u, 2295501078u,
  8496. 2741583197u, 1280920000u,
  8497. 686818699u, 1238742497u,
  8498. 3843660102u, 82177963u,
  8499. 1281043691u, 1121403845u,
  8500. 1697846708u, 284852964u,
  8501. 278661677u, 2889101923u,
  8502. 2127558730u, 713121337u,
  8503. 872502474u, 511142139u,
  8504. 1261140657u, 1747052377u,
  8505. 2108187161u, 927011680u,
  8506. 955328267u, 3821994995u,
  8507. 2707230761u, 4142246789u,
  8508. 4134691985u, 1958963937u,
  8509. 2498463509u, 1977988705u,
  8510. 1419293714u, 1636932722u,
  8511. 2567532373u, 4075249328u,
  8512. 240575705u, 1956681213u,
  8513. 2598802768u, 2025886508u,
  8514. 4104757832u, 3026358429u,
  8515. 3242615202u, 4026813725u,
  8516. 255108733u, 1845587644u,
  8517. 3573008472u, 3615577014u,
  8518. 1222733548u, 1205557630u,
  8519. 917608574u, 1363253259u,
  8520. 1541946015u, 3087190425u,
  8521. 1138008081u, 1444019663u,
  8522. 109793386u, 341851980u,
  8523. 857839960u, 2515339233u,
  8524. 156283211u, 1906768669u,
  8525. 3886713057u, 1276595523u,
  8526. 2809830736u, 460237542u,
  8527. 3420452099u, 142985419u,
  8528. 205970448u, 4198897105u,
  8529. 1950698961u, 2069753399u,
  8530. 1142216925u, 1113051162u,
  8531. 1033680610u, 4278599955u,
  8532. 1106466069u, 356742959u,
  8533. 531521052u, 3494863964u,
  8534. 225629455u, 3735275001u,
  8535. 3662626864u, 1750561299u,
  8536. 1012864651u, 2101846429u,
  8537. 1074553219u, 668829411u,
  8538. 992181339u, 3384018814u,
  8539. 3330664522u, 860966321u,
  8540. 1885071395u, 4233785523u,
  8541. 100741310u, 451656820u,
  8542. 2148187612u, 1063001151u,
  8543. 360256231u, 107312677u,
  8544. 3650357479u, 2390172694u,
  8545. 22452685u, 237319043u,
  8546. 3600462351u, 1216645846u,
  8547. 2088767754u, 164402616u,
  8548. 2418980170u, 926137824u,
  8549. 94638678u, 1689811113u,
  8550. 2751052984u, 1767810825u,
  8551. 271289013u, 3896132233u,
  8552. 103797041u, 1397772514u,
  8553. 3441135892u, 3323383489u,
  8554. 2491268371u, 1662561885u,
  8555. 1612872497u, 2986430557u,
  8556. 2756998822u, 207428029u,
  8557. 937973965u, 2791656726u,
  8558. 1949717207u, 2260498180u,
  8559. 2648427775u, 2360400900u,
  8560. 2080496169u, 486358863u,
  8561. 1582022990u, 1263709570u,
  8562. 1396468647u, 1377764574u,
  8563. 363008508u, 1293502429u,
  8564. 224580012u, 4252610345u,
  8565. 1435134775u, 1099809675u,
  8566. 533671980u, 1533438766u,
  8567. 1820532305u, 2776960536u,
  8568. 3374512975u, 3542220540u,
  8569. 822810075u, 3716663290u,
  8570. 1157398049u, 3752806924u,
  8571. 4081637863u, 337070226u,
  8572. 3866585976u, 359270190u,
  8573. 2110942730u, 3267551635u,
  8574. 644850146u, 1306761320u,
  8575. 746972907u, 934259457u,
  8576. 2341378668u, 2220373824u,
  8577. 1242645122u, 4109252858u,
  8578. 1625266099u, 1173698481u,
  8579. 383517064u, 896322512u,
  8580. 3377483696u, 1788337208u,
  8581. 455496839u, 3194373887u,
  8582. 1837689083u, 1336556841u,
  8583. 1658628529u, 2911512007u,
  8584. 3838343487u, 2757664765u,
  8585. 1537187340u, 3712582785u,
  8586. 367022558u, 3071359622u,
  8587. 3926147070u, 35432879u,
  8588. 3093195926u, 2561488770u,
  8589. 4273132307u, 3898950547u,
  8590. 2838251049u, 2103926083u,
  8591. 2549435227u, 536047554u,
  8592. 1858986613u, 2040551642u,
  8593. 1147412575u, 1972369852u,
  8594. 4166184983u, 3528794619u,
  8595. 4077477194u, 3565689036u,
  8596. 808048238u, 3826350461u,
  8597. 1359641525u, 1197100813u,
  8598. 265993036u, 1864569342u,
  8599. 725164342u, 2264788336u,
  8600. 1831223342u, 3329594980u,
  8601. 923017956u, 490608221u,
  8602. 3818634478u, 258154469u,
  8603. 1441714797u, 1174785921u,
  8604. 3833372385u, 3287246572u,
  8605. 1677395563u, 3569218731u,
  8606. 868981704u, 2163330264u,
  8607. 2649450292u, 500120236u,
  8608. 465161780u, 746438382u,
  8609. 1145009669u, 2520062970u,
  8610. 2810524030u, 1561519055u,
  8611. 1479878006u, 3864969305u,
  8612. 2686075657u, 4042710240u,
  8613. 3224066062u, 2774151984u,
  8614. 2226179547u, 1643626042u,
  8615. 2328730865u, 3160666939u,
  8616. 2107011431u, 96459446u,
  8617. 3920328742u, 3336407558u,
  8618. 829404209u, 1878067032u,
  8619. 1235983679u, 4237425634u,
  8620. 466519055u, 3870676863u,
  8621. 934312076u, 2952135524u,
  8622. 276949224u, 4100839753u,
  8623. 424001484u, 1955120893u,
  8624. 4015478120u, 1265237690u,
  8625. 427484362u, 4246879223u,
  8626. 3452969617u, 1724363362u,
  8627. 1553513184u, 834830418u,
  8628. 1858777639u, 3476334357u,
  8629. 4144030366u, 2450047160u,
  8630. 2950762705u, 4277111759u,
  8631. 358032121u, 2511026735u,
  8632. 167923105u, 2059208280u,
  8633. 251949572u, 3065234219u,
  8634. 1535473864u, 556796152u,
  8635. 1513237478u, 3150857516u,
  8636. 1103404394u, 198182691u,
  8637. 1476438092u, 2913077464u,
  8638. 207119516u, 3963810232u,
  8639. 2954651680u, 1535115487u,
  8640. 3051522276u, 4046477658u,
  8641. 917804636u, 864395565u,
  8642. 632704095u, 140762681u,
  8643. 1802040304u, 990407433u,
  8644. 3771506212u, 4106024923u,
  8645. 1287729497u, 2198985327u,
  8646. 4052924496u, 2926590471u,
  8647. 3084557148u, 1472898694u,
  8648. 1009870118u, 559702706u,
  8649. 4265214507u, 82077489u,
  8650. 3067891003u, 3295678907u,
  8651. 2402308151u, 1096697687u,
  8652. 464407878u, 4190838199u,
  8653. 4269578403u, 3060919438u,
  8654. 2899950405u, 3046872820u,
  8655. 733509243u, 1583801700u,
  8656. 40453902u, 3879773881u,
  8657. 1993425202u, 2185339100u,
  8658. 1877837196u, 3912423882u,
  8659. 3293122640u, 4104318469u,
  8660. 1679617763u, 3703603898u,
  8661. 8759461u, 2540185277u,
  8662. 1152198475u, 2038345882u,
  8663. 2503579743u, 1446869792u,
  8664. 2019419351u, 4051584612u,
  8665. 3178289407u, 3992503830u,
  8666. 2879018745u, 2719373510u,
  8667. 700836153u, 1675560450u,
  8668. 4121245793u, 2064715719u,
  8669. 343595772u, 1996164093u,
  8670. 3130433948u, 405251683u,
  8671. 2804817126u, 1607133689u,
  8672. 463852893u, 2864244470u,
  8673. 2224044848u, 4071581802u,
  8674. 2537107938u, 2246347953u,
  8675. 3207234525u, 2028708916u,
  8676. 2272418128u, 803575837u,
  8677. 38655481u, 2170452091u,
  8678. 3272166407u, 557660441u,
  8679. 4019147902u, 3841480082u,
  8680. 298459606u, 2600943364u,
  8681. 2440657523u, 255451671u,
  8682. 3424361375u, 779434428u,
  8683. 3088526123u, 490671625u,
  8684. 1322855877u, 3452203069u,
  8685. 3057021940u, 2285701422u,
  8686. 2014993457u, 2390431709u,
  8687. 2002090272u, 1568745354u,
  8688. 1783152480u, 823305654u,
  8689. 4053862835u, 2200236540u,
  8690. 3009412313u, 3184047862u,
  8691. 3032187389u, 4159715581u,
  8692. 2966902888u, 252986948u,
  8693. 1849329144u, 3160134214u,
  8694. 3420960112u, 3198900547u,
  8695. 749160960u, 379139040u,
  8696. 1208883495u, 1566527339u,
  8697. 3006227299u, 4194096960u,
  8698. 556075248u, 497404038u,
  8699. 1717327230u, 1496132623u,
  8700. 1775955687u, 1719108984u,
  8701. 1014328900u, 4189966956u,
  8702. 2108574735u, 2584236470u,
  8703. 684087286u, 531310503u,
  8704. 4264509527u, 773405691u,
  8705. 3088905079u, 3456882941u,
  8706. 3105682208u, 3382290593u,
  8707. 2289363624u, 3296306400u,
  8708. 4168438718u, 467441309u,
  8709. 777173623u, 3241407531u,
  8710. 1183994815u, 1132983260u,
  8711. 1610606159u, 2540270567u,
  8712. 2649684057u, 1397502982u,
  8713. 146657385u, 3318434267u,
  8714. 2109315753u, 3348545480u,
  8715. 3193669211u, 811750340u,
  8716. 1073256162u, 3571673088u,
  8717. 546596661u, 1017047954u,
  8718. 3403136990u, 2540585554u,
  8719. 1477047647u, 4145867423u,
  8720. 2826408201u, 3531646869u,
  8721. 784952939u, 943914610u,
  8722. 2717443875u, 3657384638u,
  8723. 1806867885u, 1903578924u,
  8724. 3985088434u, 1911188923u,
  8725. 1764002686u, 3672748083u,
  8726. 1832925325u, 241574049u,
  8727. 519948041u, 3181425568u,
  8728. 2939747257u, 1634174593u,
  8729. 3429894862u, 3529565564u,
  8730. 1089679033u, 240953857u,
  8731. 2025369941u, 2695166650u,
  8732. 517086873u, 2964595704u,
  8733. 3017658263u, 3828377737u,
  8734. 2144895011u, 994799311u,
  8735. 1184683823u, 4260564140u,
  8736. 308018483u, 4262383425u,
  8737. 1374752558u, 3431057723u,
  8738. 1572637805u, 383233885u,
  8739. 3188015819u, 4051263539u,
  8740. 233319221u, 3794788167u,
  8741. 2017406667u, 919677938u,
  8742. 4074952232u, 1683612329u,
  8743. 4213676186u, 327142514u,
  8744. 3032591014u, 4204155962u,
  8745. 206775997u, 2283918569u,
  8746. 2395147154u, 3427505379u,
  8747. 2211319468u, 4153726847u,
  8748. 2217060665u, 350160869u,
  8749. 2493667051u, 1648200185u,
  8750. 3441709766u, 1387233546u,
  8751. 140980u, 1891558063u,
  8752. 760080239u, 2088061981u,
  8753. 1580964938u, 740563169u,
  8754. 422986366u, 330624974u,
  8755. 4264507722u, 150928357u,
  8756. 2738323042u, 2948665536u,
  8757. 918718096u, 376390582u,
  8758. 3966098971u, 717653678u,
  8759. 3219466255u, 3799363969u,
  8760. 3424344721u, 3187805406u,
  8761. 375347278u, 3490350144u,
  8762. 1992212097u, 2263421398u,
  8763. 3855037968u, 1928519266u,
  8764. 3866327955u, 1129127000u,
  8765. 1782515131u, 2746577402u,
  8766. 3059200728u, 2108753646u,
  8767. 2738070963u, 1336849395u,
  8768. 1705302106u, 768287270u,
  8769. 1343511943u, 2247006571u,
  8770. 1956142255u, 1780259453u,
  8771. 3475618043u, 212490675u,
  8772. 622521957u, 917121602u,
  8773. 1852992332u, 1267987847u,
  8774. 3170016833u, 2549835613u,
  8775. 3299763344u, 2864033668u,
  8776. 3378768767u, 1236609378u,
  8777. 4169365948u, 3738062408u,
  8778. 2661022773u, 2006922227u,
  8779. 2760592161u, 3828932355u,
  8780. 2636387819u, 2616619070u,
  8781. 1237256330u, 3449066284u,
  8782. 2871755260u, 3729280948u,
  8783. 3862686086u, 431292293u,
  8784. 3285899651u, 786322314u,
  8785. 2531158535u, 724901242u,
  8786. 2377363130u, 1415970351u,
  8787. 1244759631u, 3263135197u,
  8788. 965248856u, 174024139u,
  8789. 2297418515u, 2954777083u,
  8790. 987586766u, 3206261120u,
  8791. 4059515114u, 3903854066u,
  8792. 1931934525u, 2287507921u,
  8793. 1827135136u, 1781944746u,
  8794. 574617451u, 2299034788u,
  8795. 2650140034u, 4081586725u,
  8796. 2482286699u, 1109175923u,
  8797. 458483596u, 618705848u,
  8798. 4059852729u, 1813855658u,
  8799. 4190721328u, 1129462471u,
  8800. 4089998050u, 3575732749u,
  8801. 2375584220u, 1037031473u,
  8802. 1623777358u, 3389003793u,
  8803. 546597541u, 352770237u,
  8804. 1383747654u, 3122687303u,
  8805. 1646071378u, 1164309901u,
  8806. 290870767u, 830691298u,
  8807. 929335420u, 3193251135u,
  8808. 989577914u, 3626554867u,
  8809. 591974737u, 3996958215u,
  8810. 3163711272u, 3071568023u,
  8811. 1516846461u, 3656006011u,
  8812. 2698625268u, 2510865430u,
  8813. 340274176u, 1167681812u,
  8814. 3698796465u, 3155218919u,
  8815. 4102288238u, 1673474350u,
  8816. 3069708839u, 2704165015u,
  8817. 1237411891u, 1854985978u,
  8818. 3646837503u, 3625406022u,
  8819. 921552000u, 1712976649u,
  8820. 3939149151u, 878608872u,
  8821. 3406359248u, 1068844551u,
  8822. 1834682077u, 4155949943u,
  8823. 2437686324u, 3163786257u,
  8824. 2645117577u, 1988168803u,
  8825. 747285578u, 1626463554u,
  8826. 1235300371u, 1256485167u,
  8827. 1914142538u, 4141546431u,
  8828. 3838102563u, 582664250u,
  8829. 1883344352u, 2083771672u,
  8830. 2611657933u, 2139079047u,
  8831. 2250573853u, 804336148u,
  8832. 3066325351u, 2770847216u,
  8833. 4275641370u, 1455750577u,
  8834. 3346357270u, 1674051445u,
  8835. 601221482u, 3992583643u,
  8836. 1402445097u, 3622527604u,
  8837. 2509017299u, 2966108111u,
  8838. 2557027816u, 900741486u,
  8839. 1790771021u, 2912643797u,
  8840. 2631381069u, 4014551783u,
  8841. 90375300u, 300318232u,
  8842. 3269968032u, 2679371729u,
  8843. 2664752123u, 3517585534u,
  8844. 3253901179u, 542270815u,
  8845. 1188641600u, 365479232u,
  8846. 2210121140u, 760762191u,
  8847. 1273768482u, 1216399252u,
  8848. 3484324231u, 4287337666u,
  8849. 16322182u, 643179562u,
  8850. 325675502u, 3652676161u,
  8851. 3120716054u, 3330259752u,
  8852. 1011990087u, 2990167340u,
  8853. 1097584090u, 3262252593u,
  8854. 1829409951u, 3665087267u,
  8855. 1214854475u, 2134299399u,
  8856. 3704419305u, 411263051u,
  8857. 1625446136u, 549838529u,
  8858. 4283196353u, 1342880802u,
  8859. 3460621305u, 1967599860u,
  8860. 4282843369u, 1275671016u,
  8861. 2544665755u, 853593042u,
  8862. 901109753u, 2682611693u,
  8863. 110631633u, 797487791u,
  8864. 1472073141u, 850464484u,
  8865. 797089608u, 3286110054u,
  8866. 350397471u, 2775631060u,
  8867. 366448238u, 3842907484u,
  8868. 2219863904u, 3623364733u,
  8869. 1850985302u, 4009616991u,
  8870. 294963924u, 3693536939u,
  8871. 3061255808u, 1615375832u,
  8872. 1920066675u, 4113028420u,
  8873. 4032223840u, 2318423400u,
  8874. 2701956286u, 4145497671u,
  8875. 3991532344u, 2536338351u,
  8876. 1679099863u, 1728968857u,
  8877. 449740816u, 2686506989u,
  8878. 685242457u, 97590863u,
  8879. 3258354115u, 1502282913u,
  8880. 1235084019u, 2151665147u,
  8881. 528459289u, 231097464u,
  8882. 2477280726u, 3651607391u,
  8883. 2091754612u, 1178454681u,
  8884. 980597335u, 1604483865u,
  8885. 1842333726u, 4146839064u,
  8886. 3213794286u, 2601416506u,
  8887. 754220096u, 3571436033u,
  8888. 488595746u, 1448097974u,
  8889. 4004834921u, 238887261u,
  8890. 3320337489u, 1416989070u,
  8891. 2928916831u, 4093725287u,
  8892. 186020771u, 2367569534u,
  8893. 3046087671u, 4090084518u,
  8894. 3548184546u, 679517009u,
  8895. 1962659444u, 3539886328u,
  8896. 4192003933u, 1678423485u,
  8897. 3827951761u, 3086277222u,
  8898. 2144472852u, 1390394371u,
  8899. 2976322029u, 1574517163u,
  8900. 3553313841u, 119173722u,
  8901. 1702434637u, 1766260771u,
  8902. 3629581771u, 1407497759u,
  8903. 895654784u, 751439914u,
  8904. 4008409498u, 215917713u,
  8905. 1482103833u, 695551833u,
  8906. 1288382231u, 2656990891u,
  8907. 2581779077u, 1570750352u,
  8908. 3710689053u, 1741390464u,
  8909. 2666411616u, 3533987737u,
  8910. 4289478316u, 3576119563u,
  8911. 4118694920u, 108199666u,
  8912. 3869794273u, 963183826u,
  8913. 2081410737u, 3796810515u,
  8914. 791123882u, 2525792704u,
  8915. 1036883117u, 136547246u,
  8916. 875691100u, 2592925324u,
  8917. 614302599u, 3013176417u,
  8918. 2689342539u, 427154472u,
  8919. 532957601u, 1228758574u,
  8920. 1898117151u, 1181643858u,
  8921. 1908591042u, 1464255968u,
  8922. 446980910u, 2984611177u,
  8923. 58509511u, 1046943619u,
  8924. 3508927906u, 2001585786u,
  8925. 2544767379u, 1525438381u,
  8926. 552181222u, 1959725830u,
  8927. 879448844u, 1348536411u,
  8928. 4242243590u, 2861338018u,
  8929. 1082052441u, 1034351453u,
  8930. 601175800u, 764077711u,
  8931. 530635011u, 3785343245u,
  8932. 2178026726u, 117256687u,
  8933. 2378297261u, 457568934u,
  8934. 76438221u, 4104954272u,
  8935. 956793873u, 3783168634u,
  8936. 2485968477u, 2381948487u,
  8937. 4226929450u, 3148473363u,
  8938. 2518273601u, 3569490233u,
  8939. 879369091u, 2180270337u,
  8940. 3674375989u, 1387729170u,
  8941. 977997984u, 4270646856u,
  8942. 568650985u, 951677556u,
  8943. 4213877384u, 2721005055u,
  8944. 1073364549u, 2563403831u,
  8945. 1678669911u, 66786703u,
  8946. 2273631661u, 1149351924u,
  8947. 3651298990u, 1581883443u,
  8948. 246723096u, 1895026827u,
  8949. 3810605772u, 3711056516u,
  8950. 4058833288u, 2193790614u,
  8951. 2080120290u, 3638638708u,
  8952. 2915672708u, 2263003308u,
  8953. 2361934197u, 4136767460u,
  8954. 1976115991u, 3448840877u,
  8955. 2019238520u, 225333538u,
  8956. 874340815u, 2976159827u,
  8957. 1555273378u, 3797521928u,
  8958. 1942347150u, 3262952567u,
  8959. 435997738u, 340403353u,
  8960. 2817830907u, 2078619498u,
  8961. 749534111u, 1178073973u,
  8962. 894654712u, 3361226032u,
  8963. 841092198u, 3288261538u,
  8964. 1696412169u, 1496966875u,
  8965. 697501571u, 1059158875u,
  8966. 3739946319u, 2481012988u,
  8967. 568983526u, 114945840u,
  8968. 1559249010u, 2218244008u,
  8969. 2841706923u, 1632780103u,
  8970. 4020169654u, 2087949619u,
  8971. 2438736103u, 24032648u,
  8972. 833416317u, 3787017905u,
  8973. 2373238993u, 2575395164u,
  8974. 3434544481u, 3228481067u,
  8975. 2542976862u, 2971726178u,
  8976. 2880371864u, 3642087909u,
  8977. 2407477975u, 2239080836u,
  8978. 1043714217u, 3894199764u,
  8979. 2235879182u, 203853421u,
  8980. 2933669448u, 2504940536u,
  8981. 834683330u, 425935223u,
  8982. 3560796393u, 3565833278u,
  8983. 1668000829u, 3683399154u,
  8984. 3414330886u, 1748785729u,
  8985. 1023171602u, 580966986u,
  8986. 2531038985u, 3227325488u,
  8987. 2657385925u, 2124704694u,
  8988. 233442446u, 1107045577u,
  8989. 3407293834u, 552770757u,
  8990. 3899097693u, 1067532701u,
  8991. 115667924u, 1406028344u,
  8992. 1707768231u, 3724015962u,
  8993. 2419657149u, 18613994u,
  8994. 2532882091u, 3476683808u,
  8995. 1560838678u, 811220224u,
  8996. 895961699u, 3762914298u,
  8997. 1328752423u, 1844996900u,
  8998. 1420427894u, 1848067707u,
  8999. 1210281744u, 904215228u,
  9000. 4055325594u, 1118521573u,
  9001. 2496554183u, 2579259919u,
  9002. 3996647489u, 3657647605u,
  9003. 325254059u, 3136157065u,
  9004. 3951522674u, 4052925250u,
  9005. 3341068436u, 2287683323u,
  9006. 1313073005u, 126005630u,
  9007. 2505120084u, 1194725057u,
  9008. 853746559u, 3555092974u,
  9009. 2689238752u, 49515858u,
  9010. 1244776042u, 1069300695u,
  9011. 61073168u, 1010661841u,
  9012. 1269521335u, 1902040126u,
  9013. 990632502u, 2378708922u,
  9014. 3858321250u, 1400735275u,
  9015. 2974699176u, 2771676666u,
  9016. 170995186u, 2877798589u,
  9017. 545726212u, 2225229957u,
  9018. 1086473152u, 3454177594u,
  9019. 3859483262u, 1499729584u,
  9020. 2088002891u, 2883475137u,
  9021. 3222194252u, 4144472319u,
  9022. 2212229854u, 4146740722u,
  9023. 567988835u, 1051332394u,
  9024. 3932046135u, 542648229u,
  9025. 3017852446u, 1277887997u,
  9026. 162888005u, 1669710469u,
  9027. 1492500905u, 553041029u,
  9028. 1434876932u, 533989516u,
  9029. 3817492747u, 584127807u,
  9030. 4147115982u, 2993670925u,
  9031. 4020312558u, 710021255u,
  9032. 3509733475u, 3587959456u,
  9033. 2088550465u, 1745399498u,
  9034. 2952242967u, 1259815443u,
  9035. 869648362u, 1404723176u,
  9036. 3947542735u, 1334333531u,
  9037. 3873471582u, 229399758u,
  9038. 59634866u, 3239516985u,
  9039. 3844250972u, 1275954779u,
  9040. 492891666u, 1029533080u,
  9041. 1552951157u, 367320647u,
  9042. 699480890u, 3684418197u,
  9043. 3707014310u, 471105777u,
  9044. 1824587258u, 4030809053u,
  9045. 3489914436u, 484559105u,
  9046. 1235750398u, 1428453396u,
  9047. 4230459084u, 4255931645u,
  9048. 1848597055u, 4271715616u,
  9049. 331780381u, 482425775u,
  9050. 2435323270u, 3171911678u,
  9051. 3507210587u, 928543347u,
  9052. 4197807526u, 3680046204u,
  9053. 2766042024u, 2159512867u,
  9054. 179373257u, 313902234u,
  9055. 4024837592u, 294795361u,
  9056. 1622282562u, 647086234u,
  9057. 2825039429u, 577214736u,
  9058. 4043412446u, 2426981244u,
  9059. 1277736097u, 1130129573u,
  9060. 2601395338u, 995791646u,
  9061. 36668922u, 3344746679u,
  9062. 1521532225u, 1645086060u,
  9063. 2622763015u, 4122335794u,
  9064. 2936887705u, 494465807u,
  9065. 2580840343u, 1064648931u,
  9066. 1247887787u, 2752145076u,
  9067. 1277612417u, 1249660507u,
  9068. 2288678613u, 3312498873u,
  9069. 2459273912u, 4238535494u,
  9070. 3117488020u, 2571979978u,
  9071. 2680188909u, 1471227427u,
  9072. 1616494033u, 633688562u,
  9073. 2268653416u, 3268237290u,
  9074. 3021962815u, 1959779970u,
  9075. 3321382074u, 766642813u,
  9076. 204429780u, 1323319858u,
  9077. 3676032891u, 1380896111u,
  9078. 4030639049u, 3647601207u,
  9079. 1830028502u, 2830263774u,
  9080. 1375962216u, 1733961041u,
  9081. 939765180u, 521947915u,
  9082. 3903267364u, 497472767u,
  9083. 1619700946u, 189164145u,
  9084. 3115593885u, 486382294u,
  9085. 1262445920u, 4062496162u,
  9086. 2464795849u, 3770038872u,
  9087. 4032121374u, 3235740744u,
  9088. 3757765258u, 1777199847u,
  9089. 2167243108u, 1912506671u,
  9090. 4180515317u, 2276864677u,
  9091. 536034089u, 2384915026u,
  9092. 162938278u, 1588060152u,
  9093. 4018349945u, 2504457929u,
  9094. 841450426u, 2790120722u,
  9095. 2719983588u, 1471020554u,
  9096. 1390856732u, 3623212998u,
  9097. 2506944218u, 1035080801u,
  9098. 348812127u, 3026631806u,
  9099. 746483541u, 2342164722u,
  9100. 122104390u, 4074122771u,
  9101. 3986865419u, 1674890530u,
  9102. 3693306023u, 3011542850u,
  9103. 1294951725u, 899303190u,
  9104. 3577146915u, 3549160092u,
  9105. 1241677652u, 4290680005u,
  9106. 3193053279u, 2029187390u,
  9107. 3298063095u, 3943068002u,
  9108. 3946220635u, 2273781461u,
  9109. 889053698u, 1376304022u,
  9110. 1486839612u, 2127663659u,
  9111. 344127443u, 1646681121u,
  9112. 2780117810u, 2142045764u,
  9113. 2694572773u, 447810651u,
  9114. 2185527146u, 2366308558u,
  9115. 290335413u, 584901173u,
  9116. 2012370276u, 970504950u,
  9117. 3258236042u, 2008155560u,
  9118. 3945579565u, 614796295u,
  9119. 24452072u, 2695940969u,
  9120. 3983727134u, 3444688454u,
  9121. 1327044473u, 3545633451u,
  9122. 1875293322u, 1739318893u,
  9123. 1707527799u, 2683090634u,
  9124. 2848082386u, 2814622471u,
  9125. 4111401777u, 2774816580u,
  9126. 3849839194u, 437560100u,
  9127. 2238350150u, 2462124836u,
  9128. 665017710u, 512012738u,
  9129. 2945294779u, 3305170944u,
  9130. 819477765u, 59419271u,
  9131. 155125658u, 665292744u,
  9132. 444722813u, 3580039116u,
  9133. 2355675635u, 663735032u,
  9134. 3247800169u, 1579404983u,
  9135. 1985115003u, 3397891494u,
  9136. 358696453u, 1474896279u,
  9137. 516388613u, 710590371u,
  9138. 3490497111u, 2514565805u,
  9139. 2386143445u, 477509654u,
  9140. 412854590u, 3624609754u,
  9141. 3214388668u, 3516075816u,
  9142. 2731288520u, 1369482895u,
  9143. 4033204378u, 1314000850u,
  9144. 829769325u, 1935166880u,
  9145. 1608191643u, 2607067237u,
  9146. 423820371u, 3257747610u,
  9147. 1355298041u, 3776931214u,
  9148. 4105054901u, 2107080812u,
  9149. 1911521879u, 3183054185u,
  9150. 3910177801u, 675129307u,
  9151. 1209358971u, 4205727791u,
  9152. 1435726287u, 3333261712u,
  9153. 1400982708u, 1154611403u,
  9154. 1663501483u, 2837596667u,
  9155. 3164734053u, 2759854023u,
  9156. 4012043629u, 1963228038u,
  9157. 3981675284u, 2677557877u,
  9158. 520119591u, 505138315u,
  9159. 897271356u, 1803966773u,
  9160. 1016663294u, 616691903u,
  9161. 2254742522u, 4032705384u,
  9162. 2468470796u, 798395739u,
  9163. 3025169002u, 3570037122u,
  9164. 1461093710u, 3473799845u,
  9165. 3702624858u, 476400898u,
  9166. 1043039728u, 2304070437u,
  9167. 181576948u, 602972493u,
  9168. 3996616030u, 3289878097u,
  9169. 2068516226u, 3922247304u,
  9170. 1299968266u, 2520311409u,
  9171. 1968824721u, 3214794876u,
  9172. 1581813122u, 2668800905u,
  9173. 3297613974u, 748160407u,
  9174. 1145536484u, 1326769504u,
  9175. 2973323521u, 3775262814u,
  9176. 3218653169u, 902775872u,
  9177. 3498603433u, 1372805534u,
  9178. 704686363u, 3626542352u,
  9179. 2271580579u, 1213925114u,
  9180. 46329775u, 3009384989u,
  9181. 1330254048u, 1194824134u,
  9182. 514204310u, 3781981134u,
  9183. 442526164u, 2835608783u,
  9184. 3460471867u, 510634034u,
  9185. 546406434u, 2716786748u,
  9186. 2840500021u, 1669490957u,
  9187. 2536189149u, 3251421224u,
  9188. 1358736072u, 1089334066u,
  9189. 3260749330u, 250756920u,
  9190. 2974806681u, 1513718866u,
  9191. 82635635u, 4041016629u,
  9192. 3391765744u, 2495807367u,
  9193. 3962674316u, 2822889695u,
  9194. 753413337u, 2008251381u,
  9195. 3123390177u, 106212622u,
  9196. 490570565u, 1684884205u,
  9197. 793892547u, 1927268995u,
  9198. 2344148164u, 2251978818u,
  9199. 437424236u, 2774023200u,
  9200. 2674940754u, 3788056262u,
  9201. 2597882666u, 3678660147u,
  9202. 3797434193u, 3838215866u,
  9203. 279687080u, 2656772270u,
  9204. 2190204787u, 1997584981u,
  9205. 3384401882u, 3160208845u,
  9206. 3629379425u, 2668998785u,
  9207. 1050036757u, 2954162084u,
  9208. 917091826u, 1744374041u,
  9209. 1454282570u, 845687881u,
  9210. 2997173625u, 776018378u,
  9211. 1137560602u, 1938378389u,
  9212. 1748082354u, 2066910012u,
  9213. 2677675207u, 918315064u,
  9214. };
  9215. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  9216. bool Test(int offset, int len = 0) {
  9217. #undef Check
  9218. #undef IsAlive
  9219. #define Check(x) do { \
  9220. const uint32_t actual = (x), e = expected[index++]; \
  9221. bool ok = actual == e; \
  9222. if (!ok) { \
  9223. cerr << "expected " << hex << e << " but got " << actual << endl; \
  9224. ++errors; \
  9225. } \
  9226. assert(ok); \
  9227. } while (0)
  9228. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  9229. // After the following line is where the uses of "Check" and such will go.
  9230. static int index = 0;
  9231. if (offset == -1) { int alive = 0; { uint64_t h = farmhashte::Hash64WithSeeds(data, len++, SEED0, SEED1); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashte::Hash64WithSeed(data, len++, SEED); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashte::Hash64(data, len++); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } len -= 3; return alive > 0; }
  9232. { uint64_t h = farmhashte::Hash64WithSeeds(data + offset, len, SEED0, SEED1); Check(h >> 32); Check((h << 32) >> 32); }
  9233. { uint64_t h = farmhashte::Hash64WithSeed(data + offset, len, SEED); Check(h >> 32); Check((h << 32) >> 32); }
  9234. { uint64_t h = farmhashte::Hash64(data + offset, len); Check(h >> 32); Check((h << 32) >> 32); }
  9235. return true;
  9236. #undef Check
  9237. #undef IsAlive
  9238. }
  9239. int RunTest() {
  9240. Setup();
  9241. int i = 0;
  9242. cout << "Running farmhashteTest";
  9243. if (!Test(-1)) {
  9244. cout << "... Unavailable\n";
  9245. return NoteErrors();
  9246. }
  9247. // Good. The function is attempting to hash, so run the full test.
  9248. int errors_prior_to_test = errors;
  9249. for ( ; i < kTestSize - 1; i++) {
  9250. Test(i * i, i);
  9251. }
  9252. for ( ; i < kDataSize; i += i / 7) {
  9253. Test(0, i);
  9254. }
  9255. Test(0, kDataSize);
  9256. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  9257. return NoteErrors();
  9258. }
  9259. #else
  9260. // After the following line is where the code to print hash codes will go.
  9261. void Dump(int offset, int len) {
  9262. { uint64_t h = farmhashte::Hash64WithSeeds(data + offset, len, SEED0, SEED1); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  9263. { uint64_t h = farmhashte::Hash64WithSeed(data + offset, len, SEED); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  9264. { uint64_t h = farmhashte::Hash64(data + offset, len); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  9265. }
  9266. #endif
  9267. #undef SEED
  9268. #undef SEED1
  9269. #undef SEED0
  9270. } // namespace farmhashteTest
  9271. #if TESTING
  9272. static int farmhashteTestResult = farmhashteTest::RunTest();
  9273. #else
  9274. int main(int argc, char** argv) {
  9275. Setup();
  9276. cout << "uint32_t expected[] = {\n";
  9277. int i = 0;
  9278. for ( ; i < kTestSize - 1; i++) {
  9279. farmhashteTest::Dump(i * i, i);
  9280. }
  9281. for ( ; i < kDataSize; i += i / 7) {
  9282. farmhashteTest::Dump(0, i);
  9283. }
  9284. farmhashteTest::Dump(0, kDataSize);
  9285. cout << "};\n";
  9286. }
  9287. #endif
  9288. #ifndef FARMHASH_SELF_TEST_GUARD
  9289. #define FARMHASH_SELF_TEST_GUARD
  9290. #include <cstdio>
  9291. #include <iostream>
  9292. #include <string.h>
  9293. using std::cout;
  9294. using std::cerr;
  9295. using std::endl;
  9296. using std::hex;
  9297. static const uint64_t kSeed0 = 1234567;
  9298. static const uint64_t kSeed1 = k0;
  9299. static const int kDataSize = 1 << 20;
  9300. static const int kTestSize = 300;
  9301. #define kSeed128 Uint128(kSeed0, kSeed1)
  9302. static char data[kDataSize];
  9303. static int completed_self_tests = 0;
  9304. static int errors = 0;
  9305. // Initialize data to pseudorandom values.
  9306. void Setup() {
  9307. if (completed_self_tests == 0) {
  9308. uint64_t a = 9;
  9309. uint64_t b = 777;
  9310. for (int i = 0; i < kDataSize; i++) {
  9311. a += b;
  9312. b += a;
  9313. a = (a ^ (a >> 41)) * k0;
  9314. b = (b ^ (b >> 41)) * k0 + i;
  9315. uint8_t u = b >> 37;
  9316. memcpy(data + i, &u, 1); // uint8_t -> char
  9317. }
  9318. }
  9319. }
  9320. int NoteErrors() {
  9321. #define NUM_SELF_TESTS 9
  9322. if (++completed_self_tests == NUM_SELF_TESTS)
  9323. std::exit(errors > 0);
  9324. return errors;
  9325. }
  9326. template <typename T> inline bool IsNonZero(T x) {
  9327. return x != 0;
  9328. }
  9329. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  9330. return x != Uint128(0, 0);
  9331. }
  9332. #endif // FARMHASH_SELF_TEST_GUARD
  9333. namespace farmhashuoTest {
  9334. uint32_t CreateSeed(int offset, int salt) {
  9335. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  9336. h = h * c1;
  9337. h ^= (h >> 17);
  9338. h = h * c1;
  9339. h ^= (h >> 17);
  9340. h = h * c1;
  9341. h ^= (h >> 17);
  9342. h += static_cast<uint32_t>(offset & 0xffffffff);
  9343. h = h * c1;
  9344. h ^= (h >> 17);
  9345. h = h * c1;
  9346. h ^= (h >> 17);
  9347. h = h * c1;
  9348. h ^= (h >> 17);
  9349. return h;
  9350. }
  9351. #undef SEED
  9352. #undef SEED1
  9353. #undef SEED0
  9354. #define SEED CreateSeed(offset, -1)
  9355. #define SEED0 CreateSeed(offset, 0)
  9356. #define SEED1 CreateSeed(offset, 1)
  9357. #undef TESTING
  9358. #define TESTING 1
  9359. #if TESTING
  9360. uint32_t expected[] = {
  9361. 3277735313u, 2681724312u,
  9362. 2598464059u, 797982799u,
  9363. 2603993599u, 921001710u,
  9364. 1410420968u, 2134990486u,
  9365. 2914424215u, 2244477846u,
  9366. 255297188u, 2992121793u,
  9367. 161451183u, 3943596029u,
  9368. 4019337850u, 452431531u,
  9369. 3379021470u, 2557197665u,
  9370. 299850021u, 2532580744u,
  9371. 1298374911u, 3099673830u,
  9372. 2199864459u, 3696623795u,
  9373. 4055299123u, 3281581178u,
  9374. 1053458494u, 1882212500u,
  9375. 3456121707u, 275903667u,
  9376. 458884671u, 3033004529u,
  9377. 1898235244u, 1402319660u,
  9378. 2700149065u, 2699376854u,
  9379. 2433714046u, 4222949502u,
  9380. 4220361840u, 1712034059u,
  9381. 4148372108u, 1330324210u,
  9382. 594028478u, 2921867846u,
  9383. 780716741u, 1728752234u,
  9384. 3280331829u, 326029180u,
  9385. 393215742u, 3349570000u,
  9386. 3824583307u, 1612122221u,
  9387. 1379537552u, 1646032583u,
  9388. 2233466664u, 1432476832u,
  9389. 2052294713u, 3552092450u,
  9390. 1628777059u, 1499109081u,
  9391. 2960536756u, 1554038301u,
  9392. 1145519619u, 3190844552u,
  9393. 237495366u, 540224401u,
  9394. 65721842u, 489963606u,
  9395. 1596489240u, 1562872448u,
  9396. 1790705123u, 2128624475u,
  9397. 1435705557u, 1262831810u,
  9398. 155445229u, 1672724608u,
  9399. 663607706u, 2077310004u,
  9400. 3610042449u, 1911523866u,
  9401. 2563776023u, 294527927u,
  9402. 1099072299u, 1389770549u,
  9403. 2952353448u, 2026137563u,
  9404. 3603803785u, 629449419u,
  9405. 226132789u, 2489287368u,
  9406. 1552847036u, 645684964u,
  9407. 187883449u, 230403464u,
  9408. 3151491850u, 3272648435u,
  9409. 2002861219u, 165370827u,
  9410. 916494250u, 1230085527u,
  9411. 3807265751u, 3628174014u,
  9412. 231181488u, 851743255u,
  9413. 2988893883u, 1554380634u,
  9414. 1142264800u, 3667013118u,
  9415. 2638023604u, 2290487377u,
  9416. 732137533u, 1909203251u,
  9417. 1380301172u, 1498556724u,
  9418. 4072067757u, 4165088768u,
  9419. 3931792696u, 197618179u,
  9420. 956300927u, 914413116u,
  9421. 2148126371u, 1913303225u,
  9422. 3074915312u, 3117299654u,
  9423. 3178848746u, 1357272220u,
  9424. 1438494951u, 507436733u,
  9425. 3854939912u, 1413396341u,
  9426. 126024219u, 146044391u,
  9427. 3254014218u, 429095991u,
  9428. 165589978u, 1578546616u,
  9429. 623071693u, 366414107u,
  9430. 249776086u, 1207522198u,
  9431. 3120876698u, 1684583131u,
  9432. 46987739u, 1157614300u,
  9433. 199124911u, 520792961u,
  9434. 3614377032u, 586863115u,
  9435. 1716848157u, 4033596884u,
  9436. 1164298657u, 4140791139u,
  9437. 3824360466u, 3242407770u,
  9438. 3725511003u, 232064808u,
  9439. 2736953692u, 816692935u,
  9440. 512845449u, 3748861010u,
  9441. 4290630595u, 517646945u,
  9442. 22638523u, 648000590u,
  9443. 1283799121u, 3047062993u,
  9444. 1024246061u, 4027776454u,
  9445. 834785312u, 382936554u,
  9446. 411505255u, 1973395102u,
  9447. 580988377u, 2826990641u,
  9448. 3474970689u, 1029055034u,
  9449. 2584372201u, 1758123094u,
  9450. 589567754u, 325737734u,
  9451. 3886113119u, 3338548567u,
  9452. 257578986u, 3698087965u,
  9453. 3604937815u, 3198590202u,
  9454. 2305332220u, 191910725u,
  9455. 4244322689u, 542201663u,
  9456. 3315355162u, 2135941665u,
  9457. 1175961330u, 3948351189u,
  9458. 23075771u, 3252374102u,
  9459. 713127376u, 1467786451u,
  9460. 663013031u, 3444053918u,
  9461. 3077742128u, 1062268187u,
  9462. 2115441882u, 4081398201u,
  9463. 2335576331u, 2560479831u,
  9464. 1379288194u, 4225182569u,
  9465. 3958366652u, 3067277639u,
  9466. 3667516477u, 1709989541u,
  9467. 4188504038u, 59581167u,
  9468. 2725013602u, 3639843023u,
  9469. 3758739543u, 4189944477u,
  9470. 2470483982u, 877580602u,
  9471. 3252925478u, 2062343506u,
  9472. 3981838403u, 3762572073u,
  9473. 2931588131u, 3284356565u,
  9474. 1129162571u, 732225574u,
  9475. 1677744031u, 3532596884u,
  9476. 3232041815u, 1652884780u,
  9477. 3740979556u, 259034107u,
  9478. 2227121257u, 1426140634u,
  9479. 315836068u, 3200749877u,
  9480. 1386256573u, 24035717u,
  9481. 234531934u, 1115203611u,
  9482. 1598686658u, 3146815575u,
  9483. 2632963283u, 1778459926u,
  9484. 739944537u, 579625482u,
  9485. 1231665285u, 2457048126u,
  9486. 3903349120u, 389846205u,
  9487. 1052645068u, 862072556u,
  9488. 2834153464u, 1481069623u,
  9489. 1688445808u, 701920051u,
  9490. 3740748788u, 3388062747u,
  9491. 1192588249u, 1410111809u,
  9492. 2633463887u, 4050419847u,
  9493. 2513844237u, 2187968410u,
  9494. 2951683019u, 3015806005u,
  9495. 3000537321u, 479241367u,
  9496. 252167538u, 1231057113u,
  9497. 393624922u, 704325635u,
  9498. 1467197045u, 2066433573u,
  9499. 3082385053u, 735688735u,
  9500. 956434529u, 4028590195u,
  9501. 4074716319u, 813690332u,
  9502. 2124740535u, 804073145u,
  9503. 3748881891u, 3195309868u,
  9504. 841856605u, 2585865274u,
  9505. 881504822u, 3254795114u,
  9506. 1241815736u, 970796142u,
  9507. 497175391u, 3929484338u,
  9508. 4264993211u, 1835322201u,
  9509. 3675707838u, 4205965408u,
  9510. 300298607u, 3858319990u,
  9511. 3255259608u, 4247675634u,
  9512. 1095823272u, 1197245408u,
  9513. 1742785722u, 785893184u,
  9514. 1702965674u, 850401405u,
  9515. 4084891412u, 1160134629u,
  9516. 2555998391u, 1972759056u,
  9517. 710625654u, 4116162021u,
  9518. 3352753742u, 85121177u,
  9519. 3513255468u, 2487440590u,
  9520. 2480032715u, 2287747045u,
  9521. 4090178629u, 4044418876u,
  9522. 1703944517u, 486290428u,
  9523. 1515601363u, 2011102035u,
  9524. 573985957u, 3536053779u,
  9525. 4257172787u, 576405853u,
  9526. 1523550693u, 1014952061u,
  9527. 711098718u, 2425317635u,
  9528. 3460807169u, 3688987163u,
  9529. 3167371443u, 3062418115u,
  9530. 3330028292u, 1713171303u,
  9531. 526177822u, 2602636307u,
  9532. 1245357025u, 3346699703u,
  9533. 254529415u, 4017058800u,
  9534. 1829738451u, 2164236533u,
  9535. 1381258384u, 4036354071u,
  9536. 1749181924u, 4118435443u,
  9537. 4130543625u, 688472265u,
  9538. 2731071299u, 2547657502u,
  9539. 4175776103u, 338058159u,
  9540. 3729582129u, 4181845558u,
  9541. 2227290760u, 146827036u,
  9542. 2459178427u, 1025353883u,
  9543. 4284109679u, 2502815838u,
  9544. 825124804u, 2533140036u,
  9545. 616327404u, 2448966429u,
  9546. 413992636u, 2334782461u,
  9547. 2239052397u, 1082330589u,
  9548. 3381164715u, 199381437u,
  9549. 2583939798u, 2848283092u,
  9550. 2300168091u, 2156336315u,
  9551. 1855234968u, 1982110346u,
  9552. 2482046810u, 3158163887u,
  9553. 2168864636u, 133643215u,
  9554. 3904021624u, 3646514568u,
  9555. 1176127003u, 4015671361u,
  9556. 100525019u, 3534706803u,
  9557. 2045051700u, 3452457457u,
  9558. 1492267772u, 2308393828u,
  9559. 3776661467u, 3281002516u,
  9560. 4246334524u, 743955039u,
  9561. 685631442u, 1147951686u,
  9562. 2040912376u, 2911148054u,
  9563. 3204999386u, 2415262714u,
  9564. 313209105u, 777065474u,
  9565. 2729416454u, 1029284767u,
  9566. 1632078298u, 1817552554u,
  9567. 3963877000u, 1919171906u,
  9568. 3843219958u, 3073580867u,
  9569. 865146997u, 2473524405u,
  9570. 2593817617u, 3643076308u,
  9571. 617975720u, 3671562289u,
  9572. 121812599u, 2902367378u,
  9573. 2260041112u, 1019936943u,
  9574. 320945955u, 2337845588u,
  9575. 1535670711u, 773792826u,
  9576. 3152195900u, 4090794518u,
  9577. 4142587430u, 484732447u,
  9578. 419191319u, 3377973345u,
  9579. 324924679u, 2809286837u,
  9580. 1562277603u, 1378362199u,
  9581. 3791551981u, 1097806406u,
  9582. 1386297408u, 2304900033u,
  9583. 3574135531u, 4017075736u,
  9584. 1161238398u, 1358056883u,
  9585. 3487080616u, 1516736273u,
  9586. 851615042u, 2927899494u,
  9587. 4077452507u, 2984955003u,
  9588. 3907754394u, 3578173844u,
  9589. 1948409509u, 1923531348u,
  9590. 3578472493u, 3710074193u,
  9591. 213811117u, 2586632018u,
  9592. 1922589216u, 274958014u,
  9593. 1654276320u, 2687561076u,
  9594. 2569061755u, 3122046057u,
  9595. 3203802620u, 1692079268u,
  9596. 477806878u, 140587742u,
  9597. 520565830u, 3674576684u,
  9598. 91246882u, 1010215946u,
  9599. 3703994407u, 69201295u,
  9600. 776213083u, 3677771507u,
  9601. 3696902571u, 3593730713u,
  9602. 2907901228u, 3239753796u,
  9603. 1586241476u, 1939595371u,
  9604. 2268396558u, 3468719670u,
  9605. 2955715987u, 2295501078u,
  9606. 2775848696u, 1358532390u,
  9607. 3843660102u, 82177963u,
  9608. 4094477877u, 191727221u,
  9609. 278661677u, 2889101923u,
  9610. 1352525614u, 2844977667u,
  9611. 1261140657u, 1747052377u,
  9612. 2334120653u, 645125282u,
  9613. 2707230761u, 4142246789u,
  9614. 1068639717u, 2288162940u,
  9615. 1419293714u, 1636932722u,
  9616. 3252686293u, 318543902u,
  9617. 2598802768u, 2025886508u,
  9618. 2250788464u, 2711763065u,
  9619. 255108733u, 1845587644u,
  9620. 3719270134u, 3940707863u,
  9621. 917608574u, 1363253259u,
  9622. 788659330u, 673256220u,
  9623. 109793386u, 341851980u,
  9624. 2698465479u, 3011229884u,
  9625. 3886713057u, 1276595523u,
  9626. 2439962760u, 2700515456u,
  9627. 205970448u, 4198897105u,
  9628. 875511891u, 371715572u,
  9629. 1033680610u, 4278599955u,
  9630. 3120038721u, 1256300069u,
  9631. 225629455u, 3735275001u,
  9632. 3961944123u, 1769389163u,
  9633. 1074553219u, 668829411u,
  9634. 1098679359u, 2573697509u,
  9635. 1885071395u, 4233785523u,
  9636. 2513878053u, 2030193788u,
  9637. 360256231u, 107312677u,
  9638. 310517502u, 2618936366u,
  9639. 3600462351u, 1216645846u,
  9640. 2970730323u, 4278812598u,
  9641. 94638678u, 1689811113u,
  9642. 4125738800u, 3103759730u,
  9643. 103797041u, 1397772514u,
  9644. 1669653333u, 572567964u,
  9645. 1612872497u, 2986430557u,
  9646. 214990655u, 3117607990u,
  9647. 1949717207u, 2260498180u,
  9648. 1493936866u, 3554860960u,
  9649. 1582022990u, 1263709570u,
  9650. 1244120487u, 3416600761u,
  9651. 224580012u, 4252610345u,
  9652. 286306391u, 814956796u,
  9653. 1820532305u, 2776960536u,
  9654. 3082703465u, 1659265982u,
  9655. 1157398049u, 3752806924u,
  9656. 3508246460u, 2902716664u,
  9657. 2110942730u, 3267551635u,
  9658. 902835431u, 405228165u,
  9659. 2341378668u, 2220373824u,
  9660. 3303626294u, 1175118221u,
  9661. 383517064u, 896322512u,
  9662. 1697257567u, 2202820683u,
  9663. 1837689083u, 1336556841u,
  9664. 914535232u, 3634083711u,
  9665. 1537187340u, 3712582785u,
  9666. 1088201893u, 3270984620u,
  9667. 3093195926u, 2561488770u,
  9668. 1962968100u, 236189500u,
  9669. 2549435227u, 536047554u,
  9670. 422609195u, 2958815818u,
  9671. 4166184983u, 3528794619u,
  9672. 1042329086u, 3914176886u,
  9673. 1359641525u, 1197100813u,
  9674. 1269739674u, 3301844628u,
  9675. 1831223342u, 3329594980u,
  9676. 2433669782u, 494908536u,
  9677. 1441714797u, 1174785921u,
  9678. 1933050423u, 958901065u,
  9679. 868981704u, 2163330264u,
  9680. 3243110680u, 1443133429u,
  9681. 1145009669u, 2520062970u,
  9682. 3851564853u, 2664619323u,
  9683. 2686075657u, 4042710240u,
  9684. 2125408249u, 4165697916u,
  9685. 2328730865u, 3160666939u,
  9686. 588683409u, 2126275847u,
  9687. 829404209u, 1878067032u,
  9688. 2567792910u, 897670516u,
  9689. 934312076u, 2952135524u,
  9690. 504832490u, 3312698056u,
  9691. 4015478120u, 1265237690u,
  9692. 3376133707u, 967674402u,
  9693. 1553513184u, 834830418u,
  9694. 2396504772u, 3278582098u,
  9695. 2950762705u, 4277111759u,
  9696. 4159211303u, 1290097509u,
  9697. 251949572u, 3065234219u,
  9698. 1832020534u, 312136369u,
  9699. 1103404394u, 198182691u,
  9700. 1369599600u, 3906710870u,
  9701. 2954651680u, 1535115487u,
  9702. 2389327507u, 1813520230u,
  9703. 632704095u, 140762681u,
  9704. 3123202913u, 3336005523u,
  9705. 1287729497u, 2198985327u,
  9706. 2470730783u, 3821758006u,
  9707. 1009870118u, 559702706u,
  9708. 4274686257u, 3187546567u,
  9709. 2402308151u, 1096697687u,
  9710. 678932329u, 3716363135u,
  9711. 2899950405u, 3046872820u,
  9712. 3754655641u, 2021741414u,
  9713. 1993425202u, 2185339100u,
  9714. 2838253700u, 3099212100u,
  9715. 1679617763u, 3703603898u,
  9716. 1135665833u, 3559875668u,
  9717. 2503579743u, 1446869792u,
  9718. 879818611u, 3788305533u,
  9719. 2879018745u, 2719373510u,
  9720. 3606051203u, 2166567748u,
  9721. 343595772u, 1996164093u,
  9722. 1577656121u, 475248376u,
  9723. 463852893u, 2864244470u,
  9724. 1332049663u, 3326459767u,
  9725. 3207234525u, 2028708916u,
  9726. 938916154u, 3115246264u,
  9727. 3272166407u, 557660441u,
  9728. 1265684026u, 245033807u,
  9729. 2440657523u, 255451671u,
  9730. 3811885130u, 1399880284u,
  9731. 1322855877u, 3452203069u,
  9732. 1324994449u, 3796404024u,
  9733. 2002090272u, 1568745354u,
  9734. 3700047753u, 31799506u,
  9735. 3009412313u, 3184047862u,
  9736. 728680761u, 3848624873u,
  9737. 1849329144u, 3160134214u,
  9738. 1272923193u, 1474278816u,
  9739. 1208883495u, 1566527339u,
  9740. 4136466541u, 630825649u,
  9741. 1717327230u, 1496132623u,
  9742. 2449386742u, 128106940u,
  9743. 2108574735u, 2584236470u,
  9744. 2872246579u, 397338552u,
  9745. 3088905079u, 3456882941u,
  9746. 1715915153u, 2940716269u,
  9747. 4168438718u, 467441309u,
  9748. 872996731u, 3206901319u,
  9749. 1610606159u, 2540270567u,
  9750. 1301658081u, 2379410194u,
  9751. 2109315753u, 3348545480u,
  9752. 2041927873u, 2644077493u,
  9753. 546596661u, 1017047954u,
  9754. 2596792972u, 2783958892u,
  9755. 2826408201u, 3531646869u,
  9756. 2219352672u, 4217451852u,
  9757. 1806867885u, 1903578924u,
  9758. 2076465705u, 2373061493u,
  9759. 1832925325u, 241574049u,
  9760. 1509517110u, 3703614272u,
  9761. 3429894862u, 3529565564u,
  9762. 4010000614u, 2256197939u,
  9763. 517086873u, 2964595704u,
  9764. 3501035294u, 4079457298u,
  9765. 1184683823u, 4260564140u,
  9766. 2339268412u, 3871564102u,
  9767. 1572637805u, 383233885u,
  9768. 3351411126u, 3419328182u,
  9769. 2017406667u, 919677938u,
  9770. 29804156u, 46276077u,
  9771. 3032591014u, 4204155962u,
  9772. 1172319502u, 969309871u,
  9773. 2211319468u, 4153726847u,
  9774. 3094193193u, 4240669441u,
  9775. 3441709766u, 1387233546u,
  9776. 4048882438u, 1217896566u,
  9777. 1580964938u, 740563169u,
  9778. 3691850348u, 3176426539u,
  9779. 2738323042u, 2948665536u,
  9780. 1474029445u, 3513354882u,
  9781. 3219466255u, 3799363969u,
  9782. 3961796122u, 1055550923u,
  9783. 1992212097u, 2263421398u,
  9784. 4289759174u, 2516844140u,
  9785. 1782515131u, 2746577402u,
  9786. 721928440u, 3529570984u,
  9787. 1705302106u, 768287270u,
  9788. 3474902815u, 4000011125u,
  9789. 3475618043u, 212490675u,
  9790. 549130471u, 2970128275u,
  9791. 3170016833u, 2549835613u,
  9792. 3691104824u, 2694324482u,
  9793. 4169365948u, 3738062408u,
  9794. 602930397u, 2148954730u,
  9795. 2636387819u, 2616619070u,
  9796. 301617872u, 374657036u,
  9797. 3862686086u, 431292293u,
  9798. 4225245165u, 1358580562u,
  9799. 2377363130u, 1415970351u,
  9800. 3885060756u, 1438379807u,
  9801. 2297418515u, 2954777083u,
  9802. 3970368221u, 1229801760u,
  9803. 1931934525u, 2287507921u,
  9804. 1713471510u, 2145608111u,
  9805. 2650140034u, 4081586725u,
  9806. 4196863572u, 1896558394u,
  9807. 4059852729u, 1813855658u,
  9808. 2618400836u, 1396056469u,
  9809. 2375584220u, 1037031473u,
  9810. 249284003u, 2450077637u,
  9811. 1383747654u, 3122687303u,
  9812. 2664431743u, 3855028730u,
  9813. 929335420u, 3193251135u,
  9814. 137313762u, 1850894384u,
  9815. 3163711272u, 3071568023u,
  9816. 418541677u, 3621223039u,
  9817. 340274176u, 1167681812u,
  9818. 4106647531u, 4022465625u,
  9819. 3069708839u, 2704165015u,
  9820. 2332023349u, 641449034u,
  9821. 921552000u, 1712976649u,
  9822. 1876484273u, 2343049860u,
  9823. 1834682077u, 4155949943u,
  9824. 2061821157u, 4240649383u,
  9825. 747285578u, 1626463554u,
  9826. 165503115u, 359629739u,
  9827. 3838102563u, 582664250u,
  9828. 3878924635u, 4117237498u,
  9829. 2250573853u, 804336148u,
  9830. 331393443u, 4242530387u,
  9831. 3346357270u, 1674051445u,
  9832. 3348019777u, 1722242971u,
  9833. 2509017299u, 2966108111u,
  9834. 4189102509u, 3323592310u,
  9835. 2631381069u, 4014551783u,
  9836. 4250787412u, 3448394212u,
  9837. 2664752123u, 3517585534u,
  9838. 3605365141u, 1669471183u,
  9839. 2210121140u, 760762191u,
  9840. 249697459u, 3416920106u,
  9841. 16322182u, 643179562u,
  9842. 1564226597u, 2134630675u,
  9843. 1011990087u, 2990167340u,
  9844. 2349550842u, 1642428946u,
  9845. 1214854475u, 2134299399u,
  9846. 2704221532u, 2104175211u,
  9847. 4283196353u, 1342880802u,
  9848. 198529755u, 2004468390u,
  9849. 2544665755u, 853593042u,
  9850. 2090611294u, 2970943872u,
  9851. 1472073141u, 850464484u,
  9852. 1407609278u, 3062461105u,
  9853. 366448238u, 3842907484u,
  9854. 488797416u, 1432670231u,
  9855. 294963924u, 3693536939u,
  9856. 3390549825u, 1583234720u,
  9857. 4032223840u, 2318423400u,
  9858. 2965642867u, 930822729u,
  9859. 1679099863u, 1728968857u,
  9860. 900822335u, 702309817u,
  9861. 3258354115u, 1502282913u,
  9862. 2811888503u, 3924947660u,
  9863. 2477280726u, 3651607391u,
  9864. 3788310204u, 1300369123u,
  9865. 1842333726u, 4146839064u,
  9866. 2468893861u, 4091095953u,
  9867. 488595746u, 1448097974u,
  9868. 1159634090u, 1738834113u,
  9869. 2928916831u, 4093725287u,
  9870. 530850094u, 291657799u,
  9871. 3548184546u, 679517009u,
  9872. 399175380u, 2658337143u,
  9873. 3827951761u, 3086277222u,
  9874. 2067718397u, 3632376023u,
  9875. 3553313841u, 119173722u,
  9876. 1702434637u, 1766260771u,
  9877. 895654784u, 751439914u,
  9878. 4008409498u, 215917713u,
  9879. 1288382231u, 2656990891u,
  9880. 2581779077u, 1570750352u,
  9881. 2666411616u, 3533987737u,
  9882. 4289478316u, 3576119563u,
  9883. 3869794273u, 963183826u,
  9884. 2081410737u, 3796810515u,
  9885. 1036883117u, 136547246u,
  9886. 875691100u, 2592925324u,
  9887. 2689342539u, 427154472u,
  9888. 532957601u, 1228758574u,
  9889. 1908591042u, 1464255968u,
  9890. 446980910u, 2984611177u,
  9891. 3508927906u, 2001585786u,
  9892. 2544767379u, 1525438381u,
  9893. 879448844u, 1348536411u,
  9894. 4242243590u, 2861338018u,
  9895. 601175800u, 764077711u,
  9896. 530635011u, 3785343245u,
  9897. 2378297261u, 457568934u,
  9898. 76438221u, 4104954272u,
  9899. 2485968477u, 2381948487u,
  9900. 4226929450u, 3148473363u,
  9901. 879369091u, 2180270337u,
  9902. 3674375989u, 1387729170u,
  9903. 568650985u, 951677556u,
  9904. 4213877384u, 2721005055u,
  9905. 1678669911u, 66786703u,
  9906. 2273631661u, 1149351924u,
  9907. 246723096u, 1895026827u,
  9908. 3810605772u, 3711056516u,
  9909. 2080120290u, 3638638708u,
  9910. 2915672708u, 2263003308u,
  9911. 1976115991u, 3448840877u,
  9912. 2019238520u, 225333538u,
  9913. 1555273378u, 3797521928u,
  9914. 1942347150u, 3262952567u,
  9915. 2817830907u, 2078619498u,
  9916. 749534111u, 1178073973u,
  9917. 841092198u, 3288261538u,
  9918. 1696412169u, 1496966875u,
  9919. 3739946319u, 2481012988u,
  9920. 568983526u, 114945840u,
  9921. 2841706923u, 1632780103u,
  9922. 4020169654u, 2087949619u,
  9923. 833416317u, 3787017905u,
  9924. 2373238993u, 2575395164u,
  9925. 2542976862u, 2971726178u,
  9926. 2880371864u, 3642087909u,
  9927. 1043714217u, 3894199764u,
  9928. 2235879182u, 203853421u,
  9929. 834683330u, 425935223u,
  9930. 3560796393u, 3565833278u,
  9931. 3414330886u, 1748785729u,
  9932. 1023171602u, 580966986u,
  9933. 2657385925u, 2124704694u,
  9934. 233442446u, 1107045577u,
  9935. 3899097693u, 1067532701u,
  9936. 115667924u, 1406028344u,
  9937. 2419657149u, 18613994u,
  9938. 2532882091u, 3476683808u,
  9939. 895961699u, 3762914298u,
  9940. 1328752423u, 1844996900u,
  9941. 1210281744u, 904215228u,
  9942. 4055325594u, 1118521573u,
  9943. 3996647489u, 3657647605u,
  9944. 325254059u, 3136157065u,
  9945. 3341068436u, 2287683323u,
  9946. 1313073005u, 126005630u,
  9947. 853746559u, 3555092974u,
  9948. 2689238752u, 49515858u,
  9949. 61073168u, 1010661841u,
  9950. 1269521335u, 1902040126u,
  9951. 3858321250u, 1400735275u,
  9952. 2974699176u, 2771676666u,
  9953. 545726212u, 2225229957u,
  9954. 1086473152u, 3454177594u,
  9955. 2088002891u, 2883475137u,
  9956. 3222194252u, 4144472319u,
  9957. 567988835u, 1051332394u,
  9958. 3932046135u, 542648229u,
  9959. 162888005u, 1669710469u,
  9960. 1492500905u, 553041029u,
  9961. 3817492747u, 584127807u,
  9962. 4147115982u, 2993670925u,
  9963. 3509733475u, 3587959456u,
  9964. 2088550465u, 1745399498u,
  9965. 869648362u, 1404723176u,
  9966. 3947542735u, 1334333531u,
  9967. 59634866u, 3239516985u,
  9968. 3844250972u, 1275954779u,
  9969. 2512155003u, 1685649437u,
  9970. 639306006u, 2524620206u,
  9971. 576786501u, 655707039u,
  9972. 2864351838u, 3736264674u,
  9973. 1200907897u, 2384379464u,
  9974. 15823708u, 206117476u,
  9975. 1193310960u, 1093099415u,
  9976. 3696538026u, 4112584792u,
  9977. 2069527017u, 547588820u,
  9978. 4178147211u, 2827259351u,
  9979. 940846775u, 1054995047u,
  9980. 2976960697u, 1934305529u,
  9981. 2199137382u, 1005722394u,
  9982. 1875867180u, 2064356511u,
  9983. 4019734130u, 3096333006u,
  9984. 2069509024u, 2906358341u,
  9985. 2232866485u, 1456016086u,
  9986. 1422674894u, 867282151u,
  9987. 1612503136u, 1739843072u,
  9988. 134947567u, 2978775774u,
  9989. 1284167756u, 1090844589u,
  9990. 831688783u, 2079216362u,
  9991. 1626991196u, 3644714163u,
  9992. 3678110059u, 898470030u,
  9993. 3916646913u, 3182422972u,
  9994. 3630426828u, 969847973u,
  9995. 3427164640u, 3463937250u,
  9996. 3044785046u, 897322257u,
  9997. 3443872170u, 4185408854u,
  9998. 2557463241u, 4080940424u,
  9999. 2048168570u, 2429169982u,
  10000. 3174690447u, 2513494106u,
  10001. 1213061732u, 3143736628u,
  10002. 3482268149u, 1250714337u,
  10003. 31648125u, 3872383625u,
  10004. 1565760579u, 36665130u,
  10005. 751041229u, 2257179590u,
  10006. 2915361862u, 280819225u,
  10007. 2907818413u, 4254297769u,
  10008. 3493178615u, 3755944354u,
  10009. 4043533423u, 1134196225u,
  10010. 4177134659u, 127246419u,
  10011. 2442615581u, 923049607u,
  10012. 1004426206u, 782768297u,
  10013. 2410586681u, 1430106871u,
  10014. 4103323427u, 3168399477u,
  10015. 3716682375u, 3616334719u,
  10016. 3413209549u, 656672786u,
  10017. 2876965944u, 182894450u,
  10018. 456581318u, 2683752067u,
  10019. 3877875910u, 3190666241u,
  10020. 3240336907u, 4024807233u,
  10021. 1681224377u, 1576191191u,
  10022. 3599250276u, 2381111980u,
  10023. 3495321877u, 3956024585u,
  10024. 1611608524u, 3815677453u,
  10025. 2062334396u, 1656117707u,
  10026. 5457134u, 3234118251u,
  10027. 470187419u, 2688566989u,
  10028. 3259870297u, 660100446u,
  10029. 442236198u, 2542452448u,
  10030. 493137955u, 392411099u,
  10031. 947967568u, 1234595917u,
  10032. 4230082284u, 2762976773u,
  10033. 2870085764u, 1455086530u,
  10034. 2762099647u, 4011882747u,
  10035. 1215981925u, 3227517889u,
  10036. 3269061963u, 4037515364u,
  10037. 3168911474u, 4255057396u,
  10038. 2026092260u, 1736192508u,
  10039. 3909727042u, 3114708966u,
  10040. 1938800693u, 680793595u,
  10041. 1525265867u, 2808224480u,
  10042. 2122290603u, 1211197714u,
  10043. 3520488321u, 3979192396u,
  10044. 3540779343u, 4192918639u,
  10045. 2736030448u, 1120335563u,
  10046. 1698949078u, 3993310631u,
  10047. 1966048551u, 2228221363u,
  10048. 597941119u, 3498018399u,
  10049. 393987327u, 454500547u,
  10050. 1222959566u, 567151340u,
  10051. 3774764786u, 1492844524u,
  10052. 3308300614u, 805568076u,
  10053. 868414882u, 177406999u,
  10054. 1608110313u, 642061169u,
  10055. 1027515771u, 3131251981u,
  10056. 2851936150u, 4272755262u,
  10057. 1532845092u, 709643652u,
  10058. 682573592u, 1244104217u,
  10059. 796769556u, 2500467040u,
  10060. 3002618826u, 1112998535u,
  10061. 1780193104u, 1243644607u,
  10062. 3691719535u, 2958853053u,
  10063. 466635014u, 2277292580u,
  10064. 4082276003u, 1030800045u,
  10065. 1750863246u, 379050598u,
  10066. 3576413281u, 731493104u,
  10067. 132259176u, 4115195437u,
  10068. 1769890695u, 2715470335u,
  10069. 1819263183u, 2028531518u,
  10070. 2154809766u, 3672399742u,
  10071. 76727603u, 4198182186u,
  10072. 2304993586u, 1666387627u,
  10073. 284366017u, 3359785538u,
  10074. 3469807328u, 2926494787u,
  10075. 3829072836u, 2493478921u,
  10076. 3738499303u, 3311304980u,
  10077. 932916545u, 2235559063u,
  10078. 2909742396u, 1765719309u,
  10079. 1456588655u, 508290328u,
  10080. 1490719640u, 3356513470u,
  10081. 2908490783u, 251085588u,
  10082. 830410677u, 3172220325u,
  10083. 3897208579u, 1940535730u,
  10084. 151909546u, 2384458112u,
  10085. };
  10086. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  10087. bool Test(int offset, int len = 0) {
  10088. #undef Check
  10089. #undef IsAlive
  10090. #define Check(x) do { \
  10091. const uint32_t actual = (x), e = expected[index++]; \
  10092. bool ok = actual == e; \
  10093. if (!ok) { \
  10094. cerr << "expected " << hex << e << " but got " << actual << endl; \
  10095. ++errors; \
  10096. } \
  10097. assert(ok); \
  10098. } while (0)
  10099. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  10100. // After the following line is where the uses of "Check" and such will go.
  10101. static int index = 0;
  10102. if (offset == -1) { int alive = 0; { uint64_t h = farmhashuo::Hash64WithSeed(data, len++, SEED); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashuo::Hash64(data, len++); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashuo::Hash64(data, len++); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } len -= 3; return alive > 0; }
  10103. { uint64_t h = farmhashuo::Hash64WithSeed(data + offset, len, SEED); Check(h >> 32); Check((h << 32) >> 32); }
  10104. { uint64_t h = farmhashuo::Hash64(data + offset, len); Check(h >> 32); Check((h << 32) >> 32); }
  10105. return true;
  10106. #undef Check
  10107. #undef IsAlive
  10108. }
  10109. int RunTest() {
  10110. Setup();
  10111. int i = 0;
  10112. cout << "Running farmhashuoTest";
  10113. if (!Test(-1)) {
  10114. cout << "... Unavailable\n";
  10115. return NoteErrors();
  10116. }
  10117. // Good. The function is attempting to hash, so run the full test.
  10118. int errors_prior_to_test = errors;
  10119. for ( ; i < kTestSize - 1; i++) {
  10120. Test(i * i, i);
  10121. }
  10122. for ( ; i < kDataSize; i += i / 7) {
  10123. Test(0, i);
  10124. }
  10125. Test(0, kDataSize);
  10126. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  10127. return NoteErrors();
  10128. }
  10129. #else
  10130. // After the following line is where the code to print hash codes will go.
  10131. void Dump(int offset, int len) {
  10132. { uint64_t h = farmhashuo::Hash64WithSeed(data + offset, len, SEED); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  10133. { uint64_t h = farmhashuo::Hash64(data + offset, len); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  10134. }
  10135. #endif
  10136. #undef SEED
  10137. #undef SEED1
  10138. #undef SEED0
  10139. } // namespace farmhashuoTest
  10140. #if TESTING
  10141. static int farmhashuoTestResult = farmhashuoTest::RunTest();
  10142. #else
  10143. int main(int argc, char** argv) {
  10144. Setup();
  10145. cout << "uint32_t expected[] = {\n";
  10146. int i = 0;
  10147. for ( ; i < kTestSize - 1; i++) {
  10148. farmhashuoTest::Dump(i * i, i);
  10149. }
  10150. for ( ; i < kDataSize; i += i / 7) {
  10151. farmhashuoTest::Dump(0, i);
  10152. }
  10153. farmhashuoTest::Dump(0, kDataSize);
  10154. cout << "};\n";
  10155. }
  10156. #endif
  10157. #ifndef FARMHASH_SELF_TEST_GUARD
  10158. #define FARMHASH_SELF_TEST_GUARD
  10159. #include <cstdio>
  10160. #include <iostream>
  10161. #include <string.h>
  10162. using std::cout;
  10163. using std::cerr;
  10164. using std::endl;
  10165. using std::hex;
  10166. static const uint64_t kSeed0 = 1234567;
  10167. static const uint64_t kSeed1 = k0;
  10168. static const int kDataSize = 1 << 20;
  10169. static const int kTestSize = 300;
  10170. #define kSeed128 Uint128(kSeed0, kSeed1)
  10171. static char data[kDataSize];
  10172. static int completed_self_tests = 0;
  10173. static int errors = 0;
  10174. // Initialize data to pseudorandom values.
  10175. void Setup() {
  10176. if (completed_self_tests == 0) {
  10177. uint64_t a = 9;
  10178. uint64_t b = 777;
  10179. for (int i = 0; i < kDataSize; i++) {
  10180. a += b;
  10181. b += a;
  10182. a = (a ^ (a >> 41)) * k0;
  10183. b = (b ^ (b >> 41)) * k0 + i;
  10184. uint8_t u = b >> 37;
  10185. memcpy(data + i, &u, 1); // uint8_t -> char
  10186. }
  10187. }
  10188. }
  10189. int NoteErrors() {
  10190. #define NUM_SELF_TESTS 9
  10191. if (++completed_self_tests == NUM_SELF_TESTS)
  10192. std::exit(errors > 0);
  10193. return errors;
  10194. }
  10195. template <typename T> inline bool IsNonZero(T x) {
  10196. return x != 0;
  10197. }
  10198. template <> inline bool IsNonZero<uint128_t>(uint128_t x) {
  10199. return x != Uint128(0, 0);
  10200. }
  10201. #endif // FARMHASH_SELF_TEST_GUARD
  10202. namespace farmhashxoTest {
  10203. uint32_t CreateSeed(int offset, int salt) {
  10204. uint32_t h = static_cast<uint32_t>(salt & 0xffffffff);
  10205. h = h * c1;
  10206. h ^= (h >> 17);
  10207. h = h * c1;
  10208. h ^= (h >> 17);
  10209. h = h * c1;
  10210. h ^= (h >> 17);
  10211. h += static_cast<uint32_t>(offset & 0xffffffff);
  10212. h = h * c1;
  10213. h ^= (h >> 17);
  10214. h = h * c1;
  10215. h ^= (h >> 17);
  10216. h = h * c1;
  10217. h ^= (h >> 17);
  10218. return h;
  10219. }
  10220. #undef SEED
  10221. #undef SEED1
  10222. #undef SEED0
  10223. #define SEED CreateSeed(offset, -1)
  10224. #define SEED0 CreateSeed(offset, 0)
  10225. #define SEED1 CreateSeed(offset, 1)
  10226. #undef TESTING
  10227. #define TESTING 1
  10228. #if TESTING
  10229. uint32_t expected[] = {
  10230. 1140953930u, 861465670u,
  10231. 3277735313u, 2681724312u,
  10232. 2598464059u, 797982799u,
  10233. 890626835u, 800175912u,
  10234. 2603993599u, 921001710u,
  10235. 1410420968u, 2134990486u,
  10236. 3283896453u, 1867689945u,
  10237. 2914424215u, 2244477846u,
  10238. 255297188u, 2992121793u,
  10239. 1110588164u, 4186314283u,
  10240. 161451183u, 3943596029u,
  10241. 4019337850u, 452431531u,
  10242. 283198166u, 2741341286u,
  10243. 3379021470u, 2557197665u,
  10244. 299850021u, 2532580744u,
  10245. 452473466u, 1706958772u,
  10246. 1298374911u, 3099673830u,
  10247. 2199864459u, 3696623795u,
  10248. 236935126u, 2976578695u,
  10249. 4055299123u, 3281581178u,
  10250. 1053458494u, 1882212500u,
  10251. 2305012065u, 2169731866u,
  10252. 3456121707u, 275903667u,
  10253. 458884671u, 3033004529u,
  10254. 3058973506u, 2379411653u,
  10255. 1898235244u, 1402319660u,
  10256. 2700149065u, 2699376854u,
  10257. 147814787u, 720739346u,
  10258. 2433714046u, 4222949502u,
  10259. 4220361840u, 1712034059u,
  10260. 3425469811u, 3690733394u,
  10261. 4148372108u, 1330324210u,
  10262. 594028478u, 2921867846u,
  10263. 1635026870u, 192883107u,
  10264. 780716741u, 1728752234u,
  10265. 3280331829u, 326029180u,
  10266. 3969463346u, 1436364519u,
  10267. 393215742u, 3349570000u,
  10268. 3824583307u, 1612122221u,
  10269. 2859809759u, 3808705738u,
  10270. 1379537552u, 1646032583u,
  10271. 2233466664u, 1432476832u,
  10272. 4023053163u, 2650381482u,
  10273. 2052294713u, 3552092450u,
  10274. 1628777059u, 1499109081u,
  10275. 3476440786u, 3829307897u,
  10276. 2960536756u, 1554038301u,
  10277. 1145519619u, 3190844552u,
  10278. 2902102606u, 3600725550u,
  10279. 237495366u, 540224401u,
  10280. 65721842u, 489963606u,
  10281. 1448662590u, 397635823u,
  10282. 1596489240u, 1562872448u,
  10283. 1790705123u, 2128624475u,
  10284. 180854224u, 2604346966u,
  10285. 1435705557u, 1262831810u,
  10286. 155445229u, 1672724608u,
  10287. 1669465176u, 1341975128u,
  10288. 663607706u, 2077310004u,
  10289. 3610042449u, 1911523866u,
  10290. 1043692997u, 1454396064u,
  10291. 2563776023u, 294527927u,
  10292. 1099072299u, 1389770549u,
  10293. 703505868u, 678706990u,
  10294. 2952353448u, 2026137563u,
  10295. 3603803785u, 629449419u,
  10296. 1933894405u, 3043213226u,
  10297. 226132789u, 2489287368u,
  10298. 1552847036u, 645684964u,
  10299. 3828089804u, 3632594520u,
  10300. 187883449u, 230403464u,
  10301. 3151491850u, 3272648435u,
  10302. 3729087873u, 1303930448u,
  10303. 2002861219u, 165370827u,
  10304. 916494250u, 1230085527u,
  10305. 3103338579u, 3064290191u,
  10306. 3807265751u, 3628174014u,
  10307. 231181488u, 851743255u,
  10308. 2295806711u, 1781190011u,
  10309. 2988893883u, 1554380634u,
  10310. 1142264800u, 3667013118u,
  10311. 1968445277u, 315203929u,
  10312. 2638023604u, 2290487377u,
  10313. 732137533u, 1909203251u,
  10314. 440398219u, 1891630171u,
  10315. 1380301172u, 1498556724u,
  10316. 4072067757u, 4165088768u,
  10317. 4204318635u, 441430649u,
  10318. 3931792696u, 197618179u,
  10319. 956300927u, 914413116u,
  10320. 3010839769u, 2837339569u,
  10321. 2148126371u, 1913303225u,
  10322. 3074915312u, 3117299654u,
  10323. 4139181436u, 2993479124u,
  10324. 3178848746u, 1357272220u,
  10325. 1438494951u, 507436733u,
  10326. 667183474u, 2084369203u,
  10327. 3854939912u, 1413396341u,
  10328. 126024219u, 146044391u,
  10329. 1016656857u, 3022024459u,
  10330. 3254014218u, 429095991u,
  10331. 990500595u, 3056862311u,
  10332. 985653208u, 1718653828u,
  10333. 623071693u, 366414107u,
  10334. 1771289760u, 2293458109u,
  10335. 3047342438u, 2991127487u,
  10336. 3120876698u, 1684583131u,
  10337. 3638043310u, 1170404994u,
  10338. 863214540u, 1087193030u,
  10339. 199124911u, 520792961u,
  10340. 3169775996u, 1577421232u,
  10341. 3331828431u, 1013201099u,
  10342. 1716848157u, 4033596884u,
  10343. 1770708857u, 4229339322u,
  10344. 1146169032u, 1434258493u,
  10345. 3824360466u, 3242407770u,
  10346. 1926419493u, 2649785113u,
  10347. 872586426u, 762243036u,
  10348. 2736953692u, 816692935u,
  10349. 1571283333u, 3555213933u,
  10350. 2266795890u, 3781899767u,
  10351. 4290630595u, 517646945u,
  10352. 3006163611u, 2180594090u,
  10353. 959214578u, 558910384u,
  10354. 1283799121u, 3047062993u,
  10355. 3830962609u, 2391606125u,
  10356. 3544509313u, 622325861u,
  10357. 834785312u, 382936554u,
  10358. 1421463872u, 788479970u,
  10359. 1825135056u, 2725923798u,
  10360. 580988377u, 2826990641u,
  10361. 247825043u, 3167748333u,
  10362. 812546227u, 2506885666u,
  10363. 2584372201u, 1758123094u,
  10364. 1891789696u, 389974094u,
  10365. 345313518u, 2022370576u,
  10366. 3886113119u, 3338548567u,
  10367. 1083486947u, 2583576230u,
  10368. 1776047957u, 1771384107u,
  10369. 3604937815u, 3198590202u,
  10370. 3027522813u, 4155628142u,
  10371. 4232136669u, 427759438u,
  10372. 4244322689u, 542201663u,
  10373. 1549591985u, 2856634168u,
  10374. 556609672u, 45845311u,
  10375. 1175961330u, 3948351189u,
  10376. 4165739882u, 4194218315u,
  10377. 1634635545u, 4151937410u,
  10378. 713127376u, 1467786451u,
  10379. 1327394015u, 2743592929u,
  10380. 2638154051u, 810082938u,
  10381. 3077742128u, 1062268187u,
  10382. 4084325664u, 3810665822u,
  10383. 3735739145u, 2794294783u,
  10384. 2335576331u, 2560479831u,
  10385. 690240711u, 997658837u,
  10386. 2442302747u, 3948961926u,
  10387. 3958366652u, 3067277639u,
  10388. 2059157774u, 1211737169u,
  10389. 1516711748u, 2339636583u,
  10390. 4188504038u, 59581167u,
  10391. 2767897792u, 1389679610u,
  10392. 2658147000u, 2643979752u,
  10393. 3758739543u, 4189944477u,
  10394. 1454470782u, 100876854u,
  10395. 2995362413u, 118817200u,
  10396. 3252925478u, 2062343506u,
  10397. 2804483644u, 3088828656u,
  10398. 1231633714u, 4168280671u,
  10399. 2931588131u, 3284356565u,
  10400. 1255909792u, 3130054947u,
  10401. 4173605289u, 1407328702u,
  10402. 1677744031u, 3532596884u,
  10403. 3162657845u, 3887208531u,
  10404. 2256541290u, 3459463480u,
  10405. 3740979556u, 259034107u,
  10406. 392987633u, 3233195759u,
  10407. 3606709555u, 3424793077u,
  10408. 315836068u, 3200749877u,
  10409. 4065431359u, 760633989u,
  10410. 2982018998u, 1811050648u,
  10411. 234531934u, 1115203611u,
  10412. 3897494162u, 1516407838u,
  10413. 1603559457u, 323296368u,
  10414. 2632963283u, 1778459926u,
  10415. 2879836826u, 2146672889u,
  10416. 3486330348u, 492621815u,
  10417. 1231665285u, 2457048126u,
  10418. 3438440082u, 2217471853u,
  10419. 3355404249u, 3275550588u,
  10420. 1052645068u, 862072556u,
  10421. 4110617119u, 3745267835u,
  10422. 2657392572u, 4279236653u,
  10423. 1688445808u, 701920051u,
  10424. 956734128u, 581695350u,
  10425. 3157862788u, 2585726058u,
  10426. 1192588249u, 1410111809u,
  10427. 1651193125u, 3326135446u,
  10428. 1073280453u, 97376972u,
  10429. 2513844237u, 2187968410u,
  10430. 3976859649u, 4267859263u,
  10431. 3429034542u, 564493077u,
  10432. 3000537321u, 479241367u,
  10433. 3845637831u, 2868987960u,
  10434. 51544337u, 1029173765u,
  10435. 393624922u, 704325635u,
  10436. 2357610553u, 1418509533u,
  10437. 2007814586u, 3866658271u,
  10438. 3082385053u, 735688735u,
  10439. 916110004u, 3283299459u,
  10440. 1051684175u, 1083796807u,
  10441. 4074716319u, 813690332u,
  10442. 144264390u, 1439630796u,
  10443. 1508556987u, 675582689u,
  10444. 3748881891u, 3195309868u,
  10445. 362884708u, 1616408198u,
  10446. 43233176u, 837301135u,
  10447. 881504822u, 3254795114u,
  10448. 1385506591u, 2799925823u,
  10449. 1469874582u, 3464841997u,
  10450. 497175391u, 3929484338u,
  10451. 3975771289u, 1798536177u,
  10452. 2926265846u, 1374242438u,
  10453. 3675707838u, 4205965408u,
  10454. 3153165629u, 1499475160u,
  10455. 187287713u, 548490821u,
  10456. 3255259608u, 4247675634u,
  10457. 1940181471u, 3779953975u,
  10458. 687167150u, 2319566715u,
  10459. 1742785722u, 785893184u,
  10460. 2296977392u, 2778575413u,
  10461. 1794720651u, 48131484u,
  10462. 4084891412u, 1160134629u,
  10463. 3737623280u, 823113169u,
  10464. 3423207646u, 3803213486u,
  10465. 710625654u, 4116162021u,
  10466. 3693420287u, 4167766971u,
  10467. 1666602807u, 295320990u,
  10468. 3513255468u, 2487440590u,
  10469. 234080704u, 4004655503u,
  10470. 2971762528u, 1479656873u,
  10471. 4090178629u, 4044418876u,
  10472. 391947536u, 1462554406u,
  10473. 3909295855u, 1239580330u,
  10474. 1515601363u, 2011102035u,
  10475. 1442068334u, 4265993528u,
  10476. 1191921695u, 2291355695u,
  10477. 4257172787u, 576405853u,
  10478. 314332944u, 4038839101u,
  10479. 55559918u, 2378985842u,
  10480. 711098718u, 2425317635u,
  10481. 1644327317u, 1401013391u,
  10482. 4193760037u, 2958260436u,
  10483. 3167371443u, 3062418115u,
  10484. 3800755475u, 3167030094u,
  10485. 3489648204u, 1405430357u,
  10486. 526177822u, 2602636307u,
  10487. 915406019u, 4264167741u,
  10488. 1484090483u, 3070944737u,
  10489. 254529415u, 4017058800u,
  10490. 1702710265u, 1029665228u,
  10491. 2000382906u, 3185573940u,
  10492. 1381258384u, 4036354071u,
  10493. 2900841028u, 2670703363u,
  10494. 2921748807u, 2899069938u,
  10495. 4130543625u, 688472265u,
  10496. 4186808827u, 1054670286u,
  10497. 1132985391u, 2840525968u,
  10498. 4175776103u, 338058159u,
  10499. 1735964501u, 1539305024u,
  10500. 3497121710u, 1568260669u,
  10501. 2227290760u, 146827036u,
  10502. 3977176001u, 4060134777u,
  10503. 857488494u, 250055052u,
  10504. 4284109679u, 2502815838u,
  10505. 2592281721u, 1603444633u,
  10506. 1390562014u, 1556658131u,
  10507. 616327404u, 2448966429u,
  10508. 3051191726u, 3891353218u,
  10509. 1213304082u, 762328245u,
  10510. 2239052397u, 1082330589u,
  10511. 2455957292u, 201837927u,
  10512. 405397452u, 3079886794u,
  10513. 2583939798u, 2848283092u,
  10514. 3750724631u, 883849006u,
  10515. 3204198988u, 3341327098u,
  10516. 1855234968u, 1982110346u,
  10517. 1485529487u, 541496720u,
  10518. 4117290321u, 3607433551u,
  10519. 2168864636u, 133643215u,
  10520. 1055817409u, 3847827123u,
  10521. 2960769387u, 4046101649u,
  10522. 1176127003u, 4015671361u,
  10523. 4243643405u, 2849988118u,
  10524. 517111221u, 1796672358u,
  10525. 2045051700u, 3452457457u,
  10526. 2948254999u, 2102063419u,
  10527. 1556410577u, 1536380876u,
  10528. 3776661467u, 3281002516u,
  10529. 1735616066u, 1539151988u,
  10530. 1087795162u, 3332431596u,
  10531. 685631442u, 1147951686u,
  10532. 95237878u, 2005032160u,
  10533. 4012206915u, 4224354805u,
  10534. 3204999386u, 2415262714u,
  10535. 1433635018u, 116647396u,
  10536. 83167836u, 2881562655u,
  10537. 2729416454u, 1029284767u,
  10538. 881378302u, 2159170082u,
  10539. 555057366u, 1169104445u,
  10540. 3963877000u, 1919171906u,
  10541. 336034862u, 2017579106u,
  10542. 4059340529u, 3020819343u,
  10543. 865146997u, 2473524405u,
  10544. 944743644u, 1694443528u,
  10545. 1804513294u, 2904752429u,
  10546. 617975720u, 3671562289u,
  10547. 260177668u, 505662155u,
  10548. 1885941445u, 2504509403u,
  10549. 2260041112u, 1019936943u,
  10550. 3722741628u, 1511077569u,
  10551. 3100701179u, 1379422864u,
  10552. 1535670711u, 773792826u,
  10553. 1103819072u, 2089123665u,
  10554. 1157547425u, 329152940u,
  10555. 4142587430u, 484732447u,
  10556. 2475035432u, 1120017626u,
  10557. 412145504u, 965125959u,
  10558. 324924679u, 2809286837u,
  10559. 2842141483u, 4029205195u,
  10560. 2974306813u, 515627448u,
  10561. 3791551981u, 1097806406u,
  10562. 3873078673u, 136118734u,
  10563. 1872130856u, 3632422367u,
  10564. 3574135531u, 4017075736u,
  10565. 1699452298u, 1403506686u,
  10566. 344414660u, 1189129691u,
  10567. 3487080616u, 1516736273u,
  10568. 1805475756u, 2562064338u,
  10569. 163335594u, 2732147834u,
  10570. 4077452507u, 2984955003u,
  10571. 4271866024u, 3071338162u,
  10572. 2347111903u, 873829983u,
  10573. 1948409509u, 1923531348u,
  10574. 459509140u, 771592405u,
  10575. 1750124750u, 2334938333u,
  10576. 213811117u, 2586632018u,
  10577. 185232757u, 4032960199u,
  10578. 2447383637u, 284777551u,
  10579. 1654276320u, 2687561076u,
  10580. 3512945009u, 308584855u,
  10581. 1861027147u, 4102279334u,
  10582. 3203802620u, 1692079268u,
  10583. 4250142168u, 2565680167u,
  10584. 1507046104u, 841195925u,
  10585. 520565830u, 3674576684u,
  10586. 38924274u, 3770488806u,
  10587. 2414430882u, 3978473838u,
  10588. 3703994407u, 69201295u,
  10589. 3099963860u, 1255084262u,
  10590. 690971838u, 3539996781u,
  10591. 3696902571u, 3593730713u,
  10592. 2363435042u, 54945052u,
  10593. 1785765213u, 184911581u,
  10594. 1586241476u, 1939595371u,
  10595. 2534883189u, 2432427547u,
  10596. 2374171993u, 2039128933u,
  10597. 2955715987u, 2295501078u,
  10598. 2741583197u, 1280920000u,
  10599. 686818699u, 1238742497u,
  10600. 3843660102u, 82177963u,
  10601. 1281043691u, 1121403845u,
  10602. 1697846708u, 284852964u,
  10603. 278661677u, 2889101923u,
  10604. 2127558730u, 713121337u,
  10605. 872502474u, 511142139u,
  10606. 1261140657u, 1747052377u,
  10607. 2108187161u, 927011680u,
  10608. 955328267u, 3821994995u,
  10609. 2707230761u, 4142246789u,
  10610. 4134691985u, 1958963937u,
  10611. 2498463509u, 1977988705u,
  10612. 1419293714u, 1636932722u,
  10613. 2567532373u, 4075249328u,
  10614. 240575705u, 1956681213u,
  10615. 2598802768u, 2025886508u,
  10616. 4104757832u, 3026358429u,
  10617. 3242615202u, 4026813725u,
  10618. 255108733u, 1845587644u,
  10619. 3573008472u, 3615577014u,
  10620. 1222733548u, 1205557630u,
  10621. 917608574u, 1363253259u,
  10622. 1541946015u, 3087190425u,
  10623. 1138008081u, 1444019663u,
  10624. 109793386u, 341851980u,
  10625. 857839960u, 2515339233u,
  10626. 156283211u, 1906768669u,
  10627. 3886713057u, 1276595523u,
  10628. 2809830736u, 460237542u,
  10629. 3420452099u, 142985419u,
  10630. 205970448u, 4198897105u,
  10631. 1950698961u, 2069753399u,
  10632. 1142216925u, 1113051162u,
  10633. 1033680610u, 4278599955u,
  10634. 1106466069u, 356742959u,
  10635. 531521052u, 3494863964u,
  10636. 225629455u, 3735275001u,
  10637. 3662626864u, 1750561299u,
  10638. 1012864651u, 2101846429u,
  10639. 1074553219u, 668829411u,
  10640. 992181339u, 3384018814u,
  10641. 3330664522u, 860966321u,
  10642. 1885071395u, 4233785523u,
  10643. 100741310u, 451656820u,
  10644. 2148187612u, 1063001151u,
  10645. 360256231u, 107312677u,
  10646. 3650357479u, 2390172694u,
  10647. 22452685u, 237319043u,
  10648. 3600462351u, 1216645846u,
  10649. 2088767754u, 164402616u,
  10650. 2418980170u, 926137824u,
  10651. 94638678u, 1689811113u,
  10652. 2751052984u, 1767810825u,
  10653. 271289013u, 3896132233u,
  10654. 103797041u, 1397772514u,
  10655. 3441135892u, 3323383489u,
  10656. 2491268371u, 1662561885u,
  10657. 1612872497u, 2986430557u,
  10658. 2756998822u, 207428029u,
  10659. 937973965u, 2791656726u,
  10660. 1949717207u, 2260498180u,
  10661. 2648427775u, 2360400900u,
  10662. 2080496169u, 486358863u,
  10663. 1582022990u, 1263709570u,
  10664. 1396468647u, 1377764574u,
  10665. 363008508u, 1293502429u,
  10666. 224580012u, 4252610345u,
  10667. 1435134775u, 1099809675u,
  10668. 533671980u, 1533438766u,
  10669. 1820532305u, 2776960536u,
  10670. 3374512975u, 3542220540u,
  10671. 822810075u, 3716663290u,
  10672. 1157398049u, 3752806924u,
  10673. 4081637863u, 337070226u,
  10674. 3866585976u, 359270190u,
  10675. 2110942730u, 3267551635u,
  10676. 644850146u, 1306761320u,
  10677. 746972907u, 934259457u,
  10678. 2341378668u, 2220373824u,
  10679. 1242645122u, 4109252858u,
  10680. 1625266099u, 1173698481u,
  10681. 383517064u, 896322512u,
  10682. 3377483696u, 1788337208u,
  10683. 455496839u, 3194373887u,
  10684. 1837689083u, 1336556841u,
  10685. 1658628529u, 2911512007u,
  10686. 3838343487u, 2757664765u,
  10687. 1537187340u, 3712582785u,
  10688. 367022558u, 3071359622u,
  10689. 3926147070u, 35432879u,
  10690. 3093195926u, 2561488770u,
  10691. 4273132307u, 3898950547u,
  10692. 2838251049u, 2103926083u,
  10693. 2549435227u, 536047554u,
  10694. 1858986613u, 2040551642u,
  10695. 1147412575u, 1972369852u,
  10696. 4166184983u, 3528794619u,
  10697. 4077477194u, 3565689036u,
  10698. 808048238u, 3826350461u,
  10699. 1359641525u, 1197100813u,
  10700. 265993036u, 1864569342u,
  10701. 725164342u, 2264788336u,
  10702. 1831223342u, 3329594980u,
  10703. 923017956u, 490608221u,
  10704. 3818634478u, 258154469u,
  10705. 1441714797u, 1174785921u,
  10706. 3833372385u, 3287246572u,
  10707. 1677395563u, 3569218731u,
  10708. 868981704u, 2163330264u,
  10709. 2649450292u, 500120236u,
  10710. 465161780u, 746438382u,
  10711. 1145009669u, 2520062970u,
  10712. 2810524030u, 1561519055u,
  10713. 1479878006u, 3864969305u,
  10714. 2686075657u, 4042710240u,
  10715. 3224066062u, 2774151984u,
  10716. 2226179547u, 1643626042u,
  10717. 2328730865u, 3160666939u,
  10718. 2107011431u, 96459446u,
  10719. 3920328742u, 3336407558u,
  10720. 829404209u, 1878067032u,
  10721. 1235983679u, 4237425634u,
  10722. 466519055u, 3870676863u,
  10723. 934312076u, 2952135524u,
  10724. 276949224u, 4100839753u,
  10725. 424001484u, 1955120893u,
  10726. 4015478120u, 1265237690u,
  10727. 427484362u, 4246879223u,
  10728. 3452969617u, 1724363362u,
  10729. 1553513184u, 834830418u,
  10730. 1858777639u, 3476334357u,
  10731. 4144030366u, 2450047160u,
  10732. 2950762705u, 4277111759u,
  10733. 358032121u, 2511026735u,
  10734. 167923105u, 2059208280u,
  10735. 251949572u, 3065234219u,
  10736. 1535473864u, 556796152u,
  10737. 1513237478u, 3150857516u,
  10738. 1103404394u, 198182691u,
  10739. 1476438092u, 2913077464u,
  10740. 207119516u, 3963810232u,
  10741. 2954651680u, 1535115487u,
  10742. 3051522276u, 4046477658u,
  10743. 917804636u, 864395565u,
  10744. 632704095u, 140762681u,
  10745. 1802040304u, 990407433u,
  10746. 3771506212u, 4106024923u,
  10747. 1287729497u, 2198985327u,
  10748. 4052924496u, 2926590471u,
  10749. 3084557148u, 1472898694u,
  10750. 1009870118u, 559702706u,
  10751. 4265214507u, 82077489u,
  10752. 3067891003u, 3295678907u,
  10753. 2402308151u, 1096697687u,
  10754. 464407878u, 4190838199u,
  10755. 4269578403u, 3060919438u,
  10756. 2899950405u, 3046872820u,
  10757. 733509243u, 1583801700u,
  10758. 40453902u, 3879773881u,
  10759. 1993425202u, 2185339100u,
  10760. 1877837196u, 3912423882u,
  10761. 3293122640u, 4104318469u,
  10762. 1679617763u, 3703603898u,
  10763. 8759461u, 2540185277u,
  10764. 1152198475u, 2038345882u,
  10765. 2503579743u, 1446869792u,
  10766. 2019419351u, 4051584612u,
  10767. 3178289407u, 3992503830u,
  10768. 2879018745u, 2719373510u,
  10769. 700836153u, 1675560450u,
  10770. 4121245793u, 2064715719u,
  10771. 343595772u, 1996164093u,
  10772. 3130433948u, 405251683u,
  10773. 2804817126u, 1607133689u,
  10774. 463852893u, 2864244470u,
  10775. 2224044848u, 4071581802u,
  10776. 2537107938u, 2246347953u,
  10777. 3207234525u, 2028708916u,
  10778. 2272418128u, 803575837u,
  10779. 38655481u, 2170452091u,
  10780. 3272166407u, 557660441u,
  10781. 4019147902u, 3841480082u,
  10782. 298459606u, 2600943364u,
  10783. 2440657523u, 255451671u,
  10784. 3424361375u, 779434428u,
  10785. 3088526123u, 490671625u,
  10786. 1322855877u, 3452203069u,
  10787. 3057021940u, 2285701422u,
  10788. 2014993457u, 2390431709u,
  10789. 2002090272u, 1568745354u,
  10790. 1783152480u, 823305654u,
  10791. 4053862835u, 2200236540u,
  10792. 3009412313u, 3184047862u,
  10793. 3032187389u, 4159715581u,
  10794. 2966902888u, 252986948u,
  10795. 1849329144u, 3160134214u,
  10796. 3420960112u, 3198900547u,
  10797. 749160960u, 379139040u,
  10798. 1208883495u, 1566527339u,
  10799. 3006227299u, 4194096960u,
  10800. 556075248u, 497404038u,
  10801. 1717327230u, 1496132623u,
  10802. 1775955687u, 1719108984u,
  10803. 1014328900u, 4189966956u,
  10804. 2108574735u, 2584236470u,
  10805. 684087286u, 531310503u,
  10806. 4264509527u, 773405691u,
  10807. 3088905079u, 3456882941u,
  10808. 3105682208u, 3382290593u,
  10809. 2289363624u, 3296306400u,
  10810. 4168438718u, 467441309u,
  10811. 777173623u, 3241407531u,
  10812. 1183994815u, 1132983260u,
  10813. 1610606159u, 2540270567u,
  10814. 2649684057u, 1397502982u,
  10815. 146657385u, 3318434267u,
  10816. 2109315753u, 3348545480u,
  10817. 3193669211u, 811750340u,
  10818. 1073256162u, 3571673088u,
  10819. 546596661u, 1017047954u,
  10820. 3403136990u, 2540585554u,
  10821. 1477047647u, 4145867423u,
  10822. 2826408201u, 3531646869u,
  10823. 784952939u, 943914610u,
  10824. 2717443875u, 3657384638u,
  10825. 1806867885u, 1903578924u,
  10826. 3985088434u, 1911188923u,
  10827. 1764002686u, 3672748083u,
  10828. 1832925325u, 241574049u,
  10829. 519948041u, 3181425568u,
  10830. 2939747257u, 1634174593u,
  10831. 3429894862u, 3529565564u,
  10832. 1089679033u, 240953857u,
  10833. 2025369941u, 2695166650u,
  10834. 517086873u, 2964595704u,
  10835. 3017658263u, 3828377737u,
  10836. 2144895011u, 994799311u,
  10837. 1184683823u, 4260564140u,
  10838. 308018483u, 4262383425u,
  10839. 1374752558u, 3431057723u,
  10840. 1572637805u, 383233885u,
  10841. 3188015819u, 4051263539u,
  10842. 233319221u, 3794788167u,
  10843. 2017406667u, 919677938u,
  10844. 4074952232u, 1683612329u,
  10845. 4213676186u, 327142514u,
  10846. 3032591014u, 4204155962u,
  10847. 206775997u, 2283918569u,
  10848. 2395147154u, 3427505379u,
  10849. 2211319468u, 4153726847u,
  10850. 2217060665u, 350160869u,
  10851. 2493667051u, 1648200185u,
  10852. 3441709766u, 1387233546u,
  10853. 140980u, 1891558063u,
  10854. 760080239u, 2088061981u,
  10855. 1580964938u, 740563169u,
  10856. 422986366u, 330624974u,
  10857. 4264507722u, 150928357u,
  10858. 2738323042u, 2948665536u,
  10859. 918718096u, 376390582u,
  10860. 3966098971u, 717653678u,
  10861. 3219466255u, 3799363969u,
  10862. 3424344721u, 3187805406u,
  10863. 375347278u, 3490350144u,
  10864. 1992212097u, 2263421398u,
  10865. 3855037968u, 1928519266u,
  10866. 3866327955u, 1129127000u,
  10867. 1782515131u, 2746577402u,
  10868. 3059200728u, 2108753646u,
  10869. 2738070963u, 1336849395u,
  10870. 1705302106u, 768287270u,
  10871. 1343511943u, 2247006571u,
  10872. 1956142255u, 1780259453u,
  10873. 3475618043u, 212490675u,
  10874. 622521957u, 917121602u,
  10875. 1852992332u, 1267987847u,
  10876. 3170016833u, 2549835613u,
  10877. 3299763344u, 2864033668u,
  10878. 3378768767u, 1236609378u,
  10879. 4169365948u, 3738062408u,
  10880. 2661022773u, 2006922227u,
  10881. 2760592161u, 3828932355u,
  10882. 2636387819u, 2616619070u,
  10883. 1237256330u, 3449066284u,
  10884. 2871755260u, 3729280948u,
  10885. 3862686086u, 431292293u,
  10886. 3285899651u, 786322314u,
  10887. 2531158535u, 724901242u,
  10888. 2377363130u, 1415970351u,
  10889. 1244759631u, 3263135197u,
  10890. 965248856u, 174024139u,
  10891. 2297418515u, 2954777083u,
  10892. 987586766u, 3206261120u,
  10893. 4059515114u, 3903854066u,
  10894. 1931934525u, 2287507921u,
  10895. 1827135136u, 1781944746u,
  10896. 574617451u, 2299034788u,
  10897. 2650140034u, 4081586725u,
  10898. 2482286699u, 1109175923u,
  10899. 458483596u, 618705848u,
  10900. 4059852729u, 1813855658u,
  10901. 4190721328u, 1129462471u,
  10902. 4089998050u, 3575732749u,
  10903. 2375584220u, 1037031473u,
  10904. 1623777358u, 3389003793u,
  10905. 546597541u, 352770237u,
  10906. 1383747654u, 3122687303u,
  10907. 1646071378u, 1164309901u,
  10908. 290870767u, 830691298u,
  10909. 929335420u, 3193251135u,
  10910. 989577914u, 3626554867u,
  10911. 591974737u, 3996958215u,
  10912. 3163711272u, 3071568023u,
  10913. 1516846461u, 3656006011u,
  10914. 2698625268u, 2510865430u,
  10915. 340274176u, 1167681812u,
  10916. 3698796465u, 3155218919u,
  10917. 4102288238u, 1673474350u,
  10918. 3069708839u, 2704165015u,
  10919. 1237411891u, 1854985978u,
  10920. 3646837503u, 3625406022u,
  10921. 921552000u, 1712976649u,
  10922. 3939149151u, 878608872u,
  10923. 3406359248u, 1068844551u,
  10924. 1834682077u, 4155949943u,
  10925. 2437686324u, 3163786257u,
  10926. 2645117577u, 1988168803u,
  10927. 747285578u, 1626463554u,
  10928. 1235300371u, 1256485167u,
  10929. 1914142538u, 4141546431u,
  10930. 3838102563u, 582664250u,
  10931. 1883344352u, 2083771672u,
  10932. 2611657933u, 2139079047u,
  10933. 2250573853u, 804336148u,
  10934. 3066325351u, 2770847216u,
  10935. 4275641370u, 1455750577u,
  10936. 3346357270u, 1674051445u,
  10937. 601221482u, 3992583643u,
  10938. 1402445097u, 3622527604u,
  10939. 2509017299u, 2966108111u,
  10940. 2557027816u, 900741486u,
  10941. 1790771021u, 2912643797u,
  10942. 2631381069u, 4014551783u,
  10943. 90375300u, 300318232u,
  10944. 3269968032u, 2679371729u,
  10945. 2664752123u, 3517585534u,
  10946. 3253901179u, 542270815u,
  10947. 1188641600u, 365479232u,
  10948. 2210121140u, 760762191u,
  10949. 1273768482u, 1216399252u,
  10950. 3484324231u, 4287337666u,
  10951. 16322182u, 643179562u,
  10952. 325675502u, 3652676161u,
  10953. 3120716054u, 3330259752u,
  10954. 1011990087u, 2990167340u,
  10955. 1097584090u, 3262252593u,
  10956. 1829409951u, 3665087267u,
  10957. 1214854475u, 2134299399u,
  10958. 3704419305u, 411263051u,
  10959. 1625446136u, 549838529u,
  10960. 4283196353u, 1342880802u,
  10961. 3460621305u, 1967599860u,
  10962. 4282843369u, 1275671016u,
  10963. 2544665755u, 853593042u,
  10964. 901109753u, 2682611693u,
  10965. 110631633u, 797487791u,
  10966. 1472073141u, 850464484u,
  10967. 797089608u, 3286110054u,
  10968. 350397471u, 2775631060u,
  10969. 366448238u, 3842907484u,
  10970. 2219863904u, 3623364733u,
  10971. 1850985302u, 4009616991u,
  10972. 294963924u, 3693536939u,
  10973. 3061255808u, 1615375832u,
  10974. 1920066675u, 4113028420u,
  10975. 4032223840u, 2318423400u,
  10976. 2701956286u, 4145497671u,
  10977. 3991532344u, 2536338351u,
  10978. 1679099863u, 1728968857u,
  10979. 449740816u, 2686506989u,
  10980. 685242457u, 97590863u,
  10981. 3258354115u, 1502282913u,
  10982. 1235084019u, 2151665147u,
  10983. 528459289u, 231097464u,
  10984. 2477280726u, 3651607391u,
  10985. 2091754612u, 1178454681u,
  10986. 980597335u, 1604483865u,
  10987. 1842333726u, 4146839064u,
  10988. 3213794286u, 2601416506u,
  10989. 754220096u, 3571436033u,
  10990. 488595746u, 1448097974u,
  10991. 4004834921u, 238887261u,
  10992. 3320337489u, 1416989070u,
  10993. 2928916831u, 4093725287u,
  10994. 186020771u, 2367569534u,
  10995. 3046087671u, 4090084518u,
  10996. 3548184546u, 679517009u,
  10997. 1962659444u, 3539886328u,
  10998. 4192003933u, 1678423485u,
  10999. 3827951761u, 3086277222u,
  11000. 2144472852u, 1390394371u,
  11001. 2976322029u, 1574517163u,
  11002. 3553313841u, 119173722u,
  11003. 1702434637u, 1766260771u,
  11004. 3629581771u, 1407497759u,
  11005. 895654784u, 751439914u,
  11006. 4008409498u, 215917713u,
  11007. 1482103833u, 695551833u,
  11008. 1288382231u, 2656990891u,
  11009. 2581779077u, 1570750352u,
  11010. 3710689053u, 1741390464u,
  11011. 2666411616u, 3533987737u,
  11012. 4289478316u, 3576119563u,
  11013. 4118694920u, 108199666u,
  11014. 3869794273u, 963183826u,
  11015. 2081410737u, 3796810515u,
  11016. 791123882u, 2525792704u,
  11017. 1036883117u, 136547246u,
  11018. 875691100u, 2592925324u,
  11019. 614302599u, 3013176417u,
  11020. 2689342539u, 427154472u,
  11021. 532957601u, 1228758574u,
  11022. 1898117151u, 1181643858u,
  11023. 1908591042u, 1464255968u,
  11024. 446980910u, 2984611177u,
  11025. 58509511u, 1046943619u,
  11026. 3508927906u, 2001585786u,
  11027. 2544767379u, 1525438381u,
  11028. 552181222u, 1959725830u,
  11029. 879448844u, 1348536411u,
  11030. 4242243590u, 2861338018u,
  11031. 1082052441u, 1034351453u,
  11032. 601175800u, 764077711u,
  11033. 530635011u, 3785343245u,
  11034. 2178026726u, 117256687u,
  11035. 2378297261u, 457568934u,
  11036. 76438221u, 4104954272u,
  11037. 956793873u, 3783168634u,
  11038. 2485968477u, 2381948487u,
  11039. 4226929450u, 3148473363u,
  11040. 2518273601u, 3569490233u,
  11041. 879369091u, 2180270337u,
  11042. 3674375989u, 1387729170u,
  11043. 977997984u, 4270646856u,
  11044. 568650985u, 951677556u,
  11045. 4213877384u, 2721005055u,
  11046. 1073364549u, 2563403831u,
  11047. 1678669911u, 66786703u,
  11048. 2273631661u, 1149351924u,
  11049. 3651298990u, 1581883443u,
  11050. 246723096u, 1895026827u,
  11051. 3810605772u, 3711056516u,
  11052. 4058833288u, 2193790614u,
  11053. 2080120290u, 3638638708u,
  11054. 2915672708u, 2263003308u,
  11055. 2361934197u, 4136767460u,
  11056. 1976115991u, 3448840877u,
  11057. 2019238520u, 225333538u,
  11058. 874340815u, 2976159827u,
  11059. 1555273378u, 3797521928u,
  11060. 1942347150u, 3262952567u,
  11061. 435997738u, 340403353u,
  11062. 2817830907u, 2078619498u,
  11063. 749534111u, 1178073973u,
  11064. 894654712u, 3361226032u,
  11065. 841092198u, 3288261538u,
  11066. 1696412169u, 1496966875u,
  11067. 697501571u, 1059158875u,
  11068. 3739946319u, 2481012988u,
  11069. 568983526u, 114945840u,
  11070. 1559249010u, 2218244008u,
  11071. 2841706923u, 1632780103u,
  11072. 4020169654u, 2087949619u,
  11073. 2438736103u, 24032648u,
  11074. 833416317u, 3787017905u,
  11075. 2373238993u, 2575395164u,
  11076. 3434544481u, 3228481067u,
  11077. 2542976862u, 2971726178u,
  11078. 2880371864u, 3642087909u,
  11079. 2407477975u, 2239080836u,
  11080. 1043714217u, 3894199764u,
  11081. 2235879182u, 203853421u,
  11082. 2933669448u, 2504940536u,
  11083. 834683330u, 425935223u,
  11084. 3560796393u, 3565833278u,
  11085. 1668000829u, 3683399154u,
  11086. 3414330886u, 1748785729u,
  11087. 1023171602u, 580966986u,
  11088. 2531038985u, 3227325488u,
  11089. 2657385925u, 2124704694u,
  11090. 233442446u, 1107045577u,
  11091. 3407293834u, 552770757u,
  11092. 3899097693u, 1067532701u,
  11093. 115667924u, 1406028344u,
  11094. 1707768231u, 3724015962u,
  11095. 2419657149u, 18613994u,
  11096. 2532882091u, 3476683808u,
  11097. 1560838678u, 811220224u,
  11098. 895961699u, 3762914298u,
  11099. 1328752423u, 1844996900u,
  11100. 1420427894u, 1848067707u,
  11101. 1210281744u, 904215228u,
  11102. 4055325594u, 1118521573u,
  11103. 2496554183u, 2579259919u,
  11104. 3996647489u, 3657647605u,
  11105. 325254059u, 3136157065u,
  11106. 3951522674u, 4052925250u,
  11107. 3341068436u, 2287683323u,
  11108. 1313073005u, 126005630u,
  11109. 2505120084u, 1194725057u,
  11110. 853746559u, 3555092974u,
  11111. 2689238752u, 49515858u,
  11112. 1244776042u, 1069300695u,
  11113. 61073168u, 1010661841u,
  11114. 1269521335u, 1902040126u,
  11115. 990632502u, 2378708922u,
  11116. 3858321250u, 1400735275u,
  11117. 2974699176u, 2771676666u,
  11118. 170995186u, 2877798589u,
  11119. 545726212u, 2225229957u,
  11120. 1086473152u, 3454177594u,
  11121. 3859483262u, 1499729584u,
  11122. 2088002891u, 2883475137u,
  11123. 3222194252u, 4144472319u,
  11124. 2212229854u, 4146740722u,
  11125. 567988835u, 1051332394u,
  11126. 3932046135u, 542648229u,
  11127. 3017852446u, 1277887997u,
  11128. 162888005u, 1669710469u,
  11129. 1492500905u, 553041029u,
  11130. 1434876932u, 533989516u,
  11131. 3817492747u, 584127807u,
  11132. 4147115982u, 2993670925u,
  11133. 4020312558u, 710021255u,
  11134. 3509733475u, 3587959456u,
  11135. 2088550465u, 1745399498u,
  11136. 2952242967u, 1259815443u,
  11137. 869648362u, 1404723176u,
  11138. 3947542735u, 1334333531u,
  11139. 3873471582u, 229399758u,
  11140. 59634866u, 3239516985u,
  11141. 3844250972u, 1275954779u,
  11142. 1385684948u, 2243700741u,
  11143. 2512155003u, 1685649437u,
  11144. 639306006u, 2524620206u,
  11145. 955360345u, 1646776457u,
  11146. 576786501u, 655707039u,
  11147. 2864351838u, 3736264674u,
  11148. 655621239u, 362070173u,
  11149. 1200907897u, 2384379464u,
  11150. 15823708u, 206117476u,
  11151. 3652870937u, 122927134u,
  11152. 1193310960u, 1093099415u,
  11153. 3696538026u, 4112584792u,
  11154. 1834541277u, 845639252u,
  11155. 2069527017u, 547588820u,
  11156. 4178147211u, 2827259351u,
  11157. 1764455305u, 3312003602u,
  11158. 940846775u, 1054995047u,
  11159. 2976960697u, 1934305529u,
  11160. 3095615046u, 3354962706u,
  11161. 2199137382u, 1005722394u,
  11162. 1875867180u, 2064356511u,
  11163. 3363633633u, 2688499147u,
  11164. 4019734130u, 3096333006u,
  11165. 2069509024u, 2906358341u,
  11166. 3247463123u, 4191788132u,
  11167. 2232866485u, 1456016086u,
  11168. 1422674894u, 867282151u,
  11169. 1851386407u, 1268304058u,
  11170. 1612503136u, 1739843072u,
  11171. 134947567u, 2978775774u,
  11172. 2051592101u, 1017127033u,
  11173. 1284167756u, 1090844589u,
  11174. 831688783u, 2079216362u,
  11175. 2079309682u, 1950585801u,
  11176. 1626991196u, 3644714163u,
  11177. 3678110059u, 898470030u,
  11178. 1117570988u, 2517572125u,
  11179. 3916646913u, 3182422972u,
  11180. 3630426828u, 969847973u,
  11181. 2835126238u, 53541366u,
  11182. 3427164640u, 3463937250u,
  11183. 3044785046u, 897322257u,
  11184. 103038235u, 3804506837u,
  11185. 3443872170u, 4185408854u,
  11186. 2557463241u, 4080940424u,
  11187. 3669923099u, 2789619871u,
  11188. 2048168570u, 2429169982u,
  11189. 3174690447u, 2513494106u,
  11190. 3099587829u, 2627855577u,
  11191. 1213061732u, 3143736628u,
  11192. 3482268149u, 1250714337u,
  11193. 3553412672u, 2689632914u,
  11194. 31648125u, 3872383625u,
  11195. 1565760579u, 36665130u,
  11196. 1282106920u, 359361724u,
  11197. 751041229u, 2257179590u,
  11198. 2915361862u, 280819225u,
  11199. 954406473u, 4101682199u,
  11200. 2907818413u, 4254297769u,
  11201. 3493178615u, 3755944354u,
  11202. 3539557658u, 3330196096u,
  11203. 4043533423u, 1134196225u,
  11204. 4177134659u, 127246419u,
  11205. 4213770762u, 1978302978u,
  11206. 2442615581u, 923049607u,
  11207. 1004426206u, 782768297u,
  11208. 2702745496u, 1880389457u,
  11209. 2410586681u, 1430106871u,
  11210. 4103323427u, 3168399477u,
  11211. 201787012u, 3105353527u,
  11212. 3716682375u, 3616334719u,
  11213. 3413209549u, 656672786u,
  11214. 526032790u, 2895072131u,
  11215. 2876965944u, 182894450u,
  11216. 456581318u, 2683752067u,
  11217. 1287916294u, 1270745752u,
  11218. 3877875910u, 3190666241u,
  11219. 3240336907u, 4024807233u,
  11220. 4227999465u, 2389301430u,
  11221. 1681224377u, 1576191191u,
  11222. 3599250276u, 2381111980u,
  11223. 3995044500u, 995595530u,
  11224. 3495321877u, 3956024585u,
  11225. 1611608524u, 3815677453u,
  11226. 1520987487u, 3669102590u,
  11227. 2062334396u, 1656117707u,
  11228. 5457134u, 3234118251u,
  11229. 4242065111u, 596879987u,
  11230. 470187419u, 2688566989u,
  11231. 3259870297u, 660100446u,
  11232. 1042378442u, 2206034096u,
  11233. 442236198u, 2542452448u,
  11234. 493137955u, 392411099u,
  11235. 3111186954u, 438250493u,
  11236. 947967568u, 1234595917u,
  11237. 4230082284u, 2762976773u,
  11238. 421203727u, 3728409592u,
  11239. 2870085764u, 1455086530u,
  11240. 2762099647u, 4011882747u,
  11241. 1785430706u, 3684427488u,
  11242. 1215981925u, 3227517889u,
  11243. 3269061963u, 4037515364u,
  11244. 1749401388u, 2167451566u,
  11245. 3168911474u, 4255057396u,
  11246. 2026092260u, 1736192508u,
  11247. 4123254745u, 2319366806u,
  11248. 3909727042u, 3114708966u,
  11249. 1938800693u, 680793595u,
  11250. 3933041672u, 616863613u,
  11251. 1525265867u, 2808224480u,
  11252. 2122290603u, 1211197714u,
  11253. 1186177814u, 2395325006u,
  11254. 3520488321u, 3979192396u,
  11255. 3540779343u, 4192918639u,
  11256. 1763872074u, 3402419930u,
  11257. 2736030448u, 1120335563u,
  11258. 1698949078u, 3993310631u,
  11259. 2947659998u, 1461045789u,
  11260. 1966048551u, 2228221363u,
  11261. 597941119u, 3498018399u,
  11262. 1441110751u, 2229999711u,
  11263. 393987327u, 454500547u,
  11264. 1222959566u, 567151340u,
  11265. 2496952483u, 1708770195u,
  11266. 3774764786u, 1492844524u,
  11267. 3308300614u, 805568076u,
  11268. 4068812294u, 3404648243u,
  11269. 868414882u, 177406999u,
  11270. 1608110313u, 642061169u,
  11271. 2093999089u, 222470301u,
  11272. 1027515771u, 3131251981u,
  11273. 2851936150u, 4272755262u,
  11274. 2763002551u, 1881527822u,
  11275. 1532845092u, 709643652u,
  11276. 682573592u, 1244104217u,
  11277. 440905170u, 1111321746u,
  11278. 796769556u, 2500467040u,
  11279. 3002618826u, 1112998535u,
  11280. 1188525643u, 4212674512u,
  11281. 1780193104u, 1243644607u,
  11282. 3691719535u, 2958853053u,
  11283. 2813437721u, 4036584207u,
  11284. 466635014u, 2277292580u,
  11285. 4082276003u, 1030800045u,
  11286. 1899531424u, 609466946u,
  11287. 1750863246u, 379050598u,
  11288. 3576413281u, 731493104u,
  11289. 2707384133u, 2289193651u,
  11290. 132259176u, 4115195437u,
  11291. 1769890695u, 2715470335u,
  11292. 3348954692u, 2166575624u,
  11293. 1819263183u, 2028531518u,
  11294. 2154809766u, 3672399742u,
  11295. 1142139448u, 88299682u,
  11296. 76727603u, 4198182186u,
  11297. 2304993586u, 1666387627u,
  11298. 2488475423u, 3832777692u,
  11299. 284366017u, 3359785538u,
  11300. 3469807328u, 2926494787u,
  11301. 1914195188u, 1134129972u,
  11302. 3829072836u, 2493478921u,
  11303. 3738499303u, 3311304980u,
  11304. 726951526u, 911080963u,
  11305. 932916545u, 2235559063u,
  11306. 2909742396u, 1765719309u,
  11307. 465269850u, 3803621553u,
  11308. 1456588655u, 508290328u,
  11309. 1490719640u, 3356513470u,
  11310. 2262196163u, 1451774941u,
  11311. 2908490783u, 251085588u,
  11312. 830410677u, 3172220325u,
  11313. 4039692645u, 1383603170u,
  11314. 3897208579u, 1940535730u,
  11315. 151909546u, 2384458112u,
  11316. };
  11317. // Return false only if offset is -1 and a spot check of 3 hashes all yield 0.
  11318. bool Test(int offset, int len = 0) {
  11319. #undef Check
  11320. #undef IsAlive
  11321. #define Check(x) do { \
  11322. const uint32_t actual = (x), e = expected[index++]; \
  11323. bool ok = actual == e; \
  11324. if (!ok) { \
  11325. cerr << "expected " << hex << e << " but got " << actual << endl; \
  11326. ++errors; \
  11327. } \
  11328. assert(ok); \
  11329. } while (0)
  11330. #define IsAlive(x) do { alive += IsNonZero(x); } while (0)
  11331. // After the following line is where the uses of "Check" and such will go.
  11332. static int index = 0;
  11333. if (offset == -1) { int alive = 0; { uint64_t h = farmhashxo::Hash64WithSeeds(data, len++, SEED0, SEED1); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashxo::Hash64WithSeed(data, len++, SEED); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } { uint64_t h = farmhashxo::Hash64(data, len++); IsAlive(h >> 32); IsAlive((h << 32) >> 32); } len -= 3; return alive > 0; }
  11334. { uint64_t h = farmhashxo::Hash64WithSeeds(data + offset, len, SEED0, SEED1); Check(h >> 32); Check((h << 32) >> 32); }
  11335. { uint64_t h = farmhashxo::Hash64WithSeed(data + offset, len, SEED); Check(h >> 32); Check((h << 32) >> 32); }
  11336. { uint64_t h = farmhashxo::Hash64(data + offset, len); Check(h >> 32); Check((h << 32) >> 32); }
  11337. return true;
  11338. #undef Check
  11339. #undef IsAlive
  11340. }
  11341. int RunTest() {
  11342. Setup();
  11343. int i = 0;
  11344. cout << "Running farmhashxoTest";
  11345. if (!Test(-1)) {
  11346. cout << "... Unavailable\n";
  11347. return NoteErrors();
  11348. }
  11349. // Good. The function is attempting to hash, so run the full test.
  11350. int errors_prior_to_test = errors;
  11351. for ( ; i < kTestSize - 1; i++) {
  11352. Test(i * i, i);
  11353. }
  11354. for ( ; i < kDataSize; i += i / 7) {
  11355. Test(0, i);
  11356. }
  11357. Test(0, kDataSize);
  11358. cout << (errors == errors_prior_to_test ? "... OK\n" : "... Failed\n");
  11359. return NoteErrors();
  11360. }
  11361. #else
  11362. // After the following line is where the code to print hash codes will go.
  11363. void Dump(int offset, int len) {
  11364. { uint64_t h = farmhashxo::Hash64WithSeeds(data + offset, len, SEED0, SEED1); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  11365. { uint64_t h = farmhashxo::Hash64WithSeed(data + offset, len, SEED); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  11366. { uint64_t h = farmhashxo::Hash64(data + offset, len); cout << (h >> 32) << "u, " << ((h << 32) >> 32) << "u," << endl; }
  11367. }
  11368. #endif
  11369. #undef SEED
  11370. #undef SEED1
  11371. #undef SEED0
  11372. } // namespace farmhashxoTest
  11373. #if TESTING
  11374. static int farmhashxoTestResult = farmhashxoTest::RunTest();
  11375. #else
  11376. int main(int argc, char** argv) {
  11377. Setup();
  11378. cout << "uint32_t expected[] = {\n";
  11379. int i = 0;
  11380. for ( ; i < kTestSize - 1; i++) {
  11381. farmhashxoTest::Dump(i * i, i);
  11382. }
  11383. for ( ; i < kDataSize; i += i / 7) {
  11384. farmhashxoTest::Dump(0, i);
  11385. }
  11386. farmhashxoTest::Dump(0, kDataSize);
  11387. cout << "};\n";
  11388. }
  11389. #endif
  11390. #endif // FARMHASHSELFTEST