JavaScript est le langage de programmation le plus populaire actuellement avec Python. Pour le développement d’une application web front-end ou back-end, il est partout. Voici les frameworks de développement qui perdurent avec avec une communauté active … contrairement à JQuery ou AngularJS qui ont tendance à passer de mode.
REACT
Créée en 2013 par des ingénieurs de chez Facebook, il a clairement disrupté le développement web, il y a un avant et un après React. Il a introduit entre autres le développement orienté composants, le DOM virtuel et le concept de programmation fonctionnelle. Meilleure expérience utilisateurs, gains de performance, c’est clairement le framework de développement web qui domine aujourd’hui avec le plus de téléchargement par semaine et le deuxième plus grand nombre de contributeurs. Il bénéficie en effet entre autres de près de 3 milliards d’utilisateurs Facebook qui testent en continu les nouvelles fonctionnalités qui sont développées en permanence et qui ne cessent d’améliorer ce framework.
React, c’est du développement d’applications web, mobiles (React Native), des app Desktop (Electron), et du développement back-end avec Node JS. C’est également une multitude de bibliothèques de composants dont voici un excellent article pour aller plus loin : https://www.codeinwp.com/blog/react-ui-component-libraries-frameworks/
NODE JS
Créé en 2009, est le premier runtime Javascript server-side asynchrone qui utilise la machine virtuelle V8 et C++ pour le développement back-end. En raison de son fonctionnement asynchrone piloté par événements et sa légèreté, Node JS est plébiscité pour toutes les applications web gourmandes en entrées/sorties mais aussi l’IoT et le Serverless.
Il permet de créer des applications cross-plateforme, il fonctionne sous iOS, macOS, Android, Windows, Linux, etc. C’est un framework open-source soutenu par tous les géants de la Tech tels que Microsoft, Netflix, IBM. Celui-ci compte le plus grand nombre de contributeurs dans GitHub. Il supporte nativement Javascript mais également tous les autres langages « compile to JS » comme TypeScript, Dart, etc. Il supporte également le phénomène à suivre de près, WebAssembly.
EXPRESS JS
Hébergé dans un environnement d’exécution Node JS, Express est basé sur un Framework web minimaliste inspiré de Sinatra. C’est devenu un incontournable.
C’est souvent l’API par défaut pour développer rapidement des applications Node JS car il fournit un ensemble d’outils qui permettent par exemple d’utiliser des templates (vues) ou de gérer des routes (URL demandées par Node JS). Ses avantages ? Hautes performances, routage robuste et livraison avec une quinzaine de middlewares de bases qui vous offrent l’essentiel des micro-fonctionnalités. D’après GitHub, c’est de loin le framework le plus téléchargé par semaine !
VUE JS
Créé en 2014 par un ancien ingénieur de Google, Evan You, dont l’objectif était de faciliter la prise en main de développement front-end depuis Javascript, Vue.JS est né d’un mixte du meilleur de AngularJS (View Layer) et de React (DOM virtuel) qui en font aujourd’hui un des frameworks les plus faciles à utiliser rapidement pour des applications web monopages ou des interfaces utilisateurs légères via des templates HTML.
ANGULAR
Créée par Google en 2016, AngularJS est un framework end-to-end complet qui permet de développer de bout en bout toutes applications web. C’est le premier framework a avoir adopté TypeScript, ce qui a notamment contribué à rendre populaire ce langage. Même si Angular semble aujourd’hui passer un peu de mode face au succès grandissant de React, il n’en reste pas moins un incontournable par sa grande fiabilité et robustesse éprouvées notamment lorsqu’on doit gérer de grandes bases de données. Certes, la syntaxe reste complexe et le langage lourd avec une courbe d’apprentissage relativement longue mais Il bénéficie d’améliorations régulières dont le moteur Ivy dans Angular 9 qui permet d’optimiser notamment les temps de démarrage et de réponse ; ou encore Lazy Loading qui améliore le temps de chargement de modules.
NEXT JS
Next.JS a été construit depuis les deux frameworks Javascript les plus populaires, React et Node, et propose une couche supérieure qui permet un meilleur rendu côté serveur pour les applications React. Il propose également une fonction intéressante de «Build once, runs everywhere » qui permet de développer une seule fois une application qui fonctionne sur le web, mobile ou desktop. C’est aujourd’hui le deuxième Framework javascript back-end le plus populaire.
Pour aller plus loin / sources :
LnRiLWdyaWQsLnRiLWdyaWQ+LmJsb2NrLWVkaXRvci1pbm5lci1ibG9ja3M+LmJsb2NrLWVkaXRvci1ibG9jay1saXN0X19sYXlvdXR7ZGlzcGxheTpncmlkO2dyaWQtcm93LWdhcDoyNXB4O2dyaWQtY29sdW1uLWdhcDoyNXB4fS50Yi1ncmlkLWl0ZW17YmFja2dyb3VuZDojZDM4YTAzO3BhZGRpbmc6MzBweH0udGItZ3JpZC1jb2x1bW57ZmxleC13cmFwOndyYXB9LnRiLWdyaWQtY29sdW1uPip7d2lkdGg6MTAwJX0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi10b3B7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWNlbnRlcnt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmNlbnRlcn0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi1ib3R0b217d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LWVuZH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0geyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAwLjVmcikgbWlubWF4KDAsIDAuNWZyKTtncmlkLWF1dG8tZmxvdzogcm93IH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAxKSB7IGdyaWQtY29sdW1uOiAxIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAyKSB7IGdyaWQtY29sdW1uOiAyIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uLnRiLWdyaWQtY29sdW1uW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW49ImQwMDhkNzZlMTY0MGI5OTA3YTExNzlhODgyNDBiMzkzIl0geyBkaXNwbGF5OiBmbGV4OyB9IC50Yi1zb2NpYWwtc2hhcmVfX25ldHdvcmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wO21hcmdpbi1yaWdodDo3cHg7bWFyZ2luLWJvdHRvbTo3cHh9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX2ZhY2Vib29rX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojM2I1OTk4O30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fbGlua2VkaW5fX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDdmYjE7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX190d2l0dGVyX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojMDBhY2VkO30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fcGludGVyZXN0X19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojY2IyMTI4O30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fdGVsZWdyYW1fX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiMzN2FlZTI7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX19yZWRkaXRfX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiM1Zjk5Y2Y7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX192aWJlcl9fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6IzdjNTI5ZTt9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX2VtYWlsX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojN2Y3ZjdmO30udGItc29jaWFsLXNoYXJlLS1yb3VuZCAuU29jaWFsTWVkaWFTaGFyZUJ1dHRvbntib3JkZXItcmFkaXVzOjUwJX0udGItc29jaWFsLXNoYXJlX19leGNlcnB0e2Rpc3BsYXk6bm9uZX0udGItc29jaWFsLXNoYXJlIC5Tb2NpYWxNZWRpYVNoYXJlQnV0dG9uLS1kaXNhYmxlZHtvcGFjaXR5OjAuNjV9IC50Yi1zb2NpYWwtc2hhcmVbZGF0YS10b29sc2V0LWJsb2Nrcy1zb2NpYWwtc2hhcmU9IjJlMGYxNjYwMDQyYzRjMDkzMWU4NzQwNDRiY2U1Mjk5Il0gLlNvY2lhbE1lZGlhU2hhcmVCdXR0b24geyB3aWR0aDogMzJweDtoZWlnaHQ6IDMycHg7IH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uLnRiLWdyaWQtY29sdW1uW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW49ImEzM2Y1ZGEwY2MzMWY1Y2FmZjU0NDVlOTMyNzFjMWMzIl0geyBkaXNwbGF5OiBmbGV4OyB9IEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpIHsgLnRiLWdyaWQsLnRiLWdyaWQ+LmJsb2NrLWVkaXRvci1pbm5lci1ibG9ja3M+LmJsb2NrLWVkaXRvci1ibG9jay1saXN0X19sYXlvdXR7ZGlzcGxheTpncmlkO2dyaWQtcm93LWdhcDoyNXB4O2dyaWQtY29sdW1uLWdhcDoyNXB4fS50Yi1ncmlkLWl0ZW17YmFja2dyb3VuZDojZDM4YTAzO3BhZGRpbmc6MzBweH0udGItZ3JpZC1jb2x1bW57ZmxleC13cmFwOndyYXB9LnRiLWdyaWQtY29sdW1uPip7d2lkdGg6MTAwJX0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi10b3B7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWNlbnRlcnt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmNlbnRlcn0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi1ib3R0b217d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LWVuZH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0geyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAwLjVmcikgbWlubWF4KDAsIDAuNWZyKTtncmlkLWF1dG8tZmxvdzogcm93IH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAxKSB7IGdyaWQtY29sdW1uOiAxIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0gPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMm4gKyAyKSB7IGdyaWQtY29sdW1uOiAyIH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uLnRiLWdyaWQtY29sdW1uW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW49ImQwMDhkNzZlMTY0MGI5OTA3YTExNzlhODgyNDBiMzkzIl0geyBkaXNwbGF5OiBmbGV4OyB9IC50Yi1zb2NpYWwtc2hhcmVfX25ldHdvcmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wO21hcmdpbi1yaWdodDo3cHg7bWFyZ2luLWJvdHRvbTo3cHh9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX2ZhY2Vib29rX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojM2I1OTk4O30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fbGlua2VkaW5fX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDdmYjE7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX190d2l0dGVyX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojMDBhY2VkO30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fcGludGVyZXN0X19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojY2IyMTI4O30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fdGVsZWdyYW1fX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiMzN2FlZTI7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX19yZWRkaXRfX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiM1Zjk5Y2Y7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX192aWJlcl9fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6IzdjNTI5ZTt9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX2VtYWlsX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojN2Y3ZjdmO30udGItc29jaWFsLXNoYXJlLS1yb3VuZCAuU29jaWFsTWVkaWFTaGFyZUJ1dHRvbntib3JkZXItcmFkaXVzOjUwJX0udGItc29jaWFsLXNoYXJlX19leGNlcnB0e2Rpc3BsYXk6bm9uZX0udGItc29jaWFsLXNoYXJlIC5Tb2NpYWxNZWRpYVNoYXJlQnV0dG9uLS1kaXNhYmxlZHtvcGFjaXR5OjAuNjV9LndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uLnRiLWdyaWQtY29sdW1uW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZC1jb2x1bW49ImEzM2Y1ZGEwY2MzMWY1Y2FmZjU0NDVlOTMyNzFjMWMzIl0geyBkaXNwbGF5OiBmbGV4OyB9ICB9IEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpIHsgLnRiLWdyaWQsLnRiLWdyaWQ+LmJsb2NrLWVkaXRvci1pbm5lci1ibG9ja3M+LmJsb2NrLWVkaXRvci1ibG9jay1saXN0X19sYXlvdXR7ZGlzcGxheTpncmlkO2dyaWQtcm93LWdhcDoyNXB4O2dyaWQtY29sdW1uLWdhcDoyNXB4fS50Yi1ncmlkLWl0ZW17YmFja2dyb3VuZDojZDM4YTAzO3BhZGRpbmc6MzBweH0udGItZ3JpZC1jb2x1bW57ZmxleC13cmFwOndyYXB9LnRiLWdyaWQtY29sdW1uPip7d2lkdGg6MTAwJX0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi10b3B7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS50Yi1ncmlkLWNvbHVtbi50Yi1ncmlkLWFsaWduLWNlbnRlcnt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1jb250ZW50OmNlbnRlcn0udGItZ3JpZC1jb2x1bW4udGItZ3JpZC1hbGlnbi1ib3R0b217d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24tY29udGVudDpmbGV4LWVuZH0gLndwLWJsb2NrLXRvb2xzZXQtYmxvY2tzLWdyaWQudGItZ3JpZFtkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQ9IjIyOTZlNTRlZGEwZjgwZTkxNzliYzk5N2ZkMWY3MTY4Il0geyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpO2dyaWQtYXV0by1mbG93OiByb3cgfSAud3AtYmxvY2stdG9vbHNldC1ibG9ja3MtZ3JpZC50Yi1ncmlkW2RhdGEtdG9vbHNldC1ibG9ja3MtZ3JpZD0iMjI5NmU1NGVkYTBmODBlOTE3OWJjOTk3ZmQxZjcxNjgiXSAgPiAudGItZ3JpZC1jb2x1bW46bnRoLW9mLXR5cGUoMW4rMSkgeyBncmlkLWNvbHVtbjogMSB9IC53cC1ibG9jay10b29sc2V0LWJsb2Nrcy1ncmlkLWNvbHVtbi50Yi1ncmlkLWNvbHVtbltkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uPSJkMDA4ZDc2ZTE2NDBiOTkwN2ExMTc5YTg4MjQwYjM5MyJdIHsgZGlzcGxheTogZmxleDsgfSAudGItc29jaWFsLXNoYXJlX19uZXR3b3Jre2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW4tcmlnaHQ6N3B4O21hcmdpbi1ib3R0b206N3B4fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX19mYWNlYm9va19fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6IzNiNTk5ODt9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX2xpbmtlZGluX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojMDA3ZmIxO30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fdHdpdHRlcl9fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6IzAwYWNlZDt9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX3BpbnRlcmVzdF9fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6I2NiMjEyODt9LnRiLXNvY2lhbC1zaGFyZS0tMDkyIC50Yi1zb2NpYWwtc2hhcmVfX3RlbGVncmFtX19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojMzdhZWUyO30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fcmVkZGl0X19zaGFyZS1idXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1jb2xvcjojNWY5OWNmO30udGItc29jaWFsLXNoYXJlLS0wOTIgLnRiLXNvY2lhbC1zaGFyZV9fdmliZXJfX3NoYXJlLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLWNvbG9yOiM3YzUyOWU7fS50Yi1zb2NpYWwtc2hhcmUtLTA5MiAudGItc29jaWFsLXNoYXJlX19lbWFpbF9fc2hhcmUtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtY29sb3I6IzdmN2Y3Zjt9LnRiLXNvY2lhbC1zaGFyZS0tcm91bmQgLlNvY2lhbE1lZGlhU2hhcmVCdXR0b257Ym9yZGVyLXJhZGl1czo1MCV9LnRiLXNvY2lhbC1zaGFyZV9fZXhjZXJwdHtkaXNwbGF5Om5vbmV9LnRiLXNvY2lhbC1zaGFyZSAuU29jaWFsTWVkaWFTaGFyZUJ1dHRvbi0tZGlzYWJsZWR7b3BhY2l0eTowLjY1fS53cC1ibG9jay10b29sc2V0LWJsb2Nrcy1ncmlkLWNvbHVtbi50Yi1ncmlkLWNvbHVtbltkYXRhLXRvb2xzZXQtYmxvY2tzLWdyaWQtY29sdW1uPSJhMzNmNWRhMGNjMzFmNWNhZmY1NDQ1ZTkzMjcxYzFjMyJdIHsgZGlzcGxheTogZmxleDsgfSAgfSA=