Wonderful Finite State Machine with XState
Tags: xstate, fsm, statemachine
Published: 2021-06-10 13:06:47

If you are constantly juggling with booleans and if statements,
if you want greater control over your UI components, then give [XState](https://xstate.js.org/) a try, you will be amazed.

Play with this demo, there is only one 'if' statement which prevents
rerendering the view if we are on the same state.

If you want the source code, ask it in comments :-)

[XStateDemo](https://flems.io/#0=N4IgtglgJlA2CmIBcAWAjAOgKwDYA0IAzvAgMYAu8UyIGAFuWLCAQGYQKHIDaoAdgEMwiJLQZMWIUgHs+lOTQA8hUgCcIAB3IACQqtIBeADogG5DYSQB6KwFc+GgNYBzDDLBWAHoXIDKAARQrKAgfLx8-eAwAK0ITAD5FKxV1LXijPgzFEIA3bVJYAUJCYxAIPlZpBIztbQAVOlDtJoE+bXhPIQ0EbWlWbQAxcohKbQBlX1GAWQFSRr54bVtCcudtAA0Iygws4Igc9My+bP38wuLSgQ0NarbtE7zoUpyIeAB3BKTcw9qHs6KSiZ3GBWlA4iAfrV7gAjWzkciyXp8AoQUiOUqEN4jOYAIVs0OhCAAFABKBKY7F0JKw+GySG-GkItqyFFo0rQ1TwASOPEE4lkiEcrmOalwpn0mFixEs2Co9EmTkaAQQVS8wnwUkJRXK1Si2l8SFffaHI0HDJZQnSNEAR1s0kohty-wuJg63WVmQhNShig08Qai1hsGhzUIzWZC10k0Wfm0rQAntpyBBhBgkn7vb8M3dagBJfrx6S2bRC7nNch4XRY8hzEvwdzwMPlaQaeCqVoV7SF4tgZY6bUq8s7HP3KzZqH3cdQ-NdovaN4dpN0RaEIv6RYyKDwSsrMDdRNFRzl8P5aRgYRyQiVznOASqMGZ0dT00mqyWm12h3mo4ZSTEMjJrIXCiAATAA7EgAAMIAAL54PwQgiLQsSSDIcjwAoohoT42jAPknKRDMczlNucYUBAQGVuUlCqBonI6DB2gGBsEyRAA3Bk2E6AA+pBnQ4AAnAIBjcAA5AAXm8WCQeJngQAA4vGABy0QAGoAIIAOqiXgomeLm0IACIDNaOmiTizgADJKepdC0eJUzxmZADCdBqYZzgCZBACinjQpZZniSBdSabYkFjGZGikAJADS6mePGADUZlgAAWmAaB8AAUnwRY5KwYCGZ4tguc4aBZTillObp8YgQJACqzl1WM4mmbp5AAMyWfA6kdfJZk5M4WAoIQzgoGZbyeKwMmWQA8mZ5AgQ5UWxfFSWBZ4AASWWydCkHqW8DWBW8KDyc5HWqJtHklbp2XROszk5AACusnIABxmbYlmbWg3k5NVonqc9s2GTFzlmR5AnkIZblPTiUzgzVbx8Pth2NdpulpfGWB8GglmQTiaBPawtgY6J5CWXwOTOWg8ADZBhk4OJy4TX5qXiUpN2iXIm3WsQ6wxao-2RTF6xPUFm2QRAVmpRAAhmdaMXTep8AA4tlkaLYJMbZtT2GaQ0K5s5UwCQASq1ZmqCBOTSDkSkA-GUyWfV4ny7pznOKwT3OQZeukAIm0QG1EmeOJkG2B1hl684fDzbpzOsLmmKI6Jhkges+xoMHX2qFl8a2FzaXWul5C2Kl5B2QAmuQzibVzhlSWo8DZyBT3qeQ4cpal8kgXwqXwCBFkCaw3lTOsqVmXI1odXwIGGQTXWsPGwdgOQ1ooOpSmbaoHfRBFulp6wlc4v17UgSgb2wCBqh61l40H5Z0TiTkIEQGZ6kgZZACKxuQRtYfWhUlVN4+9AaeGiB1HEBUXK2E2l-Wwbw-41TqvVDyOQUCGTdqJbyHVIL1Vqg1c6qhK6GWDt5TyORyCOTMvDLy6krIuzJuJGKhlyCqDQDFQK+VNLiXgJw3SQ8lI0KsjZOyGgT4bWiMfDqb9dLEEsupQy8AkGiXjM9WA5AYoqMILYHIfB6FkwOlgF24D9jwDQGAFKvgOo5DQJJHE4DnBmX0ptBxBlDKOErvJeSjgyYaGcDfQyBkYrxk8JdWAwdPBoAEppY2XlCYCQGBNWwaAlLOUgnTXSRipg4jJqvDKfBbDrAqvAJ6Sk17HX+upKYcdzIGVUjiAy+1nC2HkjiLBMNoibVqlzZybwnq5nUpBMmHlE4WS5t5Ww4ksAw2DkQq6LSBIQzoJZHhK8pqwEdpZMAWkXIxXEkWMan1e6pUGpY+OUlILOSUvw0SVs0AdUmrcox0dvrtJctbF2WD4YowOg1RwpAYqn0Br3KqOQuY5C2jkehtzxIdWiG8cSzhbmhOhJpHEdBnlvEMiDb5h06CEBucdaIjhQYA0hXwcShkOqZPMs4HILsLq1MMlMVgYwG5c0adCVKoyZLBwIY1C6JDkYEzJt5eA0QsrnXOaolSGlPkTTeKwbpHVbkF2paXFOskw62CmDkTS8Y3iWUrgtSyhlLJNTJsbU6HldbOUrhAJ6jgsHGxyAzcB9VUSbSmKQsy8YbGV1dag1gKNl40JAlgWwxtWCNU-vtYOU8QL5KwJ1ShbxWUO3TlVOSokAC6bEuLaF4p4FABJWDQgMCTZEgE+BEmLUJHAIFG14GLSBECpAwIgUgi2viWAoBYAEtCLAPbPBYHgDgHArABAkmAPRWwqg2jFqgKQKAOA629v7YOrAABaPiXbSAjrbR2rtJI2JwWLR1aEHUoB7UrfYcish12eA6rgTtAkR1oEglAC+YER19oEAIJth7SBYDAn2mdc6F1Fr4su1dT7-2AZwLuzw+6P1fp-aemCbEiRVofbW4taAJ04DQAegjpAUA3rejOwtBGL4CEgjgO91aKL4d7WBaE0U0AjuhMutAUAQIjooxRgDgmwKkGI2BCD8BS5QaXSutdxaUBiYk9u7QyH20dT-exzjmGP1gdIKweATG8NPo6mJ+srAR2XtIP7YdBGBDQhwKQTTF7lFQDAvAKTMnF0wfk6ZtzHnVPqec1Z8zBnMNsTeI0YkABCGL3Bc0zrYfGYANG91ftYCBKABglSqGILmOQT60B0YY0SZDDzLPlbevgcrE68DlawCBEkJIABU27cv5cKwR-Thmyt8TQFgTTVWUD1f61gaEo2onsea4lDr8ACvkCKz1jU5WvKTeicO8ruD1vEea21ubC2ltYAMytsbv7asCYu+tt60IZvtbvJ1xb3Xju9fKxRnbl2xsCHW2BKjJJZsPfm11-rJW11ve7Q1kb5XfvrfG3tg7wOomg761EgQm3+tvW3A1770OcAzYR09kHb16Ng-62BIb-WBJcaq++qrknWv3by0DwnSPielYa29dbDmue07J-TxKjPHtHZOyjz952Qfo6ie29bHUUB3YJ0V5H5XII4-65BcXUTZfrZAh1PbgvmfC9eyDyr-WQKc-K3VbXpBmtsQgKwJ9XaoCZeywYAwZGKPQio6WRwbESDEGg1EojJGxKa0IHQPNRWg+kDEmHu35AI825gv7GsdAn1gRQCBVgAksAzoI1HkPyxw+5sjxO4PolY+sHj8XxPMEYJPoEIJVXJbv3p8SqbjqHUBJtd7W3zw8As+ZZt7hmtAfYMKb4ugAdaBf3FqwON-jkngCKYG1TsCbuJ8r+n9uok-WOrid73VNAAu+ICC8i1vdp6EA8Q3-AN6IH1-8SEtwZfU+wL5rt0+sfIeIDeQad5PNruBg9gW47ACwUAM6OQd4AeneAkKAAga+w+LGRWaAIEaAb0uuqWQE1+JaTarA4mBgokDmK6-ezgjQJKsAYAuUGg1oeWpcOQk08Y4k6kOIzkhk3kAw8km0uYWUMUlkUwSks0T0X8psYwdQ9Uqkmk6wlcqUkEKBsur6b0AkiUVgBBbEV+0B6BKAAkRmokokbElQqgRI6hF60Sb0kEWABgyGHU5+o66Ax+US5GShe6pAkEpGe6YE2e9YgmWh58E2BGkEKANmIElhu+OAUA9haBt+B+IGWAbEimPhpaD+aAKBaBHUYkcwd47cEe-hgRpAIEiUiUp6AAfvEQJL4QAGTlEO4eFjqGAmECRmFYAACkO+USg28Ave2eWAERt+rAJIAA-K2jUfWC1q0XVKwDYfkf1vAb3lgGgN3m0f9qUb4UgMsaWlZqYeYQUS0VYTYSgB1KwAfjgFgIcattoc1oMXxB1JodoYlAYBMOoHwM4GJKwKoGeK5HeM5NIFuBHuVjYbTB0VtgsVevYdYVcenuUUMZ4aQPEPEGVijhGvANCAfg8h1L3qWtOi1vUY0eURbqwDgL3tEgsdPsieCawH0SSEgMhjgJMVlj0ZBJBBESgPAAsagbnhPgkRWoprgeJmJOUFuJ4LNKwNkRyWUaWphpBj5s+jcfAGenEb5qunyeJNEDkDFFlAAYgY+q2mZvAB1HjpgXwDhLPvAGOm9KwA-jAXAWBA7jqXqZftJgHqiR1JniJPmgYUYQ6d1mgKwOTiEShgsZjhEdYW9qQBEQJC4X+k2jgCrg-mOqaawGJAgE8RXHmvKVNt6eTooLPlGSrmmdPhmWiYUUvrvh3pnncaJE0aJIlESKJAyVWcafGekXQJ8d8T1FXktgWSSGJAiA8asL8XunVOEeVqfvMeVuiZMers1jHrKKQHTMXtvrsQ1h0f1tEmBBEVgAIBSWepKdoFuJuPAPVKbEbGeBoLIBhCzk6ZnrpnJoqaJBoDkJXKwAMJtAAcAOegqTgN-r-jiP-rmgYHFglmemlqOuNnvnUSfo3twMrtEhEZjqGepl5FgMSbmoejgLLlAJBA-pPqvolLPqBTZnpgJF5OaTeZ+XeQ+U+S+bms-numhRRpBO-vbt1kRZBOaa7sAf3iROAQaUaXunvtCNEsZjWkVtCPAERdbsABXKEGJNIOJPJPVGAE5H+QRqJeJXgFJYQGJKbAMEil-HUAAdwHxGBvYV2oEREcSawFAObjBv2qyfYQOjYZ3vYWBFAF3v1pNllgIAfllk4VEhZeSShRpWJF-F-K2K5BqfesJV5vOnwNzO8KxJQHoXBEFaJKlLYI4LAKNAAaJEYEYKOqQG8IlLlShpBC1sVcdkSOVdbsVV2i1sAFVYVTVaVTpClYQLmKpLNPGDiNldwDVWBAAD41UgS5oYCJS9V5XgSDUTXDVsT9FNUtYwRJVpk64GzRIh5vEIjkDxith5piSWSsByQ4iqARXMaPrUZYEB7SQdRoEoAGALBvDaCmzwDOC+QaBEgpVpUZVZW5qJStXtWdXdWJYfoOZQBoGxmQTXVvQoDdmNjtkpUhVhVF7dnSC9lPEJ4DHbrbopXaW6X6XUV8Q0kE174RHOaHF8RlFvTIVUlY2NCaWiQ43OB6W7XqaQRNr2GiWAnOHFbIVsQ7kpXORQDxikCeBvAimo48ZoHXl8WrUCTrX2j2jbVzliQC1C0i0nUmbdan4dozof4xY4jSDSAICtBEglFk5a3047ma3hlgS83SYxVLjSXl4C1vBvDgzF4pWyXyWKV5pS0ob8VrV3kbUK07XUVO1QAu1u1CVIHZkCRgSQQCQzrunGEE1trXG3Vq4AZ2V7o2EuFeUW6U3Iac4XpmaTqYXY06WM142JkYTOApn5rFqNo65Q1ZlXEl3TRpmN1p0FFJa01aUV1M2h2h5F5EgzAVxiRvHAER6j10Dj2ghnjo0khWZt1l2930391V2iRJm11F7bl22ya9p1Rx0CTvWr0M0D1QX9aTFvRDmX29pDq95Q3DW6b3UB4rUCXH2kVdmiT7WHXHXV6Ca0x34WGkVKkqlqli3oC34gaL0gPkWPnPm7Wtp0UYXKU35ANnp+6LDL5QPANk4sWsC23eYB6QPoNJ4XWtqKGzDBFvnLWUN5E0UlplrQitEdSAZ4BXF1ZXFEXsPPqiX-bkxzlYVMMsPbZXEXw8N6kjbgl44FrkN8Szn+y6kGA0PFoKMCC6kMOlrQjlosOcPPqiPPrSQSM4C3aoOMPaPMPgkTZXFYCc4cN2OGMJ0jpqMaOKbCMcNQASPiM2Pbj2MkhmOXrXp7QsN37GPDpcMCYcOSayOGnYHFa-YHHKNYa0YJMJmiSyAAGqP1jqMdQxO8VTRz6sUdRJNpmsCFOsBpFuMWMsMuUSNoDfY2PdrglUYBNXo3qQQhMNPSkHpcOWbgngEjplPSQVNiTwCUJHXCjZUcjSCOAYR6HAURqGbuYlOtonFUBgQyWxVmNDNFN5PYHMnXWXorMT66kPLQiaPuO8NcYcPXPSlNPPrHH+MGCkgGDxDYSG3wAMOBPtMiMOPXG3N6m-o2NoD+NPpaM6PgnhPPodoSMCSePgkJ24VXFtPBPIt-PQhAvPrc5XEAbNaCanOXqbOvnvkloEvnOiQdAjAAEvNvNAQfNfMosdNcPwvPrvZRNeOQSgtVMQuGNSOGOYuy49MPPTpIvmM8svossvq+PSl9NYty4wMnOHPksZPUXcuWO8OyuXpQud7atjpPNvn4tKtEuqsT6XOXqatDqwu6ueah2+CqDODSbZWyikHkCzSxWGtnPGsXPVPIsWvavZ4SN6smtivqtmYCsvpeOaZXHFZPNfNhG4KMbxA8X7PQhZYBFR1alXFvRjrqPA1ZaZ5WZQDqNo6oUWOL6W2mvVMXrZtcjwDIYlvVs5vbhINltWGKGlvlpgTlYrq+0UYea4IZusYoYeZnNWbX1ObvoEZz6352Z7qg1gTRnRX728NBMdNDHmKXrdtF3uEbt+FzvT7RltuTv7sLuQTIYbm9ux3RKYUqMT5XteRiSeDSD1RKTCl-malDvk7LpzEjpvSdrRTTqzp71SlfsgZH7Fp-vtpCRnqCb3uQQXNpsoCtFgTJE8NhHStOZRueA4AmlPPmT4jqhNWKhVmEEqhUBNXbpNVsL1mmuIetE4e3Nx33Mof4AE3klLET7ua6lMvYesAOMoeYuTp8sodNZ7OXV35O5cl3sodeR5P0tuN0dGUgRdPk7Sv6Y8Odo57-3vMICaNce4L0eWUaeQT8cRpofTRcu9oSfloIcYVIcE2g1odO4afT5of1igvl46QXrxsMZ6f9s8el0ufMddoadtr8OJWJaL06efOb3SBOLF6z7WfnOKb6cBcYtoee4Ze3M4daeYb5rAXVaBERrHOeCFd5FYAMurssMCBYed7WPPrDwSMuVPMpPoGWYQc4BFcVeb3SwMBuuZN7prPua-udfleVc-Pgm1edewuRMNc2tYVktiez44Biag0levorpoDevivcPAsSNvSzd1ctfItVdcPvpXH9qwuavoEKujorebfjeouGOHfNo3PGPTpmNm5CR5F-r3eg0x7RiEADelejcRpidqgIAGBNyESzDzAajLercgt4DEBCyohGbURth0TSZEgQ+eYA93jtldlqssOkB-MwtcNdP8X8MqtPqpvT4oevPJuOk4ACD1PFMfumbHY66ztRKuUAZuFRKyHkbfYXqZaaFLtSngvMMXpc8vrIYVNWay88+fokZwHqbDRWZi+y7Dm3YwfLe4BQ2Duf6dd75cYEYoE3oCYXrKeKEjatqblwHcUVshvG-7GkBoBXZLom-u9WY2+wHq9297oO8CBQBvYgt68g7Om+m3tI5R+VP9Ys9s+tHHYsvHYOPHasf5W67vuRXR1q4oAmdW+9obkXy3ZAdEM5GF+u54UCCl8R+x-gRpGiRQDWiGzxdJGJ81fJ8-e9o4Dp+7ejqKG3fFZx8MOEas9d+9q188Mbn1fHb3PjYfcd8T8dTJ-Yujrkkz+Xe9rhYfr7GN9j+d+r+9rjoz-lpb9z89s5+nVDttrwGzBWYUasOebl-22trKdgSzCmZP-qMRbAXJEoBiM4FBvuTltxMUVygAsvJXCmDOBCA6kMWnTzAgodD+K-bvudw36Ysx0s3PtH0RQrFpEByA-Xn33s6jpWeM-bRuQKhZ9prcodUgPOk5ByBWIJHCLs1mAAf5zekA6PEQKhrJ8hIM-GHFPyoF34nm1fCAUAIYa4ADeJAjctgNP478F+q6fxonVz6IgCMy6NtNaXOqxNiGb0KGnxyN6KZMcfaY9lLlgJhER0LPVimUT-RzFr0ElZ3pIOIFgsjBrlD9HVEAGh8+IhmNwWYM8EoZGsNgh5Mum7aicsM7Ak-roMlpM81By6MIkkRcoXxPmhgvQW9GQ58ceGB3aVlDS6bZtTG3-GzGtjvAtILw5AQgKemd71MoANKYSIUlgCwAP0MAcTFADPS15MG2gSUkBTpa6c88qAjdFQO36joCQM-G7JZz8ioEkBW3HoUnx36ytoyXTLATP03JKCP0xWcQaJACSqQQgEeWwBoCLaUBVIrwN4NxnGEodbuBArbqJDQiUBPAVeZRhgHuH4CThFwq4R0Cry6Q6BqgBgeQASp0xVifEc4SgOmHYdP0Z-KgQPDP4gtc0WGGCKeg-a6AMIUAP6OeSWwZ5F20Q9LMRhdIc97MjaKgGhhcoeErMw8QItuw35KYHMEvaAoyyKwN4QIVAZDOsQvTEjSef6VgOSOhBWFxsrI9kQyN1z19Bs4mN6GgAMF30v0BbC9E7mXTtd+sPpaSDz2dLXEGSlI4nrPj2j8ZWAVhIvlEllHmFfeios9jYz3bPom6DJZDNrXr5KYqhnXErpaMkYMMu0mI+3ATTEpodQmzorDiYxaYijOgUNa+iLwnxQ0XKnLV-suwEC+ii2zgy0ZywtEuU7Rs+PfH3zQD0cBhYRRjhknM40DvRneeAB5lJHTtySOeEMVKWzG5jRW+YspjGKtHQ1W0DGFAk6Ow6bknOLLMIs2OUTHcSqjo+jrfjQ7k9sOQwgmjxn4YUBpAhhIanOho4di6xyYoVmEUE7mJzOTWZKE1RJBecJ8sYzrvaNrGZ56OBmYzipxVxuc8c1-DWtMW-SyFlRp4gvkmN7brjqxvaBMUKPo4lsCaPvBzpnxZ5NYzGAoxMYZw9GNiHOM479Ld1tEbjRI9UTwPVEaDA9vxj4gcYJ2XROcumYRJrKJirFiRZoEAQQvVHVrCUCMRFAvtKLm7HFgxFQ-CaxRbpETpIlYuMfeMFFJiCaIfNzh6IEpOcE6x43CXul0E0pu0imCGqunsHAdX6XE5RDFlEElo+JTmaiRuPjF0TkxSEzfkZVpjGcvRNYzsQ52y7pdnR9zJzCK1EjcAAAek1R+r-Z-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-rI1tQ+oQRk-VoUWhmDYAHCKnYcYTOpIPWTrkvRo5vR6AFnoEVExH15R3pBooRJXxm4SJhq5vPWrXZriSN6vTxo5MY08KNiWeM0iGXY3kbfaDypEphWNl1Q8isaxWQANg79oI5B9Y4mySlUbqxMW67zskWKxMbzZSmwtZ4CsribGs687DsCq0ISb4VahT0sMoAz9o2IyWPWRnlcJlMDAAgeSJpE2R8B7RHeO5aioHKYtgNmy5kpspu4IKUMyDbtHZoc3xgnNoka0JtGiBfxLExeILY5uc24a3Nw7UpWJk2Wn5UtkIm0glrGJhjNlHmTZZOkvUgslpLmtHGMT-b5aum58TPjrkkx4BYtIW+La5rGJa4+KX850pstJnLDH1bER9aelbRcgQ+FherU5uW7MknuiJLzUIqOWbK4cfmqzQZnhXJ45gPK6JDV3ZKDLTNuDKJCkXQKdDtBqzAvtdXRkDb+00SsbTx2U58szcX8jcvlskyfcTtFXUbfxrGLzKUMN2XLdVsAz+N+q-VA1rQoHR4ERIsXJxHVvs1xbRIOSvJQUu6UgqXtg3BxhGnQGLMZtKE7UlltopfyUAsrJtEItOG-dzt2Wq7Wtj3SZdBuAzYbY1tK20Vqtn-TZQJGq1OZ-GYO4LSNr4oY6SqtzI9DNsq2Tlc0bpEcR6WwJtpU2FGAwGxhQCOVCS2hU4kH1LRsRKdz28bcpy81Qs7++WlpritF3Ma52gO9dXDvG0Bt3CWHCNJVonRKDlqIEbXd3T1mgYhIDJLCpySp2Jbz4LLcCNVum20U5cyUP+mdvh0oZ1+ZuarcTnp1HixI0IfkmLU-S5E0d-wodM5luoA7h4+ukXa7th2gY8CcddGcNAhqTC49x2WXLml+2z4PC9GSCGmTt1l7ndYxWuYNw816MqNcU20mRQj35KxacZXord0r0Mlq97hYnWrscyXqjxsZMCJnvg7o6mtpO6rUbve2lLYC-jXvShnAibKWt-gk3QOlGEZ7GZt3CNIdrz1+R49hekffbvL215a8SAENTQ2d4BrFZ-5BLJGV9WyloRpIDYmJgAzoyJFRMwGWgQ056lf9X0+Oqkpuwzt1KtNPAJfv-7oZpIxCgeKPp128MWFo6ktFnmQl-ohRc+PorJtHQuSEN4ESyltnlGkLyc5WW2ReiINIHaYeB0PlWpIXRNa1DeZzAJu5VirS0znKdqwBIU8SbmppX7rLmvqdSAZ3-VgxqIT7wGBsHBvaMhlH0foTinBx-sId1VRIMWvtA4o32obJMrimWcnCBDEg4oVgf9AgpKSapWAhqTVEjkVQmqQQNKTVCwyVSGokcrAMM1Q9obH5QGeOw0Ofilol0z9sdrSpFSWgYMGdi+tzQbFQNYW9otC-jJbmuIYw4cLSWh9ras2JyZYZZes6fOSWtFJHNyOhy4VgVUC2BhxJHP+mCzjoToYuehlUD7VJDpE8jBRhEEUYgalGcOYkOoHwC2hbNyhwHGLN1gyNDTKAPgMWtdTf36qEVNGiNMkZAikgz0fWo1ZAopbQgsoOQJJH5qGP+x9VCzUmckWyyX65Z6AdAxYWVlQa2gas+pm1I-ndZR9rPd9ShiHQ65giy+fY8Gu5XXG+MYYuqO3IZ2zAAlxWfFQLz4xNTi1ynfvAJIr4fl4MnxtxTQdjoNCATEWZ9fTynQgs9ZswHSfEMuP77XjB3Y+uVgmxWEIck6nhjivsxnHf0YGiDZ0dBNTZ0Td1WwHUJHQon-YLQi-c8av00a9jA2A4-ftbS3HnScpOvLdw7wNEqcH+-w4IbY7CdpcSnfjoAb81doBKi8jSuAZZMbG9oMZE4+WjqgmC2036DZYpnLR8d4D4EIimjnTVbjwB2o1NkRWQwgzD0WWMbTiZMHelLT-K-U9fVWxezH5TaB5MJBOPEYODLUq3d6WbTv8gmWouAqfkeZYGMZeeb0vU096k6gzIEakm8sDyxmAzOuS3u6bhPmmd5xq0SFwXLhTAACYk3M5AprGqmBArRXQQ41yEZDXuIPUxrLOM0oZ+0K+czaoBSzPrSze8kqhWarPea+IQooVlDSyFmYRBIpvM2AGkDyQ84PtVDZXMuouEwKWGoWWBhs1qzriA8FdB+l0EBF3ZolMTBRsRMpKozXp1hkVl3OMiMcZhUtFVngOXocxBmRQ5ei4Paik1HvYvr2zpF4FrlzBydYhVJGm6C+PPLtOxiMbWLQarDU032dWa19dRsF4C29mBWgWh0Z7BdXtCsybdWG1pqjPX1wSUK18MffC52g2a0K1ziWrQkKzgL3MtCULOAmxI-3kXWirBnhkpllaloaLW4AU7IRItiQcQ7cOgMscYsnEKLH0k5ugOZKYCIap6YChfHVwkYLSPF8CGmVYbiZWGmjb8yBmYuD61x7F-8QEc-EO4MK9-DS8CYov+xWLyaifGlrvYtNgJNXKdAIFMs-nmL0Ju9pn1LR0WB4TzIkDS2w0cZHeWYjwtEhTNTpPcaW2fGUwYxGjDM1xIdJ1IzxmXTMwVhndSVfOxWbsPPMK8TmnkLqQRxaDK0Om7bwqbB2bQSFmPIz6m-0cBYrGqr3zMkf2TI1ijmPTXuYRLpmSq9o1qzyjiKOY6q6z3nl5XXzneZq12w-WbysMFIFPKZjwLMkLhkBWALYDnLUYigWDAMfJZT0BWQ+p6qFmgV2vp491F7XNEgAcG2NcAx9frK+NRwONp856u5RxxAplWLrjU3a1ej3W6C91yh0VoEXxIcH7RW1qAOaqzx7rxMe6qnHutxY-Uay8QSyL13IBNVQgZhssWdcEjmqdLjUrDiRluYkKmsMl1azoI2v-XhegNvnO9Z3WEixsWnE6zRrnxPXzVbo662Dd2smmlpAN81aDf6xvXLru1hnQ9edKTox0EglG89Y1kg3LV+l1Xv42rLcnib9N2VmgWxtjp3rnmZG3TcuvnqbVUSLwpzetx43-cMtx3uasHQg2umAJPdfxkpKnW1bqOHdTls5vSt6mnLZKFsB0LfW21AlIm4bcuv1cSMlq8-pTlMbS3i+1ttAjdaFF7q3t0+a3MlGmazM+AeAIjnTFZuy3Kclq8rZzZ9uNYHrVulO9qPuavHzbmN1yjXhJBTHWhmVeANhobxDpzSAwP8y2f8NtpiM55wczhwyFvbIO7dl6UZaiWqIapdU2U5-vSx9nBz7bQc4ksUJZC55zOyZXmYBRchsJQNbrb1uWqtmB0E5uY0iUWPLGHc1dk4phiTx+Bltqo6KEqOLItm5i69rEPkukBvA9t+Tb80WyMwA6V8m4ke6Vw5ulcoaGQuFu3czEv2B0b9hkpWdHv3NFCWHRQiy2qw2tft-2tcfO0jWJk4uMM7s-aLPMgPSurDDITSgyHrFBzA2Ge7MZ7NyngH-Z4cwINK5wFsHLTQ9EPaX3N2MHN2PlooVua6D6ukDwhw3eNXv8GHVZty6Vxn1s4MhHU2Hag54femqzX6Os+gLa7t3OWojuhyQ5VxVmH+g5ju3lsHONz+d+hQXXLLNx9s18hdHjD0UawRFM8rJNALQwMcUTLR0+N6NXWTI70KGBjm3cBRpQeZ6M6MzY3xjQe8PW7WQxiaPZrO19+Gvu8Ry3dK7SHW7ULRQjWea7Bsm7Ejwc4AIyE-7knmfA7h9wdzeOBm3JrtC+iwouU7H9oqGu5jfzPK46rlY7ZZXUb-X8nWAIvf1VcwePy9zTrkOPoHJ+PInrDjPNI-btozyzWx8PZHtlM5OBTOY9p746ScCOsh39wc-AWEe4DFLlT2WuWdIej3Zuf7GJws7UcfcpnETg7qw73y4OMnOuUYbghWc77+8T9upxDQacWkJn9GZDRXfnM38A85GpEsw2uO2DZcAkWMugQ3ICQnj-864+Gcsp-OTjcLADIBYaIrpY1ObAdH8bEonEneNGp2Qhuzz4HOJjpqF2GOzNFZr0gRfUgsy0KdphIBGPAnxh7NgvXKLDBSfrI8tZZWL5hUYQJSE3voyT55SDc7wzyxmLCcG9BbHWU5MnL9oxyk2bmuIDt4s6e1EloRaEwiVLneFh1MdktwuBIxTGPoEXczqvnJRU7DiFgc5rTZh7mdsdPlRHdoUeLwWcrq7eks8LpLohzklK4tza1XYSuETsL2HwADh7wGa3uRf7-8J0WWCtPspW64IAlYRT3ODdbQACgFqjPvn32Hk0bvmwTJBuTgyR05D0MbwiRG5YeKH6maqwUQm5ZqcK58sddnvXa0KeFvjkA6+mhmE16a55hGVF5Sal5gsiKuikg1qM-T1u9+xGN0zQbIFuMCNCcgh-XzZFIDriJXcd+Tnsd55G0N6MYhDXNsO3NN6WT8R33nfqt6mQrEjJiwbkm3bu0764of03eLvsbuUhwpjZD54dnWfXckvMzdU0oNTjGAq0phndyduhCfU95zdNuf393nNw9aLz9c1H0INwn2ngBeDvAT3QboG-LYIqU5z10cv8r5ZJCM83H-aLkOW--nZkG8VD1tHgUAwtSC+N6bsWQYnTMl01pb8nPBmU6ddAVfFQ9AR+U6KHUCRHr9FLKsyOZOudbFcnQd-YOZ1XWHk8aOl9kF9Sre0AM3PM3IpnaYHh-UtvKo+r9Z8onsFUgdpsSeWP9TQ9FJ-mkIa5PDWa3HKSmvH3NDwH0SAtaWtzn-Y+tnhc+6+YYeu+1JTxlYQPTIZecvDfxtTe8yiQHgTVPYYConHXoc2q-akhrjE8Mj91qOPm5ZXrBJCLuwXlHL3PUzOfqlk2AvlLehuw2XWCNuIJYZI5usXw3W6z2tf1l2eJRCXheWl4pyeBXPWbTz872JzyqO8KOJ6QyNxNsYPKVGZ29GAIKisDiZniz3OWrKiQYbcNnL0jeGnklCvetkr418E-MWPKX0n7JbZo1zfmvVhdr4w0mx073FD1tbyF9bppf8TfeSbKBmi-AeIOAn9bwTWO9MugVHlGgUHefQOeDv2B7b59m0U1YCaeOGO28TjsJ3LDnIQLy95Rwh7qStXhsZNigt9eQftWdbO5+80NYS7ZdsTsZ7oC49nmqH+IMQHyVIjEcybnjmZiFb83A28i9L4vW9wY+aWOPxETkGRHE9W6xPzvIGzGWTo8WA4VUAR0h7U+ERePlnK244YyKQMVrfbiC1PTfhvw2gb0L+AID-h6wNaYCCAA6hQRYI8EEAIIGEA0A3AxQVCLIHkDkAtfAG3CN6BCCEB3Q8YC-QgE8AcQ7grAK39uhCCcg8MSAGQItcoI2-ag0QPsHbnjDboXhcgJAGb6+Pbo7wRYfJR77jDOs+A26EYPADACWBZy6EVQDb5ggZAMA5QSoMb7uDXDyAIfqP0gHyDnk2wEfkEPa3KBY0WwqASCBoGt-ehS-zgcv9CHtAIgwABfgvjX5T8ZAAAxJB4er1U7gWIKABXCQCfpq-tfu4MuDhsj+GSHf70E3-vBtht07YEIMsAL-SQmiEfu5WiACRh+oABfthK0CD9fCI-XvnwD77996-zyBfoP24tD-AEI-AgKPzH8oDx+C-ifmiBH8qByBt0KwXhAX-L1z+0gJ4A-+zZFAC32--toCQQ2gFgA1+2gGgCwB9rHco747DCgGQQGAOfBkgfAKn75K+wNwD+eP-j14mAt7q6yeguaP361ArviOIF+hILMA+4c-rQE7+wBNoAF+8YCQCwAt9hH61Ag-sP6j+s-hP7wAU-rwHj+JYCOJbgqgEv4h8EAKv7QBkEBv7fg2ARkC5AeAX4CAqLtqUDEBQpKwAmAZAd6CUBqgAX5RYsfpv4MBE9PkrMB2gAEggyfAJwFQg3AXQDT+Y-hH6T+LrA4F8BIgQv7iBy-lIGWAMgXIFHACgTgE5Aygb4AEBkQOyB-eGENoHkBp4OwH6B84I0CUAxgdv6mBUAOYGcgzQo+BcB0ADwEz+wgdoDOBDAK4HCB8-mIESBK-j4Hr+NvhkABBbgGeAgg+SmGDRB9fuX4IgGgFX41+1QX+AkA8vixiK+WhCP5gQsEChTq+iEDQDrAPwtuiWQHUNugFYIwLjzboR1DMwYQT1EqAqg0wbNA4gAwGMDOQsEEAA)