From 5c43c18573bdb67e9a7b9497c15904a76789a195 Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Fri, 6 Dec 2024 16:39:44 -0500 Subject: [PATCH 01/15] islands router demo work --- examples/islands_router/Cargo.toml | 3 +- examples/islands_router/mock_data.json | 1000 +++++++++++++++++++++ examples/islands_router/public/routing.js | 376 ++++++-- examples/islands_router/src/app.rs | 107 ++- examples/ssr_modes_axum/Cargo.toml | 2 + examples/ssr_modes_axum/src/app.rs | 315 +------ leptos/src/for_loop.rs | 4 +- router/src/flat_router.rs | 99 +- router/src/nested_router.rs | 32 +- tachys/src/view/any_view.rs | 16 + tachys/src/view/keyed.rs | 39 +- tachys/src/view/mod.rs | 3 +- 12 files changed, 1570 insertions(+), 426 deletions(-) create mode 100644 examples/islands_router/mock_data.json diff --git a/examples/islands_router/Cargo.toml b/examples/islands_router/Cargo.toml index 31c8f921a9..d762225b3b 100644 --- a/examples/islands_router/Cargo.toml +++ b/examples/islands_router/Cargo.toml @@ -23,6 +23,7 @@ tower = { version = "0.4.13", optional = true } tower-http = { version = "0.5.2", features = ["fs"], optional = true } tokio = { version = "1.39", features = ["full"], optional = true } wasm-bindgen = "0.2.93" +serde_json = "1.0.133" [features] hydrate = ["leptos/hydrate"] @@ -59,7 +60,7 @@ style-file = "./style.css" # [Optional] Files in the asset-dir will be copied to the site-root directory assets-dir = "public" # The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. -site-addr = "127.0.0.1:3000" +site-addr = "127.0.0.1:3002" # The port to use for automatic reload monitoring reload-port = 3001 # The browserlist query used for optimizing the CSS. diff --git a/examples/islands_router/mock_data.json b/examples/islands_router/mock_data.json new file mode 100644 index 0000000000..7b0717105c --- /dev/null +++ b/examples/islands_router/mock_data.json @@ -0,0 +1,1000 @@ +[{"id":1,"first_name":"Maude","last_name":"Brandi","email":"mbrandi0@admin.ch"}, +{"id":2,"first_name":"Pippy","last_name":"Yule","email":"pyule1@mit.edu"}, +{"id":3,"first_name":"Rodrick","last_name":"Swancock","email":"rswancock2@google.co.uk"}, +{"id":4,"first_name":"Nan","last_name":"Uebel","email":"nuebel3@utexas.edu"}, +{"id":5,"first_name":"Tammi","last_name":"Lyne","email":"tlyne4@cisco.com"}, +{"id":6,"first_name":"Gothart","last_name":"Castagneto","email":"gcastagneto5@zimbio.com"}, +{"id":7,"first_name":"Inez","last_name":"Darley","email":"idarley6@techcrunch.com"}, +{"id":8,"first_name":"Eugenie","last_name":"Lanyon","email":"elanyon7@nba.com"}, +{"id":9,"first_name":"Derry","last_name":"Bovingdon","email":"dbovingdon8@furl.net"}, +{"id":10,"first_name":"Donetta","last_name":"Center","email":"dcenter9@intel.com"}, +{"id":11,"first_name":"Burnard","last_name":"Kuhndel","email":"bkuhndela@cmu.edu"}, +{"id":12,"first_name":"Greer","last_name":"Strachan","email":"gstrachanb@virginia.edu"}, +{"id":13,"first_name":"Dorine","last_name":"Lougheed","email":"dlougheedc@redcross.org"}, +{"id":14,"first_name":"Jayne","last_name":"Geggie","email":"jgeggied@youtu.be"}, +{"id":15,"first_name":"Chelsey","last_name":"Botham","email":"cbothame@cargocollective.com"}, +{"id":16,"first_name":"Emmy","last_name":"Whittier","email":"ewhittierf@delicious.com"}, +{"id":17,"first_name":"Esther","last_name":"Arblaster","email":"earblasterg@cnbc.com"}, +{"id":18,"first_name":"Julio","last_name":"Vannini","email":"jvanninih@sourceforge.net"}, +{"id":19,"first_name":"Zorah","last_name":"Turbefield","email":"zturbefieldi@epa.gov"}, +{"id":20,"first_name":"Les","last_name":"Strutley","email":"lstrutleyj@networkadvertising.org"}, +{"id":21,"first_name":"Dedie","last_name":"Roubeix","email":"droubeixk@linkedin.com"}, +{"id":22,"first_name":"Milzie","last_name":"Doyley","email":"mdoyleyl@youtu.be"}, +{"id":23,"first_name":"Cleopatra","last_name":"Croysdale","email":"ccroysdalem@cdc.gov"}, +{"id":24,"first_name":"Nellie","last_name":"Records","email":"nrecordsn@rediff.com"}, +{"id":25,"first_name":"Michelina","last_name":"Jentzsch","email":"mjentzscho@theguardian.com"}, +{"id":26,"first_name":"Theodosia","last_name":"De Vries","email":"tdevriesp@unc.edu"}, +{"id":27,"first_name":"Maryanna","last_name":"Jirieck","email":"mjirieckq@meetup.com"}, +{"id":28,"first_name":"Dreddy","last_name":"Labden","email":"dlabdenr@feedburner.com"}, +{"id":29,"first_name":"Glynda","last_name":"Geibel","email":"ggeibels@yelp.com"}, +{"id":30,"first_name":"Yulma","last_name":"Giroldo","email":"ygiroldot@google.co.jp"}, +{"id":31,"first_name":"Michele","last_name":"Jennions","email":"mjennionsu@meetup.com"}, +{"id":32,"first_name":"Hyatt","last_name":"Picford","email":"hpicfordv@cornell.edu"}, +{"id":33,"first_name":"Jehanna","last_name":"Frunks","email":"jfrunksw@slashdot.org"}, +{"id":34,"first_name":"Gustavo","last_name":"Soda","email":"gsodax@scientificamerican.com"}, +{"id":35,"first_name":"Rianon","last_name":"Lamey","email":"rlameyy@histats.com"}, +{"id":36,"first_name":"Winston","last_name":"Pitcher","email":"wpitcherz@sphinn.com"}, +{"id":37,"first_name":"Schuyler","last_name":"Rewcassell","email":"srewcassell10@phoca.cz"}, +{"id":38,"first_name":"Garald","last_name":"Thoumas","email":"gthoumas11@upenn.edu"}, +{"id":39,"first_name":"Mateo","last_name":"Prisk","email":"mprisk12@godaddy.com"}, +{"id":40,"first_name":"Trudy","last_name":"Scarratt","email":"tscarratt13@baidu.com"}, +{"id":41,"first_name":"Idalia","last_name":"Rawes","email":"irawes14@intel.com"}, +{"id":42,"first_name":"Sarette","last_name":"Barkly","email":"sbarkly15@youtu.be"}, +{"id":43,"first_name":"Ariel","last_name":"Brunroth","email":"abrunroth16@tinyurl.com"}, +{"id":44,"first_name":"Fonz","last_name":"Duigan","email":"fduigan17@issuu.com"}, +{"id":45,"first_name":"Adeline","last_name":"Cashell","email":"acashell18@house.gov"}, +{"id":46,"first_name":"Kurt","last_name":"Brittle","email":"kbrittle19@mysql.com"}, +{"id":47,"first_name":"Ginni","last_name":"Richardes","email":"grichardes1a@phpbb.com"}, +{"id":48,"first_name":"Christina","last_name":"Wheway","email":"cwheway1b@wisc.edu"}, +{"id":49,"first_name":"Erasmus","last_name":"Vickors","email":"evickors1c@dell.com"}, +{"id":50,"first_name":"Lillian","last_name":"Valentin","email":"lvalentin1d@usa.gov"}, +{"id":51,"first_name":"Rozalie","last_name":"Abel","email":"rabel1e@walmart.com"}, +{"id":52,"first_name":"Berni","last_name":"Dougary","email":"bdougary1f@ted.com"}, +{"id":53,"first_name":"Mendel","last_name":"Meaddowcroft","email":"mmeaddowcroft1g@csmonitor.com"}, +{"id":54,"first_name":"Lay","last_name":"Tedder","email":"ltedder1h@home.pl"}, +{"id":55,"first_name":"Danica","last_name":"Kenrack","email":"dkenrack1i@nhs.uk"}, +{"id":56,"first_name":"Reuben","last_name":"De Benedictis","email":"rdebenedictis1j@cnbc.com"}, +{"id":57,"first_name":"Larine","last_name":"Woffenden","email":"lwoffenden1k@goo.ne.jp"}, +{"id":58,"first_name":"Lilian","last_name":"Haddrill","email":"lhaddrill1l@techcrunch.com"}, +{"id":59,"first_name":"Frank","last_name":"Cominello","email":"fcominello1m@phpbb.com"}, +{"id":60,"first_name":"Allyce","last_name":"Pakenham","email":"apakenham1n@statcounter.com"}, +{"id":61,"first_name":"Veda","last_name":"Pryn","email":"vpryn1o@squidoo.com"}, +{"id":62,"first_name":"Heddie","last_name":"Tinston","email":"htinston1p@is.gd"}, +{"id":63,"first_name":"Lorelle","last_name":"Radbone","email":"lradbone1q@usgs.gov"}, +{"id":64,"first_name":"Gustavo","last_name":"Jans","email":"gjans1r@microsoft.com"}, +{"id":65,"first_name":"Karita","last_name":"Beeching","email":"kbeeching1s@skype.com"}, +{"id":66,"first_name":"Damian","last_name":"Bellhanger","email":"dbellhanger1t@bbb.org"}, +{"id":67,"first_name":"Kinna","last_name":"Cotherill","email":"kcotherill1u@angelfire.com"}, +{"id":68,"first_name":"Janeva","last_name":"Varndall","email":"jvarndall1v@vk.com"}, +{"id":69,"first_name":"Ema","last_name":"O'Glassane","email":"eoglassane1w@shutterfly.com"}, +{"id":70,"first_name":"Bourke","last_name":"Cossum","email":"bcossum1x@chron.com"}, +{"id":71,"first_name":"Berk","last_name":"Tomasino","email":"btomasino1y@fotki.com"}, +{"id":72,"first_name":"Shepherd","last_name":"Lyness","email":"slyness1z@csmonitor.com"}, +{"id":73,"first_name":"Christoph","last_name":"Warrener","email":"cwarrener20@gmpg.org"}, +{"id":74,"first_name":"Artus","last_name":"Bantock","email":"abantock21@who.int"}, +{"id":75,"first_name":"Bryana","last_name":"Mixer","email":"bmixer22@nih.gov"}, +{"id":76,"first_name":"Blithe","last_name":"Brigstock","email":"bbrigstock23@goodreads.com"}, +{"id":77,"first_name":"Krispin","last_name":"Gothrup","email":"kgothrup24@tuttocitta.it"}, +{"id":78,"first_name":"Helen-elizabeth","last_name":"Hardinge","email":"hhardinge25@indiatimes.com"}, +{"id":79,"first_name":"Zachariah","last_name":"Burberye","email":"zburberye26@va.gov"}, +{"id":80,"first_name":"Cheri","last_name":"Candey","email":"ccandey27@kickstarter.com"}, +{"id":81,"first_name":"Mozes","last_name":"Mityushin","email":"mmityushin28@vk.com"}, +{"id":82,"first_name":"Hyacinthie","last_name":"Stirrip","email":"hstirrip29@mozilla.com"}, +{"id":83,"first_name":"Hestia","last_name":"Full","email":"hfull2a@cornell.edu"}, +{"id":84,"first_name":"Betty","last_name":"Doogan","email":"bdoogan2b@paginegialle.it"}, +{"id":85,"first_name":"Rube","last_name":"Elcum","email":"relcum2c@hatena.ne.jp"}, +{"id":86,"first_name":"Ulrick","last_name":"Nowakowska","email":"unowakowska2d@newyorker.com"}, +{"id":87,"first_name":"Susanne","last_name":"Bannell","email":"sbannell2e@house.gov"}, +{"id":88,"first_name":"Carlotta","last_name":"de Bullion","email":"cdebullion2f@wikispaces.com"}, +{"id":89,"first_name":"Conny","last_name":"Rodgerson","email":"crodgerson2g@nsw.gov.au"}, +{"id":90,"first_name":"Anthony","last_name":"Stovine","email":"astovine2h@trellian.com"}, +{"id":91,"first_name":"Trula","last_name":"Mangenot","email":"tmangenot2i@example.com"}, +{"id":92,"first_name":"Urbain","last_name":"Ogglebie","email":"uogglebie2j@wix.com"}, +{"id":93,"first_name":"Robena","last_name":"Yve","email":"ryve2k@sciencedaily.com"}, +{"id":94,"first_name":"Axel","last_name":"McTrustam","email":"amctrustam2l@ucoz.ru"}, +{"id":95,"first_name":"Link","last_name":"Klagges","email":"lklagges2m@foxnews.com"}, +{"id":96,"first_name":"Yoko","last_name":"Percifer","email":"ypercifer2n@indiegogo.com"}, +{"id":97,"first_name":"Rheba","last_name":"Heaford","email":"rheaford2o@ed.gov"}, +{"id":98,"first_name":"Dorolisa","last_name":"Seabert","email":"dseabert2p@pen.io"}, +{"id":99,"first_name":"Asher","last_name":"Ffrench","email":"affrench2q@miitbeian.gov.cn"}, +{"id":100,"first_name":"Inga","last_name":"Skeen","email":"iskeen2r@moonfruit.com"}, +{"id":101,"first_name":"Dov","last_name":"Nevinson","email":"dnevinson2s@dedecms.com"}, +{"id":102,"first_name":"Kirsten","last_name":"Culpan","email":"kculpan2t@globo.com"}, +{"id":103,"first_name":"Prudence","last_name":"Bysshe","email":"pbysshe2u@auda.org.au"}, +{"id":104,"first_name":"Desdemona","last_name":"Belverstone","email":"dbelverstone2v@ihg.com"}, +{"id":105,"first_name":"Adiana","last_name":"Arnott","email":"aarnott2w@icio.us"}, +{"id":106,"first_name":"Christoper","last_name":"Sutter","email":"csutter2x@jimdo.com"}, +{"id":107,"first_name":"Guinevere","last_name":"Morton","email":"gmorton2y@drupal.org"}, +{"id":108,"first_name":"Abey","last_name":"Prester","email":"aprester2z@guardian.co.uk"}, +{"id":109,"first_name":"Reynold","last_name":"Frigout","email":"rfrigout30@digg.com"}, +{"id":110,"first_name":"Beverlie","last_name":"Macek","email":"bmacek31@yahoo.com"}, +{"id":111,"first_name":"Marjory","last_name":"Spelling","email":"mspelling32@posterous.com"}, +{"id":112,"first_name":"Romola","last_name":"Penna","email":"rpenna33@devhub.com"}, +{"id":113,"first_name":"Junette","last_name":"Estabrook","email":"jestabrook34@prweb.com"}, +{"id":114,"first_name":"Allen","last_name":"Lawey","email":"alawey35@marketwatch.com"}, +{"id":115,"first_name":"Yard","last_name":"Solon","email":"ysolon36@fotki.com"}, +{"id":116,"first_name":"Hubert","last_name":"Life","email":"hlife37@w3.org"}, +{"id":117,"first_name":"Patin","last_name":"Prestner","email":"pprestner38@flavors.me"}, +{"id":118,"first_name":"Hedda","last_name":"MacKniely","email":"hmackniely39@blog.com"}, +{"id":119,"first_name":"Rube","last_name":"Ceyssen","email":"rceyssen3a@businesswire.com"}, +{"id":120,"first_name":"Clementine","last_name":"ffrench Beytagh","email":"cffrenchbeytagh3b@surveymonkey.com"}, +{"id":121,"first_name":"Rutter","last_name":"Sidebotham","email":"rsidebotham3c@webs.com"}, +{"id":122,"first_name":"Standford","last_name":"McGurn","email":"smcgurn3d@1688.com"}, +{"id":123,"first_name":"Nelie","last_name":"Grebert","email":"ngrebert3e@bluehost.com"}, +{"id":124,"first_name":"Milly","last_name":"Danielsohn","email":"mdanielsohn3f@topsy.com"}, +{"id":125,"first_name":"Debor","last_name":"Pighills","email":"dpighills3g@google.es"}, +{"id":126,"first_name":"Gal","last_name":"Allebone","email":"gallebone3h@amazonaws.com"}, +{"id":127,"first_name":"Kerwinn","last_name":"Gheorghescu","email":"kgheorghescu3i@aol.com"}, +{"id":128,"first_name":"Essa","last_name":"Fifield","email":"efifield3j@bbb.org"}, +{"id":129,"first_name":"Philippine","last_name":"Daens","email":"pdaens3k@boston.com"}, +{"id":130,"first_name":"Timmy","last_name":"Colbeck","email":"tcolbeck3l@answers.com"}, +{"id":131,"first_name":"Raffarty","last_name":"Liverock","email":"rliverock3m@bandcamp.com"}, +{"id":132,"first_name":"Valeria","last_name":"Marqyes","email":"vmarqyes3n@1688.com"}, +{"id":133,"first_name":"Neille","last_name":"Seiler","email":"nseiler3o@skyrock.com"}, +{"id":134,"first_name":"Anet","last_name":"Kelle","email":"akelle3p@opensource.org"}, +{"id":135,"first_name":"Barnebas","last_name":"Alleway","email":"balleway3q@goodreads.com"}, +{"id":136,"first_name":"Valeria","last_name":"Chrippes","email":"vchrippes3r@wunderground.com"}, +{"id":137,"first_name":"Duffy","last_name":"Hainge","email":"dhainge3s@posterous.com"}, +{"id":138,"first_name":"Gweneth","last_name":"Silberschatz","email":"gsilberschatz3t@bing.com"}, +{"id":139,"first_name":"Fredelia","last_name":"Stodd","email":"fstodd3u@mit.edu"}, +{"id":140,"first_name":"Buckie","last_name":"MacGinley","email":"bmacginley3v@irs.gov"}, +{"id":141,"first_name":"Ardyth","last_name":"Ewbanck","email":"aewbanck3w@cisco.com"}, +{"id":142,"first_name":"Darice","last_name":"Martinolli","email":"dmartinolli3x@seesaa.net"}, +{"id":143,"first_name":"Bucky","last_name":"Chivrall","email":"bchivrall3y@blogger.com"}, +{"id":144,"first_name":"Freida","last_name":"Labrom","email":"flabrom3z@github.io"}, +{"id":145,"first_name":"Huntlee","last_name":"Comelini","email":"hcomelini40@army.mil"}, +{"id":146,"first_name":"Lester","last_name":"Farrah","email":"lfarrah41@princeton.edu"}, +{"id":147,"first_name":"Chickie","last_name":"Lyddon","email":"clyddon42@smh.com.au"}, +{"id":148,"first_name":"Lenette","last_name":"McGaffey","email":"lmcgaffey43@auda.org.au"}, +{"id":149,"first_name":"Cleavland","last_name":"Balassa","email":"cbalassa44@squidoo.com"}, +{"id":150,"first_name":"Towney","last_name":"Wessell","email":"twessell45@bloglovin.com"}, +{"id":151,"first_name":"Marlee","last_name":"Sahlstrom","email":"msahlstrom46@51.la"}, +{"id":152,"first_name":"Tadd","last_name":"Showalter","email":"tshowalter47@irs.gov"}, +{"id":153,"first_name":"Isabeau","last_name":"Smalcombe","email":"ismalcombe48@goo.gl"}, +{"id":154,"first_name":"Aprilette","last_name":"Pyett","email":"apyett49@taobao.com"}, +{"id":155,"first_name":"Bendite","last_name":"Odney","email":"bodney4a@123-reg.co.uk"}, +{"id":156,"first_name":"Temp","last_name":"Scherer","email":"tscherer4b@phoca.cz"}, +{"id":157,"first_name":"Barris","last_name":"Ferrarotti","email":"bferrarotti4c@bloomberg.com"}, +{"id":158,"first_name":"Floris","last_name":"Loudiane","email":"floudiane4d@bbb.org"}, +{"id":159,"first_name":"Ives","last_name":"MacArdle","email":"imacardle4e@phoca.cz"}, +{"id":160,"first_name":"Briano","last_name":"Antonsen","email":"bantonsen4f@jimdo.com"}, +{"id":161,"first_name":"Rea","last_name":"McCumskay","email":"rmccumskay4g@netvibes.com"}, +{"id":162,"first_name":"Madlen","last_name":"Karppi","email":"mkarppi4h@prweb.com"}, +{"id":163,"first_name":"Hillie","last_name":"Ollerenshaw","email":"hollerenshaw4i@mapquest.com"}, +{"id":164,"first_name":"Laure","last_name":"Giacomazzo","email":"lgiacomazzo4j@canalblog.com"}, +{"id":165,"first_name":"Shanie","last_name":"Worsam","email":"sworsam4k@google.ca"}, +{"id":166,"first_name":"Bibbie","last_name":"Trosdall","email":"btrosdall4l@list-manage.com"}, +{"id":167,"first_name":"Marcelia","last_name":"Symes","email":"msymes4m@facebook.com"}, +{"id":168,"first_name":"Jolene","last_name":"Roja","email":"jroja4n@mail.ru"}, +{"id":169,"first_name":"Colas","last_name":"Leal","email":"cleal4o@ustream.tv"}, +{"id":170,"first_name":"Oby","last_name":"Faichnie","email":"ofaichnie4p@goo.gl"}, +{"id":171,"first_name":"Henry","last_name":"Willows","email":"hwillows4q@alibaba.com"}, +{"id":172,"first_name":"Matilda","last_name":"Korf","email":"mkorf4r@bbb.org"}, +{"id":173,"first_name":"Hiram","last_name":"Balls","email":"hballs4s@nba.com"}, +{"id":174,"first_name":"Terri-jo","last_name":"Atrill","email":"tatrill4t@so-net.ne.jp"}, +{"id":175,"first_name":"Tana","last_name":"Ciccarello","email":"tciccarello4u@cisco.com"}, +{"id":176,"first_name":"Abbie","last_name":"Rohfsen","email":"arohfsen4v@japanpost.jp"}, +{"id":177,"first_name":"Dominga","last_name":"Johanssen","email":"djohanssen4w@phoca.cz"}, +{"id":178,"first_name":"Osmond","last_name":"Ryland","email":"oryland4x@51.la"}, +{"id":179,"first_name":"Waverly","last_name":"Butting","email":"wbutting4y@4shared.com"}, +{"id":180,"first_name":"Colin","last_name":"Antosch","email":"cantosch4z@unblog.fr"}, +{"id":181,"first_name":"Filide","last_name":"Birks","email":"fbirks50@domainmarket.com"}, +{"id":182,"first_name":"Avery","last_name":"Kruschov","email":"akruschov51@answers.com"}, +{"id":183,"first_name":"Doralynne","last_name":"Mosten","email":"dmosten52@discovery.com"}, +{"id":184,"first_name":"Dicky","last_name":"Muggeridge","email":"dmuggeridge53@163.com"}, +{"id":185,"first_name":"Tucky","last_name":"Tennick","email":"ttennick54@gnu.org"}, +{"id":186,"first_name":"Jareb","last_name":"Hews","email":"jhews55@twitpic.com"}, +{"id":187,"first_name":"Guthrie","last_name":"Castro","email":"gcastro56@berkeley.edu"}, +{"id":188,"first_name":"Rayna","last_name":"Howett","email":"rhowett57@theguardian.com"}, +{"id":189,"first_name":"Linnet","last_name":"Painter","email":"lpainter58@apache.org"}, +{"id":190,"first_name":"Gisele","last_name":"Varcoe","email":"gvarcoe59@timesonline.co.uk"}, +{"id":191,"first_name":"Isabelita","last_name":"Klimpke","email":"iklimpke5a@technorati.com"}, +{"id":192,"first_name":"Ofilia","last_name":"Kondrachenko","email":"okondrachenko5b@github.com"}, +{"id":193,"first_name":"Margaretta","last_name":"Costello","email":"mcostello5c@nifty.com"}, +{"id":194,"first_name":"Elli","last_name":"Sudell","email":"esudell5d@stumbleupon.com"}, +{"id":195,"first_name":"Carie","last_name":"Preto","email":"cpreto5e@prnewswire.com"}, +{"id":196,"first_name":"Kinny","last_name":"Gredden","email":"kgredden5f@alexa.com"}, +{"id":197,"first_name":"Grethel","last_name":"Warwicker","email":"gwarwicker5g@fda.gov"}, +{"id":198,"first_name":"Gerti","last_name":"Kippling","email":"gkippling5h@mayoclinic.com"}, +{"id":199,"first_name":"Nanice","last_name":"Sirrell","email":"nsirrell5i@paginegialle.it"}, +{"id":200,"first_name":"Coraline","last_name":"Readie","email":"creadie5j@joomla.org"}, +{"id":201,"first_name":"Emmanuel","last_name":"Bickerstaff","email":"ebickerstaff5k@businessinsider.com"}, +{"id":202,"first_name":"Heath","last_name":"McNeilley","email":"hmcneilley5l@soundcloud.com"}, +{"id":203,"first_name":"Torey","last_name":"Lortz","email":"tlortz5m@printfriendly.com"}, +{"id":204,"first_name":"Melodee","last_name":"McWhan","email":"mmcwhan5n@tinyurl.com"}, +{"id":205,"first_name":"Selie","last_name":"Llywarch","email":"sllywarch5o@usda.gov"}, +{"id":206,"first_name":"Britt","last_name":"Shore","email":"bshore5p@unesco.org"}, +{"id":207,"first_name":"Floyd","last_name":"Hairyes","email":"fhairyes5q@sphinn.com"}, +{"id":208,"first_name":"Maris","last_name":"Fretter","email":"mfretter5r@umich.edu"}, +{"id":209,"first_name":"Andrey","last_name":"MacCaughey","email":"amaccaughey5s@blinklist.com"}, +{"id":210,"first_name":"Reena","last_name":"Kiledal","email":"rkiledal5t@blogs.com"}, +{"id":211,"first_name":"Adey","last_name":"Molohan","email":"amolohan5u@yale.edu"}, +{"id":212,"first_name":"Eddie","last_name":"Simner","email":"esimner5v@purevolume.com"}, +{"id":213,"first_name":"Eldon","last_name":"Dregan","email":"edregan5w@nytimes.com"}, +{"id":214,"first_name":"Terencio","last_name":"Cordell","email":"tcordell5x@answers.com"}, +{"id":215,"first_name":"Barbra","last_name":"Matzkaitis","email":"bmatzkaitis5y@nyu.edu"}, +{"id":216,"first_name":"Agathe","last_name":"Filler","email":"afiller5z@etsy.com"}, +{"id":217,"first_name":"Jenine","last_name":"Adds","email":"jadds60@squarespace.com"}, +{"id":218,"first_name":"Kathy","last_name":"Lampbrecht","email":"klampbrecht61@t-online.de"}, +{"id":219,"first_name":"Demetri","last_name":"Godfroy","email":"dgodfroy62@ibm.com"}, +{"id":220,"first_name":"Katuscha","last_name":"Renon","email":"krenon63@friendfeed.com"}, +{"id":221,"first_name":"Claudian","last_name":"Devenport","email":"cdevenport64@godaddy.com"}, +{"id":222,"first_name":"Jenica","last_name":"Kornilov","email":"jkornilov65@nifty.com"}, +{"id":223,"first_name":"Grissel","last_name":"McMeeking","email":"gmcmeeking66@boston.com"}, +{"id":224,"first_name":"Andy","last_name":"Rushforth","email":"arushforth67@pcworld.com"}, +{"id":225,"first_name":"Rana","last_name":"Ferrino","email":"rferrino68@deviantart.com"}, +{"id":226,"first_name":"Celie","last_name":"Schenkel","email":"cschenkel69@cargocollective.com"}, +{"id":227,"first_name":"Doe","last_name":"Chadwyck","email":"dchadwyck6a@cargocollective.com"}, +{"id":228,"first_name":"Amandy","last_name":"Marmon","email":"amarmon6b@de.vu"}, +{"id":229,"first_name":"Aliza","last_name":"Haggeth","email":"ahaggeth6c@ibm.com"}, +{"id":230,"first_name":"Velma","last_name":"Olner","email":"volner6d@house.gov"}, +{"id":231,"first_name":"Bent","last_name":"Ayllett","email":"bayllett6e@google.com.hk"}, +{"id":232,"first_name":"Parrnell","last_name":"Walker","email":"pwalker6f@irs.gov"}, +{"id":233,"first_name":"Mickie","last_name":"Nossent","email":"mnossent6g@elegantthemes.com"}, +{"id":234,"first_name":"Sawyer","last_name":"Tranter","email":"stranter6h@usa.gov"}, +{"id":235,"first_name":"Bernetta","last_name":"Twine","email":"btwine6i@mapy.cz"}, +{"id":236,"first_name":"Richard","last_name":"Kerss","email":"rkerss6j@harvard.edu"}, +{"id":237,"first_name":"Margo","last_name":"Danilov","email":"mdanilov6k@clickbank.net"}, +{"id":238,"first_name":"Willem","last_name":"Sheen","email":"wsheen6l@feedburner.com"}, +{"id":239,"first_name":"Dukey","last_name":"Regnard","email":"dregnard6m@opensource.org"}, +{"id":240,"first_name":"Wynnie","last_name":"Manilove","email":"wmanilove6n@themeforest.net"}, +{"id":241,"first_name":"Hartley","last_name":"Tungay","email":"htungay6o@rambler.ru"}, +{"id":242,"first_name":"Brena","last_name":"Yaneev","email":"byaneev6p@java.com"}, +{"id":243,"first_name":"Fred","last_name":"Leaf","email":"fleaf6q@usatoday.com"}, +{"id":244,"first_name":"Morna","last_name":"Beardsworth","email":"mbeardsworth6r@kickstarter.com"}, +{"id":245,"first_name":"Griffin","last_name":"Kell","email":"gkell6s@github.io"}, +{"id":246,"first_name":"Ozzie","last_name":"Picford","email":"opicford6t@instagram.com"}, +{"id":247,"first_name":"Carson","last_name":"Andrivot","email":"candrivot6u@1und1.de"}, +{"id":248,"first_name":"Caressa","last_name":"Kupis","email":"ckupis6v@sakura.ne.jp"}, +{"id":249,"first_name":"Philly","last_name":"Knowlys","email":"pknowlys6w@army.mil"}, +{"id":250,"first_name":"Nady","last_name":"Rolling","email":"nrolling6x@lulu.com"}, +{"id":251,"first_name":"Albertina","last_name":"Spurdle","email":"aspurdle6y@pinterest.com"}, +{"id":252,"first_name":"Brittne","last_name":"Tamlett","email":"btamlett6z@princeton.edu"}, +{"id":253,"first_name":"Biddy","last_name":"Station","email":"bstation70@altervista.org"}, +{"id":254,"first_name":"Estelle","last_name":"Swaden","email":"eswaden71@nih.gov"}, +{"id":255,"first_name":"Dael","last_name":"Noyce","email":"dnoyce72@europa.eu"}, +{"id":256,"first_name":"Verne","last_name":"Tomasi","email":"vtomasi73@pinterest.com"}, +{"id":257,"first_name":"Toinette","last_name":"Adame","email":"tadame74@csmonitor.com"}, +{"id":258,"first_name":"Teri","last_name":"Karolewski","email":"tkarolewski75@exblog.jp"}, +{"id":259,"first_name":"Theo","last_name":"Weildish","email":"tweildish76@hexun.com"}, +{"id":260,"first_name":"Eloise","last_name":"McLafferty","email":"emclafferty77@prnewswire.com"}, +{"id":261,"first_name":"Pepita","last_name":"Fontel","email":"pfontel78@chronoengine.com"}, +{"id":262,"first_name":"Valentine","last_name":"Gerry","email":"vgerry79@slashdot.org"}, +{"id":263,"first_name":"Fanni","last_name":"Goodbairn","email":"fgoodbairn7a@elpais.com"}, +{"id":264,"first_name":"Esra","last_name":"Troppmann","email":"etroppmann7b@phoca.cz"}, +{"id":265,"first_name":"Carlynn","last_name":"Vorley","email":"cvorley7c@uiuc.edu"}, +{"id":266,"first_name":"Mellie","last_name":"McLeoid","email":"mmcleoid7d@mit.edu"}, +{"id":267,"first_name":"Gaile","last_name":"Bucke","email":"gbucke7e@alexa.com"}, +{"id":268,"first_name":"Sherye","last_name":"Sheahan","email":"ssheahan7f@parallels.com"}, +{"id":269,"first_name":"Norean","last_name":"Desport","email":"ndesport7g@taobao.com"}, +{"id":270,"first_name":"Ugo","last_name":"Kernell","email":"ukernell7h@csmonitor.com"}, +{"id":271,"first_name":"Base","last_name":"Cullinane","email":"bcullinane7i@indiegogo.com"}, +{"id":272,"first_name":"Alan","last_name":"Godmar","email":"agodmar7j@fc2.com"}, +{"id":273,"first_name":"Olly","last_name":"Wellstood","email":"owellstood7k@friendfeed.com"}, +{"id":274,"first_name":"Reuben","last_name":"Aveyard","email":"raveyard7l@lycos.com"}, +{"id":275,"first_name":"Richmond","last_name":"Broadberrie","email":"rbroadberrie7m@facebook.com"}, +{"id":276,"first_name":"Maressa","last_name":"Carlett","email":"mcarlett7n@bizjournals.com"}, +{"id":277,"first_name":"Marina","last_name":"Sprasen","email":"msprasen7o@dropbox.com"}, +{"id":278,"first_name":"Winnie","last_name":"Ostridge","email":"wostridge7p@ted.com"}, +{"id":279,"first_name":"Briney","last_name":"Rosenschein","email":"brosenschein7q@macromedia.com"}, +{"id":280,"first_name":"Heidie","last_name":"Yeldon","email":"hyeldon7r@parallels.com"}, +{"id":281,"first_name":"Addie","last_name":"Coldicott","email":"acoldicott7s@eventbrite.com"}, +{"id":282,"first_name":"Aubrette","last_name":"Doswell","email":"adoswell7t@imgur.com"}, +{"id":283,"first_name":"Rouvin","last_name":"Kassman","email":"rkassman7u@tinyurl.com"}, +{"id":284,"first_name":"Mitchell","last_name":"Pietzke","email":"mpietzke7v@wunderground.com"}, +{"id":285,"first_name":"Eadmund","last_name":"Rawstron","email":"erawstron7w@yelp.com"}, +{"id":286,"first_name":"Corri","last_name":"Matyasik","email":"cmatyasik7x@weibo.com"}, +{"id":287,"first_name":"Chuck","last_name":"Blandamere","email":"cblandamere7y@google.cn"}, +{"id":288,"first_name":"Nari","last_name":"Edmondson","email":"nedmondson7z@cnbc.com"}, +{"id":289,"first_name":"Valentine","last_name":"Sivyour","email":"vsivyour80@reverbnation.com"}, +{"id":290,"first_name":"Darryl","last_name":"Hawket","email":"dhawket81@pcworld.com"}, +{"id":291,"first_name":"Teddie","last_name":"Prosek","email":"tprosek82@odnoklassniki.ru"}, +{"id":292,"first_name":"Chloris","last_name":"Linder","email":"clinder83@instagram.com"}, +{"id":293,"first_name":"Lonnie","last_name":"Glede","email":"lglede84@taobao.com"}, +{"id":294,"first_name":"Denise","last_name":"Deakin","email":"ddeakin85@si.edu"}, +{"id":295,"first_name":"Ruprecht","last_name":"Sandcroft","email":"rsandcroft86@abc.net.au"}, +{"id":296,"first_name":"Zorah","last_name":"Patridge","email":"zpatridge87@freewebs.com"}, +{"id":297,"first_name":"Abigail","last_name":"Chatain","email":"achatain88@google.cn"}, +{"id":298,"first_name":"Neala","last_name":"Osichev","email":"nosichev89@hostgator.com"}, +{"id":299,"first_name":"Debora","last_name":"Crocetto","email":"dcrocetto8a@1und1.de"}, +{"id":300,"first_name":"Dall","last_name":"Labeuil","email":"dlabeuil8b@ucsd.edu"}, +{"id":301,"first_name":"Bunny","last_name":"McSperrin","email":"bmcsperrin8c@hubpages.com"}, +{"id":302,"first_name":"Marianne","last_name":"Sabbin","email":"msabbin8d@hc360.com"}, +{"id":303,"first_name":"Anette","last_name":"Wickersley","email":"awickersley8e@businesswire.com"}, +{"id":304,"first_name":"Millisent","last_name":"Heinemann","email":"mheinemann8f@ameblo.jp"}, +{"id":305,"first_name":"Kala","last_name":"Attock","email":"kattock8g@theatlantic.com"}, +{"id":306,"first_name":"Meriel","last_name":"Vasyukhin","email":"mvasyukhin8h@linkedin.com"}, +{"id":307,"first_name":"Julianne","last_name":"Baudou","email":"jbaudou8i@cbc.ca"}, +{"id":308,"first_name":"Pryce","last_name":"Landal","email":"plandal8j@myspace.com"}, +{"id":309,"first_name":"Nerissa","last_name":"Dreghorn","email":"ndreghorn8k@usda.gov"}, +{"id":310,"first_name":"Clyve","last_name":"Soldner","email":"csoldner8l@bluehost.com"}, +{"id":311,"first_name":"Hadlee","last_name":"Syplus","email":"hsyplus8m@auda.org.au"}, +{"id":312,"first_name":"Prudi","last_name":"Merkel","email":"pmerkel8n@hao123.com"}, +{"id":313,"first_name":"Zebulon","last_name":"Denisyev","email":"zdenisyev8o@parallels.com"}, +{"id":314,"first_name":"Leopold","last_name":"Laddle","email":"lladdle8p@si.edu"}, +{"id":315,"first_name":"Danella","last_name":"Aymes","email":"daymes8q@earthlink.net"}, +{"id":316,"first_name":"Murdock","last_name":"De Ath","email":"mdeath8r@naver.com"}, +{"id":317,"first_name":"Umeko","last_name":"Feavearyear","email":"ufeavearyear8s@youtube.com"}, +{"id":318,"first_name":"Valli","last_name":"Neary","email":"vneary8t@vimeo.com"}, +{"id":319,"first_name":"Kendell","last_name":"Blaby","email":"kblaby8u@tuttocitta.it"}, +{"id":320,"first_name":"Ahmad","last_name":"Tate","email":"atate8v@friendfeed.com"}, +{"id":321,"first_name":"Cullan","last_name":"Christofol","email":"cchristofol8w@hao123.com"}, +{"id":322,"first_name":"Nolan","last_name":"Betser","email":"nbetser8x@github.io"}, +{"id":323,"first_name":"Vachel","last_name":"Burrage","email":"vburrage8y@cargocollective.com"}, +{"id":324,"first_name":"Gigi","last_name":"McCaughran","email":"gmccaughran8z@fda.gov"}, +{"id":325,"first_name":"Leanora","last_name":"Epple","email":"lepple90@stanford.edu"}, +{"id":326,"first_name":"Kathi","last_name":"Yearnes","email":"kyearnes91@sfgate.com"}, +{"id":327,"first_name":"Tadio","last_name":"Salleir","email":"tsalleir92@a8.net"}, +{"id":328,"first_name":"Kev","last_name":"Mayell","email":"kmayell93@weibo.com"}, +{"id":329,"first_name":"Clarissa","last_name":"Hartley","email":"chartley94@networksolutions.com"}, +{"id":330,"first_name":"Cindie","last_name":"Skyme","email":"cskyme95@etsy.com"}, +{"id":331,"first_name":"Timoteo","last_name":"Wieprecht","email":"twieprecht96@dion.ne.jp"}, +{"id":332,"first_name":"Aloise","last_name":"Parres","email":"aparres97@infoseek.co.jp"}, +{"id":333,"first_name":"Ezri","last_name":"Jacobsen","email":"ejacobsen98@google.de"}, +{"id":334,"first_name":"Lewie","last_name":"Ambroz","email":"lambroz99@youku.com"}, +{"id":335,"first_name":"Kerwin","last_name":"Ceney","email":"kceney9a@comsenz.com"}, +{"id":336,"first_name":"Frederich","last_name":"Crolly","email":"fcrolly9b@shareasale.com"}, +{"id":337,"first_name":"Sayer","last_name":"Matanin","email":"smatanin9c@newsvine.com"}, +{"id":338,"first_name":"Jennifer","last_name":"Vasyatkin","email":"jvasyatkin9d@chronoengine.com"}, +{"id":339,"first_name":"Nicky","last_name":"Heinsh","email":"nheinsh9e@technorati.com"}, +{"id":340,"first_name":"Neda","last_name":"Lanon","email":"nlanon9f@toplist.cz"}, +{"id":341,"first_name":"Elbertine","last_name":"Larkcum","email":"elarkcum9g@a8.net"}, +{"id":342,"first_name":"Whitby","last_name":"Farrell","email":"wfarrell9h@dailymail.co.uk"}, +{"id":343,"first_name":"Dun","last_name":"Mackieson","email":"dmackieson9i@weebly.com"}, +{"id":344,"first_name":"Krishna","last_name":"Tacon","email":"ktacon9j@w3.org"}, +{"id":345,"first_name":"Dyna","last_name":"Sneezum","email":"dsneezum9k@sfgate.com"}, +{"id":346,"first_name":"Gardner","last_name":"Habercham","email":"ghabercham9l@goodreads.com"}, +{"id":347,"first_name":"Kalil","last_name":"Reinmar","email":"kreinmar9m@google.ru"}, +{"id":348,"first_name":"Karly","last_name":"Cribbins","email":"kcribbins9n@ustream.tv"}, +{"id":349,"first_name":"Jeanne","last_name":"Easen","email":"jeasen9o@time.com"}, +{"id":350,"first_name":"Yorgo","last_name":"de Courcy","email":"ydecourcy9p@reference.com"}, +{"id":351,"first_name":"Dyanna","last_name":"Wordesworth","email":"dwordesworth9q@clickbank.net"}, +{"id":352,"first_name":"Ashien","last_name":"Whittles","email":"awhittles9r@dell.com"}, +{"id":353,"first_name":"Alia","last_name":"Paradin","email":"aparadin9s@ucsd.edu"}, +{"id":354,"first_name":"Babbie","last_name":"Palethorpe","email":"bpalethorpe9t@sciencedirect.com"}, +{"id":355,"first_name":"Mort","last_name":"Hargie","email":"mhargie9u@nyu.edu"}, +{"id":356,"first_name":"Lucais","last_name":"Writer","email":"lwriter9v@domainmarket.com"}, +{"id":357,"first_name":"Lucho","last_name":"Robley","email":"lrobley9w@cargocollective.com"}, +{"id":358,"first_name":"Drucie","last_name":"Hapgood","email":"dhapgood9x@ft.com"}, +{"id":359,"first_name":"Arin","last_name":"Boddy","email":"aboddy9y@cdbaby.com"}, +{"id":360,"first_name":"Biddy","last_name":"Ewles","email":"bewles9z@globo.com"}, +{"id":361,"first_name":"Marlon","last_name":"Allder","email":"malldera0@t.co"}, +{"id":362,"first_name":"Jock","last_name":"Ing","email":"jinga1@ocn.ne.jp"}, +{"id":363,"first_name":"Franny","last_name":"Taverner","email":"ftavernera2@ezinearticles.com"}, +{"id":364,"first_name":"Vanda","last_name":"Whiterod","email":"vwhiteroda3@usda.gov"}, +{"id":365,"first_name":"Lezlie","last_name":"Godbehere","email":"lgodbeherea4@youtube.com"}, +{"id":366,"first_name":"Rebecka","last_name":"Scarsbrook","email":"rscarsbrooka5@myspace.com"}, +{"id":367,"first_name":"Abba","last_name":"Mingotti","email":"amingottia6@tuttocitta.it"}, +{"id":368,"first_name":"Miguela","last_name":"McNysche","email":"mmcnyschea7@t-online.de"}, +{"id":369,"first_name":"Weider","last_name":"Rosenau","email":"wrosenaua8@mysql.com"}, +{"id":370,"first_name":"Antonietta","last_name":"Littefair","email":"alittefaira9@xing.com"}, +{"id":371,"first_name":"Heda","last_name":"Wheowall","email":"hwheowallaa@360.cn"}, +{"id":372,"first_name":"Nettle","last_name":"Semonin","email":"nsemoninab@patch.com"}, +{"id":373,"first_name":"Sheri","last_name":"Baudry","email":"sbaudryac@google.ru"}, +{"id":374,"first_name":"Janna","last_name":"Bogue","email":"jboguead@illinois.edu"}, +{"id":375,"first_name":"Saundra","last_name":"Skaid","email":"sskaidae@ycombinator.com"}, +{"id":376,"first_name":"Xenia","last_name":"Cadden","email":"xcaddenaf@booking.com"}, +{"id":377,"first_name":"Claudia","last_name":"Spirit","email":"cspiritag@linkedin.com"}, +{"id":378,"first_name":"Willard","last_name":"Grimwood","email":"wgrimwoodah@oracle.com"}, +{"id":379,"first_name":"Smith","last_name":"Allenby","email":"sallenbyai@godaddy.com"}, +{"id":380,"first_name":"Morlee","last_name":"Bernardin","email":"mbernardinaj@list-manage.com"}, +{"id":381,"first_name":"Murvyn","last_name":"Becom","email":"mbecomak@sourceforge.net"}, +{"id":382,"first_name":"Teriann","last_name":"Flori","email":"tflorial@xinhuanet.com"}, +{"id":383,"first_name":"Liva","last_name":"Cabera","email":"lcaberaam@t.co"}, +{"id":384,"first_name":"Andrej","last_name":"Hearnden","email":"ahearndenan@mysql.com"}, +{"id":385,"first_name":"Reg","last_name":"Vollam","email":"rvollamao@networkadvertising.org"}, +{"id":386,"first_name":"Kimberlyn","last_name":"Bedells","email":"kbedellsap@bbc.co.uk"}, +{"id":387,"first_name":"Cam","last_name":"Quantrill","email":"cquantrillaq@alibaba.com"}, +{"id":388,"first_name":"Giuditta","last_name":"Force","email":"gforcear@delicious.com"}, +{"id":389,"first_name":"Lanie","last_name":"MacQueen","email":"lmacqueenas@flickr.com"}, +{"id":390,"first_name":"Marja","last_name":"O'Dempsey","email":"modempseyat@auda.org.au"}, +{"id":391,"first_name":"Howey","last_name":"St Clair","email":"hstclairau@soundcloud.com"}, +{"id":392,"first_name":"Carolynn","last_name":"Khotler","email":"ckhotlerav@utexas.edu"}, +{"id":393,"first_name":"Theodosia","last_name":"Ort","email":"tortaw@shop-pro.jp"}, +{"id":394,"first_name":"West","last_name":"Matchett","email":"wmatchettax@cbc.ca"}, +{"id":395,"first_name":"Vivianne","last_name":"Wheelwright","email":"vwheelwrightay@washingtonpost.com"}, +{"id":396,"first_name":"Pennie","last_name":"Beames","email":"pbeamesaz@drupal.org"}, +{"id":397,"first_name":"Nady","last_name":"Letch","email":"nletchb0@skype.com"}, +{"id":398,"first_name":"Moselle","last_name":"Maytum","email":"mmaytumb1@usgs.gov"}, +{"id":399,"first_name":"Jennilee","last_name":"Kid","email":"jkidb2@wisc.edu"}, +{"id":400,"first_name":"Parnell","last_name":"Gong","email":"pgongb3@oaic.gov.au"}, +{"id":401,"first_name":"Noll","last_name":"Kohtler","email":"nkohtlerb4@opensource.org"}, +{"id":402,"first_name":"Sonya","last_name":"Orris","email":"sorrisb5@bandcamp.com"}, +{"id":403,"first_name":"Bronnie","last_name":"Guillotin","email":"bguillotinb6@geocities.jp"}, +{"id":404,"first_name":"Inger","last_name":"Clipsham","email":"iclipshamb7@psu.edu"}, +{"id":405,"first_name":"Melina","last_name":"Grigorio","email":"mgrigoriob8@eventbrite.com"}, +{"id":406,"first_name":"Jermain","last_name":"Thraves","email":"jthravesb9@biblegateway.com"}, +{"id":407,"first_name":"Jock","last_name":"Payn","email":"jpaynba@google.cn"}, +{"id":408,"first_name":"Nikolia","last_name":"Sterre","email":"nsterrebb@google.ru"}, +{"id":409,"first_name":"Rosemarie","last_name":"Caurah","email":"rcaurahbc@sohu.com"}, +{"id":410,"first_name":"Conney","last_name":"Spawell","email":"cspawellbd@ycombinator.com"}, +{"id":411,"first_name":"Hernando","last_name":"Percival","email":"hpercivalbe@cisco.com"}, +{"id":412,"first_name":"Michale","last_name":"Stadding","email":"mstaddingbf@bandcamp.com"}, +{"id":413,"first_name":"Zulema","last_name":"Danks","email":"zdanksbg@ovh.net"}, +{"id":414,"first_name":"Olia","last_name":"Joost","email":"ojoostbh@soup.io"}, +{"id":415,"first_name":"Terrance","last_name":"Tesyro","email":"ttesyrobi@digg.com"}, +{"id":416,"first_name":"Corbet","last_name":"Cliff","email":"ccliffbj@oaic.gov.au"}, +{"id":417,"first_name":"Georgetta","last_name":"Tinto","email":"gtintobk@craigslist.org"}, +{"id":418,"first_name":"Priscilla","last_name":"Philips","email":"pphilipsbl@ox.ac.uk"}, +{"id":419,"first_name":"David","last_name":"Mulcock","email":"dmulcockbm@nytimes.com"}, +{"id":420,"first_name":"Agatha","last_name":"Hek","email":"ahekbn@homestead.com"}, +{"id":421,"first_name":"Burty","last_name":"Ceschini","email":"bceschinibo@jimdo.com"}, +{"id":422,"first_name":"Ange","last_name":"Maeer","email":"amaeerbp@feedburner.com"}, +{"id":423,"first_name":"Dannel","last_name":"Sackes","email":"dsackesbq@pbs.org"}, +{"id":424,"first_name":"Lorrie","last_name":"Entres","email":"lentresbr@ebay.co.uk"}, +{"id":425,"first_name":"Oswell","last_name":"Patrick","email":"opatrickbs@answers.com"}, +{"id":426,"first_name":"Nefen","last_name":"Sedgefield","email":"nsedgefieldbt@google.com.au"}, +{"id":427,"first_name":"Crichton","last_name":"Giorgione","email":"cgiorgionebu@va.gov"}, +{"id":428,"first_name":"Shaylynn","last_name":"Bulstrode","email":"sbulstrodebv@ehow.com"}, +{"id":429,"first_name":"Randolf","last_name":"Pickvance","email":"rpickvancebw@istockphoto.com"}, +{"id":430,"first_name":"Diarmid","last_name":"Lias","email":"dliasbx@alexa.com"}, +{"id":431,"first_name":"Francis","last_name":"Clipson","email":"fclipsonby@google.com.au"}, +{"id":432,"first_name":"Lorene","last_name":"Maciejewski","email":"lmaciejewskibz@nytimes.com"}, +{"id":433,"first_name":"Kizzee","last_name":"Klammt","email":"kklammtc0@vkontakte.ru"}, +{"id":434,"first_name":"Zolly","last_name":"Cattle","email":"zcattlec1@va.gov"}, +{"id":435,"first_name":"Kattie","last_name":"Chidwick","email":"kchidwickc2@hatena.ne.jp"}, +{"id":436,"first_name":"Izabel","last_name":"Weight","email":"iweightc3@ycombinator.com"}, +{"id":437,"first_name":"Kerby","last_name":"Redler","email":"kredlerc4@google.es"}, +{"id":438,"first_name":"Wynn","last_name":"Glass","email":"wglassc5@yelp.com"}, +{"id":439,"first_name":"Jemmie","last_name":"Scorey","email":"jscoreyc6@blogspot.com"}, +{"id":440,"first_name":"Krispin","last_name":"Kirstein","email":"kkirsteinc7@elegantthemes.com"}, +{"id":441,"first_name":"Mil","last_name":"Ogdahl","email":"mogdahlc8@ft.com"}, +{"id":442,"first_name":"Van","last_name":"Bernholt","email":"vbernholtc9@indiegogo.com"}, +{"id":443,"first_name":"Ilyse","last_name":"Boecke","email":"iboeckeca@a8.net"}, +{"id":444,"first_name":"Gabby","last_name":"Silcock","email":"gsilcockcb@ow.ly"}, +{"id":445,"first_name":"Ulberto","last_name":"Edgeley","email":"uedgeleycc@blinklist.com"}, +{"id":446,"first_name":"Bary","last_name":"McGuinley","email":"bmcguinleycd@icq.com"}, +{"id":447,"first_name":"Willie","last_name":"Whyard","email":"wwhyardce@msn.com"}, +{"id":448,"first_name":"Borden","last_name":"Thrussell","email":"bthrussellcf@rediff.com"}, +{"id":449,"first_name":"Pincus","last_name":"McMahon","email":"pmcmahoncg@rakuten.co.jp"}, +{"id":450,"first_name":"Rriocard","last_name":"Franke","email":"rfrankech@addtoany.com"}, +{"id":451,"first_name":"Clayborne","last_name":"Greensitt","email":"cgreensittci@yellowbook.com"}, +{"id":452,"first_name":"Shayla","last_name":"Comber","email":"scombercj@sphinn.com"}, +{"id":453,"first_name":"Ronni","last_name":"Errigo","email":"rerrigock@tmall.com"}, +{"id":454,"first_name":"Bunnie","last_name":"Fishly","email":"bfishlycl@a8.net"}, +{"id":455,"first_name":"Jilly","last_name":"Skelly","email":"jskellycm@bbc.co.uk"}, +{"id":456,"first_name":"Melinde","last_name":"Prene","email":"mprenecn@smh.com.au"}, +{"id":457,"first_name":"Alanah","last_name":"De Atta","email":"adeattaco@gmpg.org"}, +{"id":458,"first_name":"Tamiko","last_name":"Gerrish","email":"tgerrishcp@baidu.com"}, +{"id":459,"first_name":"Winslow","last_name":"Waszczyk","email":"wwaszczykcq@bbc.co.uk"}, +{"id":460,"first_name":"Lydon","last_name":"Habershaw","email":"lhabershawcr@imgur.com"}, +{"id":461,"first_name":"Dill","last_name":"Playle","email":"dplaylecs@livejournal.com"}, +{"id":462,"first_name":"Natassia","last_name":"Kendle","email":"nkendlect@usa.gov"}, +{"id":463,"first_name":"Carree","last_name":"Bohills","email":"cbohillscu@pinterest.com"}, +{"id":464,"first_name":"Terrel","last_name":"Knell","email":"tknellcv@webnode.com"}, +{"id":465,"first_name":"Wilhelmina","last_name":"Lumbley","email":"wlumbleycw@stanford.edu"}, +{"id":466,"first_name":"Dori","last_name":"Astridge","email":"dastridgecx@salon.com"}, +{"id":467,"first_name":"Cherie","last_name":"Houlridge","email":"choulridgecy@squarespace.com"}, +{"id":468,"first_name":"Cord","last_name":"Caunt","email":"ccauntcz@hatena.ne.jp"}, +{"id":469,"first_name":"Josie","last_name":"MacMeeking","email":"jmacmeekingd0@people.com.cn"}, +{"id":470,"first_name":"Glenine","last_name":"Feron","email":"gferond1@a8.net"}, +{"id":471,"first_name":"Eliot","last_name":"Doidge","email":"edoidged2@intel.com"}, +{"id":472,"first_name":"Dudley","last_name":"Lehrahan","email":"dlehrahand3@technorati.com"}, +{"id":473,"first_name":"Tyler","last_name":"Puddan","email":"tpuddand4@ft.com"}, +{"id":474,"first_name":"Egor","last_name":"Lindgren","email":"elindgrend5@nba.com"}, +{"id":475,"first_name":"Barnabe","last_name":"Rival","email":"brivald6@yahoo.co.jp"}, +{"id":476,"first_name":"Domenico","last_name":"De Courtney","email":"ddecourtneyd7@themeforest.net"}, +{"id":477,"first_name":"Matthus","last_name":"Bodycote","email":"mbodycoted8@usa.gov"}, +{"id":478,"first_name":"Jamie","last_name":"Blyden","email":"jblydend9@comcast.net"}, +{"id":479,"first_name":"Mignon","last_name":"Woolnough","email":"mwoolnoughda@sciencedaily.com"}, +{"id":480,"first_name":"Mala","last_name":"Devlin","email":"mdevlindb@epa.gov"}, +{"id":481,"first_name":"Tiertza","last_name":"Letterick","email":"tletterickdc@state.gov"}, +{"id":482,"first_name":"Rebecka","last_name":"Alday","email":"raldaydd@flavors.me"}, +{"id":483,"first_name":"Vinita","last_name":"Etter","email":"vetterde@wikispaces.com"}, +{"id":484,"first_name":"Noreen","last_name":"Sirmond","email":"nsirmonddf@jigsy.com"}, +{"id":485,"first_name":"Ashley","last_name":"McClaughlin","email":"amcclaughlindg@bloomberg.com"}, +{"id":486,"first_name":"Vale","last_name":"Le Houx","email":"vlehouxdh@nhs.uk"}, +{"id":487,"first_name":"Donnell","last_name":"Treadway","email":"dtreadwaydi@mit.edu"}, +{"id":488,"first_name":"Gwennie","last_name":"Gundrey","email":"ggundreydj@over-blog.com"}, +{"id":489,"first_name":"Karel","last_name":"Dani","email":"kdanidk@163.com"}, +{"id":490,"first_name":"Merle","last_name":"Bonnaire","email":"mbonnairedl@uol.com.br"}, +{"id":491,"first_name":"Annabel","last_name":"Nockles","email":"anocklesdm@walmart.com"}, +{"id":492,"first_name":"Urban","last_name":"Ivashov","email":"uivashovdn@amazon.co.uk"}, +{"id":493,"first_name":"Hector","last_name":"Rothwell","email":"hrothwelldo@howstuffworks.com"}, +{"id":494,"first_name":"Ford","last_name":"Brozek","email":"fbrozekdp@hibu.com"}, +{"id":495,"first_name":"Rhody","last_name":"Phythean","email":"rphytheandq@bbc.co.uk"}, +{"id":496,"first_name":"Angie","last_name":"Durno","email":"adurnodr@china.com.cn"}, +{"id":497,"first_name":"Elisha","last_name":"Jerrome","email":"ejerromeds@163.com"}, +{"id":498,"first_name":"Davita","last_name":"Dakers","email":"ddakersdt@bravesites.com"}, +{"id":499,"first_name":"Kiersten","last_name":"Josey","email":"kjoseydu@networksolutions.com"}, +{"id":500,"first_name":"Wendell","last_name":"Carroll","email":"wcarrolldv@networksolutions.com"}, +{"id":501,"first_name":"Coletta","last_name":"Choake","email":"cchoakedw@prweb.com"}, +{"id":502,"first_name":"Syd","last_name":"Flisher","email":"sflisherdx@economist.com"}, +{"id":503,"first_name":"Binky","last_name":"Tennet","email":"btennetdy@nbcnews.com"}, +{"id":504,"first_name":"Drud","last_name":"Clilverd","email":"dclilverddz@state.tx.us"}, +{"id":505,"first_name":"Neda","last_name":"Clothier","email":"nclothiere0@forbes.com"}, +{"id":506,"first_name":"Dew","last_name":"Swalowe","email":"dswalowee1@ow.ly"}, +{"id":507,"first_name":"Valry","last_name":"Plant","email":"vplante2@technorati.com"}, +{"id":508,"first_name":"Lin","last_name":"Geldart","email":"lgeldarte3@auda.org.au"}, +{"id":509,"first_name":"Lucita","last_name":"Botting","email":"lbottinge4@patch.com"}, +{"id":510,"first_name":"Eba","last_name":"Whitfield","email":"ewhitfielde5@parallels.com"}, +{"id":511,"first_name":"Bondy","last_name":"Beasley","email":"bbeasleye6@omniture.com"}, +{"id":512,"first_name":"Elvis","last_name":"Hassard","email":"ehassarde7@studiopress.com"}, +{"id":513,"first_name":"Brianne","last_name":"Shinefield","email":"bshinefielde8@diigo.com"}, +{"id":514,"first_name":"Gertie","last_name":"Kuzma","email":"gkuzmae9@census.gov"}, +{"id":515,"first_name":"Ludovico","last_name":"Skurm","email":"lskurmea@furl.net"}, +{"id":516,"first_name":"Andrea","last_name":"Paternoster","email":"apaternostereb@cargocollective.com"}, +{"id":517,"first_name":"Emmet","last_name":"O'Crowley","email":"eocrowleyec@wiley.com"}, +{"id":518,"first_name":"Marcellus","last_name":"Thurborn","email":"mthurborned@eepurl.com"}, +{"id":519,"first_name":"Tad","last_name":"Dawidowicz","email":"tdawidowiczee@qq.com"}, +{"id":520,"first_name":"Beitris","last_name":"Narramore","email":"bnarramoreef@microsoft.com"}, +{"id":521,"first_name":"Caresse","last_name":"Hordell","email":"chordelleg@paypal.com"}, +{"id":522,"first_name":"Tilly","last_name":"Empringham","email":"tempringhameh@cam.ac.uk"}, +{"id":523,"first_name":"Aila","last_name":"Wheater","email":"awheaterei@noaa.gov"}, +{"id":524,"first_name":"Sal","last_name":"Proudley","email":"sproudleyej@last.fm"}, +{"id":525,"first_name":"Teodor","last_name":"Crumpe","email":"tcrumpeek@nsw.gov.au"}, +{"id":526,"first_name":"Loretta","last_name":"Helliwell","email":"lhelliwellel@yelp.com"}, +{"id":527,"first_name":"Alidia","last_name":"Malzard","email":"amalzardem@chron.com"}, +{"id":528,"first_name":"Sheela","last_name":"Ather","email":"satheren@cloudflare.com"}, +{"id":529,"first_name":"Madelon","last_name":"Berget","email":"mbergeteo@weather.com"}, +{"id":530,"first_name":"Hugues","last_name":"Bunney","email":"hbunneyep@ucsd.edu"}, +{"id":531,"first_name":"Jeannette","last_name":"De Coursey","email":"jdecourseyeq@apache.org"}, +{"id":532,"first_name":"Hy","last_name":"Corkan","email":"hcorkaner@cdc.gov"}, +{"id":533,"first_name":"Corena","last_name":"Hanscombe","email":"chanscombees@bloglovin.com"}, +{"id":534,"first_name":"Blinnie","last_name":"Jahner","email":"bjahneret@hubpages.com"}, +{"id":535,"first_name":"Dev","last_name":"Kincade","email":"dkincadeeu@github.io"}, +{"id":536,"first_name":"Ranee","last_name":"Culley","email":"rculleyev@hhs.gov"}, +{"id":537,"first_name":"Alisa","last_name":"Marchington","email":"amarchingtonew@storify.com"}, +{"id":538,"first_name":"Roscoe","last_name":"Cromblehome","email":"rcromblehomeex@hostgator.com"}, +{"id":539,"first_name":"Octavius","last_name":"Duguid","email":"oduguidey@usatoday.com"}, +{"id":540,"first_name":"Nicoline","last_name":"Glasbey","email":"nglasbeyez@xrea.com"}, +{"id":541,"first_name":"Winfield","last_name":"Jakeman","email":"wjakemanf0@example.com"}, +{"id":542,"first_name":"Dallas","last_name":"Shmyr","email":"dshmyrf1@dropbox.com"}, +{"id":543,"first_name":"Georgianna","last_name":"Beves","email":"gbevesf2@sciencedirect.com"}, +{"id":544,"first_name":"Ignacio","last_name":"McLeod","email":"imcleodf3@addthis.com"}, +{"id":545,"first_name":"Will","last_name":"Wemm","email":"wwemmf4@bizjournals.com"}, +{"id":546,"first_name":"Maxie","last_name":"Martinson","email":"mmartinsonf5@weather.com"}, +{"id":547,"first_name":"Iver","last_name":"Lurner","email":"ilurnerf6@theguardian.com"}, +{"id":548,"first_name":"Baillie","last_name":"Goodlip","email":"bgoodlipf7@apple.com"}, +{"id":549,"first_name":"Nessi","last_name":"Cleeve","email":"ncleevef8@weather.com"}, +{"id":550,"first_name":"Thor","last_name":"Barfitt","email":"tbarfittf9@yolasite.com"}, +{"id":551,"first_name":"Stillman","last_name":"Boycott","email":"sboycottfa@washingtonpost.com"}, +{"id":552,"first_name":"Mallory","last_name":"Esmond","email":"mesmondfb@seattletimes.com"}, +{"id":553,"first_name":"Gabbie","last_name":"Jodrellec","email":"gjodrellecfc@goo.ne.jp"}, +{"id":554,"first_name":"Siobhan","last_name":"Lanceley","email":"slanceleyfd@virginia.edu"}, +{"id":555,"first_name":"Cherry","last_name":"Rolfi","email":"crolfife@seesaa.net"}, +{"id":556,"first_name":"Shayne","last_name":"Kyne","email":"skyneff@tiny.cc"}, +{"id":557,"first_name":"Ely","last_name":"Aksell","email":"eaksellfg@nytimes.com"}, +{"id":558,"first_name":"Mara","last_name":"Crotch","email":"mcrotchfh@nih.gov"}, +{"id":559,"first_name":"Jennilee","last_name":"Rhucroft","email":"jrhucroftfi@walmart.com"}, +{"id":560,"first_name":"Holly","last_name":"Caso","email":"hcasofj@redcross.org"}, +{"id":561,"first_name":"Duffie","last_name":"Gero","email":"dgerofk@taobao.com"}, +{"id":562,"first_name":"Pansy","last_name":"Smewing","email":"psmewingfl@usatoday.com"}, +{"id":563,"first_name":"Florina","last_name":"Fuxman","email":"ffuxmanfm@instagram.com"}, +{"id":564,"first_name":"Gannie","last_name":"Di Biasio","email":"gdibiasiofn@cmu.edu"}, +{"id":565,"first_name":"Hercule","last_name":"Chaffey","email":"hchaffeyfo@1688.com"}, +{"id":566,"first_name":"Zak","last_name":"Salsberg","email":"zsalsbergfp@hubpages.com"}, +{"id":567,"first_name":"Isobel","last_name":"Ondricek","email":"iondricekfq@facebook.com"}, +{"id":568,"first_name":"Kincaid","last_name":"Savory","email":"ksavoryfr@dmoz.org"}, +{"id":569,"first_name":"Chet","last_name":"Senussi","email":"csenussifs@spiegel.de"}, +{"id":570,"first_name":"Dewain","last_name":"Borrows","email":"dborrowsft@feedburner.com"}, +{"id":571,"first_name":"Carrol","last_name":"Battaille","email":"cbattaillefu@blogs.com"}, +{"id":572,"first_name":"Massimo","last_name":"Coupland","email":"mcouplandfv@weather.com"}, +{"id":573,"first_name":"Krisha","last_name":"Mowles","email":"kmowlesfw@accuweather.com"}, +{"id":574,"first_name":"Lidia","last_name":"Beddoes","email":"lbeddoesfx@sourceforge.net"}, +{"id":575,"first_name":"Crawford","last_name":"Flieger","email":"cfliegerfy@pinterest.com"}, +{"id":576,"first_name":"Dorian","last_name":"Gladdin","email":"dgladdinfz@yelp.com"}, +{"id":577,"first_name":"Alford","last_name":"Ludwell","email":"aludwellg0@pen.io"}, +{"id":578,"first_name":"Leigh","last_name":"Lindsay","email":"llindsayg1@unc.edu"}, +{"id":579,"first_name":"Braden","last_name":"Bewicke","email":"bbewickeg2@mediafire.com"}, +{"id":580,"first_name":"Tildy","last_name":"Thornewell","email":"tthornewellg3@shareasale.com"}, +{"id":581,"first_name":"Bowie","last_name":"Lippard","email":"blippardg4@upenn.edu"}, +{"id":582,"first_name":"Alfonse","last_name":"Drei","email":"adreig5@walmart.com"}, +{"id":583,"first_name":"Muriel","last_name":"Fink","email":"mfinkg6@google.com"}, +{"id":584,"first_name":"Amii","last_name":"Cloney","email":"acloneyg7@google.pl"}, +{"id":585,"first_name":"Beverly","last_name":"Souttar","email":"bsouttarg8@i2i.jp"}, +{"id":586,"first_name":"Dante","last_name":"Crellim","email":"dcrellimg9@weibo.com"}, +{"id":587,"first_name":"Temple","last_name":"Medlicott","email":"tmedlicottga@ftc.gov"}, +{"id":588,"first_name":"Mitchel","last_name":"Jobbing","email":"mjobbinggb@hibu.com"}, +{"id":589,"first_name":"Kelcie","last_name":"Assaf","email":"kassafgc@cnn.com"}, +{"id":590,"first_name":"Steffie","last_name":"Shingler","email":"sshinglergd@about.com"}, +{"id":591,"first_name":"Rik","last_name":"Staff","email":"rstaffge@archive.org"}, +{"id":592,"first_name":"Elfie","last_name":"Sedgemond","email":"esedgemondgf@abc.net.au"}, +{"id":593,"first_name":"Rae","last_name":"Paskerful","email":"rpaskerfulgg@woothemes.com"}, +{"id":594,"first_name":"Robinet","last_name":"Coatts","email":"rcoattsgh@360.cn"}, +{"id":595,"first_name":"Dinnie","last_name":"Asple","email":"dasplegi@a8.net"}, +{"id":596,"first_name":"Venita","last_name":"Raffon","email":"vraffongj@vimeo.com"}, +{"id":597,"first_name":"Carlie","last_name":"Gonet","email":"cgonetgk@people.com.cn"}, +{"id":598,"first_name":"Lyda","last_name":"Rutty","email":"lruttygl@sohu.com"}, +{"id":599,"first_name":"Emory","last_name":"Harnell","email":"eharnellgm@stanford.edu"}, +{"id":600,"first_name":"Donica","last_name":"Ducarel","email":"dducarelgn@posterous.com"}, +{"id":601,"first_name":"Amandi","last_name":"Espinoy","email":"aespinoygo@washingtonpost.com"}, +{"id":602,"first_name":"Sindee","last_name":"Carrick","email":"scarrickgp@devhub.com"}, +{"id":603,"first_name":"Dmitri","last_name":"McGreay","email":"dmcgreaygq@imdb.com"}, +{"id":604,"first_name":"Linda","last_name":"Frugier","email":"lfrugiergr@chicagotribune.com"}, +{"id":605,"first_name":"Ogden","last_name":"Piff","email":"opiffgs@google.de"}, +{"id":606,"first_name":"Julina","last_name":"Ollerenshaw","email":"jollerenshawgt@prweb.com"}, +{"id":607,"first_name":"Blair","last_name":"Sauter","email":"bsautergu@cpanel.net"}, +{"id":608,"first_name":"Saw","last_name":"McCaster","email":"smccastergv@yandex.ru"}, +{"id":609,"first_name":"Page","last_name":"Kirman","email":"pkirmangw@cocolog-nifty.com"}, +{"id":610,"first_name":"Verine","last_name":"Popley","email":"vpopleygx@mlb.com"}, +{"id":611,"first_name":"Cart","last_name":"Winfindine","email":"cwinfindinegy@smh.com.au"}, +{"id":612,"first_name":"Niels","last_name":"Tapscott","email":"ntapscottgz@buzzfeed.com"}, +{"id":613,"first_name":"Helsa","last_name":"Tester","email":"htesterh0@google.com"}, +{"id":614,"first_name":"Teddi","last_name":"Orman","email":"tormanh1@photobucket.com"}, +{"id":615,"first_name":"Loria","last_name":"Kerkham","email":"lkerkhamh2@bravesites.com"}, +{"id":616,"first_name":"Elisa","last_name":"Lorman","email":"elormanh3@sciencedaily.com"}, +{"id":617,"first_name":"Hector","last_name":"Wann","email":"hwannh4@cloudflare.com"}, +{"id":618,"first_name":"Augustine","last_name":"Twelftree","email":"atwelftreeh5@army.mil"}, +{"id":619,"first_name":"Scotti","last_name":"Turbard","email":"sturbardh6@wordpress.org"}, +{"id":620,"first_name":"Valdemar","last_name":"Piercey","email":"vpierceyh7@newsvine.com"}, +{"id":621,"first_name":"Bary","last_name":"Riden","email":"bridenh8@alibaba.com"}, +{"id":622,"first_name":"Rozelle","last_name":"Walne","email":"rwalneh9@nbcnews.com"}, +{"id":623,"first_name":"Olivette","last_name":"Kubanek","email":"okubanekha@sciencedirect.com"}, +{"id":624,"first_name":"Chantal","last_name":"MacMeekan","email":"cmacmeekanhb@paypal.com"}, +{"id":625,"first_name":"Aldrich","last_name":"Benterman","email":"abentermanhc@wired.com"}, +{"id":626,"first_name":"Erminie","last_name":"Siss","email":"esisshd@opera.com"}, +{"id":627,"first_name":"Lowell","last_name":"Stenning","email":"lstenninghe@bigcartel.com"}, +{"id":628,"first_name":"Petrina","last_name":"Durno","email":"pdurnohf@blogtalkradio.com"}, +{"id":629,"first_name":"Elianore","last_name":"Clorley","email":"eclorleyhg@sphinn.com"}, +{"id":630,"first_name":"Ingmar","last_name":"Slad","email":"isladhh@example.com"}, +{"id":631,"first_name":"Myles","last_name":"Gaunter","email":"mgaunterhi@furl.net"}, +{"id":632,"first_name":"Dyana","last_name":"Mohun","email":"dmohunhj@illinois.edu"}, +{"id":633,"first_name":"Jayne","last_name":"Tesimon","email":"jtesimonhk@techcrunch.com"}, +{"id":634,"first_name":"Feliks","last_name":"Arnecke","email":"farneckehl@elpais.com"}, +{"id":635,"first_name":"Myrtle","last_name":"Keat","email":"mkeathm@bravesites.com"}, +{"id":636,"first_name":"Sheffy","last_name":"Cockett","email":"scocketthn@weebly.com"}, +{"id":637,"first_name":"Zuzana","last_name":"Scarre","email":"zscarreho@hp.com"}, +{"id":638,"first_name":"Tybie","last_name":"Coll","email":"tcollhp@themeforest.net"}, +{"id":639,"first_name":"Jennie","last_name":"Donati","email":"jdonatihq@tinyurl.com"}, +{"id":640,"first_name":"Elvina","last_name":"Adan","email":"eadanhr@google.pl"}, +{"id":641,"first_name":"Ruthie","last_name":"MacGinlay","email":"rmacginlayhs@imageshack.us"}, +{"id":642,"first_name":"Mikel","last_name":"Lammin","email":"mlamminht@shop-pro.jp"}, +{"id":643,"first_name":"Hannis","last_name":"Heathfield","email":"hheathfieldhu@google.ru"}, +{"id":644,"first_name":"Carmela","last_name":"Shimmans","email":"cshimmanshv@businesswire.com"}, +{"id":645,"first_name":"Nichols","last_name":"Avo","email":"navohw@aol.com"}, +{"id":646,"first_name":"Karlis","last_name":"Dowe","email":"kdowehx@wufoo.com"}, +{"id":647,"first_name":"Gabe","last_name":"Bowen","email":"gbowenhy@ameblo.jp"}, +{"id":648,"first_name":"Moyna","last_name":"Orrobin","email":"morrobinhz@cornell.edu"}, +{"id":649,"first_name":"Georgine","last_name":"Jaye","email":"gjayei0@un.org"}, +{"id":650,"first_name":"Essy","last_name":"MacIntosh","email":"emacintoshi1@unicef.org"}, +{"id":651,"first_name":"Andrew","last_name":"Ockland","email":"aocklandi2@redcross.org"}, +{"id":652,"first_name":"Cariotta","last_name":"Yates","email":"cyatesi3@nhs.uk"}, +{"id":653,"first_name":"Paulie","last_name":"Lockley","email":"plockleyi4@mayoclinic.com"}, +{"id":654,"first_name":"Aviva","last_name":"Acum","email":"aacumi5@telegraph.co.uk"}, +{"id":655,"first_name":"Rutger","last_name":"Ramey","email":"rrameyi6@sciencedirect.com"}, +{"id":656,"first_name":"Megen","last_name":"Castagnasso","email":"mcastagnassoi7@furl.net"}, +{"id":657,"first_name":"Victoria","last_name":"Tollow","email":"vtollowi8@last.fm"}, +{"id":658,"first_name":"Lusa","last_name":"Balmadier","email":"lbalmadieri9@upenn.edu"}, +{"id":659,"first_name":"Nessi","last_name":"Heyball","email":"nheyballia@samsung.com"}, +{"id":660,"first_name":"Lorrin","last_name":"Glastonbury","email":"lglastonburyib@dot.gov"}, +{"id":661,"first_name":"Marin","last_name":"Greenset","email":"mgreensetic@goo.gl"}, +{"id":662,"first_name":"Benyamin","last_name":"Froom","email":"bfroomid@nba.com"}, +{"id":663,"first_name":"Garv","last_name":"Drewett","email":"gdrewettie@craigslist.org"}, +{"id":664,"first_name":"Berke","last_name":"Rothert","email":"brothertif@imgur.com"}, +{"id":665,"first_name":"Kali","last_name":"Obispo","email":"kobispoig@dyndns.org"}, +{"id":666,"first_name":"Veronique","last_name":"Letchford","email":"vletchfordih@unblog.fr"}, +{"id":667,"first_name":"Jayme","last_name":"Dukelow","email":"jdukelowii@intel.com"}, +{"id":668,"first_name":"Murial","last_name":"Toun","email":"mtounij@flavors.me"}, +{"id":669,"first_name":"Charles","last_name":"Belcham","email":"cbelchamik@shareasale.com"}, +{"id":670,"first_name":"Bunnie","last_name":"Godier","email":"bgodieril@opera.com"}, +{"id":671,"first_name":"Brewer","last_name":"Reeks","email":"breeksim@list-manage.com"}, +{"id":672,"first_name":"Mickey","last_name":"Genn","email":"mgennin@baidu.com"}, +{"id":673,"first_name":"Granger","last_name":"Grunnell","email":"ggrunnellio@miibeian.gov.cn"}, +{"id":674,"first_name":"Alexis","last_name":"Cavnor","email":"acavnorip@behance.net"}, +{"id":675,"first_name":"Garnette","last_name":"Teodorski","email":"gteodorskiiq@skype.com"}, +{"id":676,"first_name":"Yoshi","last_name":"MacDavitt","email":"ymacdavittir@java.com"}, +{"id":677,"first_name":"Aubree","last_name":"Etches","email":"aetchesis@toplist.cz"}, +{"id":678,"first_name":"Mayne","last_name":"Swadon","email":"mswadonit@zdnet.com"}, +{"id":679,"first_name":"Cammie","last_name":"Chastney","email":"cchastneyiu@eventbrite.com"}, +{"id":680,"first_name":"Allianora","last_name":"Copsey","email":"acopseyiv@hubpages.com"}, +{"id":681,"first_name":"Erwin","last_name":"Jewett","email":"ejewettiw@digg.com"}, +{"id":682,"first_name":"Caesar","last_name":"Joannic","email":"cjoannicix@yellowbook.com"}, +{"id":683,"first_name":"Zia","last_name":"Tynan","email":"ztynaniy@state.gov"}, +{"id":684,"first_name":"Ford","last_name":"Cozins","email":"fcozinsiz@springer.com"}, +{"id":685,"first_name":"Kathleen","last_name":"Murrells","email":"kmurrellsj0@ask.com"}, +{"id":686,"first_name":"Daisy","last_name":"Attard","email":"dattardj1@slate.com"}, +{"id":687,"first_name":"Brandon","last_name":"Mendoza","email":"bmendozaj2@yellowbook.com"}, +{"id":688,"first_name":"Kerwinn","last_name":"Chung","email":"kchungj3@weibo.com"}, +{"id":689,"first_name":"Ricki","last_name":"Sexti","email":"rsextij4@wikimedia.org"}, +{"id":690,"first_name":"Ema","last_name":"Logsdale","email":"elogsdalej5@hostgator.com"}, +{"id":691,"first_name":"Noella","last_name":"Spencer","email":"nspencerj6@newsvine.com"}, +{"id":692,"first_name":"Dee dee","last_name":"Stocks","email":"dstocksj7@microsoft.com"}, +{"id":693,"first_name":"Ingra","last_name":"Norvell","email":"inorvellj8@reference.com"}, +{"id":694,"first_name":"Eunice","last_name":"Giabucci","email":"egiabuccij9@naver.com"}, +{"id":695,"first_name":"Emera","last_name":"Krzyzanowski","email":"ekrzyzanowskija@google.fr"}, +{"id":696,"first_name":"Latia","last_name":"Hopfner","email":"lhopfnerjb@amazon.com"}, +{"id":697,"first_name":"Alejandro","last_name":"Harewood","email":"aharewoodjc@msu.edu"}, +{"id":698,"first_name":"Lorilyn","last_name":"Nolli","email":"lnollijd@multiply.com"}, +{"id":699,"first_name":"Billy","last_name":"Leckie","email":"bleckieje@ted.com"}, +{"id":700,"first_name":"Elnar","last_name":"McShea","email":"emcsheajf@walmart.com"}, +{"id":701,"first_name":"Carine","last_name":"McCuish","email":"cmccuishjg@theatlantic.com"}, +{"id":702,"first_name":"Andras","last_name":"Sharplin","email":"asharplinjh@newsvine.com"}, +{"id":703,"first_name":"Granger","last_name":"Vany","email":"gvanyji@bing.com"}, +{"id":704,"first_name":"Marcelia","last_name":"Breyt","email":"mbreytjj@tinyurl.com"}, +{"id":705,"first_name":"Vernor","last_name":"Duffit","email":"vduffitjk@upenn.edu"}, +{"id":706,"first_name":"Marchelle","last_name":"Guyver","email":"mguyverjl@myspace.com"}, +{"id":707,"first_name":"Woodman","last_name":"Henricsson","email":"whenricssonjm@4shared.com"}, +{"id":708,"first_name":"Ava","last_name":"Gosart","email":"agosartjn@stumbleupon.com"}, +{"id":709,"first_name":"Nickie","last_name":"Inwood","email":"ninwoodjo@google.es"}, +{"id":710,"first_name":"Keefer","last_name":"Antonioni","email":"kantonionijp@columbia.edu"}, +{"id":711,"first_name":"Elvyn","last_name":"Le Count","email":"elecountjq@ehow.com"}, +{"id":712,"first_name":"Renate","last_name":"Wannop","email":"rwannopjr@imgur.com"}, +{"id":713,"first_name":"Ainslee","last_name":"Baldelli","email":"abaldellijs@4shared.com"}, +{"id":714,"first_name":"Annnora","last_name":"Fulop","email":"afulopjt@addtoany.com"}, +{"id":715,"first_name":"Mariel","last_name":"Vowles","email":"mvowlesju@businesswire.com"}, +{"id":716,"first_name":"Dan","last_name":"Pendred","email":"dpendredjv@aol.com"}, +{"id":717,"first_name":"Johnna","last_name":"Twatt","email":"jtwattjw@ucla.edu"}, +{"id":718,"first_name":"Steward","last_name":"Brownsett","email":"sbrownsettjx@google.de"}, +{"id":719,"first_name":"Bevon","last_name":"Backen","email":"bbackenjy@aol.com"}, +{"id":720,"first_name":"Sande","last_name":"Coggan","email":"scogganjz@toplist.cz"}, +{"id":721,"first_name":"Kippy","last_name":"Bubear","email":"kbubeark0@arizona.edu"}, +{"id":722,"first_name":"Bryce","last_name":"Harmond","email":"bharmondk1@sakura.ne.jp"}, +{"id":723,"first_name":"Rodrique","last_name":"Jakov","email":"rjakovk2@sitemeter.com"}, +{"id":724,"first_name":"Mariel","last_name":"Caslake","email":"mcaslakek3@free.fr"}, +{"id":725,"first_name":"Faun","last_name":"Bresland","email":"fbreslandk4@mashable.com"}, +{"id":726,"first_name":"Ekaterina","last_name":"Donnel","email":"edonnelk5@nasa.gov"}, +{"id":727,"first_name":"Edmon","last_name":"Pittle","email":"epittlek6@ow.ly"}, +{"id":728,"first_name":"Glendon","last_name":"Blunsden","email":"gblunsdenk7@google.co.jp"}, +{"id":729,"first_name":"Anica","last_name":"Watkinson","email":"awatkinsonk8@wired.com"}, +{"id":730,"first_name":"Tabbie","last_name":"Camden","email":"tcamdenk9@cargocollective.com"}, +{"id":731,"first_name":"Berti","last_name":"Jerschke","email":"bjerschkeka@netlog.com"}, +{"id":732,"first_name":"Shanie","last_name":"Dimitrov","email":"sdimitrovkb@icq.com"}, +{"id":733,"first_name":"Annora","last_name":"Criag","email":"acriagkc@ted.com"}, +{"id":734,"first_name":"Adel","last_name":"Brass","email":"abrasskd@tuttocitta.it"}, +{"id":735,"first_name":"Chauncey","last_name":"Pole","email":"cpoleke@webmd.com"}, +{"id":736,"first_name":"Drugi","last_name":"Nudd","email":"dnuddkf@odnoklassniki.ru"}, +{"id":737,"first_name":"Daisy","last_name":"Reboul","email":"dreboulkg@bandcamp.com"}, +{"id":738,"first_name":"Perice","last_name":"Jacobowits","email":"pjacobowitskh@dot.gov"}, +{"id":739,"first_name":"Norma","last_name":"Yitzovicz","email":"nyitzoviczki@g.co"}, +{"id":740,"first_name":"Bryon","last_name":"Skepper","email":"bskepperkj@jigsy.com"}, +{"id":741,"first_name":"Allx","last_name":"Kingswood","email":"akingswoodkk@123-reg.co.uk"}, +{"id":742,"first_name":"Quillan","last_name":"Grishmanov","email":"qgrishmanovkl@imageshack.us"}, +{"id":743,"first_name":"Enrichetta","last_name":"Dumbar","email":"edumbarkm@1688.com"}, +{"id":744,"first_name":"Jasen","last_name":"Pheazey","email":"jpheazeykn@lycos.com"}, +{"id":745,"first_name":"Austina","last_name":"Vardie","email":"avardieko@google.pl"}, +{"id":746,"first_name":"Petey","last_name":"Lardiner","email":"plardinerkp@hostgator.com"}, +{"id":747,"first_name":"Rupert","last_name":"Ebenezer","email":"rebenezerkq@miitbeian.gov.cn"}, +{"id":748,"first_name":"Sarina","last_name":"Latch","email":"slatchkr@goo.gl"}, +{"id":749,"first_name":"Ruthi","last_name":"Pitney","email":"rpitneyks@clickbank.net"}, +{"id":750,"first_name":"Claire","last_name":"Slight","email":"cslightkt@furl.net"}, +{"id":751,"first_name":"Bret","last_name":"Whybray","email":"bwhybrayku@japanpost.jp"}, +{"id":752,"first_name":"Marge","last_name":"Copnell","email":"mcopnellkv@newsvine.com"}, +{"id":753,"first_name":"Abba","last_name":"Eglington","email":"aeglingtonkw@squidoo.com"}, +{"id":754,"first_name":"Levon","last_name":"Forsdike","email":"lforsdikekx@stanford.edu"}, +{"id":755,"first_name":"Arlen","last_name":"Ingarfield","email":"aingarfieldky@abc.net.au"}, +{"id":756,"first_name":"Nollie","last_name":"O'Hanlon","email":"nohanlonkz@blogspot.com"}, +{"id":757,"first_name":"Phaedra","last_name":"Guiducci","email":"pguiduccil0@columbia.edu"}, +{"id":758,"first_name":"Ashlee","last_name":"Reeken","email":"areekenl1@shinystat.com"}, +{"id":759,"first_name":"Mareah","last_name":"Wagstaffe","email":"mwagstaffel2@is.gd"}, +{"id":760,"first_name":"Cindelyn","last_name":"Sizland","email":"csizlandl3@sun.com"}, +{"id":761,"first_name":"Deeann","last_name":"Minillo","email":"dminillol4@bloomberg.com"}, +{"id":762,"first_name":"Adelaida","last_name":"Gerish","email":"agerishl5@bigcartel.com"}, +{"id":763,"first_name":"Morris","last_name":"Pretious","email":"mpretiousl6@youtube.com"}, +{"id":764,"first_name":"Aurelea","last_name":"Lindback","email":"alindbackl7@jimdo.com"}, +{"id":765,"first_name":"Floyd","last_name":"Francioli","email":"ffranciolil8@delicious.com"}, +{"id":766,"first_name":"Amalea","last_name":"Humbey","email":"ahumbeyl9@free.fr"}, +{"id":767,"first_name":"Randy","last_name":"Aspden","email":"raspdenla@prweb.com"}, +{"id":768,"first_name":"Fenelia","last_name":"Mulbery","email":"fmulberylb@hc360.com"}, +{"id":769,"first_name":"Benoite","last_name":"Monday","email":"bmondaylc@sohu.com"}, +{"id":770,"first_name":"Delaney","last_name":"Powner","email":"dpownerld@admin.ch"}, +{"id":771,"first_name":"Joellyn","last_name":"Stackbridge","email":"jstackbridgele@zimbio.com"}, +{"id":772,"first_name":"Betsy","last_name":"Pemberton","email":"bpembertonlf@twitpic.com"}, +{"id":773,"first_name":"Dix","last_name":"Hemphrey","email":"dhemphreylg@xinhuanet.com"}, +{"id":774,"first_name":"Galven","last_name":"Meighan","email":"gmeighanlh@mit.edu"}, +{"id":775,"first_name":"Maggy","last_name":"MacKilroe","email":"mmackilroeli@wsj.com"}, +{"id":776,"first_name":"Vale","last_name":"Diano","email":"vdianolj@google.co.jp"}, +{"id":777,"first_name":"Anatol","last_name":"Qualtro","email":"aqualtrolk@myspace.com"}, +{"id":778,"first_name":"Cobby","last_name":"Webley","email":"cwebleyll@kickstarter.com"}, +{"id":779,"first_name":"Minnie","last_name":"Testro","email":"mtestrolm@jigsy.com"}, +{"id":780,"first_name":"Linet","last_name":"Perel","email":"lperelln@alibaba.com"}, +{"id":781,"first_name":"Johnna","last_name":"Gambles","email":"jgambleslo@theglobeandmail.com"}, +{"id":782,"first_name":"Haskel","last_name":"Jendrusch","email":"hjendruschlp@1688.com"}, +{"id":783,"first_name":"Fletch","last_name":"Quainton","email":"fquaintonlq@geocities.jp"}, +{"id":784,"first_name":"Adrian","last_name":"Holborn","email":"aholbornlr@census.gov"}, +{"id":785,"first_name":"Bonny","last_name":"Frantsev","email":"bfrantsevls@jigsy.com"}, +{"id":786,"first_name":"Townie","last_name":"Bussell","email":"tbusselllt@ihg.com"}, +{"id":787,"first_name":"Andi","last_name":"Pellew","email":"apellewlu@cyberchimps.com"}, +{"id":788,"first_name":"Meridith","last_name":"Jakeway","email":"mjakewaylv@cpanel.net"}, +{"id":789,"first_name":"Ede","last_name":"Winnett","email":"ewinnettlw@hp.com"}, +{"id":790,"first_name":"Geoffrey","last_name":"Yetton","email":"gyettonlx@delicious.com"}, +{"id":791,"first_name":"Josee","last_name":"Lidgard","email":"jlidgardly@redcross.org"}, +{"id":792,"first_name":"Gusella","last_name":"Bedo","email":"gbedolz@squarespace.com"}, +{"id":793,"first_name":"Francklin","last_name":"Goodlud","email":"fgoodludm0@shareasale.com"}, +{"id":794,"first_name":"Caddric","last_name":"Orlton","email":"corltonm1@businessweek.com"}, +{"id":795,"first_name":"Burke","last_name":"Branford","email":"bbranfordm2@last.fm"}, +{"id":796,"first_name":"Joeann","last_name":"McCurlye","email":"jmccurlyem3@addthis.com"}, +{"id":797,"first_name":"Rachael","last_name":"Tamburo","email":"rtamburom4@tuttocitta.it"}, +{"id":798,"first_name":"Eachelle","last_name":"Johantges","email":"ejohantgesm5@printfriendly.com"}, +{"id":799,"first_name":"Babb","last_name":"Casina","email":"bcasinam6@amazon.co.uk"}, +{"id":800,"first_name":"Inge","last_name":"O'Day","email":"iodaym7@shutterfly.com"}, +{"id":801,"first_name":"Eveline","last_name":"Lamperti","email":"elampertim8@purevolume.com"}, +{"id":802,"first_name":"Peder","last_name":"Bierman","email":"pbiermanm9@cnn.com"}, +{"id":803,"first_name":"Wilhelmine","last_name":"McVie","email":"wmcviema@businessweek.com"}, +{"id":804,"first_name":"Barnabas","last_name":"Putton","email":"bputtonmb@icio.us"}, +{"id":805,"first_name":"Edie","last_name":"Standley","email":"estandleymc@jimdo.com"}, +{"id":806,"first_name":"Preston","last_name":"Ranscombe","email":"pranscombemd@booking.com"}, +{"id":807,"first_name":"Conn","last_name":"Harbron","email":"charbronme@washingtonpost.com"}, +{"id":808,"first_name":"Alfy","last_name":"Grolmann","email":"agrolmannmf@storify.com"}, +{"id":809,"first_name":"Elvis","last_name":"Botly","email":"ebotlymg@independent.co.uk"}, +{"id":810,"first_name":"Giulietta","last_name":"Kenn","email":"gkennmh@omniture.com"}, +{"id":811,"first_name":"Fan","last_name":"Aldam","email":"faldammi@creativecommons.org"}, +{"id":812,"first_name":"Constancy","last_name":"Lake","email":"clakemj@so-net.ne.jp"}, +{"id":813,"first_name":"Tildy","last_name":"Streeton","email":"tstreetonmk@about.me"}, +{"id":814,"first_name":"Tildi","last_name":"Stubbe","email":"tstubbeml@blogs.com"}, +{"id":815,"first_name":"Maximilien","last_name":"Epp","email":"meppmm@icq.com"}, +{"id":816,"first_name":"Etti","last_name":"McClinton","email":"emcclintonmn@geocities.com"}, +{"id":817,"first_name":"Susanetta","last_name":"Gonzalvo","email":"sgonzalvomo@stanford.edu"}, +{"id":818,"first_name":"Shellysheldon","last_name":"Fulmen","email":"sfulmenmp@123-reg.co.uk"}, +{"id":819,"first_name":"Alyse","last_name":"Raoux","email":"araouxmq@newyorker.com"}, +{"id":820,"first_name":"Aeriela","last_name":"Tombleson","email":"atomblesonmr@alexa.com"}, +{"id":821,"first_name":"Hal","last_name":"Cockshtt","email":"hcockshttms@guardian.co.uk"}, +{"id":822,"first_name":"Meg","last_name":"Kinnach","email":"mkinnachmt@psu.edu"}, +{"id":823,"first_name":"Rock","last_name":"Olligan","email":"rolliganmu@bravesites.com"}, +{"id":824,"first_name":"Carri","last_name":"Howles","email":"chowlesmv@accuweather.com"}, +{"id":825,"first_name":"Raff","last_name":"Castellino","email":"rcastellinomw@opensource.org"}, +{"id":826,"first_name":"Jeremias","last_name":"Alsina","email":"jalsinamx@cisco.com"}, +{"id":827,"first_name":"Boycie","last_name":"Nial","email":"bnialmy@google.fr"}, +{"id":828,"first_name":"Oswell","last_name":"Jurkiewicz","email":"ojurkiewiczmz@exblog.jp"}, +{"id":829,"first_name":"Star","last_name":"Houdhury","email":"shoudhuryn0@edublogs.org"}, +{"id":830,"first_name":"Diarmid","last_name":"MacGillicuddy","email":"dmacgillicuddyn1@google.com.br"}, +{"id":831,"first_name":"Calley","last_name":"McGenis","email":"cmcgenisn2@freewebs.com"}, +{"id":832,"first_name":"Reagen","last_name":"Hernik","email":"rhernikn3@state.tx.us"}, +{"id":833,"first_name":"Amitie","last_name":"Yu","email":"ayun4@weibo.com"}, +{"id":834,"first_name":"Xena","last_name":"Feldstein","email":"xfeldsteinn5@ameblo.jp"}, +{"id":835,"first_name":"Neill","last_name":"Faucherand","email":"nfaucherandn6@usnews.com"}, +{"id":836,"first_name":"Minta","last_name":"Correa","email":"mcorrean7@bbb.org"}, +{"id":837,"first_name":"Bev","last_name":"Thom","email":"bthomn8@youku.com"}, +{"id":838,"first_name":"Nikki","last_name":"Harwick","email":"nharwickn9@last.fm"}, +{"id":839,"first_name":"Colly","last_name":"Skett","email":"cskettna@gmpg.org"}, +{"id":840,"first_name":"Sonia","last_name":"Kivlehan","email":"skivlehannb@shop-pro.jp"}, +{"id":841,"first_name":"Amye","last_name":"MacAvddy","email":"amacavddync@google.com"}, +{"id":842,"first_name":"Latrena","last_name":"Kilner","email":"lkilnernd@stanford.edu"}, +{"id":843,"first_name":"Nickolaus","last_name":"Poff","email":"npoffne@ebay.co.uk"}, +{"id":844,"first_name":"Shelby","last_name":"Dufour","email":"sdufournf@yelp.com"}, +{"id":845,"first_name":"Christoffer","last_name":"Greystoke","email":"cgreystokeng@newsvine.com"}, +{"id":846,"first_name":"Margery","last_name":"Derges","email":"mdergesnh@senate.gov"}, +{"id":847,"first_name":"Morten","last_name":"Braidley","email":"mbraidleyni@hc360.com"}, +{"id":848,"first_name":"Raf","last_name":"Brearty","email":"rbreartynj@engadget.com"}, +{"id":849,"first_name":"Dyanne","last_name":"Caskie","email":"dcaskienk@multiply.com"}, +{"id":850,"first_name":"Rick","last_name":"Blackesland","email":"rblackeslandnl@ca.gov"}, +{"id":851,"first_name":"Virge","last_name":"Wison","email":"vwisonnm@wufoo.com"}, +{"id":852,"first_name":"Jaynell","last_name":"Coppeard","email":"jcoppeardnn@gnu.org"}, +{"id":853,"first_name":"Ivonne","last_name":"Tarplee","email":"itarpleeno@networksolutions.com"}, +{"id":854,"first_name":"Johann","last_name":"Bonnell","email":"jbonnellnp@friendfeed.com"}, +{"id":855,"first_name":"Penny","last_name":"Pinson","email":"ppinsonnq@telegraph.co.uk"}, +{"id":856,"first_name":"Anton","last_name":"Broadfield","email":"abroadfieldnr@tripod.com"}, +{"id":857,"first_name":"Marlow","last_name":"Meaddowcroft","email":"mmeaddowcroftns@sogou.com"}, +{"id":858,"first_name":"Matt","last_name":"Kemmey","email":"mkemmeynt@istockphoto.com"}, +{"id":859,"first_name":"Cristian","last_name":"Wildman","email":"cwildmannu@a8.net"}, +{"id":860,"first_name":"Doroteya","last_name":"Kettoe","email":"dkettoenv@ucoz.ru"}, +{"id":861,"first_name":"Kathie","last_name":"Lossman","email":"klossmannw@opensource.org"}, +{"id":862,"first_name":"Dorree","last_name":"Lapley","email":"dlapleynx@webnode.com"}, +{"id":863,"first_name":"Tiphany","last_name":"Raspison","email":"traspisonny@wiley.com"}, +{"id":864,"first_name":"Ellyn","last_name":"Flaubert","email":"eflaubertnz@constantcontact.com"}, +{"id":865,"first_name":"Skylar","last_name":"Cornbell","email":"scornbello0@skype.com"}, +{"id":866,"first_name":"Cilka","last_name":"Chivrall","email":"cchivrallo1@ucoz.com"}, +{"id":867,"first_name":"Peg","last_name":"Swarbrigg","email":"pswarbriggo2@wired.com"}, +{"id":868,"first_name":"Doria","last_name":"Rolles","email":"drolleso3@ucoz.com"}, +{"id":869,"first_name":"Winona","last_name":"McKeon","email":"wmckeono4@unesco.org"}, +{"id":870,"first_name":"Tallia","last_name":"Sciacovelli","email":"tsciacovellio5@nps.gov"}, +{"id":871,"first_name":"Tate","last_name":"Kupisz","email":"tkupiszo6@indiatimes.com"}, +{"id":872,"first_name":"Isis","last_name":"Sedgeman","email":"isedgemano7@xrea.com"}, +{"id":873,"first_name":"Norris","last_name":"Eggle","email":"neggleo8@shinystat.com"}, +{"id":874,"first_name":"Andrey","last_name":"Hannant","email":"ahannanto9@hao123.com"}, +{"id":875,"first_name":"Nicoli","last_name":"Kitteringham","email":"nkitteringhamoa@e-recht24.de"}, +{"id":876,"first_name":"Ashlee","last_name":"Seal","email":"asealob@dell.com"}, +{"id":877,"first_name":"Delainey","last_name":"Gullefant","email":"dgullefantoc@barnesandnoble.com"}, +{"id":878,"first_name":"Wakefield","last_name":"Shurrocks","email":"wshurrocksod@ucla.edu"}, +{"id":879,"first_name":"Ced","last_name":"Woolis","email":"cwoolisoe@reuters.com"}, +{"id":880,"first_name":"Ky","last_name":"Bohlin","email":"kbohlinof@reverbnation.com"}, +{"id":881,"first_name":"Marnia","last_name":"Ranscomb","email":"mranscombog@shop-pro.jp"}, +{"id":882,"first_name":"Clair","last_name":"Plose","email":"cploseoh@zdnet.com"}, +{"id":883,"first_name":"Nil","last_name":"Castiello","email":"ncastiellooi@netlog.com"}, +{"id":884,"first_name":"Beck","last_name":"Farfalameev","email":"bfarfalameevoj@princeton.edu"}, +{"id":885,"first_name":"Dorian","last_name":"Brame","email":"dbrameok@usgs.gov"}, +{"id":886,"first_name":"Nell","last_name":"Winckles","email":"nwincklesol@sfgate.com"}, +{"id":887,"first_name":"Kippy","last_name":"Lenz","email":"klenzom@microsoft.com"}, +{"id":888,"first_name":"Maddie","last_name":"Yair","email":"myairon@va.gov"}, +{"id":889,"first_name":"Vick","last_name":"Lukasen","email":"vlukasenoo@woothemes.com"}, +{"id":890,"first_name":"Arlyne","last_name":"Gonnet","email":"agonnetop@livejournal.com"}, +{"id":891,"first_name":"Beverie","last_name":"Hundall","email":"bhundalloq@sohu.com"}, +{"id":892,"first_name":"Sondra","last_name":"Sextie","email":"ssextieor@hugedomains.com"}, +{"id":893,"first_name":"Rita","last_name":"McLafferty","email":"rmclaffertyos@infoseek.co.jp"}, +{"id":894,"first_name":"Albina","last_name":"Moran","email":"amoranot@nationalgeographic.com"}, +{"id":895,"first_name":"Julissa","last_name":"Ilchenko","email":"jilchenkoou@telegraph.co.uk"}, +{"id":896,"first_name":"Arnoldo","last_name":"Conkey","email":"aconkeyov@pen.io"}, +{"id":897,"first_name":"Elliott","last_name":"Yearby","email":"eyearbyow@bloglovin.com"}, +{"id":898,"first_name":"Lura","last_name":"Borgne","email":"lborgneox@techcrunch.com"}, +{"id":899,"first_name":"Trescha","last_name":"Mottinelli","email":"tmottinellioy@google.com"}, +{"id":900,"first_name":"Miguela","last_name":"Zeplin","email":"mzeplinoz@drupal.org"}, +{"id":901,"first_name":"Arleen","last_name":"Boothman","email":"aboothmanp0@google.com.br"}, +{"id":902,"first_name":"Natalee","last_name":"Glendining","email":"nglendiningp1@yandex.ru"}, +{"id":903,"first_name":"Tobiah","last_name":"Booton","email":"tbootonp2@msu.edu"}, +{"id":904,"first_name":"Dyanna","last_name":"Ferrer","email":"dferrerp3@webnode.com"}, +{"id":905,"first_name":"Durant","last_name":"Lewsey","email":"dlewseyp4@harvard.edu"}, +{"id":906,"first_name":"Tad","last_name":"Gheerhaert","email":"tgheerhaertp5@yellowbook.com"}, +{"id":907,"first_name":"Magdaia","last_name":"Tordiffe","email":"mtordiffep6@w3.org"}, +{"id":908,"first_name":"Melodie","last_name":"Welton","email":"mweltonp7@surveymonkey.com"}, +{"id":909,"first_name":"Ennis","last_name":"Orbell","email":"eorbellp8@hud.gov"}, +{"id":910,"first_name":"Adora","last_name":"MacCaffrey","email":"amaccaffreyp9@yandex.ru"}, +{"id":911,"first_name":"Tan","last_name":"Utridge","email":"tutridgepa@storify.com"}, +{"id":912,"first_name":"Cornie","last_name":"Grishinov","email":"cgrishinovpb@free.fr"}, +{"id":913,"first_name":"Linn","last_name":"Thiem","email":"lthiempc@omniture.com"}, +{"id":914,"first_name":"Tara","last_name":"Eckels","email":"teckelspd@mayoclinic.com"}, +{"id":915,"first_name":"Marylee","last_name":"Thaine","email":"mthainepe@economist.com"}, +{"id":916,"first_name":"Vonni","last_name":"Pretti","email":"vprettipf@stanford.edu"}, +{"id":917,"first_name":"Kenneth","last_name":"Eshelby","email":"keshelbypg@guardian.co.uk"}, +{"id":918,"first_name":"Jasen","last_name":"Adin","email":"jadinph@state.tx.us"}, +{"id":919,"first_name":"Madelle","last_name":"Labdon","email":"mlabdonpi@edublogs.org"}, +{"id":920,"first_name":"Boycey","last_name":"Stonelake","email":"bstonelakepj@php.net"}, +{"id":921,"first_name":"Aundrea","last_name":"Waymont","email":"awaymontpk@github.io"}, +{"id":922,"first_name":"Hasty","last_name":"Ovill","email":"hovillpl@jiathis.com"}, +{"id":923,"first_name":"Vina","last_name":"Jeaycock","email":"vjeaycockpm@engadget.com"}, +{"id":924,"first_name":"Ettore","last_name":"Salman","email":"esalmanpn@ucsd.edu"}, +{"id":925,"first_name":"Alleyn","last_name":"Omand","email":"aomandpo@xinhuanet.com"}, +{"id":926,"first_name":"Karrah","last_name":"Etches","email":"ketchespp@nationalgeographic.com"}, +{"id":927,"first_name":"Saloma","last_name":"Pallas","email":"spallaspq@google.cn"}, +{"id":928,"first_name":"Janice","last_name":"Almack","email":"jalmackpr@jiathis.com"}, +{"id":929,"first_name":"Mallissa","last_name":"Moreing","email":"mmoreingps@amazon.com"}, +{"id":930,"first_name":"Dotti","last_name":"Duddell","email":"dduddellpt@bbb.org"}, +{"id":931,"first_name":"Kordula","last_name":"Hutchison","email":"khutchisonpu@vkontakte.ru"}, +{"id":932,"first_name":"Frederich","last_name":"Bircher","email":"fbircherpv@scribd.com"}, +{"id":933,"first_name":"Reinold","last_name":"Copeman","email":"rcopemanpw@1und1.de"}, +{"id":934,"first_name":"Isa","last_name":"De Cruze","email":"idecruzepx@slate.com"}, +{"id":935,"first_name":"Prue","last_name":"Cannings","email":"pcanningspy@cnet.com"}, +{"id":936,"first_name":"Deina","last_name":"Lapworth","email":"dlapworthpz@army.mil"}, +{"id":937,"first_name":"Ellen","last_name":"Battershall","email":"ebattershallq0@slideshare.net"}, +{"id":938,"first_name":"Christophe","last_name":"Blazdell","email":"cblazdellq1@google.fr"}, +{"id":939,"first_name":"Krispin","last_name":"Dancer","email":"kdancerq2@creativecommons.org"}, +{"id":940,"first_name":"Anastasie","last_name":"Lanfer","email":"alanferq3@dedecms.com"}, +{"id":941,"first_name":"Armand","last_name":"Jezzard","email":"ajezzardq4@g.co"}, +{"id":942,"first_name":"Emmalee","last_name":"Bedberry","email":"ebedberryq5@ebay.co.uk"}, +{"id":943,"first_name":"Adena","last_name":"Grigorushkin","email":"agrigorushkinq6@sohu.com"}, +{"id":944,"first_name":"Salaidh","last_name":"Bogeys","email":"sbogeysq7@google.com.au"}, +{"id":945,"first_name":"Venus","last_name":"Anney","email":"vanneyq8@indiegogo.com"}, +{"id":946,"first_name":"Nicki","last_name":"Wheatley","email":"nwheatleyq9@examiner.com"}, +{"id":947,"first_name":"Boyd","last_name":"Vigors","email":"bvigorsqa@shutterfly.com"}, +{"id":948,"first_name":"Glyn","last_name":"Sherlaw","email":"gsherlawqb@ask.com"}, +{"id":949,"first_name":"Gaultiero","last_name":"Knight","email":"gknightqc@who.int"}, +{"id":950,"first_name":"Marinna","last_name":"Kores","email":"mkoresqd@economist.com"}, +{"id":951,"first_name":"Janos","last_name":"Banton","email":"jbantonqe@feedburner.com"}, +{"id":952,"first_name":"Arvie","last_name":"Waterstone","email":"awaterstoneqf@prlog.org"}, +{"id":953,"first_name":"Moreen","last_name":"Llewellin","email":"mllewellinqg@sphinn.com"}, +{"id":954,"first_name":"Federica","last_name":"Le land","email":"flelandqh@devhub.com"}, +{"id":955,"first_name":"Tricia","last_name":"Dwelley","email":"tdwelleyqi@princeton.edu"}, +{"id":956,"first_name":"Kincaid","last_name":"Jentin","email":"kjentinqj@tripadvisor.com"}, +{"id":957,"first_name":"Wallie","last_name":"MacNeil","email":"wmacneilqk@fastcompany.com"}, +{"id":958,"first_name":"Cal","last_name":"Norvill","email":"cnorvillql@free.fr"}, +{"id":959,"first_name":"Ron","last_name":"Noton","email":"rnotonqm@cnet.com"}, +{"id":960,"first_name":"Abagael","last_name":"Ginty","email":"agintyqn@digg.com"}, +{"id":961,"first_name":"Joachim","last_name":"Hakking","email":"jhakkingqo@utexas.edu"}, +{"id":962,"first_name":"Jerry","last_name":"Gorries","email":"jgorriesqp@yahoo.com"}, +{"id":963,"first_name":"Sloan","last_name":"Ivanikov","email":"sivanikovqq@sohu.com"}, +{"id":964,"first_name":"Humfried","last_name":"Verbrugge","email":"hverbruggeqr@blogs.com"}, +{"id":965,"first_name":"Freedman","last_name":"Frohock","email":"ffrohockqs@tripod.com"}, +{"id":966,"first_name":"Jenni","last_name":"Motion","email":"jmotionqt@opera.com"}, +{"id":967,"first_name":"Shane","last_name":"Oxenden","email":"soxendenqu@comcast.net"}, +{"id":968,"first_name":"Kelly","last_name":"Andreopolos","email":"kandreopolosqv@ihg.com"}, +{"id":969,"first_name":"Philipa","last_name":"Cartmale","email":"pcartmaleqw@sourceforge.net"}, +{"id":970,"first_name":"Bekki","last_name":"Swaysland","email":"bswayslandqx@google.ru"}, +{"id":971,"first_name":"Gennifer","last_name":"Cretney","email":"gcretneyqy@wired.com"}, +{"id":972,"first_name":"Marja","last_name":"Feaveryear","email":"mfeaveryearqz@amazon.de"}, +{"id":973,"first_name":"Pier","last_name":"Adrian","email":"padrianr0@pcworld.com"}, +{"id":974,"first_name":"Darius","last_name":"Gertz","email":"dgertzr1@alibaba.com"}, +{"id":975,"first_name":"Art","last_name":"Sposito","email":"aspositor2@example.com"}, +{"id":976,"first_name":"Trisha","last_name":"Dahlbom","email":"tdahlbomr3@addtoany.com"}, +{"id":977,"first_name":"Nance","last_name":"Malcolm","email":"nmalcolmr4@fastcompany.com"}, +{"id":978,"first_name":"Betty","last_name":"Menilove","email":"bmenilover5@hubpages.com"}, +{"id":979,"first_name":"Xavier","last_name":"Brereton","email":"xbreretonr6@auda.org.au"}, +{"id":980,"first_name":"Any","last_name":"Pach","email":"apachr7@vimeo.com"}, +{"id":981,"first_name":"Eddy","last_name":"Shooter","email":"eshooterr8@creativecommons.org"}, +{"id":982,"first_name":"Belicia","last_name":"Nolan","email":"bnolanr9@hud.gov"}, +{"id":983,"first_name":"Olag","last_name":"Baniard","email":"obaniardra@addthis.com"}, +{"id":984,"first_name":"Jake","last_name":"Gilburt","email":"jgilburtrb@purevolume.com"}, +{"id":985,"first_name":"Gregoor","last_name":"Garham","email":"ggarhamrc@cbslocal.com"}, +{"id":986,"first_name":"Chrissie","last_name":"Buxam","email":"cbuxamrd@ucoz.ru"}, +{"id":987,"first_name":"Vere","last_name":"Maylin","email":"vmaylinre@google.fr"}, +{"id":988,"first_name":"Jefferson","last_name":"O'Cannavan","email":"jocannavanrf@studiopress.com"}, +{"id":989,"first_name":"Andrej","last_name":"Gopsill","email":"agopsillrg@google.cn"}, +{"id":990,"first_name":"Gwenni","last_name":"Summerlad","email":"gsummerladrh@google.es"}, +{"id":991,"first_name":"Tressa","last_name":"Smeuin","email":"tsmeuinri@arizona.edu"}, +{"id":992,"first_name":"Winny","last_name":"Taw","email":"wtawrj@vinaora.com"}, +{"id":993,"first_name":"Morgen","last_name":"Bottomore","email":"mbottomorerk@php.net"}, +{"id":994,"first_name":"Umberto","last_name":"Lamputt","email":"ulamputtrl@blogtalkradio.com"}, +{"id":995,"first_name":"Donnie","last_name":"Hawking","email":"dhawkingrm@vk.com"}, +{"id":996,"first_name":"Lorette","last_name":"Daine","email":"ldainern@indiatimes.com"}, +{"id":997,"first_name":"Bethena","last_name":"Paddle","email":"bpaddlero@drupal.org"}, +{"id":998,"first_name":"Itch","last_name":"Elwel","email":"ielwelrp@sciencedaily.com"}, +{"id":999,"first_name":"Lizabeth","last_name":"Gatteridge","email":"lgatteridgerq@sakura.ne.jp"}, +{"id":1000,"first_name":"Nananne","last_name":"Aubri","email":"naubrirr@cnn.com"}] diff --git a/examples/islands_router/public/routing.js b/examples/islands_router/public/routing.js index 6948f82307..59c6a07fef 100644 --- a/examples/islands_router/public/routing.js +++ b/examples/islands_router/public/routing.js @@ -1,4 +1,53 @@ +let NAVIGATION = 0; + window.addEventListener("click", async (ev) => { + const req = clickToReq(ev); + if(!req) { + return; + } + + ev.preventDefault(); + await navigateToPage(req); +}); + +window.addEventListener("submit", async (ev) => { + const req = submitToReq(ev); + if(!req) { + return; + } + + ev.preventDefault(); + await navigateToPage(req); +}); + +async function navigateToPage(req) { + NAVIGATION += 1; + const currentNav = NAVIGATION; + + // fetch the new page + const resp = await fetch(req); + const htmlString = await resp.text(); + + if(NAVIGATION === currentNav) { + // The 'doc' variable now contains the parsed DOM + const transition = async () => { + try { + diffPages(htmlString); + } catch(e) { + console.error(e); + } + }; + // Not all browsers support startViewTransition; see https://caniuse.com/?search=startViewTransition + if (document.startViewTransition) { + await document.startViewTransition(transition); + } else { + await transition() + } + window.history.pushState(undefined, null, req.url); + } +} + +function clickToReq(ev) { // confirm that this is an that meets our requirements if ( ev.defaultPrevented || @@ -23,7 +72,7 @@ window.addEventListener("click", async (ev) => { if (target || (!href && !a.hasAttribute("state"))) return; const rel = (a.getAttribute("rel") || "").split(/\s+/); - if (a.hasAttribute("download") || (rel && rel.includes("external"))) return; + if (a.hasAttribute("download") || (rel?.includes("external"))) return; const url = svg ? new URL(href, document.baseURI) : new URL(href); if ( @@ -31,110 +80,245 @@ window.addEventListener("click", async (ev) => { // TODO base //(basePath && url.pathname && !url.pathname.toLowerCase().startsWith(basePath.toLowerCase())) ) - return; + return; - ev.preventDefault(); + return new Request(url); +} - // fetch the new page - const resp = await fetch(url); - const htmlString = await resp.text(); +function submitToReq(ev) { + event.preventDefault(); + + const target = ev.target; + /** @type HTMLFormElement */ + let form; + if(target instanceof HTMLFormElement) { + form = target; + } else { + if(!target.form) { + return; + } + form = target.form; + } + + const method = form.method.toUpperCase(); + if(method !== "GET" && method !== "POST") { + return; + } - // Use DOMParser to parse the HTML string - const parser = new DOMParser(); + const url = new URL(form.action); + let path = url.pathname; + const requestInit = {}; + const data = new FormData(form); + + if(method === "GET") { + const params = new URLSearchParams(); + for (const [key, value] of data.entries()) { + params.append(key, value); + } + path += `?${params.toString()}`; + } + else { + requestInit.method = "POST"; + requestInit.body = data; + } + + + return new Request( + path, + requestInit + ); +} + + +function diffPages(htmlString) { + // Use DOMParser to parse the HTML string + const parser = new DOMParser(); // TODO parse from the request stream instead? - const doc = parser.parseFromString(htmlString, 'text/html'); - - // The 'doc' variable now contains the parsed DOM - const transition = async () => { - const oldDocWalker = document.createTreeWalker(document); - const newDocWalker = doc.createTreeWalker(doc); - let oldNode = oldDocWalker.currentNode; - let newNode = newDocWalker.currentNode; - while(oldDocWalker.nextNode() && newDocWalker.nextNode()) { - oldNode = oldDocWalker.currentNode; - newNode = newDocWalker.currentNode; - // if the nodes are different, we need to replace the old with the new - // because of the typed view tree, this should never actually happen - if (oldNode.nodeType !== newNode.nodeType) { - oldNode.replaceWith(newNode); + const doc = parser.parseFromString(htmlString, 'text/html'); + + const oldDocWalker = document.createTreeWalker(document); + const newDocWalker = doc.createTreeWalker(doc); + let oldNode = oldDocWalker.currentNode; + let newNode = newDocWalker.currentNode; + while(oldDocWalker.nextNode() && newDocWalker.nextNode()) { + oldNode = oldDocWalker.currentNode; + newNode = newDocWalker.currentNode; + // if the nodes are different, we need to replace the old with the new + // because of the typed view tree, this should never actually happen + if (oldNode.nodeType !== newNode.nodeType) { + oldNode.replaceWith(newNode); + } + // if it's a text node, just update the text with the new text + else if (oldNode.nodeType === Node.TEXT_NODE) { + oldNode.textContent = newNode.textContent; + } + // if it's an element, replace if it's a different tag, or update attributes + else if (oldNode.nodeType === Node.ELEMENT_NODE) { + diffElement(oldNode, newNode); + } + // we use comment "branch marker" nodes to distinguish between different branches in the statically-typed view tree + // if one of these marker is hit, then there are two options + // 1) it's the same branch, and we just keep walking until the end + // 2) it's a different branch, in which case the old can be replaced with the new wholesale + else if (oldNode.nodeType === Node.COMMENT_NODE) { + const oldText = oldNode.textContent; + const newText = newNode.textContent; + if(oldText.startsWith("bo-for")) { + replaceFor(oldDocWalker, newDocWalker, oldNode, newNode); + } + if(oldText.startsWith("bo") && newText !== oldText) { + replaceBranch(oldDocWalker, newDocWalker, oldNode, newNode); + } + } + } +} + +function replaceFor(oldDocWalker, newDocWalker, oldNode, newNode) { + oldDocWalker.nextNode(); + newDocWalker.nextNode(); + const oldRange = new Range(); + const newRange = new Range(); + let oldBranches = 1; + let newBranches = 1; + + const oldKeys = {}; + const newKeys = {}; + + while(oldBranches > 0) { + const c = oldDocWalker.currentNode; + if(c.nodeType === Node.COMMENT_NODE) { + const t = c.textContent; + if(t.startsWith("bo-for")) { + oldBranches += 1; + } else if(t.startsWith("bc-for")) { + + oldBranches -= 1; + } else if (t.startsWith("bo-item")) { + const k = t.replace("bo-item-", ""); + oldKeys[k] = { open: c, close: null }; + } else if (t.startsWith("bc-item")) { + const k = t.replace("bc-item-", ""); + oldKeys[k].close = c; } - // if it's a text node, just update the text with the new text - else if (oldNode.nodeType === Node.TEXT_NODE) { - oldNode.textContent = newNode.textContent; + } + oldDocWalker.nextNode(); + } + while(newBranches > 0) { + const c = newDocWalker.currentNode; + if(c.nodeType === Node.COMMENT_NODE) { + const t = c.textContent; + if(t.startsWith("bo-for")) { + newBranches += 1; + } else if(t.startsWith("bc-for")) { + + newBranches -= 1; + } else if (t.startsWith("bo-item")) { + const k = t.replace("bo-item-", ""); + newKeys[k] = { open: c, close: null }; + } else if (t.startsWith("bc-item")) { + const k = t.replace("bc-item-", ""); + newKeys[k].close = c; } - // if it's an element, replace if it's a different tag, or update attributes - else if (oldNode.nodeType === Node.ELEMENT_NODE) { - /** @type Element */ - const oldEl = oldNode; - /** @type Element */ - const newEl = newNode; - if (oldEl.tagName !== newEl.tagName) { - oldEl.replaceWith(newEl); + } + newDocWalker.nextNode(); + } + + for(const key in oldKeys) { + if(newKeys[key]) { + // replace the item in the *new* list with the *old* DOM elements + const oldOne = oldKeys[key]; + const newOne = newKeys[key]; + console.log("need to replace", key, oldOne, newOne); + const oldRange = new Range(); + const newRange = new Range(); + oldRange.setStartAfter(oldOne.open); + oldRange.setEndBefore(oldOne.close); + newRange.setStartAfter(newOne.open); + newRange.setEndBefore(newOne.close); + const newContents = oldRange.extractContents(); + newRange.deleteContents(); + newRange.insertNode(newContents); + newOne.open.replaceWith(oldOne.open); + newOne.close.replaceWith(oldOne.close); + + // then diff the *old* DOM elements with the new ones + // (TODO) + } + } + + try { + oldRange.setStartAfter(oldNode); + oldRange.setEndBefore(oldDocWalker.currentNode); + newRange.setStartAfter(newNode); + newRange.setEndAfter(newDocWalker.currentNode); + const newContents = newRange.extractContents(); + oldRange.deleteContents(); + oldRange.insertNode(newContents); + oldNode.replaceWith(newNode); + oldDocWalker.currentNode.replaceWith(newDocWalker.currentNode); + } catch (e) { + console.error(e); + } +} + +function replaceBranch(oldDocWalker, newDocWalker, oldNode, newNode) { + oldDocWalker.nextNode(); + newDocWalker.nextNode(); + const oldRange = new Range(); + const newRange = new Range(); + let oldBranches = 1; + let newBranches = 1; + while(oldBranches > 0) { + if(oldDocWalker.nextNode()) { + if(oldDocWalker.currentNode.nodeType === Node.COMMENT_NODE) { + if(oldDocWalker.currentNode.textContent.startsWith("bo")) { + oldBranches += 1; + } else if(oldDocWalker.currentNode.textContent.startsWith("bc")) { + + oldBranches -= 1; } - else { - for(const attr of newEl.attributes) { - oldEl.setAttribute(attr.name, attr.value); - } + } + } + } + while(newBranches > 0) { + if(newDocWalker.nextNode()) { + if(newDocWalker.currentNode.nodeType === Node.COMMENT_NODE) { + if(newDocWalker.currentNode.textContent.startsWith("bo")) { + newBranches += 1; + } else if(newDocWalker.currentNode.textContent.startsWith("bc")) { + + newBranches -= 1; } } - // we use comment "branch marker" nodes to distinguish between different branches in the statically-typed view tree - // if one of these marker is hit, then there are two options - // 1) it's the same branch, and we just keep walking until the end - // 2) it's a different branch, in which case the old can be replaced with the new wholesale - else if (oldNode.nodeType === Node.COMMENT_NODE) { - const oldText = oldNode.textContent; - const newText = newNode.textContent; - if(oldText.startsWith("bo") && newText !== oldText) { - oldDocWalker.nextNode(); - newDocWalker.nextNode(); - const oldRange = new Range(); - const newRange = new Range(); - let oldBranches = 1; - let newBranches = 1; - while(oldBranches > 0 && newBranches > 0) { - if(oldDocWalker.nextNode() && newDocWalker.nextNode()) { - console.log(oldDocWalker.currentNode, newDocWalker.currentNode); - if(oldDocWalker.currentNode.nodeType === Node.COMMENT_NODE) { - if(oldDocWalker.currentNode.textContent.startsWith("bo")) { - oldBranches += 1; - } else if(oldDocWalker.currentNode.textContent.startsWith("bc")) { - - oldBranches -= 1; - } - } - if(newDocWalker.currentNode.nodeType === Node.COMMENT_NODE) { - if(newDocWalker.currentNode.textContent.startsWith("bo")) { - newBranches += 1; - } else if(newDocWalker.currentNode.textContent.startsWith("bc")) { - - newBranches -= 1; - } - } - } - } - - try { - oldRange.setStartAfter(oldNode); - oldRange.setEndBefore(oldDocWalker.currentNode); - newRange.setStartAfter(newNode); - newRange.setEndBefore(newDocWalker.currentNode); - const newContents = newRange.extractContents(); - oldRange.deleteContents(); - oldRange.insertNode(newContents); - oldNode.replaceWith(newNode); - oldDocWalker.currentNode.replaceWith(newDocWalker.currentNode); - } catch (e) { - console.error(e); - } - } } } - }; - // Not all browsers support startViewTransition; see https://caniuse.com/?search=startViewTransition - if (document.startViewTransition) { - await document.startViewTransition(transition); - } else { - await transition() } - window.history.pushState(undefined, null, url); -}); + try { + oldRange.setStartAfter(oldNode); + oldRange.setEndBefore(oldDocWalker.currentNode); + newRange.setStartAfter(newNode); + newRange.setEndAfter(newDocWalker.currentNode); + const newContents = newRange.extractContents(); + oldRange.deleteContents(); + oldRange.insertNode(newContents); + oldNode.replaceWith(newNode); + oldDocWalker.currentNode.replaceWith(newDocWalker.currentNode); + } catch (e) { + console.error(e); + } +} + +function diffElement(oldNode, newNode) { + /** @type Element */ + const oldEl = oldNode; + /** @type Element */ + const newEl = newNode; + if (oldEl.tagName !== newEl.tagName) { + oldEl.replaceWith(newEl); + } + else { + for(const attr of newEl.attributes) { + oldEl.setAttribute(attr.name, attr.value); + } + } +} diff --git a/examples/islands_router/src/app.rs b/examples/islands_router/src/app.rs index a38cef001f..cf0ed7a238 100644 --- a/examples/islands_router/src/app.rs +++ b/examples/islands_router/src/app.rs @@ -1,8 +1,10 @@ -use leptos::prelude::*; +use leptos::{either::EitherOf3, prelude::*}; use leptos_router::{ - components::{FlatRoutes, Route, Router}, - StaticSegment, + components::{Route, Router, Routes}, + hooks::use_query_map, + SsrMode, StaticSegment, }; +use serde::{Deserialize, Serialize}; pub fn shell(options: LeptosOptions) -> impl IntoView { view! { @@ -29,31 +31,102 @@ pub fn App() -> impl IntoView {
-

"My Application"

+

"My Contacts"

-

- -

- - - - + + + +
} } +#[server] +pub async fn search(query: String) -> Result, ServerFnError> { + let users = tokio::fs::read_to_string("./mock_data.json").await?; + let data: Vec = serde_json::from_str(&users)?; + let query = query.to_ascii_lowercase(); + Ok(data + .into_iter() + .filter(|user| { + user.first_name.to_ascii_lowercase().contains(&query) + || user.last_name.to_ascii_lowercase().contains(&query) + || user.email.to_ascii_lowercase().contains(&query) + }) + .collect()) +} + +#[derive(Deserialize, Serialize, Debug, Clone)] +pub struct User { + id: u32, + first_name: String, + last_name: String, + email: String, +} + #[component] -pub fn PageA() -> impl IntoView { - view! { } +pub fn Home() -> impl IntoView { + let q = use_query_map(); + let q = move || q.read().get("q"); + let data = Resource::new(q, |q| async move { + if let Some(q) = q { + search(q).await + } else { + Ok(vec![]) + } + }); + let view = move || { + Suspend::new(async move { + let users = data.await.unwrap(); + if q().is_none() { + EitherOf3::A(view! { +

"Enter a search to begin viewing contacts."

+ }) + } else if users.is_empty() { + EitherOf3::B(view! { +

"No users found matching that search."

+ }) + } else { + EitherOf3::C(view! { + + + + + + + + + + + +
{user.first_name}{user.last_name}{user.email}
+ }) + } + }) + }; + view! { +
+ + +
+ {view} + } } #[component] -pub fn PageB() -> impl IntoView { - view! { } +pub fn About() -> impl IntoView { + view! { +

"About"

+

"This demo is intended to show off an experimental “islands router” feature, which mimics the smooth transitions and user experience of client-side routing while minimizing the amount of code that actually runs in the browser."

+ } } diff --git a/examples/ssr_modes_axum/Cargo.toml b/examples/ssr_modes_axum/Cargo.toml index 2fc4130057..78bf396747 100644 --- a/examples/ssr_modes_axum/Cargo.toml +++ b/examples/ssr_modes_axum/Cargo.toml @@ -29,6 +29,8 @@ tokio = { version = "1.39", features = [ "time", ], optional = true } wasm-bindgen = "0.2.93" +gloo-timers = { version = "0.3.0", features = ["futures"] } +send_wrapper = { version = "0.6.0", features = ["futures"] } [features] hydrate = ["leptos/hydrate"] diff --git a/examples/ssr_modes_axum/src/app.rs b/examples/ssr_modes_axum/src/app.rs index 37dbe3801c..bab5bbedba 100644 --- a/examples/ssr_modes_axum/src/app.rs +++ b/examples/ssr_modes_axum/src/app.rs @@ -32,301 +32,36 @@ pub fn shell(options: LeptosOptions) -> impl IntoView { } } -#[cfg(feature = "ssr")] -static IS_ADMIN: AtomicBool = AtomicBool::new(true); - -#[server] -pub async fn is_admin() -> Result { - Ok(IS_ADMIN.load(Ordering::Relaxed)) -} - -#[server] -pub async fn set_is_admin(is_admin: bool) -> Result<(), ServerFnError> { - IS_ADMIN.store(is_admin, Ordering::Relaxed); - Ok(()) -} - #[component] pub fn App() -> impl IntoView { - // Provides context that manages stylesheets, titles, meta tags, etc. - provide_meta_context(); - let fallback = || view! { "Page not found." }.into_view(); - let toggle_admin = ServerAction::::new(); - let is_admin = - Resource::new(move || toggle_admin.version().get(), |_| is_admin()); - - view! { - - - <Meta name="color-scheme" content="dark light"/> - <Router> - <nav> - <a href="/">"Home"</a> - <a href="/admin">"Admin"</a> - <Transition> - <ActionForm action=toggle_admin> - <input - type="hidden" - name="is_admin" - value=move || { - (!is_admin.get().and_then(|n| n.ok()).unwrap_or_default()) - .to_string() - } - /> - - <button> - {move || { - if is_admin.get().and_then(Result::ok).unwrap_or_default() { - "Log Out" - } else { - "Log In" - } - }} - - </button> - </ActionForm> - </Transition> - </nav> - <main> - <FlatRoutes fallback> - // We’ll load the home page with out-of-order streaming and <Suspense/> - <Route path=StaticSegment("") view=HomePage/> - - // We'll load the posts with async rendering, so they can set - // the title and metadata *after* loading the data - <Route - path=(StaticSegment("post"), ParamSegment("id")) - view=Post - ssr=SsrMode::Async - /> - <Route - path=(StaticSegment("post_in_order"), ParamSegment("id")) - view=Post - ssr=SsrMode::InOrder - /> - <Route - path=(StaticSegment("post_partially_blocked"), ParamSegment("id")) - view=Post - /> - <ProtectedRoute - path=StaticSegment("admin") - view=Admin - ssr=SsrMode::Async - condition=move || is_admin.get().map(|n| n.unwrap_or(false)) - redirect_path=|| "/" - /> - </FlatRoutes> - </main> - </Router> - } -} - -#[component] -fn HomePage() -> impl IntoView { - // load the posts - let posts = Resource::new(|| (), |_| list_post_metadata()); - let posts = move || { - posts - .get() - .map(|n| n.unwrap_or_default()) - .unwrap_or_default() - }; - - let posts2 = Resource::new(|| (), |_| list_post_metadata()); - let posts2 = Resource::new( - || (), - move |_| async move { posts2.await.as_ref().map(Vec::len).unwrap_or(0) }, - ); - - view! { - <h1>"My Great Blog"</h1> - <Suspense fallback=move || view! { <p>"Loading posts..."</p> }> - <p>"number of posts: " {Suspend::new(async move { posts2.await })}</p> - </Suspense> - <Suspense fallback=move || view! { <p>"Loading posts..."</p> }> - <ul> - <For each=posts key=|post| post.id let:post> - <li> - <a href=format!("/post/{}", post.id)>{post.title.clone()}</a> - "|" - <a href=format!( - "/post_in_order/{}", - post.id, - )>{post.title.clone()} "(in order)"</a> - "|" - <a href=format!( - "/post_partially_blocked/{}", - post.id, - )>{post.title} "(partially blocked)"</a> - </li> - </For> - </ul> - </Suspense> - } -} - -#[derive(Params, Copy, Clone, Debug, PartialEq, Eq)] -pub struct PostParams { - id: Option<usize>, -} - -#[component] -fn Post() -> impl IntoView { - let query = use_params::<PostParams>(); - let id = move || { - query.with(|q| { - q.as_ref() - .map(|q| q.id.unwrap_or_default()) - .map_err(|_| PostError::InvalidId) - }) - }; - let post_resource = Resource::new_blocking(id, |id| async move { - match id { - Err(e) => Err(e), - Ok(id) => get_post(id) - .await - .map(|data| data.ok_or(PostError::PostNotFound)) - .map_err(|_| PostError::ServerError), - } - }); - let comments_resource = Resource::new(id, |id| async move { - match id { - Err(e) => Err(e), - Ok(id) => { - get_comments(id).await.map_err(|_| PostError::ServerError) + let count = RwSignal::new(2); + let posts = Resource::new( + move || count.get(), + |count| async move { + if count % 2 == 0 { + (0..count).collect::<Vec<_>>() + } else { + vec![] } - } - }); - - let post_view = Suspend::new(async move { - match post_resource.await { - Ok(Ok(post)) => { - Ok(view! { - <h1>{post.title.clone()}</h1> - <p>{post.content.clone()}</p> - - // since we're using async rendering for this page, - // this metadata should be included in the actual HTML <head> - // when it's first served - <Title text=post.title/> - <Meta name="description" content=post.content/> - }) - } - _ => Err(PostError::ServerError), - } - }); - let comments_view = Suspend::new(async move { - match comments_resource.await { - Ok(comments) => Ok(view! { - <h1>"Comments"</h1> - <ul> - {comments - .into_iter() - .map(|comment| view! { <li>{comment}</li> }) - .collect_view()} - - </ul> - }), - _ => Err(PostError::ServerError), - } - }); + }, + ); view! { - <em>"The world's best content."</em> - <Suspense fallback=move || view! { <p>"Loading post..."</p> }> - <ErrorBoundary fallback=|errors| { - view! { - <div class="error"> - <h1>"Something went wrong."</h1> - <ul> - {move || { - errors - .get() - .into_iter() - .map(|(_, error)| view! { <li>{error.to_string()}</li> }) - .collect::<Vec<_>>() - }} - - </ul> - </div> - } - }>{post_view}</ErrorBoundary> + <button on:click=move |_| *count.write() += 1>"+1"</button> + <p> + <Suspense fallback=|| "Loading..."> + {move || Suspend::new(async move { + let posts = posts.await; + posts + .into_iter() + .map(|post| { + view! { + <div>{post}</div> + } + }) + .collect_view() + })} </Suspense> - <Suspense fallback=move || view! { <p>"Loading comments..."</p> }>{comments_view}</Suspense> + </p> } } - -#[component] -pub fn Admin() -> impl IntoView { - view! { <p>"You can only see this page if you're logged in."</p> } -} - -// Dummy API - -static POSTS: LazyLock<[Post; 3]> = LazyLock::new(|| { - [ - Post { - id: 0, - title: "My first post".to_string(), - content: "This is my first post".to_string(), - }, - Post { - id: 1, - title: "My second post".to_string(), - content: "This is my second post".to_string(), - }, - Post { - id: 2, - title: "My third post".to_string(), - content: "This is my third post".to_string(), - }, - ] -}); - -#[derive(Error, Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub enum PostError { - #[error("Invalid post ID.")] - InvalidId, - #[error("Post not found.")] - PostNotFound, - #[error("Server error.")] - ServerError, -} - -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub struct Post { - id: usize, - title: String, - content: String, -} - -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub struct PostMetadata { - id: usize, - title: String, -} - -#[server] -pub async fn list_post_metadata() -> Result<Vec<PostMetadata>, ServerFnError> { - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - Ok(POSTS - .iter() - .map(|data| PostMetadata { - id: data.id, - title: data.title.clone(), - }) - .collect()) -} - -#[server] -pub async fn get_post(id: usize) -> Result<Option<Post>, ServerFnError> { - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - Ok(POSTS.iter().find(|post| post.id == id).cloned()) -} - -#[server] -pub async fn get_comments(id: usize) -> Result<Vec<String>, ServerFnError> { - tokio::time::sleep(std::time::Duration::from_secs(2)).await; - _ = id; - Ok(vec!["Some comment".into(), "Some other comment".into()]) -} diff --git a/leptos/src/for_loop.rs b/leptos/src/for_loop.rs index 4c64b39174..d4a775498e 100644 --- a/leptos/src/for_loop.rs +++ b/leptos/src/for_loop.rs @@ -121,7 +121,7 @@ where EF: Fn(T) -> N + Send + Clone + 'static, N: IntoView + 'static, KF: Fn(&T) -> K + Send + Clone + 'static, - K: Eq + Hash + 'static, + K: Eq + Hash + ToString + 'static, T: Send + 'static, { // this takes the owner of the For itself @@ -195,7 +195,7 @@ where EF: Fn(ReadSignal<usize>, T) -> N + Send + Clone + 'static, N: IntoView + 'static, KF: Fn(&T) -> K + Send + Clone + 'static, - K: Eq + Hash + 'static, + K: Eq + Hash + ToString + 'static, T: Send + 'static, { // this takes the owner of the For itself diff --git a/router/src/flat_router.rs b/router/src/flat_router.rs index 57d553fd73..f0536f504b 100644 --- a/router/src/flat_router.rs +++ b/router/src/flat_router.rs @@ -10,7 +10,7 @@ use crate::{ use any_spawner::Executor; use either_of::Either; use futures::FutureExt; -use leptos::attr::any_attribute::AnyAttribute; +use leptos::attr::{any_attribute::AnyAttribute, Attribute}; use reactive_graph::{ computed::{ArcMemo, ScopedFuture}, owner::{provide_context, Owner}, @@ -27,7 +27,7 @@ use tachys::{ view::{ add_attr::AddAnyAttr, any_view::{AnyView, AnyViewState, IntoAny}, - Mountable, Position, PositionState, Render, RenderHtml, + MarkBranch, Mountable, Position, PositionState, Render, RenderHtml, }, }; @@ -365,6 +365,99 @@ where } } +#[derive(Debug)] +pub(crate) struct MatchedRoute(pub String, pub AnyView); + +impl Render for MatchedRoute { + type State = <AnyView as Render>::State; + + fn build(self) -> Self::State { + self.1.build() + } + + fn rebuild(self, state: &mut Self::State) { + self.1.rebuild(state); + } +} + +impl AddAnyAttr for MatchedRoute { + type Output<SomeNewAttr: Attribute> = Self; + + fn add_any_attr<NewAttr: Attribute>( + self, + attr: NewAttr, + ) -> Self::Output<NewAttr> + where + Self::Output<NewAttr>: RenderHtml, + { + let MatchedRoute(id, view) = self; + MatchedRoute(id, view.add_any_attr(attr)) + } +} + +impl RenderHtml for MatchedRoute { + type AsyncOutput = Self; + const MIN_LENGTH: usize = 0; + + fn dry_resolve(&mut self) { + self.1.dry_resolve(); + } + + async fn resolve(self) -> Self::AsyncOutput { + let MatchedRoute(id, view) = self; + let view = view.resolve().await; + MatchedRoute(id, view) + } + + fn to_html_with_buf( + self, + buf: &mut String, + position: &mut Position, + escape: bool, + mark_branches: bool, + ) { + if mark_branches { + buf.open_branch(&self.0); + } + self.1 + .to_html_with_buf(buf, position, escape, mark_branches); + if mark_branches { + buf.close_branch(&self.0); + } + } + + fn to_html_async_with_buf<const OUT_OF_ORDER: bool>( + self, + buf: &mut StreamBuilder, + position: &mut Position, + escape: bool, + mark_branches: bool, + ) where + Self: Sized, + { + if mark_branches { + buf.open_branch(&self.0); + } + self.1.to_html_async_with_buf::<OUT_OF_ORDER>( + buf, + position, + escape, + mark_branches, + ); + if mark_branches { + buf.close_branch(&self.0); + } + } + + fn hydrate<const FROM_SERVER: bool>( + self, + cursor: &Cursor, + position: &PositionState, + ) -> Self::State { + self.1.hydrate::<FROM_SERVER>(cursor, position) + } +} + impl<Loc, Defs, FalFn, Fal> FlatRoutesView<Loc, Defs, FalFn> where Loc: LocationProvider + Send, @@ -397,6 +490,7 @@ where let view = match new_match { None => (self.fallback)().into_any(), Some(new_match) => { + let id = new_match.as_matched().to_string(); let (view, _) = new_match.into_view_and_child(); let view = owner .with(|| { @@ -409,6 +503,7 @@ where }) .now_or_never() .expect("async route used in SSR"); + let view = MatchedRoute(id, view); view.into_any() } }; diff --git a/router/src/nested_router.rs b/router/src/nested_router.rs index c04685d704..005b28abb8 100644 --- a/router/src/nested_router.rs +++ b/router/src/nested_router.rs @@ -1,4 +1,5 @@ use crate::{ + flat_router::MatchedRoute, hooks::Matched, location::{LocationProvider, Url}, matching::RouteDefs, @@ -642,21 +643,28 @@ where async move { provide_context(params_including_parents); provide_context(url); - provide_context(matched); + provide_context(matched.clone()); view.preload().await; *view_fn.lock().or_poisoned() = Box::new(move || { let view = view.clone(); - owner.with(|| { - Suspend::new(Box::pin(async move { - let view = SendWrapper::new(ScopedFuture::new( - view.choose(), - )); - let view = view.await; - OwnedView::new(view).into_any() - }) - as Pin< - Box<dyn Future<Output = AnyView> + Send>, - >) + owner.with({ + let matched = matched.clone(); + move || { + Suspend::new(Box::pin(async move { + let view = SendWrapper::new( + ScopedFuture::new(view.choose()), + ); + let view = view.await; + let view = + MatchedRoute(matched.0.get(), view); + OwnedView::new(view).into_any() + }) + as Pin< + Box< + dyn Future<Output = AnyView> + Send, + >, + >) + } }) }); trigger diff --git a/tachys/src/view/any_view.rs b/tachys/src/view/any_view.rs index 98d08b0743..f9134604fe 100644 --- a/tachys/src/view/any_view.rs +++ b/tachys/src/view/any_view.rs @@ -72,6 +72,22 @@ pub struct AnyView { hydrate_from_server: fn(Erased, &Cursor, &PositionState) -> AnyViewState, } +impl Debug for AnyView { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("AnyView") + .field("type_id", &self.type_id) + .finish_non_exhaustive() + } +} + +impl Debug for AnyView { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("AnyView") + .field("type_id", &self.type_id) + .finish_non_exhaustive() + } +} + /// Retained view state for [`AnyView`]. pub struct AnyViewState { type_id: TypeId, diff --git a/tachys/src/view/keyed.rs b/tachys/src/view/keyed.rs index 184911d135..2dca0d08e1 100644 --- a/tachys/src/view/keyed.rs +++ b/tachys/src/view/keyed.rs @@ -1,6 +1,6 @@ use super::{ - add_attr::AddAnyAttr, Mountable, Position, PositionState, Render, - RenderHtml, + add_attr::AddAnyAttr, MarkBranch, Mountable, Position, PositionState, + Render, RenderHtml, }; use crate::{ html::attribute::{any_attribute::AnyAttribute, Attribute}, @@ -66,7 +66,7 @@ where impl<T, I, K, KF, VF, VFS, V> Render for Keyed<T, I, K, KF, VF, VFS, V> where I: IntoIterator<Item = T>, - K: Eq + Hash + 'static, + K: Eq + Hash + ToString + 'static, KF: Fn(&T) -> K, V: Render, VF: Fn(usize, T) -> (VFS, V), @@ -132,7 +132,7 @@ where impl<T, I, K, KF, VF, VFS, V> AddAnyAttr for Keyed<T, I, K, KF, VF, VFS, V> where I: IntoIterator<Item = T> + Send + 'static, - K: Eq + Hash + 'static, + K: Eq + Hash + ToString + 'static, KF: Fn(&T) -> K + Send + 'static, V: RenderHtml, V: 'static, @@ -185,7 +185,7 @@ where impl<T, I, K, KF, VF, VFS, V> RenderHtml for Keyed<T, I, K, KF, VF, VFS, V> where I: IntoIterator<Item = T> + Send + 'static, - K: Eq + Hash + 'static, + K: Eq + Hash + ToString + 'static, KF: Fn(&T) -> K + Send + 'static, V: RenderHtml + 'static, VF: Fn(usize, T) -> (VFS, V) + Send + 'static, @@ -221,8 +221,14 @@ where mark_branches: bool, extra_attrs: Vec<AnyAttribute>, ) { + if mark_branches { + buf.open_branch("for"); + } for (index, item) in self.items.into_iter().enumerate() { let (_, item) = (self.view_fn)(index, item); + if mark_branches { + buf.open_branch("item"); + } item.to_html_with_buf( buf, position, @@ -230,8 +236,14 @@ where mark_branches, extra_attrs.clone(), ); + if mark_branches { + buf.close_branch("item"); + } *position = Position::NextChild; } + if mark_branches { + buf.close_branch("for"); + } buf.push_str("<!>"); } @@ -243,8 +255,19 @@ where mark_branches: bool, extra_attrs: Vec<AnyAttribute>, ) { + if mark_branches { + buf.open_branch("for"); + } for (index, item) in self.items.into_iter().enumerate() { + let branch_name = mark_branches.then(|| { + let key = (self.key_fn)(&item); + let key = key.to_string(); + format!("item-{key}") + }); let (_, item) = (self.view_fn)(index, item); + if mark_branches { + buf.open_branch(branch_name.as_ref().unwrap()); + } item.to_html_async_with_buf::<OUT_OF_ORDER>( buf, position, @@ -252,8 +275,14 @@ where mark_branches, extra_attrs.clone(), ); + if mark_branches { + buf.close_branch(branch_name.as_ref().unwrap()); + } *position = Position::NextChild; } + if mark_branches { + buf.close_branch("for"); + } buf.push_sync("<!>"); } diff --git a/tachys/src/view/mod.rs b/tachys/src/view/mod.rs index 3c24bdee92..ddd3cf6560 100644 --- a/tachys/src/view/mod.rs +++ b/tachys/src/view/mod.rs @@ -46,7 +46,8 @@ pub trait Render: Sized { fn rebuild(self, state: &mut Self::State); } -pub(crate) trait MarkBranch { +#[doc(hidden)] +pub trait MarkBranch { fn open_branch(&mut self, branch_id: &str); fn close_branch(&mut self, branch_id: &str); From a9ca6b3b960f6d7fe00be46336429b9204269003 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Sat, 28 Dec 2024 09:36:51 -0500 Subject: [PATCH 02/15] update wasm-bindgen --- examples/islands_router/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/islands_router/Cargo.toml b/examples/islands_router/Cargo.toml index d762225b3b..018e7aebbd 100644 --- a/examples/islands_router/Cargo.toml +++ b/examples/islands_router/Cargo.toml @@ -22,7 +22,7 @@ axum = { version = "0.8.1", optional = true } tower = { version = "0.4.13", optional = true } tower-http = { version = "0.5.2", features = ["fs"], optional = true } tokio = { version = "1.39", features = ["full"], optional = true } -wasm-bindgen = "0.2.93" +wasm-bindgen = "0.2.99" serde_json = "1.0.133" [features] From 682af17cba455517c02ff4107bf6572dcc25c706 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Sat, 28 Dec 2024 09:52:54 -0500 Subject: [PATCH 03/15] update CSS --- examples/islands_router/Cargo.toml | 2 +- examples/islands_router/public/routing.js | 8 ++++---- examples/islands_router/src/app.rs | 2 +- examples/islands_router/style.css | 8 ++++++++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/examples/islands_router/Cargo.toml b/examples/islands_router/Cargo.toml index 018e7aebbd..9c88909e3f 100644 --- a/examples/islands_router/Cargo.toml +++ b/examples/islands_router/Cargo.toml @@ -60,7 +60,7 @@ style-file = "./style.css" # [Optional] Files in the asset-dir will be copied to the site-root directory assets-dir = "public" # The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. -site-addr = "127.0.0.1:3002" +site-addr = "127.0.0.1:3009" # The port to use for automatic reload monitoring reload-port = 3001 # The browserlist query used for optimizing the CSS. diff --git a/examples/islands_router/public/routing.js b/examples/islands_router/public/routing.js index 59c6a07fef..ec0860669c 100644 --- a/examples/islands_router/public/routing.js +++ b/examples/islands_router/public/routing.js @@ -7,7 +7,7 @@ window.addEventListener("click", async (ev) => { } ev.preventDefault(); - await navigateToPage(req); + await navigateToPage(req, true); }); window.addEventListener("submit", async (ev) => { @@ -17,10 +17,10 @@ window.addEventListener("submit", async (ev) => { } ev.preventDefault(); - await navigateToPage(req); + await navigateToPage(req, false); }); -async function navigateToPage(req) { +async function navigateToPage(req, useViewTransition) { NAVIGATION += 1; const currentNav = NAVIGATION; @@ -38,7 +38,7 @@ async function navigateToPage(req) { } }; // Not all browsers support startViewTransition; see https://caniuse.com/?search=startViewTransition - if (document.startViewTransition) { + if (useViewTransition && document.startViewTransition) { await document.startViewTransition(transition); } else { await transition() diff --git a/examples/islands_router/src/app.rs b/examples/islands_router/src/app.rs index cf0ed7a238..d13ad9ddd2 100644 --- a/examples/islands_router/src/app.rs +++ b/examples/islands_router/src/app.rs @@ -102,10 +102,10 @@ pub fn Home() -> impl IntoView { let:user > <tr> - <td><input type="checkbox"/></td> <td>{user.first_name}</td> <td>{user.last_name}</td> <td>{user.email}</td> + <td><input type="checkbox"/></td> </tr> </For> </tbody> diff --git a/examples/islands_router/style.css b/examples/islands_router/style.css index 9ba7149f99..32145120b8 100644 --- a/examples/islands_router/style.css +++ b/examples/islands_router/style.css @@ -1,3 +1,11 @@ .pending { color: purple; } + +td { + width: 10rem; +} + +td:last-child { + width: 2rem; +} From 6f170b2352ca814e5f243a88ebff6122bcb9e53b Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Sat, 28 Dec 2024 10:02:53 -0500 Subject: [PATCH 04/15] reenable view transitions for forms --- examples/islands_router/public/routing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/islands_router/public/routing.js b/examples/islands_router/public/routing.js index ec0860669c..fb60029f74 100644 --- a/examples/islands_router/public/routing.js +++ b/examples/islands_router/public/routing.js @@ -17,7 +17,7 @@ window.addEventListener("submit", async (ev) => { } ev.preventDefault(); - await navigateToPage(req, false); + await navigateToPage(req, true); }); async function navigateToPage(req, useViewTransition) { From b1f43542ce32591f4f9302eea8b943b60e7cd566 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Fri, 17 Jan 2025 16:03:32 -0500 Subject: [PATCH 05/15] better islands routing solution and demo --- examples/islands_router/Cargo.toml | 4 +- examples/islands_router/mock_data.json | 3852 ++++++++++++----- examples/islands_router/src/app.rs | 112 +- examples/islands_router/style.css | 49 +- leptos/src/hydration/island_script.js | 2 + .../src/hydration/islands_routing.js | 45 +- leptos/src/hydration/mod.rs | 10 +- 7 files changed, 3042 insertions(+), 1032 deletions(-) rename examples/islands_router/public/routing.js => leptos/src/hydration/islands_routing.js (90%) diff --git a/examples/islands_router/Cargo.toml b/examples/islands_router/Cargo.toml index 9c88909e3f..603bebbeac 100644 --- a/examples/islands_router/Cargo.toml +++ b/examples/islands_router/Cargo.toml @@ -22,7 +22,7 @@ axum = { version = "0.8.1", optional = true } tower = { version = "0.4.13", optional = true } tower-http = { version = "0.5.2", features = ["fs"], optional = true } tokio = { version = "1.39", features = ["full"], optional = true } -wasm-bindgen = "0.2.99" +wasm-bindgen = "0.2.100" serde_json = "1.0.133" [features] @@ -56,7 +56,7 @@ site-root = "target/site" # Defaults to pkg site-pkg-dir = "pkg" # [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS. The CSS is optimized by Lightning CSS before being written to <site-root>/<site-pkg>/app.css -style-file = "./style.css" +style-file = "style.css" # [Optional] Files in the asset-dir will be copied to the site-root directory assets-dir = "public" # The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. diff --git a/examples/islands_router/mock_data.json b/examples/islands_router/mock_data.json index 7b0717105c..2ec2a90c73 100644 --- a/examples/islands_router/mock_data.json +++ b/examples/islands_router/mock_data.json @@ -1,1000 +1,2852 @@ -[{"id":1,"first_name":"Maude","last_name":"Brandi","email":"mbrandi0@admin.ch"}, -{"id":2,"first_name":"Pippy","last_name":"Yule","email":"pyule1@mit.edu"}, -{"id":3,"first_name":"Rodrick","last_name":"Swancock","email":"rswancock2@google.co.uk"}, -{"id":4,"first_name":"Nan","last_name":"Uebel","email":"nuebel3@utexas.edu"}, -{"id":5,"first_name":"Tammi","last_name":"Lyne","email":"tlyne4@cisco.com"}, -{"id":6,"first_name":"Gothart","last_name":"Castagneto","email":"gcastagneto5@zimbio.com"}, -{"id":7,"first_name":"Inez","last_name":"Darley","email":"idarley6@techcrunch.com"}, -{"id":8,"first_name":"Eugenie","last_name":"Lanyon","email":"elanyon7@nba.com"}, -{"id":9,"first_name":"Derry","last_name":"Bovingdon","email":"dbovingdon8@furl.net"}, -{"id":10,"first_name":"Donetta","last_name":"Center","email":"dcenter9@intel.com"}, -{"id":11,"first_name":"Burnard","last_name":"Kuhndel","email":"bkuhndela@cmu.edu"}, -{"id":12,"first_name":"Greer","last_name":"Strachan","email":"gstrachanb@virginia.edu"}, -{"id":13,"first_name":"Dorine","last_name":"Lougheed","email":"dlougheedc@redcross.org"}, -{"id":14,"first_name":"Jayne","last_name":"Geggie","email":"jgeggied@youtu.be"}, -{"id":15,"first_name":"Chelsey","last_name":"Botham","email":"cbothame@cargocollective.com"}, -{"id":16,"first_name":"Emmy","last_name":"Whittier","email":"ewhittierf@delicious.com"}, -{"id":17,"first_name":"Esther","last_name":"Arblaster","email":"earblasterg@cnbc.com"}, -{"id":18,"first_name":"Julio","last_name":"Vannini","email":"jvanninih@sourceforge.net"}, -{"id":19,"first_name":"Zorah","last_name":"Turbefield","email":"zturbefieldi@epa.gov"}, -{"id":20,"first_name":"Les","last_name":"Strutley","email":"lstrutleyj@networkadvertising.org"}, -{"id":21,"first_name":"Dedie","last_name":"Roubeix","email":"droubeixk@linkedin.com"}, -{"id":22,"first_name":"Milzie","last_name":"Doyley","email":"mdoyleyl@youtu.be"}, -{"id":23,"first_name":"Cleopatra","last_name":"Croysdale","email":"ccroysdalem@cdc.gov"}, -{"id":24,"first_name":"Nellie","last_name":"Records","email":"nrecordsn@rediff.com"}, -{"id":25,"first_name":"Michelina","last_name":"Jentzsch","email":"mjentzscho@theguardian.com"}, -{"id":26,"first_name":"Theodosia","last_name":"De Vries","email":"tdevriesp@unc.edu"}, -{"id":27,"first_name":"Maryanna","last_name":"Jirieck","email":"mjirieckq@meetup.com"}, -{"id":28,"first_name":"Dreddy","last_name":"Labden","email":"dlabdenr@feedburner.com"}, -{"id":29,"first_name":"Glynda","last_name":"Geibel","email":"ggeibels@yelp.com"}, -{"id":30,"first_name":"Yulma","last_name":"Giroldo","email":"ygiroldot@google.co.jp"}, -{"id":31,"first_name":"Michele","last_name":"Jennions","email":"mjennionsu@meetup.com"}, -{"id":32,"first_name":"Hyatt","last_name":"Picford","email":"hpicfordv@cornell.edu"}, -{"id":33,"first_name":"Jehanna","last_name":"Frunks","email":"jfrunksw@slashdot.org"}, -{"id":34,"first_name":"Gustavo","last_name":"Soda","email":"gsodax@scientificamerican.com"}, -{"id":35,"first_name":"Rianon","last_name":"Lamey","email":"rlameyy@histats.com"}, -{"id":36,"first_name":"Winston","last_name":"Pitcher","email":"wpitcherz@sphinn.com"}, -{"id":37,"first_name":"Schuyler","last_name":"Rewcassell","email":"srewcassell10@phoca.cz"}, -{"id":38,"first_name":"Garald","last_name":"Thoumas","email":"gthoumas11@upenn.edu"}, -{"id":39,"first_name":"Mateo","last_name":"Prisk","email":"mprisk12@godaddy.com"}, -{"id":40,"first_name":"Trudy","last_name":"Scarratt","email":"tscarratt13@baidu.com"}, -{"id":41,"first_name":"Idalia","last_name":"Rawes","email":"irawes14@intel.com"}, -{"id":42,"first_name":"Sarette","last_name":"Barkly","email":"sbarkly15@youtu.be"}, -{"id":43,"first_name":"Ariel","last_name":"Brunroth","email":"abrunroth16@tinyurl.com"}, -{"id":44,"first_name":"Fonz","last_name":"Duigan","email":"fduigan17@issuu.com"}, -{"id":45,"first_name":"Adeline","last_name":"Cashell","email":"acashell18@house.gov"}, -{"id":46,"first_name":"Kurt","last_name":"Brittle","email":"kbrittle19@mysql.com"}, -{"id":47,"first_name":"Ginni","last_name":"Richardes","email":"grichardes1a@phpbb.com"}, -{"id":48,"first_name":"Christina","last_name":"Wheway","email":"cwheway1b@wisc.edu"}, -{"id":49,"first_name":"Erasmus","last_name":"Vickors","email":"evickors1c@dell.com"}, -{"id":50,"first_name":"Lillian","last_name":"Valentin","email":"lvalentin1d@usa.gov"}, -{"id":51,"first_name":"Rozalie","last_name":"Abel","email":"rabel1e@walmart.com"}, -{"id":52,"first_name":"Berni","last_name":"Dougary","email":"bdougary1f@ted.com"}, -{"id":53,"first_name":"Mendel","last_name":"Meaddowcroft","email":"mmeaddowcroft1g@csmonitor.com"}, -{"id":54,"first_name":"Lay","last_name":"Tedder","email":"ltedder1h@home.pl"}, -{"id":55,"first_name":"Danica","last_name":"Kenrack","email":"dkenrack1i@nhs.uk"}, -{"id":56,"first_name":"Reuben","last_name":"De Benedictis","email":"rdebenedictis1j@cnbc.com"}, -{"id":57,"first_name":"Larine","last_name":"Woffenden","email":"lwoffenden1k@goo.ne.jp"}, -{"id":58,"first_name":"Lilian","last_name":"Haddrill","email":"lhaddrill1l@techcrunch.com"}, -{"id":59,"first_name":"Frank","last_name":"Cominello","email":"fcominello1m@phpbb.com"}, -{"id":60,"first_name":"Allyce","last_name":"Pakenham","email":"apakenham1n@statcounter.com"}, -{"id":61,"first_name":"Veda","last_name":"Pryn","email":"vpryn1o@squidoo.com"}, -{"id":62,"first_name":"Heddie","last_name":"Tinston","email":"htinston1p@is.gd"}, -{"id":63,"first_name":"Lorelle","last_name":"Radbone","email":"lradbone1q@usgs.gov"}, -{"id":64,"first_name":"Gustavo","last_name":"Jans","email":"gjans1r@microsoft.com"}, -{"id":65,"first_name":"Karita","last_name":"Beeching","email":"kbeeching1s@skype.com"}, -{"id":66,"first_name":"Damian","last_name":"Bellhanger","email":"dbellhanger1t@bbb.org"}, -{"id":67,"first_name":"Kinna","last_name":"Cotherill","email":"kcotherill1u@angelfire.com"}, -{"id":68,"first_name":"Janeva","last_name":"Varndall","email":"jvarndall1v@vk.com"}, -{"id":69,"first_name":"Ema","last_name":"O'Glassane","email":"eoglassane1w@shutterfly.com"}, -{"id":70,"first_name":"Bourke","last_name":"Cossum","email":"bcossum1x@chron.com"}, -{"id":71,"first_name":"Berk","last_name":"Tomasino","email":"btomasino1y@fotki.com"}, -{"id":72,"first_name":"Shepherd","last_name":"Lyness","email":"slyness1z@csmonitor.com"}, -{"id":73,"first_name":"Christoph","last_name":"Warrener","email":"cwarrener20@gmpg.org"}, -{"id":74,"first_name":"Artus","last_name":"Bantock","email":"abantock21@who.int"}, -{"id":75,"first_name":"Bryana","last_name":"Mixer","email":"bmixer22@nih.gov"}, -{"id":76,"first_name":"Blithe","last_name":"Brigstock","email":"bbrigstock23@goodreads.com"}, -{"id":77,"first_name":"Krispin","last_name":"Gothrup","email":"kgothrup24@tuttocitta.it"}, -{"id":78,"first_name":"Helen-elizabeth","last_name":"Hardinge","email":"hhardinge25@indiatimes.com"}, -{"id":79,"first_name":"Zachariah","last_name":"Burberye","email":"zburberye26@va.gov"}, -{"id":80,"first_name":"Cheri","last_name":"Candey","email":"ccandey27@kickstarter.com"}, -{"id":81,"first_name":"Mozes","last_name":"Mityushin","email":"mmityushin28@vk.com"}, -{"id":82,"first_name":"Hyacinthie","last_name":"Stirrip","email":"hstirrip29@mozilla.com"}, -{"id":83,"first_name":"Hestia","last_name":"Full","email":"hfull2a@cornell.edu"}, -{"id":84,"first_name":"Betty","last_name":"Doogan","email":"bdoogan2b@paginegialle.it"}, -{"id":85,"first_name":"Rube","last_name":"Elcum","email":"relcum2c@hatena.ne.jp"}, -{"id":86,"first_name":"Ulrick","last_name":"Nowakowska","email":"unowakowska2d@newyorker.com"}, -{"id":87,"first_name":"Susanne","last_name":"Bannell","email":"sbannell2e@house.gov"}, -{"id":88,"first_name":"Carlotta","last_name":"de Bullion","email":"cdebullion2f@wikispaces.com"}, -{"id":89,"first_name":"Conny","last_name":"Rodgerson","email":"crodgerson2g@nsw.gov.au"}, -{"id":90,"first_name":"Anthony","last_name":"Stovine","email":"astovine2h@trellian.com"}, -{"id":91,"first_name":"Trula","last_name":"Mangenot","email":"tmangenot2i@example.com"}, -{"id":92,"first_name":"Urbain","last_name":"Ogglebie","email":"uogglebie2j@wix.com"}, -{"id":93,"first_name":"Robena","last_name":"Yve","email":"ryve2k@sciencedaily.com"}, -{"id":94,"first_name":"Axel","last_name":"McTrustam","email":"amctrustam2l@ucoz.ru"}, -{"id":95,"first_name":"Link","last_name":"Klagges","email":"lklagges2m@foxnews.com"}, -{"id":96,"first_name":"Yoko","last_name":"Percifer","email":"ypercifer2n@indiegogo.com"}, -{"id":97,"first_name":"Rheba","last_name":"Heaford","email":"rheaford2o@ed.gov"}, -{"id":98,"first_name":"Dorolisa","last_name":"Seabert","email":"dseabert2p@pen.io"}, -{"id":99,"first_name":"Asher","last_name":"Ffrench","email":"affrench2q@miitbeian.gov.cn"}, -{"id":100,"first_name":"Inga","last_name":"Skeen","email":"iskeen2r@moonfruit.com"}, -{"id":101,"first_name":"Dov","last_name":"Nevinson","email":"dnevinson2s@dedecms.com"}, -{"id":102,"first_name":"Kirsten","last_name":"Culpan","email":"kculpan2t@globo.com"}, -{"id":103,"first_name":"Prudence","last_name":"Bysshe","email":"pbysshe2u@auda.org.au"}, -{"id":104,"first_name":"Desdemona","last_name":"Belverstone","email":"dbelverstone2v@ihg.com"}, -{"id":105,"first_name":"Adiana","last_name":"Arnott","email":"aarnott2w@icio.us"}, -{"id":106,"first_name":"Christoper","last_name":"Sutter","email":"csutter2x@jimdo.com"}, -{"id":107,"first_name":"Guinevere","last_name":"Morton","email":"gmorton2y@drupal.org"}, -{"id":108,"first_name":"Abey","last_name":"Prester","email":"aprester2z@guardian.co.uk"}, -{"id":109,"first_name":"Reynold","last_name":"Frigout","email":"rfrigout30@digg.com"}, -{"id":110,"first_name":"Beverlie","last_name":"Macek","email":"bmacek31@yahoo.com"}, -{"id":111,"first_name":"Marjory","last_name":"Spelling","email":"mspelling32@posterous.com"}, -{"id":112,"first_name":"Romola","last_name":"Penna","email":"rpenna33@devhub.com"}, -{"id":113,"first_name":"Junette","last_name":"Estabrook","email":"jestabrook34@prweb.com"}, -{"id":114,"first_name":"Allen","last_name":"Lawey","email":"alawey35@marketwatch.com"}, -{"id":115,"first_name":"Yard","last_name":"Solon","email":"ysolon36@fotki.com"}, -{"id":116,"first_name":"Hubert","last_name":"Life","email":"hlife37@w3.org"}, -{"id":117,"first_name":"Patin","last_name":"Prestner","email":"pprestner38@flavors.me"}, -{"id":118,"first_name":"Hedda","last_name":"MacKniely","email":"hmackniely39@blog.com"}, -{"id":119,"first_name":"Rube","last_name":"Ceyssen","email":"rceyssen3a@businesswire.com"}, -{"id":120,"first_name":"Clementine","last_name":"ffrench Beytagh","email":"cffrenchbeytagh3b@surveymonkey.com"}, -{"id":121,"first_name":"Rutter","last_name":"Sidebotham","email":"rsidebotham3c@webs.com"}, -{"id":122,"first_name":"Standford","last_name":"McGurn","email":"smcgurn3d@1688.com"}, -{"id":123,"first_name":"Nelie","last_name":"Grebert","email":"ngrebert3e@bluehost.com"}, -{"id":124,"first_name":"Milly","last_name":"Danielsohn","email":"mdanielsohn3f@topsy.com"}, -{"id":125,"first_name":"Debor","last_name":"Pighills","email":"dpighills3g@google.es"}, -{"id":126,"first_name":"Gal","last_name":"Allebone","email":"gallebone3h@amazonaws.com"}, -{"id":127,"first_name":"Kerwinn","last_name":"Gheorghescu","email":"kgheorghescu3i@aol.com"}, -{"id":128,"first_name":"Essa","last_name":"Fifield","email":"efifield3j@bbb.org"}, -{"id":129,"first_name":"Philippine","last_name":"Daens","email":"pdaens3k@boston.com"}, -{"id":130,"first_name":"Timmy","last_name":"Colbeck","email":"tcolbeck3l@answers.com"}, -{"id":131,"first_name":"Raffarty","last_name":"Liverock","email":"rliverock3m@bandcamp.com"}, -{"id":132,"first_name":"Valeria","last_name":"Marqyes","email":"vmarqyes3n@1688.com"}, -{"id":133,"first_name":"Neille","last_name":"Seiler","email":"nseiler3o@skyrock.com"}, -{"id":134,"first_name":"Anet","last_name":"Kelle","email":"akelle3p@opensource.org"}, -{"id":135,"first_name":"Barnebas","last_name":"Alleway","email":"balleway3q@goodreads.com"}, -{"id":136,"first_name":"Valeria","last_name":"Chrippes","email":"vchrippes3r@wunderground.com"}, -{"id":137,"first_name":"Duffy","last_name":"Hainge","email":"dhainge3s@posterous.com"}, -{"id":138,"first_name":"Gweneth","last_name":"Silberschatz","email":"gsilberschatz3t@bing.com"}, -{"id":139,"first_name":"Fredelia","last_name":"Stodd","email":"fstodd3u@mit.edu"}, -{"id":140,"first_name":"Buckie","last_name":"MacGinley","email":"bmacginley3v@irs.gov"}, -{"id":141,"first_name":"Ardyth","last_name":"Ewbanck","email":"aewbanck3w@cisco.com"}, -{"id":142,"first_name":"Darice","last_name":"Martinolli","email":"dmartinolli3x@seesaa.net"}, -{"id":143,"first_name":"Bucky","last_name":"Chivrall","email":"bchivrall3y@blogger.com"}, -{"id":144,"first_name":"Freida","last_name":"Labrom","email":"flabrom3z@github.io"}, -{"id":145,"first_name":"Huntlee","last_name":"Comelini","email":"hcomelini40@army.mil"}, -{"id":146,"first_name":"Lester","last_name":"Farrah","email":"lfarrah41@princeton.edu"}, -{"id":147,"first_name":"Chickie","last_name":"Lyddon","email":"clyddon42@smh.com.au"}, -{"id":148,"first_name":"Lenette","last_name":"McGaffey","email":"lmcgaffey43@auda.org.au"}, -{"id":149,"first_name":"Cleavland","last_name":"Balassa","email":"cbalassa44@squidoo.com"}, -{"id":150,"first_name":"Towney","last_name":"Wessell","email":"twessell45@bloglovin.com"}, -{"id":151,"first_name":"Marlee","last_name":"Sahlstrom","email":"msahlstrom46@51.la"}, -{"id":152,"first_name":"Tadd","last_name":"Showalter","email":"tshowalter47@irs.gov"}, -{"id":153,"first_name":"Isabeau","last_name":"Smalcombe","email":"ismalcombe48@goo.gl"}, -{"id":154,"first_name":"Aprilette","last_name":"Pyett","email":"apyett49@taobao.com"}, -{"id":155,"first_name":"Bendite","last_name":"Odney","email":"bodney4a@123-reg.co.uk"}, -{"id":156,"first_name":"Temp","last_name":"Scherer","email":"tscherer4b@phoca.cz"}, -{"id":157,"first_name":"Barris","last_name":"Ferrarotti","email":"bferrarotti4c@bloomberg.com"}, -{"id":158,"first_name":"Floris","last_name":"Loudiane","email":"floudiane4d@bbb.org"}, -{"id":159,"first_name":"Ives","last_name":"MacArdle","email":"imacardle4e@phoca.cz"}, -{"id":160,"first_name":"Briano","last_name":"Antonsen","email":"bantonsen4f@jimdo.com"}, -{"id":161,"first_name":"Rea","last_name":"McCumskay","email":"rmccumskay4g@netvibes.com"}, -{"id":162,"first_name":"Madlen","last_name":"Karppi","email":"mkarppi4h@prweb.com"}, -{"id":163,"first_name":"Hillie","last_name":"Ollerenshaw","email":"hollerenshaw4i@mapquest.com"}, -{"id":164,"first_name":"Laure","last_name":"Giacomazzo","email":"lgiacomazzo4j@canalblog.com"}, -{"id":165,"first_name":"Shanie","last_name":"Worsam","email":"sworsam4k@google.ca"}, -{"id":166,"first_name":"Bibbie","last_name":"Trosdall","email":"btrosdall4l@list-manage.com"}, -{"id":167,"first_name":"Marcelia","last_name":"Symes","email":"msymes4m@facebook.com"}, -{"id":168,"first_name":"Jolene","last_name":"Roja","email":"jroja4n@mail.ru"}, -{"id":169,"first_name":"Colas","last_name":"Leal","email":"cleal4o@ustream.tv"}, -{"id":170,"first_name":"Oby","last_name":"Faichnie","email":"ofaichnie4p@goo.gl"}, -{"id":171,"first_name":"Henry","last_name":"Willows","email":"hwillows4q@alibaba.com"}, -{"id":172,"first_name":"Matilda","last_name":"Korf","email":"mkorf4r@bbb.org"}, -{"id":173,"first_name":"Hiram","last_name":"Balls","email":"hballs4s@nba.com"}, -{"id":174,"first_name":"Terri-jo","last_name":"Atrill","email":"tatrill4t@so-net.ne.jp"}, -{"id":175,"first_name":"Tana","last_name":"Ciccarello","email":"tciccarello4u@cisco.com"}, -{"id":176,"first_name":"Abbie","last_name":"Rohfsen","email":"arohfsen4v@japanpost.jp"}, -{"id":177,"first_name":"Dominga","last_name":"Johanssen","email":"djohanssen4w@phoca.cz"}, -{"id":178,"first_name":"Osmond","last_name":"Ryland","email":"oryland4x@51.la"}, -{"id":179,"first_name":"Waverly","last_name":"Butting","email":"wbutting4y@4shared.com"}, -{"id":180,"first_name":"Colin","last_name":"Antosch","email":"cantosch4z@unblog.fr"}, -{"id":181,"first_name":"Filide","last_name":"Birks","email":"fbirks50@domainmarket.com"}, -{"id":182,"first_name":"Avery","last_name":"Kruschov","email":"akruschov51@answers.com"}, -{"id":183,"first_name":"Doralynne","last_name":"Mosten","email":"dmosten52@discovery.com"}, -{"id":184,"first_name":"Dicky","last_name":"Muggeridge","email":"dmuggeridge53@163.com"}, -{"id":185,"first_name":"Tucky","last_name":"Tennick","email":"ttennick54@gnu.org"}, -{"id":186,"first_name":"Jareb","last_name":"Hews","email":"jhews55@twitpic.com"}, -{"id":187,"first_name":"Guthrie","last_name":"Castro","email":"gcastro56@berkeley.edu"}, -{"id":188,"first_name":"Rayna","last_name":"Howett","email":"rhowett57@theguardian.com"}, -{"id":189,"first_name":"Linnet","last_name":"Painter","email":"lpainter58@apache.org"}, -{"id":190,"first_name":"Gisele","last_name":"Varcoe","email":"gvarcoe59@timesonline.co.uk"}, -{"id":191,"first_name":"Isabelita","last_name":"Klimpke","email":"iklimpke5a@technorati.com"}, -{"id":192,"first_name":"Ofilia","last_name":"Kondrachenko","email":"okondrachenko5b@github.com"}, -{"id":193,"first_name":"Margaretta","last_name":"Costello","email":"mcostello5c@nifty.com"}, -{"id":194,"first_name":"Elli","last_name":"Sudell","email":"esudell5d@stumbleupon.com"}, -{"id":195,"first_name":"Carie","last_name":"Preto","email":"cpreto5e@prnewswire.com"}, -{"id":196,"first_name":"Kinny","last_name":"Gredden","email":"kgredden5f@alexa.com"}, -{"id":197,"first_name":"Grethel","last_name":"Warwicker","email":"gwarwicker5g@fda.gov"}, -{"id":198,"first_name":"Gerti","last_name":"Kippling","email":"gkippling5h@mayoclinic.com"}, -{"id":199,"first_name":"Nanice","last_name":"Sirrell","email":"nsirrell5i@paginegialle.it"}, -{"id":200,"first_name":"Coraline","last_name":"Readie","email":"creadie5j@joomla.org"}, -{"id":201,"first_name":"Emmanuel","last_name":"Bickerstaff","email":"ebickerstaff5k@businessinsider.com"}, -{"id":202,"first_name":"Heath","last_name":"McNeilley","email":"hmcneilley5l@soundcloud.com"}, -{"id":203,"first_name":"Torey","last_name":"Lortz","email":"tlortz5m@printfriendly.com"}, -{"id":204,"first_name":"Melodee","last_name":"McWhan","email":"mmcwhan5n@tinyurl.com"}, -{"id":205,"first_name":"Selie","last_name":"Llywarch","email":"sllywarch5o@usda.gov"}, -{"id":206,"first_name":"Britt","last_name":"Shore","email":"bshore5p@unesco.org"}, -{"id":207,"first_name":"Floyd","last_name":"Hairyes","email":"fhairyes5q@sphinn.com"}, -{"id":208,"first_name":"Maris","last_name":"Fretter","email":"mfretter5r@umich.edu"}, -{"id":209,"first_name":"Andrey","last_name":"MacCaughey","email":"amaccaughey5s@blinklist.com"}, -{"id":210,"first_name":"Reena","last_name":"Kiledal","email":"rkiledal5t@blogs.com"}, -{"id":211,"first_name":"Adey","last_name":"Molohan","email":"amolohan5u@yale.edu"}, -{"id":212,"first_name":"Eddie","last_name":"Simner","email":"esimner5v@purevolume.com"}, -{"id":213,"first_name":"Eldon","last_name":"Dregan","email":"edregan5w@nytimes.com"}, -{"id":214,"first_name":"Terencio","last_name":"Cordell","email":"tcordell5x@answers.com"}, -{"id":215,"first_name":"Barbra","last_name":"Matzkaitis","email":"bmatzkaitis5y@nyu.edu"}, -{"id":216,"first_name":"Agathe","last_name":"Filler","email":"afiller5z@etsy.com"}, -{"id":217,"first_name":"Jenine","last_name":"Adds","email":"jadds60@squarespace.com"}, -{"id":218,"first_name":"Kathy","last_name":"Lampbrecht","email":"klampbrecht61@t-online.de"}, -{"id":219,"first_name":"Demetri","last_name":"Godfroy","email":"dgodfroy62@ibm.com"}, -{"id":220,"first_name":"Katuscha","last_name":"Renon","email":"krenon63@friendfeed.com"}, -{"id":221,"first_name":"Claudian","last_name":"Devenport","email":"cdevenport64@godaddy.com"}, -{"id":222,"first_name":"Jenica","last_name":"Kornilov","email":"jkornilov65@nifty.com"}, -{"id":223,"first_name":"Grissel","last_name":"McMeeking","email":"gmcmeeking66@boston.com"}, -{"id":224,"first_name":"Andy","last_name":"Rushforth","email":"arushforth67@pcworld.com"}, -{"id":225,"first_name":"Rana","last_name":"Ferrino","email":"rferrino68@deviantart.com"}, -{"id":226,"first_name":"Celie","last_name":"Schenkel","email":"cschenkel69@cargocollective.com"}, -{"id":227,"first_name":"Doe","last_name":"Chadwyck","email":"dchadwyck6a@cargocollective.com"}, -{"id":228,"first_name":"Amandy","last_name":"Marmon","email":"amarmon6b@de.vu"}, -{"id":229,"first_name":"Aliza","last_name":"Haggeth","email":"ahaggeth6c@ibm.com"}, -{"id":230,"first_name":"Velma","last_name":"Olner","email":"volner6d@house.gov"}, -{"id":231,"first_name":"Bent","last_name":"Ayllett","email":"bayllett6e@google.com.hk"}, -{"id":232,"first_name":"Parrnell","last_name":"Walker","email":"pwalker6f@irs.gov"}, -{"id":233,"first_name":"Mickie","last_name":"Nossent","email":"mnossent6g@elegantthemes.com"}, -{"id":234,"first_name":"Sawyer","last_name":"Tranter","email":"stranter6h@usa.gov"}, -{"id":235,"first_name":"Bernetta","last_name":"Twine","email":"btwine6i@mapy.cz"}, -{"id":236,"first_name":"Richard","last_name":"Kerss","email":"rkerss6j@harvard.edu"}, -{"id":237,"first_name":"Margo","last_name":"Danilov","email":"mdanilov6k@clickbank.net"}, -{"id":238,"first_name":"Willem","last_name":"Sheen","email":"wsheen6l@feedburner.com"}, -{"id":239,"first_name":"Dukey","last_name":"Regnard","email":"dregnard6m@opensource.org"}, -{"id":240,"first_name":"Wynnie","last_name":"Manilove","email":"wmanilove6n@themeforest.net"}, -{"id":241,"first_name":"Hartley","last_name":"Tungay","email":"htungay6o@rambler.ru"}, -{"id":242,"first_name":"Brena","last_name":"Yaneev","email":"byaneev6p@java.com"}, -{"id":243,"first_name":"Fred","last_name":"Leaf","email":"fleaf6q@usatoday.com"}, -{"id":244,"first_name":"Morna","last_name":"Beardsworth","email":"mbeardsworth6r@kickstarter.com"}, -{"id":245,"first_name":"Griffin","last_name":"Kell","email":"gkell6s@github.io"}, -{"id":246,"first_name":"Ozzie","last_name":"Picford","email":"opicford6t@instagram.com"}, -{"id":247,"first_name":"Carson","last_name":"Andrivot","email":"candrivot6u@1und1.de"}, -{"id":248,"first_name":"Caressa","last_name":"Kupis","email":"ckupis6v@sakura.ne.jp"}, -{"id":249,"first_name":"Philly","last_name":"Knowlys","email":"pknowlys6w@army.mil"}, -{"id":250,"first_name":"Nady","last_name":"Rolling","email":"nrolling6x@lulu.com"}, -{"id":251,"first_name":"Albertina","last_name":"Spurdle","email":"aspurdle6y@pinterest.com"}, -{"id":252,"first_name":"Brittne","last_name":"Tamlett","email":"btamlett6z@princeton.edu"}, -{"id":253,"first_name":"Biddy","last_name":"Station","email":"bstation70@altervista.org"}, -{"id":254,"first_name":"Estelle","last_name":"Swaden","email":"eswaden71@nih.gov"}, -{"id":255,"first_name":"Dael","last_name":"Noyce","email":"dnoyce72@europa.eu"}, -{"id":256,"first_name":"Verne","last_name":"Tomasi","email":"vtomasi73@pinterest.com"}, -{"id":257,"first_name":"Toinette","last_name":"Adame","email":"tadame74@csmonitor.com"}, -{"id":258,"first_name":"Teri","last_name":"Karolewski","email":"tkarolewski75@exblog.jp"}, -{"id":259,"first_name":"Theo","last_name":"Weildish","email":"tweildish76@hexun.com"}, -{"id":260,"first_name":"Eloise","last_name":"McLafferty","email":"emclafferty77@prnewswire.com"}, -{"id":261,"first_name":"Pepita","last_name":"Fontel","email":"pfontel78@chronoengine.com"}, -{"id":262,"first_name":"Valentine","last_name":"Gerry","email":"vgerry79@slashdot.org"}, -{"id":263,"first_name":"Fanni","last_name":"Goodbairn","email":"fgoodbairn7a@elpais.com"}, -{"id":264,"first_name":"Esra","last_name":"Troppmann","email":"etroppmann7b@phoca.cz"}, -{"id":265,"first_name":"Carlynn","last_name":"Vorley","email":"cvorley7c@uiuc.edu"}, -{"id":266,"first_name":"Mellie","last_name":"McLeoid","email":"mmcleoid7d@mit.edu"}, -{"id":267,"first_name":"Gaile","last_name":"Bucke","email":"gbucke7e@alexa.com"}, -{"id":268,"first_name":"Sherye","last_name":"Sheahan","email":"ssheahan7f@parallels.com"}, -{"id":269,"first_name":"Norean","last_name":"Desport","email":"ndesport7g@taobao.com"}, -{"id":270,"first_name":"Ugo","last_name":"Kernell","email":"ukernell7h@csmonitor.com"}, -{"id":271,"first_name":"Base","last_name":"Cullinane","email":"bcullinane7i@indiegogo.com"}, -{"id":272,"first_name":"Alan","last_name":"Godmar","email":"agodmar7j@fc2.com"}, -{"id":273,"first_name":"Olly","last_name":"Wellstood","email":"owellstood7k@friendfeed.com"}, -{"id":274,"first_name":"Reuben","last_name":"Aveyard","email":"raveyard7l@lycos.com"}, -{"id":275,"first_name":"Richmond","last_name":"Broadberrie","email":"rbroadberrie7m@facebook.com"}, -{"id":276,"first_name":"Maressa","last_name":"Carlett","email":"mcarlett7n@bizjournals.com"}, -{"id":277,"first_name":"Marina","last_name":"Sprasen","email":"msprasen7o@dropbox.com"}, -{"id":278,"first_name":"Winnie","last_name":"Ostridge","email":"wostridge7p@ted.com"}, -{"id":279,"first_name":"Briney","last_name":"Rosenschein","email":"brosenschein7q@macromedia.com"}, -{"id":280,"first_name":"Heidie","last_name":"Yeldon","email":"hyeldon7r@parallels.com"}, -{"id":281,"first_name":"Addie","last_name":"Coldicott","email":"acoldicott7s@eventbrite.com"}, -{"id":282,"first_name":"Aubrette","last_name":"Doswell","email":"adoswell7t@imgur.com"}, -{"id":283,"first_name":"Rouvin","last_name":"Kassman","email":"rkassman7u@tinyurl.com"}, -{"id":284,"first_name":"Mitchell","last_name":"Pietzke","email":"mpietzke7v@wunderground.com"}, -{"id":285,"first_name":"Eadmund","last_name":"Rawstron","email":"erawstron7w@yelp.com"}, -{"id":286,"first_name":"Corri","last_name":"Matyasik","email":"cmatyasik7x@weibo.com"}, -{"id":287,"first_name":"Chuck","last_name":"Blandamere","email":"cblandamere7y@google.cn"}, -{"id":288,"first_name":"Nari","last_name":"Edmondson","email":"nedmondson7z@cnbc.com"}, -{"id":289,"first_name":"Valentine","last_name":"Sivyour","email":"vsivyour80@reverbnation.com"}, -{"id":290,"first_name":"Darryl","last_name":"Hawket","email":"dhawket81@pcworld.com"}, -{"id":291,"first_name":"Teddie","last_name":"Prosek","email":"tprosek82@odnoklassniki.ru"}, -{"id":292,"first_name":"Chloris","last_name":"Linder","email":"clinder83@instagram.com"}, -{"id":293,"first_name":"Lonnie","last_name":"Glede","email":"lglede84@taobao.com"}, -{"id":294,"first_name":"Denise","last_name":"Deakin","email":"ddeakin85@si.edu"}, -{"id":295,"first_name":"Ruprecht","last_name":"Sandcroft","email":"rsandcroft86@abc.net.au"}, -{"id":296,"first_name":"Zorah","last_name":"Patridge","email":"zpatridge87@freewebs.com"}, -{"id":297,"first_name":"Abigail","last_name":"Chatain","email":"achatain88@google.cn"}, -{"id":298,"first_name":"Neala","last_name":"Osichev","email":"nosichev89@hostgator.com"}, -{"id":299,"first_name":"Debora","last_name":"Crocetto","email":"dcrocetto8a@1und1.de"}, -{"id":300,"first_name":"Dall","last_name":"Labeuil","email":"dlabeuil8b@ucsd.edu"}, -{"id":301,"first_name":"Bunny","last_name":"McSperrin","email":"bmcsperrin8c@hubpages.com"}, -{"id":302,"first_name":"Marianne","last_name":"Sabbin","email":"msabbin8d@hc360.com"}, -{"id":303,"first_name":"Anette","last_name":"Wickersley","email":"awickersley8e@businesswire.com"}, -{"id":304,"first_name":"Millisent","last_name":"Heinemann","email":"mheinemann8f@ameblo.jp"}, -{"id":305,"first_name":"Kala","last_name":"Attock","email":"kattock8g@theatlantic.com"}, -{"id":306,"first_name":"Meriel","last_name":"Vasyukhin","email":"mvasyukhin8h@linkedin.com"}, -{"id":307,"first_name":"Julianne","last_name":"Baudou","email":"jbaudou8i@cbc.ca"}, -{"id":308,"first_name":"Pryce","last_name":"Landal","email":"plandal8j@myspace.com"}, -{"id":309,"first_name":"Nerissa","last_name":"Dreghorn","email":"ndreghorn8k@usda.gov"}, -{"id":310,"first_name":"Clyve","last_name":"Soldner","email":"csoldner8l@bluehost.com"}, -{"id":311,"first_name":"Hadlee","last_name":"Syplus","email":"hsyplus8m@auda.org.au"}, -{"id":312,"first_name":"Prudi","last_name":"Merkel","email":"pmerkel8n@hao123.com"}, -{"id":313,"first_name":"Zebulon","last_name":"Denisyev","email":"zdenisyev8o@parallels.com"}, -{"id":314,"first_name":"Leopold","last_name":"Laddle","email":"lladdle8p@si.edu"}, -{"id":315,"first_name":"Danella","last_name":"Aymes","email":"daymes8q@earthlink.net"}, -{"id":316,"first_name":"Murdock","last_name":"De Ath","email":"mdeath8r@naver.com"}, -{"id":317,"first_name":"Umeko","last_name":"Feavearyear","email":"ufeavearyear8s@youtube.com"}, -{"id":318,"first_name":"Valli","last_name":"Neary","email":"vneary8t@vimeo.com"}, -{"id":319,"first_name":"Kendell","last_name":"Blaby","email":"kblaby8u@tuttocitta.it"}, -{"id":320,"first_name":"Ahmad","last_name":"Tate","email":"atate8v@friendfeed.com"}, -{"id":321,"first_name":"Cullan","last_name":"Christofol","email":"cchristofol8w@hao123.com"}, -{"id":322,"first_name":"Nolan","last_name":"Betser","email":"nbetser8x@github.io"}, -{"id":323,"first_name":"Vachel","last_name":"Burrage","email":"vburrage8y@cargocollective.com"}, -{"id":324,"first_name":"Gigi","last_name":"McCaughran","email":"gmccaughran8z@fda.gov"}, -{"id":325,"first_name":"Leanora","last_name":"Epple","email":"lepple90@stanford.edu"}, -{"id":326,"first_name":"Kathi","last_name":"Yearnes","email":"kyearnes91@sfgate.com"}, -{"id":327,"first_name":"Tadio","last_name":"Salleir","email":"tsalleir92@a8.net"}, -{"id":328,"first_name":"Kev","last_name":"Mayell","email":"kmayell93@weibo.com"}, -{"id":329,"first_name":"Clarissa","last_name":"Hartley","email":"chartley94@networksolutions.com"}, -{"id":330,"first_name":"Cindie","last_name":"Skyme","email":"cskyme95@etsy.com"}, -{"id":331,"first_name":"Timoteo","last_name":"Wieprecht","email":"twieprecht96@dion.ne.jp"}, -{"id":332,"first_name":"Aloise","last_name":"Parres","email":"aparres97@infoseek.co.jp"}, -{"id":333,"first_name":"Ezri","last_name":"Jacobsen","email":"ejacobsen98@google.de"}, -{"id":334,"first_name":"Lewie","last_name":"Ambroz","email":"lambroz99@youku.com"}, -{"id":335,"first_name":"Kerwin","last_name":"Ceney","email":"kceney9a@comsenz.com"}, -{"id":336,"first_name":"Frederich","last_name":"Crolly","email":"fcrolly9b@shareasale.com"}, -{"id":337,"first_name":"Sayer","last_name":"Matanin","email":"smatanin9c@newsvine.com"}, -{"id":338,"first_name":"Jennifer","last_name":"Vasyatkin","email":"jvasyatkin9d@chronoengine.com"}, -{"id":339,"first_name":"Nicky","last_name":"Heinsh","email":"nheinsh9e@technorati.com"}, -{"id":340,"first_name":"Neda","last_name":"Lanon","email":"nlanon9f@toplist.cz"}, -{"id":341,"first_name":"Elbertine","last_name":"Larkcum","email":"elarkcum9g@a8.net"}, -{"id":342,"first_name":"Whitby","last_name":"Farrell","email":"wfarrell9h@dailymail.co.uk"}, -{"id":343,"first_name":"Dun","last_name":"Mackieson","email":"dmackieson9i@weebly.com"}, -{"id":344,"first_name":"Krishna","last_name":"Tacon","email":"ktacon9j@w3.org"}, -{"id":345,"first_name":"Dyna","last_name":"Sneezum","email":"dsneezum9k@sfgate.com"}, -{"id":346,"first_name":"Gardner","last_name":"Habercham","email":"ghabercham9l@goodreads.com"}, -{"id":347,"first_name":"Kalil","last_name":"Reinmar","email":"kreinmar9m@google.ru"}, -{"id":348,"first_name":"Karly","last_name":"Cribbins","email":"kcribbins9n@ustream.tv"}, -{"id":349,"first_name":"Jeanne","last_name":"Easen","email":"jeasen9o@time.com"}, -{"id":350,"first_name":"Yorgo","last_name":"de Courcy","email":"ydecourcy9p@reference.com"}, -{"id":351,"first_name":"Dyanna","last_name":"Wordesworth","email":"dwordesworth9q@clickbank.net"}, -{"id":352,"first_name":"Ashien","last_name":"Whittles","email":"awhittles9r@dell.com"}, -{"id":353,"first_name":"Alia","last_name":"Paradin","email":"aparadin9s@ucsd.edu"}, -{"id":354,"first_name":"Babbie","last_name":"Palethorpe","email":"bpalethorpe9t@sciencedirect.com"}, -{"id":355,"first_name":"Mort","last_name":"Hargie","email":"mhargie9u@nyu.edu"}, -{"id":356,"first_name":"Lucais","last_name":"Writer","email":"lwriter9v@domainmarket.com"}, -{"id":357,"first_name":"Lucho","last_name":"Robley","email":"lrobley9w@cargocollective.com"}, -{"id":358,"first_name":"Drucie","last_name":"Hapgood","email":"dhapgood9x@ft.com"}, -{"id":359,"first_name":"Arin","last_name":"Boddy","email":"aboddy9y@cdbaby.com"}, -{"id":360,"first_name":"Biddy","last_name":"Ewles","email":"bewles9z@globo.com"}, -{"id":361,"first_name":"Marlon","last_name":"Allder","email":"malldera0@t.co"}, -{"id":362,"first_name":"Jock","last_name":"Ing","email":"jinga1@ocn.ne.jp"}, -{"id":363,"first_name":"Franny","last_name":"Taverner","email":"ftavernera2@ezinearticles.com"}, -{"id":364,"first_name":"Vanda","last_name":"Whiterod","email":"vwhiteroda3@usda.gov"}, -{"id":365,"first_name":"Lezlie","last_name":"Godbehere","email":"lgodbeherea4@youtube.com"}, -{"id":366,"first_name":"Rebecka","last_name":"Scarsbrook","email":"rscarsbrooka5@myspace.com"}, -{"id":367,"first_name":"Abba","last_name":"Mingotti","email":"amingottia6@tuttocitta.it"}, -{"id":368,"first_name":"Miguela","last_name":"McNysche","email":"mmcnyschea7@t-online.de"}, -{"id":369,"first_name":"Weider","last_name":"Rosenau","email":"wrosenaua8@mysql.com"}, -{"id":370,"first_name":"Antonietta","last_name":"Littefair","email":"alittefaira9@xing.com"}, -{"id":371,"first_name":"Heda","last_name":"Wheowall","email":"hwheowallaa@360.cn"}, -{"id":372,"first_name":"Nettle","last_name":"Semonin","email":"nsemoninab@patch.com"}, -{"id":373,"first_name":"Sheri","last_name":"Baudry","email":"sbaudryac@google.ru"}, -{"id":374,"first_name":"Janna","last_name":"Bogue","email":"jboguead@illinois.edu"}, -{"id":375,"first_name":"Saundra","last_name":"Skaid","email":"sskaidae@ycombinator.com"}, -{"id":376,"first_name":"Xenia","last_name":"Cadden","email":"xcaddenaf@booking.com"}, -{"id":377,"first_name":"Claudia","last_name":"Spirit","email":"cspiritag@linkedin.com"}, -{"id":378,"first_name":"Willard","last_name":"Grimwood","email":"wgrimwoodah@oracle.com"}, -{"id":379,"first_name":"Smith","last_name":"Allenby","email":"sallenbyai@godaddy.com"}, -{"id":380,"first_name":"Morlee","last_name":"Bernardin","email":"mbernardinaj@list-manage.com"}, -{"id":381,"first_name":"Murvyn","last_name":"Becom","email":"mbecomak@sourceforge.net"}, -{"id":382,"first_name":"Teriann","last_name":"Flori","email":"tflorial@xinhuanet.com"}, -{"id":383,"first_name":"Liva","last_name":"Cabera","email":"lcaberaam@t.co"}, -{"id":384,"first_name":"Andrej","last_name":"Hearnden","email":"ahearndenan@mysql.com"}, -{"id":385,"first_name":"Reg","last_name":"Vollam","email":"rvollamao@networkadvertising.org"}, -{"id":386,"first_name":"Kimberlyn","last_name":"Bedells","email":"kbedellsap@bbc.co.uk"}, -{"id":387,"first_name":"Cam","last_name":"Quantrill","email":"cquantrillaq@alibaba.com"}, -{"id":388,"first_name":"Giuditta","last_name":"Force","email":"gforcear@delicious.com"}, -{"id":389,"first_name":"Lanie","last_name":"MacQueen","email":"lmacqueenas@flickr.com"}, -{"id":390,"first_name":"Marja","last_name":"O'Dempsey","email":"modempseyat@auda.org.au"}, -{"id":391,"first_name":"Howey","last_name":"St Clair","email":"hstclairau@soundcloud.com"}, -{"id":392,"first_name":"Carolynn","last_name":"Khotler","email":"ckhotlerav@utexas.edu"}, -{"id":393,"first_name":"Theodosia","last_name":"Ort","email":"tortaw@shop-pro.jp"}, -{"id":394,"first_name":"West","last_name":"Matchett","email":"wmatchettax@cbc.ca"}, -{"id":395,"first_name":"Vivianne","last_name":"Wheelwright","email":"vwheelwrightay@washingtonpost.com"}, -{"id":396,"first_name":"Pennie","last_name":"Beames","email":"pbeamesaz@drupal.org"}, -{"id":397,"first_name":"Nady","last_name":"Letch","email":"nletchb0@skype.com"}, -{"id":398,"first_name":"Moselle","last_name":"Maytum","email":"mmaytumb1@usgs.gov"}, -{"id":399,"first_name":"Jennilee","last_name":"Kid","email":"jkidb2@wisc.edu"}, -{"id":400,"first_name":"Parnell","last_name":"Gong","email":"pgongb3@oaic.gov.au"}, -{"id":401,"first_name":"Noll","last_name":"Kohtler","email":"nkohtlerb4@opensource.org"}, -{"id":402,"first_name":"Sonya","last_name":"Orris","email":"sorrisb5@bandcamp.com"}, -{"id":403,"first_name":"Bronnie","last_name":"Guillotin","email":"bguillotinb6@geocities.jp"}, -{"id":404,"first_name":"Inger","last_name":"Clipsham","email":"iclipshamb7@psu.edu"}, -{"id":405,"first_name":"Melina","last_name":"Grigorio","email":"mgrigoriob8@eventbrite.com"}, -{"id":406,"first_name":"Jermain","last_name":"Thraves","email":"jthravesb9@biblegateway.com"}, -{"id":407,"first_name":"Jock","last_name":"Payn","email":"jpaynba@google.cn"}, -{"id":408,"first_name":"Nikolia","last_name":"Sterre","email":"nsterrebb@google.ru"}, -{"id":409,"first_name":"Rosemarie","last_name":"Caurah","email":"rcaurahbc@sohu.com"}, -{"id":410,"first_name":"Conney","last_name":"Spawell","email":"cspawellbd@ycombinator.com"}, -{"id":411,"first_name":"Hernando","last_name":"Percival","email":"hpercivalbe@cisco.com"}, -{"id":412,"first_name":"Michale","last_name":"Stadding","email":"mstaddingbf@bandcamp.com"}, -{"id":413,"first_name":"Zulema","last_name":"Danks","email":"zdanksbg@ovh.net"}, -{"id":414,"first_name":"Olia","last_name":"Joost","email":"ojoostbh@soup.io"}, -{"id":415,"first_name":"Terrance","last_name":"Tesyro","email":"ttesyrobi@digg.com"}, -{"id":416,"first_name":"Corbet","last_name":"Cliff","email":"ccliffbj@oaic.gov.au"}, -{"id":417,"first_name":"Georgetta","last_name":"Tinto","email":"gtintobk@craigslist.org"}, -{"id":418,"first_name":"Priscilla","last_name":"Philips","email":"pphilipsbl@ox.ac.uk"}, -{"id":419,"first_name":"David","last_name":"Mulcock","email":"dmulcockbm@nytimes.com"}, -{"id":420,"first_name":"Agatha","last_name":"Hek","email":"ahekbn@homestead.com"}, -{"id":421,"first_name":"Burty","last_name":"Ceschini","email":"bceschinibo@jimdo.com"}, -{"id":422,"first_name":"Ange","last_name":"Maeer","email":"amaeerbp@feedburner.com"}, -{"id":423,"first_name":"Dannel","last_name":"Sackes","email":"dsackesbq@pbs.org"}, -{"id":424,"first_name":"Lorrie","last_name":"Entres","email":"lentresbr@ebay.co.uk"}, -{"id":425,"first_name":"Oswell","last_name":"Patrick","email":"opatrickbs@answers.com"}, -{"id":426,"first_name":"Nefen","last_name":"Sedgefield","email":"nsedgefieldbt@google.com.au"}, -{"id":427,"first_name":"Crichton","last_name":"Giorgione","email":"cgiorgionebu@va.gov"}, -{"id":428,"first_name":"Shaylynn","last_name":"Bulstrode","email":"sbulstrodebv@ehow.com"}, -{"id":429,"first_name":"Randolf","last_name":"Pickvance","email":"rpickvancebw@istockphoto.com"}, -{"id":430,"first_name":"Diarmid","last_name":"Lias","email":"dliasbx@alexa.com"}, -{"id":431,"first_name":"Francis","last_name":"Clipson","email":"fclipsonby@google.com.au"}, -{"id":432,"first_name":"Lorene","last_name":"Maciejewski","email":"lmaciejewskibz@nytimes.com"}, -{"id":433,"first_name":"Kizzee","last_name":"Klammt","email":"kklammtc0@vkontakte.ru"}, -{"id":434,"first_name":"Zolly","last_name":"Cattle","email":"zcattlec1@va.gov"}, -{"id":435,"first_name":"Kattie","last_name":"Chidwick","email":"kchidwickc2@hatena.ne.jp"}, -{"id":436,"first_name":"Izabel","last_name":"Weight","email":"iweightc3@ycombinator.com"}, -{"id":437,"first_name":"Kerby","last_name":"Redler","email":"kredlerc4@google.es"}, -{"id":438,"first_name":"Wynn","last_name":"Glass","email":"wglassc5@yelp.com"}, -{"id":439,"first_name":"Jemmie","last_name":"Scorey","email":"jscoreyc6@blogspot.com"}, -{"id":440,"first_name":"Krispin","last_name":"Kirstein","email":"kkirsteinc7@elegantthemes.com"}, -{"id":441,"first_name":"Mil","last_name":"Ogdahl","email":"mogdahlc8@ft.com"}, -{"id":442,"first_name":"Van","last_name":"Bernholt","email":"vbernholtc9@indiegogo.com"}, -{"id":443,"first_name":"Ilyse","last_name":"Boecke","email":"iboeckeca@a8.net"}, -{"id":444,"first_name":"Gabby","last_name":"Silcock","email":"gsilcockcb@ow.ly"}, -{"id":445,"first_name":"Ulberto","last_name":"Edgeley","email":"uedgeleycc@blinklist.com"}, -{"id":446,"first_name":"Bary","last_name":"McGuinley","email":"bmcguinleycd@icq.com"}, -{"id":447,"first_name":"Willie","last_name":"Whyard","email":"wwhyardce@msn.com"}, -{"id":448,"first_name":"Borden","last_name":"Thrussell","email":"bthrussellcf@rediff.com"}, -{"id":449,"first_name":"Pincus","last_name":"McMahon","email":"pmcmahoncg@rakuten.co.jp"}, -{"id":450,"first_name":"Rriocard","last_name":"Franke","email":"rfrankech@addtoany.com"}, -{"id":451,"first_name":"Clayborne","last_name":"Greensitt","email":"cgreensittci@yellowbook.com"}, -{"id":452,"first_name":"Shayla","last_name":"Comber","email":"scombercj@sphinn.com"}, -{"id":453,"first_name":"Ronni","last_name":"Errigo","email":"rerrigock@tmall.com"}, -{"id":454,"first_name":"Bunnie","last_name":"Fishly","email":"bfishlycl@a8.net"}, -{"id":455,"first_name":"Jilly","last_name":"Skelly","email":"jskellycm@bbc.co.uk"}, -{"id":456,"first_name":"Melinde","last_name":"Prene","email":"mprenecn@smh.com.au"}, -{"id":457,"first_name":"Alanah","last_name":"De Atta","email":"adeattaco@gmpg.org"}, -{"id":458,"first_name":"Tamiko","last_name":"Gerrish","email":"tgerrishcp@baidu.com"}, -{"id":459,"first_name":"Winslow","last_name":"Waszczyk","email":"wwaszczykcq@bbc.co.uk"}, -{"id":460,"first_name":"Lydon","last_name":"Habershaw","email":"lhabershawcr@imgur.com"}, -{"id":461,"first_name":"Dill","last_name":"Playle","email":"dplaylecs@livejournal.com"}, -{"id":462,"first_name":"Natassia","last_name":"Kendle","email":"nkendlect@usa.gov"}, -{"id":463,"first_name":"Carree","last_name":"Bohills","email":"cbohillscu@pinterest.com"}, -{"id":464,"first_name":"Terrel","last_name":"Knell","email":"tknellcv@webnode.com"}, -{"id":465,"first_name":"Wilhelmina","last_name":"Lumbley","email":"wlumbleycw@stanford.edu"}, -{"id":466,"first_name":"Dori","last_name":"Astridge","email":"dastridgecx@salon.com"}, -{"id":467,"first_name":"Cherie","last_name":"Houlridge","email":"choulridgecy@squarespace.com"}, -{"id":468,"first_name":"Cord","last_name":"Caunt","email":"ccauntcz@hatena.ne.jp"}, -{"id":469,"first_name":"Josie","last_name":"MacMeeking","email":"jmacmeekingd0@people.com.cn"}, -{"id":470,"first_name":"Glenine","last_name":"Feron","email":"gferond1@a8.net"}, -{"id":471,"first_name":"Eliot","last_name":"Doidge","email":"edoidged2@intel.com"}, -{"id":472,"first_name":"Dudley","last_name":"Lehrahan","email":"dlehrahand3@technorati.com"}, -{"id":473,"first_name":"Tyler","last_name":"Puddan","email":"tpuddand4@ft.com"}, -{"id":474,"first_name":"Egor","last_name":"Lindgren","email":"elindgrend5@nba.com"}, -{"id":475,"first_name":"Barnabe","last_name":"Rival","email":"brivald6@yahoo.co.jp"}, -{"id":476,"first_name":"Domenico","last_name":"De Courtney","email":"ddecourtneyd7@themeforest.net"}, -{"id":477,"first_name":"Matthus","last_name":"Bodycote","email":"mbodycoted8@usa.gov"}, -{"id":478,"first_name":"Jamie","last_name":"Blyden","email":"jblydend9@comcast.net"}, -{"id":479,"first_name":"Mignon","last_name":"Woolnough","email":"mwoolnoughda@sciencedaily.com"}, -{"id":480,"first_name":"Mala","last_name":"Devlin","email":"mdevlindb@epa.gov"}, -{"id":481,"first_name":"Tiertza","last_name":"Letterick","email":"tletterickdc@state.gov"}, -{"id":482,"first_name":"Rebecka","last_name":"Alday","email":"raldaydd@flavors.me"}, -{"id":483,"first_name":"Vinita","last_name":"Etter","email":"vetterde@wikispaces.com"}, -{"id":484,"first_name":"Noreen","last_name":"Sirmond","email":"nsirmonddf@jigsy.com"}, -{"id":485,"first_name":"Ashley","last_name":"McClaughlin","email":"amcclaughlindg@bloomberg.com"}, -{"id":486,"first_name":"Vale","last_name":"Le Houx","email":"vlehouxdh@nhs.uk"}, -{"id":487,"first_name":"Donnell","last_name":"Treadway","email":"dtreadwaydi@mit.edu"}, -{"id":488,"first_name":"Gwennie","last_name":"Gundrey","email":"ggundreydj@over-blog.com"}, -{"id":489,"first_name":"Karel","last_name":"Dani","email":"kdanidk@163.com"}, -{"id":490,"first_name":"Merle","last_name":"Bonnaire","email":"mbonnairedl@uol.com.br"}, -{"id":491,"first_name":"Annabel","last_name":"Nockles","email":"anocklesdm@walmart.com"}, -{"id":492,"first_name":"Urban","last_name":"Ivashov","email":"uivashovdn@amazon.co.uk"}, -{"id":493,"first_name":"Hector","last_name":"Rothwell","email":"hrothwelldo@howstuffworks.com"}, -{"id":494,"first_name":"Ford","last_name":"Brozek","email":"fbrozekdp@hibu.com"}, -{"id":495,"first_name":"Rhody","last_name":"Phythean","email":"rphytheandq@bbc.co.uk"}, -{"id":496,"first_name":"Angie","last_name":"Durno","email":"adurnodr@china.com.cn"}, -{"id":497,"first_name":"Elisha","last_name":"Jerrome","email":"ejerromeds@163.com"}, -{"id":498,"first_name":"Davita","last_name":"Dakers","email":"ddakersdt@bravesites.com"}, -{"id":499,"first_name":"Kiersten","last_name":"Josey","email":"kjoseydu@networksolutions.com"}, -{"id":500,"first_name":"Wendell","last_name":"Carroll","email":"wcarrolldv@networksolutions.com"}, -{"id":501,"first_name":"Coletta","last_name":"Choake","email":"cchoakedw@prweb.com"}, -{"id":502,"first_name":"Syd","last_name":"Flisher","email":"sflisherdx@economist.com"}, -{"id":503,"first_name":"Binky","last_name":"Tennet","email":"btennetdy@nbcnews.com"}, -{"id":504,"first_name":"Drud","last_name":"Clilverd","email":"dclilverddz@state.tx.us"}, -{"id":505,"first_name":"Neda","last_name":"Clothier","email":"nclothiere0@forbes.com"}, -{"id":506,"first_name":"Dew","last_name":"Swalowe","email":"dswalowee1@ow.ly"}, -{"id":507,"first_name":"Valry","last_name":"Plant","email":"vplante2@technorati.com"}, -{"id":508,"first_name":"Lin","last_name":"Geldart","email":"lgeldarte3@auda.org.au"}, -{"id":509,"first_name":"Lucita","last_name":"Botting","email":"lbottinge4@patch.com"}, -{"id":510,"first_name":"Eba","last_name":"Whitfield","email":"ewhitfielde5@parallels.com"}, -{"id":511,"first_name":"Bondy","last_name":"Beasley","email":"bbeasleye6@omniture.com"}, -{"id":512,"first_name":"Elvis","last_name":"Hassard","email":"ehassarde7@studiopress.com"}, -{"id":513,"first_name":"Brianne","last_name":"Shinefield","email":"bshinefielde8@diigo.com"}, -{"id":514,"first_name":"Gertie","last_name":"Kuzma","email":"gkuzmae9@census.gov"}, -{"id":515,"first_name":"Ludovico","last_name":"Skurm","email":"lskurmea@furl.net"}, -{"id":516,"first_name":"Andrea","last_name":"Paternoster","email":"apaternostereb@cargocollective.com"}, -{"id":517,"first_name":"Emmet","last_name":"O'Crowley","email":"eocrowleyec@wiley.com"}, -{"id":518,"first_name":"Marcellus","last_name":"Thurborn","email":"mthurborned@eepurl.com"}, -{"id":519,"first_name":"Tad","last_name":"Dawidowicz","email":"tdawidowiczee@qq.com"}, -{"id":520,"first_name":"Beitris","last_name":"Narramore","email":"bnarramoreef@microsoft.com"}, -{"id":521,"first_name":"Caresse","last_name":"Hordell","email":"chordelleg@paypal.com"}, -{"id":522,"first_name":"Tilly","last_name":"Empringham","email":"tempringhameh@cam.ac.uk"}, -{"id":523,"first_name":"Aila","last_name":"Wheater","email":"awheaterei@noaa.gov"}, -{"id":524,"first_name":"Sal","last_name":"Proudley","email":"sproudleyej@last.fm"}, -{"id":525,"first_name":"Teodor","last_name":"Crumpe","email":"tcrumpeek@nsw.gov.au"}, -{"id":526,"first_name":"Loretta","last_name":"Helliwell","email":"lhelliwellel@yelp.com"}, -{"id":527,"first_name":"Alidia","last_name":"Malzard","email":"amalzardem@chron.com"}, -{"id":528,"first_name":"Sheela","last_name":"Ather","email":"satheren@cloudflare.com"}, -{"id":529,"first_name":"Madelon","last_name":"Berget","email":"mbergeteo@weather.com"}, -{"id":530,"first_name":"Hugues","last_name":"Bunney","email":"hbunneyep@ucsd.edu"}, -{"id":531,"first_name":"Jeannette","last_name":"De Coursey","email":"jdecourseyeq@apache.org"}, -{"id":532,"first_name":"Hy","last_name":"Corkan","email":"hcorkaner@cdc.gov"}, -{"id":533,"first_name":"Corena","last_name":"Hanscombe","email":"chanscombees@bloglovin.com"}, -{"id":534,"first_name":"Blinnie","last_name":"Jahner","email":"bjahneret@hubpages.com"}, -{"id":535,"first_name":"Dev","last_name":"Kincade","email":"dkincadeeu@github.io"}, -{"id":536,"first_name":"Ranee","last_name":"Culley","email":"rculleyev@hhs.gov"}, -{"id":537,"first_name":"Alisa","last_name":"Marchington","email":"amarchingtonew@storify.com"}, -{"id":538,"first_name":"Roscoe","last_name":"Cromblehome","email":"rcromblehomeex@hostgator.com"}, -{"id":539,"first_name":"Octavius","last_name":"Duguid","email":"oduguidey@usatoday.com"}, -{"id":540,"first_name":"Nicoline","last_name":"Glasbey","email":"nglasbeyez@xrea.com"}, -{"id":541,"first_name":"Winfield","last_name":"Jakeman","email":"wjakemanf0@example.com"}, -{"id":542,"first_name":"Dallas","last_name":"Shmyr","email":"dshmyrf1@dropbox.com"}, -{"id":543,"first_name":"Georgianna","last_name":"Beves","email":"gbevesf2@sciencedirect.com"}, -{"id":544,"first_name":"Ignacio","last_name":"McLeod","email":"imcleodf3@addthis.com"}, -{"id":545,"first_name":"Will","last_name":"Wemm","email":"wwemmf4@bizjournals.com"}, -{"id":546,"first_name":"Maxie","last_name":"Martinson","email":"mmartinsonf5@weather.com"}, -{"id":547,"first_name":"Iver","last_name":"Lurner","email":"ilurnerf6@theguardian.com"}, -{"id":548,"first_name":"Baillie","last_name":"Goodlip","email":"bgoodlipf7@apple.com"}, -{"id":549,"first_name":"Nessi","last_name":"Cleeve","email":"ncleevef8@weather.com"}, -{"id":550,"first_name":"Thor","last_name":"Barfitt","email":"tbarfittf9@yolasite.com"}, -{"id":551,"first_name":"Stillman","last_name":"Boycott","email":"sboycottfa@washingtonpost.com"}, -{"id":552,"first_name":"Mallory","last_name":"Esmond","email":"mesmondfb@seattletimes.com"}, -{"id":553,"first_name":"Gabbie","last_name":"Jodrellec","email":"gjodrellecfc@goo.ne.jp"}, -{"id":554,"first_name":"Siobhan","last_name":"Lanceley","email":"slanceleyfd@virginia.edu"}, -{"id":555,"first_name":"Cherry","last_name":"Rolfi","email":"crolfife@seesaa.net"}, -{"id":556,"first_name":"Shayne","last_name":"Kyne","email":"skyneff@tiny.cc"}, -{"id":557,"first_name":"Ely","last_name":"Aksell","email":"eaksellfg@nytimes.com"}, -{"id":558,"first_name":"Mara","last_name":"Crotch","email":"mcrotchfh@nih.gov"}, -{"id":559,"first_name":"Jennilee","last_name":"Rhucroft","email":"jrhucroftfi@walmart.com"}, -{"id":560,"first_name":"Holly","last_name":"Caso","email":"hcasofj@redcross.org"}, -{"id":561,"first_name":"Duffie","last_name":"Gero","email":"dgerofk@taobao.com"}, -{"id":562,"first_name":"Pansy","last_name":"Smewing","email":"psmewingfl@usatoday.com"}, -{"id":563,"first_name":"Florina","last_name":"Fuxman","email":"ffuxmanfm@instagram.com"}, -{"id":564,"first_name":"Gannie","last_name":"Di Biasio","email":"gdibiasiofn@cmu.edu"}, -{"id":565,"first_name":"Hercule","last_name":"Chaffey","email":"hchaffeyfo@1688.com"}, -{"id":566,"first_name":"Zak","last_name":"Salsberg","email":"zsalsbergfp@hubpages.com"}, -{"id":567,"first_name":"Isobel","last_name":"Ondricek","email":"iondricekfq@facebook.com"}, -{"id":568,"first_name":"Kincaid","last_name":"Savory","email":"ksavoryfr@dmoz.org"}, -{"id":569,"first_name":"Chet","last_name":"Senussi","email":"csenussifs@spiegel.de"}, -{"id":570,"first_name":"Dewain","last_name":"Borrows","email":"dborrowsft@feedburner.com"}, -{"id":571,"first_name":"Carrol","last_name":"Battaille","email":"cbattaillefu@blogs.com"}, -{"id":572,"first_name":"Massimo","last_name":"Coupland","email":"mcouplandfv@weather.com"}, -{"id":573,"first_name":"Krisha","last_name":"Mowles","email":"kmowlesfw@accuweather.com"}, -{"id":574,"first_name":"Lidia","last_name":"Beddoes","email":"lbeddoesfx@sourceforge.net"}, -{"id":575,"first_name":"Crawford","last_name":"Flieger","email":"cfliegerfy@pinterest.com"}, -{"id":576,"first_name":"Dorian","last_name":"Gladdin","email":"dgladdinfz@yelp.com"}, -{"id":577,"first_name":"Alford","last_name":"Ludwell","email":"aludwellg0@pen.io"}, -{"id":578,"first_name":"Leigh","last_name":"Lindsay","email":"llindsayg1@unc.edu"}, -{"id":579,"first_name":"Braden","last_name":"Bewicke","email":"bbewickeg2@mediafire.com"}, -{"id":580,"first_name":"Tildy","last_name":"Thornewell","email":"tthornewellg3@shareasale.com"}, -{"id":581,"first_name":"Bowie","last_name":"Lippard","email":"blippardg4@upenn.edu"}, -{"id":582,"first_name":"Alfonse","last_name":"Drei","email":"adreig5@walmart.com"}, -{"id":583,"first_name":"Muriel","last_name":"Fink","email":"mfinkg6@google.com"}, -{"id":584,"first_name":"Amii","last_name":"Cloney","email":"acloneyg7@google.pl"}, -{"id":585,"first_name":"Beverly","last_name":"Souttar","email":"bsouttarg8@i2i.jp"}, -{"id":586,"first_name":"Dante","last_name":"Crellim","email":"dcrellimg9@weibo.com"}, -{"id":587,"first_name":"Temple","last_name":"Medlicott","email":"tmedlicottga@ftc.gov"}, -{"id":588,"first_name":"Mitchel","last_name":"Jobbing","email":"mjobbinggb@hibu.com"}, -{"id":589,"first_name":"Kelcie","last_name":"Assaf","email":"kassafgc@cnn.com"}, -{"id":590,"first_name":"Steffie","last_name":"Shingler","email":"sshinglergd@about.com"}, -{"id":591,"first_name":"Rik","last_name":"Staff","email":"rstaffge@archive.org"}, -{"id":592,"first_name":"Elfie","last_name":"Sedgemond","email":"esedgemondgf@abc.net.au"}, -{"id":593,"first_name":"Rae","last_name":"Paskerful","email":"rpaskerfulgg@woothemes.com"}, -{"id":594,"first_name":"Robinet","last_name":"Coatts","email":"rcoattsgh@360.cn"}, -{"id":595,"first_name":"Dinnie","last_name":"Asple","email":"dasplegi@a8.net"}, -{"id":596,"first_name":"Venita","last_name":"Raffon","email":"vraffongj@vimeo.com"}, -{"id":597,"first_name":"Carlie","last_name":"Gonet","email":"cgonetgk@people.com.cn"}, -{"id":598,"first_name":"Lyda","last_name":"Rutty","email":"lruttygl@sohu.com"}, -{"id":599,"first_name":"Emory","last_name":"Harnell","email":"eharnellgm@stanford.edu"}, -{"id":600,"first_name":"Donica","last_name":"Ducarel","email":"dducarelgn@posterous.com"}, -{"id":601,"first_name":"Amandi","last_name":"Espinoy","email":"aespinoygo@washingtonpost.com"}, -{"id":602,"first_name":"Sindee","last_name":"Carrick","email":"scarrickgp@devhub.com"}, -{"id":603,"first_name":"Dmitri","last_name":"McGreay","email":"dmcgreaygq@imdb.com"}, -{"id":604,"first_name":"Linda","last_name":"Frugier","email":"lfrugiergr@chicagotribune.com"}, -{"id":605,"first_name":"Ogden","last_name":"Piff","email":"opiffgs@google.de"}, -{"id":606,"first_name":"Julina","last_name":"Ollerenshaw","email":"jollerenshawgt@prweb.com"}, -{"id":607,"first_name":"Blair","last_name":"Sauter","email":"bsautergu@cpanel.net"}, -{"id":608,"first_name":"Saw","last_name":"McCaster","email":"smccastergv@yandex.ru"}, -{"id":609,"first_name":"Page","last_name":"Kirman","email":"pkirmangw@cocolog-nifty.com"}, -{"id":610,"first_name":"Verine","last_name":"Popley","email":"vpopleygx@mlb.com"}, -{"id":611,"first_name":"Cart","last_name":"Winfindine","email":"cwinfindinegy@smh.com.au"}, -{"id":612,"first_name":"Niels","last_name":"Tapscott","email":"ntapscottgz@buzzfeed.com"}, -{"id":613,"first_name":"Helsa","last_name":"Tester","email":"htesterh0@google.com"}, -{"id":614,"first_name":"Teddi","last_name":"Orman","email":"tormanh1@photobucket.com"}, -{"id":615,"first_name":"Loria","last_name":"Kerkham","email":"lkerkhamh2@bravesites.com"}, -{"id":616,"first_name":"Elisa","last_name":"Lorman","email":"elormanh3@sciencedaily.com"}, -{"id":617,"first_name":"Hector","last_name":"Wann","email":"hwannh4@cloudflare.com"}, -{"id":618,"first_name":"Augustine","last_name":"Twelftree","email":"atwelftreeh5@army.mil"}, -{"id":619,"first_name":"Scotti","last_name":"Turbard","email":"sturbardh6@wordpress.org"}, -{"id":620,"first_name":"Valdemar","last_name":"Piercey","email":"vpierceyh7@newsvine.com"}, -{"id":621,"first_name":"Bary","last_name":"Riden","email":"bridenh8@alibaba.com"}, -{"id":622,"first_name":"Rozelle","last_name":"Walne","email":"rwalneh9@nbcnews.com"}, -{"id":623,"first_name":"Olivette","last_name":"Kubanek","email":"okubanekha@sciencedirect.com"}, -{"id":624,"first_name":"Chantal","last_name":"MacMeekan","email":"cmacmeekanhb@paypal.com"}, -{"id":625,"first_name":"Aldrich","last_name":"Benterman","email":"abentermanhc@wired.com"}, -{"id":626,"first_name":"Erminie","last_name":"Siss","email":"esisshd@opera.com"}, -{"id":627,"first_name":"Lowell","last_name":"Stenning","email":"lstenninghe@bigcartel.com"}, -{"id":628,"first_name":"Petrina","last_name":"Durno","email":"pdurnohf@blogtalkradio.com"}, -{"id":629,"first_name":"Elianore","last_name":"Clorley","email":"eclorleyhg@sphinn.com"}, -{"id":630,"first_name":"Ingmar","last_name":"Slad","email":"isladhh@example.com"}, -{"id":631,"first_name":"Myles","last_name":"Gaunter","email":"mgaunterhi@furl.net"}, -{"id":632,"first_name":"Dyana","last_name":"Mohun","email":"dmohunhj@illinois.edu"}, -{"id":633,"first_name":"Jayne","last_name":"Tesimon","email":"jtesimonhk@techcrunch.com"}, -{"id":634,"first_name":"Feliks","last_name":"Arnecke","email":"farneckehl@elpais.com"}, -{"id":635,"first_name":"Myrtle","last_name":"Keat","email":"mkeathm@bravesites.com"}, -{"id":636,"first_name":"Sheffy","last_name":"Cockett","email":"scocketthn@weebly.com"}, -{"id":637,"first_name":"Zuzana","last_name":"Scarre","email":"zscarreho@hp.com"}, -{"id":638,"first_name":"Tybie","last_name":"Coll","email":"tcollhp@themeforest.net"}, -{"id":639,"first_name":"Jennie","last_name":"Donati","email":"jdonatihq@tinyurl.com"}, -{"id":640,"first_name":"Elvina","last_name":"Adan","email":"eadanhr@google.pl"}, -{"id":641,"first_name":"Ruthie","last_name":"MacGinlay","email":"rmacginlayhs@imageshack.us"}, -{"id":642,"first_name":"Mikel","last_name":"Lammin","email":"mlamminht@shop-pro.jp"}, -{"id":643,"first_name":"Hannis","last_name":"Heathfield","email":"hheathfieldhu@google.ru"}, -{"id":644,"first_name":"Carmela","last_name":"Shimmans","email":"cshimmanshv@businesswire.com"}, -{"id":645,"first_name":"Nichols","last_name":"Avo","email":"navohw@aol.com"}, -{"id":646,"first_name":"Karlis","last_name":"Dowe","email":"kdowehx@wufoo.com"}, -{"id":647,"first_name":"Gabe","last_name":"Bowen","email":"gbowenhy@ameblo.jp"}, -{"id":648,"first_name":"Moyna","last_name":"Orrobin","email":"morrobinhz@cornell.edu"}, -{"id":649,"first_name":"Georgine","last_name":"Jaye","email":"gjayei0@un.org"}, -{"id":650,"first_name":"Essy","last_name":"MacIntosh","email":"emacintoshi1@unicef.org"}, -{"id":651,"first_name":"Andrew","last_name":"Ockland","email":"aocklandi2@redcross.org"}, -{"id":652,"first_name":"Cariotta","last_name":"Yates","email":"cyatesi3@nhs.uk"}, -{"id":653,"first_name":"Paulie","last_name":"Lockley","email":"plockleyi4@mayoclinic.com"}, -{"id":654,"first_name":"Aviva","last_name":"Acum","email":"aacumi5@telegraph.co.uk"}, -{"id":655,"first_name":"Rutger","last_name":"Ramey","email":"rrameyi6@sciencedirect.com"}, -{"id":656,"first_name":"Megen","last_name":"Castagnasso","email":"mcastagnassoi7@furl.net"}, -{"id":657,"first_name":"Victoria","last_name":"Tollow","email":"vtollowi8@last.fm"}, -{"id":658,"first_name":"Lusa","last_name":"Balmadier","email":"lbalmadieri9@upenn.edu"}, -{"id":659,"first_name":"Nessi","last_name":"Heyball","email":"nheyballia@samsung.com"}, -{"id":660,"first_name":"Lorrin","last_name":"Glastonbury","email":"lglastonburyib@dot.gov"}, -{"id":661,"first_name":"Marin","last_name":"Greenset","email":"mgreensetic@goo.gl"}, -{"id":662,"first_name":"Benyamin","last_name":"Froom","email":"bfroomid@nba.com"}, -{"id":663,"first_name":"Garv","last_name":"Drewett","email":"gdrewettie@craigslist.org"}, -{"id":664,"first_name":"Berke","last_name":"Rothert","email":"brothertif@imgur.com"}, -{"id":665,"first_name":"Kali","last_name":"Obispo","email":"kobispoig@dyndns.org"}, -{"id":666,"first_name":"Veronique","last_name":"Letchford","email":"vletchfordih@unblog.fr"}, -{"id":667,"first_name":"Jayme","last_name":"Dukelow","email":"jdukelowii@intel.com"}, -{"id":668,"first_name":"Murial","last_name":"Toun","email":"mtounij@flavors.me"}, -{"id":669,"first_name":"Charles","last_name":"Belcham","email":"cbelchamik@shareasale.com"}, -{"id":670,"first_name":"Bunnie","last_name":"Godier","email":"bgodieril@opera.com"}, -{"id":671,"first_name":"Brewer","last_name":"Reeks","email":"breeksim@list-manage.com"}, -{"id":672,"first_name":"Mickey","last_name":"Genn","email":"mgennin@baidu.com"}, -{"id":673,"first_name":"Granger","last_name":"Grunnell","email":"ggrunnellio@miibeian.gov.cn"}, -{"id":674,"first_name":"Alexis","last_name":"Cavnor","email":"acavnorip@behance.net"}, -{"id":675,"first_name":"Garnette","last_name":"Teodorski","email":"gteodorskiiq@skype.com"}, -{"id":676,"first_name":"Yoshi","last_name":"MacDavitt","email":"ymacdavittir@java.com"}, -{"id":677,"first_name":"Aubree","last_name":"Etches","email":"aetchesis@toplist.cz"}, -{"id":678,"first_name":"Mayne","last_name":"Swadon","email":"mswadonit@zdnet.com"}, -{"id":679,"first_name":"Cammie","last_name":"Chastney","email":"cchastneyiu@eventbrite.com"}, -{"id":680,"first_name":"Allianora","last_name":"Copsey","email":"acopseyiv@hubpages.com"}, -{"id":681,"first_name":"Erwin","last_name":"Jewett","email":"ejewettiw@digg.com"}, -{"id":682,"first_name":"Caesar","last_name":"Joannic","email":"cjoannicix@yellowbook.com"}, -{"id":683,"first_name":"Zia","last_name":"Tynan","email":"ztynaniy@state.gov"}, -{"id":684,"first_name":"Ford","last_name":"Cozins","email":"fcozinsiz@springer.com"}, -{"id":685,"first_name":"Kathleen","last_name":"Murrells","email":"kmurrellsj0@ask.com"}, -{"id":686,"first_name":"Daisy","last_name":"Attard","email":"dattardj1@slate.com"}, -{"id":687,"first_name":"Brandon","last_name":"Mendoza","email":"bmendozaj2@yellowbook.com"}, -{"id":688,"first_name":"Kerwinn","last_name":"Chung","email":"kchungj3@weibo.com"}, -{"id":689,"first_name":"Ricki","last_name":"Sexti","email":"rsextij4@wikimedia.org"}, -{"id":690,"first_name":"Ema","last_name":"Logsdale","email":"elogsdalej5@hostgator.com"}, -{"id":691,"first_name":"Noella","last_name":"Spencer","email":"nspencerj6@newsvine.com"}, -{"id":692,"first_name":"Dee dee","last_name":"Stocks","email":"dstocksj7@microsoft.com"}, -{"id":693,"first_name":"Ingra","last_name":"Norvell","email":"inorvellj8@reference.com"}, -{"id":694,"first_name":"Eunice","last_name":"Giabucci","email":"egiabuccij9@naver.com"}, -{"id":695,"first_name":"Emera","last_name":"Krzyzanowski","email":"ekrzyzanowskija@google.fr"}, -{"id":696,"first_name":"Latia","last_name":"Hopfner","email":"lhopfnerjb@amazon.com"}, -{"id":697,"first_name":"Alejandro","last_name":"Harewood","email":"aharewoodjc@msu.edu"}, -{"id":698,"first_name":"Lorilyn","last_name":"Nolli","email":"lnollijd@multiply.com"}, -{"id":699,"first_name":"Billy","last_name":"Leckie","email":"bleckieje@ted.com"}, -{"id":700,"first_name":"Elnar","last_name":"McShea","email":"emcsheajf@walmart.com"}, -{"id":701,"first_name":"Carine","last_name":"McCuish","email":"cmccuishjg@theatlantic.com"}, -{"id":702,"first_name":"Andras","last_name":"Sharplin","email":"asharplinjh@newsvine.com"}, -{"id":703,"first_name":"Granger","last_name":"Vany","email":"gvanyji@bing.com"}, -{"id":704,"first_name":"Marcelia","last_name":"Breyt","email":"mbreytjj@tinyurl.com"}, -{"id":705,"first_name":"Vernor","last_name":"Duffit","email":"vduffitjk@upenn.edu"}, -{"id":706,"first_name":"Marchelle","last_name":"Guyver","email":"mguyverjl@myspace.com"}, -{"id":707,"first_name":"Woodman","last_name":"Henricsson","email":"whenricssonjm@4shared.com"}, -{"id":708,"first_name":"Ava","last_name":"Gosart","email":"agosartjn@stumbleupon.com"}, -{"id":709,"first_name":"Nickie","last_name":"Inwood","email":"ninwoodjo@google.es"}, -{"id":710,"first_name":"Keefer","last_name":"Antonioni","email":"kantonionijp@columbia.edu"}, -{"id":711,"first_name":"Elvyn","last_name":"Le Count","email":"elecountjq@ehow.com"}, -{"id":712,"first_name":"Renate","last_name":"Wannop","email":"rwannopjr@imgur.com"}, -{"id":713,"first_name":"Ainslee","last_name":"Baldelli","email":"abaldellijs@4shared.com"}, -{"id":714,"first_name":"Annnora","last_name":"Fulop","email":"afulopjt@addtoany.com"}, -{"id":715,"first_name":"Mariel","last_name":"Vowles","email":"mvowlesju@businesswire.com"}, -{"id":716,"first_name":"Dan","last_name":"Pendred","email":"dpendredjv@aol.com"}, -{"id":717,"first_name":"Johnna","last_name":"Twatt","email":"jtwattjw@ucla.edu"}, -{"id":718,"first_name":"Steward","last_name":"Brownsett","email":"sbrownsettjx@google.de"}, -{"id":719,"first_name":"Bevon","last_name":"Backen","email":"bbackenjy@aol.com"}, -{"id":720,"first_name":"Sande","last_name":"Coggan","email":"scogganjz@toplist.cz"}, -{"id":721,"first_name":"Kippy","last_name":"Bubear","email":"kbubeark0@arizona.edu"}, -{"id":722,"first_name":"Bryce","last_name":"Harmond","email":"bharmondk1@sakura.ne.jp"}, -{"id":723,"first_name":"Rodrique","last_name":"Jakov","email":"rjakovk2@sitemeter.com"}, -{"id":724,"first_name":"Mariel","last_name":"Caslake","email":"mcaslakek3@free.fr"}, -{"id":725,"first_name":"Faun","last_name":"Bresland","email":"fbreslandk4@mashable.com"}, -{"id":726,"first_name":"Ekaterina","last_name":"Donnel","email":"edonnelk5@nasa.gov"}, -{"id":727,"first_name":"Edmon","last_name":"Pittle","email":"epittlek6@ow.ly"}, -{"id":728,"first_name":"Glendon","last_name":"Blunsden","email":"gblunsdenk7@google.co.jp"}, -{"id":729,"first_name":"Anica","last_name":"Watkinson","email":"awatkinsonk8@wired.com"}, -{"id":730,"first_name":"Tabbie","last_name":"Camden","email":"tcamdenk9@cargocollective.com"}, -{"id":731,"first_name":"Berti","last_name":"Jerschke","email":"bjerschkeka@netlog.com"}, -{"id":732,"first_name":"Shanie","last_name":"Dimitrov","email":"sdimitrovkb@icq.com"}, -{"id":733,"first_name":"Annora","last_name":"Criag","email":"acriagkc@ted.com"}, -{"id":734,"first_name":"Adel","last_name":"Brass","email":"abrasskd@tuttocitta.it"}, -{"id":735,"first_name":"Chauncey","last_name":"Pole","email":"cpoleke@webmd.com"}, -{"id":736,"first_name":"Drugi","last_name":"Nudd","email":"dnuddkf@odnoklassniki.ru"}, -{"id":737,"first_name":"Daisy","last_name":"Reboul","email":"dreboulkg@bandcamp.com"}, -{"id":738,"first_name":"Perice","last_name":"Jacobowits","email":"pjacobowitskh@dot.gov"}, -{"id":739,"first_name":"Norma","last_name":"Yitzovicz","email":"nyitzoviczki@g.co"}, -{"id":740,"first_name":"Bryon","last_name":"Skepper","email":"bskepperkj@jigsy.com"}, -{"id":741,"first_name":"Allx","last_name":"Kingswood","email":"akingswoodkk@123-reg.co.uk"}, -{"id":742,"first_name":"Quillan","last_name":"Grishmanov","email":"qgrishmanovkl@imageshack.us"}, -{"id":743,"first_name":"Enrichetta","last_name":"Dumbar","email":"edumbarkm@1688.com"}, -{"id":744,"first_name":"Jasen","last_name":"Pheazey","email":"jpheazeykn@lycos.com"}, -{"id":745,"first_name":"Austina","last_name":"Vardie","email":"avardieko@google.pl"}, -{"id":746,"first_name":"Petey","last_name":"Lardiner","email":"plardinerkp@hostgator.com"}, -{"id":747,"first_name":"Rupert","last_name":"Ebenezer","email":"rebenezerkq@miitbeian.gov.cn"}, -{"id":748,"first_name":"Sarina","last_name":"Latch","email":"slatchkr@goo.gl"}, -{"id":749,"first_name":"Ruthi","last_name":"Pitney","email":"rpitneyks@clickbank.net"}, -{"id":750,"first_name":"Claire","last_name":"Slight","email":"cslightkt@furl.net"}, -{"id":751,"first_name":"Bret","last_name":"Whybray","email":"bwhybrayku@japanpost.jp"}, -{"id":752,"first_name":"Marge","last_name":"Copnell","email":"mcopnellkv@newsvine.com"}, -{"id":753,"first_name":"Abba","last_name":"Eglington","email":"aeglingtonkw@squidoo.com"}, -{"id":754,"first_name":"Levon","last_name":"Forsdike","email":"lforsdikekx@stanford.edu"}, -{"id":755,"first_name":"Arlen","last_name":"Ingarfield","email":"aingarfieldky@abc.net.au"}, -{"id":756,"first_name":"Nollie","last_name":"O'Hanlon","email":"nohanlonkz@blogspot.com"}, -{"id":757,"first_name":"Phaedra","last_name":"Guiducci","email":"pguiduccil0@columbia.edu"}, -{"id":758,"first_name":"Ashlee","last_name":"Reeken","email":"areekenl1@shinystat.com"}, -{"id":759,"first_name":"Mareah","last_name":"Wagstaffe","email":"mwagstaffel2@is.gd"}, -{"id":760,"first_name":"Cindelyn","last_name":"Sizland","email":"csizlandl3@sun.com"}, -{"id":761,"first_name":"Deeann","last_name":"Minillo","email":"dminillol4@bloomberg.com"}, -{"id":762,"first_name":"Adelaida","last_name":"Gerish","email":"agerishl5@bigcartel.com"}, -{"id":763,"first_name":"Morris","last_name":"Pretious","email":"mpretiousl6@youtube.com"}, -{"id":764,"first_name":"Aurelea","last_name":"Lindback","email":"alindbackl7@jimdo.com"}, -{"id":765,"first_name":"Floyd","last_name":"Francioli","email":"ffranciolil8@delicious.com"}, -{"id":766,"first_name":"Amalea","last_name":"Humbey","email":"ahumbeyl9@free.fr"}, -{"id":767,"first_name":"Randy","last_name":"Aspden","email":"raspdenla@prweb.com"}, -{"id":768,"first_name":"Fenelia","last_name":"Mulbery","email":"fmulberylb@hc360.com"}, -{"id":769,"first_name":"Benoite","last_name":"Monday","email":"bmondaylc@sohu.com"}, -{"id":770,"first_name":"Delaney","last_name":"Powner","email":"dpownerld@admin.ch"}, -{"id":771,"first_name":"Joellyn","last_name":"Stackbridge","email":"jstackbridgele@zimbio.com"}, -{"id":772,"first_name":"Betsy","last_name":"Pemberton","email":"bpembertonlf@twitpic.com"}, -{"id":773,"first_name":"Dix","last_name":"Hemphrey","email":"dhemphreylg@xinhuanet.com"}, -{"id":774,"first_name":"Galven","last_name":"Meighan","email":"gmeighanlh@mit.edu"}, -{"id":775,"first_name":"Maggy","last_name":"MacKilroe","email":"mmackilroeli@wsj.com"}, -{"id":776,"first_name":"Vale","last_name":"Diano","email":"vdianolj@google.co.jp"}, -{"id":777,"first_name":"Anatol","last_name":"Qualtro","email":"aqualtrolk@myspace.com"}, -{"id":778,"first_name":"Cobby","last_name":"Webley","email":"cwebleyll@kickstarter.com"}, -{"id":779,"first_name":"Minnie","last_name":"Testro","email":"mtestrolm@jigsy.com"}, -{"id":780,"first_name":"Linet","last_name":"Perel","email":"lperelln@alibaba.com"}, -{"id":781,"first_name":"Johnna","last_name":"Gambles","email":"jgambleslo@theglobeandmail.com"}, -{"id":782,"first_name":"Haskel","last_name":"Jendrusch","email":"hjendruschlp@1688.com"}, -{"id":783,"first_name":"Fletch","last_name":"Quainton","email":"fquaintonlq@geocities.jp"}, -{"id":784,"first_name":"Adrian","last_name":"Holborn","email":"aholbornlr@census.gov"}, -{"id":785,"first_name":"Bonny","last_name":"Frantsev","email":"bfrantsevls@jigsy.com"}, -{"id":786,"first_name":"Townie","last_name":"Bussell","email":"tbusselllt@ihg.com"}, -{"id":787,"first_name":"Andi","last_name":"Pellew","email":"apellewlu@cyberchimps.com"}, -{"id":788,"first_name":"Meridith","last_name":"Jakeway","email":"mjakewaylv@cpanel.net"}, -{"id":789,"first_name":"Ede","last_name":"Winnett","email":"ewinnettlw@hp.com"}, -{"id":790,"first_name":"Geoffrey","last_name":"Yetton","email":"gyettonlx@delicious.com"}, -{"id":791,"first_name":"Josee","last_name":"Lidgard","email":"jlidgardly@redcross.org"}, -{"id":792,"first_name":"Gusella","last_name":"Bedo","email":"gbedolz@squarespace.com"}, -{"id":793,"first_name":"Francklin","last_name":"Goodlud","email":"fgoodludm0@shareasale.com"}, -{"id":794,"first_name":"Caddric","last_name":"Orlton","email":"corltonm1@businessweek.com"}, -{"id":795,"first_name":"Burke","last_name":"Branford","email":"bbranfordm2@last.fm"}, -{"id":796,"first_name":"Joeann","last_name":"McCurlye","email":"jmccurlyem3@addthis.com"}, -{"id":797,"first_name":"Rachael","last_name":"Tamburo","email":"rtamburom4@tuttocitta.it"}, -{"id":798,"first_name":"Eachelle","last_name":"Johantges","email":"ejohantgesm5@printfriendly.com"}, -{"id":799,"first_name":"Babb","last_name":"Casina","email":"bcasinam6@amazon.co.uk"}, -{"id":800,"first_name":"Inge","last_name":"O'Day","email":"iodaym7@shutterfly.com"}, -{"id":801,"first_name":"Eveline","last_name":"Lamperti","email":"elampertim8@purevolume.com"}, -{"id":802,"first_name":"Peder","last_name":"Bierman","email":"pbiermanm9@cnn.com"}, -{"id":803,"first_name":"Wilhelmine","last_name":"McVie","email":"wmcviema@businessweek.com"}, -{"id":804,"first_name":"Barnabas","last_name":"Putton","email":"bputtonmb@icio.us"}, -{"id":805,"first_name":"Edie","last_name":"Standley","email":"estandleymc@jimdo.com"}, -{"id":806,"first_name":"Preston","last_name":"Ranscombe","email":"pranscombemd@booking.com"}, -{"id":807,"first_name":"Conn","last_name":"Harbron","email":"charbronme@washingtonpost.com"}, -{"id":808,"first_name":"Alfy","last_name":"Grolmann","email":"agrolmannmf@storify.com"}, -{"id":809,"first_name":"Elvis","last_name":"Botly","email":"ebotlymg@independent.co.uk"}, -{"id":810,"first_name":"Giulietta","last_name":"Kenn","email":"gkennmh@omniture.com"}, -{"id":811,"first_name":"Fan","last_name":"Aldam","email":"faldammi@creativecommons.org"}, -{"id":812,"first_name":"Constancy","last_name":"Lake","email":"clakemj@so-net.ne.jp"}, -{"id":813,"first_name":"Tildy","last_name":"Streeton","email":"tstreetonmk@about.me"}, -{"id":814,"first_name":"Tildi","last_name":"Stubbe","email":"tstubbeml@blogs.com"}, -{"id":815,"first_name":"Maximilien","last_name":"Epp","email":"meppmm@icq.com"}, -{"id":816,"first_name":"Etti","last_name":"McClinton","email":"emcclintonmn@geocities.com"}, -{"id":817,"first_name":"Susanetta","last_name":"Gonzalvo","email":"sgonzalvomo@stanford.edu"}, -{"id":818,"first_name":"Shellysheldon","last_name":"Fulmen","email":"sfulmenmp@123-reg.co.uk"}, -{"id":819,"first_name":"Alyse","last_name":"Raoux","email":"araouxmq@newyorker.com"}, -{"id":820,"first_name":"Aeriela","last_name":"Tombleson","email":"atomblesonmr@alexa.com"}, -{"id":821,"first_name":"Hal","last_name":"Cockshtt","email":"hcockshttms@guardian.co.uk"}, -{"id":822,"first_name":"Meg","last_name":"Kinnach","email":"mkinnachmt@psu.edu"}, -{"id":823,"first_name":"Rock","last_name":"Olligan","email":"rolliganmu@bravesites.com"}, -{"id":824,"first_name":"Carri","last_name":"Howles","email":"chowlesmv@accuweather.com"}, -{"id":825,"first_name":"Raff","last_name":"Castellino","email":"rcastellinomw@opensource.org"}, -{"id":826,"first_name":"Jeremias","last_name":"Alsina","email":"jalsinamx@cisco.com"}, -{"id":827,"first_name":"Boycie","last_name":"Nial","email":"bnialmy@google.fr"}, -{"id":828,"first_name":"Oswell","last_name":"Jurkiewicz","email":"ojurkiewiczmz@exblog.jp"}, -{"id":829,"first_name":"Star","last_name":"Houdhury","email":"shoudhuryn0@edublogs.org"}, -{"id":830,"first_name":"Diarmid","last_name":"MacGillicuddy","email":"dmacgillicuddyn1@google.com.br"}, -{"id":831,"first_name":"Calley","last_name":"McGenis","email":"cmcgenisn2@freewebs.com"}, -{"id":832,"first_name":"Reagen","last_name":"Hernik","email":"rhernikn3@state.tx.us"}, -{"id":833,"first_name":"Amitie","last_name":"Yu","email":"ayun4@weibo.com"}, -{"id":834,"first_name":"Xena","last_name":"Feldstein","email":"xfeldsteinn5@ameblo.jp"}, -{"id":835,"first_name":"Neill","last_name":"Faucherand","email":"nfaucherandn6@usnews.com"}, -{"id":836,"first_name":"Minta","last_name":"Correa","email":"mcorrean7@bbb.org"}, -{"id":837,"first_name":"Bev","last_name":"Thom","email":"bthomn8@youku.com"}, -{"id":838,"first_name":"Nikki","last_name":"Harwick","email":"nharwickn9@last.fm"}, -{"id":839,"first_name":"Colly","last_name":"Skett","email":"cskettna@gmpg.org"}, -{"id":840,"first_name":"Sonia","last_name":"Kivlehan","email":"skivlehannb@shop-pro.jp"}, -{"id":841,"first_name":"Amye","last_name":"MacAvddy","email":"amacavddync@google.com"}, -{"id":842,"first_name":"Latrena","last_name":"Kilner","email":"lkilnernd@stanford.edu"}, -{"id":843,"first_name":"Nickolaus","last_name":"Poff","email":"npoffne@ebay.co.uk"}, -{"id":844,"first_name":"Shelby","last_name":"Dufour","email":"sdufournf@yelp.com"}, -{"id":845,"first_name":"Christoffer","last_name":"Greystoke","email":"cgreystokeng@newsvine.com"}, -{"id":846,"first_name":"Margery","last_name":"Derges","email":"mdergesnh@senate.gov"}, -{"id":847,"first_name":"Morten","last_name":"Braidley","email":"mbraidleyni@hc360.com"}, -{"id":848,"first_name":"Raf","last_name":"Brearty","email":"rbreartynj@engadget.com"}, -{"id":849,"first_name":"Dyanne","last_name":"Caskie","email":"dcaskienk@multiply.com"}, -{"id":850,"first_name":"Rick","last_name":"Blackesland","email":"rblackeslandnl@ca.gov"}, -{"id":851,"first_name":"Virge","last_name":"Wison","email":"vwisonnm@wufoo.com"}, -{"id":852,"first_name":"Jaynell","last_name":"Coppeard","email":"jcoppeardnn@gnu.org"}, -{"id":853,"first_name":"Ivonne","last_name":"Tarplee","email":"itarpleeno@networksolutions.com"}, -{"id":854,"first_name":"Johann","last_name":"Bonnell","email":"jbonnellnp@friendfeed.com"}, -{"id":855,"first_name":"Penny","last_name":"Pinson","email":"ppinsonnq@telegraph.co.uk"}, -{"id":856,"first_name":"Anton","last_name":"Broadfield","email":"abroadfieldnr@tripod.com"}, -{"id":857,"first_name":"Marlow","last_name":"Meaddowcroft","email":"mmeaddowcroftns@sogou.com"}, -{"id":858,"first_name":"Matt","last_name":"Kemmey","email":"mkemmeynt@istockphoto.com"}, -{"id":859,"first_name":"Cristian","last_name":"Wildman","email":"cwildmannu@a8.net"}, -{"id":860,"first_name":"Doroteya","last_name":"Kettoe","email":"dkettoenv@ucoz.ru"}, -{"id":861,"first_name":"Kathie","last_name":"Lossman","email":"klossmannw@opensource.org"}, -{"id":862,"first_name":"Dorree","last_name":"Lapley","email":"dlapleynx@webnode.com"}, -{"id":863,"first_name":"Tiphany","last_name":"Raspison","email":"traspisonny@wiley.com"}, -{"id":864,"first_name":"Ellyn","last_name":"Flaubert","email":"eflaubertnz@constantcontact.com"}, -{"id":865,"first_name":"Skylar","last_name":"Cornbell","email":"scornbello0@skype.com"}, -{"id":866,"first_name":"Cilka","last_name":"Chivrall","email":"cchivrallo1@ucoz.com"}, -{"id":867,"first_name":"Peg","last_name":"Swarbrigg","email":"pswarbriggo2@wired.com"}, -{"id":868,"first_name":"Doria","last_name":"Rolles","email":"drolleso3@ucoz.com"}, -{"id":869,"first_name":"Winona","last_name":"McKeon","email":"wmckeono4@unesco.org"}, -{"id":870,"first_name":"Tallia","last_name":"Sciacovelli","email":"tsciacovellio5@nps.gov"}, -{"id":871,"first_name":"Tate","last_name":"Kupisz","email":"tkupiszo6@indiatimes.com"}, -{"id":872,"first_name":"Isis","last_name":"Sedgeman","email":"isedgemano7@xrea.com"}, -{"id":873,"first_name":"Norris","last_name":"Eggle","email":"neggleo8@shinystat.com"}, -{"id":874,"first_name":"Andrey","last_name":"Hannant","email":"ahannanto9@hao123.com"}, -{"id":875,"first_name":"Nicoli","last_name":"Kitteringham","email":"nkitteringhamoa@e-recht24.de"}, -{"id":876,"first_name":"Ashlee","last_name":"Seal","email":"asealob@dell.com"}, -{"id":877,"first_name":"Delainey","last_name":"Gullefant","email":"dgullefantoc@barnesandnoble.com"}, -{"id":878,"first_name":"Wakefield","last_name":"Shurrocks","email":"wshurrocksod@ucla.edu"}, -{"id":879,"first_name":"Ced","last_name":"Woolis","email":"cwoolisoe@reuters.com"}, -{"id":880,"first_name":"Ky","last_name":"Bohlin","email":"kbohlinof@reverbnation.com"}, -{"id":881,"first_name":"Marnia","last_name":"Ranscomb","email":"mranscombog@shop-pro.jp"}, -{"id":882,"first_name":"Clair","last_name":"Plose","email":"cploseoh@zdnet.com"}, -{"id":883,"first_name":"Nil","last_name":"Castiello","email":"ncastiellooi@netlog.com"}, -{"id":884,"first_name":"Beck","last_name":"Farfalameev","email":"bfarfalameevoj@princeton.edu"}, -{"id":885,"first_name":"Dorian","last_name":"Brame","email":"dbrameok@usgs.gov"}, -{"id":886,"first_name":"Nell","last_name":"Winckles","email":"nwincklesol@sfgate.com"}, -{"id":887,"first_name":"Kippy","last_name":"Lenz","email":"klenzom@microsoft.com"}, -{"id":888,"first_name":"Maddie","last_name":"Yair","email":"myairon@va.gov"}, -{"id":889,"first_name":"Vick","last_name":"Lukasen","email":"vlukasenoo@woothemes.com"}, -{"id":890,"first_name":"Arlyne","last_name":"Gonnet","email":"agonnetop@livejournal.com"}, -{"id":891,"first_name":"Beverie","last_name":"Hundall","email":"bhundalloq@sohu.com"}, -{"id":892,"first_name":"Sondra","last_name":"Sextie","email":"ssextieor@hugedomains.com"}, -{"id":893,"first_name":"Rita","last_name":"McLafferty","email":"rmclaffertyos@infoseek.co.jp"}, -{"id":894,"first_name":"Albina","last_name":"Moran","email":"amoranot@nationalgeographic.com"}, -{"id":895,"first_name":"Julissa","last_name":"Ilchenko","email":"jilchenkoou@telegraph.co.uk"}, -{"id":896,"first_name":"Arnoldo","last_name":"Conkey","email":"aconkeyov@pen.io"}, -{"id":897,"first_name":"Elliott","last_name":"Yearby","email":"eyearbyow@bloglovin.com"}, -{"id":898,"first_name":"Lura","last_name":"Borgne","email":"lborgneox@techcrunch.com"}, -{"id":899,"first_name":"Trescha","last_name":"Mottinelli","email":"tmottinellioy@google.com"}, -{"id":900,"first_name":"Miguela","last_name":"Zeplin","email":"mzeplinoz@drupal.org"}, -{"id":901,"first_name":"Arleen","last_name":"Boothman","email":"aboothmanp0@google.com.br"}, -{"id":902,"first_name":"Natalee","last_name":"Glendining","email":"nglendiningp1@yandex.ru"}, -{"id":903,"first_name":"Tobiah","last_name":"Booton","email":"tbootonp2@msu.edu"}, -{"id":904,"first_name":"Dyanna","last_name":"Ferrer","email":"dferrerp3@webnode.com"}, -{"id":905,"first_name":"Durant","last_name":"Lewsey","email":"dlewseyp4@harvard.edu"}, -{"id":906,"first_name":"Tad","last_name":"Gheerhaert","email":"tgheerhaertp5@yellowbook.com"}, -{"id":907,"first_name":"Magdaia","last_name":"Tordiffe","email":"mtordiffep6@w3.org"}, -{"id":908,"first_name":"Melodie","last_name":"Welton","email":"mweltonp7@surveymonkey.com"}, -{"id":909,"first_name":"Ennis","last_name":"Orbell","email":"eorbellp8@hud.gov"}, -{"id":910,"first_name":"Adora","last_name":"MacCaffrey","email":"amaccaffreyp9@yandex.ru"}, -{"id":911,"first_name":"Tan","last_name":"Utridge","email":"tutridgepa@storify.com"}, -{"id":912,"first_name":"Cornie","last_name":"Grishinov","email":"cgrishinovpb@free.fr"}, -{"id":913,"first_name":"Linn","last_name":"Thiem","email":"lthiempc@omniture.com"}, -{"id":914,"first_name":"Tara","last_name":"Eckels","email":"teckelspd@mayoclinic.com"}, -{"id":915,"first_name":"Marylee","last_name":"Thaine","email":"mthainepe@economist.com"}, -{"id":916,"first_name":"Vonni","last_name":"Pretti","email":"vprettipf@stanford.edu"}, -{"id":917,"first_name":"Kenneth","last_name":"Eshelby","email":"keshelbypg@guardian.co.uk"}, -{"id":918,"first_name":"Jasen","last_name":"Adin","email":"jadinph@state.tx.us"}, -{"id":919,"first_name":"Madelle","last_name":"Labdon","email":"mlabdonpi@edublogs.org"}, -{"id":920,"first_name":"Boycey","last_name":"Stonelake","email":"bstonelakepj@php.net"}, -{"id":921,"first_name":"Aundrea","last_name":"Waymont","email":"awaymontpk@github.io"}, -{"id":922,"first_name":"Hasty","last_name":"Ovill","email":"hovillpl@jiathis.com"}, -{"id":923,"first_name":"Vina","last_name":"Jeaycock","email":"vjeaycockpm@engadget.com"}, -{"id":924,"first_name":"Ettore","last_name":"Salman","email":"esalmanpn@ucsd.edu"}, -{"id":925,"first_name":"Alleyn","last_name":"Omand","email":"aomandpo@xinhuanet.com"}, -{"id":926,"first_name":"Karrah","last_name":"Etches","email":"ketchespp@nationalgeographic.com"}, -{"id":927,"first_name":"Saloma","last_name":"Pallas","email":"spallaspq@google.cn"}, -{"id":928,"first_name":"Janice","last_name":"Almack","email":"jalmackpr@jiathis.com"}, -{"id":929,"first_name":"Mallissa","last_name":"Moreing","email":"mmoreingps@amazon.com"}, -{"id":930,"first_name":"Dotti","last_name":"Duddell","email":"dduddellpt@bbb.org"}, -{"id":931,"first_name":"Kordula","last_name":"Hutchison","email":"khutchisonpu@vkontakte.ru"}, -{"id":932,"first_name":"Frederich","last_name":"Bircher","email":"fbircherpv@scribd.com"}, -{"id":933,"first_name":"Reinold","last_name":"Copeman","email":"rcopemanpw@1und1.de"}, -{"id":934,"first_name":"Isa","last_name":"De Cruze","email":"idecruzepx@slate.com"}, -{"id":935,"first_name":"Prue","last_name":"Cannings","email":"pcanningspy@cnet.com"}, -{"id":936,"first_name":"Deina","last_name":"Lapworth","email":"dlapworthpz@army.mil"}, -{"id":937,"first_name":"Ellen","last_name":"Battershall","email":"ebattershallq0@slideshare.net"}, -{"id":938,"first_name":"Christophe","last_name":"Blazdell","email":"cblazdellq1@google.fr"}, -{"id":939,"first_name":"Krispin","last_name":"Dancer","email":"kdancerq2@creativecommons.org"}, -{"id":940,"first_name":"Anastasie","last_name":"Lanfer","email":"alanferq3@dedecms.com"}, -{"id":941,"first_name":"Armand","last_name":"Jezzard","email":"ajezzardq4@g.co"}, -{"id":942,"first_name":"Emmalee","last_name":"Bedberry","email":"ebedberryq5@ebay.co.uk"}, -{"id":943,"first_name":"Adena","last_name":"Grigorushkin","email":"agrigorushkinq6@sohu.com"}, -{"id":944,"first_name":"Salaidh","last_name":"Bogeys","email":"sbogeysq7@google.com.au"}, -{"id":945,"first_name":"Venus","last_name":"Anney","email":"vanneyq8@indiegogo.com"}, -{"id":946,"first_name":"Nicki","last_name":"Wheatley","email":"nwheatleyq9@examiner.com"}, -{"id":947,"first_name":"Boyd","last_name":"Vigors","email":"bvigorsqa@shutterfly.com"}, -{"id":948,"first_name":"Glyn","last_name":"Sherlaw","email":"gsherlawqb@ask.com"}, -{"id":949,"first_name":"Gaultiero","last_name":"Knight","email":"gknightqc@who.int"}, -{"id":950,"first_name":"Marinna","last_name":"Kores","email":"mkoresqd@economist.com"}, -{"id":951,"first_name":"Janos","last_name":"Banton","email":"jbantonqe@feedburner.com"}, -{"id":952,"first_name":"Arvie","last_name":"Waterstone","email":"awaterstoneqf@prlog.org"}, -{"id":953,"first_name":"Moreen","last_name":"Llewellin","email":"mllewellinqg@sphinn.com"}, -{"id":954,"first_name":"Federica","last_name":"Le land","email":"flelandqh@devhub.com"}, -{"id":955,"first_name":"Tricia","last_name":"Dwelley","email":"tdwelleyqi@princeton.edu"}, -{"id":956,"first_name":"Kincaid","last_name":"Jentin","email":"kjentinqj@tripadvisor.com"}, -{"id":957,"first_name":"Wallie","last_name":"MacNeil","email":"wmacneilqk@fastcompany.com"}, -{"id":958,"first_name":"Cal","last_name":"Norvill","email":"cnorvillql@free.fr"}, -{"id":959,"first_name":"Ron","last_name":"Noton","email":"rnotonqm@cnet.com"}, -{"id":960,"first_name":"Abagael","last_name":"Ginty","email":"agintyqn@digg.com"}, -{"id":961,"first_name":"Joachim","last_name":"Hakking","email":"jhakkingqo@utexas.edu"}, -{"id":962,"first_name":"Jerry","last_name":"Gorries","email":"jgorriesqp@yahoo.com"}, -{"id":963,"first_name":"Sloan","last_name":"Ivanikov","email":"sivanikovqq@sohu.com"}, -{"id":964,"first_name":"Humfried","last_name":"Verbrugge","email":"hverbruggeqr@blogs.com"}, -{"id":965,"first_name":"Freedman","last_name":"Frohock","email":"ffrohockqs@tripod.com"}, -{"id":966,"first_name":"Jenni","last_name":"Motion","email":"jmotionqt@opera.com"}, -{"id":967,"first_name":"Shane","last_name":"Oxenden","email":"soxendenqu@comcast.net"}, -{"id":968,"first_name":"Kelly","last_name":"Andreopolos","email":"kandreopolosqv@ihg.com"}, -{"id":969,"first_name":"Philipa","last_name":"Cartmale","email":"pcartmaleqw@sourceforge.net"}, -{"id":970,"first_name":"Bekki","last_name":"Swaysland","email":"bswayslandqx@google.ru"}, -{"id":971,"first_name":"Gennifer","last_name":"Cretney","email":"gcretneyqy@wired.com"}, -{"id":972,"first_name":"Marja","last_name":"Feaveryear","email":"mfeaveryearqz@amazon.de"}, -{"id":973,"first_name":"Pier","last_name":"Adrian","email":"padrianr0@pcworld.com"}, -{"id":974,"first_name":"Darius","last_name":"Gertz","email":"dgertzr1@alibaba.com"}, -{"id":975,"first_name":"Art","last_name":"Sposito","email":"aspositor2@example.com"}, -{"id":976,"first_name":"Trisha","last_name":"Dahlbom","email":"tdahlbomr3@addtoany.com"}, -{"id":977,"first_name":"Nance","last_name":"Malcolm","email":"nmalcolmr4@fastcompany.com"}, -{"id":978,"first_name":"Betty","last_name":"Menilove","email":"bmenilover5@hubpages.com"}, -{"id":979,"first_name":"Xavier","last_name":"Brereton","email":"xbreretonr6@auda.org.au"}, -{"id":980,"first_name":"Any","last_name":"Pach","email":"apachr7@vimeo.com"}, -{"id":981,"first_name":"Eddy","last_name":"Shooter","email":"eshooterr8@creativecommons.org"}, -{"id":982,"first_name":"Belicia","last_name":"Nolan","email":"bnolanr9@hud.gov"}, -{"id":983,"first_name":"Olag","last_name":"Baniard","email":"obaniardra@addthis.com"}, -{"id":984,"first_name":"Jake","last_name":"Gilburt","email":"jgilburtrb@purevolume.com"}, -{"id":985,"first_name":"Gregoor","last_name":"Garham","email":"ggarhamrc@cbslocal.com"}, -{"id":986,"first_name":"Chrissie","last_name":"Buxam","email":"cbuxamrd@ucoz.ru"}, -{"id":987,"first_name":"Vere","last_name":"Maylin","email":"vmaylinre@google.fr"}, -{"id":988,"first_name":"Jefferson","last_name":"O'Cannavan","email":"jocannavanrf@studiopress.com"}, -{"id":989,"first_name":"Andrej","last_name":"Gopsill","email":"agopsillrg@google.cn"}, -{"id":990,"first_name":"Gwenni","last_name":"Summerlad","email":"gsummerladrh@google.es"}, -{"id":991,"first_name":"Tressa","last_name":"Smeuin","email":"tsmeuinri@arizona.edu"}, -{"id":992,"first_name":"Winny","last_name":"Taw","email":"wtawrj@vinaora.com"}, -{"id":993,"first_name":"Morgen","last_name":"Bottomore","email":"mbottomorerk@php.net"}, -{"id":994,"first_name":"Umberto","last_name":"Lamputt","email":"ulamputtrl@blogtalkradio.com"}, -{"id":995,"first_name":"Donnie","last_name":"Hawking","email":"dhawkingrm@vk.com"}, -{"id":996,"first_name":"Lorette","last_name":"Daine","email":"ldainern@indiatimes.com"}, -{"id":997,"first_name":"Bethena","last_name":"Paddle","email":"bpaddlero@drupal.org"}, -{"id":998,"first_name":"Itch","last_name":"Elwel","email":"ielwelrp@sciencedaily.com"}, -{"id":999,"first_name":"Lizabeth","last_name":"Gatteridge","email":"lgatteridgerq@sakura.ne.jp"}, -{"id":1000,"first_name":"Nananne","last_name":"Aubri","email":"naubrirr@cnn.com"}] +[ + { + "id": 2, + "first_name": "Pippy", + "last_name": "Yule", + "email": "pyule1@mit.edu" + }, + { + "id": 3, + "first_name": "Rodrick", + "last_name": "Swancock", + "email": "rswancock2@google.co.uk" + }, + { + "id": 8, + "first_name": "Eugenie", + "last_name": "Lanyon", + "email": "elanyon7@nba.com" + }, + { + "id": 9, + "first_name": "Derry", + "last_name": "Bovingdon", + "email": "dbovingdon8@furl.net" + }, + { + "id": 11, + "first_name": "Burnard", + "last_name": "Kuhndel", + "email": "bkuhndela@cmu.edu" + }, + { + "id": 12, + "first_name": "Greer", + "last_name": "Strachan", + "email": "gstrachanb@virginia.edu" + }, + { + "id": 13, + "first_name": "Dorine", + "last_name": "Lougheed", + "email": "dlougheedc@redcross.org" + }, + { + "id": 14, + "first_name": "Jayne", + "last_name": "Geggie", + "email": "jgeggied@youtu.be" + }, + { + "id": 15, + "first_name": "Chelsey", + "last_name": "Botham", + "email": "cbothame@cargocollective.com" + }, + { + "id": 16, + "first_name": "Emmy", + "last_name": "Whittier", + "email": "ewhittierf@delicious.com" + }, + { + "id": 18, + "first_name": "Julio", + "last_name": "Vannini", + "email": "jvanninih@sourceforge.net" + }, + { + "id": 19, + "first_name": "Zorah", + "last_name": "Turbefield", + "email": "zturbefieldi@epa.gov" + }, + { + "id": 20, + "first_name": "Les", + "last_name": "Strutley", + "email": "lstrutleyj@networkadvertising.org" + }, + { + "id": 21, + "first_name": "Dedie", + "last_name": "Roubeix", + "email": "droubeixk@linkedin.com" + }, + { + "id": 22, + "first_name": "Milzie", + "last_name": "Doyley", + "email": "mdoyleyl@youtu.be" + }, + { + "id": 23, + "first_name": "Cleopatra", + "last_name": "Croysdale", + "email": "ccroysdalem@cdc.gov" + }, + { + "id": 24, + "first_name": "Nellie", + "last_name": "Records", + "email": "nrecordsn@rediff.com" + }, + { + "id": 25, + "first_name": "Michelina", + "last_name": "Jentzsch", + "email": "mjentzscho@theguardian.com" + }, + { + "id": 26, + "first_name": "Theodosia", + "last_name": "De Vries", + "email": "tdevriesp@unc.edu" + }, + { + "id": 27, + "first_name": "Maryanna", + "last_name": "Jirieck", + "email": "mjirieckq@meetup.com" + }, + { + "id": 28, + "first_name": "Dreddy", + "last_name": "Labden", + "email": "dlabdenr@feedburner.com" + }, + { + "id": 29, + "first_name": "Glynda", + "last_name": "Geibel", + "email": "ggeibels@yelp.com" + }, + { + "id": 30, + "first_name": "Yulma", + "last_name": "Giroldo", + "email": "ygiroldot@google.co.jp" + }, + { + "id": 31, + "first_name": "Michele", + "last_name": "Jennions", + "email": "mjennionsu@meetup.com" + }, + { + "id": 32, + "first_name": "Hyatt", + "last_name": "Picford", + "email": "hpicfordv@cornell.edu" + }, + { + "id": 33, + "first_name": "Jehanna", + "last_name": "Frunks", + "email": "jfrunksw@slashdot.org" + }, + { + "id": 34, + "first_name": "Gustavo", + "last_name": "Soda", + "email": "gsodax@scientificamerican.com" + }, + { + "id": 35, + "first_name": "Rianon", + "last_name": "Lamey", + "email": "rlameyy@histats.com" + }, + { + "id": 36, + "first_name": "Winston", + "last_name": "Pitcher", + "email": "wpitcherz@sphinn.com" + }, + { + "id": 37, + "first_name": "Schuyler", + "last_name": "Rewcassell", + "email": "srewcassell10@phoca.cz" + }, + { + "id": 38, + "first_name": "Garald", + "last_name": "Thoumas", + "email": "gthoumas11@upenn.edu" + }, + { + "id": 40, + "first_name": "Trudy", + "last_name": "Scarratt", + "email": "tscarratt13@baidu.com" + }, + { + "id": 43, + "first_name": "Ariel", + "last_name": "Brunroth", + "email": "abrunroth16@tinyurl.com" + }, + { + "id": 44, + "first_name": "Fonz", + "last_name": "Duigan", + "email": "fduigan17@issuu.com" + }, + { + "id": 45, + "first_name": "Adeline", + "last_name": "Cashell", + "email": "acashell18@house.gov" + }, + { + "id": 46, + "first_name": "Kurt", + "last_name": "Brittle", + "email": "kbrittle19@mysql.com" + }, + { + "id": 47, + "first_name": "Ginni", + "last_name": "Richardes", + "email": "grichardes1a@phpbb.com" + }, + { + "id": 48, + "first_name": "Christina", + "last_name": "Wheway", + "email": "cwheway1b@wisc.edu" + }, + { + "id": 49, + "first_name": "Erasmus", + "last_name": "Vickors", + "email": "evickors1c@dell.com" + }, + { + "id": 50, + "first_name": "Lillian", + "last_name": "Valentin", + "email": "lvalentin1d@usa.gov" + }, + { + "id": 51, + "first_name": "Rozalie", + "last_name": "Abel", + "email": "rabel1e@walmart.com" + }, + { + "id": 53, + "first_name": "Mendel", + "last_name": "Meaddowcroft", + "email": "mmeaddowcroft1g@csmonitor.com" + }, + { + "id": 55, + "first_name": "Danica", + "last_name": "Kenrack", + "email": "dkenrack1i@nhs.uk" + }, + { + "id": 56, + "first_name": "Reuben", + "last_name": "De Benedictis", + "email": "rdebenedictis1j@cnbc.com" + }, + { + "id": 57, + "first_name": "Larine", + "last_name": "Woffenden", + "email": "lwoffenden1k@goo.ne.jp" + }, + { + "id": 59, + "first_name": "Frank", + "last_name": "Cominello", + "email": "fcominello1m@phpbb.com" + }, + { + "id": 61, + "first_name": "Veda", + "last_name": "Pryn", + "email": "vpryn1o@squidoo.com" + }, + { + "id": 62, + "first_name": "Heddie", + "last_name": "Tinston", + "email": "htinston1p@is.gd" + }, + { + "id": 63, + "first_name": "Lorelle", + "last_name": "Radbone", + "email": "lradbone1q@usgs.gov" + }, + { + "id": 64, + "first_name": "Gustavo", + "last_name": "Jans", + "email": "gjans1r@microsoft.com" + }, + { + "id": 65, + "first_name": "Karita", + "last_name": "Beeching", + "email": "kbeeching1s@skype.com" + }, + { + "id": 66, + "first_name": "Damian", + "last_name": "Bellhanger", + "email": "dbellhanger1t@bbb.org" + }, + { + "id": 67, + "first_name": "Kinna", + "last_name": "Cotherill", + "email": "kcotherill1u@angelfire.com" + }, + { + "id": 68, + "first_name": "Janeva", + "last_name": "Varndall", + "email": "jvarndall1v@vk.com" + }, + { + "id": 70, + "first_name": "Bourke", + "last_name": "Cossum", + "email": "bcossum1x@chron.com" + }, + { + "id": 71, + "first_name": "Berk", + "last_name": "Tomasino", + "email": "btomasino1y@fotki.com" + }, + { + "id": 72, + "first_name": "Shepherd", + "last_name": "Lyness", + "email": "slyness1z@csmonitor.com" + }, + { + "id": 73, + "first_name": "Christoph", + "last_name": "Warrener", + "email": "cwarrener20@gmpg.org" + }, + { + "id": 74, + "first_name": "Artus", + "last_name": "Bantock", + "email": "abantock21@who.int" + }, + { + "id": 75, + "first_name": "Bryana", + "last_name": "Mixer", + "email": "bmixer22@nih.gov" + }, + { + "id": 76, + "first_name": "Blithe", + "last_name": "Brigstock", + "email": "bbrigstock23@goodreads.com" + }, + { + "id": 77, + "first_name": "Krispin", + "last_name": "Gothrup", + "email": "kgothrup24@tuttocitta.it" + }, + { + "id": 78, + "first_name": "Helen-elizabeth", + "last_name": "Hardinge", + "email": "hhardinge25@indiatimes.com" + }, + { + "id": 79, + "first_name": "Zachariah", + "last_name": "Burberye", + "email": "zburberye26@va.gov" + }, + { + "id": 81, + "first_name": "Mozes", + "last_name": "Mityushin", + "email": "mmityushin28@vk.com" + }, + { + "id": 82, + "first_name": "Hyacinthie", + "last_name": "Stirrip", + "email": "hstirrip29@mozilla.com" + }, + { + "id": 83, + "first_name": "Hestia", + "last_name": "Full", + "email": "hfull2a@cornell.edu" + }, + { + "id": 84, + "first_name": "Betty", + "last_name": "Doogan", + "email": "bdoogan2b@paginegialle.it" + }, + { + "id": 86, + "first_name": "Ulrick", + "last_name": "Nowakowska", + "email": "unowakowska2d@newyorker.com" + }, + { + "id": 87, + "first_name": "Susanne", + "last_name": "Bannell", + "email": "sbannell2e@house.gov" + }, + { + "id": 88, + "first_name": "Carlotta", + "last_name": "de Bullion", + "email": "cdebullion2f@wikispaces.com" + }, + { + "id": 89, + "first_name": "Conny", + "last_name": "Rodgerson", + "email": "crodgerson2g@nsw.gov.au" + }, + { + "id": 90, + "first_name": "Anthony", + "last_name": "Stovine", + "email": "astovine2h@trellian.com" + }, + { + "id": 91, + "first_name": "Trula", + "last_name": "Mangenot", + "email": "tmangenot2i@example.com" + }, + { + "id": 92, + "first_name": "Urbain", + "last_name": "Ogglebie", + "email": "uogglebie2j@wix.com" + }, + { + "id": 93, + "first_name": "Robena", + "last_name": "Yve", + "email": "ryve2k@sciencedaily.com" + }, + { + "id": 94, + "first_name": "Axel", + "last_name": "McTrustam", + "email": "amctrustam2l@ucoz.ru" + }, + { + "id": 95, + "first_name": "Link", + "last_name": "Klagges", + "email": "lklagges2m@foxnews.com" + }, + { + "id": 96, + "first_name": "Yoko", + "last_name": "Percifer", + "email": "ypercifer2n@indiegogo.com" + }, + { + "id": 97, + "first_name": "Rheba", + "last_name": "Heaford", + "email": "rheaford2o@ed.gov" + }, + { + "id": 98, + "first_name": "Dorolisa", + "last_name": "Seabert", + "email": "dseabert2p@pen.io" + }, + { + "id": 99, + "first_name": "Asher", + "last_name": "Ffrench", + "email": "affrench2q@miitbeian.gov.cn" + }, + { + "id": 100, + "first_name": "Inga", + "last_name": "Skeen", + "email": "iskeen2r@moonfruit.com" + }, + { + "id": 101, + "first_name": "Dov", + "last_name": "Nevinson", + "email": "dnevinson2s@dedecms.com" + }, + { + "id": 103, + "first_name": "Prudence", + "last_name": "Bysshe", + "email": "pbysshe2u@auda.org.au" + }, + { + "id": 104, + "first_name": "Desdemona", + "last_name": "Belverstone", + "email": "dbelverstone2v@ihg.com" + }, + { + "id": 105, + "first_name": "Adiana", + "last_name": "Arnott", + "email": "aarnott2w@icio.us" + }, + { + "id": 106, + "first_name": "Christoper", + "last_name": "Sutter", + "email": "csutter2x@jimdo.com" + }, + { + "id": 107, + "first_name": "Guinevere", + "last_name": "Morton", + "email": "gmorton2y@drupal.org" + }, + { + "id": 109, + "first_name": "Reynold", + "last_name": "Frigout", + "email": "rfrigout30@digg.com" + }, + { + "id": 110, + "first_name": "Beverlie", + "last_name": "Macek", + "email": "bmacek31@yahoo.com" + }, + { + "id": 112, + "first_name": "Romola", + "last_name": "Penna", + "email": "rpenna33@devhub.com" + }, + { + "id": 114, + "first_name": "Allen", + "last_name": "Lawey", + "email": "alawey35@marketwatch.com" + }, + { + "id": 115, + "first_name": "Yard", + "last_name": "Solon", + "email": "ysolon36@fotki.com" + }, + { + "id": 116, + "first_name": "Hubert", + "last_name": "Life", + "email": "hlife37@w3.org" + }, + { + "id": 117, + "first_name": "Patin", + "last_name": "Prestner", + "email": "pprestner38@flavors.me" + }, + { + "id": 118, + "first_name": "Hedda", + "last_name": "MacKniely", + "email": "hmackniely39@blog.com" + }, + { + "id": 119, + "first_name": "Rube", + "last_name": "Ceyssen", + "email": "rceyssen3a@businesswire.com" + }, + { + "id": 120, + "first_name": "Clementine", + "last_name": "ffrench Beytagh", + "email": "cffrenchbeytagh3b@surveymonkey.com" + }, + { + "id": 122, + "first_name": "Standford", + "last_name": "McGurn", + "email": "smcgurn3d@1688.com" + }, + { + "id": 123, + "first_name": "Nelie", + "last_name": "Grebert", + "email": "ngrebert3e@bluehost.com" + }, + { + "id": 124, + "first_name": "Milly", + "last_name": "Danielsohn", + "email": "mdanielsohn3f@topsy.com" + }, + { + "id": 125, + "first_name": "Debor", + "last_name": "Pighills", + "email": "dpighills3g@google.es" + }, + { + "id": 126, + "first_name": "Gal", + "last_name": "Allebone", + "email": "gallebone3h@amazonaws.com" + }, + { + "id": 127, + "first_name": "Kerwinn", + "last_name": "Gheorghescu", + "email": "kgheorghescu3i@aol.com" + }, + { + "id": 128, + "first_name": "Essa", + "last_name": "Fifield", + "email": "efifield3j@bbb.org" + }, + { + "id": 129, + "first_name": "Philippine", + "last_name": "Daens", + "email": "pdaens3k@boston.com" + }, + { + "id": 130, + "first_name": "Timmy", + "last_name": "Colbeck", + "email": "tcolbeck3l@answers.com" + }, + { + "id": 131, + "first_name": "Raffarty", + "last_name": "Liverock", + "email": "rliverock3m@bandcamp.com" + }, + { + "id": 132, + "first_name": "Valeria", + "last_name": "Marqyes", + "email": "vmarqyes3n@1688.com" + }, + { + "id": 133, + "first_name": "Neille", + "last_name": "Seiler", + "email": "nseiler3o@skyrock.com" + }, + { + "id": 134, + "first_name": "Anet", + "last_name": "Kelle", + "email": "akelle3p@opensource.org" + }, + { + "id": 135, + "first_name": "Barnebas", + "last_name": "Alleway", + "email": "balleway3q@goodreads.com" + }, + { + "id": 136, + "first_name": "Valeria", + "last_name": "Chrippes", + "email": "vchrippes3r@wunderground.com" + }, + { + "id": 137, + "first_name": "Duffy", + "last_name": "Hainge", + "email": "dhainge3s@posterous.com" + }, + { + "id": 138, + "first_name": "Gweneth", + "last_name": "Silberschatz", + "email": "gsilberschatz3t@bing.com" + }, + { + "id": 139, + "first_name": "Fredelia", + "last_name": "Stodd", + "email": "fstodd3u@mit.edu" + }, + { + "id": 140, + "first_name": "Buckie", + "last_name": "MacGinley", + "email": "bmacginley3v@irs.gov" + }, + { + "id": 141, + "first_name": "Ardyth", + "last_name": "Ewbanck", + "email": "aewbanck3w@cisco.com" + }, + { + "id": 142, + "first_name": "Darice", + "last_name": "Martinolli", + "email": "dmartinolli3x@seesaa.net" + }, + { + "id": 143, + "first_name": "Bucky", + "last_name": "Chivrall", + "email": "bchivrall3y@blogger.com" + }, + { + "id": 144, + "first_name": "Freida", + "last_name": "Labrom", + "email": "flabrom3z@github.io" + }, + { + "id": 145, + "first_name": "Huntlee", + "last_name": "Comelini", + "email": "hcomelini40@army.mil" + }, + { + "id": 146, + "first_name": "Lester", + "last_name": "Farrah", + "email": "lfarrah41@princeton.edu" + }, + { + "id": 147, + "first_name": "Chickie", + "last_name": "Lyddon", + "email": "clyddon42@smh.com.au" + }, + { + "id": 148, + "first_name": "Lenette", + "last_name": "McGaffey", + "email": "lmcgaffey43@auda.org.au" + }, + { + "id": 149, + "first_name": "Cleavland", + "last_name": "Balassa", + "email": "cbalassa44@squidoo.com" + }, + { + "id": 150, + "first_name": "Towney", + "last_name": "Wessell", + "email": "twessell45@bloglovin.com" + }, + { + "id": 151, + "first_name": "Marlee", + "last_name": "Sahlstrom", + "email": "msahlstrom46@51.la" + }, + { + "id": 152, + "first_name": "Tadd", + "last_name": "Showalter", + "email": "tshowalter47@irs.gov" + }, + { + "id": 153, + "first_name": "Isabeau", + "last_name": "Smalcombe", + "email": "ismalcombe48@goo.gl" + }, + { + "id": 154, + "first_name": "Aprilette", + "last_name": "Pyett", + "email": "apyett49@taobao.com" + }, + { + "id": 155, + "first_name": "Bendite", + "last_name": "Odney", + "email": "bodney4a@123-reg.co.uk" + }, + { + "id": 156, + "first_name": "Temp", + "last_name": "Scherer", + "email": "tscherer4b@phoca.cz" + }, + { + "id": 157, + "first_name": "Barris", + "last_name": "Ferrarotti", + "email": "bferrarotti4c@bloomberg.com" + }, + { + "id": 158, + "first_name": "Floris", + "last_name": "Loudiane", + "email": "floudiane4d@bbb.org" + }, + { + "id": 159, + "first_name": "Ives", + "last_name": "MacArdle", + "email": "imacardle4e@phoca.cz" + }, + { + "id": 160, + "first_name": "Briano", + "last_name": "Antonsen", + "email": "bantonsen4f@jimdo.com" + }, + { + "id": 161, + "first_name": "Rea", + "last_name": "McCumskay", + "email": "rmccumskay4g@netvibes.com" + }, + { + "id": 162, + "first_name": "Madlen", + "last_name": "Karppi", + "email": "mkarppi4h@prweb.com" + }, + { + "id": 163, + "first_name": "Hillie", + "last_name": "Ollerenshaw", + "email": "hollerenshaw4i@mapquest.com" + }, + { + "id": 164, + "first_name": "Laure", + "last_name": "Giacomazzo", + "email": "lgiacomazzo4j@canalblog.com" + }, + { + "id": 165, + "first_name": "Shanie", + "last_name": "Worsam", + "email": "sworsam4k@google.ca" + }, + { + "id": 166, + "first_name": "Bibbie", + "last_name": "Trosdall", + "email": "btrosdall4l@list-manage.com" + }, + { + "id": 167, + "first_name": "Marcelia", + "last_name": "Symes", + "email": "msymes4m@facebook.com" + }, + { + "id": 168, + "first_name": "Jolene", + "last_name": "Roja", + "email": "jroja4n@mail.ru" + }, + { + "id": 169, + "first_name": "Colas", + "last_name": "Leal", + "email": "cleal4o@ustream.tv" + }, + { + "id": 170, + "first_name": "Oby", + "last_name": "Faichnie", + "email": "ofaichnie4p@goo.gl" + }, + { + "id": 171, + "first_name": "Henry", + "last_name": "Willows", + "email": "hwillows4q@alibaba.com" + }, + { + "id": 172, + "first_name": "Matilda", + "last_name": "Korf", + "email": "mkorf4r@bbb.org" + }, + { + "id": 173, + "first_name": "Hiram", + "last_name": "Balls", + "email": "hballs4s@nba.com" + }, + { + "id": 174, + "first_name": "Terri-jo", + "last_name": "Atrill", + "email": "tatrill4t@so-net.ne.jp" + }, + { + "id": 175, + "first_name": "Tana", + "last_name": "Ciccarello", + "email": "tciccarello4u@cisco.com" + }, + { + "id": 176, + "first_name": "Abbie", + "last_name": "Rohfsen", + "email": "arohfsen4v@japanpost.jp" + }, + { + "id": 177, + "first_name": "Dominga", + "last_name": "Johanssen", + "email": "djohanssen4w@phoca.cz" + }, + { + "id": 178, + "first_name": "Osmond", + "last_name": "Ryland", + "email": "oryland4x@51.la" + }, + { + "id": 179, + "first_name": "Waverly", + "last_name": "Butting", + "email": "wbutting4y@4shared.com" + }, + { + "id": 180, + "first_name": "Colin", + "last_name": "Antosch", + "email": "cantosch4z@unblog.fr" + }, + { + "id": 181, + "first_name": "Filide", + "last_name": "Birks", + "email": "fbirks50@domainmarket.com" + }, + { + "id": 182, + "first_name": "Avery", + "last_name": "Kruschov", + "email": "akruschov51@answers.com" + }, + { + "id": 183, + "first_name": "Doralynne", + "last_name": "Mosten", + "email": "dmosten52@discovery.com" + }, + { + "id": 184, + "first_name": "Dicky", + "last_name": "Muggeridge", + "email": "dmuggeridge53@163.com" + }, + { + "id": 185, + "first_name": "Tucky", + "last_name": "Tennick", + "email": "ttennick54@gnu.org" + }, + { + "id": 186, + "first_name": "Jareb", + "last_name": "Hews", + "email": "jhews55@twitpic.com" + }, + { + "id": 187, + "first_name": "Guthrie", + "last_name": "Castro", + "email": "gcastro56@berkeley.edu" + }, + { + "id": 188, + "first_name": "Rayna", + "last_name": "Howett", + "email": "rhowett57@theguardian.com" + }, + { + "id": 189, + "first_name": "Linnet", + "last_name": "Painter", + "email": "lpainter58@apache.org" + }, + { + "id": 190, + "first_name": "Gisele", + "last_name": "Varcoe", + "email": "gvarcoe59@timesonline.co.uk" + }, + { + "id": 191, + "first_name": "Isabelita", + "last_name": "Klimpke", + "email": "iklimpke5a@technorati.com" + }, + { + "id": 192, + "first_name": "Ofilia", + "last_name": "Kondrachenko", + "email": "okondrachenko5b@github.com" + }, + { + "id": 193, + "first_name": "Margaretta", + "last_name": "Costello", + "email": "mcostello5c@nifty.com" + }, + { + "id": 194, + "first_name": "Elli", + "last_name": "Sudell", + "email": "esudell5d@stumbleupon.com" + }, + { + "id": 195, + "first_name": "Carie", + "last_name": "Preto", + "email": "cpreto5e@prnewswire.com" + }, + { + "id": 196, + "first_name": "Kinny", + "last_name": "Gredden", + "email": "kgredden5f@alexa.com" + }, + { + "id": 197, + "first_name": "Grethel", + "last_name": "Warwicker", + "email": "gwarwicker5g@fda.gov" + }, + { + "id": 198, + "first_name": "Gerti", + "last_name": "Kippling", + "email": "gkippling5h@mayoclinic.com" + }, + { + "id": 199, + "first_name": "Nanice", + "last_name": "Sirrell", + "email": "nsirrell5i@paginegialle.it" + }, + { + "id": 200, + "first_name": "Coraline", + "last_name": "Readie", + "email": "creadie5j@joomla.org" + }, + { + "id": 202, + "first_name": "Heath", + "last_name": "McNeilley", + "email": "hmcneilley5l@soundcloud.com" + }, + { + "id": 203, + "first_name": "Torey", + "last_name": "Lortz", + "email": "tlortz5m@printfriendly.com" + }, + { + "id": 204, + "first_name": "Melodee", + "last_name": "McWhan", + "email": "mmcwhan5n@tinyurl.com" + }, + { + "id": 205, + "first_name": "Selie", + "last_name": "Llywarch", + "email": "sllywarch5o@usda.gov" + }, + { + "id": 206, + "first_name": "Britt", + "last_name": "Shore", + "email": "bshore5p@unesco.org" + }, + { + "id": 207, + "first_name": "Floyd", + "last_name": "Hairyes", + "email": "fhairyes5q@sphinn.com" + }, + { + "id": 208, + "first_name": "Maris", + "last_name": "Fretter", + "email": "mfretter5r@umich.edu" + }, + { + "id": 209, + "first_name": "Andrey", + "last_name": "MacCaughey", + "email": "amaccaughey5s@blinklist.com" + }, + { + "id": 210, + "first_name": "Reena", + "last_name": "Kiledal", + "email": "rkiledal5t@blogs.com" + }, + { + "id": 211, + "first_name": "Adey", + "last_name": "Molohan", + "email": "amolohan5u@yale.edu" + }, + { + "id": 212, + "first_name": "Eddie", + "last_name": "Simner", + "email": "esimner5v@purevolume.com" + }, + { + "id": 213, + "first_name": "Eldon", + "last_name": "Dregan", + "email": "edregan5w@nytimes.com" + }, + { + "id": 214, + "first_name": "Terencio", + "last_name": "Cordell", + "email": "tcordell5x@answers.com" + }, + { + "id": 215, + "first_name": "Barbra", + "last_name": "Matzkaitis", + "email": "bmatzkaitis5y@nyu.edu" + }, + { + "id": 216, + "first_name": "Agathe", + "last_name": "Filler", + "email": "afiller5z@etsy.com" + }, + { + "id": 217, + "first_name": "Jenine", + "last_name": "Adds", + "email": "jadds60@squarespace.com" + }, + { + "id": 218, + "first_name": "Kathy", + "last_name": "Lampbrecht", + "email": "klampbrecht61@t-online.de" + }, + { + "id": 219, + "first_name": "Demetri", + "last_name": "Godfroy", + "email": "dgodfroy62@ibm.com" + }, + { + "id": 220, + "first_name": "Katuscha", + "last_name": "Renon", + "email": "krenon63@friendfeed.com" + }, + { + "id": 221, + "first_name": "Claudian", + "last_name": "Devenport", + "email": "cdevenport64@godaddy.com" + }, + { + "id": 222, + "first_name": "Jenica", + "last_name": "Kornilov", + "email": "jkornilov65@nifty.com" + }, + { + "id": 223, + "first_name": "Grissel", + "last_name": "McMeeking", + "email": "gmcmeeking66@boston.com" + }, + { + "id": 224, + "first_name": "Andy", + "last_name": "Rushforth", + "email": "arushforth67@pcworld.com" + }, + { + "id": 225, + "first_name": "Rana", + "last_name": "Ferrino", + "email": "rferrino68@deviantart.com" + }, + { + "id": 226, + "first_name": "Celie", + "last_name": "Schenkel", + "email": "cschenkel69@cargocollective.com" + }, + { + "id": 227, + "first_name": "Doe", + "last_name": "Chadwyck", + "email": "dchadwyck6a@cargocollective.com" + }, + { + "id": 228, + "first_name": "Amandy", + "last_name": "Marmon", + "email": "amarmon6b@de.vu" + }, + { + "id": 229, + "first_name": "Aliza", + "last_name": "Haggeth", + "email": "ahaggeth6c@ibm.com" + }, + { + "id": 230, + "first_name": "Velma", + "last_name": "Olner", + "email": "volner6d@house.gov" + }, + { + "id": 231, + "first_name": "Bent", + "last_name": "Ayllett", + "email": "bayllett6e@google.com.hk" + }, + { + "id": 232, + "first_name": "Parrnell", + "last_name": "Walker", + "email": "pwalker6f@irs.gov" + }, + { + "id": 233, + "first_name": "Mickie", + "last_name": "Nossent", + "email": "mnossent6g@elegantthemes.com" + }, + { + "id": 234, + "first_name": "Sawyer", + "last_name": "Tranter", + "email": "stranter6h@usa.gov" + }, + { + "id": 235, + "first_name": "Bernetta", + "last_name": "Twine", + "email": "btwine6i@mapy.cz" + }, + { + "id": 236, + "first_name": "Richard", + "last_name": "Kerss", + "email": "rkerss6j@harvard.edu" + }, + { + "id": 237, + "first_name": "Margo", + "last_name": "Danilov", + "email": "mdanilov6k@clickbank.net" + }, + { + "id": 238, + "first_name": "Willem", + "last_name": "Sheen", + "email": "wsheen6l@feedburner.com" + }, + { + "id": 239, + "first_name": "Dukey", + "last_name": "Regnard", + "email": "dregnard6m@opensource.org" + }, + { + "id": 240, + "first_name": "Wynnie", + "last_name": "Manilove", + "email": "wmanilove6n@themeforest.net" + }, + { + "id": 241, + "first_name": "Hartley", + "last_name": "Tungay", + "email": "htungay6o@rambler.ru" + }, + { + "id": 242, + "first_name": "Brena", + "last_name": "Yaneev", + "email": "byaneev6p@java.com" + }, + { + "id": 243, + "first_name": "Fred", + "last_name": "Leaf", + "email": "fleaf6q@usatoday.com" + }, + { + "id": 244, + "first_name": "Morna", + "last_name": "Beardsworth", + "email": "mbeardsworth6r@kickstarter.com" + }, + { + "id": 245, + "first_name": "Griffin", + "last_name": "Kell", + "email": "gkell6s@github.io" + }, + { + "id": 246, + "first_name": "Ozzie", + "last_name": "Picford", + "email": "opicford6t@instagram.com" + }, + { + "id": 247, + "first_name": "Carson", + "last_name": "Andrivot", + "email": "candrivot6u@1und1.de" + }, + { + "id": 248, + "first_name": "Caressa", + "last_name": "Kupis", + "email": "ckupis6v@sakura.ne.jp" + }, + { + "id": 249, + "first_name": "Philly", + "last_name": "Knowlys", + "email": "pknowlys6w@army.mil" + }, + { + "id": 250, + "first_name": "Nady", + "last_name": "Rolling", + "email": "nrolling6x@lulu.com" + }, + { + "id": 251, + "first_name": "Albertina", + "last_name": "Spurdle", + "email": "aspurdle6y@pinterest.com" + }, + { + "id": 252, + "first_name": "Brittne", + "last_name": "Tamlett", + "email": "btamlett6z@princeton.edu" + }, + { + "id": 253, + "first_name": "Biddy", + "last_name": "Station", + "email": "bstation70@altervista.org" + }, + { + "id": 254, + "first_name": "Estelle", + "last_name": "Swaden", + "email": "eswaden71@nih.gov" + }, + { + "id": 255, + "first_name": "Dael", + "last_name": "Noyce", + "email": "dnoyce72@europa.eu" + }, + { + "id": 256, + "first_name": "Verne", + "last_name": "Tomasi", + "email": "vtomasi73@pinterest.com" + }, + { + "id": 257, + "first_name": "Toinette", + "last_name": "Adame", + "email": "tadame74@csmonitor.com" + }, + { + "id": 258, + "first_name": "Teri", + "last_name": "Karolewski", + "email": "tkarolewski75@exblog.jp" + }, + { + "id": 259, + "first_name": "Theo", + "last_name": "Weildish", + "email": "tweildish76@hexun.com" + }, + { + "id": 260, + "first_name": "Eloise", + "last_name": "McLafferty", + "email": "emclafferty77@prnewswire.com" + }, + { + "id": 261, + "first_name": "Pepita", + "last_name": "Fontel", + "email": "pfontel78@chronoengine.com" + }, + { + "id": 262, + "first_name": "Valentine", + "last_name": "Gerry", + "email": "vgerry79@slashdot.org" + }, + { + "id": 263, + "first_name": "Fanni", + "last_name": "Goodbairn", + "email": "fgoodbairn7a@elpais.com" + }, + { + "id": 264, + "first_name": "Esra", + "last_name": "Troppmann", + "email": "etroppmann7b@phoca.cz" + }, + { + "id": 265, + "first_name": "Carlynn", + "last_name": "Vorley", + "email": "cvorley7c@uiuc.edu" + }, + { + "id": 266, + "first_name": "Mellie", + "last_name": "McLeoid", + "email": "mmcleoid7d@mit.edu" + }, + { + "id": 267, + "first_name": "Gaile", + "last_name": "Bucke", + "email": "gbucke7e@alexa.com" + }, + { + "id": 268, + "first_name": "Sherye", + "last_name": "Sheahan", + "email": "ssheahan7f@parallels.com" + }, + { + "id": 269, + "first_name": "Norean", + "last_name": "Desport", + "email": "ndesport7g@taobao.com" + }, + { + "id": 270, + "first_name": "Ugo", + "last_name": "Kernell", + "email": "ukernell7h@csmonitor.com" + }, + { + "id": 271, + "first_name": "Base", + "last_name": "Cullinane", + "email": "bcullinane7i@indiegogo.com" + }, + { + "id": 272, + "first_name": "Alan", + "last_name": "Godmar", + "email": "agodmar7j@fc2.com" + }, + { + "id": 273, + "first_name": "Olly", + "last_name": "Wellstood", + "email": "owellstood7k@friendfeed.com" + }, + { + "id": 274, + "first_name": "Reuben", + "last_name": "Aveyard", + "email": "raveyard7l@lycos.com" + }, + { + "id": 275, + "first_name": "Richmond", + "last_name": "Broadberrie", + "email": "rbroadberrie7m@facebook.com" + }, + { + "id": 276, + "first_name": "Maressa", + "last_name": "Carlett", + "email": "mcarlett7n@bizjournals.com" + }, + { + "id": 277, + "first_name": "Marina", + "last_name": "Sprasen", + "email": "msprasen7o@dropbox.com" + }, + { + "id": 278, + "first_name": "Winnie", + "last_name": "Ostridge", + "email": "wostridge7p@ted.com" + }, + { + "id": 279, + "first_name": "Briney", + "last_name": "Rosenschein", + "email": "brosenschein7q@macromedia.com" + }, + { + "id": 280, + "first_name": "Heidie", + "last_name": "Yeldon", + "email": "hyeldon7r@parallels.com" + }, + { + "id": 281, + "first_name": "Addie", + "last_name": "Coldicott", + "email": "acoldicott7s@eventbrite.com" + }, + { + "id": 282, + "first_name": "Aubrette", + "last_name": "Doswell", + "email": "adoswell7t@imgur.com" + }, + { + "id": 283, + "first_name": "Rouvin", + "last_name": "Kassman", + "email": "rkassman7u@tinyurl.com" + }, + { + "id": 284, + "first_name": "Mitchell", + "last_name": "Pietzke", + "email": "mpietzke7v@wunderground.com" + }, + { + "id": 285, + "first_name": "Eadmund", + "last_name": "Rawstron", + "email": "erawstron7w@yelp.com" + }, + { + "id": 286, + "first_name": "Corri", + "last_name": "Matyasik", + "email": "cmatyasik7x@weibo.com" + }, + { + "id": 287, + "first_name": "Chuck", + "last_name": "Blandamere", + "email": "cblandamere7y@google.cn" + }, + { + "id": 288, + "first_name": "Nari", + "last_name": "Edmondson", + "email": "nedmondson7z@cnbc.com" + }, + { + "id": 289, + "first_name": "Valentine", + "last_name": "Sivyour", + "email": "vsivyour80@reverbnation.com" + }, + { + "id": 290, + "first_name": "Darryl", + "last_name": "Hawket", + "email": "dhawket81@pcworld.com" + }, + { + "id": 291, + "first_name": "Teddie", + "last_name": "Prosek", + "email": "tprosek82@odnoklassniki.ru" + }, + { + "id": 292, + "first_name": "Chloris", + "last_name": "Linder", + "email": "clinder83@instagram.com" + }, + { + "id": 293, + "first_name": "Lonnie", + "last_name": "Glede", + "email": "lglede84@taobao.com" + }, + { + "id": 294, + "first_name": "Denise", + "last_name": "Deakin", + "email": "ddeakin85@si.edu" + }, + { + "id": 295, + "first_name": "Ruprecht", + "last_name": "Sandcroft", + "email": "rsandcroft86@abc.net.au" + }, + { + "id": 296, + "first_name": "Zorah", + "last_name": "Patridge", + "email": "zpatridge87@freewebs.com" + }, + { + "id": 297, + "first_name": "Abigail", + "last_name": "Chatain", + "email": "achatain88@google.cn" + }, + { + "id": 298, + "first_name": "Neala", + "last_name": "Osichev", + "email": "nosichev89@hostgator.com" + }, + { + "id": 299, + "first_name": "Debora", + "last_name": "Crocetto", + "email": "dcrocetto8a@1und1.de" + }, + { + "id": 300, + "first_name": "Dall", + "last_name": "Labeuil", + "email": "dlabeuil8b@ucsd.edu" + }, + { + "id": 301, + "first_name": "Bunny", + "last_name": "McSperrin", + "email": "bmcsperrin8c@hubpages.com" + }, + { + "id": 302, + "first_name": "Marianne", + "last_name": "Sabbin", + "email": "msabbin8d@hc360.com" + }, + { + "id": 303, + "first_name": "Anette", + "last_name": "Wickersley", + "email": "awickersley8e@businesswire.com" + }, + { + "id": 304, + "first_name": "Millisent", + "last_name": "Heinemann", + "email": "mheinemann8f@ameblo.jp" + }, + { + "id": 305, + "first_name": "Kala", + "last_name": "Attock", + "email": "kattock8g@theatlantic.com" + }, + { + "id": 306, + "first_name": "Meriel", + "last_name": "Vasyukhin", + "email": "mvasyukhin8h@linkedin.com" + }, + { + "id": 307, + "first_name": "Julianne", + "last_name": "Baudou", + "email": "jbaudou8i@cbc.ca" + }, + { + "id": 308, + "first_name": "Pryce", + "last_name": "Landal", + "email": "plandal8j@myspace.com" + }, + { + "id": 309, + "first_name": "Nerissa", + "last_name": "Dreghorn", + "email": "ndreghorn8k@usda.gov" + }, + { + "id": 310, + "first_name": "Clyve", + "last_name": "Soldner", + "email": "csoldner8l@bluehost.com" + }, + { + "id": 311, + "first_name": "Hadlee", + "last_name": "Syplus", + "email": "hsyplus8m@auda.org.au" + }, + { + "id": 312, + "first_name": "Prudi", + "last_name": "Merkel", + "email": "pmerkel8n@hao123.com" + }, + { + "id": 313, + "first_name": "Zebulon", + "last_name": "Denisyev", + "email": "zdenisyev8o@parallels.com" + }, + { + "id": 314, + "first_name": "Leopold", + "last_name": "Laddle", + "email": "lladdle8p@si.edu" + }, + { + "id": 315, + "first_name": "Danella", + "last_name": "Aymes", + "email": "daymes8q@earthlink.net" + }, + { + "id": 316, + "first_name": "Murdock", + "last_name": "De Ath", + "email": "mdeath8r@naver.com" + }, + { + "id": 317, + "first_name": "Umeko", + "last_name": "Feavearyear", + "email": "ufeavearyear8s@youtube.com" + }, + { + "id": 318, + "first_name": "Valli", + "last_name": "Neary", + "email": "vneary8t@vimeo.com" + }, + { + "id": 319, + "first_name": "Kendell", + "last_name": "Blaby", + "email": "kblaby8u@tuttocitta.it" + }, + { + "id": 320, + "first_name": "Ahmad", + "last_name": "Tate", + "email": "atate8v@friendfeed.com" + }, + { + "id": 321, + "first_name": "Cullan", + "last_name": "Christofol", + "email": "cchristofol8w@hao123.com" + }, + { + "id": 322, + "first_name": "Nolan", + "last_name": "Betser", + "email": "nbetser8x@github.io" + }, + { + "id": 323, + "first_name": "Vachel", + "last_name": "Burrage", + "email": "vburrage8y@cargocollective.com" + }, + { + "id": 324, + "first_name": "Gigi", + "last_name": "McCaughran", + "email": "gmccaughran8z@fda.gov" + }, + { + "id": 325, + "first_name": "Leanora", + "last_name": "Epple", + "email": "lepple90@stanford.edu" + }, + { + "id": 326, + "first_name": "Kathi", + "last_name": "Yearnes", + "email": "kyearnes91@sfgate.com" + }, + { + "id": 327, + "first_name": "Tadio", + "last_name": "Salleir", + "email": "tsalleir92@a8.net" + }, + { + "id": 328, + "first_name": "Kev", + "last_name": "Mayell", + "email": "kmayell93@weibo.com" + }, + { + "id": 329, + "first_name": "Clarissa", + "last_name": "Hartley", + "email": "chartley94@networksolutions.com" + }, + { + "id": 330, + "first_name": "Cindie", + "last_name": "Skyme", + "email": "cskyme95@etsy.com" + }, + { + "id": 331, + "first_name": "Timoteo", + "last_name": "Wieprecht", + "email": "twieprecht96@dion.ne.jp" + }, + { + "id": 332, + "first_name": "Aloise", + "last_name": "Parres", + "email": "aparres97@infoseek.co.jp" + }, + { + "id": 333, + "first_name": "Ezri", + "last_name": "Jacobsen", + "email": "ejacobsen98@google.de" + }, + { + "id": 334, + "first_name": "Lewie", + "last_name": "Ambroz", + "email": "lambroz99@youku.com" + }, + { + "id": 335, + "first_name": "Kerwin", + "last_name": "Ceney", + "email": "kceney9a@comsenz.com" + }, + { + "id": 336, + "first_name": "Frederich", + "last_name": "Crolly", + "email": "fcrolly9b@shareasale.com" + }, + { + "id": 337, + "first_name": "Sayer", + "last_name": "Matanin", + "email": "smatanin9c@newsvine.com" + }, + { + "id": 338, + "first_name": "Jennifer", + "last_name": "Vasyatkin", + "email": "jvasyatkin9d@chronoengine.com" + }, + { + "id": 339, + "first_name": "Nicky", + "last_name": "Heinsh", + "email": "nheinsh9e@technorati.com" + }, + { + "id": 340, + "first_name": "Neda", + "last_name": "Lanon", + "email": "nlanon9f@toplist.cz" + }, + { + "id": 341, + "first_name": "Elbertine", + "last_name": "Larkcum", + "email": "elarkcum9g@a8.net" + }, + { + "id": 342, + "first_name": "Whitby", + "last_name": "Farrell", + "email": "wfarrell9h@dailymail.co.uk" + }, + { + "id": 343, + "first_name": "Dun", + "last_name": "Mackieson", + "email": "dmackieson9i@weebly.com" + }, + { + "id": 344, + "first_name": "Krishna", + "last_name": "Tacon", + "email": "ktacon9j@w3.org" + }, + { + "id": 345, + "first_name": "Dyna", + "last_name": "Sneezum", + "email": "dsneezum9k@sfgate.com" + }, + { + "id": 346, + "first_name": "Gardner", + "last_name": "Habercham", + "email": "ghabercham9l@goodreads.com" + }, + { + "id": 347, + "first_name": "Kalil", + "last_name": "Reinmar", + "email": "kreinmar9m@google.ru" + }, + { + "id": 348, + "first_name": "Karly", + "last_name": "Cribbins", + "email": "kcribbins9n@ustream.tv" + }, + { + "id": 349, + "first_name": "Jeanne", + "last_name": "Easen", + "email": "jeasen9o@time.com" + }, + { + "id": 350, + "first_name": "Yorgo", + "last_name": "de Courcy", + "email": "ydecourcy9p@reference.com" + }, + { + "id": 351, + "first_name": "Dyanna", + "last_name": "Wordesworth", + "email": "dwordesworth9q@clickbank.net" + }, + { + "id": 352, + "first_name": "Ashien", + "last_name": "Whittles", + "email": "awhittles9r@dell.com" + }, + { + "id": 353, + "first_name": "Alia", + "last_name": "Paradin", + "email": "aparadin9s@ucsd.edu" + }, + { + "id": 354, + "first_name": "Babbie", + "last_name": "Palethorpe", + "email": "bpalethorpe9t@sciencedirect.com" + }, + { + "id": 355, + "first_name": "Mort", + "last_name": "Hargie", + "email": "mhargie9u@nyu.edu" + }, + { + "id": 356, + "first_name": "Lucais", + "last_name": "Writer", + "email": "lwriter9v@domainmarket.com" + }, + { + "id": 357, + "first_name": "Lucho", + "last_name": "Robley", + "email": "lrobley9w@cargocollective.com" + }, + { + "id": 358, + "first_name": "Drucie", + "last_name": "Hapgood", + "email": "dhapgood9x@ft.com" + }, + { + "id": 359, + "first_name": "Arin", + "last_name": "Boddy", + "email": "aboddy9y@cdbaby.com" + }, + { + "id": 360, + "first_name": "Biddy", + "last_name": "Ewles", + "email": "bewles9z@globo.com" + }, + { + "id": 361, + "first_name": "Marlon", + "last_name": "Allder", + "email": "malldera0@t.co" + }, + { + "id": 362, + "first_name": "Jock", + "last_name": "Ing", + "email": "jinga1@ocn.ne.jp" + }, + { + "id": 363, + "first_name": "Franny", + "last_name": "Taverner", + "email": "ftavernera2@ezinearticles.com" + }, + { + "id": 364, + "first_name": "Vanda", + "last_name": "Whiterod", + "email": "vwhiteroda3@usda.gov" + }, + { + "id": 365, + "first_name": "Lezlie", + "last_name": "Godbehere", + "email": "lgodbeherea4@youtube.com" + }, + { + "id": 366, + "first_name": "Rebecka", + "last_name": "Scarsbrook", + "email": "rscarsbrooka5@myspace.com" + }, + { + "id": 367, + "first_name": "Abba", + "last_name": "Mingotti", + "email": "amingottia6@tuttocitta.it" + }, + { + "id": 368, + "first_name": "Miguela", + "last_name": "McNysche", + "email": "mmcnyschea7@t-online.de" + }, + { + "id": 369, + "first_name": "Weider", + "last_name": "Rosenau", + "email": "wrosenaua8@mysql.com" + }, + { + "id": 370, + "first_name": "Antonietta", + "last_name": "Littefair", + "email": "alittefaira9@xing.com" + }, + { + "id": 371, + "first_name": "Heda", + "last_name": "Wheowall", + "email": "hwheowallaa@360.cn" + }, + { + "id": 372, + "first_name": "Nettle", + "last_name": "Semonin", + "email": "nsemoninab@patch.com" + }, + { + "id": 373, + "first_name": "Sheri", + "last_name": "Baudry", + "email": "sbaudryac@google.ru" + }, + { + "id": 374, + "first_name": "Janna", + "last_name": "Bogue", + "email": "jboguead@illinois.edu" + }, + { + "id": 375, + "first_name": "Saundra", + "last_name": "Skaid", + "email": "sskaidae@ycombinator.com" + }, + { + "id": 376, + "first_name": "Xenia", + "last_name": "Cadden", + "email": "xcaddenaf@booking.com" + }, + { + "id": 377, + "first_name": "Claudia", + "last_name": "Spirit", + "email": "cspiritag@linkedin.com" + }, + { + "id": 378, + "first_name": "Willard", + "last_name": "Grimwood", + "email": "wgrimwoodah@oracle.com" + }, + { + "id": 379, + "first_name": "Smith", + "last_name": "Allenby", + "email": "sallenbyai@godaddy.com" + }, + { + "id": 380, + "first_name": "Morlee", + "last_name": "Bernardin", + "email": "mbernardinaj@list-manage.com" + }, + { + "id": 381, + "first_name": "Murvyn", + "last_name": "Becom", + "email": "mbecomak@sourceforge.net" + }, + { + "id": 382, + "first_name": "Teriann", + "last_name": "Flori", + "email": "tflorial@xinhuanet.com" + }, + { + "id": 383, + "first_name": "Liva", + "last_name": "Cabera", + "email": "lcaberaam@t.co" + }, + { + "id": 384, + "first_name": "Andrej", + "last_name": "Hearnden", + "email": "ahearndenan@mysql.com" + }, + { + "id": 385, + "first_name": "Reg", + "last_name": "Vollam", + "email": "rvollamao@networkadvertising.org" + }, + { + "id": 386, + "first_name": "Kimberlyn", + "last_name": "Bedells", + "email": "kbedellsap@bbc.co.uk" + }, + { + "id": 387, + "first_name": "Cam", + "last_name": "Quantrill", + "email": "cquantrillaq@alibaba.com" + }, + { + "id": 388, + "first_name": "Giuditta", + "last_name": "Force", + "email": "gforcear@delicious.com" + }, + { + "id": 389, + "first_name": "Lanie", + "last_name": "MacQueen", + "email": "lmacqueenas@flickr.com" + }, + { + "id": 390, + "first_name": "Marja", + "last_name": "O'Dempsey", + "email": "modempseyat@auda.org.au" + }, + { + "id": 391, + "first_name": "Howey", + "last_name": "St Clair", + "email": "hstclairau@soundcloud.com" + }, + { + "id": 392, + "first_name": "Carolynn", + "last_name": "Khotler", + "email": "ckhotlerav@utexas.edu" + }, + { + "id": 393, + "first_name": "Theodosia", + "last_name": "Ort", + "email": "tortaw@shop-pro.jp" + }, + { + "id": 394, + "first_name": "West", + "last_name": "Matchett", + "email": "wmatchettax@cbc.ca" + }, + { + "id": 395, + "first_name": "Vivianne", + "last_name": "Wheelwright", + "email": "vwheelwrightay@washingtonpost.com" + }, + { + "id": 396, + "first_name": "Pennie", + "last_name": "Beames", + "email": "pbeamesaz@drupal.org" + }, + { + "id": 397, + "first_name": "Nady", + "last_name": "Letch", + "email": "nletchb0@skype.com" + }, + { + "id": 398, + "first_name": "Moselle", + "last_name": "Maytum", + "email": "mmaytumb1@usgs.gov" + }, + { + "id": 399, + "first_name": "Jennilee", + "last_name": "Kid", + "email": "jkidb2@wisc.edu" + }, + { + "id": 400, + "first_name": "Parnell", + "last_name": "Gong", + "email": "pgongb3@oaic.gov.au" + }, + { + "id": 401, + "first_name": "Noll", + "last_name": "Kohtler", + "email": "nkohtlerb4@opensource.org" + }, + { + "id": 402, + "first_name": "Sonya", + "last_name": "Orris", + "email": "sorrisb5@bandcamp.com" + }, + { + "id": 403, + "first_name": "Bronnie", + "last_name": "Guillotin", + "email": "bguillotinb6@geocities.jp" + }, + { + "id": 404, + "first_name": "Inger", + "last_name": "Clipsham", + "email": "iclipshamb7@psu.edu" + }, + { + "id": 405, + "first_name": "Melina", + "last_name": "Grigorio", + "email": "mgrigoriob8@eventbrite.com" + }, + { + "id": 406, + "first_name": "Jermain", + "last_name": "Thraves", + "email": "jthravesb9@biblegateway.com" + }, + { + "id": 407, + "first_name": "Jock", + "last_name": "Payn", + "email": "jpaynba@google.cn" + }, + { + "id": 408, + "first_name": "Nikolia", + "last_name": "Sterre", + "email": "nsterrebb@google.ru" + }, + { + "id": 409, + "first_name": "Rosemarie", + "last_name": "Caurah", + "email": "rcaurahbc@sohu.com" + }, + { + "id": 410, + "first_name": "Conney", + "last_name": "Spawell", + "email": "cspawellbd@ycombinator.com" + }, + { + "id": 411, + "first_name": "Hernando", + "last_name": "Percival", + "email": "hpercivalbe@cisco.com" + }, + { + "id": 412, + "first_name": "Michale", + "last_name": "Stadding", + "email": "mstaddingbf@bandcamp.com" + }, + { + "id": 413, + "first_name": "Zulema", + "last_name": "Danks", + "email": "zdanksbg@ovh.net" + }, + { + "id": 414, + "first_name": "Olia", + "last_name": "Joost", + "email": "ojoostbh@soup.io" + }, + { + "id": 416, + "first_name": "Corbet", + "last_name": "Cliff", + "email": "ccliffbj@oaic.gov.au" + }, + { + "id": 417, + "first_name": "Georgetta", + "last_name": "Tinto", + "email": "gtintobk@craigslist.org" + }, + { + "id": 418, + "first_name": "Priscilla", + "last_name": "Philips", + "email": "pphilipsbl@ox.ac.uk" + }, + { + "id": 419, + "first_name": "David", + "last_name": "Mulcock", + "email": "dmulcockbm@nytimes.com" + }, + { + "id": 420, + "first_name": "Agatha", + "last_name": "Hek", + "email": "ahekbn@homestead.com" + }, + { + "id": 421, + "first_name": "Burty", + "last_name": "Ceschini", + "email": "bceschinibo@jimdo.com" + }, + { + "id": 422, + "first_name": "Ange", + "last_name": "Maeer", + "email": "amaeerbp@feedburner.com" + }, + { + "id": 423, + "first_name": "Dannel", + "last_name": "Sackes", + "email": "dsackesbq@pbs.org" + }, + { + "id": 424, + "first_name": "Lorrie", + "last_name": "Entres", + "email": "lentresbr@ebay.co.uk" + }, + { + "id": 425, + "first_name": "Oswell", + "last_name": "Patrick", + "email": "opatrickbs@answers.com" + }, + { + "id": 426, + "first_name": "Nefen", + "last_name": "Sedgefield", + "email": "nsedgefieldbt@google.com.au" + }, + { + "id": 427, + "first_name": "Crichton", + "last_name": "Giorgione", + "email": "cgiorgionebu@va.gov" + }, + { + "id": 428, + "first_name": "Shaylynn", + "last_name": "Bulstrode", + "email": "sbulstrodebv@ehow.com" + }, + { + "id": 429, + "first_name": "Randolf", + "last_name": "Pickvance", + "email": "rpickvancebw@istockphoto.com" + }, + { + "id": 430, + "first_name": "Diarmid", + "last_name": "Lias", + "email": "dliasbx@alexa.com" + }, + { + "id": 431, + "first_name": "Francis", + "last_name": "Clipson", + "email": "fclipsonby@google.com.au" + }, + { + "id": 432, + "first_name": "Lorene", + "last_name": "Maciejewski", + "email": "lmaciejewskibz@nytimes.com" + }, + { + "id": 433, + "first_name": "Kizzee", + "last_name": "Klammt", + "email": "kklammtc0@vkontakte.ru" + }, + { + "id": 434, + "first_name": "Zolly", + "last_name": "Cattle", + "email": "zcattlec1@va.gov" + }, + { + "id": 435, + "first_name": "Kattie", + "last_name": "Chidwick", + "email": "kchidwickc2@hatena.ne.jp" + }, + { + "id": 436, + "first_name": "Izabel", + "last_name": "Weight", + "email": "iweightc3@ycombinator.com" + }, + { + "id": 437, + "first_name": "Kerby", + "last_name": "Redler", + "email": "kredlerc4@google.es" + }, + { + "id": 438, + "first_name": "Wynn", + "last_name": "Glass", + "email": "wglassc5@yelp.com" + }, + { + "id": 439, + "first_name": "Jemmie", + "last_name": "Scorey", + "email": "jscoreyc6@blogspot.com" + }, + { + "id": 440, + "first_name": "Krispin", + "last_name": "Kirstein", + "email": "kkirsteinc7@elegantthemes.com" + }, + { + "id": 441, + "first_name": "Mil", + "last_name": "Ogdahl", + "email": "mogdahlc8@ft.com" + }, + { + "id": 442, + "first_name": "Van", + "last_name": "Bernholt", + "email": "vbernholtc9@indiegogo.com" + }, + { + "id": 443, + "first_name": "Ilyse", + "last_name": "Boecke", + "email": "iboeckeca@a8.net" + }, + { + "id": 444, + "first_name": "Gabby", + "last_name": "Silcock", + "email": "gsilcockcb@ow.ly" + }, + { + "id": 445, + "first_name": "Ulberto", + "last_name": "Edgeley", + "email": "uedgeleycc@blinklist.com" + }, + { + "id": 446, + "first_name": "Bary", + "last_name": "McGuinley", + "email": "bmcguinleycd@icq.com" + }, + { + "id": 447, + "first_name": "Willie", + "last_name": "Whyard", + "email": "wwhyardce@msn.com" + }, + { + "id": 448, + "first_name": "Borden", + "last_name": "Thrussell", + "email": "bthrussellcf@rediff.com" + }, + { + "id": 449, + "first_name": "Pincus", + "last_name": "McMahon", + "email": "pmcmahoncg@rakuten.co.jp" + }, + { + "id": 450, + "first_name": "Rriocard", + "last_name": "Franke", + "email": "rfrankech@addtoany.com" + }, + { + "id": 451, + "first_name": "Clayborne", + "last_name": "Greensitt", + "email": "cgreensittci@yellowbook.com" + }, + { + "id": 452, + "first_name": "Shayla", + "last_name": "Comber", + "email": "scombercj@sphinn.com" + }, + { + "id": 453, + "first_name": "Ronni", + "last_name": "Errigo", + "email": "rerrigock@tmall.com" + }, + { + "id": 454, + "first_name": "Bunnie", + "last_name": "Fishly", + "email": "bfishlycl@a8.net" + }, + { + "id": 455, + "first_name": "Jilly", + "last_name": "Skelly", + "email": "jskellycm@bbc.co.uk" + }, + { + "id": 456, + "first_name": "Melinde", + "last_name": "Prene", + "email": "mprenecn@smh.com.au" + }, + { + "id": 457, + "first_name": "Alanah", + "last_name": "De Atta", + "email": "adeattaco@gmpg.org" + }, + { + "id": 458, + "first_name": "Tamiko", + "last_name": "Gerrish", + "email": "tgerrishcp@baidu.com" + }, + { + "id": 459, + "first_name": "Winslow", + "last_name": "Waszczyk", + "email": "wwaszczykcq@bbc.co.uk" + }, + { + "id": 460, + "first_name": "Lydon", + "last_name": "Habershaw", + "email": "lhabershawcr@imgur.com" + }, + { + "id": 461, + "first_name": "Dill", + "last_name": "Playle", + "email": "dplaylecs@livejournal.com" + }, + { + "id": 462, + "first_name": "Natassia", + "last_name": "Kendle", + "email": "nkendlect@usa.gov" + }, + { + "id": 463, + "first_name": "Carree", + "last_name": "Bohills", + "email": "cbohillscu@pinterest.com" + }, + { + "id": 464, + "first_name": "Terrel", + "last_name": "Knell", + "email": "tknellcv@webnode.com" + }, + { + "id": 465, + "first_name": "Wilhelmina", + "last_name": "Lumbley", + "email": "wlumbleycw@stanford.edu" + }, + { + "id": 466, + "first_name": "Dori", + "last_name": "Astridge", + "email": "dastridgecx@salon.com" + }, + { + "id": 467, + "first_name": "Cherie", + "last_name": "Houlridge", + "email": "choulridgecy@squarespace.com" + }, + { + "id": 468, + "first_name": "Cord", + "last_name": "Caunt", + "email": "ccauntcz@hatena.ne.jp" + }, + { + "id": 469, + "first_name": "Josie", + "last_name": "MacMeeking", + "email": "jmacmeekingd0@people.com.cn" + }, + { + "id": 470, + "first_name": "Glenine", + "last_name": "Feron", + "email": "gferond1@a8.net" + }, + { + "id": 471, + "first_name": "Eliot", + "last_name": "Doidge", + "email": "edoidged2@intel.com" + }, + { + "id": 472, + "first_name": "Dudley", + "last_name": "Lehrahan", + "email": "dlehrahand3@technorati.com" + }, + { + "id": 473, + "first_name": "Tyler", + "last_name": "Puddan", + "email": "tpuddand4@ft.com" + }, + { + "id": 474, + "first_name": "Egor", + "last_name": "Lindgren", + "email": "elindgrend5@nba.com" + }, + { + "id": 475, + "first_name": "Barnabe", + "last_name": "Rival", + "email": "brivald6@yahoo.co.jp" + }, + { + "id": 476, + "first_name": "Domenico", + "last_name": "De Courtney", + "email": "ddecourtneyd7@themeforest.net" + }, + { + "id": 477, + "first_name": "Matthus", + "last_name": "Bodycote", + "email": "mbodycoted8@usa.gov" + }, + { + "id": 478, + "first_name": "Jamie", + "last_name": "Blyden", + "email": "jblydend9@comcast.net" + }, + { + "id": 479, + "first_name": "Mignon", + "last_name": "Woolnough", + "email": "mwoolnoughda@sciencedaily.com" + }, + { + "id": 480, + "first_name": "Mala", + "last_name": "Devlin", + "email": "mdevlindb@epa.gov" + }, + { + "id": 481, + "first_name": "Tiertza", + "last_name": "Letterick", + "email": "tletterickdc@state.gov" + }, + { + "id": 482, + "first_name": "Rebecka", + "last_name": "Alday", + "email": "raldaydd@flavors.me" + }, + { + "id": 483, + "first_name": "Vinita", + "last_name": "Etter", + "email": "vetterde@wikispaces.com" + }, + { + "id": 484, + "first_name": "Noreen", + "last_name": "Sirmond", + "email": "nsirmonddf@jigsy.com" + }, + { + "id": 485, + "first_name": "Ashley", + "last_name": "McClaughlin", + "email": "amcclaughlindg@bloomberg.com" + }, + { + "id": 486, + "first_name": "Vale", + "last_name": "Le Houx", + "email": "vlehouxdh@nhs.uk" + }, + { + "id": 487, + "first_name": "Donnell", + "last_name": "Treadway", + "email": "dtreadwaydi@mit.edu" + }, + { + "id": 488, + "first_name": "Gwennie", + "last_name": "Gundrey", + "email": "ggundreydj@over-blog.com" + }, + { + "id": 489, + "first_name": "Karel", + "last_name": "Dani", + "email": "kdanidk@163.com" + }, + { + "id": 490, + "first_name": "Merle", + "last_name": "Bonnaire", + "email": "mbonnairedl@uol.com.br" + }, + { + "id": 491, + "first_name": "Annabel", + "last_name": "Nockles", + "email": "anocklesdm@walmart.com" + }, + { + "id": 492, + "first_name": "Urban", + "last_name": "Ivashov", + "email": "uivashovdn@amazon.co.uk" + }, + { + "id": 493, + "first_name": "Hector", + "last_name": "Rothwell", + "email": "hrothwelldo@howstuffworks.com" + }, + { + "id": 494, + "first_name": "Ford", + "last_name": "Brozek", + "email": "fbrozekdp@hibu.com" + }, + { + "id": 495, + "first_name": "Rhody", + "last_name": "Phythean", + "email": "rphytheandq@bbc.co.uk" + }, + { + "id": 496, + "first_name": "Angie", + "last_name": "Durno", + "email": "adurnodr@china.com.cn" + }, + { + "id": 497, + "first_name": "Elisha", + "last_name": "Jerrome", + "email": "ejerromeds@163.com" + }, + { + "id": 498, + "first_name": "Davita", + "last_name": "Dakers", + "email": "ddakersdt@bravesites.com" + }, + { + "id": 499, + "first_name": "Kiersten", + "last_name": "Josey", + "email": "kjoseydu@networksolutions.com" + } +] diff --git a/examples/islands_router/src/app.rs b/examples/islands_router/src/app.rs index d13ad9ddd2..f43dd020e9 100644 --- a/examples/islands_router/src/app.rs +++ b/examples/islands_router/src/app.rs @@ -1,8 +1,11 @@ -use leptos::{either::EitherOf3, prelude::*}; +use leptos::{ + either::{Either, EitherOf3}, + prelude::*, +}; use leptos_router::{ components::{Route, Router, Routes}, - hooks::use_query_map, - SsrMode, StaticSegment, + hooks::{use_params_map, use_query_map}, + path, SsrMode, }; use serde::{Deserialize, Serialize}; @@ -14,7 +17,7 @@ pub fn shell(options: LeptosOptions) -> impl IntoView { <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <AutoReload options=options.clone()/> - <HydrationScripts options=options islands=true/> + <HydrationScripts options=options islands=true islands_router=true/> <link rel="stylesheet" id="leptos" href="/pkg/islands.css"/> <link rel="shortcut icon" type="image/ico" href="/favicon.ico"/> </head> @@ -28,7 +31,6 @@ pub fn shell(options: LeptosOptions) -> impl IntoView { #[component] pub fn App() -> impl IntoView { view! { - <script src="/routing.js"></script> <Router> <header> <h1>"My Contacts"</h1> @@ -39,8 +41,9 @@ pub fn App() -> impl IntoView { </nav> <main> <Routes fallback=|| "Not found."> - <Route path=StaticSegment("") view=Home ssr=SsrMode::Async/> - <Route path=StaticSegment("about") view=About ssr=SsrMode::Async/> + <Route path=path!("") view=Home ssr=SsrMode::Async/> + <Route path=path!("user/:id") view=Details ssr=SsrMode::Async/> + <Route path=path!("about") view=About ssr=SsrMode::Async/> </Routes> </main> </Router> @@ -62,6 +65,16 @@ pub async fn search(query: String) -> Result<Vec<User>, ServerFnError> { .collect()) } +#[server] +pub async fn delete_user(id: u32) -> Result<(), ServerFnError> { + let users = tokio::fs::read_to_string("./mock_data.json").await?; + let mut data: Vec<User> = serde_json::from_str(&users)?; + data.retain(|user| user.id != id); + let new_json = serde_json::to_string(&data)?; + tokio::fs::write("./mock_data.json", &new_json).await?; + Ok(()) +} + #[derive(Deserialize, Serialize, Debug, Clone)] pub struct User { id: u32, @@ -81,16 +94,18 @@ pub fn Home() -> impl IntoView { Ok(vec![]) } }); + let delete_user_action = ServerAction::<DeleteUser>::new(); + let view = move || { Suspend::new(async move { let users = data.await.unwrap(); if q().is_none() { EitherOf3::A(view! { - <p>"Enter a search to begin viewing contacts."</p> + <p class="note">"Enter a search to begin viewing contacts."</p> }) } else if users.is_empty() { EitherOf3::B(view! { - <p>"No users found matching that search."</p> + <p class="note">"No users found matching that search."</p> }) } else { EitherOf3::C(view! { @@ -105,7 +120,14 @@ pub fn Home() -> impl IntoView { <td>{user.first_name}</td> <td>{user.last_name}</td> <td>{user.email}</td> - <td><input type="checkbox"/></td> + <td> + <a href=format!("/user/{}", user.id)>"Details"</a> + <input type="checkbox"/> + <ActionForm action=delete_user_action> + <input type="hidden" name="id" value=user.id/> + <input type="submit" value="Delete"/> + </ActionForm> + </td> </tr> </For> </tbody> @@ -115,18 +137,74 @@ pub fn Home() -> impl IntoView { }) }; view! { - <form method="GET"> - <input type="search" name="q" value=q autofocus oninput="this.form.requestSubmit()"/> - <input type="submit"/> - </form> - <Suspense fallback=|| "Loading...">{view}</Suspense> + <section class="page"> + <form method="GET" class="search"> + <input type="search" name="q" value=q autofocus oninput="this.form.requestSubmit()"/> + <input type="submit"/> + </form> + <Suspense>{view}</Suspense> + </section> + } +} + +#[component] +pub fn Details() -> impl IntoView { + #[server] + pub async fn get_user(id: u32) -> Result<Option<User>, ServerFnError> { + let users = tokio::fs::read_to_string("./mock_data.json").await?; + let data: Vec<User> = serde_json::from_str(&users)?; + Ok(data.iter().find(|user| user.id == id).cloned()) + } + let params = use_params_map(); + let id = move || { + params + .read() + .get("id") + .and_then(|id| id.parse::<u32>().ok()) + }; + let user = Resource::new(id, |id| async move { + match id { + None => Ok(None), + Some(id) => get_user(id).await, + } + }); + + move || { + Suspend::new(async move { + user.await.map(|user| match user { + None => Either::Left(view! { + <section class="page"> + <h2>"Not found."</h2> + <p>"Sorry — we couldn’t find that user."</p> + </section> + }), + Some(user) => Either::Right(view! { + <section class="page"> + <h2>{user.first_name} " " { user.last_name}</h2> + <p class="email">{user.email}</p> + </section> + }), + }) + }) } } #[component] pub fn About() -> impl IntoView { view! { - <h1>"About"</h1> - <p>"This demo is intended to show off an experimental “islands router” feature, which mimics the smooth transitions and user experience of client-side routing while minimizing the amount of code that actually runs in the browser."</p> + <section class="page"> + <h2>"About"</h2> + <p>"This demo is intended to show off an experimental “islands router” feature, which mimics the smooth transitions and user experience of client-side routing while minimizing the amount of code that actually runs in the browser."</p> + <p>"By default, all the content in this application is only rendered on the server. But you can add client-side interactivity via islands like this one:"</p> + <Counter/> + </section> + } +} + +#[island] +pub fn Counter() -> impl IntoView { + let count = RwSignal::new(0); + view! { + <button class="counter" on:click=move |_| *count.write() += 1>{count}</button> } } diff --git a/examples/islands_router/style.css b/examples/islands_router/style.css index 32145120b8..2a2c7a7b48 100644 --- a/examples/islands_router/style.css +++ b/examples/islands_router/style.css @@ -1,11 +1,52 @@ -.pending { - color: purple; +body { + font-family: system-ui, sans-serif; + background-color: #f6f6fa; +} + +h1, h2, h3, h4, h5, h6 { + font-family: ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif; + text-align: center; +} + +nav { + padding: 1rem; + text-align: center; +} + +nav a { + margin: 1rem; +} + +form.search { + display: flex; + margin: 2rem auto; + justify-content: center; } td { + min-width: 10rem; width: 10rem; } -td:last-child { - width: 2rem; +table { + min-width: 100%; +} + +.page { + width: 80%; + margin: auto; +} + +td:last-child > * { + display: inline-block; +} + +.note, .note { + text-align: center; +} + +button.counter { + display: block; + font-size: 2rem; + margin: auto; } diff --git a/leptos/src/hydration/island_script.js b/leptos/src/hydration/island_script.js index 12427a1567..e0a1887f44 100644 --- a/leptos/src/hydration/island_script.js +++ b/leptos/src/hydration/island_script.js @@ -52,6 +52,8 @@ mod.hydrate(); hydrateIslands(document.body, mod); }); + + window.__hydrateIsland = (el, id) => hydrateIsland(el, id, mod); }) }); }) diff --git a/examples/islands_router/public/routing.js b/leptos/src/hydration/islands_routing.js similarity index 90% rename from examples/islands_router/public/routing.js rename to leptos/src/hydration/islands_routing.js index fb60029f74..7406c8071c 100644 --- a/examples/islands_router/public/routing.js +++ b/leptos/src/hydration/islands_routing.js @@ -10,6 +10,12 @@ window.addEventListener("click", async (ev) => { await navigateToPage(req, true); }); +window.addEventListener("popstate", async (ev) => { + const req = new Request(window.location); + ev.preventDefault(); + await navigateToPage(req, true, true); +}); + window.addEventListener("submit", async (ev) => { const req = submitToReq(ev); if(!req) { @@ -20,12 +26,13 @@ window.addEventListener("submit", async (ev) => { await navigateToPage(req, true); }); -async function navigateToPage(req, useViewTransition) { +async function navigateToPage(req, useViewTransition, replace) { NAVIGATION += 1; const currentNav = NAVIGATION; // fetch the new page const resp = await fetch(req); + const redirected = resp.redirected; const htmlString = await resp.text(); if(NAVIGATION === currentNav) { @@ -33,6 +40,12 @@ async function navigateToPage(req, useViewTransition) { const transition = async () => { try { diffPages(htmlString); + for(const island of document.querySelectorAll("leptos-island")) { + if(!island.$$hydrated) { + __hydrateIsland(island, island.dataset.component); + island.$$hydrated = true; + } + } } catch(e) { console.error(e); } @@ -43,7 +56,14 @@ async function navigateToPage(req, useViewTransition) { } else { await transition() } - window.history.pushState(undefined, null, req.url); + + const url = redirected ? resp.url : req.url; + + if(replace) { + window.history.replaceState(undefined, null, url); + } else { + window.history.pushState(undefined, null, url); + } } } @@ -110,16 +130,20 @@ function submitToReq(ev) { const requestInit = {}; const data = new FormData(form); + const params = new URLSearchParams(); + for (const [key, value] of data.entries()) { + params.append(key, value); + } + + requestInit.headers = { + Accept: "text/html" + }; if(method === "GET") { - const params = new URLSearchParams(); - for (const [key, value] of data.entries()) { - params.append(key, value); - } path += `?${params.toString()}`; } else { requestInit.method = "POST"; - requestInit.body = data; + requestInit.body = params; } @@ -143,6 +167,7 @@ function diffPages(htmlString) { while(oldDocWalker.nextNode() && newDocWalker.nextNode()) { oldNode = oldDocWalker.currentNode; newNode = newDocWalker.currentNode; + // if the nodes are different, we need to replace the old with the new // because of the typed view tree, this should never actually happen if (oldNode.nodeType !== newNode.nodeType) { @@ -228,7 +253,6 @@ function replaceFor(oldDocWalker, newDocWalker, oldNode, newNode) { // replace the item in the *new* list with the *old* DOM elements const oldOne = oldKeys[key]; const newOne = newKeys[key]; - console.log("need to replace", key, oldOne, newOne); const oldRange = new Range(); const newRange = new Range(); oldRange.setStartAfter(oldOne.open); @@ -315,6 +339,7 @@ function diffElement(oldNode, newNode) { const newEl = newNode; if (oldEl.tagName !== newEl.tagName) { oldEl.replaceWith(newEl); + } else { for(const attr of newEl.attributes) { @@ -322,3 +347,7 @@ function diffElement(oldNode, newNode) { } } } + +for(const island of document.querySelectorAll("leptos-island")) { + island.$$hydrated = true; +} diff --git a/leptos/src/hydration/mod.rs b/leptos/src/hydration/mod.rs index ce87dc63a6..f3232d29b5 100644 --- a/leptos/src/hydration/mod.rs +++ b/leptos/src/hydration/mod.rs @@ -50,6 +50,10 @@ pub fn HydrationScripts( /// Should be `true` to hydrate in `islands` mode. #[prop(optional)] islands: bool, + /// Should be `true` to add the “islands router,” which enables limited client-side routing + /// when running in islands mode. + #[prop(optional)] + islands_router: bool, /// A base url, not including a trailing slash #[prop(optional, into)] root: Option<String>, @@ -98,6 +102,10 @@ pub fn HydrationScripts( include_str!("./hydration_script.js") }; + let islands_router = islands_router + .then_some(include_str!("./islands_routing.js")) + .unwrap_or_default(); + let root = root.unwrap_or_default(); view! { <link rel="modulepreload" href=format!("{root}/{pkg_path}/{js_file_name}.js") nonce=nonce.clone()/> @@ -109,7 +117,7 @@ pub fn HydrationScripts( crossorigin=nonce.clone().unwrap_or_default() /> <script type="module" nonce=nonce> - {format!("{script}({root:?}, {pkg_path:?}, {js_file_name:?}, {wasm_file_name:?})")} + {format!("{script}({root:?}, {pkg_path:?}, {js_file_name:?}, {wasm_file_name:?});{islands_router}")} </script> } } From e15153a8c0398fa481e53086c69bd7ef22477d56 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Fri, 17 Jan 2025 16:04:17 -0500 Subject: [PATCH 06/15] change the feature name back --- integrations/actix/Cargo.toml | 2 +- integrations/actix/src/lib.rs | 2 +- integrations/axum/Cargo.toml | 2 +- integrations/axum/src/lib.rs | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/integrations/actix/Cargo.toml b/integrations/actix/Cargo.toml index 894922201b..1fa8121ef1 100644 --- a/integrations/actix/Cargo.toml +++ b/integrations/actix/Cargo.toml @@ -33,7 +33,7 @@ once_cell = "1" rustdoc-args = ["--generate-link-to-definition"] [features] -dont-use-islands-router = [] +islands-router = [] tracing = ["dep:tracing"] [package.metadata.cargo-all-features] diff --git a/integrations/actix/src/lib.rs b/integrations/actix/src/lib.rs index 3b1bb0a139..9787fe9e75 100644 --- a/integrations/actix/src/lib.rs +++ b/integrations/actix/src/lib.rs @@ -727,7 +727,7 @@ where IV: IntoView + 'static, { Box::pin(async move { - let app = if cfg!(feature = "dont-use-islands-router") { + let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() } else { app.to_html_stream_in_order() diff --git a/integrations/axum/Cargo.toml b/integrations/axum/Cargo.toml index 482acc262a..09f387020f 100644 --- a/integrations/axum/Cargo.toml +++ b/integrations/axum/Cargo.toml @@ -36,7 +36,7 @@ tokio = { version = "1.43", features = ["net", "rt-multi-thread"] } [features] wasm = [] default = ["tokio/fs", "tokio/sync", "tower-http/fs", "tower/util"] -dont-use-islands-router = [] +islands-router = [] tracing = ["dep:tracing"] [package.metadata.docs.rs] diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index 00924a3e8c..6dd397ec6e 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -775,7 +775,7 @@ where _ = replace_blocks; // TODO handle_response(additional_context, app_fn, |app, chunks| { Box::pin(async move { - let app = if cfg!(feature = "dont-use-islands-router") { + let app = if cfg!(feature = "islands-router") { app.to_html_stream_out_of_order_branching() } else { app.to_html_stream_out_of_order() @@ -839,7 +839,7 @@ where IV: IntoView + 'static, { handle_response(additional_context, app_fn, |app, chunks| { - let app = if cfg!(feature = "dont-use-islands-router") { + let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() } else { app.to_html_stream_in_order() @@ -1056,7 +1056,7 @@ where { handle_response(additional_context, app_fn, |app, chunks| { Box::pin(async move { - let app = if cfg!(feature = "dont-use-islands-router") { + let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() } else { app.to_html_stream_in_order() @@ -1132,7 +1132,7 @@ where IV: IntoView + 'static, { Box::pin(async move { - let app = if cfg!(feature = "dont-use-islands-router") { + let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() } else { app.to_html_stream_in_order() From b85302dd80b60acac83f1a4a5cc1a7266f8315ff Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Mon, 27 Jan 2025 20:40:25 -0500 Subject: [PATCH 07/15] revert changes to ssr_modes_axum --- examples/ssr_modes_axum/Cargo.toml | 2 - examples/ssr_modes_axum/src/app.rs | 315 +++++++++++++++++++++-- examples/tailwind_axum/package-lock.json | 22 ++ examples/tailwind_axum/src/style.css | 69 +++++ 4 files changed, 381 insertions(+), 27 deletions(-) create mode 100644 examples/tailwind_axum/package-lock.json create mode 100644 examples/tailwind_axum/src/style.css diff --git a/examples/ssr_modes_axum/Cargo.toml b/examples/ssr_modes_axum/Cargo.toml index 78bf396747..2fc4130057 100644 --- a/examples/ssr_modes_axum/Cargo.toml +++ b/examples/ssr_modes_axum/Cargo.toml @@ -29,8 +29,6 @@ tokio = { version = "1.39", features = [ "time", ], optional = true } wasm-bindgen = "0.2.93" -gloo-timers = { version = "0.3.0", features = ["futures"] } -send_wrapper = { version = "0.6.0", features = ["futures"] } [features] hydrate = ["leptos/hydrate"] diff --git a/examples/ssr_modes_axum/src/app.rs b/examples/ssr_modes_axum/src/app.rs index bab5bbedba..37dbe3801c 100644 --- a/examples/ssr_modes_axum/src/app.rs +++ b/examples/ssr_modes_axum/src/app.rs @@ -32,36 +32,301 @@ pub fn shell(options: LeptosOptions) -> impl IntoView { } } +#[cfg(feature = "ssr")] +static IS_ADMIN: AtomicBool = AtomicBool::new(true); + +#[server] +pub async fn is_admin() -> Result<bool, ServerFnError> { + Ok(IS_ADMIN.load(Ordering::Relaxed)) +} + +#[server] +pub async fn set_is_admin(is_admin: bool) -> Result<(), ServerFnError> { + IS_ADMIN.store(is_admin, Ordering::Relaxed); + Ok(()) +} + #[component] pub fn App() -> impl IntoView { - let count = RwSignal::new(2); - let posts = Resource::new( - move || count.get(), - |count| async move { - if count % 2 == 0 { - (0..count).collect::<Vec<_>>() - } else { - vec![] - } - }, + // Provides context that manages stylesheets, titles, meta tags, etc. + provide_meta_context(); + let fallback = || view! { "Page not found." }.into_view(); + let toggle_admin = ServerAction::<SetIsAdmin>::new(); + let is_admin = + Resource::new(move || toggle_admin.version().get(), |_| is_admin()); + + view! { + <Stylesheet id="leptos" href="/pkg/ssr_modes.css"/> + <Title text="Welcome to Leptos"/> + <Meta name="color-scheme" content="dark light"/> + <Router> + <nav> + <a href="/">"Home"</a> + <a href="/admin">"Admin"</a> + <Transition> + <ActionForm action=toggle_admin> + <input + type="hidden" + name="is_admin" + value=move || { + (!is_admin.get().and_then(|n| n.ok()).unwrap_or_default()) + .to_string() + } + /> + + <button> + {move || { + if is_admin.get().and_then(Result::ok).unwrap_or_default() { + "Log Out" + } else { + "Log In" + } + }} + + </button> + </ActionForm> + </Transition> + </nav> + <main> + <FlatRoutes fallback> + // We’ll load the home page with out-of-order streaming and <Suspense/> + <Route path=StaticSegment("") view=HomePage/> + + // We'll load the posts with async rendering, so they can set + // the title and metadata *after* loading the data + <Route + path=(StaticSegment("post"), ParamSegment("id")) + view=Post + ssr=SsrMode::Async + /> + <Route + path=(StaticSegment("post_in_order"), ParamSegment("id")) + view=Post + ssr=SsrMode::InOrder + /> + <Route + path=(StaticSegment("post_partially_blocked"), ParamSegment("id")) + view=Post + /> + <ProtectedRoute + path=StaticSegment("admin") + view=Admin + ssr=SsrMode::Async + condition=move || is_admin.get().map(|n| n.unwrap_or(false)) + redirect_path=|| "/" + /> + </FlatRoutes> + </main> + </Router> + } +} + +#[component] +fn HomePage() -> impl IntoView { + // load the posts + let posts = Resource::new(|| (), |_| list_post_metadata()); + let posts = move || { + posts + .get() + .map(|n| n.unwrap_or_default()) + .unwrap_or_default() + }; + + let posts2 = Resource::new(|| (), |_| list_post_metadata()); + let posts2 = Resource::new( + || (), + move |_| async move { posts2.await.as_ref().map(Vec::len).unwrap_or(0) }, ); view! { - <button on:click=move |_| *count.write() += 1>"+1"</button> - <p> - <Suspense fallback=|| "Loading..."> - {move || Suspend::new(async move { - let posts = posts.await; - posts - .into_iter() - .map(|post| { - view! { - <div>{post}</div> - } - }) - .collect_view() - })} + <h1>"My Great Blog"</h1> + <Suspense fallback=move || view! { <p>"Loading posts..."</p> }> + <p>"number of posts: " {Suspend::new(async move { posts2.await })}</p> + </Suspense> + <Suspense fallback=move || view! { <p>"Loading posts..."</p> }> + <ul> + <For each=posts key=|post| post.id let:post> + <li> + <a href=format!("/post/{}", post.id)>{post.title.clone()}</a> + "|" + <a href=format!( + "/post_in_order/{}", + post.id, + )>{post.title.clone()} "(in order)"</a> + "|" + <a href=format!( + "/post_partially_blocked/{}", + post.id, + )>{post.title} "(partially blocked)"</a> + </li> + </For> + </ul> + </Suspense> + } +} + +#[derive(Params, Copy, Clone, Debug, PartialEq, Eq)] +pub struct PostParams { + id: Option<usize>, +} + +#[component] +fn Post() -> impl IntoView { + let query = use_params::<PostParams>(); + let id = move || { + query.with(|q| { + q.as_ref() + .map(|q| q.id.unwrap_or_default()) + .map_err(|_| PostError::InvalidId) + }) + }; + let post_resource = Resource::new_blocking(id, |id| async move { + match id { + Err(e) => Err(e), + Ok(id) => get_post(id) + .await + .map(|data| data.ok_or(PostError::PostNotFound)) + .map_err(|_| PostError::ServerError), + } + }); + let comments_resource = Resource::new(id, |id| async move { + match id { + Err(e) => Err(e), + Ok(id) => { + get_comments(id).await.map_err(|_| PostError::ServerError) + } + } + }); + + let post_view = Suspend::new(async move { + match post_resource.await { + Ok(Ok(post)) => { + Ok(view! { + <h1>{post.title.clone()}</h1> + <p>{post.content.clone()}</p> + + // since we're using async rendering for this page, + // this metadata should be included in the actual HTML <head> + // when it's first served + <Title text=post.title/> + <Meta name="description" content=post.content/> + }) + } + _ => Err(PostError::ServerError), + } + }); + let comments_view = Suspend::new(async move { + match comments_resource.await { + Ok(comments) => Ok(view! { + <h1>"Comments"</h1> + <ul> + {comments + .into_iter() + .map(|comment| view! { <li>{comment}</li> }) + .collect_view()} + + </ul> + }), + _ => Err(PostError::ServerError), + } + }); + + view! { + <em>"The world's best content."</em> + <Suspense fallback=move || view! { <p>"Loading post..."</p> }> + <ErrorBoundary fallback=|errors| { + view! { + <div class="error"> + <h1>"Something went wrong."</h1> + <ul> + {move || { + errors + .get() + .into_iter() + .map(|(_, error)| view! { <li>{error.to_string()}</li> }) + .collect::<Vec<_>>() + }} + + </ul> + </div> + } + }>{post_view}</ErrorBoundary> </Suspense> - </p> + <Suspense fallback=move || view! { <p>"Loading comments..."</p> }>{comments_view}</Suspense> } } + +#[component] +pub fn Admin() -> impl IntoView { + view! { <p>"You can only see this page if you're logged in."</p> } +} + +// Dummy API + +static POSTS: LazyLock<[Post; 3]> = LazyLock::new(|| { + [ + Post { + id: 0, + title: "My first post".to_string(), + content: "This is my first post".to_string(), + }, + Post { + id: 1, + title: "My second post".to_string(), + content: "This is my second post".to_string(), + }, + Post { + id: 2, + title: "My third post".to_string(), + content: "This is my third post".to_string(), + }, + ] +}); + +#[derive(Error, Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PostError { + #[error("Invalid post ID.")] + InvalidId, + #[error("Post not found.")] + PostNotFound, + #[error("Server error.")] + ServerError, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +pub struct Post { + id: usize, + title: String, + content: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +pub struct PostMetadata { + id: usize, + title: String, +} + +#[server] +pub async fn list_post_metadata() -> Result<Vec<PostMetadata>, ServerFnError> { + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + Ok(POSTS + .iter() + .map(|data| PostMetadata { + id: data.id, + title: data.title.clone(), + }) + .collect()) +} + +#[server] +pub async fn get_post(id: usize) -> Result<Option<Post>, ServerFnError> { + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + Ok(POSTS.iter().find(|post| post.id == id).cloned()) +} + +#[server] +pub async fn get_comments(id: usize) -> Result<Vec<String>, ServerFnError> { + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + _ = id; + Ok(vec!["Some comment".into(), "Some other comment".into()]) +} diff --git a/examples/tailwind_axum/package-lock.json b/examples/tailwind_axum/package-lock.json new file mode 100644 index 0000000000..41f579ab16 --- /dev/null +++ b/examples/tailwind_axum/package-lock.json @@ -0,0 +1,22 @@ +{ + "name": "leptos-tailwind", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "leptos-tailwind", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^4.0.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0.tgz", + "integrity": "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ==", + "dev": true + } + } +} diff --git a/examples/tailwind_axum/src/style.css b/examples/tailwind_axum/src/style.css new file mode 100644 index 0000000000..3e0aef66ff --- /dev/null +++ b/examples/tailwind_axum/src/style.css @@ -0,0 +1,69 @@ +/*! tailwindcss v4.0.0 | MIT License | https://tailwindcss.com */ +@tailwind base; +@tailwind components; +.relative { + position: relative; +} +.m-auto { + margin: auto; +} +.flex { + display: flex; +} +.min-h-screen { + min-height: 100vh; +} +.transform { + transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y); +} +.flex-col { + flex-direction: column; +} +.flex-row-reverse { + flex-direction: row-reverse; +} +.flex-wrap { + flex-wrap: wrap; +} +.border-b-4 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 4px; +} +.border-l-2 { + border-left-style: var(--tw-border-style); + border-left-width: 2px; +} +.bg-gradient-to-tl { + --tw-gradient-position: to top left in oklab,; + background-image: linear-gradient(var(--tw-gradient-stops)); +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; + initial-value: rotateX(0); +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; + initial-value: rotateY(0); +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; + initial-value: rotateZ(0); +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; + initial-value: skewX(0); +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; + initial-value: skewY(0); +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} From 67ac5a2b888065944c9af8f93efb08d6b3594d55 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Mon, 27 Jan 2025 20:43:37 -0500 Subject: [PATCH 08/15] fix feature name --- examples/islands_router/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/islands_router/Cargo.toml b/examples/islands_router/Cargo.toml index 603bebbeac..7acfcc5737 100644 --- a/examples/islands_router/Cargo.toml +++ b/examples/islands_router/Cargo.toml @@ -14,7 +14,7 @@ leptos = { path = "../../leptos", features = ["tracing", "islands"] } leptos_router = { path = "../../router" } server_fn = { path = "../../server_fn", features = ["serde-lite"] } leptos_axum = { path = "../../integrations/axum", features = [ - "dont-use-islands-router", + "islands-router", ], optional = true } log = "0.4.22" serde = { version = "1.0", features = ["derive"] } From c5cbb39d9245c9b35bb919370169fd58f102ae85 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Fri, 21 Feb 2025 18:51:45 +0000 Subject: [PATCH 09/15] omit hydration scripts on subsequent navigations (minimize payload size) --- integrations/actix/src/lib.rs | 8 +++++ integrations/axum/src/lib.rs | 7 +++++ leptos/src/hydration/islands_routing.js | 12 +++++++- leptos/src/hydration/mod.rs | 40 +++++++++++++++++-------- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/integrations/actix/src/lib.rs b/integrations/actix/src/lib.rs index 9787fe9e75..6dc9ca89f5 100644 --- a/integrations/actix/src/lib.rs +++ b/integrations/actix/src/lib.rs @@ -23,6 +23,7 @@ use hydration_context::SsrSharedContext; use leptos::{ config::LeptosOptions, context::{provide_context, use_context}, + hydration::IslandsRouterNavigation, prelude::expect_context, reactive::{computed::ScopedFuture, owner::Owner}, IntoView, @@ -784,6 +785,9 @@ where let add_context = additional_context.clone(); async move { + let is_island_router_navigation = cfg!(feature = "islands-router") + && req.headers().get("Islands-Router").is_some(); + let res_options = ResponseOptions::default(); let (meta_context, meta_output) = ServerMetaContext::new(); @@ -794,6 +798,10 @@ where move || { provide_contexts(req, &meta_context, &res_options); add_context(); + + if is_island_router_navigation { + provide_context(IslandsRouterNavigation); + } } }; diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index 6dd397ec6e..ceb1ace6f3 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -885,6 +885,9 @@ where IV: IntoView + 'static, { Box::pin(async move { + let is_island_router_navigation = cfg!(feature = "islands-router") + && req.headers().get("Islands-Router").is_some(); + let add_context = additional_context.clone(); let res_options = ResponseOptions::default(); let (meta_context, meta_output) = ServerMetaContext::new(); @@ -906,6 +909,10 @@ where res_options.clone(), ); add_context(); + + if is_island_router_navigation { + provide_context(IslandsRouterNavigation); + } } }; diff --git a/leptos/src/hydration/islands_routing.js b/leptos/src/hydration/islands_routing.js index 7406c8071c..5b140d1d5f 100644 --- a/leptos/src/hydration/islands_routing.js +++ b/leptos/src/hydration/islands_routing.js @@ -26,10 +26,20 @@ window.addEventListener("submit", async (ev) => { await navigateToPage(req, true); }); -async function navigateToPage(req, useViewTransition, replace) { +async function navigateToPage( + /** @type Request */ + req, + /** @type bool */ + useViewTransition, + /** @type bool */ + replace +) { NAVIGATION += 1; const currentNav = NAVIGATION; + // add a custom header to indicate that we're on a subsequent navigation + req.headers.append("Islands-Router", "true"); + // fetch the new page const resp = await fetch(req); const redirected = resp.redirected; diff --git a/leptos/src/hydration/mod.rs b/leptos/src/hydration/mod.rs index f3232d29b5..9778b395a5 100644 --- a/leptos/src/hydration/mod.rs +++ b/leptos/src/hydration/mod.rs @@ -107,17 +107,31 @@ pub fn HydrationScripts( .unwrap_or_default(); let root = root.unwrap_or_default(); - view! { - <link rel="modulepreload" href=format!("{root}/{pkg_path}/{js_file_name}.js") nonce=nonce.clone()/> - <link - rel="preload" - href=format!("{root}/{pkg_path}/{wasm_file_name}.wasm") - r#as="fetch" - r#type="application/wasm" - crossorigin=nonce.clone().unwrap_or_default() - /> - <script type="module" nonce=nonce> - {format!("{script}({root:?}, {pkg_path:?}, {js_file_name:?}, {wasm_file_name:?});{islands_router}")} - </script> - } + use_context::<IslandsRouterNavigation>().is_none().then(|| { + view! { + <link rel="modulepreload" href=format!("{root}/{pkg_path}/{js_file_name}.js") nonce=nonce.clone()/> + <link + rel="preload" + href=format!("{root}/{pkg_path}/{wasm_file_name}.wasm") + r#as="fetch" + r#type="application/wasm" + crossorigin=nonce.clone().unwrap_or_default() + /> + <script type="module" nonce=nonce> + {format!("{script}({root:?}, {pkg_path:?}, {js_file_name:?}, {wasm_file_name:?});{islands_router}")} + </script> + } + }) } + +/// If this is provided via context, it means that you are using the islands router and +/// this is a subsequent navigation, made from the client. +/// +/// This should be provided automatically by a server integration if it detects that the +/// header `Islands-Router` is present in the request. +/// +/// This is used to determine how much of the hydration script to include in the page. +/// If it is present, then the contents of the `<HydrationScripts>` component will not be +/// included, as they only need to be sent to the client once. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct IslandsRouterNavigation; From 65e04abd00a97db618fb247708756b5737eadbfa Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Fri, 21 Feb 2025 14:18:37 -0500 Subject: [PATCH 10/15] support using islands router with OOO streaming pages (by converting them to in-order) --- examples/islands_router/src/app.rs | 10 +-- integrations/actix/src/lib.rs | 52 +++++++++--- integrations/axum/src/lib.rs | 131 ++++++++++++++++------------- integrations/utils/src/lib.rs | 18 +++- 4 files changed, 131 insertions(+), 80 deletions(-) diff --git a/examples/islands_router/src/app.rs b/examples/islands_router/src/app.rs index f43dd020e9..ea72fcf33f 100644 --- a/examples/islands_router/src/app.rs +++ b/examples/islands_router/src/app.rs @@ -5,7 +5,7 @@ use leptos::{ use leptos_router::{ components::{Route, Router, Routes}, hooks::{use_params_map, use_query_map}, - path, SsrMode, + path, }; use serde::{Deserialize, Serialize}; @@ -41,9 +41,9 @@ pub fn App() -> impl IntoView { </nav> <main> <Routes fallback=|| "Not found."> - <Route path=path!("") view=Home ssr=SsrMode::Async/> - <Route path=path!("user/:id") view=Details ssr=SsrMode::Async/> - <Route path=path!("about") view=About ssr=SsrMode::Async/> + <Route path=path!("") view=Home/> + <Route path=path!("user/:id") view=Details/> + <Route path=path!("about") view=About/> </Routes> </main> </Router> @@ -142,7 +142,7 @@ pub fn Home() -> impl IntoView { <input type="search" name="q" value=q autofocus oninput="this.form.requestSubmit()"/> <input type="submit"/> </form> - <Suspense>{view}</Suspense> + <Suspense fallback=|| view! { <p>"Loading..."</p> }>{view}</Suspense> </section> } } diff --git a/integrations/actix/src/lib.rs b/integrations/actix/src/lib.rs index 6dc9ca89f5..ca7a687cc5 100644 --- a/integrations/actix/src/lib.rs +++ b/integrations/actix/src/lib.rs @@ -655,12 +655,27 @@ where IV: IntoView + 'static, { _ = replace_blocks; // TODO - handle_response(method, additional_context, app_fn, |app, chunks| { - Box::pin(async move { - Box::pin(app.to_html_stream_out_of_order().chain(chunks())) - as PinnedStream<String> - }) - }) + handle_response( + method, + additional_context, + app_fn, + |app, chunks, supports_ooo| { + Box::pin(async move { + let app = if cfg!(feature = "islands-router") { + if supports_ooo { + app.to_html_stream_out_of_order_branching() + } else { + app.to_html_stream_in_order_branching() + } + } else if supports_ooo { + app.to_html_stream_out_of_order() + } else { + app.to_html_stream_in_order() + }; + Box::pin(app.chain(chunks())) as PinnedStream<String> + }) + }, + ) } /// Returns an Actix [struct@Route](actix_web::Route) that listens for a `GET` request and tries @@ -686,12 +701,21 @@ pub fn render_app_to_stream_in_order_with_context<IV>( where IV: IntoView + 'static, { - handle_response(method, additional_context, app_fn, |app, chunks| { - Box::pin(async move { - Box::pin(app.to_html_stream_in_order().chain(chunks())) - as PinnedStream<String> - }) - }) + handle_response( + method, + additional_context, + app_fn, + |app, chunks, _supports_ooo| { + Box::pin(async move { + let app = if cfg!(feature = "islands-router") { + app.to_html_stream_in_order_branching() + } else { + app.to_html_stream_in_order() + }; + Box::pin(app.chain(chunks())) as PinnedStream<String> + }) + }, + ) } /// Returns an Actix [struct@Route](actix_web::Route) that listens for a `GET` request and tries @@ -723,6 +747,7 @@ where fn async_stream_builder<IV>( app: IV, chunks: BoxedFnOnce<PinnedStream<String>>, + _supports_ooo: bool, ) -> PinnedFuture<PinnedStream<String>> where IV: IntoView + 'static, @@ -775,6 +800,7 @@ fn handle_response<IV>( stream_builder: fn( IV, BoxedFnOnce<PinnedStream<String>>, + bool, ) -> PinnedFuture<PinnedStream<String>>, ) -> Route where @@ -811,6 +837,7 @@ where additional_context, res_options, stream_builder, + !is_island_router_navigation, ) .await; @@ -1101,6 +1128,7 @@ impl StaticRouteGenerator { app_fn.clone(), additional_context, async_stream_builder, + false, ); let sc = owner.shared_context().unwrap(); diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index ceb1ace6f3..9ce5801313 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -773,12 +773,18 @@ where IV: IntoView + 'static, { _ = replace_blocks; // TODO - handle_response(additional_context, app_fn, |app, chunks| { + handle_response(additional_context, app_fn, |app, chunks, supports_ooo| { Box::pin(async move { let app = if cfg!(feature = "islands-router") { - app.to_html_stream_out_of_order_branching() - } else { + if supports_ooo { + app.to_html_stream_out_of_order_branching() + } else { + app.to_html_stream_in_order_branching() + } + } else if supports_ooo { app.to_html_stream_out_of_order() + } else { + app.to_html_stream_in_order() }; Box::pin(app.chain(chunks())) as PinnedStream<String> }) @@ -838,7 +844,7 @@ pub fn render_app_to_stream_in_order_with_context<IV>( where IV: IntoView + 'static, { - handle_response(additional_context, app_fn, |app, chunks| { + handle_response(additional_context, app_fn, |app, chunks, _supports_ooo| { let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() } else { @@ -856,6 +862,7 @@ fn handle_response<IV>( stream_builder: fn( IV, BoxedFnOnce<PinnedStream<String>>, + bool, ) -> PinnedFuture<PinnedStream<String>>, ) -> impl Fn(Request<Body>) -> PinnedFuture<Response<Body>> + Clone @@ -879,6 +886,7 @@ fn handle_response_inner<IV>( stream_builder: fn( IV, BoxedFnOnce<PinnedStream<String>>, + bool, ) -> PinnedFuture<PinnedStream<String>>, ) -> PinnedFuture<Response<Body>> where @@ -922,6 +930,7 @@ where additional_context, res_options, stream_builder, + !is_island_router_navigation, ) .await; @@ -1061,7 +1070,7 @@ pub fn render_app_async_stream_with_context<IV>( where IV: IntoView + 'static, { - handle_response(additional_context, app_fn, |app, chunks| { + handle_response(additional_context, app_fn, |app, chunks, _supports_ooo| { Box::pin(async move { let app = if cfg!(feature = "islands-router") { app.to_html_stream_in_order_branching() @@ -1134,6 +1143,7 @@ where fn async_stream_builder<IV>( app: IV, chunks: BoxedFnOnce<PinnedStream<String>>, + _supports_ooo: bool, ) -> PinnedFuture<PinnedStream<String>> where IV: IntoView + 'static, @@ -1412,6 +1422,7 @@ impl StaticRouteGenerator { app_fn.clone(), additional_context, async_stream_builder, + false, ); let sc = owner.shared_context().unwrap(); @@ -1844,64 +1855,64 @@ where } } else { router.route( - path, - match listing.mode() { - SsrMode::OutOfOrder => { - let s = render_app_to_stream_with_context( - cx_with_state_and_method.clone(), - app_fn.clone(), - ); - match method { - leptos_router::Method::Get => get(s), - leptos_router::Method::Post => post(s), - leptos_router::Method::Put => put(s), - leptos_router::Method::Delete => delete(s), - leptos_router::Method::Patch => patch(s), + path, + match listing.mode() { + SsrMode::OutOfOrder => { + let s = render_app_to_stream_with_context( + cx_with_state_and_method.clone(), + app_fn.clone(), + ); + match method { + leptos_router::Method::Get => get(s), + leptos_router::Method::Post => post(s), + leptos_router::Method::Put => put(s), + leptos_router::Method::Delete => delete(s), + leptos_router::Method::Patch => patch(s), + } } - } - SsrMode::PartiallyBlocked => { - let s = render_app_to_stream_with_context_and_replace_blocks( - cx_with_state_and_method.clone(), - app_fn.clone(), - true - ); - match method { - leptos_router::Method::Get => get(s), - leptos_router::Method::Post => post(s), - leptos_router::Method::Put => put(s), - leptos_router::Method::Delete => delete(s), - leptos_router::Method::Patch => patch(s), + SsrMode::PartiallyBlocked => { + let s = render_app_to_stream_with_context_and_replace_blocks( + cx_with_state_and_method.clone(), + app_fn.clone(), + true + ); + match method { + leptos_router::Method::Get => get(s), + leptos_router::Method::Post => post(s), + leptos_router::Method::Put => put(s), + leptos_router::Method::Delete => delete(s), + leptos_router::Method::Patch => patch(s), + } } - } - SsrMode::InOrder => { - let s = render_app_to_stream_in_order_with_context( - cx_with_state_and_method.clone(), - app_fn.clone(), - ); - match method { - leptos_router::Method::Get => get(s), - leptos_router::Method::Post => post(s), - leptos_router::Method::Put => put(s), - leptos_router::Method::Delete => delete(s), - leptos_router::Method::Patch => patch(s), + SsrMode::InOrder => { + let s = render_app_to_stream_in_order_with_context( + cx_with_state_and_method.clone(), + app_fn.clone(), + ); + match method { + leptos_router::Method::Get => get(s), + leptos_router::Method::Post => post(s), + leptos_router::Method::Put => put(s), + leptos_router::Method::Delete => delete(s), + leptos_router::Method::Patch => patch(s), + } } - } - SsrMode::Async => { - let s = render_app_async_with_context( - cx_with_state_and_method.clone(), - app_fn.clone(), - ); - match method { - leptos_router::Method::Get => get(s), - leptos_router::Method::Post => post(s), - leptos_router::Method::Put => put(s), - leptos_router::Method::Delete => delete(s), - leptos_router::Method::Patch => patch(s), + SsrMode::Async => { + let s = render_app_async_with_context( + cx_with_state_and_method.clone(), + app_fn.clone(), + ); + match method { + leptos_router::Method::Get => get(s), + leptos_router::Method::Post => post(s), + leptos_router::Method::Put => put(s), + leptos_router::Method::Delete => delete(s), + leptos_router::Method::Patch => patch(s), + } } - } - _ => unreachable!() - }, - ) + _ => unreachable!() + }, + ) }; } } @@ -2035,7 +2046,7 @@ where }, move || shell(options), req, - |app, chunks| { + |app, chunks, _supports_ooo| { Box::pin(async move { let app = app .to_html_stream_in_order() diff --git a/integrations/utils/src/lib.rs b/integrations/utils/src/lib.rs index 666e3c67de..311f5d5307 100644 --- a/integrations/utils/src/lib.rs +++ b/integrations/utils/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(clippy::type_complexity)] + use futures::{stream::once, Stream, StreamExt}; use hydration_context::{SharedContext, SsrSharedContext}; use leptos::{ @@ -31,14 +33,20 @@ pub trait ExtendResponse: Sized { stream_builder: fn( IV, BoxedFnOnce<PinnedStream<String>>, + bool, ) -> PinnedFuture<PinnedStream<String>>, + supports_ooo: bool, ) -> impl Future<Output = Self> + Send where IV: IntoView + 'static, { async move { - let (owner, stream) = - build_response(app_fn, additional_context, stream_builder); + let (owner, stream) = build_response( + app_fn, + additional_context, + stream_builder, + supports_ooo, + ); let sc = owner.shared_context().unwrap(); @@ -94,7 +102,11 @@ pub fn build_response<IV>( stream_builder: fn( IV, BoxedFnOnce<PinnedStream<String>>, + // this argument indicates whether a request wants to support out-of-order streaming + // responses + bool, ) -> PinnedFuture<PinnedStream<String>>, + is_islands_router_navigation: bool, ) -> (Owner, PinnedFuture<PinnedStream<String>>) where IV: IntoView + 'static, @@ -138,7 +150,7 @@ where // // we also don't actually start hydrating until after the whole stream is complete, // so it's not useful to send those scripts down earlier. - stream_builder(app, chunks) + stream_builder(app, chunks, is_islands_router_navigation) }); stream.await From 5eeafef1c1714e557ea41cf09590ae7c4fcc6702 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Fri, 21 Feb 2025 14:37:07 -0500 Subject: [PATCH 11/15] this is not a thing --- leptos/src/hydration/islands_routing.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/leptos/src/hydration/islands_routing.js b/leptos/src/hydration/islands_routing.js index 5b140d1d5f..db1a58e01c 100644 --- a/leptos/src/hydration/islands_routing.js +++ b/leptos/src/hydration/islands_routing.js @@ -156,7 +156,6 @@ function submitToReq(ev) { requestInit.body = params; } - return new Request( path, requestInit @@ -167,7 +166,6 @@ function submitToReq(ev) { function diffPages(htmlString) { // Use DOMParser to parse the HTML string const parser = new DOMParser(); - // TODO parse from the request stream instead? const doc = parser.parseFromString(htmlString, 'text/html'); const oldDocWalker = document.createTreeWalker(document); From 433423047017375664498c34df76c11fe86ddcc1 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Wed, 26 Feb 2025 20:18:56 -0500 Subject: [PATCH 12/15] clean up --- router/src/flat_router.rs | 19 ++++++++++++++++--- tachys/src/view/any_view.rs | 10 ---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/router/src/flat_router.rs b/router/src/flat_router.rs index f0536f504b..c2c348d3ef 100644 --- a/router/src/flat_router.rs +++ b/router/src/flat_router.rs @@ -391,12 +391,13 @@ impl AddAnyAttr for MatchedRoute { Self::Output<NewAttr>: RenderHtml, { let MatchedRoute(id, view) = self; - MatchedRoute(id, view.add_any_attr(attr)) + MatchedRoute(id, view.add_any_attr(attr).into_any()) } } impl RenderHtml for MatchedRoute { type AsyncOutput = Self; + type Owned = Self; const MIN_LENGTH: usize = 0; fn dry_resolve(&mut self) { @@ -415,12 +416,18 @@ impl RenderHtml for MatchedRoute { position: &mut Position, escape: bool, mark_branches: bool, + extra_attrs: Vec<AnyAttribute>, ) { if mark_branches { buf.open_branch(&self.0); } - self.1 - .to_html_with_buf(buf, position, escape, mark_branches); + self.1.to_html_with_buf( + buf, + position, + escape, + mark_branches, + extra_attrs, + ); if mark_branches { buf.close_branch(&self.0); } @@ -432,6 +439,7 @@ impl RenderHtml for MatchedRoute { position: &mut Position, escape: bool, mark_branches: bool, + extra_attrs: Vec<AnyAttribute>, ) where Self: Sized, { @@ -443,6 +451,7 @@ impl RenderHtml for MatchedRoute { position, escape, mark_branches, + extra_attrs, ); if mark_branches { buf.close_branch(&self.0); @@ -456,6 +465,10 @@ impl RenderHtml for MatchedRoute { ) -> Self::State { self.1.hydrate::<FROM_SERVER>(cursor, position) } + + fn into_owned(self) -> Self::Owned { + self + } } impl<Loc, Defs, FalFn, Fal> FlatRoutesView<Loc, Defs, FalFn> diff --git a/tachys/src/view/any_view.rs b/tachys/src/view/any_view.rs index f9134604fe..f1a0fc2470 100644 --- a/tachys/src/view/any_view.rs +++ b/tachys/src/view/any_view.rs @@ -67,7 +67,6 @@ pub struct AnyView { #[cfg(feature = "ssr")] dry_resolve: fn(&mut Erased), #[cfg(feature = "hydrate")] - #[cfg(feature = "hydrate")] #[allow(clippy::type_complexity)] hydrate_from_server: fn(Erased, &Cursor, &PositionState) -> AnyViewState, } @@ -79,15 +78,6 @@ impl Debug for AnyView { .finish_non_exhaustive() } } - -impl Debug for AnyView { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("AnyView") - .field("type_id", &self.type_id) - .finish_non_exhaustive() - } -} - /// Retained view state for [`AnyView`]. pub struct AnyViewState { type_id: TypeId, From 258282dae00b9daf19450629a0ee1762f1e396e4 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Wed, 26 Feb 2025 20:19:49 -0500 Subject: [PATCH 13/15] chore: clippy --- integrations/actix/src/lib.rs | 1 + leptos/src/callback.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/integrations/actix/src/lib.rs b/integrations/actix/src/lib.rs index ca7a687cc5..b1aef24f10 100644 --- a/integrations/actix/src/lib.rs +++ b/integrations/actix/src/lib.rs @@ -793,6 +793,7 @@ fn leptos_corrected_path(req: &HttpRequest) -> String { } } +#[allow(clippy::type_complexity)] fn handle_response<IV>( method: Method, additional_context: impl Fn() + 'static + Clone + Send, diff --git a/leptos/src/callback.rs b/leptos/src/callback.rs index 6702b21ef8..4daf12da9c 100644 --- a/leptos/src/callback.rs +++ b/leptos/src/callback.rs @@ -316,7 +316,7 @@ mod tests { #[test] fn callback_matches_same() { let callback1 = Callback::new(|x: i32| x * 2); - let callback2 = callback1.clone(); + let callback2 = callback1; assert!(callback1.matches(&callback2)); } @@ -330,7 +330,7 @@ mod tests { #[test] fn unsync_callback_matches_same() { let callback1 = UnsyncCallback::new(|x: i32| x * 2); - let callback2 = callback1.clone(); + let callback2 = callback1; assert!(callback1.matches(&callback2)); } From 788bb8fb226c62c628322a9c08a969f4184990ee Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Wed, 26 Feb 2025 20:57:57 -0500 Subject: [PATCH 14/15] feat: include diffing for For rows --- leptos/src/hydration/islands_routing.js | 43 +++++++++++++++++-------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/leptos/src/hydration/islands_routing.js b/leptos/src/hydration/islands_routing.js index db1a58e01c..e77d45354f 100644 --- a/leptos/src/hydration/islands_routing.js +++ b/leptos/src/hydration/islands_routing.js @@ -168,14 +168,23 @@ function diffPages(htmlString) { const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); - const oldDocWalker = document.createTreeWalker(document); - const newDocWalker = doc.createTreeWalker(doc); + diffRange(document, document, doc, doc); +} + +function diffRange(oldDocument, oldRoot, newDocument, newRoot, oldEnd, newEnd) { + const oldDocWalker = oldDocument.createTreeWalker(oldRoot); + const newDocWalker = newDocument.createTreeWalker(newRoot); let oldNode = oldDocWalker.currentNode; let newNode = newDocWalker.currentNode; - while(oldDocWalker.nextNode() && newDocWalker.nextNode()) { + + while (oldDocWalker.nextNode() && newDocWalker.nextNode()) { oldNode = oldDocWalker.currentNode; newNode = newDocWalker.currentNode; + if (oldNode == oldEnd || newNode == newEnd) { + break; + } + // if the nodes are different, we need to replace the old with the new // because of the typed view tree, this should never actually happen if (oldNode.nodeType !== newNode.nodeType) { @@ -197,16 +206,19 @@ function diffPages(htmlString) { const oldText = oldNode.textContent; const newText = newNode.textContent; if(oldText.startsWith("bo-for")) { - replaceFor(oldDocWalker, newDocWalker, oldNode, newNode); + replaceFor(oldDocument, oldDocWalker, newDocument, newDocWalker, oldNode, newNode); } - if(oldText.startsWith("bo") && newText !== oldText) { + else if (oldText.startsWith("bo-item")) { + // skip, this means we're diffing a new item within a For + } + else if(oldText.startsWith("bo") && newText !== oldText) { replaceBranch(oldDocWalker, newDocWalker, oldNode, newNode); } } } } -function replaceFor(oldDocWalker, newDocWalker, oldNode, newNode) { +function replaceFor(oldDocument, oldDocWalker, newDocument, newDocWalker, oldNode, newNode) { oldDocWalker.nextNode(); newDocWalker.nextNode(); const oldRange = new Range(); @@ -258,23 +270,28 @@ function replaceFor(oldDocWalker, newDocWalker, oldNode, newNode) { for(const key in oldKeys) { if(newKeys[key]) { - // replace the item in the *new* list with the *old* DOM elements const oldOne = oldKeys[key]; const newOne = newKeys[key]; const oldRange = new Range(); const newRange = new Range(); + + // then replace the item in the *new* list with the *old* DOM elements oldRange.setStartAfter(oldOne.open); oldRange.setEndBefore(oldOne.close); newRange.setStartAfter(newOne.open); newRange.setEndBefore(newOne.close); - const newContents = oldRange.extractContents(); - newRange.deleteContents(); - newRange.insertNode(newContents); + const oldContents = oldRange.extractContents(); + const newContents = newRange.extractContents(); + + // patch the *old* DOM elements with the new ones + diffRange(oldDocument, oldContents, newDocument, newContents, oldOne.close, newOne.close); + + // then insert the old DOM elements into the new tree + // this means you'll end up with any new attributes or content from the server, + // but with any old DOM state (because they are the old elements) + newRange.insertNode(oldContents); newOne.open.replaceWith(oldOne.open); newOne.close.replaceWith(oldOne.close); - - // then diff the *old* DOM elements with the new ones - // (TODO) } } From a57020523d6ab15f296e3c831ae73201daab6833 Mon Sep 17 00:00:00 2001 From: Greg Johnston <greg.johnston@gmail.com> Date: Thu, 27 Feb 2025 16:58:19 -0500 Subject: [PATCH 15/15] chore: remove unnecessary Debug bound --- router/src/components.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/router/src/components.rs b/router/src/components.rs index 583141bfee..7c3b3f49ba 100644 --- a/router/src/components.rs +++ b/router/src/components.rs @@ -347,7 +347,7 @@ pub fn Route<Segments, View>( ) -> <NestedRoute<Segments, (), (), View> as IntoMaybeErased>::Output where View: ChooseView + Clone + 'static, - Segments: PossibleRouteMatch + Debug + Clone + Send + 'static, + Segments: PossibleRouteMatch + Clone + Send + 'static, { NestedRoute::new(path, view) .ssr_mode(ssr) @@ -375,7 +375,7 @@ pub fn ParentRoute<Segments, View, Children>( where View: ChooseView + Clone + 'static, Children: MatchNestedRoutes + Send + Clone + 'static, - Segments: PossibleRouteMatch + Debug + Clone + Send + 'static, + Segments: PossibleRouteMatch + Clone + Send + 'static, { let children = children.into_inner(); NestedRoute::new(path, view) @@ -414,7 +414,7 @@ macro_rules! define_protected_route { ssr: SsrMode, ) -> $ret where - Segments: PossibleRouteMatch + Debug + Clone + Send + 'static, + Segments: PossibleRouteMatch + Clone + Send + 'static, ViewFn: Fn() -> View + Send + Clone + 'static, View: IntoView + 'static, C: Fn() -> Option<bool> + Send + Clone + 'static, @@ -495,7 +495,7 @@ macro_rules! define_protected_parent_route { ssr: SsrMode, ) -> $ret where - Segments: PossibleRouteMatch + Debug + Clone + Send + 'static, + Segments: PossibleRouteMatch + Clone + Send + 'static, Children: MatchNestedRoutes + Send + Clone + 'static, ViewFn: Fn() -> View + Send + Clone + 'static, View: IntoView + 'static,