diff --git a/packages/client/.firebase/hosting.YnVpbGRcd2Vi.cache b/packages/client/.firebase/hosting.YnVpbGRcd2Vi.cache index 2dec7f82..dd56723f 100644 --- a/packages/client/.firebase/hosting.YnVpbGRcd2Vi.cache +++ b/packages/client/.firebase/hosting.YnVpbGRcd2Vi.cache @@ -1,265 +1,265 @@ -assets/fonts/MaterialIcons-Regular.otf,1653017734627,6c5b450bbaa24bf30f1a1c111fe2be1e9c2cb23dde6fa9ee8b3609e812302aed -assets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1653017761402,007720e2ea8128f223e5f1a08073b8f40df49b41dac35727107ab73dc4488ae0 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_AMS-Regular.ttf,1654794864037,3bf9acee5a76d2f609dcbcb3a3d96d00eeb5d1bd92283513e662be83cb8790a6 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Caligraphic-Bold.ttf,1654794864030,b312df29f12f2603de0e9b91d1fb2a04ebba600a68fb33c4972dde73a0d7b40e -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Caligraphic-Regular.ttf,1654794864008,e9e28f08c749a959102593d44db58b469eb3622d4b5303bed8ea87a9b2149c68 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Fraktur-Bold.ttf,1654794864014,c531f5627210b883c76a356543eea29d0884bb35d2758cc2ce761fd3d7043086 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Fraktur-Regular.ttf,1654794864023,15a470fc0c5498c8c4c63ed2b1f931c2d06f0c2d630d59095d0d810254513e1c -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Bold.ttf,1654794864025,b558bcc0e7571651efed4bc0eabcd4475f0ca527070f9f33f44e71938ed1fd21 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-BoldItalic.ttf,1654794864003,8edf95454821afca8661b7c264c6c2778ef12f7dc91b21065a4500b9e893a225 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Italic.ttf,1654794864016,b5312335c50be335e405b7a5a627d0248e712394acf967d09578b6af2ae33f71 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Regular.ttf,1654794864022,d777789e493338e96e0881c91d295d19b31ca987f5a7391d89b0d55a276e9c78 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Math-BoldItalic.ttf,1654794864001,5b46482d2b7e8a86a3ef772233505993a41f25258be4c0699f8a3993607d09ec -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Math-Italic.ttf,1654794864018,4ed6f8fc64d0f2a490e86936472cf5aaadec3f12974751edbd71997a22d643d6 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Bold.ttf,1654794864029,6d8289f8d666851bac5a02683fabe164ddeb595418fefc1c7200b320e766215b -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Italic.ttf,1654794864019,65db5549f3f2581ca33e226956b5027b00a8007bdc534e17bb14d4b78bf8a31a -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Regular.ttf,1654794864011,0231cd4d462055eac3716198dc2aeea4500bbc06135bcca5759674111c1e9219 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Script-Regular.ttf,1654794864035,a0a879067935625c6c0faaebabb9f021c793d3b866d28f31e76bc477b03b4d6f -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size1-Regular.ttf,1654794864009,f95b4f688fb36159b508c0474b98d79587d6c50dc371b8ff6310489bf4584e1b -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size2-Regular.ttf,1654794864012,4c571d1438b114d51890276d8087212a13b753f9efd0b994c6f477c7e23331b4 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size3-Regular.ttf,1654794864033,037d26167aca2ffb59287cbd10587a08a1c1b6e8cfa310c27c96b74018ea3cd3 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size4-Regular.ttf,1654794864005,61a91b8777fadea97cb14d5131b59bc052b78fca35d90ae975f85eb6b2cac762 -assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Typewriter-Regular.ttf,1654794864032,f5b3046a59743966b2d134d81be5188d18411cfca90daab9e8134a135274074e -assets/packages/flutter_tex/js/flutter_tex.css,1657299006458,c147c86fb04c3c8a09e6d53baef3395084b6d3f4afdb862b6386faa5f6a10b41 -assets/packages/flutter_tex/js/flutter_tex.js,1657299006034,4e6d254e27c49a4706152f0c76f21104d2302a1d4b72b98d429ff56743a1cf29 -assets/packages/flutter_tex/js/katex/auto-render.min.js,1657299006034,6d43d399313c02847103382479b8b5fabf1374fbc596dd3e94b000372ddda0f5 -assets/packages/flutter_tex/js/katex/index.html,1657299006154,0912b0bccb6710843afa3b3161d71d70186beeb8dd8f601dcce11c92eb4ddb57 -assets/packages/flutter_tex/js/katex/katex.min.css,1657299006162,844ea822f57ce97eaf0434beae6803d30d57ba5440da58ea19101dfeefccfd46 -assets/packages/flutter_tex/js/katex/katex.min.js,1657299006162,be74ba011cd4c858dad34104576aebb66f4dfa9894735e9016cfb2023b4ca596 -assets/packages/flutter_tex/js/katex/mhchem.min.js,1657299006154,bc56572dc35dd15d08916ecd348878bcd35cc2ea8b6a4a75ba5de141d22e2ace -assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.ttf,1657299006146,1a93e0d55a17d94d29c40e1e74c4ea223c9b1984949d9f808d3b0895f0470ec5 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.woff,1657299006042,3d048b3ec94487840917c5b701de85b56f3c5b8b4cfaa770890ed5754d0a3237 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.woff2,1657299006154,213f5068ac9f0d32d25406206f1b4b1d4bd9eba043da5d6fdad75f690b84d72d -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf,1657299006130,aa539facfbbe0d509e7406cb453984f343362bcc9710e3b4e7af0e916198938b -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.woff,1657299006106,dcdde28187f39b42c539e562a29449045f583363b3d8f59c5e80e2ab3306a994 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2,1657299006050,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf,1657299006058,8ae0a434dd97912a5b4212e0d645e3f50c4037179548f182196e89d6685a4f41 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.woff,1657299006066,de72550f816b7aaf05733d796a9cd80d3fa75ac3e20d0c8270e5da150090afcd -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2,1657299006138,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.ttf,1657299006082,b897bdbaa5b2bd809b3cb5f8b58477f4d34ffec7da2f13dd0fcf36e6dd77849d -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.woff,1657299006122,f55a188bc351f752febbb50bdb2768bd5a1cc664c43014e318c765769fac66bd -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.woff2,1657299006114,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.ttf,1657299006074,aa6b5105ac99633047ddc50e1028fd6faf3c72a1609fa9077b4ae771082fbbfe -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.woff,1657299006098,e74ef2d20dc73cb68c97fc2f6dfca344b2c8deb49eb6ec4f6e1fe54bdd6668b7 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.woff2,1657299006098,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.ttf,1657299006130,3dc1e327211f011faf26ee99abdd9ab376b03144d7978462022b00ab15825dab -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.woff,1657299006058,39d43d83ed398afe7d71abee5e2ad090c2bb0f9eb6b6339d006dd2c42ae78fdd -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.woff2,1657299006074,e38b3cc40a6433adbc85cc5d07d5ad9c55528a1bb5e71419c9fd78c3983aadfd -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.ttf,1657299006106,ca92218418609bc1373be5633de3b940f5797c69ffc44e96c5826e7a870c9a8a -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.woff,1657299006058,6c815b515b4d929e288017dd2ecf6f1fe337a256148160e05c4098bc4dfa7742 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.woff2,1657299006034,9af6829a796f56e31afa49f5e0efdd4649f1e80cfe35bcf19ef065aaa8fae9f6 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.ttf,1657299006090,2df16b36c649a5bc280a3954487fa70fb24233b2f100e5d95feac9bcd8f5fed9 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.woff,1657299006138,d527e1952a9fa6aa8015df9a03f7b641e0113350d620295b757a3f795f037988 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.woff2,1657299006130,389e6652f22c04bc64135ab613340af96ff88fd12f709c0bff9c7b60d587bc74 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.ttf,1657299006090,6a9b352cd096b45c66182ce95265748bc9cda8e07fe5d012d20f22310aba20b0 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.woff,1657299006090,e1c20ab685f5d104019298551db13977d9fb39ec996f23c38ba76d397472df41 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.woff2,1657299006050,e8271b72b575e15838ebcb47303929723034292f66f32a0e9516952a6608f5f2 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.ttf,1657299006122,12943aa14861fe181b47ca81398cfb1a80e34b0cac92badb8d2d72c98f75b445 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.woff,1657299006082,55068b8ee0a45d97be144f46954199291df07a326887a2e623e8b79fecec6fa9 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.woff2,1657299006146,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.ttf,1657299006050,50e250538a6fcd5763e6d77f4a76d15b92fc77dd5f32e77b4fb49ecc99860648 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.woff,1657299006042,f6e7afa9e47274f5cabc40a7724df5b38209928a3e3eb0e60f7160eab0adbfb9 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.woff2,1657299006066,e4c73ea6c0d7aa81faf251e090e27d7fce1d5d0f4edc1f4ddddd5b1655af1ec0 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.ttf,1657299006114,f74211ce4c80bf0054b8c8ce928dfc8519cb5d004c26c7413759d911fdf6f84c -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.woff,1657299006058,b9eb1c7155e853e1b9c725ee1b74a18fde683331e366395231e573884a89f39d -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.woff2,1657299006114,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.ttf,1657299006082,5b58ce41c31297e642ecc9da3e2e87f71c164ef0abc1e95102a8fd0f657f858a -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.woff,1657299006066,75eb7b0871ab678bd685cab5c734ffc6094ec82ebed1521fe27b7f2a29e5135f -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.woff2,1657299006098,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.ttf,1657299006074,b7cd3c2ee97bdced3115bc917409f9e4b77b54c0d270858d05ad84f7d01a2787 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.woff,1657299006082,1f4bb4ab53209fc2119632b390b7cb039055e2aed96782b64423d31a08920da3 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.woff2,1657299006066,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.ttf,1657299006138,bf19a97dcf73e2739b4edde00c5fe128082aadb6c3c2c0a43cad6a518faee5e3 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.woff,1657299006130,70522f23e790c0f429fe25d3a03f806af7d59d3b6ee95ea7e62e16091d8adb71 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.woff2,1657299006066,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.ttf,1657299006106,a0c9b437a592994578d005e666e275b56c892fca1c3a21b451e6cee19c5ffb44 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.woff,1657299006122,6fc5f90ad636ea10ac68d4f650a5fb58ce43af24a4439bacd7e98d5da1e0d46c -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.woff2,1657299006114,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.ttf,1657299006146,70c2cb5dd719ab96f42b69121a76b6f955ec898ecd356d2a44a812db400f8bc3 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.woff,1657299006106,1589983b75429fab92bb3f578bb13e5a90e368c07031f059ea1e948b2f9b07aa -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.woff2,1657299006042,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.ttf,1657299006090,6b7585f1201f6c8b1d3d018bb1a76d0140156c5942a748f97644f90b06f3aa26 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.woff,1657299006138,5beb4c17ed9ba9f4614b452de25dd1b20a0cb76c08faa5450a08be3958eac3be -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.woff2,1657299006082,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.ttf,1657299006098,684166ed1dcd75c1e61123d2dad4096cc400f3e84ebee225d76c3fad2189a28e -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.woff,1657299006098,a78d8097dae42b77417858ffc2f79912397cb4d27fe4510b6fbd755a5a79d0ff -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.woff2,1657299006138,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.ttf,1657299006130,42cbc125c20e9b06cb9db0b229794ea4d7fd90a0bc89404e4b472f3fe10ee554 -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.woff,1657299006122,1c96dd20fa943d9219857c532a496e344eb1b9f76a85a19ee58db75f3fd30a3b -assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,1657299006042,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 -assets/packages/flutter_tex/js/mathjax/index.html,1657299006162,7b30b832898f793ecd2f0d13afc82037a127582f8291e3d5c0f5b80c39acce43 -assets/packages/flutter_tex/js/mathjax/LICENSE,1657299006162,8419a784c9341a81db70dc59d4559f8697db44f41b34cef3915776199233f5d0 -assets/packages/flutter_tex/js/mathjax/MathJax.js,1657299006162,9db93b985b7af3cd55bac04427b42c26257980b495d2ded56f6a4a820b74873b -assets/packages/flutter_tex/js/mathjax/extensions/asciimath2jax.js,1657299006450,a32e3f314a8059b68181b2f3e0ea60ca101a88c91dddc6803192335f00654e60 -assets/packages/flutter_tex/js/mathjax/extensions/AssistiveMML.js,1657299006434,a908882573162164adbe88f39dd59609ade5fc8dd90e6c9bf5d196d56dc8d6e7 -assets/packages/flutter_tex/js/mathjax/extensions/CHTML-preview.js,1657299006386,0bef96b36efd647340c9aebe99dab1d71a3a7984721459a38ddb8f0564367b42 -assets/packages/flutter_tex/js/mathjax/extensions/fast-preview.js,1657299006450,66f344ecf1cce3b4c9ea60364f448e60fcc8b06f33adce714113f971616d32a1 -assets/packages/flutter_tex/js/mathjax/extensions/FontWarnings.js,1657299006434,498492d10a512af173ae5c8b142db9db1fac8449850e3f94c53370c5b7a81ef1 -assets/packages/flutter_tex/js/mathjax/extensions/HelpDialog.js,1657299006386,85989ca9e04b7c887cb5d6860904f246275e6d646aa4a11a5ff8db0ae82501c7 -assets/packages/flutter_tex/js/mathjax/extensions/jsMath2jax.js,1657299006434,cc7ae86a3f10d4d30931294e2b699dd0d52e8664b402a3d6ac7ae85a7475972c -assets/packages/flutter_tex/js/mathjax/extensions/MatchWebFonts.js,1657299006450,2d352e48c472aed87b6ea60035efe08e3782befd9896b0f61899625ef20de3f7 -assets/packages/flutter_tex/js/mathjax/extensions/MathEvents.js,1657299006442,ed8f0c4e0b5baf5c86e83cb2bfc82a8f5b3bf118e92d8a941422016e983850c4 -assets/packages/flutter_tex/js/mathjax/extensions/MathMenu.js,1657299006442,243279cde9f054c8e4edcbb73c8f15a4fa34881f53eea8e6b4d6a552b438f287 -assets/packages/flutter_tex/js/mathjax/extensions/MathZoom.js,1657299006442,5601c2c3733996d848cff2538bb4d525b5806e838e4d55c3834bb8caab1076c4 -assets/packages/flutter_tex/js/mathjax/extensions/mml2jax.js,1657299006434,357d0fdeb12ff936983ead28f15c50425f3a7ff952d58fef05bf80c6ee29f1b5 -assets/packages/flutter_tex/js/mathjax/extensions/Safe.js,1657299006450,6ce27324da03adc990d061f6887b796810240a27a913462b033c650c818753e2 -assets/packages/flutter_tex/js/mathjax/extensions/tex2jax.js,1657299006434,4519cfd604be84ef622fd2ebeb7a8b427a347475ac5d6d15f713ef1816245d22 -assets/packages/flutter_tex/js/mathjax/extensions/toMathML.js,1657299006386,7252ff59a5476847cf0f9a85e44c9b171d6619b62b54af607bf55de9304bf678 -assets/packages/flutter_tex/js/mathjax/extensions/MathML/content-mathml.js,1657299006450,a352789306b6ec8241ead24fdc7689c9289310efd67a1193076f7944d0a8f0a7 -assets/packages/flutter_tex/js/mathjax/extensions/MathML/mml3.js,1657299006442,1f99d8b1e88cbc4c9b78dae76285b0ba592eab04642ec90c8c9164480e3529c2 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/action.js,1657299006394,92162144ba9413f295d5264d6f6ffaa2e7983d40f5efb8e27077db6041de3d9a -assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMScd.js,1657299006426,ec23cba34621a81d5db0babaf322d903babdc40a3c7e0b055fbc1a22e3f15ff5 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMSmath.js,1657299006410,d55a963e9cba6f95259e21630a77cccc5c1dfd8d037018e091d68bf0518aebc9 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMSsymbols.js,1657299006410,36c43a323d9c7a1cb598befc9bbf811be9ede6b37cf6fa40e9fe7fc571898a35 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/autobold.js,1657299006402,14d7ee8c816854954b44285699432ee5e6772c52ff6d821ccf73ef762e69a6e1 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/autoload-all.js,1657299006410,6cf1e70cd9a9c0aa14490aaca3e6219dfb8d387d350279df974714cee8e162d3 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/bbox.js,1657299006386,11139a41800055332b9a011fc69e19d6aae08bbf1d5b256362ed84ca9633e8be -assets/packages/flutter_tex/js/mathjax/extensions/TeX/begingroup.js,1657299006410,f4da53dfd106f14ecb86f1d5d5f9975aebcdc65af012023b84a09a2893bc817d -assets/packages/flutter_tex/js/mathjax/extensions/TeX/boldsymbol.js,1657299006410,2f423d2599c3b838000b57f2f2ce12034f6938dc82828683e81d74dae717c534 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/cancel.js,1657299006418,31b350a5f656f07d1ec7e331b0dda39d6607601b8ead3ed00a3df37b025e502d -assets/packages/flutter_tex/js/mathjax/extensions/TeX/color.js,1657299006394,5514172214c9f3bfd9f9c67809a4c260c72275e948c730320b16d6a08f113889 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/enclose.js,1657299006394,bd2254218803ced3929b21afe0427f2d77611941e9866111f7915ba1a4779190 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/extpfeil.js,1657299006402,adfc77a8a266d7545c5f156f438ebc75c4126ee75206a92eded9527a053b048c -assets/packages/flutter_tex/js/mathjax/extensions/TeX/HTML.js,1657299006418,b277a803ba6ec0ccbb670b582f414b3a01648fb5ef689191ddeea68bdb947b7d -assets/packages/flutter_tex/js/mathjax/extensions/TeX/mathchoice.js,1657299006402,6f060b9934dfad3c67722c1eba53552e906f2ebc6a51112a0ddbf39879f1c39c -assets/packages/flutter_tex/js/mathjax/extensions/TeX/mediawiki-texvc.js,1657299006426,61ed9d39d516c33097afe771649b5f2c73ce2ecbf7ea5bc8b3abcd7afd307e02 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/mhchem.js,1657299006418,6ed6a36e6408cbc2e4af597c39146c6c551744d65266b3feef37c04fd55d71ff -assets/packages/flutter_tex/js/mathjax/extensions/TeX/newcommand.js,1657299006426,2bf9872c87d712434942595b8a7695b8a03110dacd3798282a9bf9577b09704f -assets/packages/flutter_tex/js/mathjax/extensions/TeX/noErrors.js,1657299006402,814e5e2071ea6b4fe8716d3ae11d1979fd6540487c02f79da439f21a9473c6f8 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/noUndefined.js,1657299006386,9e69a57784c40bb7a2cdca3b907e541e135fb3ebd5218148e4ab8e48871c2db1 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/text-macros.js,1657299006394,bfdb4245e78285aa2a3f38132e14a365a27407779b1529815fed5a6111286aa8 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/unicode.js,1657299006426,1d0f8278108e91dbc0a74b59fd68d1d285d5518f7eadbcadb1d8f4636f51c035 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/verb.js,1657299006418,ae649700c05cd68d98c71c5b34946ae9ab2bea47e7a69256dc4fda6e6f958cc9 -assets/packages/flutter_tex/js/mathjax/extensions/TeX/mhchem3/mhchem.js,1657299006426,a1d819456050dcefe3ab5f1c839799d1da4b1918d9a62b8b7643d37c48476ab1 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/jax.js,1657299006218,d69c37f2936141acf37e980e38530c8fd4e4a670694336599d59bf693e413532 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Arrows.js,1657299006178,bd4dcaf481875931327b1a21c7e02b32ade6249635ce710d49e3d8a9acac4625 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/BasicLatin.js,1657299006170,79e65028ca5d01de9382742a359a2862eac2c3e789cc707a5afec12153754522 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/CombDiacritMarks.js,1657299006202,5d08af71c4bdce34a62925bbe3f92daa27c4b2dba7c5b2b462de378664940cd4 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/CombDiactForSymbols.js,1657299006194,8463ece6612eb1ff2caab0d41d50e37a49187bce70edfe60cf2d7dbeafe31ad8 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Dingbats.js,1657299006202,d05b12640e387c8a6f2852eb0fc635b529182016f845e80bff56a2959a8065a5 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GeneralPunctuation.js,1657299006178,a7b333bf721cf06624a628a4ad952503acd515ebb5536d97d32cfbd68d72a0b9 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GeometricShapes.js,1657299006170,2103f1a6d7190bbbe118691334ed80904a41d49354a5d2bd73321a30a9a7ce69 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GreekAndCoptic.js,1657299006170,6d00a2fc84680c16bd91b30a69d817a57fab816d7ac26d92a7eb115165725b98 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Latin1Supplement.js,1657299006202,0ac6538d15d46f7179103469c101d07e3026e44a2818db43323d8c13555782cd -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/LetterlikeSymbols.js,1657299006170,00fc957f23957d44b8001e9f1a44b5ecb423305cfeb46022ef8ea0059926bf1e -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MathOperators.js,1657299006186,b04a0900ef97ffaadf7c3af7a2826cf9f4b9a530f5dc44c9b9921f09a7f53fbf -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscMathSymbolsA.js,1657299006194,aee5dd4f2c9e67c2a14102186de19df22f8f7e3fcbd08c8cf9d2466d80e3a2c0 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscMathSymbolsB.js,1657299006194,30f84c1ab1482818d2cef3e8f50c1a4bd3a94e807490e4aa5b1e829580d27bc1 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscSymbolsAndArrows.js,1657299006210,06613011dd029e33e6f49040a375776583db21ad5b4a67ac312efa335555da03 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscTechnical.js,1657299006186,7dbe589d1c536ed2b4aa316938bb9ab688b8f6b37258e0ff8bb2b300dd1c059b -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SpacingModLetters.js,1657299006186,8f3cdf1a904026af0365520e14d8b9dfd4eec312fe6d4c478384622264d6ddd3 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SupplementalArrowsA.js,1657299006186,485b9625f06c6272122f5a8b99e7b3d8e3f24cb88dce560cd1071a962720ab43 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SupplementalArrowsB.js,1657299006202,1fdb22851eaba07ab038a78441372a0df54860a4073ad8b4331a539524dfbdb0 -assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SuppMathOperators.js,1657299006194,fa1d86be7542fbd4e8fe57c651632ebf1091f031e575c4e76f5348b649c3a66c -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/config.js,1657299006226,e087a6b4e8558de8b0a44fb2c001749043a7dc97ccc1292f8b7aaa26e8a253dc -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/jax.js,1657299006282,256b0f01d952224bb4394ae0d5bd7f848cf6e367b41d2c62b8c8a6d476add33a -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/a.js,1657299006274,9447fe30b8066f395aed0a7503549e6605effa4f78d27d4d2a8fe1f9d4ccfa2e -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/b.js,1657299006234,ab6af61de9e768db07b453c4f53eae6428cd75e32b402b028c83f84455ad4976 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/c.js,1657299006274,7841beee7129edf08f978c1799a7ab9fac838f977bbb3d9ca162dc1a04c009c5 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/d.js,1657299006250,3e7f6da2dfd2fe3f86d040634a19d06a5ce5bf8e59ef6a14df541a32858916a8 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/e.js,1657299006258,d26c979f888f98305290550b6ce77ee317976b39db03494fd0a56ebb38e79ffb -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/f.js,1657299006258,9fec689f522a2dedd97b39bc2aed7ed7071bdb4d78f0f1fa455276cf4b4a7579 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/fr.js,1657299006274,acd4c5ebe1dfb5a799efd4ca901be23ea80c99dfd66df056344fc1b6e54282b7 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/g.js,1657299006242,0e805b2154c7fc0364aa0349c2f378a42aa7185cdd8589dee2d9d618993a7035 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/h.js,1657299006226,eb4894e9a51d78177d896f3bd82989dd81a28aa9fb4d9457d8c103423da9fc0e -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/i.js,1657299006250,6487a689d010733e1d77fa23e0456833bbd4725d63cf8568791d257d8a719b55 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/j.js,1657299006266,55db7d58a4a734c7dd11d9e7fd1cdb1d81f22cd6fe50be2ea2ebf2f7370d328d -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/k.js,1657299006266,2270d859cad273fbf851931c3c0d0ed352ee60ea5feee3fee717529a6a24e511 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/l.js,1657299006274,315e22126f2cb909b7db02568f3240902ece18432c7043deb5497de4a32ad65e -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/m.js,1657299006234,661d8ebfcfde3e45ed15f9960b6aa8790f47c197ce891aa4d7aa3fa44891b70d -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/n.js,1657299006242,eadf7b2fe438f1f2dba026e80601d7ce1a5ece04133bef8dbf450e5b7cf8c77a -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/o.js,1657299006258,e7a1b5b7ced45172253db0e649f1c0b2458d9d31aa6644b0227050c21f0f69c9 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/opf.js,1657299006242,777b4bf781b336ffe1f48386d32d0f596fa2b70eab0f9613d393a6466ca9290d -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/p.js,1657299006282,6353e7d96207117d79b2e77149fcebccc10a4d65aac1b5574b1b898cad487909 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/q.js,1657299006226,60bb4bf2d1de64ff78b757526101250933f87de130a837271774cb57197cc562 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/r.js,1657299006234,ded62ffc2bf67f7b6c409ac0ad5e6158dcd78ea6770c33c776bd862e8fb9392e -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/s.js,1657299006234,a7bddf931637f6263481cd9ead256ba8df0c06e747946f1c8386f35e6ed54c94 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/scr.js,1657299006258,d2afd3cb25db75f3ef3fb2897dfece9f343657f73a65473ecb8715a57667d1fd -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/t.js,1657299006266,f74c6ab4deb7bf9959e07fbd00b65b52bcdb2341e7e26f2062fae29f776b75f8 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/u.js,1657299006250,6ab8c02c6f009aa3d35ecc0bd0091ca347c540e8de4e1be4a359f1290bd194f5 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/v.js,1657299006258,be6b6502c6ca48fafbb5213c45e6520c2cd371b5f4193f91e858e6525d85dd84 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/w.js,1657299006242,db0992cade7d6b2b0e093f3d231715c7e8e43c2c1eef37b2588642c0dff86ab7 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/x.js,1657299006234,c45122ca996dbae1d38c47c5df7063db0991c1d741591f78e377455b94bcba30 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/y.js,1657299006266,e5c2478f8511e79d90a68b3fe7acf583639c9b2630e1d7eec482915cdb310b32 -assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/z.js,1657299006282,82688d992938e99f6194b595e2f30e21dac253c6617a18e8a889aa8dd01bbab1 -assets/packages/flutter_tex/js/mathjax/jax/input/TeX/config.js,1657299006218,cff12d1efb6c2fb6898e8d9d658df2a0971f57b11953a7387537bf116dee1c58 -assets/packages/flutter_tex/js/mathjax/jax/input/TeX/jax.js,1657299006226,e3c2fe4c1aa543aca03b93e278f1f5385448574442982167bbc8a72c6ce1a77b -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/config.js,1657299006362,d3056f91ec06739e56b64fceaa9ee1bbd33242755144e6a72700b564d7da81c9 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/jax.js,1657299006362,f7aafd461e74f97cbd40ff4aa6d7f6d2e764aad8650f6a067b6299481201fac5 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/annotation-xml.js,1657299006370,953d03129d27db4d4c6f4fab93bd4bc55954660d844859b97c71938ac2e599c8 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/maction.js,1657299006378,455148edb48751f1dc72aa00b08db88ea9462ce6819689a051a6b5846e6a01c8 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/menclose.js,1657299006378,7275397e803e013892e0a49bf4eaa7aef17eb99cff1e15d57a03f9caa01577c4 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mglyph.js,1657299006362,d14c67dccdc72b1be8036d1d9bf618908f89fcae42bc6db9c4c348a486ef79f8 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mmultiscripts.js,1657299006370,4d2b55f2025db41644b86683ddc2785500020e9005c541ed8d93dabe831ae70b -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/ms.js,1657299006378,f373bf5859d67470b25d7b943097e678fac2530282120d01b8fc782921802aec -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mtable.js,1657299006370,989ca2a584eeb7ca9fff287543334d7448d8c9956ad1490f1123183ea5867cbb -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/multiline.js,1657299006370,11f5d9b380eb39d5e27d27ae0063fda44983aff76825bf82b705d23de29d9442 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/fontdata-extra.js,1657299006330,0b2c429deb70e3daacb8466cd04a678e9c42956cfaab8783498c573a2f173fad -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/fontdata.js,1657299006322,3ed344b4da421c9a8d13b1eb164a2f1adea043c0a264e8b947f411e5ca49c7b8 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Alphabets/Regular/Main.js,1657299006354,74a1213aa9489f08a6486540bfe060c18fb4417509f81865e0cb320b92154ad4 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Arrows/Regular/Main.js,1657299006354,b2fba1e01448f64c88f27dda9aebaddbc88386ff844f4b5a0a3a1564e46819cf -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/DoubleStruck/Regular/Main.js,1657299006290,ef5cf773dd0747f81f5ebc7a175e750cf54ef1a4eb02c21afdcb4011ed1a59f6 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Fraktur/Regular/Main.js,1657299006314,41eb713d78093cb97cc4638c9cceb304687c8efae05cfcb2852a83438aeea570 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Latin/Regular/Main.js,1657299006314,3d14c5d4b08adcaee82724c4e0066b6a0ae920c0c99be00b21a3e14ed637a453 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Main/Regular/Main.js,1657299006330,c10179ed13473192820cabbdf61d5ced7231e3df78eb8bfeb1d0472994957276 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Marks/Regular/Main.js,1657299006322,5b82948a962d48c37fae1437bfc676628a7661dc17b63fd8c4c3696db721f3d1 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Misc/Regular/Main.js,1657299006298,edbec85802dd36aec7df91463cc76be4240ae04e824b032029bf6a714de0fed0 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Monospace/Regular/Main.js,1657299006354,dbf77b4dcfacd040c7bde8729868532354dc1425fbb0df849cc4802a050c3b44 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/NonUnicode/Regular/Main.js,1657299006338,143cc4eada873c8a8f77af74012a09a63e238cf1ef80d26c8ffa7c17d4a92979 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Normal/Regular/Main.js,1657299006298,a1d4df59a9641d7ef244305a1f7dc4f86705c3dfb361006ca5bf440cbcc8e3e1 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Operators/Regular/Main.js,1657299006290,68550efef794ec01f43a209d7a410018fb28f5c5cc8f5aa1d9e8f13b9c59a9c3 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/SansSerif/Regular/Main.js,1657299006330,5b948a0630eb2d99b7d26fbc3b5116def15b2fd9e2a7086c6984b935a6d14a96 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Script/Regular/Main.js,1657299006346,edac54d367507055e1a719bc2e98575787dd9f76814476d689762813ac320e23 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Shapes/Regular/Main.js,1657299006346,e59203ae6959b5908fd76acd8effd434c3d82640744b33a8b5b72df3a1eec302 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size1/Regular/Main.js,1657299006346,f6262a7fe259859cfca18231723e18d359b93ea28c66d8fc4a28e44b18d90359 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size2/Regular/Main.js,1657299006362,e53eb818d145d58d2dc936c2f51881e15ecc8dd8d9ca80f663fc7eea19195735 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size3/Regular/Main.js,1657299006322,120ef158af1c792f187636dd6533011763f4196335ebb6d90b39b221aa7401ba -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size4/Regular/Main.js,1657299006306,f00665386fa767ae1adbf4a7c8dae343808bff25497832bf2b49f07067a5f6a4 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size5/Regular/Main.js,1657299006298,df74c452b6eb2ed4d3363fbbbb07080d10346980411d6bbeb90717e578500767 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size6/Regular/Main.js,1657299006290,7442b3bbf91fca7caacf7f8bc2d69c799b0a2b7561f09cc3aacd1656dd3b7dd3 -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Symbols/Regular/Main.js,1657299006306,1834be6dca6825242c48e3581e703a2a5e1e26d2aae46db64d3bf63a75b5a4ba -assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Variants/Regular/Main.js,1657299006314,6f265cae4bb60549bc7731519cfde295e8af96963bed348f248602a1ec4059d3 -assets/packages/math_keyboard/fonts/CustomKeyIcons.ttf,1654795692543,ef29debbba4ecf636b4f1bdb50758f2e36571e430c90fcda5c51404988f2060b -canvaskit/canvaskit.js,1663715051487,1c5e4be41a8a2901d8c9ae4edb5c2bd26c5c4d0564d732a3ce2bef7c6c27bcb0 -canvaskit/canvaskit.wasm,1663715051512,5ead4a7a5f1445e19dbf4515ce48c88ad7070b05c4c318e8a73f83917862aa16 -canvaskit/profiling/canvaskit.js,1663715051514,15d13a02cb0d513cda2f2a2b63df45ad9ebb843723e1380386b016360ffc9ba0 -canvaskit/profiling/canvaskit.wasm,1663715051548,92eb89423488999d48294283d3905d1040b96088d7e3c243bf109dbd1bb29ee0 -manifest.json,1664360355046,c8483f254023991cda67a422ec5c4345464b71556731450844e9d3cb4d7e9bad -favicon.png,1664360355044,031d6a3fcd533d4105c0bfdd2a8d5bd8ea197c43328cf92390ebce0906b9fda9 -version.json,1664360609971,6702ca18b8ef4a4638c2e42c89c1cab864d3e5626b1cb7060605657378ac1c1d -index.html,1664360610560,65bc25a66291ed7932de3f3bc37e9ee02bc42e2d0bfa2f7210ca616604828981 -flutter.js,1664360569674,3b3a07d4c55d59c5461929dc37484dec4d38c90aca67f7c044eb85d9524889e6 -assets/FontManifest.json,1664360610404,47e0e80292af2fda358fee51ede64046cd0fef40a30fff6745f5e45a30f11392 -assets/assets/mathu.db,1664360355003,63864436c74ebeae209151e42cbbdaa0181efe38ec65e4717e55695971dcc7f2 -assets/AssetManifest.json,1664360610404,af8c331cc9bd0863bf42b992cfdfbc42d8809a45c740986d70725762c1d6cdff -flutter_service_worker.js,1664360613851,b8a46d3d3d52d22d3e998f5c70b0dff349b8e38ae09820eea8f7d2a134169673 -assets/assets/images/balloon.png,1664360354985,9cd0fd2288fd2152e1d784d7239dda79c7de9f0d14886e556f71d440b78a873f -assets/assets/images/favicon.png,1664360354985,031d6a3fcd533d4105c0bfdd2a8d5bd8ea197c43328cf92390ebce0906b9fda9 -assets/assets/images/flag.png,1664360354986,004499bf99bba2921b21095751691b7917bd165ee8e33e3714dc49c0a358f1bc -assets/assets/images/laptop.png,1664360354986,6119195e47713203f8f690585fe08853fe5e2157235307cf81251e3576673a26 -assets/assets/images/letGo.png,1664360354986,aafda97530651a322cd7f0094da8aa145441281a11360c32e15ce7d8d03dde99 -assets/assets/images/planet.png,1664360354997,61087abfda80d5ec6382a45593c17baef3e0521c9b845e3f1a40bba8b6f0de19 -assets/assets/images/SignUp.png,1664360354984,d8904206b9e09bf633a11b8bcf77004f652546a685261795cc7b73a1774cea77 -assets/assets/json/MathematicalCalculation.json,1664360355002,5df8253da1ff19b541f139362d04862cc45de93ae046059296bda1f1c6180535 -icons/Icon-192.png,1664360355044,eaf2464bfb1d192fdd192a616f7b858dee456d573c6ec619648a1dcf2bdddfa6 -assets/assets/json/Mathspaper.json,1664360355002,4859d34fe63216c2f32ef22be7ce87693bde71a090f78155289bdd0aa8e18213 -icons/Icon-512.png,1664360355045,9cf4cd298ae95acc1f25e97d88aa3f6bbfdf40867ea0f8a854c4393f49d56e64 -icons/Icon-maskable-192.png,1664360355045,196ce9142a3442ab37ae90cd46c3389e4660400c859b81cbb0538a51b39752eb -assets/assets/images/404.png,1664360354983,9d8700d48369464ca71106023215e969c0d007dda0082ab2ad5948c365abcaf4 -assets/shaders/ink_sparkle.frag,1664360610521,bea2c91bda51e6252cb5ac73245359cb7a724ddc16708cb413ce78163fb87f1d -assets/assets/images/LogIn.png,1664360354984,a578de48ee59cef8cbe60878ab5be34d15c6308029da1fcd35f81146bb53fff5 -assets/assets/images/samples/prairiedog.jpg,1664360355000,bbcce221b2c2253f81b33ced56f73ee60573d9c5405fef17230ff9fa9b914d2f -icons/Icon-maskable-512.png,1664360355046,6833b7c449e0dd24d5e164a53cc4557e643893e675b476b05efcbb9a6aa05bf0 -assets/assets/Fonts/DINNextLTPro-Bold.otf,1664360354404,ff34c349117a74943ffed6544ef0d7d223a2556d08e527f7ed1384bf1a0783b4 -assets/assets/Fonts/DINNextLTPro-BoldItalic.otf,1664360354405,86b40cc2c31997ca53e3dd237833e1ab585c80adf7bb98c6a7c8af77507d7413 -assets/assets/Fonts/DINNextLTPro-MediumItalic.otf,1664360354406,93eaff542c4f7faed77641f4085a526bd910ac763cdcc1542df3e84a6594cb9c -assets/assets/Fonts/DINNextLTPro-Regular.otf,1664360354407,b23aa399e1aa0c0e5d6bb66cdab5fc4ad96272f0ec0e8e2041bc89bf14bb7c90 -assets/assets/images/samples/panda.jpg,1664360354999,46a2fb46ed8c4c618b74acf2e8de9e5114a3561cd403296687606f719f00c7e9 -assets/assets/images/samples/african-elephant.jpg,1664360354998,3427a6b1508a85d3982a9b06724d68285ebf09d76c614acbe03f2cdda57419ca -assets/assets/images/samples/sloth.jpg,1664360355001,81a28f44527ad57f8046cbe42fd10cf188f5d072d276c7f372a1690ddec009fd -assets/assets/images/samples/giraffe.jpg,1664360354998,7eb117c0c06f4ef9de3d1f4e281e9fcd513a23f246dca6044819fe0db86bf57e -assets/assets/images/login_06.jpg,1664360354996,40c0aad2d9b1391abcc29653ce90c32628b03178d7042ee641003b521d668df8 -assets/NOTICES,1664360610404,089e47d2e019059c6462f5a6d5f242428d5ace34a8cb9b7781f375c8707d96a6 -assets/assets/images/login_02.jpg,1664360354990,ce8d909838b5e40e17b629236cf13193142b3acc9acde911fb31186c2da8fc9c -assets/assets/images/login_03.png,1664360354994,2801c9a6cb2f0fbeacb00faf0dddf3f7132530311d6b401bff9f5dfa6ab62b10 -main.dart.js,1664360608920,6c784127d3020861200db6959e63da23dc24c7528dddf912f73d0997b232fdb1 +favicon.png,1658758268182,031d6a3fcd533d4105c0bfdd2a8d5bd8ea197c43328cf92390ebce0906b9fda9 +flutter.js,1664016101968,3b3a07d4c55d59c5461929dc37484dec4d38c90aca67f7c044eb85d9524889e6 +manifest.json,1658757874677,c8483f254023991cda67a422ec5c4345464b71556731450844e9d3cb4d7e9bad +assets/assets/mathu.db,1658757874647,63864436c74ebeae209151e42cbbdaa0181efe38ec65e4717e55695971dcc7f2 +assets/assets/Fonts/DINNextLTPro-Bold.otf,1662462101784,ff34c349117a74943ffed6544ef0d7d223a2556d08e527f7ed1384bf1a0783b4 +assets/assets/Fonts/DINNextLTPro-BoldItalic.otf,1662462093978,86b40cc2c31997ca53e3dd237833e1ab585c80adf7bb98c6a7c8af77507d7413 +assets/assets/Fonts/DINNextLTPro-MediumItalic.otf,1662460053699,93eaff542c4f7faed77641f4085a526bd910ac763cdcc1542df3e84a6594cb9c +assets/assets/Fonts/DINNextLTPro-Regular.otf,1662460043046,b23aa399e1aa0c0e5d6bb66cdab5fc4ad96272f0ec0e8e2041bc89bf14bb7c90 +assets/assets/images/404.png,1663844682264,9d8700d48369464ca71106023215e969c0d007dda0082ab2ad5948c365abcaf4 +assets/assets/images/balloon.png,1663845181098,9cd0fd2288fd2152e1d784d7239dda79c7de9f0d14886e556f71d440b78a873f +assets/assets/images/favicon.png,1658758268182,031d6a3fcd533d4105c0bfdd2a8d5bd8ea197c43328cf92390ebce0906b9fda9 +assets/assets/images/flag.png,1663845149398,004499bf99bba2921b21095751691b7917bd165ee8e33e3714dc49c0a358f1bc +assets/assets/images/laptop.png,1663845119022,6119195e47713203f8f690585fe08853fe5e2157235307cf81251e3576673a26 +assets/assets/images/letGo.png,1663845095382,aafda97530651a322cd7f0094da8aa145441281a11360c32e15ce7d8d03dde99 +assets/assets/images/LogIn.png,1663844630323,a578de48ee59cef8cbe60878ab5be34d15c6308029da1fcd35f81146bb53fff5 +assets/assets/images/login_02.jpg,1658757874638,ce8d909838b5e40e17b629236cf13193142b3acc9acde911fb31186c2da8fc9c +assets/assets/images/login_03.png,1658757874643,2801c9a6cb2f0fbeacb00faf0dddf3f7132530311d6b401bff9f5dfa6ab62b10 +assets/assets/images/login_06.jpg,1658758268185,40c0aad2d9b1391abcc29653ce90c32628b03178d7042ee641003b521d668df8 +assets/assets/images/planet.png,1663845069841,61087abfda80d5ec6382a45593c17baef3e0521c9b845e3f1a40bba8b6f0de19 +assets/assets/images/SignUp.png,1663844743983,d8904206b9e09bf633a11b8bcf77004f652546a685261795cc7b73a1774cea77 +assets/assets/images/samples/african-elephant.jpg,1662295562523,3427a6b1508a85d3982a9b06724d68285ebf09d76c614acbe03f2cdda57419ca +assets/assets/images/samples/giraffe.jpg,1662295583120,7eb117c0c06f4ef9de3d1f4e281e9fcd513a23f246dca6044819fe0db86bf57e +assets/assets/images/samples/panda.jpg,1662295608218,46a2fb46ed8c4c618b74acf2e8de9e5114a3561cd403296687606f719f00c7e9 +assets/assets/images/samples/prairiedog.jpg,1662295630719,bbcce221b2c2253f81b33ced56f73ee60573d9c5405fef17230ff9fa9b914d2f +assets/assets/images/samples/sloth.jpg,1662295534197,81a28f44527ad57f8046cbe42fd10cf188f5d072d276c7f372a1690ddec009fd +assets/assets/json/MathematicalCalculation.json,1663655491492,5df8253da1ff19b541f139362d04862cc45de93ae046059296bda1f1c6180535 +assets/assets/json/Mathspaper.json,1663655491492,4859d34fe63216c2f32ef22be7ce87693bde71a090f78155289bdd0aa8e18213 +assets/fonts/MaterialIcons-Regular.otf,1663656391421,6c5b450bbaa24bf30f1a1c111fe2be1e9c2cb23dde6fa9ee8b3609e812302aed +assets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1651748942733,007720e2ea8128f223e5f1a08073b8f40df49b41dac35727107ab73dc4488ae0 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_AMS-Regular.ttf,1658329705151,3bf9acee5a76d2f609dcbcb3a3d96d00eeb5d1bd92283513e662be83cb8790a6 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Caligraphic-Bold.ttf,1658329705144,b312df29f12f2603de0e9b91d1fb2a04ebba600a68fb33c4972dde73a0d7b40e +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Caligraphic-Regular.ttf,1658329705122,e9e28f08c749a959102593d44db58b469eb3622d4b5303bed8ea87a9b2149c68 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Fraktur-Bold.ttf,1658329705128,c531f5627210b883c76a356543eea29d0884bb35d2758cc2ce761fd3d7043086 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Fraktur-Regular.ttf,1658329705140,15a470fc0c5498c8c4c63ed2b1f931c2d06f0c2d630d59095d0d810254513e1c +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Bold.ttf,1658329705141,b558bcc0e7571651efed4bc0eabcd4475f0ca527070f9f33f44e71938ed1fd21 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-BoldItalic.ttf,1658329705118,8edf95454821afca8661b7c264c6c2778ef12f7dc91b21065a4500b9e893a225 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Italic.ttf,1658329705130,b5312335c50be335e405b7a5a627d0248e712394acf967d09578b6af2ae33f71 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Main-Regular.ttf,1658329705137,d777789e493338e96e0881c91d295d19b31ca987f5a7391d89b0d55a276e9c78 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Math-BoldItalic.ttf,1658329705116,5b46482d2b7e8a86a3ef772233505993a41f25258be4c0699f8a3993607d09ec +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Math-Italic.ttf,1658329705133,4ed6f8fc64d0f2a490e86936472cf5aaadec3f12974751edbd71997a22d643d6 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Bold.ttf,1658329705142,6d8289f8d666851bac5a02683fabe164ddeb595418fefc1c7200b320e766215b +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Italic.ttf,1658329705135,65db5549f3f2581ca33e226956b5027b00a8007bdc534e17bb14d4b78bf8a31a +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_SansSerif-Regular.ttf,1658329705125,0231cd4d462055eac3716198dc2aeea4500bbc06135bcca5759674111c1e9219 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Script-Regular.ttf,1658329705148,a0a879067935625c6c0faaebabb9f021c793d3b866d28f31e76bc477b03b4d6f +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size1-Regular.ttf,1658329705124,f95b4f688fb36159b508c0474b98d79587d6c50dc371b8ff6310489bf4584e1b +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size2-Regular.ttf,1658329705127,4c571d1438b114d51890276d8087212a13b753f9efd0b994c6f477c7e23331b4 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size3-Regular.ttf,1658329705146,037d26167aca2ffb59287cbd10587a08a1c1b6e8cfa310c27c96b74018ea3cd3 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Size4-Regular.ttf,1658329705120,61a91b8777fadea97cb14d5131b59bc052b78fca35d90ae975f85eb6b2cac762 +assets/packages/flutter_math_fork/lib/katex_fonts/fonts/KaTeX_Typewriter-Regular.ttf,1658329705145,f5b3046a59743966b2d134d81be5188d18411cfca90daab9e8134a135274074e +assets/packages/flutter_tex/js/flutter_tex.css,1658329710643,c147c86fb04c3c8a09e6d53baef3395084b6d3f4afdb862b6386faa5f6a10b41 +assets/packages/flutter_tex/js/flutter_tex.js,1658329709122,4e6d254e27c49a4706152f0c76f21104d2302a1d4b72b98d429ff56743a1cf29 +assets/packages/flutter_tex/js/katex/auto-render.min.js,1658329709124,6d43d399313c02847103382479b8b5fabf1374fbc596dd3e94b000372ddda0f5 +assets/packages/flutter_tex/js/katex/index.html,1658329709238,0912b0bccb6710843afa3b3161d71d70186beeb8dd8f601dcce11c92eb4ddb57 +assets/packages/flutter_tex/js/katex/katex.min.css,1658329709244,844ea822f57ce97eaf0434beae6803d30d57ba5440da58ea19101dfeefccfd46 +assets/packages/flutter_tex/js/katex/katex.min.js,1658329709242,be74ba011cd4c858dad34104576aebb66f4dfa9894735e9016cfb2023b4ca596 +assets/packages/flutter_tex/js/katex/mhchem.min.js,1658329709239,bc56572dc35dd15d08916ecd348878bcd35cc2ea8b6a4a75ba5de141d22e2ace +assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.ttf,1658329709233,1a93e0d55a17d94d29c40e1e74c4ea223c9b1984949d9f808d3b0895f0470ec5 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.woff,1658329709133,3d048b3ec94487840917c5b701de85b56f3c5b8b4cfaa770890ed5754d0a3237 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_AMS-Regular.woff2,1658329709236,213f5068ac9f0d32d25406206f1b4b1d4bd9eba043da5d6fdad75f690b84d72d +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf,1658329709219,aa539facfbbe0d509e7406cb453984f343362bcc9710e3b4e7af0e916198938b +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.woff,1658329709192,dcdde28187f39b42c539e562a29449045f583363b3d8f59c5e80e2ab3306a994 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2,1658329709139,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf,1658329709148,8ae0a434dd97912a5b4212e0d645e3f50c4037179548f182196e89d6685a4f41 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.woff,1658329709154,de72550f816b7aaf05733d796a9cd80d3fa75ac3e20d0c8270e5da150090afcd +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2,1658329709223,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.ttf,1658329709170,b897bdbaa5b2bd809b3cb5f8b58477f4d34ffec7da2f13dd0fcf36e6dd77849d +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.woff,1658329709207,f55a188bc351f752febbb50bdb2768bd5a1cc664c43014e318c765769fac66bd +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Bold.woff2,1658329709197,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.ttf,1658329709160,aa6b5105ac99633047ddc50e1028fd6faf3c72a1609fa9077b4ae771082fbbfe +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.woff,1658329709188,e74ef2d20dc73cb68c97fc2f6dfca344b2c8deb49eb6ec4f6e1fe54bdd6668b7 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Fraktur-Regular.woff2,1658329709184,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.ttf,1658329709217,3dc1e327211f011faf26ee99abdd9ab376b03144d7978462022b00ab15825dab +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.woff,1658329709144,39d43d83ed398afe7d71abee5e2ad090c2bb0f9eb6b6339d006dd2c42ae78fdd +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Bold.woff2,1658329709163,e38b3cc40a6433adbc85cc5d07d5ad9c55528a1bb5e71419c9fd78c3983aadfd +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.ttf,1658329709196,ca92218418609bc1373be5633de3b940f5797c69ffc44e96c5826e7a870c9a8a +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.woff,1658329709145,6c815b515b4d929e288017dd2ecf6f1fe337a256148160e05c4098bc4dfa7742 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-BoldItalic.woff2,1658329709126,9af6829a796f56e31afa49f5e0efdd4649f1e80cfe35bcf19ef065aaa8fae9f6 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.ttf,1658329709176,2df16b36c649a5bc280a3954487fa70fb24233b2f100e5d95feac9bcd8f5fed9 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.woff,1658329709226,d527e1952a9fa6aa8015df9a03f7b641e0113350d620295b757a3f795f037988 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Italic.woff2,1658329709221,389e6652f22c04bc64135ab613340af96ff88fd12f709c0bff9c7b60d587bc74 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.ttf,1658329709181,6a9b352cd096b45c66182ce95265748bc9cda8e07fe5d012d20f22310aba20b0 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.woff,1658329709177,e1c20ab685f5d104019298551db13977d9fb39ec996f23c38ba76d397472df41 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Main-Regular.woff2,1658329709137,e8271b72b575e15838ebcb47303929723034292f66f32a0e9516952a6608f5f2 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.ttf,1658329709209,12943aa14861fe181b47ca81398cfb1a80e34b0cac92badb8d2d72c98f75b445 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.woff,1658329709166,55068b8ee0a45d97be144f46954199291df07a326887a2e623e8b79fecec6fa9 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-BoldItalic.woff2,1658329709230,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.ttf,1658329709141,50e250538a6fcd5763e6d77f4a76d15b92fc77dd5f32e77b4fb49ecc99860648 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.woff,1658329709128,f6e7afa9e47274f5cabc40a7724df5b38209928a3e3eb0e60f7160eab0adbfb9 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Math-Italic.woff2,1658329709152,e4c73ea6c0d7aa81faf251e090e27d7fce1d5d0f4edc1f4ddddd5b1655af1ec0 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.ttf,1658329709200,f74211ce4c80bf0054b8c8ce928dfc8519cb5d004c26c7413759d911fdf6f84c +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.woff,1658329709143,b9eb1c7155e853e1b9c725ee1b74a18fde683331e366395231e573884a89f39d +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Bold.woff2,1658329709202,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.ttf,1658329709173,5b58ce41c31297e642ecc9da3e2e87f71c164ef0abc1e95102a8fd0f657f858a +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.woff,1658329709159,75eb7b0871ab678bd685cab5c734ffc6094ec82ebed1521fe27b7f2a29e5135f +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Italic.woff2,1658329709189,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.ttf,1658329709161,b7cd3c2ee97bdced3115bc917409f9e4b77b54c0d270858d05ad84f7d01a2787 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.woff,1658329709173,1f4bb4ab53209fc2119632b390b7cb039055e2aed96782b64423d31a08920da3 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_SansSerif-Regular.woff2,1658329709157,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.ttf,1658329709225,bf19a97dcf73e2739b4edde00c5fe128082aadb6c3c2c0a43cad6a518faee5e3 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.woff,1658329709214,70522f23e790c0f429fe25d3a03f806af7d59d3b6ee95ea7e62e16091d8adb71 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Script-Regular.woff2,1658329709150,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.ttf,1658329709194,a0c9b437a592994578d005e666e275b56c892fca1c3a21b451e6cee19c5ffb44 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.woff,1658329709208,6fc5f90ad636ea10ac68d4f650a5fb58ce43af24a4439bacd7e98d5da1e0d46c +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size1-Regular.woff2,1658329709204,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.ttf,1658329709228,70c2cb5dd719ab96f42b69121a76b6f955ec898ecd356d2a44a812db400f8bc3 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.woff,1658329709193,1589983b75429fab92bb3f578bb13e5a90e368c07031f059ea1e948b2f9b07aa +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size2-Regular.woff2,1658329709129,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.ttf,1658329709179,6b7585f1201f6c8b1d3d018bb1a76d0140156c5942a748f97644f90b06f3aa26 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.woff,1658329709222,5beb4c17ed9ba9f4614b452de25dd1b20a0cb76c08faa5450a08be3958eac3be +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size3-Regular.woff2,1658329709169,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.ttf,1658329709190,684166ed1dcd75c1e61123d2dad4096cc400f3e84ebee225d76c3fad2189a28e +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.woff,1658329709186,a78d8097dae42b77417858ffc2f79912397cb4d27fe4510b6fbd755a5a79d0ff +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Size4-Regular.woff2,1658329709225,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.ttf,1658329709212,42cbc125c20e9b06cb9db0b229794ea4d7fd90a0bc89404e4b472f3fe10ee554 +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.woff,1658329709205,1c96dd20fa943d9219857c532a496e344eb1b9f76a85a19ee58db75f3fd30a3b +assets/packages/flutter_tex/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,1658329709135,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 +assets/packages/flutter_tex/js/mathjax/index.html,1658329709250,7b30b832898f793ecd2f0d13afc82037a127582f8291e3d5c0f5b80c39acce43 +assets/packages/flutter_tex/js/mathjax/LICENSE,1658329709247,8419a784c9341a81db70dc59d4559f8697db44f41b34cef3915776199233f5d0 +assets/packages/flutter_tex/js/mathjax/MathJax.js,1658329709246,9db93b985b7af3cd55bac04427b42c26257980b495d2ded56f6a4a820b74873b +assets/packages/flutter_tex/js/mathjax/extensions/asciimath2jax.js,1658329710641,a32e3f314a8059b68181b2f3e0ea60ca101a88c91dddc6803192335f00654e60 +assets/packages/flutter_tex/js/mathjax/extensions/AssistiveMML.js,1658329710624,a908882573162164adbe88f39dd59609ade5fc8dd90e6c9bf5d196d56dc8d6e7 +assets/packages/flutter_tex/js/mathjax/extensions/CHTML-preview.js,1658329710578,0bef96b36efd647340c9aebe99dab1d71a3a7984721459a38ddb8f0564367b42 +assets/packages/flutter_tex/js/mathjax/extensions/fast-preview.js,1658329710642,66f344ecf1cce3b4c9ea60364f448e60fcc8b06f33adce714113f971616d32a1 +assets/packages/flutter_tex/js/mathjax/extensions/FontWarnings.js,1658329710628,498492d10a512af173ae5c8b142db9db1fac8449850e3f94c53370c5b7a81ef1 +assets/packages/flutter_tex/js/mathjax/extensions/HelpDialog.js,1658329710577,85989ca9e04b7c887cb5d6860904f246275e6d646aa4a11a5ff8db0ae82501c7 +assets/packages/flutter_tex/js/mathjax/extensions/jsMath2jax.js,1658329710622,cc7ae86a3f10d4d30931294e2b699dd0d52e8664b402a3d6ac7ae85a7475972c +assets/packages/flutter_tex/js/mathjax/extensions/MatchWebFonts.js,1658329710640,2d352e48c472aed87b6ea60035efe08e3782befd9896b0f61899625ef20de3f7 +assets/packages/flutter_tex/js/mathjax/extensions/MathEvents.js,1658329710633,ed8f0c4e0b5baf5c86e83cb2bfc82a8f5b3bf118e92d8a941422016e983850c4 +assets/packages/flutter_tex/js/mathjax/extensions/MathMenu.js,1658329710629,243279cde9f054c8e4edcbb73c8f15a4fa34881f53eea8e6b4d6a552b438f287 +assets/packages/flutter_tex/js/mathjax/extensions/MathZoom.js,1658329710630,5601c2c3733996d848cff2538bb4d525b5806e838e4d55c3834bb8caab1076c4 +assets/packages/flutter_tex/js/mathjax/extensions/mml2jax.js,1658329710625,357d0fdeb12ff936983ead28f15c50425f3a7ff952d58fef05bf80c6ee29f1b5 +assets/packages/flutter_tex/js/mathjax/extensions/Safe.js,1658329710638,6ce27324da03adc990d061f6887b796810240a27a913462b033c650c818753e2 +assets/packages/flutter_tex/js/mathjax/extensions/tex2jax.js,1658329710626,4519cfd604be84ef622fd2ebeb7a8b427a347475ac5d6d15f713ef1816245d22 +assets/packages/flutter_tex/js/mathjax/extensions/toMathML.js,1658329710580,7252ff59a5476847cf0f9a85e44c9b171d6619b62b54af607bf55de9304bf678 +assets/packages/flutter_tex/js/mathjax/extensions/MathML/content-mathml.js,1658329710637,a352789306b6ec8241ead24fdc7689c9289310efd67a1193076f7944d0a8f0a7 +assets/packages/flutter_tex/js/mathjax/extensions/MathML/mml3.js,1658329710635,1f99d8b1e88cbc4c9b78dae76285b0ba592eab04642ec90c8c9164480e3529c2 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/action.js,1658329710586,92162144ba9413f295d5264d6f6ffaa2e7983d40f5efb8e27077db6041de3d9a +assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMScd.js,1658329710618,ec23cba34621a81d5db0babaf322d903babdc40a3c7e0b055fbc1a22e3f15ff5 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMSmath.js,1658329710598,d55a963e9cba6f95259e21630a77cccc5c1dfd8d037018e091d68bf0518aebc9 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/AMSsymbols.js,1658329710602,36c43a323d9c7a1cb598befc9bbf811be9ede6b37cf6fa40e9fe7fc571898a35 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/autobold.js,1658329710594,14d7ee8c816854954b44285699432ee5e6772c52ff6d821ccf73ef762e69a6e1 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/autoload-all.js,1658329710604,6cf1e70cd9a9c0aa14490aaca3e6219dfb8d387d350279df974714cee8e162d3 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/bbox.js,1658329710583,11139a41800055332b9a011fc69e19d6aae08bbf1d5b256362ed84ca9633e8be +assets/packages/flutter_tex/js/mathjax/extensions/TeX/begingroup.js,1658329710606,f4da53dfd106f14ecb86f1d5d5f9975aebcdc65af012023b84a09a2893bc817d +assets/packages/flutter_tex/js/mathjax/extensions/TeX/boldsymbol.js,1658329710600,2f423d2599c3b838000b57f2f2ce12034f6938dc82828683e81d74dae717c534 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/cancel.js,1658329710607,31b350a5f656f07d1ec7e331b0dda39d6607601b8ead3ed00a3df37b025e502d +assets/packages/flutter_tex/js/mathjax/extensions/TeX/color.js,1658329710589,5514172214c9f3bfd9f9c67809a4c260c72275e948c730320b16d6a08f113889 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/enclose.js,1658329710588,bd2254218803ced3929b21afe0427f2d77611941e9866111f7915ba1a4779190 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/extpfeil.js,1658329710596,adfc77a8a266d7545c5f156f438ebc75c4126ee75206a92eded9527a053b048c +assets/packages/flutter_tex/js/mathjax/extensions/TeX/HTML.js,1658329710608,b277a803ba6ec0ccbb670b582f414b3a01648fb5ef689191ddeea68bdb947b7d +assets/packages/flutter_tex/js/mathjax/extensions/TeX/mathchoice.js,1658329710592,6f060b9934dfad3c67722c1eba53552e906f2ebc6a51112a0ddbf39879f1c39c +assets/packages/flutter_tex/js/mathjax/extensions/TeX/mediawiki-texvc.js,1658329710616,61ed9d39d516c33097afe771649b5f2c73ce2ecbf7ea5bc8b3abcd7afd307e02 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/mhchem.js,1658329710610,6ed6a36e6408cbc2e4af597c39146c6c551744d65266b3feef37c04fd55d71ff +assets/packages/flutter_tex/js/mathjax/extensions/TeX/newcommand.js,1658329710620,2bf9872c87d712434942595b8a7695b8a03110dacd3798282a9bf9577b09704f +assets/packages/flutter_tex/js/mathjax/extensions/TeX/noErrors.js,1658329710593,814e5e2071ea6b4fe8716d3ae11d1979fd6540487c02f79da439f21a9473c6f8 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/noUndefined.js,1658329710585,9e69a57784c40bb7a2cdca3b907e541e135fb3ebd5218148e4ab8e48871c2db1 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/text-macros.js,1658329710590,bfdb4245e78285aa2a3f38132e14a365a27407779b1529815fed5a6111286aa8 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/unicode.js,1658329710611,1d0f8278108e91dbc0a74b59fd68d1d285d5518f7eadbcadb1d8f4636f51c035 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/verb.js,1658329710609,ae649700c05cd68d98c71c5b34946ae9ab2bea47e7a69256dc4fda6e6f958cc9 +assets/packages/flutter_tex/js/mathjax/extensions/TeX/mhchem3/mhchem.js,1658329710614,a1d819456050dcefe3ab5f1c839799d1da4b1918d9a62b8b7643d37c48476ab1 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/jax.js,1658329709284,d69c37f2936141acf37e980e38530c8fd4e4a670694336599d59bf693e413532 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Arrows.js,1658329709259,bd4dcaf481875931327b1a21c7e02b32ade6249635ce710d49e3d8a9acac4625 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/BasicLatin.js,1658329709254,79e65028ca5d01de9382742a359a2862eac2c3e789cc707a5afec12153754522 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/CombDiacritMarks.js,1658329709276,5d08af71c4bdce34a62925bbe3f92daa27c4b2dba7c5b2b462de378664940cd4 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/CombDiactForSymbols.js,1658329709272,8463ece6612eb1ff2caab0d41d50e37a49187bce70edfe60cf2d7dbeafe31ad8 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Dingbats.js,1658329709275,d05b12640e387c8a6f2852eb0fc635b529182016f845e80bff56a2959a8065a5 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GeneralPunctuation.js,1658329709257,a7b333bf721cf06624a628a4ad952503acd515ebb5536d97d32cfbd68d72a0b9 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GeometricShapes.js,1658329709256,2103f1a6d7190bbbe118691334ed80904a41d49354a5d2bd73321a30a9a7ce69 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/GreekAndCoptic.js,1658329709253,6d00a2fc84680c16bd91b30a69d817a57fab816d7ac26d92a7eb115165725b98 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/Latin1Supplement.js,1658329709279,0ac6538d15d46f7179103469c101d07e3026e44a2818db43323d8c13555782cd +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/LetterlikeSymbols.js,1658329709255,00fc957f23957d44b8001e9f1a44b5ecb423305cfeb46022ef8ea0059926bf1e +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MathOperators.js,1658329709260,b04a0900ef97ffaadf7c3af7a2826cf9f4b9a530f5dc44c9b9921f09a7f53fbf +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscMathSymbolsA.js,1658329709270,aee5dd4f2c9e67c2a14102186de19df22f8f7e3fcbd08c8cf9d2466d80e3a2c0 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscMathSymbolsB.js,1658329709273,30f84c1ab1482818d2cef3e8f50c1a4bd3a94e807490e4aa5b1e829580d27bc1 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscSymbolsAndArrows.js,1658329709280,06613011dd029e33e6f49040a375776583db21ad5b4a67ac312efa335555da03 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/MiscTechnical.js,1658329709261,7dbe589d1c536ed2b4aa316938bb9ab688b8f6b37258e0ff8bb2b300dd1c059b +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SpacingModLetters.js,1658329709262,8f3cdf1a904026af0365520e14d8b9dfd4eec312fe6d4c478384622264d6ddd3 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SupplementalArrowsA.js,1658329709264,485b9625f06c6272122f5a8b99e7b3d8e3f24cb88dce560cd1071a962720ab43 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SupplementalArrowsB.js,1658329709277,1fdb22851eaba07ab038a78441372a0df54860a4073ad8b4331a539524dfbdb0 +assets/packages/flutter_tex/js/mathjax/jax/element/mml/optable/SuppMathOperators.js,1658329709271,fa1d86be7542fbd4e8fe57c651632ebf1091f031e575c4e76f5348b649c3a66c +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/config.js,1658329709289,e087a6b4e8558de8b0a44fb2c001749043a7dc97ccc1292f8b7aaa26e8a253dc +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/jax.js,1658329709333,256b0f01d952224bb4394ae0d5bd7f848cf6e367b41d2c62b8c8a6d476add33a +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/a.js,1658329709324,9447fe30b8066f395aed0a7503549e6605effa4f78d27d4d2a8fe1f9d4ccfa2e +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/b.js,1658329709297,ab6af61de9e768db07b453c4f53eae6428cd75e32b402b028c83f84455ad4976 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/c.js,1658329709325,7841beee7129edf08f978c1799a7ab9fac838f977bbb3d9ca162dc1a04c009c5 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/d.js,1658329709306,3e7f6da2dfd2fe3f86d040634a19d06a5ce5bf8e59ef6a14df541a32858916a8 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/e.js,1658329709312,d26c979f888f98305290550b6ce77ee317976b39db03494fd0a56ebb38e79ffb +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/f.js,1658329709309,9fec689f522a2dedd97b39bc2aed7ed7071bdb4d78f0f1fa455276cf4b4a7579 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/fr.js,1658329709327,acd4c5ebe1dfb5a799efd4ca901be23ea80c99dfd66df056344fc1b6e54282b7 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/g.js,1658329709304,0e805b2154c7fc0364aa0349c2f378a42aa7185cdd8589dee2d9d618993a7035 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/h.js,1658329709293,eb4894e9a51d78177d896f3bd82989dd81a28aa9fb4d9457d8c103423da9fc0e +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/i.js,1658329709307,6487a689d010733e1d77fa23e0456833bbd4725d63cf8568791d257d8a719b55 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/j.js,1658329709316,55db7d58a4a734c7dd11d9e7fd1cdb1d81f22cd6fe50be2ea2ebf2f7370d328d +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/k.js,1658329709321,2270d859cad273fbf851931c3c0d0ed352ee60ea5feee3fee717529a6a24e511 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/l.js,1658329709323,315e22126f2cb909b7db02568f3240902ece18432c7043deb5497de4a32ad65e +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/m.js,1658329709294,661d8ebfcfde3e45ed15f9960b6aa8790f47c197ce891aa4d7aa3fa44891b70d +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/n.js,1658329709304,eadf7b2fe438f1f2dba026e80601d7ce1a5ece04133bef8dbf450e5b7cf8c77a +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/o.js,1658329709311,e7a1b5b7ced45172253db0e649f1c0b2458d9d31aa6644b0227050c21f0f69c9 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/opf.js,1658329709303,777b4bf781b336ffe1f48386d32d0f596fa2b70eab0f9613d393a6466ca9290d +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/p.js,1658329709331,6353e7d96207117d79b2e77149fcebccc10a4d65aac1b5574b1b898cad487909 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/q.js,1658329709292,60bb4bf2d1de64ff78b757526101250933f87de130a837271774cb57197cc562 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/r.js,1658329709295,ded62ffc2bf67f7b6c409ac0ad5e6158dcd78ea6770c33c776bd862e8fb9392e +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/s.js,1658329709298,a7bddf931637f6263481cd9ead256ba8df0c06e747946f1c8386f35e6ed54c94 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/scr.js,1658329709313,d2afd3cb25db75f3ef3fb2897dfece9f343657f73a65473ecb8715a57667d1fd +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/t.js,1658329709318,f74c6ab4deb7bf9959e07fbd00b65b52bcdb2341e7e26f2062fae29f776b75f8 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/u.js,1658329709308,6ab8c02c6f009aa3d35ecc0bd0091ca347c540e8de4e1be4a359f1290bd194f5 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/v.js,1658329709310,be6b6502c6ca48fafbb5213c45e6520c2cd371b5f4193f91e858e6525d85dd84 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/w.js,1658329709302,db0992cade7d6b2b0e093f3d231715c7e8e43c2c1eef37b2588642c0dff86ab7 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/x.js,1658329709300,c45122ca996dbae1d38c47c5df7063db0991c1d741591f78e377455b94bcba30 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/y.js,1658329709320,e5c2478f8511e79d90a68b3fe7acf583639c9b2630e1d7eec482915cdb310b32 +assets/packages/flutter_tex/js/mathjax/jax/input/MathML/entities/z.js,1658329709329,82688d992938e99f6194b595e2f30e21dac253c6617a18e8a889aa8dd01bbab1 +assets/packages/flutter_tex/js/mathjax/jax/input/TeX/config.js,1658329709287,cff12d1efb6c2fb6898e8d9d658df2a0971f57b11953a7387537bf116dee1c58 +assets/packages/flutter_tex/js/mathjax/jax/input/TeX/jax.js,1658329709288,e3c2fe4c1aa543aca03b93e278f1f5385448574442982167bbc8a72c6ce1a77b +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/config.js,1658329710558,d3056f91ec06739e56b64fceaa9ee1bbd33242755144e6a72700b564d7da81c9 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/jax.js,1658329710560,f7aafd461e74f97cbd40ff4aa6d7f6d2e764aad8650f6a067b6299481201fac5 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/annotation-xml.js,1658329710564,953d03129d27db4d4c6f4fab93bd4bc55954660d844859b97c71938ac2e599c8 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/maction.js,1658329710575,455148edb48751f1dc72aa00b08db88ea9462ce6819689a051a6b5846e6a01c8 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/menclose.js,1658329710572,7275397e803e013892e0a49bf4eaa7aef17eb99cff1e15d57a03f9caa01577c4 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mglyph.js,1658329710562,d14c67dccdc72b1be8036d1d9bf618908f89fcae42bc6db9c4c348a486ef79f8 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mmultiscripts.js,1658329710567,4d2b55f2025db41644b86683ddc2785500020e9005c541ed8d93dabe831ae70b +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/ms.js,1658329710574,f373bf5859d67470b25d7b943097e678fac2530282120d01b8fc782921802aec +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/mtable.js,1658329710570,989ca2a584eeb7ca9fff287543334d7448d8c9956ad1490f1123183ea5867cbb +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/autoload/multiline.js,1658329710571,11f5d9b380eb39d5e27d27ae0063fda44983aff76825bf82b705d23de29d9442 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/fontdata-extra.js,1658329710525,0b2c429deb70e3daacb8466cd04a678e9c42956cfaab8783498c573a2f173fad +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/fontdata.js,1658329710505,3ed344b4da421c9a8d13b1eb164a2f1adea043c0a264e8b947f411e5ca49c7b8 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Alphabets/Regular/Main.js,1658329710555,74a1213aa9489f08a6486540bfe060c18fb4417509f81865e0cb320b92154ad4 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Arrows/Regular/Main.js,1658329710551,b2fba1e01448f64c88f27dda9aebaddbc88386ff844f4b5a0a3a1564e46819cf +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/DoubleStruck/Regular/Main.js,1658329709340,ef5cf773dd0747f81f5ebc7a175e750cf54ef1a4eb02c21afdcb4011ed1a59f6 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Fraktur/Regular/Main.js,1658329710498,41eb713d78093cb97cc4638c9cceb304687c8efae05cfcb2852a83438aeea570 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Latin/Regular/Main.js,1658329710493,3d14c5d4b08adcaee82724c4e0066b6a0ae920c0c99be00b21a3e14ed637a453 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Main/Regular/Main.js,1658329710523,c10179ed13473192820cabbdf61d5ced7231e3df78eb8bfeb1d0472994957276 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Marks/Regular/Main.js,1658329710508,5b82948a962d48c37fae1437bfc676628a7661dc17b63fd8c4c3696db721f3d1 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Misc/Regular/Main.js,1658329710482,edbec85802dd36aec7df91463cc76be4240ae04e824b032029bf6a714de0fed0 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Monospace/Regular/Main.js,1658329710547,dbf77b4dcfacd040c7bde8729868532354dc1425fbb0df849cc4802a050c3b44 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/NonUnicode/Regular/Main.js,1658329710533,143cc4eada873c8a8f77af74012a09a63e238cf1ef80d26c8ffa7c17d4a92979 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Normal/Regular/Main.js,1658329709346,a1d4df59a9641d7ef244305a1f7dc4f86705c3dfb361006ca5bf440cbcc8e3e1 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Operators/Regular/Main.js,1658329709337,68550efef794ec01f43a209d7a410018fb28f5c5cc8f5aa1d9e8f13b9c59a9c3 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/SansSerif/Regular/Main.js,1658329710517,5b948a0630eb2d99b7d26fbc3b5116def15b2fd9e2a7086c6984b935a6d14a96 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Script/Regular/Main.js,1658329710538,edac54d367507055e1a719bc2e98575787dd9f76814476d689762813ac320e23 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Shapes/Regular/Main.js,1658329710540,e59203ae6959b5908fd76acd8effd434c3d82640744b33a8b5b72df3a1eec302 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size1/Regular/Main.js,1658329710544,f6262a7fe259859cfca18231723e18d359b93ea28c66d8fc4a28e44b18d90359 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size2/Regular/Main.js,1658329710557,e53eb818d145d58d2dc936c2f51881e15ecc8dd8d9ca80f663fc7eea19195735 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size3/Regular/Main.js,1658329710511,120ef158af1c792f187636dd6533011763f4196335ebb6d90b39b221aa7401ba +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size4/Regular/Main.js,1658329710487,f00665386fa767ae1adbf4a7c8dae343808bff25497832bf2b49f07067a5f6a4 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size5/Regular/Main.js,1658329710461,df74c452b6eb2ed4d3363fbbbb07080d10346980411d6bbeb90717e578500767 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Size6/Regular/Main.js,1658329709342,7442b3bbf91fca7caacf7f8bc2d69c799b0a2b7561f09cc3aacd1656dd3b7dd3 +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Symbols/Regular/Main.js,1658329710491,1834be6dca6825242c48e3581e703a2a5e1e26d2aae46db64d3bf63a75b5a4ba +assets/packages/flutter_tex/js/mathjax/jax/output/SVG/fonts/Gyre-Pagella/Variants/Regular/Main.js,1658329710502,6f265cae4bb60549bc7731519cfde295e8af96963bed348f248602a1ec4059d3 +assets/packages/math_keyboard/fonts/CustomKeyIcons.ttf,1658329689474,ef29debbba4ecf636b4f1bdb50758f2e36571e430c90fcda5c51404988f2060b +canvaskit/canvaskit.js,1663656430886,1c5e4be41a8a2901d8c9ae4edb5c2bd26c5c4d0564d732a3ce2bef7c6c27bcb0 +canvaskit/canvaskit.wasm,1663656430972,5ead4a7a5f1445e19dbf4515ce48c88ad7070b05c4c318e8a73f83917862aa16 +canvaskit/profiling/canvaskit.js,1663656430979,15d13a02cb0d513cda2f2a2b63df45ad9ebb843723e1380386b016360ffc9ba0 +canvaskit/profiling/canvaskit.wasm,1663656431010,92eb89423488999d48294283d3905d1040b96088d7e3c243bf109dbd1bb29ee0 +icons/Icon-192.png,1658757874675,eaf2464bfb1d192fdd192a616f7b858dee456d573c6ec619648a1dcf2bdddfa6 +icons/Icon-512.png,1658757874675,9cf4cd298ae95acc1f25e97d88aa3f6bbfdf40867ea0f8a854c4393f49d56e64 +icons/Icon-maskable-192.png,1658757874676,196ce9142a3442ab37ae90cd46c3389e4660400c859b81cbb0538a51b39752eb +icons/Icon-maskable-512.png,1658757874676,6833b7c449e0dd24d5e164a53cc4557e643893e675b476b05efcbb9a6aa05bf0 +index.html,1664489314715,6e79e7442a9b9020dd9affec3ff236bb571993e94446a7e6cc7f86fbb07ed3f0 +version.json,1664489313649,6702ca18b8ef4a4638c2e42c89c1cab864d3e5626b1cb7060605657378ac1c1d +flutter_service_worker.js,1664489316354,f2b4a7f26529b13a249726377bfe35cb5a3ef1947a1c1be4049eaa1fd024cabb +assets/AssetManifest.json,1664489314350,af8c331cc9bd0863bf42b992cfdfbc42d8809a45c740986d70725762c1d6cdff +assets/FontManifest.json,1664489314350,47e0e80292af2fda358fee51ede64046cd0fef40a30fff6745f5e45a30f11392 +assets/shaders/ink_sparkle.frag,1664489314629,0ec582a8f6e710d411767781fea5389bdcd37f721e8451bc01611e7b2ed6e1e9 +assets/NOTICES,1664489314351,089e47d2e019059c6462f5a6d5f242428d5ace34a8cb9b7781f375c8707d96a6 +main.dart.js,1664489312306,9ca6f80f7fb38ff153a12c97d4648780e93648581b10ddcb1034c5a01503aad1 diff --git a/packages/client/lib/SearchResultItem.dart b/packages/client/lib/SearchResultItem.dart index 02f3364a..dcd81ede 100644 --- a/packages/client/lib/SearchResultItem.dart +++ b/packages/client/lib/SearchResultItem.dart @@ -2,6 +2,9 @@ import 'package:flutter/material.dart'; import 'package:client/apiInterface.dart'; import 'package:client/equationOverview.dart'; +import 'package:flutter_tex/flutter_tex.dart'; +import 'dart:convert'; +import 'package:math_keyboard/math_keyboard.dart'; /* NOTE @@ -18,8 +21,8 @@ class SearchResultItem extends StatefulWidget { required this.conf_score, required this.problemID}) : super(key: key); - final String equation, conf_score, problemID; - + final String equation, conf_score; + final int problemID; @override State createState() => _SearchResultItemState(); } @@ -30,13 +33,12 @@ class _SearchResultItemState extends State { bool saved = false; bool removed = false; - checkIsSaved(String pid) async { - //List savedResults = await apiObj.getSavedResults(); - List savedResults = apiObj.getLocalUserSaved(); + checkIsSaved(int pid) async { + List savedResults = await apiObj.getSavedResults(); - if (savedResults.isNotEmpty) { + if (savedResults != null && savedResults.isNotEmpty) { for (int i = 0; i < savedResults.length; i++) { - if (savedResults[i]['equation']['id'] == pid) { + if (savedResults[i]['id'] == pid) { return true; } } @@ -51,11 +53,17 @@ class _SearchResultItemState extends State { } @override - Widget build(BuildContext context) { + void initState() async { + super.initState(); + isLoggedIn = checkIsLoggedIn(); if (isLoggedIn) { - isColored = checkIsSaved(widget.problemID); + isColored = await checkIsSaved(widget.problemID); } + } + + @override + Widget build(BuildContext context) { return Card( margin: const EdgeInsets.fromLTRB(50.0, 10.0, 50.0, 0), child: Padding( @@ -69,7 +77,6 @@ class _SearchResultItemState extends State { wordSpacing: 4.5, fontSize: 24.0, ), - //textAlign: TextAlign.center, ), subtitle: Text( 'Confidence Rating: ${widget.conf_score}', @@ -84,7 +91,6 @@ class _SearchResultItemState extends State { icon: (isColored) ? Icon(Icons.star, color: Colors.amberAccent) : Icon(Icons.star_border_outlined), - //color: (isColored) ? Colors.amberAccent : Colors.white, ) : null, trailing: Icon(Icons.arrow_forward_ios), @@ -94,13 +100,6 @@ class _SearchResultItemState extends State { } void saveToFavourites() { - /* - @TODO - 1. Create an API Object - 2. Use API Object to add equation to saved equations - 3. Change icon to be shaded in - */ - setState(() async { isColored = !isColored; @@ -127,8 +126,14 @@ class _SearchResultItemState extends State { context, MaterialPageRoute( builder: (context) => EquationOverview( - equation: widget.equation, - //conf_score: widget.conf_score, - problemID: widget.problemID))); + equation: widget.equation, problemID: widget.problemID))); } } + +/* +For Rendering Properly +TeXView( + child: TeXViewDocument(widget.equation), + renderingEngine: TeXViewRenderingEngine.mathjax(), + ), +*/ diff --git a/packages/client/lib/UserData.dart b/packages/client/lib/UserData.dart index 784d4bc2..f56ec252 100644 --- a/packages/client/lib/UserData.dart +++ b/packages/client/lib/UserData.dart @@ -18,7 +18,7 @@ class UserData { UserData._internal(); - String _userID = 'test@email.com'; + String _userID = 'default'; String _apiKey = 'default'; bool _isLoggedIn = false; bool _isAdmin = false; diff --git a/packages/client/lib/admin_page.dart b/packages/client/lib/admin_page.dart index 90761ef8..d79d9a41 100644 --- a/packages/client/lib/admin_page.dart +++ b/packages/client/lib/admin_page.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:client/apiInterface.dart'; import 'package:client/titlebar.dart'; import 'package:client/NavigationDrawer.dart'; +import 'package:client/load_icon.dart'; /* NOTE @@ -24,6 +25,25 @@ class AdminPage extends StatefulWidget { class _AdminPageState extends State { bool autoCaching = false; + bool isLoading = false; + + void checkServerSettings() async { + setState(() { + isLoading = true; + }); + dynamic temp = await apiObj.getServerSettings(); + setState(() { + isLoading = false; + autoCaching = temp['autocaching']; + }); + } + + @override + void initState() { + // TODO: implement initState + super.initState(); + checkServerSettings(); + } @override Widget build(BuildContext context) { @@ -35,6 +55,10 @@ class _AdminPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ + Visibility( + visible: isLoading, + child: LoadIcon(), + ), SizedBox( width: 800, child: Card( @@ -54,6 +78,47 @@ class _AdminPageState extends State { setState(() => autoCaching = val); }, ), + ElevatedButton( + style: ButtonStyle( + elevation: + MaterialStateProperty.resolveWith( + ((states) => 0)), + backgroundColor: + MaterialStateProperty.resolveWith(getColor), + ), + child: Text('Confirm'), + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Making Changes?'), + content: SingleChildScrollView( + child: ListBody( + children: [ + Text( + 'We need your password to approve this action'), + TextFormField( + obscureText: true, + ), + ], + ), + ), + actions: [ + TextButton( + onPressed: () => + Navigator.pop(context, 'Cancel'), + child: const Text('Cancel'), + ), + TextButton( + onPressed: () => + Navigator.pop(context, 'OK'), + child: const Text('OK'), + ), + ], + ), + ); + }, + ), ], ), ), @@ -85,7 +150,7 @@ class _AdminPageState extends State { backgroundColor: MaterialStateProperty.resolveWith(getColor), ), - child: Text('Authenticate'), + child: Text('Confirm'), onPressed: () { showDialog( context: context, @@ -149,7 +214,7 @@ class _AdminPageState extends State { backgroundColor: MaterialStateProperty.resolveWith(getColor), ), - child: Text('Authenticate'), + child: Text('Confirm'), onPressed: () { showDialog( context: context, @@ -194,6 +259,22 @@ class _AdminPageState extends State { ); } + void setAutoCaching(String pw) async { + dynamic temp = await apiObj.setServerSettings(autoCaching, pw); + + checkServerSettings(); + + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: (temp['success']) + ? Text('Change Recorded') + : Text('Woops, Something went wrong...'), + width: 400, + behavior: SnackBarBehavior.floating, + duration: const Duration(milliseconds: 1500), + padding: EdgeInsets.all(10), + )); + } + Color getColor(Set states) { const Set interactiveStates = { MaterialState.pressed, diff --git a/packages/client/lib/apiInterface.dart b/packages/client/lib/apiInterface.dart index 7588a0b9..83a8ba23 100644 --- a/packages/client/lib/apiInterface.dart +++ b/packages/client/lib/apiInterface.dart @@ -9,6 +9,10 @@ Note: This class will be used to define all methods used to make API calls. An object of this class should be instatiated in whichever file wishes to make an API call. This is done to adhere to DRY coding standards + +Soon To Be Depracated Methods: +------------------------------ +Search ################################################################################ */ @@ -37,8 +41,175 @@ class API_Interface { String query = ''; //Methods + Future getAPIStatus() async { + String temp = ''; + + query = 'query{APIStatus}'; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + temp = data['data']['APIStatus']; + + return temp; + } + + Future getServerSettings() async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + query = + 'query{GetServerSettings(useremail: "$uid", apikey: "$apke"){autocaching}}'; + + dynamic temp; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + temp = data['data']['GetServerSettings']; + + return temp; + } + + Future> getAllTags() async { + String uid = + (userData.getUserID() == '') ? userData.getUserID() : 'default'; + String apke = userData.getAPIKey(); + + query = 'query{GetAllTags{id, name, description}}'; + + List temp = []; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + List tags = data['data']['GetAllTags']; + + if (tags != null && tags.isNotEmpty) { + for (int i = 0; i < tags.length; i++) { + temp.add(tags[i]); + } + } + + return temp; + } + + Future getProblem(int pid) async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + + query = + 'query{GetProblem(useremail: "$uid", apikey: "$apke", problemid: $pid){success, msg, equation{id, latex, mathml, tags, memolinks, favorite, issearch}}}'; + + dynamic temp; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + temp = data['data']['GetProblem']['equation']; + + return temp; + } + + Future addEquation(String equation) async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + + query = + 'query{AddEquation(useremail: "$uid", apikey: "$apke", equation: "$equation"){success, msg, equation{id, latex, mathml, tags, memolinks, favorite, issearch}}}'; + + bool temp; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + temp = data['data']['AddEquation']['success']; + + return temp; + } + + Future setServerSettings(bool autoCache, String pw) async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + + query = + 'query{SetServerSettings(useremail: "$uid", apikey: "$apke", password: "$pw", autocaching: $autoCache){success, msg}}'; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + bool temp = data['data']['SetServerSettings']['success']; + + return temp; + } + + Future setTheme(bool darkMode) async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + + query = + 'query{SetTheme(useremail: "$uid", apikey: "$apke", darktheme: $darkMode){success, msg}}'; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + bool temp = data['data']['SetTheme']['success']; + + return temp; + } + Future> getAllEquations() async { - query = 'query { GetAllEquations{id, latex} }'; + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + query = + 'query { GetAllEquations(useremail: "$uid",apikey: "$apke"){id, latex, mathml, tags, memolinks, favorite, issearch}}'; List temp = []; @@ -144,21 +315,60 @@ class API_Interface { List equations = data['data']['Search']['equations']; - for (int i = 0; i < numberofresults; i++) { - temp.add(equations[i]); + if (equations != null && equations.isNotEmpty) { + for (int i = 0; i < numberofresults; i++) { + temp.add(equations[i]); + } } //Return Statement return temp; } + Future> getSimilaritySearch( + String input, + List tags, + ) async { + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + + query = 'query Search{' + + 'SimilaritySearch(useremail: "$uid", apikey: "$apke", input: "$input", tags: $tags){' + + 'success, msg, numberofresults, equations{equation{id, latex, tags{id, description, name}, mathml, memolinks, favorite, issearch}, similarity}}' + + '}'; + + List temp = []; + + Response response = await post( + url, + headers: headerElements, + body: jsonEncode({ + 'query': query, + }), + ); + + Map data = jsonDecode(response.body); + + int numberofresults = data['data']['Search']['numberofresults']; + + List equations = data['data']['SimilaritySearch']['equations']; + + if (equations != null && equations.isNotEmpty) { + for (int i = 0; i < numberofresults; i++) { + temp.add(equations[i]); + } + } + + return temp; + } + Future> getSearchHistory() async { //Variables String uid = userData.getUserID(); String apke = userData.getAPIKey(); query = 'query gethistory{' + 'GetUserHistory(useremail: "$uid", apikey: "$apke"){' + - 'id,latex}}'; + 'id, latex, mathml, tags{id, description, name}, memolinks, favorite, issearch}}'; List temp = []; @@ -175,20 +385,22 @@ class API_Interface { List equations = data['data']['GetUserHistory']; - for (int i = 0; i < equations.length; i++) { - temp.add(equations[i]); + if (equations != null && equations.isNotEmpty) { + for (int i = 0; i < equations.length; i++) { + temp.add(equations[i]); + } } //Return Statement return temp; } - Future addSearchHistory(String pid) async { + Future addSearchHistory(int pid) async { //Variables String uid = userData.getUserID(); String apke = userData.getAPIKey(); query = 'mutation addhistory{' + - 'AddUserSearchClick(problemid: "$pid", useremail: "$uid", apikey: "$apke")}'; + 'AddUserSearchClick(problemid: $pid, useremail: "$uid", apikey: "$apke"){success, msg}}'; bool temp = false; @@ -203,7 +415,7 @@ class API_Interface { dynamic data = jsonDecode(response.body); - temp = data['data']['AddUserSearchClick']; + temp = data['data']['AddUserSearchClick']['success']; //Return Statement return temp; @@ -212,7 +424,9 @@ class API_Interface { Future> getSavedResults() async { //Variables String uid = userData.getUserID(); - query = 'query saved{GetFavoriteProblems(useremail: "$uid"){id,latex}}'; + String apke = userData.getAPIKey(); + query = + 'query saved{GetFavoriteProblems(useremail: "$uid", apikey: "$apke"){id, latex, mathml, tags{id, description, name}, memolinks, favorite, issearch}}'; List temp = []; @@ -229,20 +443,24 @@ class API_Interface { List equations = data['data']['GetFavoriteProblems']; - for (int i = 0; i < equations.length; i++) { - temp.add(equations[i]); + if (equations != null && equations.isNotEmpty) { + for (int i = 0; i < equations.length; i++) { + temp.add(equations[i]); + } } //Return Statement return temp; } - Future removeSavedResult(String uid, String pid) async { + Future removeSavedResult(int pid) async { //Variables - query = 'query removesaved{' + - 'RemoveSavedResult(input: "$uid", "$pid"){' + - 'successful' + - '}'; + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); + query = 'mutation removesaved{' + + 'RemoveFavorite(problemid: $pid, useremail: "$uid", apikey: "$apke"){' + + 'success, msg' + + '}}'; bool temp = false; @@ -257,18 +475,18 @@ class API_Interface { dynamic data = jsonDecode(response.body); - temp = data['data']['AddFavorite']; + temp = data['data']['RemoveFavorite']['success']; //Return Statement return temp; } - Future addSavedResult(String pid) async { + Future addSavedResult(int pid) async { //Variables String uid = userData.getUserID(); String apke = userData.getAPIKey(); query = - 'mutation addsaved{AddFavorite(problemid: "$pid", useremail: "$uid", apikey: "$apke")}'; + 'mutation addsaved{AddFavorite(problemid: $pid, useremail: "$uid", apikey: "$apke"){success, msg}}'; bool temp = false; @@ -283,18 +501,18 @@ class API_Interface { dynamic data = jsonDecode(response.body); - temp = data['data']['AddFavorite']; + temp = data['data']['AddFavorite']['success']; //Return Statement return temp; } - Future addComment(String comment, String probid) async { + Future addComment(String comment, int probid) async { //Variables String uid = userData.getUserID(); String apke = userData.getAPIKey(); query = - 'mutation addcomment{CreateComment(problemid: "$probid", useremail: "$uid", apikey: "$apke", comment: "$comment"){success, msg, comment{problemid, datetime, useremail, comment}}}'; + 'mutation addcomment{CreateComment(problemid: $probid, useremail: "$uid", apikey: "$apke", comment: "$comment"){success, msg, comment{problemid, datetime{day,month,year,hour}, useremail, comment}}}'; dynamic temp = false; @@ -315,10 +533,12 @@ class API_Interface { return temp; } - Future> getComments(String probid) async { + Future> getComments(int probid) async { //Variables + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); query = - 'query getcomments{GetComments(problemid: "$probid"){comment, datetime{day,month,year,hour}}}'; + 'query getcomments{GetComments(useremail: "$uid",apikey: "$apke", problemid: $probid){comment, useremail, datetime{day,month,year,hour}}}'; List temp = []; @@ -335,8 +555,10 @@ class API_Interface { List comments = data['data']['GetComments']; - for (int i = 0; i < comments.length; i++) { - temp.add(comments[i]); + if (comments != null && comments.isNotEmpty) { + for (int i = 0; i < comments.length; i++) { + temp.add(comments[i]); + } } //Return Statement @@ -345,8 +567,10 @@ class API_Interface { Future> getAllComments() async { //Variables + String uid = userData.getUserID(); + String apke = userData.getAPIKey(); query = - 'query getcomments{GetComments(){problemid, datetime, useremail, comment}}'; + 'query getcomments{GetAllComments(useremail: "$uid", apikey: "$apke"){problemid, datetime{day,month,year,hour}, useremail, comment}}'; List temp = []; @@ -363,8 +587,10 @@ class API_Interface { List comments = data['data']['GetComments']; - for (int i = 0; i < comments.length; i++) { - temp.add(comments[i]); + if (comments != null && comments.isNotEmpty) { + for (int i = 0; i < comments.length; i++) { + temp.add(comments[i]); + } } //Return Statement @@ -373,8 +599,9 @@ class API_Interface { Future userSignUp(String uid, String pass) async { //Variables + String apke = userData.getAPIKey(); query = - 'query userSignUp{UserSignUp(useremail: "$uid", password: "$pass"){success, msg, user{useremail, username, apikey, isadmin}}}'; + 'mutation userSignUp{UserSignUp(apikey: "$apke", useremail: "$uid", password: "$pass"){success, msg, user{useremail, username, apikey, isadmin}}}'; dynamic temp = ''; @@ -395,10 +622,10 @@ class API_Interface { userData.setUserID(temp['user']['useremail']); userData.setAPIKey(temp['user']['apikey']); userData.setAdmin(temp['user']['isadmin']); - List uH = await this.getSearchHistory(); + /* List uH = await this.getSearchHistory(); List sR = await this.getSavedResults(); userData.setUserHistory(uH); - userData.setSaved(sR); + userData.setSaved(sR); */ userData.setLoggedIn(true); } @@ -408,8 +635,9 @@ class API_Interface { Future authenticateLogin(String uid, String pass) async { //Variables + String apke = userData.getAPIKey(); query = - 'query login{AuthenticateLogin(useremail: "$uid", passwordsalt: "$pass"){success, msg, user{useremail, username, apikey, isadmin}}}'; + 'query login{AuthenticateLogin(apikey: "$apke", useremail: "$uid", passwordsalt: "$pass"){success, msg, user{useremail, username, apikey, isadmin, darktheme}}}'; dynamic temp = ''; @@ -430,10 +658,10 @@ class API_Interface { userData.setUserID(temp['user']['useremail']); userData.setAPIKey(temp['user']['apikey']); userData.setAdmin(temp['user']['isadmin']); - List uH = await this.getSearchHistory(); + /* List uH = await this.getSearchHistory(); List sR = await this.getSavedResults(); userData.setUserHistory(uH); - userData.setSaved(sR); + userData.setSaved(sR); */ userData.setLoggedIn(true); } diff --git a/packages/client/lib/equationOverview.dart b/packages/client/lib/equationOverview.dart index f8c56f05..09be4217 100644 --- a/packages/client/lib/equationOverview.dart +++ b/packages/client/lib/equationOverview.dart @@ -5,6 +5,7 @@ import 'package:client/titlebar.dart'; import 'package:client/NavigationDrawer.dart'; import 'package:client/noResultsText.dart'; import 'package:client/commentItem.dart'; +import 'package:client/load_icon.dart'; /* NOTE @@ -21,7 +22,8 @@ class EquationOverview extends StatefulWidget { {Key? key, required this.equation, required this.problemID}) : super(key: key); - final String equation, problemID; + final String equation; + final int problemID; @override State createState() => _EquationOverviewState(); @@ -32,38 +34,77 @@ class _EquationOverviewState extends State { bool saved = false; bool removed = false; bool isComments = false; + bool isLoading = false; + bool isLoggedIn = false; List comments = []; - checkIsSaved(String pid) async { - //List savedResults = await apiObj.getSavedResults(); - List savedResults = apiObj.getLocalUserSaved(); + checkIsSaved(int pid) async { + if (isLoggedIn) { + setState(() { + isLoading = true; + }); - if (savedResults.isNotEmpty) { - for (int i = 0; i < savedResults.length; i++) { - if (savedResults[i]['equation']['id'] == pid) { - return true; + List savedResults = await apiObj.getSavedResults(); + + setState(() { + isLoading = false; + }); + + if (savedResults != null && savedResults.isNotEmpty) { + for (int i = 0; i < savedResults.length; i++) { + if (savedResults[i]['id'] == pid) { + return true; + } } + return false; + } else { + return false; } - return false; } else { return false; } } - checkIsComments(String pid) async { + checkIsComments(int pid) async { + setState(() { + isLoading = true; + }); + comments = await apiObj.getComments(pid); - if (comments.isNotEmpty) { + setState(() { + isLoading = false; + }); + + if (comments != null && comments.isNotEmpty) { return true; } else { return false; } } + @override + void initState() async { + // TODO: implement initState + super.initState(); + + isLoggedIn = apiObj.getIsLoggedIn(); + isColored = await checkIsSaved(widget.problemID); + isComments = await checkIsComments(widget.problemID); + } + + final TextEditingController commentController = TextEditingController(); + @override + void dispose() { + // Clean up the controller when the widget is disposed. + commentController.dispose(); + super.dispose(); + } + + String newComment = ''; + @override Widget build(BuildContext context) { - isColored = checkIsSaved(widget.problemID); - isComments = checkIsComments(widget.problemID); return Scaffold( backgroundColor: Colors.grey[200], appBar: TitleBar(), @@ -83,25 +124,63 @@ class _EquationOverviewState extends State { wordSpacing: 4.5, fontSize: 24.0, ), - //textAlign: TextAlign.center, ), - /* subtitle: Text( - 'Confidence Rating: ${widget.conf_score}', + subtitle: Text( + 'Problem ID: ${widget.problemID}', style: TextStyle( letterSpacing: 1.0, wordSpacing: 2.5, ), - ), */ - leading: IconButton( - onPressed: saveToFavourites, - icon: (isColored) - ? Icon(Icons.star, color: Colors.amberAccent) - : Icon(Icons.star_border_outlined), - //color: (isColored) ? Colors.amberAccent : Colors.white, ), + leading: (isLoggedIn) + ? IconButton( + onPressed: saveToFavourites, + icon: (isColored) + ? Icon(Icons.star, color: Colors.amberAccent) + : Icon(Icons.star_border_outlined), + ) + : null, + ), + ), + ), + Visibility( + visible: isLoggedIn, + child: SizedBox( + width: 800, + child: Expanded( + child: TextFormField( + maxLines: 3, + controller: commentController, + onChanged: (value) { + newComment = value; + }, + onFieldSubmitted: (value) { + addComment(); + }, + decoration: InputDecoration( + hintText: "Add a comment...", + suffixIcon: IconButton( + icon: Icon(Icons.add_comment_outlined), + onPressed: addComment, + ), + ), + ), + ), + ), + ), + Visibility( + visible: isLoggedIn, + child: SizedBox( + width: 800, + child: Divider( + height: 2, ), ), ), + Visibility( + visible: isLoading, + child: LoadIcon(), + ), (isComments) ? Expanded( child: ListView.builder( @@ -131,13 +210,57 @@ class _EquationOverviewState extends State { */ setState(() async { - isColored = !isColored; + isLoggedIn = apiObj.getIsLoggedIn(); + if (isLoggedIn) { + isColored = !isColored; + if (isColored) { + saved = await apiObj.addSavedResult(widget.problemID); + } else { + //removed = await apiObj.removeSavedResult(widget.problemID); + } - if (isColored) { - saved = await apiObj.addSavedResult(widget.problemID); - } else { - //removed = await apiObj.removeSavedResult(widget.problemID); + isColored = checkIsSaved(widget.problemID); } }); } + + void addComment() async { + bool isAdded = false; + + if (newComment.isNotEmpty || newComment == '') { + setState(() { + isLoading = true; + }); + + dynamic temp = await apiObj.addComment(newComment, widget.problemID); + + setState(() { + isLoading = false; + }); + + if (temp != null && + temp.isNotEmpty && + temp['success'] != null && + temp['success'].isNotEmpty) { + isAdded = temp['success']; + setState(() async { + isComments = await checkIsComments(widget.problemID); + }); + } else { + isAdded = false; + } + } else { + isAdded = false; + } + + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: (isAdded) + ? Text('Yay! Comment Added Successfully') + : Text('Woops, Something went wrong...'), + width: 400, + behavior: SnackBarBehavior.floating, + duration: const Duration(milliseconds: 1500), + padding: EdgeInsets.all(10), + )); + } } diff --git a/packages/client/lib/history.dart b/packages/client/lib/history.dart index db338832..088bad0b 100644 --- a/packages/client/lib/history.dart +++ b/packages/client/lib/history.dart @@ -6,6 +6,7 @@ import 'package:client/SearchResultItem.dart'; import 'package:client/noResultsText.dart'; import 'package:client/apiInterface.dart'; import 'package:client/history_item.dart'; +import 'package:client/load_icon.dart'; /* NOTE @@ -24,14 +25,19 @@ class History extends StatefulWidget { class _HistoryState extends State { bool isSet = false; + bool isLoading = false; List history = []; void loadItems() async { - //history = await apiObj.getSearchHistory(); - history = apiObj.getLocalUserHistory(); + setState(() { + isLoading = true; + }); + + history = await apiObj.getSearchHistory(); setState(() { - if (history.isNotEmpty) { + isLoading = false; + if (history != null && history.isNotEmpty) { isSet = true; } else { isSet = false; @@ -40,10 +46,17 @@ class _HistoryState extends State { } @override - Widget build(BuildContext context) { + void initState() { + // TODO: implement initState + super.initState(); + if (apiObj.getIsLoggedIn()) { loadItems(); } + } + + @override + Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[200], appBar: const TitleBar(), @@ -65,6 +78,10 @@ class _HistoryState extends State { ), ), ), + Visibility( + visible: isLoading, + child: LoadIcon(), + ), (isSet) ? Expanded( child: ListView.builder( diff --git a/packages/client/lib/history_item.dart b/packages/client/lib/history_item.dart index 0964d4e2..079dde18 100644 --- a/packages/client/lib/history_item.dart +++ b/packages/client/lib/history_item.dart @@ -1,4 +1,5 @@ //Imports +import 'package:client/equationOverview.dart'; import 'package:flutter/material.dart'; import 'package:client/apiInterface.dart'; @@ -15,7 +16,8 @@ class HistoryItem extends StatefulWidget { const HistoryItem( {super.key, required this.equation, required this.problemID}); - final String equation, problemID; + final String equation; + final int problemID; @override State createState() => _HistoryItemState(); @@ -45,13 +47,11 @@ class _HistoryItemState extends State { ); } - /* void goToEquation() { + void goToEquation() { Navigator.push( context, MaterialPageRoute( builder: (context) => EquationOverview( - equation: widget.equation, - conf_score: widget.conf_score, - problemID: widget.problemID))); - } */ + equation: widget.equation, problemID: widget.problemID))); + } } diff --git a/packages/client/lib/home.dart b/packages/client/lib/home.dart index 509ef46d..33d6e5a1 100644 --- a/packages/client/lib/home.dart +++ b/packages/client/lib/home.dart @@ -7,12 +7,13 @@ import 'package:client/titlebar.dart'; import 'package:client/NavigationDrawer.dart'; import 'package:client/noResultsText.dart'; import 'package:client/homeCarousel.dart'; +import 'package:client/load_icon.dart'; +import 'package:flutter_tex/flutter_tex.dart'; import 'package:universal_html/html.dart'; import 'dart:convert'; +import 'package:client/string_checker.dart'; import 'package:screenshot/screenshot.dart'; -// import 'package:flutter_tex/flutter_tex.dart'; - /* NOTE: ###################################################################### @@ -36,14 +37,17 @@ class _HomeState extends State { int numDivisions = 0; List searchResults = []; - List filters = []; + List filters = []; + List tags = []; bool onSearchBarSelected = false; bool isSearchResultsVisible = false; bool isCarouselVisible = true; + bool isNothingToSeeHereVisible = false; bool showFilterOptions = false; bool showFilterSlider = false; bool isFilterFunctionVisible = false; + bool showLoader = false; //Variable Declarations //Math Keyboard @@ -59,172 +63,184 @@ class _HomeState extends State { super.dispose(); } + @override + void initState() async { + super.initState(); + tags = await apiObj.getAllTags(); + } + @override Widget build(BuildContext context) { return Screenshot( - controller: screenshotController, - child: Scaffold( - backgroundColor: Colors.grey[200], - appBar: const TitleBar(), - endDrawer: const NavigationDrawer(), - body: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - /* + controller: screenshotController, + child: Scaffold( + backgroundColor: Colors.grey[200], + appBar: const TitleBar(), + endDrawer: const NavigationDrawer(), + body: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + /* ###################################################################### Search Bar Implemented Here ###################################################################### */ - Padding( - padding: const EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 5.0), - child: SizedBox( - width: 800, - child: ListTile( - shape: RoundedRectangleBorder( - side: BorderSide(color: Colors.grey, width: 1.5), - borderRadius: BorderRadius.circular(5), - ), - title: MathField( - variables: const ['a', 'b', 'c', '=', 'x', 'y', 'z'], - keyboardType: MathKeyboardType.expression, - decoration: InputDecoration( - hintText: 'x + 3 = 5', - border: InputBorder.none, - ), - controller: textController, - onChanged: (value) { - try { - qry = '${TeXParser(value).parse()}'; - } catch (_) { - qry = 'invalid input'; - } - }, - ), - leading: IconButton( - key: Key('TestTap'), - onPressed: onPressed, - icon: Icon(Icons.search), - ), - trailing: IconButton( - onPressed: () { - textController.clear(); - if (searchResults != null && searchResults.length > 0) { - setState(() { - searchResults = []; - showFilterOptions = false; - showFilterSlider = false; - isFilterFunctionVisible = false; - isSearchResultsVisible = false; - isCarouselVisible = true; - searchResultsLength = 1; - numDivisions = 1; - }); - } - }, - icon: Icon(Icons.clear), + Padding( + padding: const EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 5.0), + child: SizedBox( + width: 800, + child: ListTile( + shape: RoundedRectangleBorder( + side: BorderSide(color: Colors.grey, width: 1.5), + borderRadius: BorderRadius.circular(5), + ), + title: MathField( + variables: const ['a', 'b', 'c', '=', 'x', 'y', 'z'], + keyboardType: MathKeyboardType.expression, + decoration: InputDecoration( + hintText: 'x + 3 = 5', + border: InputBorder.none, ), + controller: textController, + onChanged: (value) => qry = value, + onSubmitted: (val) { + qry = StringChecker.correctLatex(val); + print('The pre-corrected latex: $val'); + print('The post-corrected latex: $qry'); + onPressed(); + }, + ), + leading: IconButton( + key: Key('TestTap'), + onPressed: onPressed, + icon: Icon(Icons.search), + ), + trailing: IconButton( + onPressed: () { + textController.clear(); + if (searchResults != null && searchResults.length > 0) { + setState(() { + searchResults = []; + showFilterOptions = false; + showFilterSlider = false; + isFilterFunctionVisible = false; + isSearchResultsVisible = false; + isCarouselVisible = true; + searchResultsLength = 1; + numDivisions = 1; + }); + } + }, + icon: Icon(Icons.clear), ), ), ), - /* + ), + /* ###################################################################### Filter List implemented Here ###################################################################### */ - Visibility(visible: isFilterFunctionVisible, child: Filter()), - SizedBox(height: 5), - Visibility(visible: showFilterOptions, child: filterList()), - Visibility( - visible: showFilterSlider, - child: Slider( - value: (searchResults.isEmpty || searchResults.length == 0) - ? 1 - : searchResultsLength.toDouble(), - min: 1, - max: (searchResults.isEmpty || searchResults.length == 0) - ? 2 - : searchResults.length.toDouble(), - divisions: - (searchResults.isEmpty || searchResults.length == 0) - ? 1 - : numDivisions, - activeColor: Color.fromRGBO(236, 64, 122, 1), - thumbColor: Color.fromRGBO(236, 64, 122, 1), - inactiveColor: Colors.grey[600], - label: searchResultsLength.toString(), - onChanged: (val) { - setState(() { - searchResultsLength = val.toInt(); - }); - }, - )), - SizedBox(height: 5), - Visibility( - visible: isFilterFunctionVisible, - child: Divider( - height: 6, - indent: 50, - endIndent: 50, - )), - /* + Visibility(visible: isFilterFunctionVisible, child: Filter()), + SizedBox(height: 5), + Visibility(visible: showFilterOptions, child: filterList()), + Visibility( + visible: showFilterSlider, + child: Slider( + value: (searchResults.isEmpty || searchResults.length == 0) + ? 1 + : searchResultsLength.toDouble(), + min: 1, + max: (searchResults.isEmpty || searchResults.length == 0) + ? 2 + : searchResults.length.toDouble(), + divisions: + (searchResults.isEmpty || searchResults.length == 0) + ? 1 + : numDivisions, + activeColor: Color.fromRGBO(236, 64, 122, 1), + thumbColor: Color.fromRGBO(236, 64, 122, 1), + inactiveColor: Colors.grey[600], + label: searchResultsLength.toString(), + onChanged: (val) { + setState(() { + searchResultsLength = val.toInt(); + }); + }, + )), + SizedBox(height: 5), + Visibility( + visible: isFilterFunctionVisible, + child: Divider( + height: 6, + indent: 50, + endIndent: 50, + )), + /* ###################################################################### Search Results Implemented Here ###################################################################### */ - (isSearchResultsVisible) - ? Expanded( - child: ListView.builder( - key: const Key("TestListViewBuilder"), - shrinkWrap: true, - controller: ScrollController(), - itemCount: searchResultsLength, - itemBuilder: (BuildContext ctxt, int index) { - return SearchResultItem( - equation: searchResults[index]['equation'] - ['latex'], - /* searchResults[ - index]['latex'], */ - conf_score: - searchResults[index]['similarity'].toString(), - /* '99' ,*/ - problemID: searchResults[index]['id'], - ); - }), - ) - : determineFiller(), - ], - ), - )); + Visibility( + visible: showLoader, + child: LoadIcon(), + ), + (isSearchResultsVisible) + ? Expanded( + child: ListView.builder( + key: const Key("TestListViewBuilder"), + shrinkWrap: true, + controller: ScrollController(), + itemCount: searchResultsLength, + itemBuilder: (BuildContext ctxt, int index) { + return SearchResultItem( + equation: searchResults[index]['equation']['latex'], + conf_score: + searchResults[index]['similarity'].toString(), + problemID: searchResults[index]['id'], + ); + }), + ) + : determineFiller(), + ], + ), + ), + ); } void onPressed() async { - /* - @TODO - 1. Instantiate an API_Interface object - 2. Use API_Interface object to get search results from query - 3. Build an array of search result tiles using query results - 4. Display search result tiles - 5. If user is logged in then the search query should be added to user - history - */ + setState(() { + showLoader = true; + isCarouselVisible = false; + isNothingToSeeHereVisible = false; + searchResults = []; + showFilterOptions = false; + showFilterSlider = false; + isFilterFunctionVisible = false; + isSearchResultsVisible = false; + searchResultsLength = 1; + numDivisions = 1; + }); + searchResults = await apiObj.getSearchResults(qry); - //searchResults = await apiObj.getAllEquations(); + //searchResults = await apiObj.getSimilaritySearch(qry, filters); searchResultsLength = determineSearchResultsListLength(); - if (searchResults.isNotEmpty) { - // print(searchResults[0]['equation']['latex']); + if (searchResults != null && searchResults.isNotEmpty) { setState(() { + showLoader = false; numDivisions = searchResults.length; isSearchResultsVisible = true; isFilterFunctionVisible = true; - isCarouselVisible = false; }); } else { setState(() { numDivisions = 0; + showLoader = false; isSearchResultsVisible = false; isFilterFunctionVisible = false; isCarouselVisible = false; + isNothingToSeeHereVisible = true; }); } } @@ -238,11 +254,16 @@ class _HomeState extends State { Widget determineFiller() { if (isCarouselVisible) { return Center( - //margin: const EdgeInsets.fromLTRB(0, 150, 0, 0), child: const Carousel(), ); + } else if (isNothingToSeeHereVisible) { + return const Center( + child: NothingToSeeHere(), + ); } else { - return const Center(child: NothingToSeeHere()); + return Center( + child: Text("Searching to the ends of the Earth..."), + ); } } @@ -261,7 +282,7 @@ class _HomeState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Visibility( - visible: true, + visible: (tags.isNotEmpty && tags.length > 0), child: SizedBox( width: 150, child: ListTile( @@ -317,193 +338,59 @@ class _HomeState extends State { return Wrap( spacing: 6.5, runSpacing: 5, - children: [ - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Equation', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Equation'), - onSelected: (val) { - onFilterSelect('Equation'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Function', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Function'), - onSelected: (val) { - onFilterSelect('Function'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Statement', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Statement'), - onSelected: (val) { - onFilterSelect('Statement'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Inequality', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Inequality'), - onSelected: (val) { - onFilterSelect('Inequality'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Differentiation', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Differentiation'), - onSelected: (val) { - onFilterSelect('Differentiation'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Integration', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Integration'), - onSelected: (val) { - onFilterSelect('Integration'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Limits', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Limits'), - onSelected: (val) { - onFilterSelect('Limits'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Quadratic Equation', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Quadratic Equation'), - onSelected: (val) { - onFilterSelect('Quadratic Equation'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Trigonometry', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Trigonometry'), - onSelected: (val) { - onFilterSelect('Trigonometry'); - }, - ), - FilterChip( - selectedColor: Color.fromRGBO(236, 64, 122, 1), - backgroundColor: Color.fromARGB(255, 0, 64, 110), - checkmarkColor: Colors.white, - //labelPadding: EdgeInsets.fromLTRB(2, 1, 2, 1), - label: Text( - 'Surds', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - selected: filters.contains('Surds'), - onSelected: (val) { - onFilterSelect('Surds'); - }, - ), - ], + children: buildFilterOptions(), ); } -/* -onFilterSelect() -This method changes the displayed searchResults array based on which filters -have been selected -*/ - void onFilterSelect(String tag) { - if (tag != null) { - setState(() { - if (!filters.contains(tag)) { - filters.add(tag); - //moveToFront(); - } else { - filters.remove(tag); + Widget FilterOption(dynamic tag) { + if (tag != null && tag.isNotEmpty) { + return FilterChip( + selectedColor: Color.fromRGBO(236, 64, 122, 1), + backgroundColor: Color.fromARGB(255, 0, 64, 110), + checkmarkColor: Colors.white, + tooltip: tag['description'].toString(), + label: Text( + tag['name'], + style: TextStyle(color: Colors.white, fontSize: 16), + ), + selected: filters.contains(tag['id']), + onSelected: (val) { + onFilterSelect(tag['id']); + }, + ); + } else { + return SizedBox(width: 1, height: 1); + } + } - if (filters.isEmpty) { - //quicksort(0, searchResults.length - 1); - } else { - //quicksort(0, searchResults.length - 1); - //moveToFront(); - } - } - }); + List buildFilterOptions() { + if (tags != null && tags.isNotEmpty) { + List temp = []; + + for (int i = 0; i < tags.length; i++) { + temp.add(FilterOption(tags[i])); + } + return temp; + } else { + return []; } } /* -moveToFront() -This method organises the displayed searchResults array so that filtered items -appear at the beginning. +onFilterSelect() +This method changes the displayed searchResults array based on which filters +have been selected */ - void moveToFront() { - if (filters.isNotEmpty && searchResults.isNotEmpty) { - for (int i = searchResults.length - 1; i >= 0; i--) { - for (int j = 0; j < filters.length; j++) { - if (containsFilterTag(i, filters[j])) { - searchResults.insert(0, searchResults[i]); - searchResults.removeAt(i + 1); - break; - } - } + void onFilterSelect(int tag) { + setState(() { + if (!filters.contains(tag)) { + filters.add(tag); + } else { + filters.remove(tag); } - } + }); + + onPressed(); } /* @@ -539,30 +426,6 @@ displayed at first. return 0; } - /* - Everything below here is relevant to the quicksort algorithm. - ############################################################################## - */ - - void swap(int i, int j) { - var temp = searchResults[i]; - searchResults[i] = searchResults[j]; - searchResults[j] = temp; - } - - int partition(int l, int h) { - int x = searchResults[h]['similarity']; - int i = (l - 1); - for (int j = l; j <= h - 1; j++) { - if (searchResults[j]['similarity'] <= x) { - i++; - swap(i, j); - } - } - swap(i + 1, h); - return (i + 1); - } - Future _createPDF(List searchResults) async { final Image = await screenshotController.capture(); MemoryImage(Image!); @@ -577,32 +440,4 @@ displayed at first. ..setAttribute("download", fileName) ..click(); } - - void quicksort(int l, int h) { - List myList = [h - l + 1]; - int top = -1; - myList[++top] = l; - myList[++top] = h; - while (top >= 0) { - h = myList[top--]; - l = myList[top--]; - int p = partition(l, h); - if (p - 1 > l) { - myList[++top] = l; - myList[++top] = p - 1; - } - if (p + 1 < h) { - myList[++top] = p + 1; - myList[++top] = h; - } - } - - searchResults = searchResults.reversed.toList(); - } - - /* - Quicksort Algorithm provided by: - https://www.tutorialspoint.com/java-program-for-iterative-quick-sort - ############################################################################## - */ } diff --git a/packages/client/lib/load_icon.dart b/packages/client/lib/load_icon.dart new file mode 100644 index 00000000..c1f75201 --- /dev/null +++ b/packages/client/lib/load_icon.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; + +Widget LoadIcon() { + return Center( + child: SpinKitFoldingCube( + color: Color(0xFFEC5666), + size: 50.0, + ), + ); +} diff --git a/packages/client/lib/logIn.dart b/packages/client/lib/logIn.dart index 18362a06..5ee3cefc 100644 --- a/packages/client/lib/logIn.dart +++ b/packages/client/lib/logIn.dart @@ -72,8 +72,17 @@ class _LogInState extends State { ? SizedBox( width: 800, child: Card( - margin: EdgeInsets.fromLTRB(10, 10, 10, 10), - child: Text("You are logged in!"), + child: Container( + padding: EdgeInsets.all(5), + child: Text( + "You are logged in!", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), ), ) : SizedBox( @@ -86,17 +95,45 @@ class _LogInState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text("Log In"), + Text( + "Log In", + style: TextStyle( + fontSize: 18, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), SizedBox(height: 50), Row( children: [ - Text("Email Address:"), - SizedBox(width: 50), Expanded( + flex: 1, + child: Text( + "Email Address:", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), + Expanded( + flex: 3, child: TextField( //controller: emailController, onChanged: emailHandler, decoration: InputDecoration( + floatingLabelBehavior: + FloatingLabelBehavior.auto, + floatingLabelAlignment: + FloatingLabelAlignment.start, + label: (invalidEmail && noAccount) + ? Text( + 'It seems like you do not have an account') + : (!invalidEmail) + ? Text( + 'This is not an email address...') + : null, hintText: "johnDoe@email.com", ), ), @@ -106,13 +143,30 @@ class _LogInState extends State { SizedBox(height: 50), Row( children: [ - Text("Password:"), - SizedBox(width: 50), Expanded( + flex: 1, + child: Text( + "Password:", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), + Expanded( + flex: 3, child: TextFormField( obscureText: !showPassword, onChanged: passwordHandler, decoration: InputDecoration( + floatingLabelBehavior: + FloatingLabelBehavior.auto, + floatingLabelAlignment: + FloatingLabelAlignment.start, + label: (incorrectPassword) + ? Text('Passwords Do Not Match') + : null, suffixIcon: IconButton( onPressed: () { setState(() { diff --git a/packages/client/lib/main.dart b/packages/client/lib/main.dart index a151ebb6..bf05e198 100644 --- a/packages/client/lib/main.dart +++ b/packages/client/lib/main.dart @@ -24,6 +24,7 @@ void main() { runApp(MaterialApp( debugShowCheckedModeBanner: false, + title: 'MathU Similarity Index', home: Home(), routes: { '/home.dart': (context) => Home(), diff --git a/packages/client/lib/noResultsText.dart b/packages/client/lib/noResultsText.dart index 624ac4f8..ff879091 100644 --- a/packages/client/lib/noResultsText.dart +++ b/packages/client/lib/noResultsText.dart @@ -20,16 +20,20 @@ class NothingToSeeHere extends StatelessWidget { image: DecorationImage( alignment: Alignment.bottomCenter, image: AssetImage('assets/images/404.png'), - fit: BoxFit.cover, + fit: BoxFit.scaleDown, ), ), - child: Text( - 'There is nothing to see here...', - style: TextStyle( - fontSize: 18.0, - color: Colors.grey[700], - letterSpacing: 1.1, - wordSpacing: 2.0, + child: SizedBox( + width: 200, + height: 200, + child: Text( + 'There is nothing to see here...', + style: TextStyle( + fontSize: 18.0, + color: Colors.grey[700], + letterSpacing: 1.1, + wordSpacing: 2.0, + ), ), ), ); diff --git a/packages/client/lib/savedResultItem.dart b/packages/client/lib/savedResultItem.dart index fc3909df..7b4372a1 100644 --- a/packages/client/lib/savedResultItem.dart +++ b/packages/client/lib/savedResultItem.dart @@ -16,7 +16,8 @@ class SavedResultItem extends StatefulWidget { {Key? key, required this.equation, required this.problemID}) : super(key: key); - final String equation, problemID; + final String equation; + final int problemID; @override State createState() => _SavedResultItemState(); @@ -57,9 +58,7 @@ class _SavedResultItemState extends State { 1. Make an API_Interface Object 2. Use apiObj to delete item from saved table */ - - String uid = apiObj.getLocalUserID(); - bool successful = await apiObj.removeSavedResult(uid, widget.problemID); + bool successful = await apiObj.removeSavedResult(widget.problemID); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: (successful) @@ -72,13 +71,11 @@ class _SavedResultItemState extends State { )); } - /* void goToEquation() { + void goToEquation() { Navigator.push( context, MaterialPageRoute( builder: (context) => EquationOverview( - equation: widget.equation, - conf_score: widget.conf_score, - problemID: widget.problemID))); - } */ + equation: widget.equation, problemID: widget.problemID))); + } } diff --git a/packages/client/lib/savedResults.dart b/packages/client/lib/savedResults.dart index 486bc2a7..aadd6698 100644 --- a/packages/client/lib/savedResults.dart +++ b/packages/client/lib/savedResults.dart @@ -5,6 +5,7 @@ import 'package:client/NavigationDrawer.dart'; import 'package:client/savedResultItem.dart'; import 'package:client/noResultsText.dart'; import 'package:client/apiInterface.dart'; +import 'package:client/load_icon.dart'; /* NOTE @@ -24,13 +25,20 @@ class SavedResults extends StatefulWidget { class _SavedResultsState extends State { bool isSet = false; + bool isLoading = false; List savedResults = []; void loadItems() async { + setState(() { + isLoading = true; + }); + savedResults = await apiObj.getSavedResults(); setState(() { - if (savedResults.isNotEmpty) { + isLoading = false; + + if (savedResults != null && savedResults.isNotEmpty) { isSet = true; } else { isSet = false; @@ -39,10 +47,17 @@ class _SavedResultsState extends State { } @override - Widget build(BuildContext context) { + void initState() { + // TODO: implement initState + super.initState(); + if (apiObj.getIsLoggedIn()) { loadItems(); } + } + + @override + Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[200], appBar: TitleBar(), @@ -64,6 +79,10 @@ class _SavedResultsState extends State { ), ), ), + Visibility( + visible: isLoading, + child: LoadIcon(), + ), (isSet) ? Expanded( child: ListView.builder( diff --git a/packages/client/lib/sign_up.dart b/packages/client/lib/sign_up.dart index 0e302a24..18490b7b 100644 --- a/packages/client/lib/sign_up.dart +++ b/packages/client/lib/sign_up.dart @@ -64,8 +64,17 @@ class _SignUpPageState extends State { ? SizedBox( width: 800, child: Card( - margin: EdgeInsets.fromLTRB(10, 10, 10, 10), - child: Text("You are Signed Up & logged in!"), + child: Container( + padding: EdgeInsets.all(5), + child: Text( + "You are Signed Up & logged in!", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), ), ) : SizedBox( @@ -78,17 +87,45 @@ class _SignUpPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text("Sign Up"), + Text( + "Sign Up", + style: TextStyle( + fontSize: 18, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), SizedBox(height: 50), Row( children: [ - Text("Email Address:"), + Expanded( + flex: 1, + child: Text( + "Email Address:", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), SizedBox(width: 50), Expanded( + flex: 3, child: TextField( //controller: emailController, onChanged: emailHandler, decoration: InputDecoration( + floatingLabelBehavior: + FloatingLabelBehavior.auto, + floatingLabelAlignment: + FloatingLabelAlignment.start, + label: (validEmail && noAccount) + ? Text('This email address is taken') + : (!validEmail) + ? Text( + 'This is not an email address...') + : null, hintText: "johnDoe@email.com", ), ), @@ -98,13 +135,30 @@ class _SignUpPageState extends State { SizedBox(height: 50), Row( children: [ - Text("Password:"), - SizedBox(width: 50), Expanded( + flex: 1, + child: Text( + "Password:", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), + Expanded( + flex: 3, child: TextFormField( obscureText: !showPassword, onChanged: passwordHandler, decoration: InputDecoration( + floatingLabelBehavior: + FloatingLabelBehavior.auto, + floatingLabelAlignment: + FloatingLabelAlignment.start, + label: (incorrectPassword) + ? Text('Passwords Do Not Match') + : null, suffixIcon: IconButton( onPressed: () { setState(() { @@ -123,13 +177,30 @@ class _SignUpPageState extends State { SizedBox(height: 50), Row( children: [ - Text("Confirm Password:"), - SizedBox(width: 50), Expanded( + flex: 1, + child: Text( + "Confirm Password:", + style: TextStyle( + fontSize: 16, + letterSpacing: 0.15, + wordSpacing: 1.05, + ), + ), + ), + Expanded( + flex: 3, child: TextFormField( obscureText: !showConfirmPassword, onChanged: confirmPasswordHandler, decoration: InputDecoration( + floatingLabelBehavior: + FloatingLabelBehavior.auto, + floatingLabelAlignment: + FloatingLabelAlignment.start, + label: (!correctConfirmPassword) + ? Text('Passwords Do Not Match') + : null, suffixIcon: IconButton( onPressed: () { setState(() { @@ -168,7 +239,7 @@ class _SignUpPageState extends State { getColor), ), ), - SizedBox(width: 50), + SizedBox(width: 10), TextButton( onPressed: goToLogInPage, child: Text( @@ -222,7 +293,7 @@ class _SignUpPageState extends State { setState(() { isLoggedIn = apiObj.getIsLoggedIn(); - String msg = temp['msg']; + String msg = temp['success']; if (msg == "Bad email") { noAccount = true; diff --git a/packages/client/lib/string_checker.dart b/packages/client/lib/string_checker.dart new file mode 100644 index 00000000..40d4ac9c --- /dev/null +++ b/packages/client/lib/string_checker.dart @@ -0,0 +1,17 @@ +class StringChecker { + static String correctLatex(String input) { + String temp = ''; + + if (input != null && input.isNotEmpty && input.length > 0) { + for (int i = 0; i < input.length; i++) { + if (input[i] == '\\') { + temp += '\\'; + } + + temp += input[i]; + } + } + + return temp; + } +}