diff --git a/_bibliography/bittorrent.bib b/_bibliography/bittorrent.bib deleted file mode 100644 index a67d09b..0000000 --- a/_bibliography/bittorrent.bib +++ /dev/null @@ -1,56 +0,0 @@ -@article{DBLP:journals/sigops/DemersGHILSSST88, - author = {Alan J. Demers and - Daniel H. Greene and - Carl Hauser and - Wes Irish and - John Larson and - Scott Shenker and - Howard E. Sturgis and - Daniel C. Swinehart and - Douglas B. Terry}, - title = {Epidemic Algorithms for Replicated Database Maintenance}, - journal = {{ACM} {SIGOPS} Oper. Syst. Rev.}, - volume = {22}, - number = {1}, - pages = {8--32}, - year = {1988}, - url = {https://doi.org/10.1145/43921.43922}, - doi = {10.1145/43921.43922}, - timestamp = {Tue, 14 Jul 2020 14:25:20 +0200}, - biburl = {https://dblp.org/rec/journals/sigops/DemersGHILSSST88.bib}, - bibsource = {dblp computer science bibliography, https://dblp.org} -} - - - -@inproceedings{DBLP:conf/infocom/BharambeHP06, - author = {Ashwin R. Bharambe and - Cormac Herley and - Venkata N. Padmanabhan}, - title = {Analyzing and Improving a BitTorrent Networks Performance Mechanisms}, - booktitle = {{INFOCOM} 2006. 25th {IEEE} International Conference on Computer Communications, - Joint Conference of the {IEEE} Computer and Communications Societies, - 23-29 April 2006, Barcelona, Catalunya, Spain}, - year = {2006}, - crossref = {DBLP:conf/infocom/2006}, - url = {https://doi.org/10.1109/INFOCOM.2006.328}, - doi = {10.1109/INFOCOM.2006.328}, - timestamp = {Wed, 16 Oct 2019 14:14:51 +0200}, - biburl = {https://dblp.org/rec/conf/infocom/BharambeHP06.bib}, - bibsource = {dblp computer science bibliography, https://dblp.org} -} - -@proceedings{DBLP:conf/infocom/2006, - title = {{INFOCOM} 2006. 25th {IEEE} International Conference on Computer Communications, - Joint Conference of the {IEEE} Computer and Communications Societies, - 23-29 April 2006, Barcelona, Catalunya, Spain}, - publisher = {{IEEE}}, - year = {2006}, - url = {https://ieeexplore.ieee.org/xpl/conhome/4146652/proceeding}, - isbn = {1-4244-0221-2}, - timestamp = {Wed, 16 Oct 2019 14:14:51 +0200}, - biburl = {https://dblp.org/rec/conf/infocom/2006.bib}, - bibsource = {dblp computer science bibliography, https://dblp.org} -} - - diff --git a/_bibliography/ieee-with-url.csl b/_bibliography/ieee-with-url.csl deleted file mode 100644 index 0cd5f8c..0000000 --- a/_bibliography/ieee-with-url.csl +++ /dev/null @@ -1,346 +0,0 @@ - - diff --git a/_bibliography/references.bib b/_bibliography/references.bib deleted file mode 100644 index e69de29..0000000 diff --git a/_bibliography/stopcovid.bib b/_bibliography/stopcovid.bib deleted file mode 100644 index efc9a86..0000000 --- a/_bibliography/stopcovid.bib +++ /dev/null @@ -1,440 +0,0 @@ ---- ---- - -@misc{noauthor_coronavirus_2020, - title = {Coronavirus : le gouvernement prépare une application mobile pour enrayer l'épidémie}, - shorttitle = {Coronavirus}, - url = {https://www.lesechos.fr/tech-medias/hightech/coronavirus-le-gouvernement-prepare-une-application-mobile-pour-enrayer-lepidemie-1190749}, - abstract = {Les autorités françaises travaillent sur une application mobile pour avertir les personnes d'un risque individuel de contagion. Pour respecter la vie privée, la France s'inspire du suivi des contacts par Bluetooth mis en place à Singapour.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Les Echos}, - month = mar, - year = {2020}, - note = {Library Catalog: www.lesechos.fr -Section: Tech - Médias}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/7QJW976X/coronavirus-le-gouvernement-prepare-une-application-mobile-pour-enrayer-lepidemie-1190749.html:text/html} -} - - -@misc{bembaron_ou_2020, - title = {Où en est l’application de traçage «{StopCovid}»? {La} mise au point de l’{Inria}}, - shorttitle = {Où en est l’application de traçage «{StopCovid}»?}, - url = {https://www.lefigaro.fr/secteur/high-tech/ou-en-est-l-application-de-tracage-stopcovid-la-mise-au-point-de-l-inria-20200419}, - abstract = {Dans une longue note, Bruno Sportisse, le PDG de l’Inria, apporte des précisions sur l’application qui pourrait être mise en place en France.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Figaro.fr}, - author = {Bembaron, Elsa}, - month = apr, - year = {2020}, - note = {Library Catalog: www.lefigaro.fr -Section: Tech \& Web}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/CBF53FE9/ou-en-est-l-application-de-tracage-stopcovid-la-mise-au-point-de-l-inria-20200419.html:text/html} -} - -@misc{sportisse_figaro, - title = {« {Contact} tracing » : {Bruno} {Sportisse}, {PDG} d’{Inria}, donne quelques éléments pour mieux comprendre les enjeux}, - shorttitle = {« {Contact} tracing »}, - url = {https://www.inria.fr/fr/contact-tracing-bruno-sportisse-pdg-dinria-donne-quelques-elements-pour-mieux-comprendre-les-enjeux}, - language = {fr}, - urldate = {2020-04-20}, - note = {Library Catalog: www.inria.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/RCBV5Y9M/contact-tracing-bruno-sportisse-pdg-dinria-donne-quelques-elements-pour-mieux-comprendre-les-en.html:text/html} -} - - -@misc{rimbert_jusqua_2020, - title = {Jusqu’à la prochaine fin du monde…}, - url = {https://www.monde-diplomatique.fr/2020/04/LAMBERT/61620}, - abstract = {Accès libre ⁕ en kiosques // par Renaud Lambert \& Pierre Rimbert (avril 2020)}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Monde diplomatique}, - author = {Rimbert, Renaud Lambert \& Pierre}, - month = apr, - year = {2020}, - note = {Library Catalog: www.monde-diplomatique.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/88PZBBCA/61620.html:text/html} -} - -@article{lemonde_aplatir_2020, - title = {« {Aplatir} la courbe » des contaminations de {Covid}-19 sera l’enjeu des semaines à venir}, - url = {https://www.lemonde.fr/les-decodeurs/article/2020/03/13/aplatir-la-courbe-des-contaminations-du-covid-19-sera-l-enjeu-des-semaines-a-venir_6032925_4355770.html}, - abstract = {EN UN GRAPHIQUE – L’objectif affiché par les autorités françaises est désormais de limiter le plus possible la diffusion du virus pour ne pas saturer les hôpitaux.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Monde.fr}, - month = mar, - year = {2020}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/XGHCNNFB/aplatir-la-courbe-des-contaminations-du-covid-19-sera-l-enjeu-des-semaines-a-venir_6032925_4355.html:text/html} -} - - -@article{bay_bluetrace_nodate, - title = {{BlueTrace}: {A} privacy-preserving protocol for community-driven contact tracing across borders}, - abstract = {TraceTogether is the first national deployment of a Bluetooth-based contact tracing system in the world. It was developed by Singapore’s Government Technology Agency and the Ministry of Health to help the country better respond to epidemics. Following its release, more than 50 governments have expressed interest in adopting or adapting TraceTogether for their countries. Responding to this interest, we are releasing an overview of BlueTrace, the privacy-preserving protocol that underpins TraceTogether, as well as OpenTrace, a reference implementation.}, - language = {en}, - author = {Bay, Jason and Kek, Joel and Tan, Alvin and Hau, Chai Sheng and Yongquan, Lai and Tan, Janice and Quy, Tang Anh}, - pages = {9}, - file = {Bay et al. - BlueTrace A privacy-preserving protocol for commu.pdf:/home/quentin/Seafile/zotero/storage/IYDHY97R/Bay et al. - BlueTrace A privacy-preserving protocol for commu.pdf:application/pdf} -} - - -@misc{noauthor_dp-3tdocuments_2020, - title = {{DP}-{3T}/documents}, - url = {https://github.com/DP-3T/documents}, - abstract = {Decentralized Privacy-Preserving Proximity Tracing -- Documents}, - urldate = {2020-04-20}, - publisher = {DP{\textasciicircum}3T}, - month = apr, - year = {2020}, - note = {original-date: 2020-04-03T16:04:32Z} -} - - -@misc{noauthor_robert-proximity-tracingdocuments_2020, - title = {{ROBERT}-proximity-tracing/documents}, - url = {https://github.com/ROBERT-proximity-tracing/documents}, - abstract = {Protocol specification, white paper, high level documents, etc.}, - urldate = {2020-04-20}, - publisher = {ROBERT -- ROBust and privacy-presERving proximity Tracing protocol}, - month = apr, - year = {2020}, - note = {original-date: 2020-04-13T16:51:24Z} -} - -@misc{noauthor_franceinfo_nodate, - title = {franceinfo sur {Twitter} : "{Faut}-il supprimer l'anonymat sur {Internet} ? "{Mais} l'anonymat, c'est une horreur !", affirme le député {LR} {Eric} {Woerth} qui affirme qu'on "a besoin de beaucoup plus d'autorité sur les réseaux sociaux" https://t.co/{ihrfHOswlJ}" / {Twitter}}, - shorttitle = {franceinfo sur {Twitter}}, - url = {https://twitter.com/franceinfo/status/1229677690720063488}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Twitter}, - note = {Library Catalog: twitter.com}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/DLP6M2EA/1229677690720063488.html:text/html} -} - -@misc{noauthor_decret_2014, - title = {Décret n° 2014-1576 du 24 décembre 2014 relatif à l'accès administratif aux données de connexion}, - urldate = {2020-04-20}, - month = dec, - year = {2014}, - note = {Library Catalog: Légifrance} -} - - -@misc{bembaron_coronavirus_2020, - title = {Coronavirus: comment les opérateurs se mettent à disposition pour le recueil des données mobiles}, - shorttitle = {Coronavirus}, - url = {https://www.lefigaro.fr/sciences/coronavirus-comment-les-operateurs-se-mettent-a-disposition-pour-le-recueil-des-donnee-mobiles-20200402}, - abstract = {Pour lutter contre la propagation du Covid-19, les données fournies par Orange sont étudiées par les chercheurs de l’Inserm pour analyser les mouvements de populations avant et après le confinement.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Figaro.fr}, - author = {Bembaron, Elsa}, - month = apr, - year = {2020}, - note = {Library Catalog: www.lefigaro.fr -Section: Sciences \& Environnement}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/XTYEJ5SD/coronavirus-comment-les-operateurs-se-mettent-a-disposition-pour-le-recueil-des-donnee-mobiles-.html:text/html} -} - - -@misc{noauthor_flux_nodate, - title = {Flux {Vision}}, - url = {https://www.orange-business.com/fr/produits/flux-vision}, - abstract = {Mieux connaître les déplacements de vos clients grâce aux données Flux Vision}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Orange Business Services}, - note = {Library Catalog: www.orange-business.com}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/2H9KRXAL/flux-vision.html:text/html} -} - - -@article{noauthor_swisscom_2020, - title = {Swisscom aidera la {Confédération} à détecter les attroupements via les téléphones}, - issn = {1423-3967}, - url = {https://www.letemps.ch/economie/swisscom-aidera-confederation-detecter-attroupements-via-telephones}, - abstract = {Selon les informations obtenues par «Le Temps», l’opérateur communiquera aux autorités fédérales lorsque plus de 20 téléphones se trouvent dans un espace de 100 mètres sur 100. En raison de la propagation du coronavirus, les rassemblements de plus de cinq personnes dans l’espace public sont interdits depuis le 21 mars}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Temps}, - month = mar, - year = {2020}, - keywords = {Coronavirus, Technologies, Téléphonie}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/SJN2B6VK/swisscom-aidera-confederation-detecter-attroupements-via-telephones.html:text/html} -} - - -@misc{champeau_hadopi_2015, - title = {Hadopi : l'État condamné à payer pour identifier les adresses {IP}}, - shorttitle = {Hadopi}, - url = {https://www.numerama.com/politique/136183-hadopi-letat-condamne-a-payer-pour-identifier-les-adresses-ip.html}, - abstract = {Le Conseil d'État a imposé à l'administration de payer les FAI lorsque l'Hadopi leur demande le nom et l'adresse des abonnés à qui ont été attribués des adresses IP. Le budget de la riposte graduée pourrait exploser... sauf si le gouvernement décide d'ignorer le jugement.}, - language = {fr-FR}, - urldate = {2020-04-20}, - journal = {Numerama}, - author = {Champeau, Guillaume}, - month = dec, - year = {2015}, - note = {Library Catalog: www.numerama.com -Section: Société}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/46E5RX5G/136183-hadopi-letat-condamne-a-payer-pour-identifier-les-adresses-ip.html:text/html} -} - - -@article{noauthor_premiere_2017, - title = {Une première « boîte noire » de la loi sur le renseignement désormais active}, - url = {https://www.lemonde.fr/pixels/article/2017/11/14/les-boites-noires-de-la-loi-sur-le-renseignement-sont-desormais-actives_5214596_4408996.html}, - abstract = {Ce dispositif très critiqué permet aux services de renseignement d’analyser automatiquement les métadonnées des communications Internet en France.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Le Monde.fr}, - month = nov, - year = {2017}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/BWZJUZYB/les-boites-noires-de-la-loi-sur-le-renseignement-sont-desormais-actives_5214596_4408996.html:text/html} -} - - -@misc{hourdeaux_surveillance_nodate, - title = {La surveillance du {Net} a été généralisée dès 2009}, - url = {https://www.mediapart.fr/journal/france/060616/la-surveillance-du-net-ete-generalisee-des-2009}, - abstract = {Bien avant les révélations d'Edward Snowden, la France avait mis en place un dispositif de surveillance automatisé de son réseau internet via l'installation de sondes sur l'ensemble du réseau ADSL. Ce programme, baptisé « IOL » pour Interceptions obligatoires légales, permettait de collecter « en temps réel »les métadonnées, pratique non autorisée à l'époque.}, - language = {fr}, - urldate = {2020-04-20}, - journal = {Mediapart}, - author = {Hourdeaux, Jérôme}, - note = {Library Catalog: www.mediapart.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/EMUBSWYN/la-surveillance-du-net-ete-generalisee-des-2009.html:text/html} -} - - -@misc{hourdeaux_conseil_nodate, - title = {Le {Conseil} constitutionnel juge illégale la surveillance hertzienne}, - url = {https://www.mediapart.fr/journal/france/211016/le-conseil-constitutionnel-juge-illegale-la-surveillance-hertzienne}, - abstract = {Saisis par une QPC des Exégètes amateurs, les sages ont jugé inconstitutionnelle une disposition de 1991 permettant une surveillance sans contrôle de toute communication passant par les ondes hertziennes.}, - language = {fr}, - urldate = {2020-04-21}, - journal = {Mediapart}, - author = {Hourdeaux, Jérôme}, - note = {Library Catalog: www.mediapart.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/C8N8HUCB/le-conseil-constitutionnel-juge-illegale-la-surveillance-hertzienne.html:text/html} -} - - -@article{boucher_safari_nodate, - title = {Safari ou la chasse aux {Français}}, - url = {https://www.cnil.fr/sites/default/files/atoms/files/le_monde_0.pdf}, - urldate = {2020-04-21}, - author = {Boucher, Philippe}, - file = {Safari ou la chasse aux Français:/home/quentin/Seafile/zotero/storage/J4LEWVQA/le_monde_0.pdf:application/pdf} -} - - -@misc{noauthor_gendnotes_2020, - title = {Gendnotes, faciliter le fichage policier et la reconnaissance faciale}, - url = {https://www.laquadrature.net/2020/02/25/gendnotes-faciliter-le-fichage-policier-et-la-reconnaissance-faciale/}, - abstract = {Le gouvernement vient d'autoriser la gendarmerie à déployer une application mobile qui facilite la collecte de photos et d'informations sensibles (religion, politique, sexualité, prétendue origine raciale) et leur transfert dans des fichiers extérieurs - tel que le TAJ, qui permet la reconnaissance}, - language = {fr-FR}, - urldate = {2020-04-21}, - journal = {La Quadrature du Net}, - month = feb, - year = {2020}, - note = {Library Catalog: www.laquadrature.net -Section: Surveillance}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/WNVJZX6G/gendnotes-faciliter-le-fichage-policier-et-la-reconnaissance-faciale.html:text/html} -} - - -@misc{noauthor_conseil_2019, - title = {Le {Conseil} constitutionnel autorise le fisc à la surveillance de masse}, - url = {https://www.laquadrature.net/2019/12/30/le-conseil-constitutionnel-autorise-le-fisc-a-la-surveillance-de-masse/}, - abstract = {Le Conseil constitutionnel, dans sa décision rendue vendredi dernier, vient de considérer que la surveillance généralisée des réseaux sociaux prévue par l'article 154, ex-57, de la loi de finances pour 2020 est conforme à la Constitution. - -Comme nous le dénoncions, cet article prévoit une collecte}, - language = {fr-FR}, - urldate = {2020-04-21}, - journal = {La Quadrature du Net}, - month = dec, - year = {2019}, - note = {Library Catalog: www.laquadrature.net -Section: Surveillance}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/P9ZRQE7D/le-conseil-constitutionnel-autorise-le-fisc-a-la-surveillance-de-masse.html:text/html} -} - - -@misc{noauthor_ce_nodate, - title = {Ce que dit le coronavirus de notre soumission à la surveillance - {Médias} / {Net} - {Télérama}.fr}, - url = {https://www.telerama.fr/medias/ce-que-dit-le-coronavirus-de-notre-soumission-a-la-surveillance,n6610539.php}, - urldate = {2020-04-21} -} - - -@article{noauthor_lassignation_2015, - title = {L’assignation à résidence de militants écologistes devant le conseil d’{Etat}}, - url = {https://www.lemonde.fr/societe/article/2015/12/10/la-constitutionnalite-de-l-etat-d-urgence-mise-en-cause_4828792_3224.html}, - abstract = {Le Conseil d’Etat examine une première QPC sur les assignations à résidence de militants interdits de manifester jusqu’à la clôture de la COP21.}, - language = {fr}, - urldate = {2020-04-21}, - journal = {Le Monde.fr}, - month = dec, - year = {2015}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/SRBGDU3S/la-constitutionnalite-de-l-etat-d-urgence-mise-en-cause_4828792_3224.html:text/html} -} - - -@techreport{dingledine_tor_2004, - title = {Tor: {The} {Second}-{Generation} {Onion} {Router}}, - shorttitle = {Tor}, - url = {https://apps.dtic.mil/docs/citations/ADA465464}, - abstract = {We present Tor, a circuit-based low-latency anonymous communication service. This second-generation Onion Routing system addresses limitations in the original design by adding perfect forward secrecy, congestion control, directory servers, integrity checking, configurable exit policies, and a practical design for location-hidden services via rendezvous points. Tor works on the real-world Internet, requires no special privileges or kernel modifications, requires little synchronization or coordination between nodes, and provides a reasonable tradeoff between anonymity, usability, and efficiency. We briefly describe our experiences with an international network of more than 30 nodes. We close with a list of open problems in anonymous communication.}, - language = {en}, - urldate = {2020-04-21}, - institution = {NAVAL RESEARCH LAB WASHINGTON DC}, - author = {Dingledine, Roger and Mathewson, Nick and Syverson, Paul}, - month = jan, - year = {2004}, - file = {Full Text PDF:/home/quentin/Seafile/zotero/storage/QG8ACQMH/Dingledine et al. - 2004 - Tor The Second-Generation Onion Router.pdf:application/pdf} -} - - -@misc{noauthor_authority_nodate, - title = {"authority... will need to deploy sniffing devices" · {Issue} \#6 · {ROBERT}-proximity-tracing/documents}, - url = {https://github.com/ROBERT-proximity-tracing/documents/issues/6}, - abstract = {In https://github.com/ROBERT-proximity-tracing/documents/blob/master/ROBERT-summary-EN.pdf it says: \"If the authority wants to do physical tracking, it will need to deploy sniffing devices\&quo...}, - language = {en}, - urldate = {2020-04-21}, - journal = {GitHub}, - note = {Library Catalog: github.com}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/F2AQS268/6.html:text/html} -} - - -@misc{vuillot_15_nodate, - title = {15 scénarios de détournements des applis de traçage}, - url = {https://risques-tracage.fr/}, - abstract = {Le traçage automatisé des contacts à l'aide d'une application sur smartphone comporte de nombreux risques, indépendamment des détails de fonctionnement de cette application.}, - language = {en}, - urldate = {2020-04-21}, - journal = {https://risques-tracage.fr}, - author = {Vuillot, Xavier Bonnetain, Anne Canteaut, Véronique Cortier, Pierrick Gaudry, Lucca Hirschi, Steve Kremer, Stéphanie Lacour, Gaëtan Leurent, Matthieu Lequesne, Léo Perrin, André Schrottenloher, Emmanuel Thomé, Serge Vaudenay, Christophe, Nicolas Anciaux}, - note = {Library Catalog: risques-tracage.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/KPYKXEE9/risques-tracage.fr.html:text/html} -} - - -@article{chaum_untraceable_1981, - title = {Untraceable {Electronic} {Mail}, {Return} {Addresses}, and {Digital} {Pseudonyms}}, - volume = {24}, - abstract = {A technique based on public key cryptography is presented that allows an electronic mail system to hide who a participant communicates with as well as the content of the communication--in spite of an unsecured underlying telecommunication system. The technique does not require a universally trusted authority. One correspondent can remain anonymous to a second, while allowing the second to respond via an untraceble return address. The technique can also be used to form rosters of untraceable digital pseudonyms from selected applications. Applicants retain the exclusive ability to form digital signatures corresponding to their pseudonyms. Elections in which any interested party can verify that the ballots have been properly counted are possible if anonymously mailed ballots are signed with pseudonyms from a roster of registered voters. Another use allows an individual to correspond with a record-keeping organization under a unique pseudonym which appears in a roster of acceptable clients.}, - language = {en}, - number = {2}, - author = {Chaum, David L}, - year = {1981}, - pages = {5}, - file = {Chaum - 1981 - Untraceable Electronic Mail, Return Addresses, and.pdf:/home/quentin/Seafile/zotero/storage/7ZZYQYKK/Chaum - 1981 - Untraceable Electronic Mail, Return Addresses, and.pdf:application/pdf} -} - - -@misc{noauthor_list_2020, - title = {List of countries by smartphone penetration}, - copyright = {Creative Commons Attribution-ShareAlike License}, - url = {https://en.wikipedia.org/w/index.php?title=List_of_countries_by_smartphone_penetration&oldid=950972111}, - abstract = {This is a list of countries by smartphone penetration in 2018. These numbers are based on the top 50 countries in terms of smartphone users (so smaller countries such as UAE and Ireland are absent) and come from Newzoo's Global Mobile Market Report (the numbers were last updated in September 2018) and are based on a model which takes into account a country’s economic progression, demography, online population, and inequality.}, - language = {en}, - urldate = {2020-04-21}, - journal = {Wikipedia}, - month = apr, - year = {2020}, - note = {Page Version ID: 950972111}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/ZFFKEBIL/index.html:text/html} -} - - -@misc{champeau_lcen_2011, - title = {La {LCEN} a enfin son décret sur les données à conserver par les hébergeurs}, - url = {https://www.numerama.com/magazine/18191-la-lcen-a-enfin-son-decret-sur-les-donnees-a-conserver-par-les-hebergeurs.html}, - abstract = {Le Gouvernement a fait paraître mardi au Journal Officiel un décret attendu depuis l'adoption de la loi LCEN de 2004, qui précise les données que doivent conserver les hébergeurs lors de la transmission ou de la modification de contenus en ligne, pour simplifier les enquêtes et poursuites judiciaires. Un décret qui vise aussi les services de partage de vidéos ou d'hébergement de blogs.}, - language = {fr-FR}, - urldate = {2020-04-21}, - journal = {Numerama}, - author = {Champeau, Guillaume}, - month = mar, - year = {2011}, - note = {Library Catalog: www.numerama.com -Section: Société}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/JSAMA6ME/18191-la-lcen-a-enfin-son-decret-sur-les-donnees-a-conserver-par-les-hebergeurs.html:text/html} -} - - -@misc{covidwatch, - title = {Covid {Watch}}, - url = {https://www.covid-watch.org}, - abstract = {We hope to slow the spread of infectious diseases like COVID-19 with crowdsourced data.}, - urldate = {2020-04-22}, - note = {Library Catalog: covid-watch.org}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/8FNYJT2A/article.html:text/html} -} - - -@misc{treguer__2019, - title = {La « ville sûre » ou la gouvernance par les algorithmes}, - url = {https://www.monde-diplomatique.fr/2019/06/TREGUER/59986}, - abstract = {Accès libre // par Félix Tréguer (juin 2019)}, - language = {fr}, - urldate = {2020-04-22}, - journal = {Le Monde diplomatique}, - author = {Tréguer, Félix}, - month = jun, - year = {2019}, - note = {Library Catalog: www.monde-diplomatique.fr}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/M7VQ6PXU/59986.html:text/html} -} - - -@misc{ccc, - title = {{CCC} {\textbar} 10 requirements for the evaluation of "{Contact} {Tracing}" apps}, - url = {https://www.ccc.de/en/updates/2020/contact-tracing-requirements}, - urldate = {2020-04-23}, - file = {CCC | 10 requirements for the evaluation of "Contact Tracing" apps:/home/quentin/Seafile/zotero/storage/FLTVELQB/contact-tracing-requirements.html:text/html} -} - - -@misc{dontkillmyapp, - title = {Don’t kill my app!}, - url = {https://dontkillmyapp.com/}, - abstract = {Hey Android vendors, don’t kill my app!}, - language = {en}, - urldate = {2020-04-23}, - journal = {Don’t kill my app!}, - note = {Library Catalog: dontkillmyapp.com}, - file = {Snapshot:/home/quentin/Seafile/zotero/storage/QEVEDJHZ/dontkillmyapp.com.html:text/html} -} - - -@article{chan_east_2020, - title = {East {Coast} {PACT}: {Privacy} {Sensitive} {Protocols} and {Mechanisms} for {Mobile} {Contact} {Tracing}}, - shorttitle = {{PACT}}, - url = {http://arxiv.org/abs/2004.03544}, - abstract = {The global health threat from COVID-19 has been controlled in a number of instances by large-scale testing and contact tracing efforts. We created this document to suggest three functionalities on how we might best harness computing technologies to supporting the goals of public health organizations in minimizing morbidity and mortality associated with the spread of COVID-19, while protecting the civil liberties of individuals. In particular, this work advocates for a third-party–free approach to assisted mobile contact tracing, because such an approach mitigates the security and privacy risks of requiring a trusted third party. We also explicitly consider the inferential risks involved in any contract tracing system, where any alert to a user could itself give rise to de-anonymizing information.}, - language = {en}, - urldate = {2020-04-24}, - journal = {arXiv:2004.03544 [cs]}, - author = {Chan, Justin and Foster, Dean and Gollakota, Shyam and Horvitz, Eric and Jaeger, Joseph and Kakade, Sham and Kohno, Tadayoshi and Langford, John and Larson, Jonathan and Singanamalla, Sudheesh and Sunshine, Jacob and Tessaro, Stefano}, - month = apr, - year = {2020}, - note = {arXiv: 2004.03544}, - keywords = {Computer Science - Cryptography and Security}, - annote = {Comment: 22 pages, 2 figures}, - file = {Chan et al. - 2020 - PACT Privacy Sensitive Protocols and Mechanisms f.pdf:/home/quentin/Seafile/zotero/storage/94B3SGXY/Chan et al. - 2020 - PACT Privacy Sensitive Protocols and Mechanisms f.pdf:application/pdf} -} - - -@misc{noauthor_west_nodate, - title = {West {Coast} {PACT}}, - url = {https://pact.mit.edu/wp-content/uploads/2020/04/The-PACT-protocol-specification-ver-0.1.pdf}, - urldate = {2020-04-24}, - file = {The-PACT-protocol-specification-ver-0.1.pdf:/home/quentin/Seafile/zotero/storage/9XIS9DYT/The-PACT-protocol-specification-ver-0.1.pdf:application/pdf} -} diff --git a/exo/processing-objets.md b/_deleted_posts/exo/processing-objets.md similarity index 100% rename from exo/processing-objets.md rename to _deleted_posts/exo/processing-objets.md diff --git a/_layouts/default.html b/_layouts/default.html index be2d28b..98ed678 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,27 +1,17 @@ - - - - - - - - - {{ site.name }}{% if page.title %} - {{ page.title }}{% endif %} - - - - - - - - {% include navigation.html %} - - {% if page.profile %} - {% include profile.html %} - {% endif %} - -
+ + + + + Quentin Dufour + + + + + + + + + {{ content }} -
diff --git a/_layouts/post.html b/_layouts/post.html index 9ff4335..9ffdda8 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -1,6 +1,5 @@ --- layout: default -archive: true ---
@@ -12,31 +11,3 @@ archive: true {{content}}
- - - -{% if page.archive %} - -{% endif %} - - - diff --git a/_notes_boite_noire.txt b/_notes_boite_noire.txt deleted file mode 100644 index 0362488..0000000 --- a/_notes_boite_noire.txt +++ /dev/null @@ -1,527 +0,0 @@ -problématique compréhension biais -> cacher certaines choses ? -impact dont d'organe, orientation, credit social chinois, etc. - -pourquoi l'éthique ? -Pourquoi l’éthique ? Comment le développement fulgurant du numérique ré-interroge les scientifiques et la société ---- - -*claude kirchner* - -> définit éthique, basé sur une hierarchisation de valeur, reflexion manquante dans le domaine du numérique, donne des exemples de 2 types puis conclue sur les initiatives - -révolution bien plus profonde que l'on peut imaginer. -avant on pensait 3 matieres fondamentales : matière, vivant, énergie. -Mais on a oublié l'information - -support de l'information et révolution : langage/dessin -> ecriture -> imprimerie -> numerique -*vraiment ce terme de révolution...* - -nous sommes des systèmes de traitement de l'information -numérisation de toutes les activités humaines, lois plus adaptés, *missing* - -5 notions : éthique, morale, déontologie, intégrité, droit -éthique -> positionnements sur les hierarchies de valeurs -morale -> ethique mais aussi morale sociale ou religieuse -deontologie -> regles de la profession -integrite -> absence de mauvaise intention, honneteté -droit -> code civil, national, international, sujet à interpretation - -exemple de la puce RFID "exemple simple": liste des valeurs qui entrent en jeu -et explique pourquoi dans le second cas on accepte la surveillance -plein de valeurs (anonymat, empowerement, reversibilite, etc.) - - - Quelles valeurs ? - - Quelles décisions ? - - Quels algorithmes - -exemple de mercedes : on protège avant tout le constructeur. - -on en arrive donc à hierarchiser des valeurs : -bienfaisance, non mal-traitance, autonomie, justice, reproductibilité, loyauté, gratuité, respect, transparence... - -Comment prendre des décisions en communauté quand on ne partage pas les memes hierarchies de valeur ? - -Utilisation non envisagée : Siri + autiste, panneau public Paris + message Alix - -Aborde les problèmes de : - - persistance des données (pour toujours en ligne) - - qui ces données concernent t'elles ? Moi mais aussi mon entourage (ADN, communications) - -Présentation du cas de la faille 0-day - - 1 million de dollars sur le marché noir - - responsible disclosure - -Exemple de l'authentification sur mon service : - - oAuth Google ou Facebook - - auth locale - -Scientifique et amazon mechanical turk - ---> quelles sont les valeurs derrière ça ? - -Éthique & Numérique - Un référentiel pratique pour les acteurs du numérique -Des initiatives autour de l'IA et meme de la standardisation AFNOR. -Il existe des comités d'éthiques : CCNE, CERNA, COMETS, etc. -Et des comités opérationnels d'éthiques : Coerle, Cernis, CPP, etc. - -éthique est un imperatif humanisme numerique -libre -> plus grand éthicité ? -éducation au numérique et à l'éthique - -questions : normalisation de l'ethique par l'AFNOR ? qui hierarchise les valeurs ? - -Society2Vec ------------ - -> On explique notre société traditionnellement avec des catégories : des catégories de gens et des categories d'action / comportement. Ces categories impactent notre perception de la réalité. Elles représentent mal aussi notre société. L'idée c'est d'arrêter d'utiliser des catégories symboliques et d'utiliser des modèles non lineaires, dit connexioniste. Parallèle avec l'histoire de l'IA. Donne des exemples avec Netflix et Facebook. Explique pourquoi le concept de trace fonctionne mieux que les données déclaratives. Une fois ce point accepté, qu'est ce qu'on veut regarder ? autonomie / liberté (sur l'individu seulement) beaucoup plus exploré que théorie de la justice (égalite, à l'échelle de la société) - -*Dominique Cardon* - -De la catégorisation statistique à la prédiction comportementale. -débat sur l'éthique --> la place de la technologie dans la société et pas sur les algos et les biais. - -tension propre au numerique : theorie de la justice VS theorie de la liberté || liberté vs égalité - -question de la catégorie et crise de la representation statistique de notre societe. -débat sur les biais algorithmiques. -Mais si on demande quel serait la bonne distribution de l'algo, definition de la norme, l'algo sans biais serait quoi ? on est pas d'accord. - -pour décrire la société, on met les individus derriere un systeme de categorie et on essaye de trouver des régularités derrière ces categories. - -categorie individu et categorie pratique sociale, etc. -particularité -> elles font systèmes. - -on a façonné notre compréhension de la société selon ce système. - -La distrinction de Pierre bourdieu. - -le travail sociologues, crimonologues, marketing influencent notre perception de la réalité. -on a façonné des représentation de la société avec ces classes. -etude : acheter des questions INSEE (ou allez vous en vacances, etc.) pour deviner l'emploi de la personne - -critique normativve de la categorisation : aliénante, normalisatrive, etc. -représenter la société sans catégorie. - -"Discrimination in the Age of Algorithms" - -algo de la justice, recrutement, selection (université). -on essaye de prédire le meilleur score. -Pour essayer de redresser des biais dans les données d'apprentissage. - --- On enchaine sur le machine learning -- - -"La revanche des neurones. L'invention des machines inductives et la controverse de l'intelligence artificielle" Réseaux 2018 - -connexionism -> ok -symbolic -> AI winter -connexiomism -> retour de l'AI - ----> on ne calcule pas sur des symboles -l'idée de categoriser n'a pas de sens. connexions de bas niveau. - ---- granularise les données ---- - -netflix 70 000 micro-genres -on a pas besoin de leur sexe, age, diplome mais leur trace de navigation -on calcule très mal les gens avec du declaratif, il faut du comportemental. -ils onr arrete de prendre les notes sur les films -Quand on a une liste de traces de films regardées, c'est bien superieur aux notes. -YT n'utilise plus les j'aime / j'aime pas par exemple. - -conclue sur 2 notions : theorie de la justice et autonomie. -distribution des ressources dans la société (justice) -influence sur moi (autonomie) - -est ce que l'algorithme a influencé l'intention initiake de la personne -est ce que l'algorithme a empeché aux gens si il n'y avait pas eu l'algorithme. - -pionniers du web se sont occupés de l'autonomie -Mais jamais de la théorie de la justice qui revient dans l'histoire du numerique. p-e Felix Treger l'abordera. - -https://neurovenge.antonomase.fr/ - -Face à l'automatisation des bureaucraties, l'accommodement ou le refus ? ----- - -*Felix Treguer* - -> Historique des technologies qui ont aidé la bureaucratie du 16ème siècle à nos jours : nombres, imprimerie, la poste, le telegraphe, Cybersin. Critique de la bureaucratie : accapare le pouvoir. Parle des premières critiques de la bureaucratie (Marc Savio, Les clodos, Safari). - -prolongation travaux de theses. - -parcours sup, demat' service public, controle au frontiere, reconnaissance faciale, les boites noires de la loi renseignement signaux faibles radicalisation. - -notion d'automatisation -> assemblage homme machine - -automatisation des bureaucraties -remonte au 16eme siecle -leviathan thomas honnes -gouvernance par les nombres - -pose un imaginaire normatif qui est le notre - -techniques de communication et mecanisation du travail gouvernemental -imprimerie aide le developpement des bureaucraties (reproduire des notices, etc.) -cite aussi la poste, le telegraphe de chappe. - -Delphine Gardey : Ecrire, Calculer, Classer -Augmente le volume et la rapidite des productions d'écriture -complexes technico humains qui servent autant le gouvernement des affaires que celui de l'état - -lendemain seconde guerre mondiale. -utopie gouvernement cybernetique -salvador allende projet cybersin - --- quand la critique des bureaucraties se confond avec l'informatique -- - -XIX et XX -> critique des bureaucraties (John Stuart Mill, Marx, Max Weber). -idée appareil bureaucratique accapare le pouvoir. - -se retrouve dans les moments contre-culture des annees 1960 -la technocratie qui gouverne est assimiliée à une machine -mario savio there comes a time - -bcp parlé des hippies qui veulent utiliser la machine pour la democratie -moins de ces contres cultures - -groupe anarchiste les clodos / action directe - -premières controverses sur l'informatique et la surveillance d'état et leurs consequences pour les libertés publiques. -Exemple de Safari qui amène à la création de la CNIL - --- Face à la résisttance, se dessine dès les années 1960 la stratégie des accomodements raisonnables vis à vis de l'informatisation -- - -commission Bell sur l'an 2000 (1960) rapport Nora-minc (1978), etc. -mené dans les années 1960 pour essayer de predire le fonctionnement de l'an 2000 - -renoncer à la vie privée, besoin des ordinateurs pour rester libre, pour nous outiller. - -compromis informatique liberalisme et bureaucratie de masse - -éthique et informatique, protection des données personnelles, transparence administrative : -socle commun d'un compromis censé garantir l'acceptibilité sociale de l'informatique - -idée informatisation etat + agile, + en phase, + transparent avec les citoyens - -40 ans plus tard : la startup nation comme nouveau paradigme bureaucratique - -la configuration politique parait similaire, seuls certains mots-clés ont changé. - -1978 estaing (année informatique et liberté) on va pouvoir domestiquer l'informatique et juguler ses effets nefastes. -IA liberee vs IA maitrisee il y a un an - -rejouer la meme scene que dans les annees 1970. -Qu'est ce que les lumieres ? 1984 Foucault - -L'enjeu est donc : ... - -ces approches ont échoué - -approche de l'accomodement. conteneir les effets pervers et nefastes. -cornelius castoriadis, la montée de l'insignifiance -La raison d'état est infiniment plus forte... " - -make it stop : -rouvrir nos imaginaires à la possibilité d'une désescalade technologique, d'une refus de l'informatique de controle et de ses multiples incarnations - - -ces approches permettent de limiter la casse -mais accomoder avec un refus plus clair, plus affirmé de l'informatique de controle -automatisation des bureaucraties - -accomodement VS refus -> binarité un peu trompeuse ? -autre histoire vient du design confort et mécanisation -software takes command -http://manovich.net/index.php/projects/software-takes-command - -chez max weber la breaucratie c'est plein de qualités -sans bureaucratie, on met la justice à la porte -ex: argh... - - ---- table ronde --- - -standardisation de l'éthique en informatique -> se heurter aux autres domaines (santé) - comment fait on ? -deja normaliser l'éthique va à l'encontre de sa définition. - -accomodement du refus. -parle des groupes d'éthique -Felix Treguer parle de leur contournement Chine + Singapour -La meme Inria qui critique les boites noires mais en meme temps Safe City à Nice - -montee en puissance de l'éthique -alors que les droits fondamentaux aussi peu respectés -symptone de l'incapacitation du droit -droit une simple contrainte parmi d'autre -quelle entité pourrait avoir un effet contraignant alors que le droit n'est pas respecté -GAFAM ne s'y sont pas trompés -risque de privatisation de la régulation ? -demontrer l'inutilité de toute régulation juridique -Court circuite le débat public -nouvelle forme d'auto regulation -innefectivité totale de l'auto regulation. - -apporte des reflexions interessantes -mais forme de contournement du droit -ethical washing - -foucault régimes securitaires : "quand vous dites aux gens qu'ils n'ont plus de libertés, hitler est à vos portes, ils ne vous croient pas. Si on veut organiser de la resistance, il faut parler de cette angoisse" - -"libre marché des idées" - -promesse de la technologie qui nous libere est fausse, a réduit notre champs des possibles -pas interessé par l'éthique mais la critique -a partir d'un moment, le refus devient nécessaire -produit des attentes auprès du legislateur pour qu'il fabrique de la norme -le legislateur ne fait pas bien son travail -débat sur la loi AVIA sur comment ça a été construite. -On fabrique de la norme assez problématique meme si il y a des choses qui renvoient à des attentes sociales - -Quel degré de transparence pour les algorithmes ? ------- - -*Claire Mathieu* - -> Cite avantages et inconvenients de la transparence dans le cas des algorithmes puis présente les 4 dimensions de la transparence. Analogie avec parcoursup. Probleme de la loi de Goodhart. Mentionne la théorie des jeux - -transparence des algorithmes -transparence : du positif et du négatif (surveillance) -algorithme : techniques - -loi : pouvoir expliquer les décisions individuelles - -transparence : arme contre la stupidité des dev. -ex knuth vol 2 - calculer une suite de nombre pseudo aleatoire. -propose un algorithme qui ne marche pas -> l'algo converge vers 6065038420 - -la transparence aide à la confiance -ex: algorithme d'allocation de bourses communales pour les ycéens de Nantes à travers les années -meme probleme de confiance avec les algos : -qui décide et selon quel critère - -la transparence accroit l'égalité -difference de pouvoir entre celui qui sait et celui qui ne sait pas - -la transparence permets les contournements --> si nous rendons notre méthode publique, les gens vont en profiter pour tricher -loi de Goodhart : lorsqu'une mesure devient un objectif, elle cesse d'être une bonne mesure -Reactions : - 1. Cacher la mesure - 2. (mieux) Réagir et s'adapter au comportement - -Théorie mathematique de la transparence -theorie des jeux : construire la mthode de facon que meme en schant tout des autres participants - -Methode de Vickrey : vendu au plus offrant au prix du second plus offrant. - -Risque 1 : la gouvernance des algos - - C'est l'algo, c'est comme ça on n'y peut rien - - Voici comment ça marche... - -comment faire quand algo trop compliqué ? - -Risque 2 : Role de l'humain - - Dans cette formation, le comite a classe votre dossier derriere d'autres candidatures - -4 dimensions de la transparence : - - Transparence du contexte -> affectation aux formations de l'enseignement superieur. Les conditions : taux de boursiers, d'externes, etc. - - Transparence de l'approche -> publication de l'algo et du code - - Transparence du résultat -> comité fermé - - Transparence de l'execution -> au fur et à mesure. ce qui est important c'est comment les formations classent les dossiers - -et si un algo d'apprentissage statistique fait mieux que les humains et est irrémédiablement opaque. - -QUESTION : est ce qu'on peut parler de transparence de l'approche et des resultats sans avoir accès au code complet et aux entrées pour reexecuter la logique en locale et comparer ? - -Les FAT (fair, accountable, transparent) algorithms ou la mystique d'une démocratie immanente ---- - -*Antoinette ROUVROY* - -> cherche a anticiper. la norme ne definit plus le reel mais le reel definit la norme, rapport aux données d'apprentissages. pratique car plus de symbole, les données sont décorellées de tout sens (les vecteurs en ML vs les categories). Meme en cas d'algos parfaits, présente des biais () - -hypothese gouvernementalite algorithmique -la norme soit domestiquée par le reel lui meme - -inverse foucault : les corps sont domestiques par la norme -on disait code is law -avec le ML, le code est domestiqué par les données - -trasncription presque passive de la sauvagerie des faits. -ne representent plus le monde mais en tiennent lieu - -pas une proliferation symbolique mais de pure signaux. -alternative seduisante aux politiques, à l'état de droit rigide, etc. - -en relisant des textes de baudriard sur la transparence du mal. -dans la theorie revolutionnaire, que le l'état disparaisse et que la politique se nie dans la transparence du social. - -le politique a bel et bien disparu et il a entraine le social dans sa disparition - -degré 0 de la politique mais dans sa simulation. - -privilegie la notion de cosmetique a la notion d'onthologie - -géré de manière très anticipative, prémptrice, préventive -données asinifiante -> expurgée de leur contexte -> de l'etre vivant - -engouement pour les boites noires pas symptomatique de la techno mais de la politique -IA/stats très utile pour detecter des regularités detectables sur des très grands nombres - -on ne peut pas etre competitif avec un ordi mais incapable de donner sens à leurs resultats -inutile de fantasmer competition intelligence humaine/artificielle - -il faut combiner les biais - -IA est toxique quand elle ne sert à automatiser que des etats de fait insoutenables - -il y a des moments dans la vie ou savoir que penser autrement c'est necessaire pour continuer a penser" Foucault, à peu près - -glissement du societe du signe (signifiant, symbole) vers une societe du signaux insignifiant. -question du droit dans ce glissement - -on substitue un apprentissage continue à la production d'une verite stable. -plus vrai ou faux, juste suffisament fiable pour justifier une prise d'action -la modelisation n'a pas vocation a etre vraie - -3. on ne vise plus la comprehension de ces phenomenes mais leur prediction -arrachement du signal numerique au signifiant --> tres emancipateur ?! -la donnée n'est pas représentative de quelque chose qui lui préexiste -ces nouvelles technos sont utilisées par entites qui n'ont pas d'interet la cooperation entre elles ou le bien commun - - --- du signe au pur signal -on detecte vos potentialités avant meme que vous ayez imaginé passer à l'acte ---> préemption (et pas prévention) -prédire les phénomènes sans avoir à les comprendre. -beaucoup plus large que la biopolitique de Foucault. -l'incertitude comme tel. -cette demande de sécurité se traduit par une demande de certitude. -Quel meilleur moyen d'etre sur de l'avenir que de le produire. -actualisation du virtuel. -"frappes de signature" - -prive la capacité de ne pas faire tout ce dont vous êtes capable - --- - -"ce qui se joue avec le numerique ajd c'est l'abandon du monde de la representation pour rentrer dans le monde du programme dont le [...] est celui du credit. [...]" -https://journals.openedition.org/appareil/1586?lang=en - -ce monde numerique nous dispense d'expliquer les choses au profit d'une pure présence. - -hyper individualisation. -chacun devient sa propre référence statistique. -destitution de la connaissance, on peut se passer de compréhension. pas les ingenieux mais les politiques -données allégées. on les garde par defaut. -donnes personnelles -> mouarf, juristes à coté de la plaque -surtout des données relationnelles - -machines aux frontieres -> ne se basent plus sur des categories -> devient très difficiles à contester -> toute la dimension collective a disparue. -la loi pour evoluer a besoin de contestation / contestabilité -en se basant sur la gouvernementabilite algorithmique, on ne detecte plus des personnes mais des risques et plus de categorie, on ne peut plus se reconnaitre. -emancipateur ? des dimensions langagieres avec leurs biais (colonial, etc.) - -transformation des formes du savoir, très personnel mais insignifiant. -acces au reel en haute definition. -ces categories avant étaient jamais vrai adequates. - -autant de faux positifs chez les blances et les noirs -> fair ? sauf que les gens n'ont pas tous les memes ressources pour se defendre. - -recommendation judiciaire -> algo qui evalue les risques de recidive -> fair, accountable, transparent -> paradoxal on veut garder la main mais on a l'algo -> juge qui decide -> pas content, prend le contrepieds ou d'accord et suit. - -le droit ce n'est rien d'autre que l'anticipation de la decision du juge. -est ce que la decision qu'il prend est equitable -dur de modeliser le comportement d'un juge face à ces machines. - -compliciter entre la gouvernementalité algorithmique et le capitalisme neoliberal -systeme immunitaire de ce systeme contre tout ce qui pourrait le mettre en crise. -s'accaparer par avance cet espace du virtuel. - -cette fiction de l'individu libre rationnel et autonome. -surveillance de masse <=> personnalisation - -plus d'individu autonome, un amas de pulsion. -plus leur capacité d'entendement, de volonté, en les attrapant dans leurs pulsions - - -Cultures de l'observation et méthodes pour la transparence algorithmique ---- - -*Loup Cellard* - -> Loup Cellard nous parle d'algorithme pour définir l'organisation de la bureaucratie (ndlr: nommé process). Il donne un exemple à travers les crèches. Il montre que cet algorithme n'est pas formalisé et mal connu de ses agents. Il introduit la CADA et des lois qui permettent d'acceder à ces algos/process et donne des exemples auxquelles ces lois s'appliquent et leurs limitations. Ils presentent les avantages de la transparence mais montre qu'elle n'assure pas l'intelligibité. - -etnographie / etalab / 8 mois. -3 cas d'études -> taxe habitation, attribution des places en creches, outil de recherche d'emploi - -2019 consultant etalab -ecriture d'une note de recherche sur les demandes citoyennes -organisation d'une journée sur l'explicabilite - - -pourquoi parler d'algo dans le cas de la creche -les algorithmes sont partouts mais invisible et quand on les trouve c'est souvent des boites noires. -du coup recherche des algorithmes dans les creches - -a reussi a representer l'algorithme d'assignation des places en creche. - 1- premier rdv pour collecter des donnees - 2- entrees dans une logiciel concerto - 3- exporter ces données ordonnees par demande sous forme d'un fichier excel - 4- le fichier excel est modifié et ordonné à la main - 4.1 - par type de contrat (200h, 160h, ...) - 4.2 - par ordre de priorite (handicap, soutien des services sociaux, familles mono parentales, naissances multiples, parents etudiants, priorite medicale des parents) - 4.3 - par revenus (du moins eleve au plus eleve) - 5- Le fichier excel est discuté dans une commission composée de [...] - -pas full ordi mais correspond a la definition d'un algo -c'est un systeme socio-techniquer (seaver, 2014. 2019) - -est maintenant considere comme algo : - - jury de prof pour l'entree en classe euro - - systeme de calcul de la taxe d'habitation - - systeme de priorisation de l'intervention entre SAMU et pompiers ---> tout ca requalifié comme algorithme - -Les outils classiques de la transparence sont inadaptés pour rendre intelligible les situations algorithmiques. - -instrument de transparence - - auto legitimation - - gestion des impressions - - visibilite - - mais pas l'intelligibilite - -delegation du travail d'interpretation - -les gens de la bureaucratie ne sont pas capable de décrire la procédure. - -"modèle inquisitorial de l'enquete administrative" -epreuve d'explicitation des algorithmes - -si algo dans la prise de decision, possibilite de : - - demander à l'administration - - puis demander à la CADA - - puis aller au tribunal administratif - -ex: M. X, femme accident cardiaque, appelle le 15, arbre d'aide à la decision SAMU / Pompier, demande l'arbre de decision -MAIS CADA répond "communiquer l'algo porterait atteinte à la securite publique." -trop large dans sa demande, ce qu'il voulait c'était le cas de se femme. - -limitations de la cada : - - tributaire des questions posées - - se protege derriere les reponses des administrations - - elle n'a pas moyen pour investiguer les avis - - confusion des procedures CADA et CNIL - - cada ne peut interpreter. -apprendre aux gens à faire la demande, etc. - -etc. - -"Guide des algorithmes publics" -"Le design de la transparence" - -deleuze - societe de controle -possibilité de desobeir à la lois - - diff --git a/assets/css/native.css b/assets/css/native.css deleted file mode 100644 index 324d7e7..0000000 --- a/assets/css/native.css +++ /dev/null @@ -1,78 +0,0 @@ -.highlight .hll { background-color: #404040 } -.highlight { background: #202020; color: #d0d0d0 } -.highlight .c { color: #999999; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .esc { color: #d0d0d0 } /* Escape */ -.highlight .g { color: #d0d0d0 } /* Generic */ -.highlight .k { color: #6ab825; font-weight: bold } /* Keyword */ -.highlight .l { color: #d0d0d0 } /* Literal */ -.highlight .n { color: #d0d0d0 } /* Name */ -.highlight .o { color: #d0d0d0 } /* Operator */ -.highlight .x { color: #d0d0d0 } /* Other */ -.highlight .p { color: #d0d0d0 } /* Punctuation */ -.highlight .ch { color: #999999; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */ -.highlight .cpf { color: #999999; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -.highlight .gd { color: #d22323 } /* Generic.Deleted */ -.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #d22323 } /* Generic.Error */ -.highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #589819 } /* Generic.Inserted */ -.highlight .go { color: #cccccc } /* Generic.Output */ -.highlight .gp { color: #aaaaaa } /* Generic.Prompt */ -.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -.highlight .gt { color: #d22323 } /* Generic.Traceback */ -.highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #6ab825 } /* Keyword.Pseudo */ -.highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */ -.highlight .ld { color: #d0d0d0 } /* Literal.Date */ -.highlight .m { color: #3677a9 } /* Literal.Number */ -.highlight .s { color: #ed9d13 } /* Literal.String */ -.highlight .na { color: #bbbbbb } /* Name.Attribute */ -.highlight .nb { color: #24909d } /* Name.Builtin */ -.highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */ -.highlight .no { color: #40ffff } /* Name.Constant */ -.highlight .nd { color: #ffa500 } /* Name.Decorator */ -.highlight .ni { color: #d0d0d0 } /* Name.Entity */ -.highlight .ne { color: #bbbbbb } /* Name.Exception */ -.highlight .nf { color: #447fcf } /* Name.Function */ -.highlight .nl { color: #d0d0d0 } /* Name.Label */ -.highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */ -.highlight .nx { color: #d0d0d0 } /* Name.Other */ -.highlight .py { color: #d0d0d0 } /* Name.Property */ -.highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #40ffff } /* Name.Variable */ -.highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #666666 } /* Text.Whitespace */ -.highlight .mb { color: #3677a9 } /* Literal.Number.Bin */ -.highlight .mf { color: #3677a9 } /* Literal.Number.Float */ -.highlight .mh { color: #3677a9 } /* Literal.Number.Hex */ -.highlight .mi { color: #3677a9 } /* Literal.Number.Integer */ -.highlight .mo { color: #3677a9 } /* Literal.Number.Oct */ -.highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ -.highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ -.highlight .sc { color: #ed9d13 } /* Literal.String.Char */ -.highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ -.highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ -.highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ -.highlight .se { color: #ed9d13 } /* Literal.String.Escape */ -.highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ -.highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ -.highlight .sx { color: #ffa500 } /* Literal.String.Other */ -.highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ -.highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ -.highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ -.highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #447fcf } /* Name.Function.Magic */ -.highlight .vc { color: #40ffff } /* Name.Variable.Class */ -.highlight .vg { color: #40ffff } /* Name.Variable.Global */ -.highlight .vi { color: #40ffff } /* Name.Variable.Instance */ -.highlight .vm { color: #40ffff } /* Name.Variable.Magic */ -.highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */ diff --git a/assets/css/style.css b/assets/css/style.css index f1bc24c..bedf573 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1,655 +1,119 @@ -/* Reset */ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0} -*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - -/* Clearfix */ -.clearfix:after { - content: ""; - display: table; - clear: both; +html { + margin: 0px; + padding: 0px; + font-size: 62.5%; + --color-text: #404040; + --color-text-second: #6f6f6f; + --color-accent: #8c0c00; + --color-second: #ffc0ba80; } -.hidden { display: none; } - -/* Icons */ -@font-face { - font-family: 'icons'; - src: url('../fonts/icons.eot'); - src: url('../fonts/icons.eot#iefix') format('embedded-opentype'), - url('../fonts/icons.woff') format('woff'), - url('../fonts/icons.ttf') format('truetype'), - url('../fonts/icons.svg#icons') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "icons"; - font-style: normal; - font-weight: normal; - speak: none; - display: inline-block; - text-decoration: inherit; - text-align: center; - font-variant: normal; - text-transform: none; - line-height: 1em; -} -.icon-facebook:before { content: '\e802'; } -.icon-facebook-squared:before { content: '\e800'; } -.icon-twitter:before { content: '\e801'; } -.icon-twitter-1:before { content: '\e804'; } -.icon-facebook-circled:before { content: '\e805'; } -.icon-twitter-circled:before { content: '\e806'; } -.icon-facebook-rect:before { content: '\e803'; } - -/* Spacing */ -.post h1, h3, h4, h5, p, #post-body ul, #post-body ol, #wrapper ul, #wrapper ol, #post-list li, pre { -margin-bottom: 20px; -} - -/* Base */ -html, body { height: 100%; } body { - font:16px/1 "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #666; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; + margin: 0px; + padding: 0px; + font-family: "Merriweather",Georgia,Times,"Times New Roman",serif; + color: var(--color-text); + text-rendering: optimizeLegibility; + font-feature-settings: "kern", "liga", "dlig", "salt"; + font-size: 2.4rem; +} + +main > section, footer { + max-width: 1000px; + padding: 3rem 3rem 3rem 200px; + margin: auto; +} + +header { + width: 100%; + text-align: center; + padding-top: 3rem; + padding-bottom: 3rem; +} + +footer { + display: flex; +} + +footer > section { + width: 50%; } h1 { - font-size: 30px; - letter-spacing: -1px; - color: #222; - font-weight: bold; + font-size: 4.8rem; + font-weight: 500; + margin: 0px; +} +h1::after { + content: "🙡 🙣"; + font-size: 4.8rem; + display: block; + color: var(--color-accent); +} + +h2, h3 { + font-variant: small-caps; + text-transform: lowercase; + letter-spacing: 0.1em; + font-size: 1.8rem; + margin-top: 0px; } h2 { - font: italic 19px/1.3em Georgia,serif; - color: #bbb; + position: absolute; + width: 180px; + margin: 0px 0px 0px -200px; + text-align: right; + padding: 5px 20px 0px 0px; } -sup { - vertical-align: super; - font-size: 72%; +h3 { + padding-top: 5px; } -.profile #wrapper { - padding: 100px 40px 0px; - max-width: 600px; - margin: 0 auto; +h4, h5, h6 { + font-weight: normal; + font-size: 1.8rem; + margin: 0px; } -.profile #header { - border-bottom: 1px solid #eee; - margin-bottom: 40px; - padding-bottom: 40px; - text-align: center; - position: relative; +p { + margin: 0; } -.profile #avatar { - display: inline-block; - width: 80px; - height: 80px; - border-radius: 50%; - margin-bottom: 20px; +.list ul { + padding: 0px; } -.profile h1 { - font-weight: 400; - letter-spacing: 0px; - font-size: 20px; - color: #222; +.list li { + display: inline; } -.profile h2 { - font-size: 20px; - font-weight: 300; - color: #aaa; - margin-top: 10px; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-style: normal; - -} - -nav.main-nav { - padding: 20px 20px 0; - - /*max-width: 600px;*/ - /*width:100%;*/ - background: #fff; - background: rgba(255,255,255,.90); - margin: 0 auto; - text-align: right; - /*position: fixed;*/ - z-index: 100; -} - -nav.main-nav a { - top: 8px; - right: 6px; - padding: 8px 12px; - color: #5badf0; - font-size: 13px; - /*font-weight: bold;*/ - line-height: 1.35; - border-radius: 3px; - -} -nav.main-nav a.cta { - background: #5badf0; - color: #fff; - margin-left: 12px; -} - -#wrapper { - max-width: 600px; - margin: 0 auto; - padding: 60px 40px 100px 40px; -} - -#wrapper.home { - max-width: 600px; - margin: 0 auto; - padding: 0px 40px 20px 40px; -} - -.home #avatar { - float: right; - width: 40px; - height: 40px; - border-radius: 50%; -} - -/* Typography */ -/*Accent color*/ -a, -#title, -#post-list a:hover, -#post-list li:hover .dates, -#title:hover { - text-decoration: none; - color: #5badf0; - color: #5694f1; -} - -p a { color: #5694f1; } - -/*Transitions*/ -a, -#post-nav a, -#post-list a { - -webkit-transition: all 0.15s ease; - -moz-transition: all 0.15s ease; - -ms-transition: all 0.15s ease; - -o-transition: all 0.15s ease; - transition: all 0.15s ease; -} - -ul { margin:0; /* padding:0;*/ } -li { /*list-style-type:circle; list-style-position:inside;*/ line-height: 1.} -#wrapper > ul { padding: 0px 0px 0px 40px; line-height: 1.5; } - -/* Line Height */ -#post-body, p { line-height:1.7; text-align: justify; } - -b, strong { font-weight: 1000; - color: #1E2025; } -em, i { font-style: italic; } - -#title { - display: inline-block; - line-height: 100%; - font-weight: 500; - font-size: 19px; - margin: 0; - padding-bottom: 20px; -} - -.description { - float: right; - font: italic 14px/1.4em Georgia,serif; - color: #aaa; -} - - - -.home h1 { - font-size: 30px; - letter-spacing: -1px; - color: #222; - font-weight: bold; -} - -.home h2 { - font: italic 19px/1.3em Georgia,serif; - color: #bbb; -} - -.post header { - text-align:center; - -} - -.post h1 { - margin-bottom:2 0px; - color: #222; - font: 300 32px/1.4em "Helvetica Neue", Helvetica,Arial,sans-serif; -} - -.post h2 { - margin-bottom: 40px; - font: 300 24px/1.5 "Helvetica Neue",Helvetica,Arial,sans-serif; - color: #111; -} - - -.post h2.headline { - /*font: italic 22px/1.3em Georgia,serif;*/ - font: normal 13px/1.5em "Helvetica Neue",Helvetica,Arial,sans-serif; - margin: -5px 0 40px 0; - color: #b2b9be; - font-size: 13px; - text-transform: uppercase; - letter-spacing: 2px; - /*margin-top: 15px;*/ - display: inline-block; -} - -#post-list h2 { - font: normal 17px/1.5em "Helvetica Neue",Helvetica,Arial,sans-serif; - color: #aaa; - max-width: 400px; - margin-top: 2px; -} - -h3, h4, h5 { color:#333; } - -h3 { font-size:20px; font-weight: 400; } -h4 { font-size:16px; font-weight:bold; } -h5 { font-size:15px; font-weight: bold; } - -h6 { - font-size: 13px; - font-weight: bold; - color: #666; - margin-bottom: 6px; -} - -p.small { - color: #bbb; - font-size: 14px; - line-height: 1.5; - display: block; -} - -blockquote { - padding-left: 15px; - border-left: 3px solid #eee; -} - -hr { - display: block; - border: none; - height: 1px; - margin: 40px auto; - background: #eee; -} - -span.code, p code, ul code{ - font-family:Menlo, Monaco, Courier; - color: #ffffff; - padding: 6px 6px 3px 6px; - background-color:#272b2d; - font-size:14px; } - -pre { - font-family:Menlo, Monaco, Courier; - white-space:pre-wrap; - /*border: 1px solid #ddd;*/ - padding:20px; - background-color:#fdfdfd; - /*font-size:14px;*/ - overflow:auto; - border-radius: 3px; - background: #272b2d; - font-family: 'Source Code Pro',Menlo,monospace; - font-size: 13px; - line-height: 1.5em; - font-weight: 500; - color: #d0d4d7; - -} - -table { - width: 100%; - margin: 40px 0; - border-collapse: collapse; - font-size: 13px; - line-height: 1.5em; -} - -th,td { - text-align: left; - padding-right: 20px; - vertical-align: top; -} - -table td,td { - border-spacing: none; - border-style: solid; - padding: 10px 15px; - border-width: 1px 0 0 0; -} - -tr>td { - border-top: 1px solid #eaeaea; -} - -tr:nth-child(odd)>td { - background: #fcfcfc; -} - -thead th,th { - text-align: left; - padding: 10px 15px; - height: 20px; - font-size: 13px; - font-weight: bold; - color: #444; - border-bottom: 1px solid #dadadc; - cursor: default; - white-space: nowrap; -} - -img { - width: 100%; - max-width: 100%; - border-radius: 3px; -} - -/* Made with Cactus Badge */ -#badge { - position: absolute; - bottom: 8px; - right: 8px; - height: 48px; - width: 48px; -} - -/*========================================= -Post List -=========================================== */ -#post-list,#archive-list { - margin-top: 100px; -} - -#post-list li,#archive-list li { - list-style-type: none; -} - -#post-list li:last-child { - margin-bottom: 0; -} - -#post-list li+li { - padding-top: 20px; - border-top: 1px solid #eee; -} - -#post-list a { - color: #333; - display: block; - font: bold 19px/1.7 "Helvetica Neue",helvetica,Arial,sans-serif; -} - -#post-list .dates { - float: right; - position: relative; - top: 1px; - font: 300 17px/1.8 "Helvetica Neue",helvetica,Arial,sans-serif; - color: #bbb; -} - -#post-list-footer { - border-top: 1px solid #eee; - margin-top: 20px; - padding-top: 100px; -} - -#archive-link { - display: inline-block; - font-size: 13px; - font-weight: bold; - border-radius: 4px; - padding: 3px 10px 6px; - box-shadow: 0 0 0 1px hsla(207,83%,80%,1); -} - -#archive-link:hover { - background: #5694f1; - color: #fff; - box-shadow: 0 0 0 1px #5694f1; -} - -#archive-link span { - position: relative; - top: 0; - font-size: 17px; -} - -#footer { - box-shadow: inset 0 1px 0 #eee; - padding: 40px 0 0 0; - margin-top: 100px; -} - -/* Post Page */ -#header { - border-bottom: 1px solid #eee; -} - -.post { - margin: 80px 0 0 0; -} - -#post-meta { - font-size: 13px; - font-weight: bold; - line-height: 1.4; - border-top: 1px solid #eee; - padding-top: 40px; - margin-bottom: 40px; - padding-bottom: 40px; - margin-top: 40px; - color:#444; - border-bottom: 1px solid #eee; -} - -#post-meta div span { - color: #aaa; - font-weight: 500; - display: block; -} - -#post-meta div span.dark { - color: #1E2025; - -} - -#post-meta div { - margin: 0 25px 0 0; - float: left; -} - -#sharing { - float: right; - margin: -2px; -} - -#sharing a { - font-size: 20px; - font-size: 23px; - margin-left: 1px; - margin-top: 4px; - color: #d4d4d4; - display: inline-block; - vertical-align: middle; -} - -#sharing a:hover { - /*color: #444;*/ - opacity: 0.8; -} - -/* Post Navigation */ -#post-nav { - border-top:1px solid #eee; - text-align:center; - padding-top:20px; - font-size:13px; - font-weight:500; - margin-top: 40px; -} - -#post-nav span { - -webkit-transition: all 0.1s linear; - -moz-transition: all 0.1s linear; - -ms-transition: all 0.1s linear; - -o-transition: all 0.1s linear; - transition: all 0.1s linear; - position: relative; +.list li:not(:first-child)::before { + content: "🙘"; + display: inline-block; + vertical-align: middle; + width: 4rem; + text-align: center; } -#post-nav span.prev { - float: left; +a, a:hover, a:visited { + padding: 0rem 0.6rem; + margin: 0rem -0.6rem; + color: var(--color-accent); + text-decoration: none; + transition: background-color 400ms; } -#post-nav span.next { - float: right; +a:hover { + background-color: var(--color-second); } -#post-nav span .arrow { - position: relative; - padding: 1px; +.card { + margin-bottom: 1.8rem; } -#post-nav span.prev:hover .arrow { - left: -4px; -} - -#post-nav span.next:hover .arrow { - right: -4px; -} - -#post-nav span.prev:hover { - left: -3px; -} - -#post-nav span.next:hover { - right: -3px; -} - -/* Archive */ -h1.archive { - margin-bottom: 0px; -} - -h2.month { - width: 100%; - font: bold 13px/1 "Helvetica Neue",helvetica,Arial,sans-serif; - text-transform: uppercase; - margin-top: 40px; - margin-bottom: 10px; - padding-bottom: 10px; - border-bottom: 1px solid #eee; -} - -#archive-list li:last-child { - margin-bottom: 0; -} - -#archive-list a { - display: block; - font: bold 17px/1.7 "Helvetica Neue",helvetica,Arial,sans-serif; - color: #333; -} - -#archive-list .dates { - float: right; - position: relative; - top: 1px; - font: 300 17px/1.7 "Helvetica Neue",helvetica,Arial,sans-serif; - color: #bbb; -} - -#archive-list li a:hover,#archive-list li:hover .dates { - color: #5694f1; -} - -#post-meta img.avatar { - height: 36px; - width: 36px; - float: left; - border-radius: 50%; - margin-top: 3px; - margin-right: 20px; - box-shadow: 0 0 0 3px #fff, 0 0 0 4px #eee; -} - -#post-list.archive.readmore h3{ - - font: 400 20px "Helvetica Neue", Helvetica,Arial,sans-serif; - margin-bottom: 30px; -} - -#post-list.archive.readmore a{ - font: 400 16px/1.6 "Helvetica Neue",helvetica,Arial,sans-serif; - color: #5694f1; -} - -#post-list.archive.readmore a:hover{ - opacity: 0.8; -} - -#post-list.archive.readmore .dates{ - font: 300 16px/1.6 "Helvetica Neue",helvetica,Arial,sans-serif; -} -#sharing a.facebook { - background: #4361b3; -} -#sharing a.twitter { - background: #4fafed; -} - -#sharing a { - font-size: 20px; - font-size: 13px; - font-weight: bold; - color: #fff; - padding: 6px 10px; - border-radius: 4px; - margin-left: 2px; -} - -/* Media Queries */ -@media screen and (max-width: 540px) { - #wrapper { padding:20px 20px 20px 20px;} - #header { margin-bottom: 60px; border-bottom: 1px solid #eee; } - .post { margin: 40px 0; } - #footer { margin-top: 60px; } - - #post-list, #archive-list { margin-top: 0; } - #post-meta { margin-top: 60px; } - - #title { font-size: 17px; } - #post-list .dates { display: none; } - - #post-list-footer { margin-top: 20px; padding-top: 40px; } - - h1 { font-size: 26px; } - .post h2.headline { font-size: 13px; } - .post h1 { font-size:24px; } - .post h2 { font-size:20px; } +.card > p { + font-size: 1.6rem; + color: var(--color-text-second); } diff --git a/assets/css/typo.css b/assets/css/typo.css new file mode 100644 index 0000000..9d18428 --- /dev/null +++ b/assets/css/typo.css @@ -0,0 +1,181 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff1jvzRPA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff8jvzRPA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff3jvzRPA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff2jvzRPA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff4jvw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf1jvzRPA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf8jvzRPA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf3jvzRPA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf2jvzRPA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf4jvw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVcf6lvg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZXMf6lvg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZV8f6lvg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVsf6lvg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZWMf6.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + diff --git a/assets/fonts/icons.eot b/assets/fonts/icons.eot deleted file mode 100644 index 03b02f9..0000000 Binary files a/assets/fonts/icons.eot and /dev/null differ diff --git a/assets/fonts/icons.svg b/assets/fonts/icons.svg deleted file mode 100644 index 83f103b..0000000 --- a/assets/fonts/icons.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - -Copyright (C) 2013 by original authors @ fontello.com - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/fonts/icons.ttf b/assets/fonts/icons.ttf deleted file mode 100644 index 1b4e5a0..0000000 Binary files a/assets/fonts/icons.ttf and /dev/null differ diff --git a/assets/fonts/icons.woff b/assets/fonts/icons.woff deleted file mode 100644 index a6469ba..0000000 Binary files a/assets/fonts/icons.woff and /dev/null differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf1jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf1jvzRPA.woff2 new file mode 100644 index 0000000..50541de Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf1jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf2jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf2jvzRPA.woff2 new file mode 100644 index 0000000..abbc363 Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf2jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf3jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf3jvzRPA.woff2 new file mode 100644 index 0000000..62179c7 Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf3jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf4jvw.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf4jvw.woff2 new file mode 100644 index 0000000..051450d Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf4jvw.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf8jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf8jvzRPA.woff2 new file mode 100644 index 0000000..a31db62 Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR71Wvf8jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff1jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff1jvzRPA.woff2 new file mode 100644 index 0000000..24f59b9 Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff1jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff2jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff2jvzRPA.woff2 new file mode 100644 index 0000000..2643a8a Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff2jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff3jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff3jvzRPA.woff2 new file mode 100644 index 0000000..16930ca Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff3jvzRPA.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff4jvw.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff4jvw.woff2 new file mode 100644 index 0000000..d07054a Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff4jvw.woff2 differ diff --git a/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff8jvzRPA.woff2 b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff8jvzRPA.woff2 new file mode 100644 index 0000000..b2b2558 Binary files /dev/null and b/assets/fonts/u-4l0qyriQwlOrhSvowK_l5-eR7lXff8jvzRPA.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZV8f6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZV8f6lvg.woff2 new file mode 100644 index 0000000..6bd5694 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZV8f6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVcf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVcf6lvg.woff2 new file mode 100644 index 0000000..b867479 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVcf6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVsf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVsf6lvg.woff2 new file mode 100644 index 0000000..b50cd66 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZVsf6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZWMf6.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZWMf6.woff2 new file mode 100644 index 0000000..fdf59df Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZWMf6.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZXMf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZXMf6lvg.woff2 new file mode 100644 index 0000000..f81c5de Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l521wRZXMf6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2 new file mode 100644 index 0000000..c4394a8 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZV8f6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2 new file mode 100644 index 0000000..37ad47e Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVcf6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2 new file mode 100644 index 0000000..c0c9df4 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZVsf6lvg.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2 new file mode 100644 index 0000000..ead7c09 Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZWMf6.woff2 differ diff --git a/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2 b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2 new file mode 100644 index 0000000..460b06e Binary files /dev/null and b/assets/fonts/u-4n0qyriQwlOrhSvowK_l52xwNZXMf6lvg.woff2 differ diff --git a/assets/images/Kactus-theme-index.png b/assets/images/Kactus-theme-index.png deleted file mode 100644 index d090bb5..0000000 Binary files a/assets/images/Kactus-theme-index.png and /dev/null differ diff --git a/assets/images/Kactus-theme-post.png b/assets/images/Kactus-theme-post.png deleted file mode 100644 index ff64995..0000000 Binary files a/assets/images/Kactus-theme-post.png and /dev/null differ diff --git a/assets/images/avatar-me.png b/assets/images/avatar-me.png deleted file mode 100644 index 9707b3d..0000000 Binary files a/assets/images/avatar-me.png and /dev/null differ diff --git a/assets/images/avatar-me@2x.png b/assets/images/avatar-me@2x.png deleted file mode 100644 index 93b786c..0000000 Binary files a/assets/images/avatar-me@2x.png and /dev/null differ diff --git a/assets/images/avatar.png b/assets/images/avatar.png deleted file mode 100644 index b972b26..0000000 Binary files a/assets/images/avatar.png and /dev/null differ diff --git a/assets/images/avatar@2x.png b/assets/images/avatar@2x.png deleted file mode 100644 index fe1299e..0000000 Binary files a/assets/images/avatar@2x.png and /dev/null differ diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico deleted file mode 100644 index 2bba4e9..0000000 Binary files a/assets/images/favicon.ico and /dev/null differ diff --git a/assets/images/pages/mic01.png b/assets/images/pages/mic01.png deleted file mode 100644 index 3e566a0..0000000 Binary files a/assets/images/pages/mic01.png and /dev/null differ diff --git a/assets/images/pages/mic02.png b/assets/images/pages/mic02.png deleted file mode 100644 index 9ed1371..0000000 Binary files a/assets/images/pages/mic02.png and /dev/null differ diff --git a/assets/images/pages/mic03.png b/assets/images/pages/mic03.png deleted file mode 100644 index 7f1a28b..0000000 Binary files a/assets/images/pages/mic03.png and /dev/null differ diff --git a/assets/js/highlight.js b/assets/js/highlight.js deleted file mode 100644 index 3c55571..0000000 --- a/assets/js/highlight.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/no-?highlight|plain|text/.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/.exec(i))return E(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(E(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(B);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(B);r;){e+=n(B.substr(t,r.index-t));var a=g(L,r);a?(y+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(B)}return e+n(B.substr(t))}function d(){if(L.sL&&!x[L.sL])return n(B);var e=L.sL?f(L.sL,B,!0,M[L.sL]):l(B);return L.r>0&&(y+=e.r),"continuous"==L.subLanguageMode&&(M[L.sL]=e.top),h(e.language,e.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,B=""):e.eB?(k+=n(t)+r,B=""):(k+=r,B=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(B+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(B+=t),k+=b();do L.cN&&(k+=""),y+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),B="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"")+'"');return B+=t,t.length||1}var N=E(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,M={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var B="",y=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="");return{r:y,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||w.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(E(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return w.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,w.tabReplace)})),w.useBR&&(e=e.replace(/\n/g,"
")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;w.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){w=o(w,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function E(e){return x[e]||x[R[e]]}var w={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=E,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",bK:"TODO FIXME NOTE BUG XXX",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(r)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:r.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"[a-z\\d_]*_t"},r={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c","cc","h","c++","h++","hpp"],k:r,i:""]',k:"include",i:"\\n"},t.CLCM]},{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:r,c:["self",e]},{b:t.IR+"::",k:r},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"\\s+)+"+t.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:t.IR+"\\s*\\(",rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[t.CBCM]},t.CLCM,t.CBCM]}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"class deinit enum extension func import init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList"},t={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},s={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[s],{k:i,c:[o,e.CLCM,n,t,s,{cN:"func",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\(/}),{cN:"generics",b://,i:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",s,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"preprocessor",b:"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)"}]}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},l={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},c={cN:"params",b:/\(/,e:/\)/,c:["self",r,l,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,l,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,c]},{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\//,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("actionscript",function(e){var a="[a-zA-Z_$][a-zA-Z0-9_$]*",c="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)",t={cN:"rest_arg",b:"[.]{3}",e:a,r:10};return{aliases:["as"],k:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},c:[e.ASM,e.QSM,e.CLCM,e.CBCM,e.CNM,{cN:"package",bK:"package",e:"{",c:[e.TM]},{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.TM]},{cN:"preprocessor",bK:"import include",e:";"},{cN:"function",bK:"function",e:"[{;]",eE:!0,i:"\\S",c:[e.TM,{cN:"params",b:"\\(",e:"\\)",c:[e.ASM,e.QSM,e.CLCM,e.CBCM,t]},{cN:"type",b:":",e:c,r:10}]}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",b={cN:"doctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},n=[e.C("#","$",{c:[b]}),e.C("^\\=begin","^\\=end",{c:[b],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:c}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o="[>?]>",l="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",N=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+o+"|"+l+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown",subLanguageMode:"continuous"}),e.C("///","$",{sL:"markdown",subLanguageMode:"continuous"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},n=e.C("%","$"),i={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},b={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{cN:"function_name",b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={cN:"tuple",b:"{",e:"}",r:0},t={cN:"variable",b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},l={cN:"variable",b:"[A-Z][a-zA-Z0-9_]*",r:0},f={b:"#"+e.UIR,r:0,rB:!0,c:[{cN:"record_name",b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:a};s.c=[n,b,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,i,o,t,l,f];var u=[n,b,s,d,e.QSM,i,o,t,l,f];d.c[1].c=u,o.c=u,f.c[1].c=u;var v={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[v,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:a,c:u}},n,{cN:"pp",b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[v]},i,e.QSM,f,t,l,o,{b:/\.$/}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:i,l:o,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={cN:"preprocessor",b:/<\?(php)?|\?>/},i={cN:"string",c:[e.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"},a]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[e.BE]},a,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,i,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,n]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",i=r+"[+\\-]"+r+"i",a={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"shebang",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:i,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"variable",b:"'"+t},d={eW:!0,r:0},g={cN:"list",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{cN:"keyword",b:t,l:t,k:a},d]};return d.c=[c,l,s,u,p,g].concat(o),{i:/\S/,c:[n,l,s,p,g].concat(o)}});hljs.registerLanguage("http",function(t){return{aliases:["https"],i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("less",function(e){var r="[\\w-]+",t="("+r+"|@{"+r+"})",a=[],c=[],n=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},i=function(e,r,t){return{cN:e,b:r,r:t}},s=function(r,t,a){return e.inherit({cN:r,b:t+"\\(",e:"\\(",rB:!0,eE:!0,r:0},a)},b={b:"\\(",e:"\\)",c:c,r:0};c.push(e.CLCM,e.CBCM,n("'"),n('"'),e.CSSNM,i("hexcolor","#[0-9A-Fa-f]+\\b"),s("function","(url|data-uri)",{starts:{cN:"string",e:"[\\)\\n]",eE:!0}}),s("function",r),b,i("variable","@@?"+r,10),i("variable","@{"+r+"}"),i("built_in","~?`[^`]*?`"),{cN:"attribute",b:r+"\\s*:",e:":",rB:!0,eE:!0});var o=c.concat({b:"{",e:"}",c:a}),u={bK:"when",eW:!0,c:[{bK:"and not"}].concat(c)},C={cN:"attribute",b:t,e:":",eE:!0,c:[e.CLCM,e.CBCM],i:/\S/,starts:{e:"[;}]",rE:!0,c:c,i:"[<=$]"}},l={cN:"at_rule",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:c,r:0}},d={cN:"variable",v:[{b:"@"+r+"\\s*:",r:15},{b:"@"+r}],starts:{e:"[;}]",rE:!0,c:o}},p={v:[{b:"[\\.#:&\\[]",e:"[;{}]"},{b:t+"[^;]*{",e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",c:[e.CLCM,e.CBCM,u,i("keyword","all\\b"),i("variable","@{"+r+"}"),i("tag",t+"%?",0),i("id","#"+t),i("class","\\."+t,0),i("keyword","&",0),s("pseudo",":not"),s("keyword",":extend"),i("pseudo","::?"+t),{cN:"attr_selector",b:"\\[",e:"\\]"},{b:"\\(",e:"\\)",c:o},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,l,d,p,C),{cI:!0,i:"[=>'/<($\"]",c:a}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[{cN:"title",b:"[a-zA-Z](\\.?\\w)*",r:0},e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("haskell",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],a={cN:"pragma",b:"{-#",e:"#-}"},i={cN:"preprocessor",b:"^#",e:"$"},n={cN:"type",b:"\\b[A-Z][\\w']*",r:0},t={cN:"container",b:"\\(",e:"\\)",i:'"',c:[a,i,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"})].concat(c)},l={cN:"container",b:"{",e:"}",c:t.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[t].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[t].concat(c),i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[n,t].concat(c)},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,n,t,l].concat(c)},{cN:"default",bK:"default",e:"$",c:[n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[n,e.QSM].concat(c)},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,i,e.QSM,e.CNM,n,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("lua",function(e){var t="\\[=*\\[",a="\\]=*\\]",r={b:t,e:a,c:["self"]},n=[e.C("--(?!"+t+")","$"),e.C("--"+t,a,{c:[r],r:10})];return{l:e.UIR,k:{keyword:"and break do else elseif end false for if in local nil not or repeat return then true until while",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},c:n.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:n}].concat(n)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:a,c:[r],r:5}])}});hljs.registerLanguage("xml",function(t){var e="[A-Za-z0-9\\._:-]+",s={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[c],starts:{e:"",rE:!0,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[c],starts:{e:"",rE:!0,sL:""}},s,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("lisp",function(b){var e="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",r="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={cN:"shebang",b:"^#!",e:"$"},i={cN:"literal",b:"\\b(t{1}|nil)\\b"},l={cN:"number",v:[{b:r,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+r+" +"+r,e:"\\)"}]},t=b.inherit(b.QSM,{i:null}),d=b.C(";","$",{r:0}),n={cN:"variable",b:"\\*",e:"\\*"},u={cN:"keyword",b:"[:&]"+e},N={b:e,r:0},o={b:c},s={b:"\\(",e:"\\)",c:["self",i,t,l,N]},v={cN:"quoted",c:[l,t,n,u,s,N],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:"quote"},{b:"'"+c}]},f={cN:"quoted",v:[{b:"'"+e},{b:"#'"+e+"(::"+e+")*"}]},g={cN:"list",b:"\\(\\s*",e:"\\)"},q={eW:!0,r:0};return g.c=[{cN:"keyword",v:[{b:e},{b:c}]},q],q.c=[v,f,g,i,l,t,d,n,u,o,N],{i:/\S/,c:[l,a,i,t,d,v,f,g,N]}});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"function",b:t+"\\(",rB:!0,eE:!0,e:"\\("},o={cN:"hexcolor",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[r,o,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"important",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,r,{cN:"id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{cN:"pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{cN:"value",b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{cN:"value",b:":",e:";",c:[r,i,o,e.CSSNM,e.QSM,e.ASM,{cN:"important",b:"!important"}]},{cN:"at_rule",b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[r,i,e.QSM,e.ASM,o,e.CSSNM,{cN:"preprocessor",b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("scala",function(e){var t={cN:"annotation",b:"@[A-Za-z]+"},a={cN:"string",b:'u?r?"""',e:'"""',r:10},r={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},i={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},l={cN:"class",bK:"class object trait type",e:/[:={\[(\n;]/,c:[{cN:"keyword",bK:"extends with",r:10},i]},n={cN:"function",bK:"def val",e:/[:={\[(\n;]/,c:[i]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,e.QSM,r,c,n,l,e.CNM,t]}});hljs.registerLanguage("ini",function(e){return{cI:!0,i:/\S/,c:[e.C(";","$"),{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[e.QSM,e.NM],r:0}]}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=e.C("^(__END__|__DATA__)","\\n$",{r:5}),o=[e.BE,r,n],a=[n,e.HCM,i,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:o,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,i,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];return r.c=a,s.c=a,{aliases:["pl"],k:t,c:a}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"doctype",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"title",b:"\\w+"},{cN:"value",b:"[#\\.][\\w-]+"},{b:"{\\s*",e:"\\s*}",eE:!0,c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"symbol",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attribute",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{cN:"bullet",b:"^\\s*[=~]\\s*",r:0},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("clojure",function(e){var t={built_in:"def cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",n="["+r+"]["+r+"0-9/;:]*",a="[-+]?\\d+(\\.\\d+)?",o={b:n,r:0},s={cN:"number",b:a,r:0},i=e.inherit(e.QSM,{i:null}),c=e.C(";","$",{r:0}),d={cN:"literal",b:/\b(true|false|nil)\b/},l={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+n},p=e.C("\\^\\{","\\}"),u={cN:"attribute",b:"[:]"+n},f={cN:"list",b:"\\(",e:"\\)"},h={eW:!0,r:0},y={k:t,l:n,cN:"keyword",b:n,starts:h},b=[f,i,m,p,c,u,l,s,d,o];return f.c=[e.C("comment",""),y,h],h.c=b,l.c=b,{aliases:["clj"],i:/\S/,c:[f,i,m,p,c,u,l,s,d]}}); \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js deleted file mode 100644 index c5d6c85..0000000 --- a/assets/js/main.js +++ /dev/null @@ -1,36 +0,0 @@ -// To make images retina, add a class "2x" to the img element -// and add a @2x.png image. Assumes jquery is loaded. - -function isRetina() { - var mediaQuery = "(-webkit-min-device-pixel-ratio: 1.5),\ - (min--moz-device-pixel-ratio: 1.5),\ - (-o-min-device-pixel-ratio: 3/2),\ - (min-resolution: 1.5dppx)"; - - if (window.devicePixelRatio > 1) - return true; - - if (window.matchMedia && window.matchMedia(mediaQuery).matches) - return true; - - return false; -}; - - -function retina() { - - if (!isRetina()) - return; - - $("img.2x").map(function(i, image) { - - var path = $(image).attr("src"); - - path = path.replace(".png", "@2x.png"); - path = path.replace(".jpg", "@2x.jpg"); - - $(image).attr("src", path); - }); -}; - -$(document).ready(retina); \ No newline at end of file diff --git a/index.html b/index.html index eac68ad..49efaca 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,147 @@ ---- -profile: true ---- +
+

Quentin Dufour

+
-{% include post-list.html %} -{% include footer.html %} \ No newline at end of file +
+
+

Qui suis-je ?

+

+ Je suis ingénieur en informatique et libriste. + J'ai travaillé sur Tor pendant ma thèse. + Depuis, j'ai cofondé Deuxfleurs, un hébergeur associatif expérimental pour lequel je travaille. + Nous développons des logiciels pour faciliter l'auto-hébergement comme Garage, une solution de stockage de données distribuée. +

+ + +
+ +
+

J'écris sur

+
+

Comment fabriquer du logiciel

+ +
+

Comment opérer des ordinateurs

+

Comment sécuriser le numérique

+

D'autres choses

+
+
+ +
+

Des liens

+
+

Pour des rencontres

+ +
+

Coline Aubert

+

Didactique visuelle et design graphique

+
+ +
+

Alex Auvolat

+

Sciences informatiques et systèmes sistribués

+
+ +
+

Loïck Bonniot

+

Logiciel libre et sécurité

+
+ +
+

Esther Bouquet

+

Design graphique et d’espace

+
+ +
+

Tristan Claverie

+

Sécurité, sans fil et Bluetooth

+
+ +
+

Erwan Dufour

+

Électronique et culture maker

+
+ +
+

Louison Gitzinger

+

Machine learning, Android et musique

+
+ +
+

Jean Guégant

+

C++ et développement de jeux vidéo

+
+ +
+

Florian Le Minoux

+

Système et Linux

+
+ +
+

Adrien Luxey

+

Recherche et réseaux décentralisés

+
+ +
+

Maximilien Richer

+

Système, SRE et DevOps

+
+ +
+
+

Vers des projets

+
+

Deuxfleurs

+

Hébergeur associatif expérimental.
+ S'auto-déterminer pour tracer notre voie dans le numérique. +

+
+ +
+

Bottin

+

Un annuaire LDAP "cloud-native" écrit en Go et s'interfaçant avec Consul.

+
+ +
+

Garage

+

Un logiciel de stockage de données géo-distribué écrit en Rust. C'est une alternative à AWS S3 et Minio.

+
+ +
+
diff --git a/key-transition-2017.md b/key-transition-2017.md deleted file mode 100644 index 7cdf104..0000000 --- a/key-transition-2017.md +++ /dev/null @@ -1,63 +0,0 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA256 - -Transition RSA2048 à ED25519 -============================ - -Mon ancienne clé : - -``` -sec rsa2048 2013-10-04 [SC] [expire : 2017-07-08] - 078514BD2C10233B394B725DC064D05C24BDA239 -uid [ ultime ] Quentin Dufour (Perso) -uid [ ultime ] Quentin Dufour (INSA) -uid [ ultime ] Quentin Dufour -uid [ ultime ] Quentin Dufour (INSA) -uid [ ultime ] [jpeg image of size 4482] -ssb rsa2048 2013-10-04 [E] -``` - -Ma nouvelle clé : - -``` -sec ed25519 2017-01-07 [SC] [expire : 2018-01-07] - 645F540AAABE1452B294C970917FE4820B739EB3 -uid [ ultime ] Quentin Dufour -uid [ ultime ] Quentin Dufour -ssb cv25519 2017-01-07 [E] [expire : 2018-01-07] -``` - -Ce message est signé à l'aide des deux clés. - -*Remplacez `gpg` par `gpg2` si vous avez les deux versions sur votre système comme sous Fedora* - -Importez ma nouvelle clé : - -``` -gpg --keyserver keyserver.ubuntu.com --recv 0B739EB3 -``` - -Une fois ça, vous pouvez vérifier à l'aide de la commande suivante ce message - -``` -curl https://quentin.dufour.io/key-transition-2017.md | gpg --verify -``` - -Normalement, la première signature doit être reconnue et de confiance quand la deuxième doit être connue mais pas de confiance. - -Vous pouvez alors signer ma clé si vous le désirez. Si vous n'avez jamais signé ma clé alors on pourra faire ça dès qu'on se voit physiquement :-) - -Source : https://vincent.bernat.im/en/blog/2012-gpg-transition-new-key.html & lesterpig ------BEGIN PGP SIGNATURE----- - -iQEzBAEBCAAdFiEEB4UUvSwQIzs5S3JdwGTQXCS9ojkFAlhxQTMACgkQwGTQXCS9 -ojlTawf9HC8147M5Knm01rJBvS84tgyqtYDHV142BSSpjz4l0jiE5fJBw/1kd9od -tTovzzq/9BIpwDI8SP6n5SNcY9aDeWmvXwigsC9Ud101039zfScR4iGRr0N54qbn -gZk6nlptA4i3v2o6TEgJZZLXGVNTu5DZoxdcMvvxvk2hBvH3o3FKaZ4TEfhU5Lro -7Lk4EkxBIRXI2SXLSXJZLzPLj6M9lRpmCB/jkeGvoC6qVYvI7eQrdOqd1bm8k6p8 -T5pZZCXLcqd8lIYwFagh9o1UsYUAtPkvUjTvR3zbWFjowRcJocgpmSgpFAfGEP1P -Ival06EUTA3Z5+nMXt5tB6Wd3D9I6Yh1BAEWCAAdFiEEZF9UCqq+FFKylMlwkX/k -ggtznrMFAlhxQTQACgkQkX/kggtznrPrPAEAvqg2xZh3rslk6CHImVAA3bVbKLOx -9O2SgiGoABkqglsA/ReSj/5PcOs80jW9wPFXC1iWQ/tNehz+AtpfOOteZ3QP -=ng0x ------END PGP SIGNATURE-----