diff --git a/assets/animations/lottie/ambulance.json b/assets/animations/lottie/ambulance.json
new file mode 100644
index 0000000..b38e58d
--- /dev/null
+++ b/assets/animations/lottie/ambulance.json
@@ -0,0 +1 @@
+{"nm":"F5XND4M_3","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"Layer 12","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,298.786,0],"t":0,"ti":[0,0,0],"to":[0,-0.833,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,293.786,0],"t":10,"ti":[0,-0.833,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,298.786,0],"t":20,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,293.786,0],"t":30,"ti":[0,-0.833,0],"to":[0,0,0]},{"s":[450.232,298.786,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.518,-3.779],[3.781,-0.517],[0.518,3.779],[-3.781,0.517]],"o":[[0.518,3.779],[-3.781,0.517],[-0.518,-3.779],[3.781,-0.517]],"v":[[6.846,-0.937],[0.938,6.842],[-6.846,0.937],[-0.938,-6.842]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Layer 6","sr":1,"st":0,"op":180,"ip":0,"hd":true,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,395.682,0],"t":1,"ti":[0,0,0],"to":[0,0.833,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,400.682,0],"t":11,"ti":[0,0.833,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,395.682,0],"t":21,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,400.682,0],"t":31,"ti":[0,0.833,0],"to":[0,0,0]},{"s":[63.907,395.682,0],"t":41}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.518,-3.779],[3.781,-0.517],[0.518,3.779],[-3.781,0.517]],"o":[[0.518,3.779],[-3.781,0.517],[-0.518,-3.779],[3.781,-0.517]],"v":[[6.846,-0.937],[0.938,6.842],[-6.846,0.937],[-0.938,-6.842]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Layer 2","sr":1,"st":0,"op":180,"ip":0,"hd":true,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,424.922,0],"t":0,"ti":[0,0,0],"to":[0,-0.667,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,420.922,0],"t":10,"ti":[0,-0.667,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,424.922,0],"t":20,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,420.922,0],"t":30,"ti":[0,-0.667,0],"to":[0,0,0]},{"s":[121.127,424.922,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.746,-5.442],[5.445,-0.745],[0.746,5.442],[-5.445,0.745]],"o":[[0.746,5.442],[-5.445,0.745],[-0.746,-5.442],[5.445,-0.745]],"v":[[9.859,-1.349],[1.351,9.853],[-9.859,1.349],[-1.351,-9.853]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":3,"nm":"Null 3","sr":1,"st":0,"op":129,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[131.911,173.859,0],"ix":2},"r":{"a":0,"k":138,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":0,"ix":11}},"ef":[],"ind":4},{"ty":4,"nm":"Layer 11","sr":1,"st":43,"op":129,"ip":43,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":43},{"s":[-100,100,100],"t":48}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[54.892,46.827,0],"t":43,"ti":[1.777,-1.646,0],"to":[-1.777,1.646,0]},{"s":[44.23,56.705,0],"t":48}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5,"parent":4},{"ty":4,"nm":"Layer 10","sr":1,"st":31,"op":41,"ip":31,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":31},{"s":[-134,134,100],"t":41}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":31,"ti":[5.313,-5.439,0],"to":[-5.313,5.439,0]},{"s":[23.889,75.927,0],"t":41}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":36},{"s":[0],"t":41}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6,"parent":4},{"ty":4,"nm":"Layer 9","sr":1,"st":18,"op":28,"ip":18,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":18},{"s":[-134,134,100],"t":28}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":18,"ti":[5.313,-5.439,0],"to":[-5.313,5.439,0]},{"s":[23.889,75.927,0],"t":28}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":23},{"s":[0],"t":28}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":7,"parent":4},{"ty":4,"nm":"Layer 8","sr":1,"st":7,"op":17,"ip":7,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":7},{"s":[-134,134,100],"t":17}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":7,"ti":[5.313,-5.439,0],"to":[-5.313,5.439,0]},{"s":[23.889,75.927,0],"t":17}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":12},{"s":[0],"t":17}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":8,"parent":4},{"ty":4,"nm":"Layer 7","sr":1,"st":0,"op":5,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-100,100,100],"t":0},{"s":[-134,134,100],"t":5}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[44.23,56.705,0],"t":0,"ti":[3.39,-3.204,0],"to":[-3.39,3.204,0]},{"s":[23.889,75.927,0],"t":5}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":0},{"s":[0],"t":5}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":9,"parent":4},{"ty":4,"nm":"Layer 5","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[396.051,136.57,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":4},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":8},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":12},{"o":{"x":0.191,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":16},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":23},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":27},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":31},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":35},{"s":[100,100,100],"t":39}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[396.051,136.57,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-6.092,-10.552],[0,0],[12.184,0],[0,0],[-6.092,10.552],[0,0]],"o":[[0,0],[6.092,10.552],[0,0],[-12.185,0],[0,0],[6.092,-10.552]],"v":[[13.709,-53.595],[66.454,37.767],[52.746,61.509],[-52.746,61.509],[-66.454,37.767],[-13.706,-53.595]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,146.499],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[-13.769,0],[0,0],[-7.045,-11.709],[0,0]],"o":[[0,0],[7.01,-11.85],[0,0],[13.665,0],[0,0],[0,0]],"v":[[-64.065,49.563],[-17.385,-30.444],[16.14,-49.563],[16.14,-49.563],[49.516,-30.693],[64.065,-6.511]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"d":[{"nm":"dash","n":"d","v":{"a":0,"k":6,"ix":1}},{"nm":"gap","n":"g","v":{"a":0,"k":10,"ix":2}},{"nm":"gap2","n":"g","v":{"a":0,"k":10,"ix":4}},{"nm":"gap3","n":"g","v":{"a":0,"k":10,"ix":6}}],"c":{"a":0,"k":[0.6627,0.6863,0.7686],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[386.167,114.696],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.779,7.779],[-7.779,7.779],[-7.779,-7.779],[7.779,-7.779]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.391,184.828],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.361,-23.305],[-10.361,5.407],[-7.127,23.336],[-0.018,23.336],[-0.018,23.348],[7.103,23.34],[10.348,5.39],[10.361,-23.348]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,140.911],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"tr","a":{"a":0,"k":[401.402,140.911],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,140.911],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 4","ix":4,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-6.092,-10.552],[0,0],[12.184,0],[0,0],[-6.092,10.552],[0,0]],"o":[[0,0],[6.092,10.552],[0,0],[-12.185,0],[0,0],[6.092,-10.552]],"v":[[13.709,-53.595],[66.454,37.767],[52.746,61.509],[-52.746,61.509],[-66.454,37.767],[-13.706,-53.595]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,146.499],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":10},{"ty":4,"nm":"Layer 4","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[351.654,335.209,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[351.654,335.209,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-5.899],[5.899,0],[0,5.899],[-5.899,0]],"o":[[0,5.899],[-5.899,0],[0,-5.899],[5.899,0]],"v":[[10.682,0],[0,10.682],[-10.682,0],[0,-10.682]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.652,334.504],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.654,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.654,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":11},{"ty":4,"nm":"Layer 3","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[91.751,335.209,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[91.751,335.209,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-5.899],[5.899,0],[0,5.899],[-5.899,0]],"o":[[0,5.899],[-5.899,0],[0,-5.899],[5.899,0]],"v":[[10.682,0],[0,10.682],[-10.682,0],[0,-10.682]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.749,334.504],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.751,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.751,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":12},{"ty":4,"nm":"Layer 1","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[221.146,268.245,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":0,"ti":[0,0,0],"to":[0,-0.5,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":5,"ti":[0,-0.5,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":10,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":15,"ti":[0,-0.5,0],"to":[0,0,0]},{"o":{"x":0.324,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":20,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":25,"ti":[0,-0.5,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":35,"ti":[0,-0.5,0],"to":[0,0,0]},{"s":[221.146,268.245,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[11.166,0],[4.286,-9.562],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-4.276,-9.562],[-11.156,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,-64.707],[59.545,64.707],[14.358,64.707],[-10.685,48.483],[-35.729,64.707],[-59.545,64.707],[-59.545,11.067],[-23.247,-12.056],[1.777,-64.707]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.433,259.275],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.92,72.136],[-119.713,72.136],[-119.713,-72.136],[119.713,-72.136],[119.713,72.136],[95.007,72.136]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.691,251.847],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[5.305,0],[0,0],[0,-5.305],[0,0],[0,0],[0,0]],"o":[[0,0],[-5.305,0],[0,0],[0,0],[0,0],[0,-5.305]],"v":[[0,-10.37],[0,-10.37],[-9.605,-0.765],[-9.605,10.37],[9.605,10.37],[9.605,-0.765]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[131.871,184.202],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 4","ix":4,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[30.878,-9.505],[9.504,-9.505],[9.504,-30.878],[-9.504,-30.878],[-9.504,-9.505],[-30.878,-9.505],[-30.878,9.504],[-9.504,9.504],[-9.504,30.878],[9.504,30.878],[9.504,9.504],[30.878,9.504]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[280.853,235.296],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 7","ix":5,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-31.952,16.61],[31.952,16.61],[31.952,-16.61],[-14.701,-16.61]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6627,0.6863,0.7686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[111.137,230.612],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 8","ix":6,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-4.691],[0,0],[4.691,0],[0,0],[0,1.98],[1.554,3.425],[0,0]],"o":[[0,0],[0,4.691],[0,0],[0.396,-1.861],[0,-3.999],[0,0],[4.691,0]],"v":[[17.798,0],[17.798,0],[9.305,8.493],[-15.996,8.493],[-15.392,2.732],[-17.798,-8.493],[9.305,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[394.495,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 9","ix":7,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,1.98],[1.554,3.425]],"o":[[-1.554,3.425],[0,1.98],[0,0],[0.396,-1.861],[0,-3.999],[0,0]],"v":[[104.91,-8.493],[102.505,2.732],[103.108,8.493],[-103.109,8.493],[-102.505,2.732],[-104.91,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[221.701,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 10","ix":8,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,4.691],[0,0],[-4.691,0]],"o":[[-1.544,3.425],[0,1.98],[0,0],[-4.691,0],[0,0],[0,-4.691],[0,0]],"v":[[18.352,-8.493],[15.947,2.732],[16.55,8.493],[-9.859,8.493],[-18.352,0],[-18.352,0],[-9.859,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[48.352,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 11","ix":9,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-4.691],[0,0],[4.691,0],[0,0],[0,1.98],[1.554,3.425],[0,0]],"o":[[0,0],[0,4.691],[0,0],[0.396,-1.861],[0,-3.999],[0,0],[4.691,0]],"v":[[17.798,0],[17.798,0],[9.305,8.493],[-15.996,8.493],[-15.392,2.732],[-17.798,-8.493],[9.305,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[394.495,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 12","ix":10,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,1.98],[1.554,3.425]],"o":[[-1.554,3.425],[0,1.98],[0,0],[0.396,-1.861],[0,-3.999],[0,0]],"v":[[104.91,-8.493],[102.505,2.732],[103.108,8.493],[-103.109,8.493],[-102.505,2.732],[-104.91,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[221.701,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 13","ix":11,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,4.691],[0,0],[-4.691,0]],"o":[[-1.544,3.425],[0,1.98],[0,0],[-4.691,0],[0,0],[0,-4.691],[0,0]],"v":[[18.352,-8.493],[15.947,2.732],[16.55,8.493],[-9.859,8.493],[-18.352,0],[-18.352,0],[-9.859,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[48.352,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":1,"hd":false,"mn":"ADBE Vector Group","nm":"Group 14","ix":12,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[5.721,9.918],[-3.465,8.879]],"o":[[0,0],[0,0],[-11.453,0],[-4.89,-8.463],[0,0]],"v":[[42.236,-21.524],[42.236,21.524],[-10.514,21.524],[-37.943,5.687],[-40.081,-21.524]]},"ix":2}},{"ty":"gf","bm":0,"hd":false,"mn":"ADBE Vector Graphic - G-Fill","nm":"Gradient Fill 1","e":{"a":0,"k":[41.298,-0.235],"ix":6},"g":{"p":3,"k":{"a":0,"k":[0,0.792156862745098,0.8117647058823529,0.8666666666666667,0.5,0.8627450980392157,0.8745098039215686,0.9058823529411765,1,0.9333333333333333,0.9411764705882353,0.9450980392156862],"ix":9}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[-43.173,-0.235],"ix":5},"r":1,"o":{"a":0,"k":100,"ix":10}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[359.173,201.235],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 15","ix":13,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[119.713,9.09],[-119.713,9.09],[-119.713,-9.09],[119.713,-9.09]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.689,297.261],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 16","ix":14,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,9.09],[-59.545,9.09],[-59.545,-9.09],[59.545,-9.09]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.432,297.261],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 17","ix":15,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[11.166,0],[4.286,-9.562],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-4.276,-9.562],[-11.156,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,-64.707],[59.545,64.707],[14.358,64.707],[-10.685,48.483],[-35.729,64.707],[-59.545,64.707],[-59.545,11.067],[-23.247,-12.056],[1.777,-64.707]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.433,259.275],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 18","ix":16,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.92,72.136],[-119.713,72.136],[-119.713,-72.136],[119.713,-72.136],[119.713,72.136],[95.007,72.136]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.691,251.847],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":13},{"ty":0,"nm":"Pre-comp 1","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"a","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27,346],[27,380],[458,380],[458,349]]},"ix":1}}],"w":500,"h":500,"refId":"comp_0","ind":14}],"v":"5.12.1","fr":30,"op":61,"ip":0,"assets":[{"nm":"Pre-comp 1","id":"comp_0","layers":[{"ty":4,"nm":"Layer 8","sr":1,"st":22,"op":75,"ip":22,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[-197.04,362.657,0],"t":22,"ti":[-73.167,0,0],"to":[73.167,0,0]},{"s":[241.96,362.657,0],"t":42}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Layer 7","sr":1,"st":20,"op":40,"ip":20,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[241.96,362.657,0],"t":20,"ti":[-72.833,0,0],"to":[72.833,0,0]},{"s":[678.96,362.657,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Layer 6","sr":1,"st":2,"op":22,"ip":2,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[-197.04,362.657,0],"t":2,"ti":[-73.167,0,0],"to":[73.167,0,0]},{"s":[241.96,362.657,0],"t":22}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Layer 2","sr":1,"st":0,"op":20,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[241.96,362.657,0],"t":0,"ti":[-72.833,0,0],"to":[72.833,0,0]},{"s":[678.96,362.657,0],"t":20}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4}]}]}
\ No newline at end of file
diff --git a/assets/animations/lottie/ambulance_alert.json b/assets/animations/lottie/ambulance_alert.json
new file mode 100644
index 0000000..8fb93b1
--- /dev/null
+++ b/assets/animations/lottie/ambulance_alert.json
@@ -0,0 +1 @@
+{"nm":"after_ohno","ddd":0,"h":214,"w":240,"meta":{"g":"@lottiefiles/toolkit-js 0.26.1"},"layers":[{"ty":4,"nm":"! contornos","sr":1,"st":-34,"op":716,"ip":26,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[172.26,-42.033,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[0,0,100],"t":26},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[0,0,100],"t":27},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":-0.042},"s":[0,0,100],"t":28},{"o":{"x":0.167,"y":0.083},"i":{"x":0.833,"y":0.833},"s":[0,0,100],"t":29},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[12.5,12.5,100],"t":30},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[25,25,100],"t":31},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[37.5,37.5,100],"t":32},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,50,100],"t":33},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[62.5,62.5,100],"t":34},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[75,75,100],"t":35},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.725},"s":[87.5,87.5,100],"t":36},{"o":{"x":0.167,"y":0.12},"i":{"x":0.833,"y":0.935},"s":[100,100,100],"t":37},{"o":{"x":0.167,"y":-0.292},"i":{"x":0.833,"y":0.654},"s":[128.739,128.739,100],"t":38},{"o":{"x":0.167,"y":0.11},"i":{"x":0.833,"y":0.866},"s":[122.364,122.364,100],"t":39},{"o":{"x":0.167,"y":0.22},"i":{"x":0.833,"y":0.924},"s":[102.249,102.249,100],"t":40},{"o":{"x":0.167,"y":-0.9},"i":{"x":0.833,"y":0.333},"s":[89.958,89.958,100],"t":41},{"o":{"x":0.167,"y":0.095},"i":{"x":0.833,"y":0.858},"s":[90.999,90.999,100],"t":42},{"o":{"x":0.167,"y":0.202},"i":{"x":0.833,"y":0.914},"s":[98.291,98.291,100],"t":43},{"o":{"x":0.167,"y":3.061},"i":{"x":0.833,"y":2.422},"s":[103.416,103.416,100],"t":44},{"o":{"x":0.167,"y":0.079},"i":{"x":0.833,"y":0.849},"s":[103.559,103.559,100],"t":45},{"o":{"x":0.167,"y":0.187},"i":{"x":0.833,"y":0.906},"s":[100.969,100.969,100],"t":46},{"o":{"x":0.167,"y":0.75},"i":{"x":0.833,"y":1.203},"s":[98.877,98.877,100],"t":47},{"o":{"x":0.167,"y":0.059},"i":{"x":0.833,"y":0.839},"s":[98.615,98.615,100],"t":48},{"o":{"x":0.167,"y":0.173},"i":{"x":0.833,"y":0.899},"s":[99.515,99.515,100],"t":49},{"o":{"x":0.167,"y":0.476},"i":{"x":0.833,"y":1.059},"s":[100.352,100.352,100],"t":50},{"o":{"x":0.167,"y":0.035},"i":{"x":0.833,"y":0.826},"s":[100.53,100.53,100],"t":51},{"o":{"x":0.167,"y":0.16},"i":{"x":0.833,"y":0.892},"s":[100.227,100.227,100],"t":52},{"o":{"x":0.167,"y":0.368},"i":{"x":0.833,"y":1.002},"s":[99.897,99.897,100],"t":53},{"o":{"x":0.167,"y":0.002},"i":{"x":0.833,"y":0.809},"s":[99.8,99.8,100],"t":54},{"o":{"x":0.167,"y":0.148},"i":{"x":0.833,"y":0.886},"s":[99.899,99.899,100],"t":55},{"o":{"x":0.167,"y":0.308},"i":{"x":0.833,"y":0.97},"s":[100.027,100.027,100],"t":56},{"o":{"x":0.167,"y":-0.046},"i":{"x":0.833,"y":0.784},"s":[100.074,100.074,100],"t":57},{"o":{"x":0.167,"y":0.135},"i":{"x":0.833,"y":0.879},"s":[100.044,100.044,100],"t":58},{"o":{"x":0.167,"y":0.269},"i":{"x":0.833,"y":0.95},"s":[99.995,99.995,100],"t":59},{"o":{"x":0.167,"y":-0.126},"i":{"x":0.833,"y":0.742},"s":[99.973,99.973,100],"t":60},{"o":{"x":0.167,"y":0.123},"i":{"x":0.833,"y":0.917},"s":[99.982,99.982,100],"t":61},{"o":{"x":0.167,"y":0.002},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":62},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":63},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":64},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":65},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":66},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":67},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":68},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":69},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":70},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":71},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":72},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":73},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":74},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":75},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":76},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":77},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":78},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":79},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":80},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":81},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":82},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":83},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":84},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":85},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":86},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":87},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":88},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":89},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":90},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":91},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":92},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":93},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":94},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":95},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":96},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":97},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":98},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":99},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":100},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":101},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":102},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":103},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":104},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":105},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":106},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":107},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":108},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":109},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":110},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":111},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":112},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":113},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":114},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":115},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":116},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":117},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":118},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":119},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":120},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":121},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":122},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":123},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":124},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":125},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":126},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":127},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":128},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":129},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":130},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":131},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":132},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":133},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":134},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":135},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":136},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":137},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":138},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":139},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":140},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":141},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":142},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":143},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":144},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":145},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":146},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":147},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":148},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":149},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":150},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":151},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":152},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":153},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":154},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":155},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":156},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":157},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":158},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":159},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":160},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":161},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":162},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":163},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":164},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":165},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":166},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":167},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":168},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":169},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":170},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":171},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":172},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":173},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":174},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":175},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":176},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":177},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":178},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":179},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":180},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":181},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":182},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":183},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":184},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":185},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":186},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":187},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":188},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":189},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":190},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":191},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":192},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":193},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":194},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":195},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":196},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":197},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":198},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":199},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":200},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":201},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":202},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":203},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":204},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":205},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":206},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":207},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":208},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":209},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":210},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":211},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":212},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":213},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":214},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":215},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":216},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":217},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":218},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":219},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":220},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":221},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":222},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":223},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":224},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":225},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":226},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":227},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":228},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":229},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":230},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":231},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":232},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":233},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":234},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":235},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":236},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":237},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":238},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":239},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":240},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":241},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":242},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":243},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":244},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":245},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":246},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":247},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":248},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":249},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":250},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":251},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":252},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":253},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":254},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":255},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":256},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":257},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":258},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":259},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":260},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":261},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":262},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":263},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":264},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":265},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":266},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":267},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":268},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":269},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":270},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":271},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":272},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":273},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":274},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":275},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":276},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":277},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":278},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":279},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":280},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":281},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":282},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":283},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":284},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":285},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":286},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":287},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":288},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":289},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":290},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":291},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":292},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":293},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":294},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":295},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":296},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":297},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":298},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":299},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":300},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":301},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":302},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":303},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":304},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":305},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":306},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":307},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":308},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":309},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":310},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":311},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":312},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":313},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":314},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":315},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":316},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":317},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":318},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":319},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":320},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":321},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":322},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":323},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":324},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":325},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":326},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":327},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":328},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":329},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":330},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":331},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":332},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":333},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":334},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":335},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":336},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":337},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":338},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":339},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":340},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":341},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":342},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":343},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":344},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":345},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":346},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":347},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":348},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":349},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":350},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":351},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":352},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":353},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":354},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":355},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":356},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":357},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":358},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":359},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":360},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":361},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":362},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":363},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":364},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":365},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":366},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":367},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":368},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":369},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":370},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":371},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":372},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":373},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":374},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":375},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":376},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":377},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":378},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":379},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":380},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":381},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":382},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":383},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":384},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":385},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":386},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":387},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":388},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":389},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":390},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":391},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":392},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":393},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":394},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":395},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":396},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":397},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":398},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":399},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":400},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":401},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":402},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":403},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":404},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":405},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":406},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":407},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":408},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":409},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":410},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":411},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":412},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":413},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":414},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":415},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":416},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":417},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":418},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":419},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":420},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":421},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":422},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":423},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":424},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":425},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":426},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":427},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":428},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":429},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":430},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":431},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":432},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":433},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":434},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":435},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":436},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":437},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":438},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":439},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":440},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":441},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":442},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":443},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":444},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":445},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":446},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":447},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":448},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":449},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":450},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":451},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":452},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":453},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":454},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":455},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":456},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":457},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":458},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":459},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":460},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":461},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":462},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":463},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":464},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":465},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":466},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":467},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":468},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":469},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":470},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":471},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":472},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":473},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":474},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":475},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":476},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":477},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":478},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":479},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":480},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":481},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":482},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":483},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":484},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":485},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":486},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":487},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":488},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":489},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":490},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":491},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":492},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":493},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":494},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":495},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":496},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":497},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":498},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":499},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":500},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":501},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":502},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":503},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":504},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":505},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":506},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":507},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":508},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":509},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":510},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":511},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":512},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":513},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":514},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":515},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":516},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":517},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":518},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":519},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":520},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":521},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":522},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":523},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":524},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":525},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":526},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":527},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":528},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":529},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":530},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":531},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":532},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":533},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":534},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":535},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":536},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":537},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":538},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":539},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":540},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":541},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":542},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":543},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":544},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":545},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":546},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":547},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":548},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":549},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":550},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":551},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":552},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":553},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":554},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":555},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":556},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":557},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":558},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":559},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":560},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":561},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":562},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":563},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":564},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":565},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":566},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":567},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":568},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":569},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":570},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":571},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":572},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":573},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":574},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":575},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":576},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":577},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":578},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":579},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":580},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":581},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":582},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":583},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":584},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":585},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":586},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":587},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":588},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":589},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":590},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":591},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":592},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":593},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":594},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":595},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":596},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":597},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":598},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":599},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":600},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":601},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":602},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":603},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":604},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":605},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":606},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":607},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":608},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":609},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":610},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":611},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":612},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":613},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":614},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":615},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":616},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":617},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":618},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":619},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":620},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":621},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":622},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":623},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":624},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":625},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":626},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":627},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":628},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":629},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":630},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":631},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":632},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":633},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":634},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":635},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":636},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":637},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":638},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":639},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":640},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":641},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":642},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":643},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":644},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":645},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":646},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":647},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":648},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":649},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":650},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":651},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":652},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":653},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":654},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":655},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":656},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":657},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":658},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":659},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":660},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":661},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":662},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":663},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":664},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":665},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":666},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":667},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":668},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":669},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":670},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":671},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":672},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":673},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":674},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":675},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":676},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":677},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":678},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":679},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":680},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":681},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":682},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":683},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":684},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":685},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":686},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":687},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":688},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":689},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":690},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":691},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":692},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":693},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":694},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":695},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":696},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":697},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":698},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":699},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":700},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":701},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":702},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":703},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":704},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":705},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":706},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":707},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":708},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":709},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":710},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":711},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":712},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":713},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":714},{"s":[100,100,100],"t":715}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[120,116.618,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"!","ix":1,"cix":2,"np":5,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"!","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.15,0],[-0.805,0.767],[-0.155,1.457],[0,0],[0,0],[1.648,1.42],[2.53,0],[1.648,-1.418],[0,-2.375],[0,0],[0,0],[-0.805,-0.765]],"o":[[1.15,0],[0.805,-0.765],[0,0],[0,0],[0,-2.375],[-1.65,-1.418],[-2.53,0],[-1.65,1.42],[0,0],[0,0],[0.153,1.457],[0.805,0.767]],"v":[[172.26,-23.46],[175.193,-24.61],[176.63,-27.945],[180.885,-72.565],[181,-73.83],[178.527,-79.523],[172.26,-81.65],[165.993,-79.523],[163.52,-73.83],[163.635,-72.68],[167.89,-27.945],[169.327,-24.61]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"!","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-2.455,0],[-1.61,1.65],[0,2.455],[1.61,1.65],[2.453,0],[1.61,-1.648],[0,-2.453],[-1.61,-1.648]],"o":[[2.453,0],[1.61,-1.648],[0,-2.453],[-1.61,-1.648],[-2.455,0],[-1.61,1.65],[0,2.455],[1.61,1.65]],"v":[[172.26,0.69],[178.355,-1.783],[180.77,-7.935],[178.355,-14.087],[172.26,-16.56],[166.165,-14.087],[163.75,-7.935],[166.165,-1.783]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"Mesclar caminhos 1","mm":1},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Preenchimento 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Camada de forma 1","sr":1,"st":0,"op":750,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0,0,100],"t":28},{"s":[100,100,100],"t":35}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[120,107,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Polystar 1","ix":1,"cix":2,"np":4,"it":[{"ty":"sr","bm":0,"hd":false,"mn":"ADBE Vector Shape - Star","nm":"Caminho Polystar 1","ix":1,"d":1,"ir":{"a":0,"k":53.5,"ix":6},"is":{"a":0,"k":51,"ix":8},"pt":{"a":0,"k":3,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"or":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":0},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":1},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":2},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":3},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":4},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":5},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":6},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":7},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":8},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":9},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":10},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":11},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":12},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":13},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":14},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":15},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":16},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":17},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":18},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":19},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":20},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":21},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":22},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":23},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":24},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":25},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":26},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":27},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":28},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":29},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[68],"t":30},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":0.157},"s":[68],"t":31},{"o":{"x":0.167,"y":0.083},"i":{"x":0.833,"y":0.762},"s":[68],"t":32},{"o":{"x":0.167,"y":0.128},"i":{"x":0.833,"y":0.872},"s":[78.111],"t":33},{"o":{"x":0.167,"y":0.238},"i":{"x":0.833,"y":0.869},"s":[96.889],"t":34},{"o":{"x":0.167,"y":0.23},"i":{"x":0.833,"y":0.935},"s":[107],"t":35},{"o":{"x":0.167,"y":-0.292},"i":{"x":0.833,"y":0.654},"s":[112.729],"t":36},{"o":{"x":0.167,"y":0.11},"i":{"x":0.833,"y":0.866},"s":[111.459],"t":37},{"o":{"x":0.167,"y":0.22},"i":{"x":0.833,"y":0.924},"s":[107.448],"t":38},{"o":{"x":0.167,"y":-0.9},"i":{"x":0.833,"y":0.333},"s":[104.998],"t":39},{"o":{"x":0.167,"y":0.095},"i":{"x":0.833,"y":0.858},"s":[105.206],"t":40},{"o":{"x":0.167,"y":0.202},"i":{"x":0.833,"y":0.914},"s":[106.659],"t":41},{"o":{"x":0.167,"y":3.061},"i":{"x":0.833,"y":2.422},"s":[107.681],"t":42},{"o":{"x":0.167,"y":0.079},"i":{"x":0.833,"y":0.849},"s":[107.71],"t":43},{"o":{"x":0.167,"y":0.187},"i":{"x":0.833,"y":0.906},"s":[107.193],"t":44},{"o":{"x":0.167,"y":0.75},"i":{"x":0.833,"y":1.203},"s":[106.776],"t":45},{"o":{"x":0.167,"y":0.059},"i":{"x":0.833,"y":0.839},"s":[106.724],"t":46},{"o":{"x":0.167,"y":0.173},"i":{"x":0.833,"y":0.899},"s":[106.903],"t":47},{"o":{"x":0.167,"y":0.476},"i":{"x":0.833,"y":1.059},"s":[107.07],"t":48},{"o":{"x":0.167,"y":0.035},"i":{"x":0.833,"y":0.826},"s":[107.106],"t":49},{"o":{"x":0.167,"y":0.16},"i":{"x":0.833,"y":0.892},"s":[107.045],"t":50},{"o":{"x":0.167,"y":0.368},"i":{"x":0.833,"y":1.002},"s":[106.979],"t":51},{"o":{"x":0.167,"y":0.002},"i":{"x":0.833,"y":0.809},"s":[106.96],"t":52},{"o":{"x":0.167,"y":0.148},"i":{"x":0.833,"y":0.886},"s":[106.98],"t":53},{"o":{"x":0.167,"y":0.308},"i":{"x":0.833,"y":0.97},"s":[107.005],"t":54},{"o":{"x":0.167,"y":-0.046},"i":{"x":0.833,"y":0.784},"s":[107.015],"t":55},{"o":{"x":0.167,"y":0.135},"i":{"x":0.833,"y":0.879},"s":[107.009],"t":56},{"o":{"x":0.167,"y":0.269},"i":{"x":0.833,"y":0.95},"s":[106.999],"t":57},{"o":{"x":0.167,"y":-0.126},"i":{"x":0.833,"y":0.742},"s":[106.995],"t":58},{"o":{"x":0.167,"y":0.123},"i":{"x":0.833,"y":0.917},"s":[106.996],"t":59},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":60},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":61},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":62},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":63},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":64},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":65},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":66},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":67},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":68},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":69},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":70},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":71},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":72},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":73},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":74},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":75},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":76},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":77},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":78},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":79},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":80},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":81},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":82},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":83},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":84},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":85},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":86},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":87},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":88},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":89},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":90},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":91},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":92},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":93},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":94},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":95},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":96},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":97},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":98},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":99},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":100},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":101},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":102},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":103},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":104},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":105},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":106},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":107},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":108},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":109},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":110},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":111},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":112},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":113},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":114},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":115},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":116},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":117},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":118},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":119},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":120},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":121},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":122},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":123},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":124},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":125},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":126},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":127},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":128},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":129},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":130},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":131},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":132},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":133},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":134},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":135},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":136},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":137},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":138},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":139},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":140},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":141},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":142},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":143},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":144},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":145},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":146},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":147},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":148},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":149},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":150},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":151},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":152},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":153},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":154},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":155},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":156},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":157},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":158},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":159},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":160},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":161},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":162},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":163},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":164},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":165},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":166},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":167},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":168},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":169},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":170},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":171},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":172},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":173},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":174},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":175},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":176},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":177},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":178},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":179},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":180},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":181},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":182},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":183},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":184},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":185},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":186},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":187},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":188},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":189},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":190},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":191},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":192},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":193},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":194},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":195},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":196},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":197},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":198},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":199},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":200},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":201},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":202},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":203},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":204},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":205},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":206},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":207},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":208},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":209},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":210},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":211},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":212},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":213},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":214},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":215},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":216},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":217},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":218},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":219},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":220},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":221},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":222},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":223},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":224},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":225},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":226},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":227},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":228},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":229},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":230},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":231},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":232},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":233},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":234},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":235},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":236},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":237},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":238},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":239},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":240},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":241},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":242},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":243},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":244},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":245},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":246},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":247},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":248},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":249},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":250},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":251},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":252},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":253},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":254},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":255},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":256},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":257},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":258},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":259},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":260},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":261},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":262},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":263},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":264},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":265},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":266},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":267},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":268},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":269},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":270},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":271},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":272},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":273},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":274},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":275},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":276},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":277},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":278},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":279},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":280},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":281},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":282},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":283},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":284},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":285},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":286},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":287},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":288},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":289},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":290},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":291},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":292},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":293},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":294},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":295},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":296},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":297},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":298},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":299},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":300},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":301},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":302},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":303},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":304},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":305},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":306},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":307},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":308},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":309},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":310},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":311},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":312},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":313},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":314},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":315},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":316},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":317},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":318},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":319},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":320},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":321},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":322},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":323},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":324},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":325},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":326},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":327},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":328},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":329},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":330},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":331},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":332},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":333},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":334},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":335},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":336},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":337},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":338},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":339},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":340},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":341},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":342},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":343},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":344},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":345},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":346},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":347},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":348},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":349},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":350},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":351},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":352},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":353},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":354},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":355},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":356},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":357},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":358},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":359},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":360},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":361},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":362},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":363},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":364},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":365},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":366},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":367},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":368},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":369},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":370},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":371},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":372},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":373},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":374},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":375},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":376},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":377},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":378},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":379},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":380},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":381},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":382},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":383},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":384},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":385},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":386},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":387},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":388},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":389},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":390},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":391},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":392},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":393},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":394},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":395},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":396},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":397},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":398},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":399},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":400},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":401},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":402},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":403},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":404},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":405},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":406},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":407},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":408},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":409},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":410},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":411},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":412},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":413},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":414},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":415},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":416},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":417},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":418},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":419},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":420},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":421},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":422},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":423},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":424},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":425},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":426},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":427},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":428},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":429},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":430},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":431},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":432},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":433},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":434},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":435},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":436},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":437},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":438},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":439},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":440},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":441},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":442},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":443},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":444},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":445},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":446},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":447},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":448},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":449},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":450},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":451},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":452},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":453},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":454},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":455},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":456},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":457},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":458},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":459},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":460},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":461},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":462},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":463},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":464},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":465},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":466},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":467},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":468},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":469},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":470},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":471},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":472},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":473},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":474},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":475},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":476},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":477},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":478},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":479},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":480},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":481},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":482},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":483},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":484},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":485},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":486},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":487},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":488},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":489},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":490},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":491},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":492},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":493},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":494},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":495},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":496},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":497},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":498},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":499},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":500},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":501},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":502},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":503},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":504},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":505},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":506},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":507},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":508},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":509},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":510},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":511},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":512},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":513},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":514},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":515},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":516},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":517},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":518},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":519},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":520},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":521},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":522},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":523},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":524},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":525},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":526},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":527},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":528},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":529},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":530},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":531},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":532},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":533},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":534},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":535},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":536},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":537},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":538},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":539},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":540},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":541},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":542},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":543},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":544},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":545},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":546},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":547},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":548},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":549},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":550},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":551},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":552},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":553},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":554},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":555},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":556},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":557},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":558},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":559},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":560},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":561},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":562},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":563},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":564},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":565},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":566},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":567},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":568},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":569},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":570},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":571},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":572},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":573},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":574},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":575},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":576},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":577},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":578},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":579},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":580},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":581},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":582},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":583},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":584},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":585},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":586},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":587},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":588},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":589},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":590},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":591},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":592},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":593},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":594},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":595},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":596},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":597},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":598},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":599},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":600},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":601},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":602},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":603},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":604},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":605},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":606},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":607},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":608},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":609},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":610},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":611},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":612},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":613},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":614},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":615},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":616},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":617},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":618},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":619},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":620},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":621},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":622},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":623},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":624},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":625},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":626},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":627},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":628},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":629},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":630},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":631},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":632},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":633},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":634},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":635},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":636},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":637},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":638},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":639},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":640},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":641},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":642},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":643},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":644},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":645},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":646},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":647},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":648},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":649},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":650},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":651},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":652},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":653},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":654},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":655},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":656},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":657},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":658},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":659},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":660},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":661},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":662},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":663},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":664},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":665},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":666},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":667},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":668},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":669},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":670},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":671},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":672},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":673},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":674},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":675},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":676},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":677},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":678},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":679},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":680},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":681},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":682},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":683},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":684},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":685},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":686},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":687},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":688},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":689},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":690},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":691},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":692},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":693},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":694},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":695},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":696},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":697},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":698},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":699},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":700},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":701},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":702},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":703},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":704},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":705},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":706},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":707},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":708},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":709},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":710},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":711},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":712},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":713},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":714},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":715},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":716},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":717},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":718},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":719},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":720},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":721},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":722},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":723},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":724},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":725},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":726},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":727},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":728},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":729},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":730},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":731},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":732},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":733},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":734},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":735},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":736},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":737},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":738},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":739},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":740},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":741},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":742},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":743},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":744},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":745},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":746},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":747},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[107],"t":748},{"s":[107],"t":749}],"ix":7},"os":{"a":0,"k":0,"ix":9},"r":{"a":0,"k":0,"ix":5},"sy":1},{"ty":"rd","bm":0,"hd":false,"mn":"ADBE Vector Filter - RC","nm":"Arredondar cantos 1","ix":2,"r":{"a":0,"k":40,"ix":1}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Traçado 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Preenchimento 1","c":{"a":0,"k":[1,1,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,23],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2}],"v":"5.1.8","fr":25,"op":66,"ip":28,"assets":[]}
\ No newline at end of file
diff --git a/assets/animations/lottie/rrt_ambulance.json b/assets/animations/lottie/rrt_ambulance.json
new file mode 100644
index 0000000..a15eee6
--- /dev/null
+++ b/assets/animations/lottie/rrt_ambulance.json
@@ -0,0 +1 @@
+{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.47.1"},"layers":[{"ty":4,"nm":"Layer 12","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,298.786,0],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,293.786,0],"t":10},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,298.786,0],"t":20},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[450.232,293.786,0],"t":30},{"s":[450.232,298.786,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.518,-3.779],[3.781,-0.517],[0.518,3.779],[-3.781,0.517]],"o":[[0.518,3.779],[-3.781,0.517],[-0.518,-3.779],[3.781,-0.517]],"v":[[6.846,-0.937],[0.938,6.842],[-6.846,0.937],[-0.938,-6.842]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Layer 6","sr":1,"st":0,"op":180,"ip":0,"hd":true,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,395.682,0],"t":1},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,400.682,0],"t":11},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,395.682,0],"t":21},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[63.907,400.682,0],"t":31},{"s":[63.907,395.682,0],"t":41}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.518,-3.779],[3.781,-0.517],[0.518,3.779],[-3.781,0.517]],"o":[[0.518,3.779],[-3.781,0.517],[-0.518,-3.779],[3.781,-0.517]],"v":[[6.846,-0.937],[0.938,6.842],[-6.846,0.937],[-0.938,-6.842]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Layer 2","sr":1,"st":0,"op":180,"ip":0,"hd":true,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,424.922,0],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,420.922,0],"t":10},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,424.922,0],"t":20},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[121.127,420.922,0],"t":30},{"s":[121.127,424.922,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.746,-5.442],[5.445,-0.745],[0.746,5.442],[-5.445,0.745]],"o":[[0.746,5.442],[-5.445,0.745],[-0.746,-5.442],[5.445,-0.745]],"v":[[9.859,-1.349],[1.351,9.853],[-9.859,1.349],[-1.351,-9.853]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":3,"nm":"Null 3","sr":1,"st":0,"op":129,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[131.911,173.859,0],"ix":2},"r":{"a":0,"k":138,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":0,"ix":11}},"ind":4},{"ty":4,"nm":"Layer 11","sr":1,"st":43,"op":129,"ip":43,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":43},{"s":[-100,100,100],"t":48}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[54.892,46.827,0],"t":43},{"s":[44.23,56.705,0],"t":48}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5,"parent":4},{"ty":4,"nm":"Layer 10","sr":1,"st":31,"op":41,"ip":31,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":31},{"s":[-134,134,100],"t":41}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":31},{"s":[23.889,75.927,0],"t":41}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":36},{"s":[0],"t":41}],"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6,"parent":4},{"ty":4,"nm":"Layer 9","sr":1,"st":18,"op":28,"ip":18,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":18},{"s":[-134,134,100],"t":28}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":18},{"s":[23.889,75.927,0],"t":28}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":23},{"s":[0],"t":28}],"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":7,"parent":4},{"ty":4,"nm":"Layer 8","sr":1,"st":7,"op":17,"ip":7,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-23,23,100],"t":7},{"s":[-134,134,100],"t":17}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[55.769,43.295,0],"t":7},{"s":[23.889,75.927,0],"t":17}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":12},{"s":[0],"t":17}],"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":8,"parent":4},{"ty":4,"nm":"Layer 7","sr":1,"st":0,"op":5,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[379.47,131.675,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[-100,100,100],"t":0},{"s":[-134,134,100],"t":5}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[44.23,56.705,0],"t":0},{"s":[23.889,75.927,0],"t":5}],"ix":2},"r":{"a":0,"k":-92,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":0},{"s":[0],"t":5}],"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.036,0],[-10.036,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[405.776,141.137],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-10.036],[0,10.036]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[368.129,105.249],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.096,-7.096],[-7.096,7.096]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[391.777,118.706],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":9,"parent":4},{"ty":4,"nm":"Layer 5","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[396.051,136.57,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":4},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":8},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":12},{"o":{"x":0.191,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":16},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":23},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":27},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":31},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[110,110,100],"t":35},{"s":[100,100,100],"t":39}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[396.051,136.57,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-6.092,-10.552],[0,0],[12.184,0],[0,0],[-6.092,10.552],[0,0]],"o":[[0,0],[6.092,10.552],[0,0],[-12.185,0],[0,0],[6.092,-10.552]],"v":[[13.709,-53.595],[66.454,37.767],[52.746,61.509],[-52.746,61.509],[-66.454,37.767],[-13.706,-53.595]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,146.499],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[-13.769,0],[0,0],[-7.045,-11.709],[0,0]],"o":[[0,0],[7.01,-11.85],[0,0],[13.665,0],[0,0],[0,0]],"v":[[-64.065,49.563],[-17.385,-30.444],[16.14,-49.563],[16.14,-49.563],[49.516,-30.693],[64.065,-6.511]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"d":[{"nm":"dash","n":"d","v":{"a":0,"k":6,"ix":1}},{"nm":"gap","n":"g","v":{"a":0,"k":10,"ix":2}},{"nm":"gap2","n":"g","v":{"a":0,"k":10,"ix":4}},{"nm":"gap3","n":"g","v":{"a":0,"k":10,"ix":6}}],"c":{"a":0,"k":[0.6627,0.6863,0.7686],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[386.167,114.696],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.779,7.779],[-7.779,7.779],[-7.779,-7.779],[7.779,-7.779]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.391,184.828],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.361,-23.305],[-10.361,5.407],[-7.127,23.336],[-0.018,23.336],[-0.018,23.348],[7.103,23.34],[10.348,5.39],[10.361,-23.348]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,140.911],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"tr","a":{"a":0,"k":[401.402,140.911],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,140.911],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 4","ix":4,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-6.092,-10.552],[0,0],[12.184,0],[0,0],[-6.092,10.552],[0,0]],"o":[[0,0],[6.092,10.552],[0,0],[-12.185,0],[0,0],[6.092,-10.552]],"v":[[13.709,-53.595],[66.454,37.767],[52.746,61.509],[-52.746,61.509],[-66.454,37.767],[-13.706,-53.595]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[401.402,146.499],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":10},{"ty":4,"nm":"Layer 4","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[351.654,335.209,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[351.654,335.209,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-5.899],[5.899,0],[0,5.899],[-5.899,0]],"o":[[0,5.899],[-5.899,0],[0,-5.899],[5.899,0]],"v":[[10.682,0],[0,10.682],[-10.682,0],[0,-10.682]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.652,334.504],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.654,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[351.654,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":11},{"ty":4,"nm":"Layer 3","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[91.751,335.209,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[91.751,335.209,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-5.899],[5.899,0],[0,5.899],[-5.899,0]],"o":[[0,5.899],[-5.899,0],[0,-5.899],[5.899,0]],"v":[[10.682,0],[0,10.682],[-10.682,0],[0,-10.682]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.749,334.504],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.751,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.159],[15.159,0],[0,15.159],[-15.159,0]],"o":[[0,15.159],[-15.159,0],[0,-15.159],[15.159,0]],"v":[[27.448,0],[0,27.448],[-27.448,0],[0,-27.448]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[91.751,335.209],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":12},{"ty":0,"nm":"Nested Scene 2","sr":1,"st":0,"op":61,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[32.09649981558323,13.458049893379211]},"s":{"a":0,"k":[-166.7344,166.7344]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[271.5349,244.9784]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":500,"h":500,"refId":"precomp_Shape Layer - SVG_25397d66-42bd-4739-a446-0631d3585a8b","ind":13},{"ty":4,"nm":"Layer 1","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[221.146,268.245,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":5},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":10},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":15},{"o":{"x":0.324,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":20},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":25},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,268.245,0],"t":30},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[221.146,265.245,0],"t":35},{"s":[221.146,268.245,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[11.166,0],[4.286,-9.562],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-4.276,-9.562],[-11.156,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,-64.707],[59.545,64.707],[14.358,64.707],[-10.685,48.483],[-35.729,64.707],[-59.545,64.707],[-59.545,11.067],[-23.247,-12.056],[1.777,-64.707]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.433,259.275],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.92,72.136],[-119.713,72.136],[-119.713,-72.136],[119.713,-72.136],[119.713,72.136],[95.007,72.136]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0.02204895019528408],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.691,251.8690489501953],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[5.305,0],[0,0],[0,-5.305],[0,0],[0,0],[0,0]],"o":[[0,0],[-5.305,0],[0,0],[0,0],[0,0],[0,-5.305]],"v":[[0,-10.37],[0,-10.37],[-9.605,-0.765],[-9.605,10.37],[9.605,10.37],[9.605,-0.765]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0.022049903869628906],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[131.871,184.22404990386963],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 4","ix":4,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":true,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[30.878,-9.505],[9.504,-9.505],[9.504,-30.878],[-9.504,-30.878],[-9.504,-9.505],[-30.878,-9.505],[-30.878,9.504],[-9.504,9.504],[-9.504,30.878],[9.504,30.878],[9.504,9.504],[30.878,9.504]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0.022049903869628906],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[280.853,235.31804990386962],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 7","ix":5,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-31.952,16.61],[31.952,16.61],[31.952,-16.61],[-14.701,-16.61]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6627,0.6863,0.7686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[111.137,230.612],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 8","ix":6,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-4.691],[0,0],[4.691,0],[0,0],[0,1.98],[1.554,3.425],[0,0]],"o":[[0,0],[0,4.691],[0,0],[0.396,-1.861],[0,-3.999],[0,0],[4.691,0]],"v":[[17.798,0],[17.798,0],[9.305,8.493],[-15.996,8.493],[-15.392,2.732],[-17.798,-8.493],[9.305,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[394.495,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 9","ix":7,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,1.98],[1.554,3.425]],"o":[[-1.554,3.425],[0,1.98],[0,0],[0.396,-1.861],[0,-3.999],[0,0]],"v":[[104.91,-8.493],[102.505,2.732],[103.108,8.493],[-103.109,8.493],[-102.505,2.732],[-104.91,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[221.701,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 10","ix":8,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,4.691],[0,0],[-4.691,0]],"o":[[-1.544,3.425],[0,1.98],[0,0],[-4.691,0],[0,0],[0,-4.691],[0,0]],"v":[[18.352,-8.493],[15.947,2.732],[16.55,8.493],[-9.859,8.493],[-18.352,0],[-18.352,0],[-9.859,-8.493]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[48.352,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 11","ix":9,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-4.691],[0,0],[4.691,0],[0,0],[0,1.98],[1.554,3.425],[0,0]],"o":[[0,0],[0,4.691],[0,0],[0.396,-1.861],[0,-3.999],[0,0],[4.691,0]],"v":[[17.798,0],[17.798,0],[9.305,8.493],[-15.996,8.493],[-15.392,2.732],[-17.798,-8.493],[9.305,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[394.495,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 12","ix":10,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,1.98],[1.554,3.425]],"o":[[-1.554,3.425],[0,1.98],[0,0],[0.396,-1.861],[0,-3.999],[0,0]],"v":[[104.91,-8.493],[102.505,2.732],[103.108,8.493],[-103.109,8.493],[-102.505,2.732],[-104.91,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[221.701,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 13","ix":11,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-3.999],[-0.396,-1.861],[0,0],[0,4.691],[0,0],[-4.691,0]],"o":[[-1.544,3.425],[0,1.98],[0,0],[-4.691,0],[0,0],[0,-4.691],[0,0]],"v":[[18.352,-8.493],[15.947,2.732],[16.55,8.493],[-9.859,8.493],[-18.352,0],[-18.352,0],[-9.859,-8.493]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8824,0.9255],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[48.352,332.475],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":1,"hd":false,"mn":"ADBE Vector Group","nm":"Group 14","ix":12,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[5.721,9.918],[-3.465,8.879]],"o":[[0,0],[0,0],[-11.453,0],[-4.89,-8.463],[0,0]],"v":[[42.236,-21.524],[42.236,21.524],[-10.514,21.524],[-37.943,5.687],[-40.081,-21.524]]},"ix":2}},{"ty":"gf","bm":0,"hd":false,"mn":"ADBE Vector Graphic - G-Fill","nm":"Gradient Fill 1","e":{"a":0,"k":[41.298,-0.235],"ix":6},"g":{"p":3,"k":{"a":0,"k":[0,0.792156862745098,0.8117647058823529,0.8666666666666667,0.5,0.8627450980392157,0.8745098039215686,0.9058823529411765,1,0.9333333333333333,0.9411764705882353,0.9450980392156862],"ix":9}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[-43.173,-0.235],"ix":5},"r":1,"o":{"a":0,"k":100,"ix":10}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[359.173,201.235],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 15","ix":13,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[119.713,9.09],[-119.713,9.09],[-119.713,-9.09],[119.713,-9.09]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.689,297.261],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 16","ix":14,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,9.09],[-59.545,9.09],[-59.545,-9.09],[59.545,-9.09]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9294,0.1098,0.1686],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.432,297.261],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 17","ix":15,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[11.166,0],[4.286,-9.562],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-4.276,-9.562],[-11.156,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.545,-64.707],[59.545,64.707],[14.358,64.707],[-10.685,48.483],[-35.729,64.707],[-59.545,64.707],[-59.545,11.067],[-23.247,-12.056],[1.777,-64.707]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[102.433,259.275],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 18","ix":16,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.92,72.136],[-119.713,72.136],[-119.713,-72.136],[119.713,-72.136],[119.713,72.136],[95.007,72.136]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9608,0.9608,0.9608],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[281.691,251.847],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":14},{"ty":0,"nm":"Pre-comp 1","sr":1,"st":0,"op":180,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"a","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27,346],[27,380],[458,380],[458,349]]},"ix":1}}],"w":500,"h":500,"refId":"comp_0_f77fbf55-eb10-4e38-b70c-2a5f270c971e","ind":15}],"v":"5.7.0","fr":30,"op":61,"ip":0,"assets":[{"nm":"Pre-comp 1","id":"comp_0_f77fbf55-eb10-4e38-b70c-2a5f270c971e","layers":[{"ty":4,"nm":"Layer 8","sr":1,"st":22,"op":75,"ip":22,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[-197.04,362.657,0],"t":22},{"s":[241.96,362.657,0],"t":42}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Layer 7","sr":1,"st":20,"op":40,"ip":20,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[241.96,362.657,0],"t":20},{"s":[678.96,362.657,0],"t":40}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Layer 6","sr":1,"st":2,"op":22,"ip":2,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[-197.04,362.657,0],"t":2},{"s":[241.96,362.657,0],"t":22}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Layer 2","sr":1,"st":0,"op":20,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[241.96,362.657,0],"t":0},{"s":[678.96,362.657,0],"t":20}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[211.957,0],[-211.957,0]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":10,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"c":{"a":0,"k":[0.1804,0.1882,0.2235],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4}]},{"nm":"Nested Scene 2","id":"precomp_Shape Layer - SVG_25397d66-42bd-4739-a446-0631d3585a8b","layers":[{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":61,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.3680000000000003,-0.696],[-0.6720000000000006,-1.1759999999999997],[0,-1.4400000000000004],[0.9600000000000009,-1.3440000000000012],[1.8960000000000008,-0.5039999999999996],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.943999999999999,0],[1.3679999999999986,0.6720000000000002],[0.6960000000000015,1.1520000000000001],[0,1.6559999999999988],[-0.9599999999999973,1.3200000000000003],[0,0],[0,0],[0,0]],"v":[[13.444,26],[7.9,16.208],[5.524,16.208],[5.524,26],[0.484,26],[0.484,0.872],[9.916,0.872],[14.884,1.916],[17.944,4.688],[18.988,8.576],[17.548,13.076],[13.264,15.812],[19.276,26],[13.444,26]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[-0.6719999999999988,0.6479999999999997],[0,1.1760000000000002],[0.6720000000000006,0.6240000000000006],[1.3679999999999986,0],[0,0],[0,0]],"o":[[0,0],[1.3679999999999986,0],[0.6720000000000006,-0.6719999999999988],[0,-1.1519999999999992],[-0.6719999999999988,-0.6479999999999997],[0,0],[0,0],[0,0]],"v":[[5.524,12.428],[9.736,12.428],[12.796,11.456],[13.804,8.684],[12.796,6.02],[9.736,5.048],[5.524,5.048],[5.524,12.428]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.368000000000002,-0.696],[-0.6720000000000041,-1.1759999999999997],[0,-1.4400000000000004],[0.9600000000000009,-1.3440000000000012],[1.8959999999999937,-0.5039999999999996],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.9440000000000026,0],[1.368000000000002,0.6720000000000002],[0.695999999999998,1.1520000000000001],[0,1.6559999999999988],[-0.9600000000000009,1.3200000000000003],[0,0],[0,0],[0,0]],"v":[[36.5065,26],[30.9625,16.208],[28.5865,16.208],[28.5865,26],[23.5465,26],[23.5465,0.872],[32.9785,0.872],[37.9465,1.916],[41.0065,4.688],[42.0505,8.576],[40.6105,13.076],[36.3265,15.812],[42.3385,26],[36.5065,26]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[-0.671999999999997,0.6479999999999997],[0,1.1760000000000002],[0.6720000000000041,0.6240000000000006],[1.368000000000002,0],[0,0],[0,0]],"o":[[0,0],[1.368000000000002,0],[0.6720000000000041,-0.6719999999999988],[0,-1.1519999999999992],[-0.671999999999997,-0.6479999999999997],[0,0],[0,0],[0,0]],"v":[[28.5865,12.428],[32.7985,12.428],[35.8585,11.456],[36.8665,8.684],[35.8585,6.02],[32.7985,5.048],[28.5865,5.048],[28.5865,12.428]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.709,0.872],[63.709,4.94],[57.013,4.94],[57.013,26],[51.973,26],[51.973,4.94],[45.277,4.94],[45.277,0.872],[63.709,0.872]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill","c":{"a":0,"k":[0.1804,0.1882,0.2235]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1}]}]}
\ No newline at end of file
diff --git a/assets/images/svg/call_ambulance_icon.svg b/assets/images/svg/call_ambulance_icon.svg
new file mode 100644
index 0000000..de3bbc2
--- /dev/null
+++ b/assets/images/svg/call_ambulance_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/images/svg/nearest_er_icon.svg b/assets/images/svg/nearest_er_icon.svg
new file mode 100644
index 0000000..73637da
--- /dev/null
+++ b/assets/images/svg/nearest_er_icon.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/svg/rrt_icon.svg b/assets/images/svg/rrt_icon.svg
new file mode 100644
index 0000000..0530487
--- /dev/null
+++ b/assets/images/svg/rrt_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/images/svg/waiting_time_clock.svg b/assets/images/svg/waiting_time_clock.svg
new file mode 100644
index 0000000..6207841
--- /dev/null
+++ b/assets/images/svg/waiting_time_clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart
index 2cbe960..05ed866 100644
--- a/lib/core/api/api_client.dart
+++ b/lib/core/api/api_client.dart
@@ -174,7 +174,7 @@ class ApiClientImp implements ApiClient {
}
// body['TokenID'] = "@dm!n";
- // body['PatientID'] = 4772172;
+ // body['PatientID'] = 3966014;
// body['PatientTypeID'] = 1;
//
// body['PatientOutSA'] = 0;
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 9591cfe..ed2bba1 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -724,6 +724,8 @@ const DEACTIVATE_ACCOUNT = 'Services/Patients.svc/REST/PatientAppleActivation_In
const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatus';
+var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatbot_SendMedicationInstructionByWhatsApp';
+
class ApiConsts {
static const maxSmallScreen = 660;
@@ -733,6 +735,8 @@ class ApiConsts {
static String baseUrl = 'https://hmgwebservices.com/'; // HIS API URL PROD
+ static String RCBaseUrl = 'https://rc.hmg.com/'; // RC API URL PROD
+
static String SELECT_DEVICE_IMEI = 'Services/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI';
static num VERSION_ID = 18.9;
@@ -762,6 +766,7 @@ class ApiConsts {
TAMARA_URL = "https://mdlaboratories.com/tamaralive/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://mdlaboratories.com/tamaralive/Home/GetInstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/';
break;
case AppEnvironmentTypeEnum.dev:
baseUrl = "https://uat.hmgwebservices.com/";
@@ -771,6 +776,7 @@ class ApiConsts {
TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/test/';
break;
case AppEnvironmentTypeEnum.uat:
baseUrl = "https://uat.hmgwebservices.com/";
@@ -780,6 +786,7 @@ class ApiConsts {
TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/test/';
break;
case AppEnvironmentTypeEnum.preProd:
@@ -790,6 +797,7 @@ class ApiConsts {
TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/';
break;
case AppEnvironmentTypeEnum.qa:
baseUrl = "https://uat.hmgwebservices.com/";
@@ -799,6 +807,7 @@ class ApiConsts {
TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/test/';
break;
case AppEnvironmentTypeEnum.staging:
baseUrl = "https://uat.hmgwebservices.com/";
@@ -808,6 +817,7 @@ class ApiConsts {
TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
+ RCBaseUrl = 'https://rc.hmg.com/test/';
break;
}
}
@@ -827,18 +837,17 @@ class ApiConsts {
static final String insertPatientDeviceIMEIData = 'Services/Patients.svc/REST/Patient_INSERTDeviceIMEI';
static final String insertPatientMobileData = 'Services/MobileNotifications.svc/REST/Insert_PatientMobileDeviceInfo';
- static final String getPatientMobileData = '/Services/Authentication.svc/REST/GetMobileLoginInfo';
- static final String getPrivileges = 'Services/Patients.svc/REST/Service_Privilege';
- static final String registerUser = 'Services/Authentication.svc/REST/PatientRegistration';
-
- static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService';
- static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile';
- static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile';
- static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId';
- static final String getAllSharedRecordsByStatus = 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatus';
- static final String removeFileFromFamilyMembers = 'Services/Authentication.svc/REST/ActiveDeactive_PatientFile';
- static final String acceptAndRejectFamilyFile = 'Services/Authentication.svc/REST/Update_FileStatus';
-
+ static final String getPatientMobileData = '/Services/Authentication.svc/REST/GetMobileLoginInfo';
+ static final String getPrivileges = 'Services/Patients.svc/REST/Service_Privilege';
+ static final String registerUser = 'Services/Authentication.svc/REST/PatientRegistration';
+
+ static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService';
+ static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile';
+ static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile';
+ static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId';
+ static final String getAllSharedRecordsByStatus = 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatus';
+ static final String removeFileFromFamilyMembers = 'Services/Authentication.svc/REST/ActiveDeactive_PatientFile';
+ static final String acceptAndRejectFamilyFile = 'Services/Authentication.svc/REST/Update_FileStatus';
// static values for Api
static final double appVersionID = 18.7;
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 1e9eaa4..e194bb3 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -155,6 +155,10 @@ class AppAssets {
static const String switch_user = '$svgBasePath/switch_user.svg';
static const String activeCheck = '$svgBasePath/active-check.svg';
static const String deleteIcon = '$svgBasePath/delete_icon.svg';
+ static const String call_ambulance_icon = '$svgBasePath/call_ambulance_icon.svg';
+ static const String nearest_er_icon = '$svgBasePath/nearest_er_icon.svg';
+ static const String rrt_icon = '$svgBasePath/rrt_icon.svg';
+ static const String waiting_time_clock = '$svgBasePath/waiting_time_clock.svg';
//bottom navigation//
static const String homeBottom = '$svgBasePath/home_bottom.svg';
@@ -199,4 +203,8 @@ class AppAnimations {
static const String noData = '$lottieBasePath/Nodata.json';
static const String ripple = '$lottieBasePath/Ripple.json';
static const String pending_loading_animation = '$lottieBasePath/pending_loading_animation.json';
+
+ static const String ambulance = '$lottieBasePath/ambulance.json';
+ static const String ambulance_alert = '$lottieBasePath/ambulance_alert.json';
+ static const String rrt_ambulance = '$lottieBasePath/rrt_ambulance.json';
}
diff --git a/lib/core/common_models/data_points.dart b/lib/core/common_models/data_points.dart
index c35d190..3f5065c 100644
--- a/lib/core/common_models/data_points.dart
+++ b/lib/core/common_models/data_points.dart
@@ -8,6 +8,7 @@ class DataPoint {
String label;
String referenceValue;
String actualValue;
+ String? unitOfMeasurement ;
DateTime time;
String displayTime;
@@ -18,6 +19,7 @@ class DataPoint {
required this.actualValue,
required this.time,
required this.displayTime,
+ this.unitOfMeasurement
});
@override
diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart
index 7337dfa..a82a9ad 100644
--- a/lib/core/dependencies.dart
+++ b/lib/core/dependencies.dart
@@ -9,6 +9,8 @@ import 'package:hmg_patient_app_new/features/book_appointments/book_appointments
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/common/common_repo.dart';
import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_repo.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_repo.dart';
import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_repo.dart';
@@ -38,6 +40,7 @@ import 'package:hmg_patient_app_new/services/localauth_service.dart';
import 'package:hmg_patient_app_new/services/logger_service.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
+import 'package:http/http.dart';
import 'package:local_auth/local_auth.dart';
import 'package:logger/web.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -99,6 +102,7 @@ class AppDependencies {
getIt.registerLazySingleton(() => HabibWalletRepoImp(loggerService: getIt(), apiClient: getIt()));
getIt.registerLazySingleton(() => MedicalFileRepoImp(loggerService: getIt(), apiClient: getIt()));
getIt.registerLazySingleton(() => ImmediateLiveCareRepoImp(loggerService: getIt(), apiClient: getIt()));
+ getIt.registerLazySingleton(() => EmergencyServicesRepoImp(loggerService: getIt(), apiClient: getIt()));
// ViewModels
// Global/shared VMs → LazySingleton
@@ -165,12 +169,6 @@ class AppDependencies {
myAppointmentsViewModel: getIt(),
),
);
- getIt.registerLazySingleton(
- () => AppointmentViaRegionViewmodel(
- navigationService: getIt(),
- appState: getIt(),
- ),
- );
getIt.registerLazySingleton(
() => AuthenticationViewModel(
@@ -187,7 +185,21 @@ class AppDependencies {
);
getIt.registerLazySingleton(
- () => AppointmentViaRegionViewmodel(navigationService: getIt(), appState: getIt()),
+ () =>
+ AppointmentViaRegionViewmodel(
+ navigationService: getIt(),
+ appState: getIt(),
+ ),
+ );
+
+ getIt.registerLazySingleton(
+ () => EmergencyServicesViewModel(
+ locationUtils: getIt(),
+ navServices: getIt(),
+ emergencyServicesRepo: getIt(),
+ appState: getIt(),
+ errorHandlerService: getIt(),
+ ),
);
// Screen-specific VMs → Factory
diff --git a/lib/core/location_util.dart b/lib/core/location_util.dart
index db8bef4..487b228 100644
--- a/lib/core/location_util.dart
+++ b/lib/core/location_util.dart
@@ -1,16 +1,20 @@
import 'dart:io';
import 'dart:ui';
+import 'package:easy_localization/easy_localization.dart';
import 'package:geolocator/geolocator.dart';
import 'package:gms_check/gms_check.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/cache_consts.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:huawei_location/huawei_location.dart' as HmsLocation show FusedLocationProviderClient, Location, LocationSettingsRequest, LocationRequest;
import 'package:location/location.dart' show Location, PermissionStatus, LocationData;
-import 'package:permission_handler/permission_handler.dart' show Permission, PermissionListActions, PermissionStatusGetters;
+import 'package:permission_handler/permission_handler.dart' show Permission, PermissionListActions, PermissionStatusGetters, openAppSettings;
class LocationUtils {
NavigationService navigationService;
@@ -32,21 +36,60 @@ class LocationUtils {
isGMSDevice = GmsCheck().checkGmsAvailability();
}
- void getLocation({Function(LatLng)? onSuccess, VoidCallback? onFailure}) async {
+ // final defaultCallbackForLocationDenied = (){
+ // showCommonBottomSheetWithoutHeight(
+ // title: LocaleKeys.notice.tr(context: navigationService.navigatorKey.currentContext!),
+ // navigationService.navigatorKey.currentContext!,
+ // child: Utils.getWarningWidget(
+ // loadingText:
+ // "Please grant location permission from app settings to see better results"
+ // .needTranslation,
+ // isShowActionButtons: true,
+ // onCancelTap: () {
+ // navigationService.pop();
+ // },
+ // onConfirmTap: () async {
+ // navigationService.pop();
+ // openAppSettings();
+ // }),
+ // callBackFunc: () {},
+ // isFullScreen: false,
+ // isCloseButtonVisible: true,
+ // );
+ // }
+
+ void getLocation(
+ {Function(LatLng)? onSuccess,
+ VoidCallback? onFailure,
+ bool isShowConfirmDialog = false,
+ VoidCallback? onLocationDeniedForever}) async {
+ this.isShowConfirmDialog = isShowConfirmDialog;
if (Platform.isIOS) {
- getCurrentLocation(onFailure: onFailure, onSuccess: onSuccess);
+ getCurrentLocation(
+ onFailure: onFailure,
+ onSuccess: onSuccess,
+ onLocationDeniedForever: onLocationDeniedForever);
return;
}
if (await isGMSDevice ?? true) {
- getCurrentLocation(onFailure: onFailure, onSuccess: onSuccess);
+ getCurrentLocation(
+ onFailure: onFailure,
+ onSuccess: onSuccess,
+ onLocationDeniedForever: onLocationDeniedForever);
return;
}
- getHMSLocation(onFailure: onFailure, onSuccess: onSuccess);
+ getHMSLocation(
+ onFailure: onFailure,
+ onSuccess: onSuccess,
+ onLocationDeniedForever: onLocationDeniedForever);
}
- void getCurrentLocation({Function(LatLng)? onSuccess, VoidCallback? onFailure}) async {
+ void getCurrentLocation(
+ {Function(LatLng)? onSuccess,
+ VoidCallback? onFailure,
+ VoidCallback? onLocationDeniedForever}) async {
var location = Location();
bool isLocationEnabled = await location.serviceEnabled();
@@ -68,6 +111,31 @@ class LocationUtils {
onFailure?.call();
return;
}
+ } else if (permissionGranted == LocationPermission.deniedForever) {
+ appState.resetLocation();
+ if(onLocationDeniedForever == null && isShowConfirmDialog){
+ showCommonBottomSheetWithoutHeight(
+ title: LocaleKeys.notice.tr(context: navigationService.navigatorKey.currentContext!),
+ navigationService.navigatorKey.currentContext!,
+ child: Utils.getWarningWidget(
+ loadingText:
+ "Please grant location permission from app settings to see better results"
+ .needTranslation,
+ isShowActionButtons: true,
+ onCancelTap: () {
+ navigationService.pop();
+ },
+ onConfirmTap: () async {
+ navigationService.pop();
+ openAppSettings();
+ }),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ }
+ onLocationDeniedForever?.call();
+ return;
}
Position? currentLocation = await Geolocator.getLastKnownPosition();
@@ -185,7 +253,10 @@ class LocationUtils {
appState.userLong = locationData.longitude;
}
- void getHMSLocation({VoidCallback? onFailure, Function(LatLng p1)? onSuccess}) async {
+ void getHMSLocation(
+ {VoidCallback? onFailure,
+ Function(LatLng p1)? onSuccess,
+ VoidCallback? onLocationDeniedForever}) async {
try {
var location = Location();
HmsLocation.FusedLocationProviderClient locationService = HmsLocation.FusedLocationProviderClient()..initFusedLocationService();
@@ -206,7 +277,32 @@ class LocationUtils {
LocationPermission permissionGranted = await Geolocator.checkPermission();
if (permissionGranted == LocationPermission.denied) {
permissionGranted = await Geolocator.requestPermission();
- if (permissionGranted != LocationPermission.whileInUse && permissionGranted != LocationPermission.always) {
+ if (permissionGranted == LocationPermission.deniedForever) {
+ appState.resetLocation();
+ if(onLocationDeniedForever == null && isShowConfirmDialog){
+ showCommonBottomSheetWithoutHeight(
+ title: LocaleKeys.notice.tr(context: navigationService.navigatorKey.currentContext!),
+ navigationService.navigatorKey.currentContext!,
+ child: Utils.getWarningWidget(
+ loadingText:
+ "Please grant location permission from app settings to see better results"
+ .needTranslation,
+ isShowActionButtons: true,
+ onCancelTap: () {
+ navigationService.pop();
+ },
+ onConfirmTap: () async {
+ navigationService.pop();
+ openAppSettings();
+ }),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ }
+ onLocationDeniedForever?.call();
+ return;
+ } else if (permissionGranted != LocationPermission.whileInUse && permissionGranted != LocationPermission.always) {
appState.resetLocation();
onFailure?.call();
return;
diff --git a/lib/core/utils/debouncer.dart b/lib/core/utils/debouncer.dart
new file mode 100644
index 0000000..529e0a3
--- /dev/null
+++ b/lib/core/utils/debouncer.dart
@@ -0,0 +1,19 @@
+import 'dart:async';
+import 'dart:ui';
+
+class Debouncer {
+ final int milliseconds;
+ VoidCallback? action;
+ Timer? _timer;
+
+ Debouncer({required this.milliseconds});
+
+ void run(VoidCallback action) {
+ _timer?.cancel();
+ _timer = Timer(Duration(milliseconds: milliseconds), action);
+ }
+
+ void dispose() {
+ _timer?.cancel();
+ }
+}
\ No newline at end of file
diff --git a/lib/core/utils/push_notification_handler.dart b/lib/core/utils/push_notification_handler.dart
index f59d657..2e0d7c3 100644
--- a/lib/core/utils/push_notification_handler.dart
+++ b/lib/core/utils/push_notification_handler.dart
@@ -15,7 +15,6 @@ import 'package:flutter_ios_voip_kit_karmm/flutter_ios_voip_kit.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:hmg_patient_app_new/core/utils/local_notifications.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
-import 'package:hmg_patient_app_new/services/cache_service.dart';
import 'package:permission_handler/permission_handler.dart';
import '../cache_consts.dart';
@@ -355,7 +354,6 @@ class PushNotificationHandler {
}
onToken(String token) async {
-
print("Push Notification Token: " + token);
await Utils.saveStringFromPrefs(CacheConst.pushToken, token);
}
@@ -370,7 +368,9 @@ class PushNotificationHandler {
Future requestPermissions() async {
try {
if (Platform.isIOS) {
- await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions(alert: true, badge: true, sound: true);
+ await flutterLocalNotificationsPlugin
+ .resolvePlatformSpecificImplementation()
+ ?.requestPermissions(alert: true, badge: true, sound: true);
} else if (Platform.isAndroid) {
Map statuses = await [
Permission.notification,
diff --git a/lib/core/utils/size_utils.dart b/lib/core/utils/size_utils.dart
index e569021..dbe6f2f 100644
--- a/lib/core/utils/size_utils.dart
+++ b/lib/core/utils/size_utils.dart
@@ -1,25 +1,41 @@
+import 'dart:developer';
+
import 'package:flutter/material.dart'; // These are the Viewport values of your Figma Design.
// These are used in the code as a reference to create your UI Responsively.
-final num FIGMA_DESIGN_WIDTH = SizeUtils.width;
-final num FIGMA_DESIGN_HEIGHT = SizeUtils.height;
-const num FIGMA_DESIGN_STATUS_BAR = 0;
+const num figmaDesignWidth = 375; // iPhone X / 12 base width
+const num figmaDesignHeight = 812; // iPhone X / 12 base height
extension ResponsiveExtension on num {
- double get _width => SizeUtils.width;
+ double get _screenWidth => SizeUtils.width;
- double get h => ((this * _width) / FIGMA_DESIGN_WIDTH);
+ double get _screenHeight => SizeUtils.height;
- double get fSize => ((this * _width) / FIGMA_DESIGN_WIDTH);
- static double get screenHeight => SizeUtils.height;
+ /// Scale horizontally (width-based)
+ double get w => (this * _screenWidth) / figmaDesignWidth;
+
+ /// Scale vertically (height-based)
+ double get h => (this * _screenHeight) / figmaDesignHeight;
+
+ //radius
+ double get r => (this * _screenWidth) / figmaDesignWidth;
+
+ /// Scale text size
+ double get f {
+ double scale = _screenWidth / figmaDesignWidth;
+ if (scale > 1.6) scale = 1.6; // optional clamp for tablets
+ return this * scale;
+ }
- /// Full screen width
+ /// Optional: direct accessors for full width/height
static double get screenWidth => SizeUtils.width;
+
+ static double get screenHeight => SizeUtils.height;
}
extension FormatExtension on double {
double toDoubleValue({int fractionDigits = 2}) {
- return double.parse(this.toStringAsFixed(fractionDigits));
+ return double.parse(toStringAsFixed(fractionDigits));
}
double isNonZero({num defaultValue = 0.0}) {
@@ -36,7 +52,7 @@ typedef ResponsiveBuild = Widget Function(
);
class Sizer extends StatelessWidget {
- const Sizer({Key? key, required this.builder}) : super(key: key);
+ const Sizer({super.key, required this.builder});
/// Builds the widget whenever the orientation changes.
final ResponsiveBuild builder;
@@ -81,17 +97,46 @@ class SizeUtils {
) {
boxConstraints = constraints;
orientation = currentOrientation;
+
+ double screenWidth;
+ double screenHeight;
+
if (orientation == Orientation.portrait) {
- width = boxConstraints.maxWidth.isNonZero(
- defaultValue: FIGMA_DESIGN_WIDTH,
+ screenWidth = boxConstraints.maxWidth.isNonZero(
+ defaultValue: figmaDesignWidth,
);
- height = boxConstraints.maxHeight.isNonZero();
+ screenHeight = boxConstraints.maxHeight.isNonZero();
} else {
- width = boxConstraints.maxHeight.isNonZero(
- defaultValue: FIGMA_DESIGN_WIDTH,
+ screenWidth = boxConstraints.maxHeight.isNonZero(
+ defaultValue: figmaDesignWidth,
);
- height = boxConstraints.maxWidth.isNonZero();
+ screenHeight = boxConstraints.maxWidth.isNonZero();
}
- deviceType = DeviceType.mobile;
+
+ width = screenWidth;
+ height = screenHeight;
+
+ // Fix device type detection
+ double longerSide = screenWidth > screenHeight ? screenWidth : screenHeight;
+ double shorterSide = screenWidth < screenHeight ? screenWidth : screenHeight;
+
+ if (longerSide >= 1200) {
+ deviceType = DeviceType.tablet;
+ } else if (shorterSide >= 700) {
+ // Use shorter side to distinguish tablets (iPads typically have 768+ width)
+ deviceType = DeviceType.tablet;
+ } else {
+ deviceType = DeviceType.mobile;
+ }
+
+ log("longerSide: $longerSide");
+ log("isTablet: $isTablet");
}
}
+
+// Or create a helper method
+bool get isTablet => SizeUtils.deviceType == DeviceType.tablet;
+
+bool get isMobile => SizeUtils.deviceType == DeviceType.mobile;
+
+bool get isDesktop => SizeUtils.deviceType == DeviceType.desktop;
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index c4a2db8..a88d9c2 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
+import 'dart:math' as dartMath;
import 'dart:typed_data';
import 'package:connectivity_plus/connectivity_plus.dart';
@@ -27,8 +28,6 @@ import 'package:lottie/lottie.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'dart:math' as dartMath;
-
class Utils {
static AppState appState = getIt.get();
static NavigationService navigationService = getIt.get();
@@ -67,8 +66,10 @@ class Utils {
// ),
// ));
return !isAddHours
- ? DateFormat('hh:mm a', appState.isArabic() ? "ar_SA" : "en_US").format(DateTime.tryParse(startTime.contains("T") ? startTime : convertStringToDateTime(startTime))!.toLocal())
- : DateFormat('hh:mm a', appState.isArabic() ? "ar_SA" : "en_US").format(DateTime.tryParse(startTime.contains("T") ? startTime : convertStringToDateTime(startTime))!.add(
+ ? DateFormat('hh:mm a', appState.isArabic() ? "ar_SA" : "en_US")
+ .format(DateTime.tryParse(startTime.contains("T") ? startTime : convertStringToDateTime(startTime))!.toLocal())
+ : DateFormat('hh:mm a', appState.isArabic() ? "ar_SA" : "en_US")
+ .format(DateTime.tryParse(startTime.contains("T") ? startTime : convertStringToDateTime(startTime))!.add(
Duration(
hours: isAddHours ? 3 : 0,
),
@@ -301,7 +302,14 @@ class Utils {
return false;
}
- static Widget getNoDataWidget(BuildContext context, {double width = 124, double height = 124, String? noDataText, Widget callToActionButton = const SizedBox.shrink(), bool isSmallWidget = false}) {
+ static Widget getNoDataWidget(
+ BuildContext context, {
+ double width = 124,
+ double height = 124,
+ String? noDataText,
+ Widget callToActionButton = const SizedBox.shrink(),
+ bool isSmallWidget = false,
+ }) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
@@ -309,7 +317,9 @@ class Utils {
SizedBox(height: isSmallWidget ? 0.h : 48.h),
Lottie.asset(AppAnimations.noData, repeat: false, reverse: false, frameRate: FrameRate(60), width: width.h, height: height.h, fit: BoxFit.fill),
SizedBox(height: 16.h),
- (noDataText ?? LocaleKeys.noDataAvailable.tr()).toText16(weight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true).paddingSymmetrical(64.h, 0.h),
+ (noDataText ?? LocaleKeys.noDataAvailable.tr())
+ .toText16(weight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true)
+ .paddingSymmetrical(64.w, 0.h),
SizedBox(height: 16.h),
callToActionButton
],
@@ -461,8 +471,10 @@ class Utils {
}
// Replace HTML line breaks with newlines
- var withLineBreaks =
- htmlString.replaceAll(RegExp(r'
', multiLine: true), '\n').replaceAll(RegExp(r'<\/p>', multiLine: true), '\n').replaceAll(RegExp(r'', multiLine: true), '\n');
+ var withLineBreaks = htmlString
+ .replaceAll(RegExp(r'
', multiLine: true), '\n')
+ .replaceAll(RegExp(r'<\/p>', multiLine: true), '\n')
+ .replaceAll(RegExp(r'', multiLine: true), '\n');
// Remove all other HTML tags
var withoutTags = withLineBreaks.replaceAll(RegExp(r'<[^>]*>'), '');
@@ -540,7 +552,20 @@ class Utils {
final year = parts[0];
// Map month number to short month name (Hijri months)
- const hijriMonthNames = ['Muharram', 'Safar', 'Rabi I', 'Rabi II', 'Jumada I', 'Jumada II', 'Rajab', 'Sha\'ban', 'Ramadan', 'Shawwal', 'Dhu al-Qi\'dah', 'Dhu al-Hijjah'];
+ const hijriMonthNames = [
+ 'Muharram',
+ 'Safar',
+ 'Rabi I',
+ 'Rabi II',
+ 'Jumada I',
+ 'Jumada II',
+ 'Rajab',
+ 'Sha\'ban',
+ 'Ramadan',
+ 'Shawwal',
+ 'Dhu al-Qi\'dah',
+ 'Dhu al-Hijjah'
+ ];
final monthIndex = int.tryParse(parts[1]) ?? 1;
final month = hijriMonthNames[monthIndex - 1];
@@ -626,29 +651,36 @@ class Utils {
required String icon,
Color? iconColor,
bool isDisabled = false,
- double width = 24,
- double height = 24,
+ double? width,
+ double? height,
BoxFit fit = BoxFit.cover,
double? border,
double? borderRadius,
}) {
+ final iconH = height ?? 24.h;
+ final iconW = width ?? 24.w;
return Container(
decoration: BoxDecoration(
border: border != null ? Border.all(color: AppColors.whiteColor, width: border) : null,
borderRadius: border != null ? BorderRadius.circular(borderRadius ?? 0) : null,
),
- child: Image.asset(icon, width: width, height: height, fit: fit),
+ child: Image.asset(icon, width: iconW, height: iconH, fit: fit),
);
// return Image.asset(icon, width: width, height: height, fit: fit, );
}
/// Widget to build an SVG from network
- static Widget buildImgWithNetwork({required String url, required Color iconColor, bool isDisabled = false, double width = 24, double height = 24, BoxFit fit = BoxFit.cover}) {
+ static Widget buildImgWithNetwork({required String url, required Color iconColor, bool isDisabled = false, double width = 24, double height = 24, BoxFit fit = BoxFit.cover, ImageErrorWidgetBuilder? errorBuilder}) {
return Image.network(
url,
width: width,
height: height,
fit: fit,
+ errorBuilder: errorBuilder??(_,__,___){
+ //todo change the error builder icon that it is returning
+ return Utils.buildSvgWithAssets(width: width,
+ height: height,icon: AppAssets.no_visit_icon);
+ },
);
}
@@ -657,16 +689,17 @@ class Utils {
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Image.asset(AppAssets.mada, width: 25, height: 25),
- Image.asset(AppAssets.tamara_en, width: 25, height: 25),
- Image.asset(AppAssets.visa, width: 25, height: 25),
- Image.asset(AppAssets.Mastercard, width: 25, height: 25),
- Image.asset(AppAssets.apple_pay, width: 25, height: 25),
+ Image.asset(AppAssets.mada, width: 25.h, height: 25.h),
+ Image.asset(AppAssets.tamara_en, width: 25.h, height: 25.h),
+ Image.asset(AppAssets.visa, width: 25.h, height: 25.h),
+ Image.asset(AppAssets.Mastercard, width: 25.h, height: 25.h),
+ Image.asset(AppAssets.apple_pay, width: 25.h, height: 25.h),
],
);
}
- static Widget getPaymentAmountWithSymbol(Widget paymentAmountWidget, Color iconColor, double iconSize, {bool isSaudiCurrency = true, bool isExpanded = true}) {
+ static Widget getPaymentAmountWithSymbol(Widget paymentAmountWidget, Color iconColor, double iconSize,
+ {bool isSaudiCurrency = true, bool isExpanded = true}) {
return Row(
mainAxisAlignment: isExpanded ? MainAxisAlignment.spaceBetween : MainAxisAlignment.start,
children: [
@@ -696,7 +729,11 @@ class Utils {
}
static Widget getPaymentAmountWithSymbol2(num habibWalletAmount,
- {double iconSize = 14, Color iconColor = AppColors.textColor, Color textColor = AppColors.blackColor, bool isSaudiCurrency = true, bool isExpanded = true}) {
+ {double iconSize = 14,
+ Color iconColor = AppColors.textColor,
+ Color textColor = AppColors.blackColor,
+ bool isSaudiCurrency = true,
+ bool isExpanded = true}) {
return RichText(
maxLines: 1,
text: TextSpan(
@@ -708,7 +745,7 @@ class Utils {
),
TextSpan(
text: " $habibWalletAmount",
- style: TextStyle(color: textColor, fontSize: 32.fSize, letterSpacing: -4, fontWeight: FontWeight.w600, height: 1),
+ style: TextStyle(color: textColor, fontSize: 32.f, letterSpacing: -4, fontWeight: FontWeight.w600, height: 1),
),
],
),
@@ -766,5 +803,4 @@ class Utils {
}
return isHavePrivilege;
}
-
}
diff --git a/lib/core/utils/validation_utils.dart b/lib/core/utils/validation_utils.dart
index 4f02ad9..7e38300 100644
--- a/lib/core/utils/validation_utils.dart
+++ b/lib/core/utils/validation_utils.dart
@@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
-import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
@@ -102,7 +101,8 @@ class ValidationUtils {
return regex.hasMatch(id);
}
- static bool validateUaeRegistration({String? name, GenderTypeEnum? gender, NationalityCountries? country, MaritalStatusTypeEnum? maritalStatus, required Function() onOkPress}) {
+ static bool validateUaeRegistration(
+ {String? name, GenderTypeEnum? gender, NationalityCountries? country, MaritalStatusTypeEnum? maritalStatus, required Function() onOkPress}) {
if (name == null || name.isEmpty) {
_dialogService.showExceptionBottomSheet(message: LocaleKeys.pleaseEnterAValidName.tr(), onOkPressed: onOkPress);
return false;
@@ -141,7 +141,8 @@ class ValidationUtils {
return true;
}
- static bool isValidatedIdAndPhoneWithCountryValidation({String? nationalId, String? phoneNumber, required Function() onOkPress, CountryEnum? selectedCountry}) {
+ static bool isValidatedIdAndPhoneWithCountryValidation(
+ {String? nationalId, String? phoneNumber, required Function() onOkPress, CountryEnum? selectedCountry}) {
bool isCorrectID = true;
if (nationalId == null || nationalId.isEmpty) {
_dialogService.showExceptionBottomSheet(message: LocaleKeys.pleaseEnterAnationalID.tr(), onOkPressed: onOkPress);
diff --git a/lib/extensions/context_extensions.dart b/lib/extensions/context_extensions.dart
index 27d4cf4..27ff428 100644
--- a/lib/extensions/context_extensions.dart
+++ b/lib/extensions/context_extensions.dart
@@ -5,11 +5,10 @@ extension ContextUtils on BuildContext {
double get screenWidth => MediaQuery.of(this).size.width;
- EdgeInsets get padding => MediaQuery.of(this).padding;
+ EdgeInsets get padding => MediaQuery.of(this).padding;
bool get safeInsets => padding.top > 0 || padding.bottom > 0 || padding.left > 0 || padding.right > 0;
-
ThemeData get theme => Theme.of(this);
TextTheme get textTheme => theme.textTheme;
@@ -24,9 +23,18 @@ extension ContextUtils on BuildContext {
}
extension ShowBottomSheet on BuildContext {
- Future showBottomSheet({isScrollControlled = true, isDismissible = false, required Widget child, Color? backgroundColor, enableDra = false, useSafeArea = false}) {
+ Future showBottomSheet({
+ isScrollControlled = true,
+ isDismissible = false,
+ required Widget child,
+ Color? backgroundColor,
+ enableDra = false,
+ useSafeArea = false,
+ BoxConstraints? constraints,
+ }) {
return showModalBottomSheet(
context: this,
+ constraints: constraints,
isScrollControlled: isScrollControlled,
isDismissible: isDismissible,
enableDrag: enableDra,
diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart
index 4432737..030770a 100644
--- a/lib/extensions/string_extensions.dart
+++ b/lib/extensions/string_extensions.dart
@@ -1,23 +1,23 @@
+import 'package:auto_size_text/auto_size_text.dart';
+import 'package:flutter/cupertino.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
-import 'package:auto_size_text/auto_size_text.dart';
-import 'package:flutter/cupertino.dart';
-import 'package:intl/intl.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:intl/intl.dart';
extension CapExtension on String {
- String get toCamelCase => "${this[0].toUpperCase()}${this.substring(1)}";
+ String get toCamelCase => "${this[0].toUpperCase()}${substring(1)}";
- String get inCaps => '${this[0].toUpperCase()}${this.substring(1)}';
+ String get inCaps => '${this[0].toUpperCase()}${substring(1)}';
- String get allInCaps => this.toUpperCase();
+ String get allInCaps => toUpperCase();
String get needTranslation => this;
- String get capitalizeFirstofEach => this.trim().length > 0 ? this.trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : "";
+ String get capitalizeFirstofEach => trim().isNotEmpty ? trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : "";
}
extension EmailValidator on String {
@@ -28,7 +28,7 @@ extension EmailValidator on String {
maxLines: maxlines,
overflow: textOverflow,
style: TextStyle(
- fontSize: 8.fSize,
+ fontSize: 8.f,
fontStyle: fontStyle ?? FontStyle.normal,
fontWeight: isBold ? FontWeight.bold : FontWeight.normal,
color: color ?? AppColors.blackColor,
@@ -36,12 +36,21 @@ extension EmailValidator on String {
),
);
- Widget toText10({Color? color, FontWeight? weight, bool isBold = false, bool isUnderLine = false, int? maxlines, FontStyle? fontStyle, TextOverflow? textOverflow, double letterSpacing = 0}) => Text(
+ Widget toText10(
+ {Color? color,
+ FontWeight? weight,
+ bool isBold = false,
+ bool isUnderLine = false,
+ int? maxlines,
+ FontStyle? fontStyle,
+ TextOverflow? textOverflow,
+ double letterSpacing = 0}) =>
+ Text(
this,
maxLines: maxlines,
overflow: textOverflow,
style: TextStyle(
- fontSize: 10.fSize,
+ fontSize: 10.f,
fontStyle: fontStyle ?? FontStyle.normal,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal),
color: color ?? AppColors.blackColor,
@@ -50,13 +59,21 @@ extension EmailValidator on String {
decorationColor: color ?? AppColors.blackColor),
);
- Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isCenter = false, bool isBold = false, int maxLine = 0, double letterSpacing = 0}) => Text(
+ Widget toText11(
+ {Color? color,
+ FontWeight? weight,
+ bool isUnderLine = false,
+ bool isCenter = false,
+ bool isBold = false,
+ int maxLine = 0,
+ double letterSpacing = 0}) =>
+ Text(
this,
textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null,
softWrap: true,
style: TextStyle(
- fontSize: 11.fSize,
+ fontSize: 11.f,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal),
color: color ?? AppColors.blackColor,
letterSpacing: letterSpacing,
@@ -64,12 +81,21 @@ extension EmailValidator on String {
),
);
- Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? fontWeight, bool isCenter = false, double? height, int maxLine = 0}) => Text(
+ Widget toText12(
+ {Color? color,
+ bool isUnderLine = false,
+ TextAlign textAlignment = TextAlign.start,
+ bool isBold = false,
+ FontWeight? fontWeight,
+ bool isCenter = false,
+ double? height,
+ int maxLine = 0}) =>
+ Text(
this,
- textAlign: isCenter ? TextAlign.center : null,
+ textAlign: isCenter ? TextAlign.center : textAlignment,
maxLines: (maxLine > 0) ? maxLine : null,
style: TextStyle(
- fontSize: 12.fSize,
+ fontSize: 12.f,
fontWeight: fontWeight ?? (isBold ? FontWeight.bold : FontWeight.normal),
color: color ?? AppColors.blackColor,
letterSpacing: 0,
@@ -85,7 +111,7 @@ extension EmailValidator on String {
maxLines: (maxLine > 0) ? maxLine : null,
minFontSize: 8,
style: TextStyle(
- fontSize: 12.fSize,
+ fontSize: 12.f,
fontWeight: isBold ? FontWeight.bold : FontWeight.normal,
color: color ?? AppColors.blackColor,
letterSpacing: 0,
@@ -121,12 +147,20 @@ extension EmailValidator on String {
),
);
- Widget toText13({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0, FontWeight? weight, double? letterSpacing = 0}) => Text(
+ Widget toText13(
+ {Color? color,
+ bool isUnderLine = false,
+ bool isBold = false,
+ bool isCenter = false,
+ int maxLine = 0,
+ FontWeight? weight,
+ double? letterSpacing = 0}) =>
+ Text(
this,
textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null,
style: TextStyle(
- fontSize: 13.fSize,
+ fontSize: 13.f,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal),
color: color ?? AppColors.blackColor,
letterSpacing: letterSpacing,
@@ -150,20 +184,28 @@ extension EmailValidator on String {
overflow: textOverflow,
style: TextStyle(
color: color ?? AppColors.blackColor,
- fontSize: 14.fSize,
+ fontSize: 14.f,
letterSpacing: letterSpacing,
height: height,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal),
decoration: isUnderLine ? TextDecoration.underline : null),
);
- Widget toText15({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, FontWeight? weight, int? maxlines, double? letterSpacing = -1}) => Text(
+ Widget toText15(
+ {Color? color,
+ bool isUnderLine = false,
+ bool isBold = false,
+ bool isCenter = false,
+ FontWeight? weight,
+ int? maxlines,
+ double? letterSpacing = -1}) =>
+ Text(
this,
textAlign: isCenter ? TextAlign.center : null,
maxLines: maxlines,
style: TextStyle(
color: color ?? AppColors.blackColor,
- fontSize: 15.fSize,
+ fontSize: 15.f,
letterSpacing: letterSpacing,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal),
decoration: isUnderLine ? TextDecoration.underline : null),
@@ -187,7 +229,7 @@ extension EmailValidator on String {
textAlign: isCenter ? TextAlign.center : null,
style: TextStyle(
color: color ?? AppColors.blackColor,
- fontSize: 16.fSize,
+ fontSize: 16.f,
letterSpacing: letterSpacing,
height: height,
overflow: textOverflow,
@@ -199,7 +241,7 @@ extension EmailValidator on String {
Widget toText17({Color? color, bool isBold = false, bool isCenter = false}) => Text(
this,
textAlign: isCenter ? TextAlign.center : null,
- style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 17.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 17.f, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toText18({Color? color, FontWeight? weight, bool isBold = false, bool isCenter = false, int? maxlines, TextOverflow? textOverflow}) => Text(
@@ -207,35 +249,40 @@ extension EmailValidator on String {
textAlign: isCenter ? TextAlign.center : null,
this,
overflow: textOverflow,
- style: TextStyle(fontSize: 18.fSize, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, letterSpacing: -0.4),
+ style: TextStyle(
+ fontSize: 18.f, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, letterSpacing: -0.4),
);
Widget toText19({Color? color, bool isBold = false}) => Text(
this,
- style: TextStyle(fontSize: 19.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4),
+ style: TextStyle(fontSize: 19.f, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4),
);
Widget toText20({Color? color, FontWeight? weight, bool isBold = false}) => Text(
this,
- style: TextStyle(fontSize: 20.fSize, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, letterSpacing: -0.4),
+ style: TextStyle(
+ fontSize: 20.f, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, letterSpacing: -0.4),
);
Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text(
this,
maxLines: maxlines,
- style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 21.fSize, letterSpacing: -1, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)),
+ style: TextStyle(
+ color: color ?? AppColors.blackColor, fontSize: 21.f, letterSpacing: -1, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)),
);
Widget toText22({Color? color, bool isBold = false, bool isCenter = false}) => Text(
this,
textAlign: isCenter ? TextAlign.center : null,
- style: TextStyle(height: 1, color: color ?? AppColors.blackColor, fontSize: 22.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(
+ height: 1, color: color ?? AppColors.blackColor, fontSize: 22.f, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toText24({Color? color, bool isBold = false, bool isCenter = false}) => Text(
this,
textAlign: isCenter ? TextAlign.center : null,
- style: TextStyle(height: 23 / 24, color: color ?? AppColors.blackColor, fontSize: 24.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(
+ height: 23 / 24, color: color ?? AppColors.blackColor, fontSize: 24.f, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toText26({Color? color, bool isBold = false, double? height, bool isCenter = false, FontWeight? weight, double? letterSpacing}) => Text(
@@ -244,7 +291,7 @@ extension EmailValidator on String {
style: TextStyle(
height: height ?? 23 / 26,
color: color ?? AppColors.blackColor,
- fontSize: 26.fSize,
+ fontSize: 26.f,
letterSpacing: letterSpacing ?? -1,
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)),
);
@@ -252,18 +299,25 @@ extension EmailValidator on String {
Widget toText28({Color? color, bool isBold = false, double? height, bool isCenter = false}) => Text(
this,
textAlign: isCenter ? TextAlign.center : null,
- style: TextStyle(height: height ?? 23 / 28, color: color ?? AppColors.blackColor, fontSize: 28.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(
+ height: height ?? 23 / 28,
+ color: color ?? AppColors.blackColor,
+ fontSize: 28.f,
+ letterSpacing: -1,
+ fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toText32({Color? color, bool isBold = false, bool isCenter = false}) => Text(
this,
textAlign: isCenter ? TextAlign.center : null,
- style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 32.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(
+ height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 32.f, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toText44({Color? color, bool isBold = false}) => Text(
this,
- style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 44.fSize, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
+ style: TextStyle(
+ height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 44.f, letterSpacing: -1, fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
);
Widget toSectionHeading({String upperHeading = "", String lowerHeading = ""}) {
@@ -299,12 +353,14 @@ extension EmailValidator on String {
}
bool isValidEmail() {
- return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this);
+ return RegExp(
+ r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
+ .hasMatch(this);
}
String toFormattedDate() {
- String date = this.split("T")[0];
- String time = this.split("T")[1];
+ String date = split("T")[0];
+ String time = split("T")[1];
var dates = date.split("-");
return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}";
}
diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart
index 02b0723..8be2b8e 100644
--- a/lib/features/authentication/authentication_view_model.dart
+++ b/lib/features/authentication/authentication_view_model.dart
@@ -457,6 +457,7 @@ class AuthenticationViewModel extends ChangeNotifier {
int? patientID,
}) async {
bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1);
+ MyAppointmentsViewModel myAppointmentsVM = getIt();
final request = RequestUtils.getCommonRequestWelcome(
phoneNumber: phoneNumberController.text,
@@ -587,6 +588,7 @@ class AuthenticationViewModel extends ChangeNotifier {
}
// _appState.setUserBloodGroup = (activation.patientBlodType ?? "");
_appState.setAppAuthToken = activation.authenticationTokenId;
+ myAppointmentsVM.getActiveAppointmentsCount();
final request = RequestUtils.getAuthanticatedCommonRequest().toJson();
bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request);
@@ -607,7 +609,6 @@ class AuthenticationViewModel extends ChangeNotifier {
LoaderBottomSheet.hideLoader();
navigateToHomeScreen();
} else {
- MyAppointmentsViewModel myAppointmentsVM = getIt();
myAppointmentsVM.setIsAppointmentDataToBeLoaded(true);
LoaderBottomSheet.hideLoader();
navigateToHomeScreen();
diff --git a/lib/features/authentication/widgets/otp_verification_screen.dart b/lib/features/authentication/widgets/otp_verification_screen.dart
index 10e34cd..e33222c 100644
--- a/lib/features/authentication/widgets/otp_verification_screen.dart
+++ b/lib/features/authentication/widgets/otp_verification_screen.dart
@@ -1,10 +1,8 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
-import 'package:flutter/animation.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:get_it/get_it.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
@@ -19,16 +17,16 @@ import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/services/cache_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart';
-import 'package:sms_otp_auto_verify/sms_otp_auto_verify.dart';
import 'package:provider/provider.dart';
+import 'package:sms_otp_auto_verify/sms_otp_auto_verify.dart';
typedef OnDone = void Function(String text);
class ProvidedPinBoxTextAnimation {
static AnimatedSwitcherTransitionBuilder scalingTransition = (child, animation) {
return ScaleTransition(
- child: child,
scale: animation,
+ child: child,
);
};
@@ -65,7 +63,7 @@ class OTPWidget extends StatefulWidget {
final EdgeInsets pinBoxOuterPadding;
const OTPWidget({
- Key? key,
+ super.key,
this.maxLength = 4,
this.controller,
this.pinBoxWidth = 70.0,
@@ -87,7 +85,7 @@ class OTPWidget extends StatefulWidget {
this.pinBoxBorderWidth = 2.0,
this.pinBoxRadius = 0,
this.hideDefaultKeyboard = false,
- }) : super(key: key);
+ });
@override
State createState() {
@@ -430,7 +428,8 @@ class OTPVerificationScreen extends StatefulWidget {
final Function(String phoneNumber) onResendOTPPressed;
final bool isFormFamilyFile;
- const OTPVerificationScreen({super.key, required this.phoneNumber, required this.checkActivationCode, required this.onResendOTPPressed, required this.isFormFamilyFile});
+ const OTPVerificationScreen(
+ {super.key, required this.phoneNumber, required this.checkActivationCode, required this.onResendOTPPressed, required this.isFormFamilyFile});
@override
State createState() => _OTPVerificationScreenState();
@@ -555,7 +554,8 @@ class _OTPVerificationScreenState extends State {
LocaleKeys.weHaveSendOTP.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
_getMaskedPhoneNumber().toText15(color: AppColors.inputLabelTextColor, isBold: true),
LocaleKeys.via.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
- (widget.isFormFamilyFile ? LoginTypeEnum.sms.displayName : authVM.loginTypeEnum.displayName).toText15(color: AppColors.inputLabelTextColor, isBold: true, letterSpacing: -0.4),
+ (widget.isFormFamilyFile ? LoginTypeEnum.sms.displayName : authVM.loginTypeEnum.displayName)
+ .toText15(color: AppColors.inputLabelTextColor, isBold: true, letterSpacing: -0.4),
appState.getUserRegistrationPayload.isRegister != null && appState.getUserRegistrationPayload.isRegister == true
? LocaleKeys.forRegistrationVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4)
: LocaleKeys.forLoginVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
@@ -568,7 +568,7 @@ class _OTPVerificationScreenState extends State {
maxLength: _otpLength,
controller: _otpController,
pinBoxWidth: 70.h,
- pinBoxHeight: 100,
+ pinBoxHeight: 100.h,
pinBoxRadius: 16,
pinBoxBorderWidth: 0,
pinBoxOuterPadding: EdgeInsets.symmetric(horizontal: 4.h),
@@ -578,7 +578,7 @@ class _OTPVerificationScreenState extends State {
autoFocus: true,
onTextChanged: _onOtpChanged,
pinTextStyle: TextStyle(
- fontSize: 40.fSize,
+ fontSize: 40.f,
fontWeight: FontWeight.bold,
color: AppColors.whiteColor,
),
diff --git a/lib/features/book_appointments/book_appointments_repo.dart b/lib/features/book_appointments/book_appointments_repo.dart
index 1783556..8aafc9b 100644
--- a/lib/features/book_appointments/book_appointments_repo.dart
+++ b/lib/features/book_appointments/book_appointments_repo.dart
@@ -734,7 +734,7 @@ class BookAppointmentsRepoImp implements BookAppointmentsRepo {
body: mapDevice,
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
- onError!(error);
+ onError?.call(error);
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart
index 20b64fd..f24766b 100644
--- a/lib/features/book_appointments/book_appointments_view_model.dart
+++ b/lib/features/book_appointments/book_appointments_view_model.dart
@@ -1009,7 +1009,7 @@ class BookAppointmentsViewModel extends ChangeNotifier {
(failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) {
if (apiResponse.messageStatus == 2) {
- onError!(apiResponse.errorMessage!);
+ onError?.call(apiResponse.errorMessage!);
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) {
dentalChiefComplaintsList = apiResponse.data!;
diff --git a/lib/features/emergency_services/emergency_services_repo.dart b/lib/features/emergency_services/emergency_services_repo.dart
new file mode 100644
index 0000000..089e7ad
--- /dev/null
+++ b/lib/features/emergency_services/emergency_services_repo.dart
@@ -0,0 +1,94 @@
+import 'package:dartz/dartz.dart';
+import 'package:hmg_patient_app_new/core/api/api_client.dart';
+import 'package:hmg_patient_app_new/core/api_consts.dart';
+import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
+import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/models/resp_models/rrt_procedures_response_model.dart';
+import 'package:hmg_patient_app_new/services/logger_service.dart';
+
+abstract class EmergencyServicesRepo {
+ Future>>> getRRTProcedures();
+
+ Future>>> getNearestEr({int? id, int? projectID});
+}
+
+class EmergencyServicesRepoImp implements EmergencyServicesRepo {
+ final ApiClient apiClient;
+ final LoggerService loggerService;
+
+ EmergencyServicesRepoImp({required this.loggerService, required this.apiClient});
+
+ Future>>> getNearestEr({int? id, int? projectID}) async {
+ Map mapDevice = {'IsForER': true};
+
+ try {
+ GenericApiModel>? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ GET_NEAREST_HOSPITAL,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final list = response['List_ProjectAvgERWaitingTime'];
+
+ final clinicsList = list.map((item) => ProjectAvgERWaitingTime.fromJson(item as Map)).toList().cast();
+ apiResponse = GenericApiModel>(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: clinicsList,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+
+ @override
+ Future>>> getRRTProcedures() async {
+ Map mapDevice = {};
+
+ try {
+ GenericApiModel>? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ GET_RRT_PROCEDURE_LIST,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final list = response['Vida_ProcedureList'];
+ final proceduresList = list.map((item) => RRTProceduresResponseModel.fromJson(item as Map)).toList().cast();
+
+ apiResponse = GenericApiModel>(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: proceduresList,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+}
diff --git a/lib/features/emergency_services/emergency_services_view_model.dart b/lib/features/emergency_services/emergency_services_view_model.dart
new file mode 100644
index 0000000..d121fe5
--- /dev/null
+++ b/lib/features/emergency_services/emergency_services_view_model.dart
@@ -0,0 +1,137 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/location_util.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_repo.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/models/resp_models/rrt_procedures_response_model.dart';
+import 'package:hmg_patient_app_new/presentation/emergency_services/nearest_er_page.dart';
+import 'package:hmg_patient_app_new/services/error_handler_service.dart';
+import 'package:hmg_patient_app_new/services/navigation_service.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class EmergencyServicesViewModel extends ChangeNotifier {
+ EmergencyServicesRepo emergencyServicesRepo;
+ ErrorHandlerService errorHandlerService;
+
+ final NavigationService navServices;
+ final LocationUtils? locationUtils;
+ final AppState appState;
+ bool isERListLoading = false;
+ List nearestERList = [];
+ List nearestERFilteredList = [];
+
+ List RRTProceduresList = [];
+
+ late RRTProceduresResponseModel selectedRRTProcedure;
+
+ setSelectedRRTProcedure(RRTProceduresResponseModel procedure) {
+ selectedRRTProcedure = procedure;
+ notifyListeners();
+ }
+
+ EmergencyServicesViewModel({
+ required this.emergencyServicesRepo,
+ required this.errorHandlerService,
+ required this.navServices,
+ required this.locationUtils,
+ required this.appState,
+ });
+
+ Future getRRTProcedures({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ RRTProceduresList.clear();
+ notifyListeners();
+
+ final result = await emergencyServicesRepo.getRRTProcedures();
+
+ result.fold(
+ (failure) async => await errorHandlerService.handleError(failure: failure),
+ (apiResponse) {
+ if (apiResponse.messageStatus == 2) {
+ // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
+ } else if (apiResponse.messageStatus == 1) {
+ RRTProceduresList = apiResponse.data!;
+ selectedRRTProcedure = RRTProceduresList.first;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
+ },
+ );
+ }
+
+ void navigateToNearestERPage() {
+ locationUtils!.getLocation(
+ isShowConfirmDialog: true,
+ onSuccess: (position) {
+ navServices.push(
+ CustomPageRoute(
+ page: NearestErPage(),
+ ),
+ );
+ getNearestER();
+ });
+ }
+
+ void filterErList(String query) {
+ print("the query is $query");
+ if (query.isEmpty) {
+ nearestERFilteredList = nearestERList;
+ } else {
+ nearestERFilteredList = nearestERList.where((er) => er.projectName != null && er.projectName!.toLowerCase().contains(query.toLowerCase())).toList();
+ }
+ notifyListeners();
+ }
+
+ // Open directions (navigation) from current location to destination.
+ Future openDirections({
+ required double destLat,
+ required double destLng,
+ String? travelMode, // driving, walking, bicycling, transit
+ }) async {
+ // Try Google Maps app navigation intent (android/iOS)
+ final modeParam = travelMode == null ? 'driving' : travelMode;
+ final googleNavUri = Uri.parse('google.navigation:q=$destLat,$destLng&mode=${modeParam.substring(0, 1)}'); // mode: d/w/b/t by scheme
+ final universalUrl = Uri.parse('https://www.google.com/maps/dir/?api=1&destination=$destLat,$destLng&travelmode=$modeParam');
+
+ if (await canLaunchUrl(googleNavUri)) {
+ await launchUrl(googleNavUri, mode: LaunchMode.externalApplication);
+ } else {
+ await launchUrl(universalUrl, mode: LaunchMode.externalApplication);
+ }
+ }
+
+ Future openDialer(String phoneNumber) async {
+ final Uri telUri = Uri(scheme: 'tel', path: phoneNumber);
+
+ if (await canLaunchUrl(telUri)) {
+ await launchUrl(telUri, mode: LaunchMode.externalApplication);
+ } else {
+ throw 'Could not open dialer for $phoneNumber';
+ }
+ }
+
+ FutureOr getNearestER() async {
+ isERListLoading = true;
+ nearestERList = [];
+ nearestERFilteredList = [];
+ notifyListeners();
+ var response = await emergencyServicesRepo.getNearestEr();
+ isERListLoading = false;
+ notifyListeners();
+
+ response.fold(
+ (failure) async {},
+ (apiResponse) {
+ isERListLoading = false;
+ if (apiResponse.messageStatus == 1) {
+ nearestERList = apiResponse.data!;
+ nearestERFilteredList = nearestERList;
+ }
+ },
+ );
+ }
+}
diff --git a/lib/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart b/lib/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart
new file mode 100644
index 0000000..57d73ae
--- /dev/null
+++ b/lib/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart
@@ -0,0 +1,114 @@
+class ProjectAvgERWaitingTime {
+ int? iD;
+ int? projectID;
+ int? avgTimeInMinutes;
+ String? avgTimeInHHMM;
+ dynamic distanceInKilometers;
+ String? latitude;
+ String? longitude;
+ String? phonenumber;
+ String? projectImageURL;
+ String? projectName;
+
+ ProjectAvgERWaitingTime(
+ {this.iD,
+ this.projectID,
+ this.avgTimeInMinutes,
+ this.avgTimeInHHMM,
+ this.distanceInKilometers,
+ this.latitude,
+ this.longitude,
+ this.phonenumber,
+ this.projectImageURL,
+ this.projectName});
+
+ ProjectAvgERWaitingTime.fromJson(Map json) {
+ iD = json['ID'];
+ projectID = json['ProjectID'];
+ avgTimeInMinutes = json['AvgTimeInMinutes'];
+ avgTimeInHHMM = json['AvgTimeInHHMM'];
+ distanceInKilometers = json['DistanceInKilometers'];
+ latitude = json['Latitude'];
+ longitude = json['Longitude'];
+ phonenumber = json['PhoneNumber'];
+ projectImageURL = json['ProjectImageURL'];
+ projectName = json['ProjectName'];
+ }
+
+ String getTime(){
+ print("the name is $projectName");
+ print("the avgTimeInMinutes is $avgTimeInMinutes");
+ if(avgTimeInMinutes == null) return "";
+ int hours = avgTimeInMinutes! ~/ 60;
+ int minutes = avgTimeInMinutes! % 60;
+ print("the time is ${"${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}"}");
+ return "${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}";
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['ID'] = this.iD;
+ data['ProjectID'] = this.projectID;
+ data['AvgTimeInMinutes'] = this.avgTimeInMinutes;
+ data['AvgTimeInHHMM'] = this.avgTimeInHHMM;
+ data['DistanceInKilometers'] = this.distanceInKilometers;
+ data['Latitude'] = this.latitude;
+ data['Longitude'] = this.longitude;
+ data['PhoneNumber'] = this.phonenumber;
+ data['ProjectImageURL'] = this.projectImageURL;
+ data['ProjectName'] = this.projectName;
+ return data;
+ }
+}
+//class ProjectAvgERWaitingTime {
+// int? iD;
+// int? projectID;
+// int? avgTimeInMinutes;
+// String? avgTimeInHHMM;
+// String? distanceInKilometers;
+// String? latitude;
+// String? longitude;
+// String? phonenum?ber;
+// String? projectImageURL;
+// String? projectName;
+//
+// ProjectAvgERWaitingTime(
+// {this.iD,
+// this.projectID,
+// this.avgTimeInMinutes,
+// this.avgTimeInHHMM,
+// this.distanceInKilometers,
+// this.latitude,
+// this.longitude,
+// this.phonenum?ber,
+// this.projectImageURL,
+// this.projectName});
+//
+// ProjectAvgERWaitingTime.fromJson(Map json) {
+// iD = json['ID'];
+// projectID = json['ProjectID'];
+// avgTimeInMinutes = json['AvgTimeInMinutes'];
+// avgTimeInHHMM = json['AvgTimeInHHMM'];
+// distanceInKilometers = json['DistanceInKilometers'];
+// latitude = json['Latitude'];
+// longitude = json['Longitude'];
+// phonenum?ber = json['Phonenum?ber'];
+// projectImageURL = json['ProjectImageURL'];
+// projectName = json['ProjectName'];
+// }
+//
+// Map toJson() {
+// final Map data = new Map();
+// data['ID'] = this.iD;
+// data['ProjectID'] = this.projectID;
+// data['AvgTimeInMinutes'] = this.avgTimeInMinutes;
+// data['AvgTimeInHHMM'] = this.avgTimeInHHMM;
+// data['DistanceInKilometers'] = this.distanceInKilometers;
+// data['Latitude'] = this.latitude;
+// data['Longitude'] = this.longitude;
+// data['Phonenum?ber'] = this.phonenum?ber;
+// data['ProjectImageURL'] = this.projectImageURL;
+// data['ProjectName'] = this.projectName;
+// return data;
+// }
+//}
\ No newline at end of file
diff --git a/lib/features/emergency_services/models/resp_models/rrt_procedures_response_model.dart b/lib/features/emergency_services/models/resp_models/rrt_procedures_response_model.dart
new file mode 100644
index 0000000..ea0559e
--- /dev/null
+++ b/lib/features/emergency_services/models/resp_models/rrt_procedures_response_model.dart
@@ -0,0 +1,27 @@
+class RRTProceduresResponseModel {
+ num? patientShare;
+ num? patientShareWithTax;
+ num? patientTaxAmount;
+ String? procedureID;
+ String? procedureName;
+
+ RRTProceduresResponseModel({this.patientShare, this.patientShareWithTax, this.patientTaxAmount, this.procedureID, this.procedureName});
+
+ RRTProceduresResponseModel.fromJson(Map json) {
+ patientShare = json['PatientShare'];
+ patientShareWithTax = json['PatientShareWithTax'];
+ patientTaxAmount = json['PatientTaxAmount'];
+ procedureID = json['ProcedureID'];
+ procedureName = json['ProcedureName'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['PatientShare'] = this.patientShare;
+ data['PatientShareWithTax'] = this.patientShareWithTax;
+ data['PatientTaxAmount'] = this.patientTaxAmount;
+ data['ProcedureID'] = this.procedureID;
+ data['ProcedureName'] = this.procedureName;
+ return data;
+ }
+}
diff --git a/lib/features/insurance/insurance_view_model.dart b/lib/features/insurance/insurance_view_model.dart
index 363ad28..8460bd4 100644
--- a/lib/features/insurance/insurance_view_model.dart
+++ b/lib/features/insurance/insurance_view_model.dart
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/features/insurance/insurance_repo.dart';
import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart';
import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_card_history.dart';
@@ -14,9 +15,10 @@ class InsuranceViewModel extends ChangeNotifier {
bool isInsuranceUpdateDetailsLoading = false;
bool isInsuranceDataToBeLoaded = true;
-
bool isInsuranceApprovalsLoading = false;
+ bool isInsuranceExpired = false;
+
InsuranceRepo insuranceRepo;
ErrorHandlerService errorHandlerService;
@@ -85,6 +87,11 @@ class InsuranceViewModel extends ChangeNotifier {
patientInsuranceList = apiResponse.data!;
isInsuranceLoading = false;
isInsuranceDataToBeLoaded = false;
+
+ isInsuranceExpired = DateTime.now().isAfter(
+ DateUtil.convertStringToDate(patientInsuranceList.first.cardValidTo),
+ );
+
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
diff --git a/lib/features/lab/lab_repo.dart b/lib/features/lab/lab_repo.dart
index 2618ab6..3bb793b 100644
--- a/lib/features/lab/lab_repo.dart
+++ b/lib/features/lab/lab_repo.dart
@@ -3,6 +3,8 @@ import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:dartz/dartz.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_special_result.dart';
import 'package:hmg_patient_app_new/services/logger_service.dart';
@@ -13,13 +15,12 @@ abstract class LabRepo {
Future>>> getPatientLabOrders();
Future>>> getPatientLabResults(PatientLabOrdersResponseModel laborder, bool isVidaPlus, String procedureName);
- Future>>>
- getPatientLabResultsByHospitals(
- PatientLabOrdersResponseModel laborder, bool isVidaPlus);
+ Future>>> getPatientLabResultsByHospitals(PatientLabOrdersResponseModel laborder, bool isVidaPlus);
+
+ Future>>> getSpecialLabResult(PatientLabOrdersResponseModel laborder, bool isVidaPlus);
+
+ Future>> getLabResultReportPDF({required PatientLabOrdersResponseModel labOrder});
- Future>>>
- getSpecialLabResult(
- PatientLabOrdersResponseModel laborder, bool isVidaPlus);
}
class LabRepoImp implements LabRepo {
@@ -223,4 +224,58 @@ class LabRepoImp implements LabRepo {
return Left(UnknownFailure(e.toString()));
}
}
+
+ @override
+ Future>> getLabResultReportPDF({required PatientLabOrdersResponseModel labOrder}) async {
+ Map mapDevice = {
+ "InvoiceNo": Utils.isVidaPlusProject(int.parse(labOrder.projectID!)) ? "0" : labOrder.invoiceNo,
+ "InvoiceNo_VP": Utils.isVidaPlusProject(int.parse(labOrder.projectID!)) ? labOrder.invoiceNo : "0",
+ // "LineItemNo": labOrder.invoiceLineItemNo,
+ // "InvoiceLineItemNo": labOrder.invoiceLineItemNo,
+ "ProjectID": labOrder.projectID!,
+ "DoctorID": labOrder.doctorID!,
+ "OrderNo": labOrder.orderNo!,
+ "InvoiceType": labOrder.invoiceType!,
+ "SetupID": labOrder.setupID!,
+ "IsDownload": true,
+ 'ClinicName': labOrder.clinicDescription,
+ 'DateofBirth': Utils.appState.getAuthenticatedUser()!.dateofBirth,
+ 'DoctorName': labOrder.doctorName,
+ 'OrderDate': '${DateUtil.convertStringToDate(labOrder.orderDate!).year}-${DateUtil.convertStringToDate(labOrder.orderDate!).month}-${DateUtil.convertStringToDate(labOrder.orderDate!).day}',
+ 'PatientIditificationNum': Utils.appState.getAuthenticatedUser()!.patientIdentificationNo,
+ 'PatientMobileNumber': Utils.appState.getAuthenticatedUser()!.mobileNumber,
+ 'PatientName': "${Utils.appState.getAuthenticatedUser()!.firstName!} ${Utils.appState.getAuthenticatedUser()!.lastName!}",
+ 'ProjectName': labOrder.projectName,
+ "To": Utils.appState.getAuthenticatedUser()!.emailAddress
+ };
+
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ Utils.isVidaPlusProject(int.parse(labOrder.projectID!)) ? SEND_LAB_RESULT_EMAIL : SEND_LAB_RESULT_EMAIL_NEW,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: response["PdfContent"],
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
}
diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart
index 9f713ac..12f0f27 100644
--- a/lib/features/lab/lab_view_model.dart
+++ b/lib/features/lab/lab_view_model.dart
@@ -36,6 +36,7 @@ class LabViewModel extends ChangeNotifier {
List tempLabOrdersList = [];
String labSpecialResult = "";
List labOrderTests = [];
+ String patientLabResultReportPDFBase64 = "";
PatientLabOrdersResponseModel? currentlySelectedPatientOrder;
@@ -130,6 +131,31 @@ class LabViewModel extends ChangeNotifier {
);
}
+ Future getLabResultReportPDF({required PatientLabOrdersResponseModel labOrder, Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ final result = await labRepo.getLabResultReportPDF(labOrder: labOrder);
+
+ result.fold(
+ (failure) async => await errorHandlerService.handleError(
+ failure: failure,
+ onOkPressed: () {
+ onError!(failure.message);
+ },
+ ),
+ (apiResponse) {
+ if (apiResponse.messageStatus == 2) {
+ onError!(apiResponse.errorMessage!);
+ // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
+ } else if (apiResponse.messageStatus == 1) {
+ patientLabResultReportPDFBase64 = apiResponse.data!;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
+ },
+ );
+ }
+
filterSuggestions() {
final List labels = patientLabOrders
.expand((order) => order.testDetails!)
@@ -238,6 +264,7 @@ class LabViewModel extends ChangeNotifier {
value: transformedValue,
actualValue:element.resultValue!,
label: formatDateAsMMYY(dateTime),
+ unitOfMeasurement: element.uOM,
displayTime: resultDate(dateTime),
time: DateUtil.convertStringToDate(element.verifiedOnDateTime),
referenceValue: element.calculatedResultFlag ?? "",
@@ -367,6 +394,8 @@ class LabViewModel extends ChangeNotifier {
value: transformedValue,
actualValue: element.resultValue!,
label: formatDateAsMMYY(time),
+ unitOfMeasurement: element.uOM,
+
displayTime: resultDate(time),
time: DateUtil.convertStringToDate(element.verifiedOnDateTime),
referenceValue: element.calculatedResultFlag ?? "",
@@ -394,6 +423,8 @@ class LabViewModel extends ChangeNotifier {
filteredGraphValues.add(DataPoint(
value: transformedValue,
actualValue: element.resultValue!,
+ unitOfMeasurement: element.uOM,
+
label: formatDateAsMMYY(dateTime),
displayTime: resultDate(dateTime),
time:
@@ -407,6 +438,8 @@ class LabViewModel extends ChangeNotifier {
value: transformedValue,
actualValue: element.resultValue!,
label: formatDateAsMMYY(dateTime),
+ unitOfMeasurement: element.uOM,
+
displayTime: resultDate(dateTime),
time:
DateUtil.convertStringToDate(element.verifiedOnDateTime),
diff --git a/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart b/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
index 4143498..8bef76a 100644
--- a/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
+++ b/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
@@ -155,10 +155,10 @@ class PatientLabOrdersResponseModel {
status = json['Status'];
statusDesc = json['StatusDesc'];
strOrderDate = json['StrOrderDate'];
- if (json['TestDetails'] != dynamic) {
+ if (json['TestDetails'] != null) {
testDetails = [];
json['TestDetails'].forEach((v) {
- testDetails!.add(new TestDetails.fromJson(v));
+ testDetails!.add(TestDetails.fromJson(v));
});
}
}
diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart
index e4dc854..f0263f9 100644
--- a/lib/features/medical_file/medical_file_view_model.dart
+++ b/lib/features/medical_file/medical_file_view_model.dart
@@ -382,7 +382,10 @@ class MedicalFileViewModel extends ChangeNotifier {
final result = await medicalFileRepo.getAllPendingRecordsByResponseId(request: {'ResponseID': appState.getAuthenticatedUser()!.patientId ?? "0", "Status": 2});
result.fold(
- (failure) async => await errorHandlerService.handleError(failure: failure),
+ // (failure) async => await errorHandlerService.handleError(failure: failure),
+ (failure) async {
+ log("Error in fetching pending family files: ${failure.message}");
+ },
(apiResponse) {
if (apiResponse.messageStatus == 2) {
// _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {});
diff --git a/lib/features/my_appointments/appointment_via_region_viewmodel.dart b/lib/features/my_appointments/appointment_via_region_viewmodel.dart
index 3e3c3cd..6c6354a 100644
--- a/lib/features/my_appointments/appointment_via_region_viewmodel.dart
+++ b/lib/features/my_appointments/appointment_via_region_viewmodel.dart
@@ -110,11 +110,8 @@ class AppointmentViaRegionViewmodel extends ChangeNotifier {
);
}
}
-
if (clinicId == 253) {
{
-
-
navigationService.push(
CustomPageRoute(
page: LaserAppointment(),
diff --git a/lib/features/my_appointments/my_appointments_repo.dart b/lib/features/my_appointments/my_appointments_repo.dart
index b94f004..87451c2 100644
--- a/lib/features/my_appointments/my_appointments_repo.dart
+++ b/lib/features/my_appointments/my_appointments_repo.dart
@@ -47,6 +47,8 @@ abstract class MyAppointmentsRepo {
Future>> insertLiveCareVIDARequest({required clientRequestID, required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel});
Future>> getTamaraInstallmentsDetails();
+
+ Future>> getActiveAppointmentsCount();
}
class MyAppointmentsRepoImp implements MyAppointmentsRepo {
@@ -476,9 +478,6 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo {
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['PatientDoctorAppointmentResultList'];
- // if (list == null || list.isEmpty) {
- // throw Exception("Appointments list is empty");
- // }
final appointmentsList = list.map((item) => PatientAppointmentHistoryResponseModel.fromJson(item as Map)).toList().cast();
@@ -583,4 +582,40 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo {
return Left(UnknownFailure(e.toString()));
}
}
+
+ @override
+ Future> getActiveAppointmentsCount() async {
+ Map mapDevice = {};
+
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ GET_ACTIVE_APPOINTMENTS_LIST_URL,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final appointmentCount = response['AppointmentActiveNumber'];
+
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: appointmentCount,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
}
diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart
index 60fbff2..e8b2650 100644
--- a/lib/features/my_appointments/my_appointments_view_model.dart
+++ b/lib/features/my_appointments/my_appointments_view_model.dart
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
-import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/appointemnet_filters.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart';
@@ -17,6 +17,8 @@ class MyAppointmentsViewModel extends ChangeNotifier {
ErrorHandlerService errorHandlerService;
AppState appState;
+ int activeAppointmentsCount = 0;
+
bool isMyAppointmentsLoading = false;
bool isAppointmentPatientShareLoading = false;
bool isTimeLineAppointmentsLoading = false;
@@ -27,8 +29,8 @@ class MyAppointmentsViewModel extends ChangeNotifier {
List availableFilters = [];
List? selectedFilter = [];
bool isDateFilterSelected = false;
- DateTime? start =null;
- DateTime? end =null;
+ DateTime? start = null;
+ DateTime? end = null;
List patientAppointmentsHistoryList = [];
List filteredAppointmentList = [];
@@ -64,7 +66,6 @@ class MyAppointmentsViewModel extends ChangeNotifier {
isMyAppointmentsLoading = true;
isTimeLineAppointmentsLoading = true;
patientMyDoctorsList.clear();
- isPatientMyDoctorsLoading = true;
}
isTamaraDetailsLoading = true;
isAppointmentPatientShareLoading = true;
@@ -121,10 +122,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
patientArrivedAppointmentsHistoryList.clear();
notifyListeners();
- final result = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments);
- final resultArrived = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: false, isArrivedAppointments: true);
+ final results = await Future.wait([
+ myAppointmentsRepo.getPatientAppointments(isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments),
+ myAppointmentsRepo.getPatientAppointments(isActiveAppointment: false, isArrivedAppointments: true),
+ ]);
- result.fold(
+ results[0].fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) {
if (apiResponse.messageStatus == 2) {
@@ -141,7 +144,7 @@ class MyAppointmentsViewModel extends ChangeNotifier {
},
);
- resultArrived.fold(
+ results[1].fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) {
if (apiResponse.messageStatus == 2) {
@@ -149,6 +152,7 @@ class MyAppointmentsViewModel extends ChangeNotifier {
} else if (apiResponse.messageStatus == 1) {
patientArrivedAppointmentsHistoryList = apiResponse.data!;
isMyAppointmentsLoading = false;
+ isAppointmentDataToBeLoaded = false;
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
@@ -167,40 +171,36 @@ class MyAppointmentsViewModel extends ChangeNotifier {
getFiltersForSelectedAppointmentList(filteredAppointmentList);
}
- void getFiltersForSelectedAppointmentList(
- List filteredAppointmentList) {
+ void getFiltersForSelectedAppointmentList(List filteredAppointmentList) {
availableFilters.clear();
if (filteredAppointmentList.isEmpty == true) return;
availableFilters.add(AppointmentListingFilters.DATESELECTION);
- if (filteredAppointmentList
- .any((element) => element.isLiveCareAppointment == true)) {
+ if (filteredAppointmentList.any((element) => element.isLiveCareAppointment == true)) {
availableFilters.add(AppointmentListingFilters.LIVECARE);
}
- if (filteredAppointmentList
- .any((element) => element.isLiveCareAppointment == false)) {
+ if (filteredAppointmentList.any((element) => element.isLiveCareAppointment == false)) {
availableFilters.add(AppointmentListingFilters.WALKIN);
}
- if (filteredAppointmentList
- .any((element) => AppointmentType.isArrived(element) == true)) {
+ if (filteredAppointmentList.any((element) => AppointmentType.isArrived(element) == true)) {
availableFilters.add(AppointmentListingFilters.ARRIVED);
}
- if (filteredAppointmentList
- .any((element) => AppointmentType.isBooked(element) == true)) {
+ if (filteredAppointmentList.any((element) => AppointmentType.isBooked(element) == true)) {
availableFilters.add(AppointmentListingFilters.BOOKED);
}
- if (filteredAppointmentList
- .any((element) => AppointmentType.isConfirmed(element) == true)) {
+ if (filteredAppointmentList.any((element) => AppointmentType.isConfirmed(element) == true)) {
availableFilters.add(AppointmentListingFilters.CONFIRMED);
}
notifyListeners();
}
- Future getPatientShareAppointment(int projectID, int clinicID, String appointmentNo, bool isLiveCareAppointment, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
- final result = await myAppointmentsRepo.getPatientShareAppointment(projectID: projectID, clinicID: clinicID, appointmentNo: appointmentNo, isLiveCareAppointment: isLiveCareAppointment);
+ Future getPatientShareAppointment(int projectID, int clinicID, String appointmentNo, bool isLiveCareAppointment,
+ {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ final result = await myAppointmentsRepo.getPatientShareAppointment(
+ projectID: projectID, clinicID: clinicID, appointmentNo: appointmentNo, isLiveCareAppointment: isLiveCareAppointment);
result.fold(
(failure) async {
@@ -226,8 +226,13 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
Future addAdvanceNumberRequest(
- {required String advanceNumber, required String paymentReference, required String appointmentNo, Function(dynamic)? onSuccess, Function(String)? onError}) async {
- final result = await myAppointmentsRepo.addAdvanceNumberRequest(advanceNumber: advanceNumber, paymentReference: paymentReference, appointmentNo: appointmentNo);
+ {required String advanceNumber,
+ required String paymentReference,
+ required String appointmentNo,
+ Function(dynamic)? onSuccess,
+ Function(String)? onError}) async {
+ final result =
+ await myAppointmentsRepo.addAdvanceNumberRequest(advanceNumber: advanceNumber, paymentReference: paymentReference, appointmentNo: appointmentNo);
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
@@ -245,8 +250,14 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
Future generateAppointmentQR(
- {required int clinicID, required int projectID, required String appointmentNo, required int isFollowUp, Function(dynamic)? onSuccess, Function(String)? onError}) async {
- final result = await myAppointmentsRepo.generateAppointmentQR(clinicID: clinicID, projectID: projectID, appointmentNo: appointmentNo, isFollowUp: isFollowUp);
+ {required int clinicID,
+ required int projectID,
+ required String appointmentNo,
+ required int isFollowUp,
+ Function(dynamic)? onSuccess,
+ Function(String)? onError}) async {
+ final result =
+ await myAppointmentsRepo.generateAppointmentQR(clinicID: clinicID, projectID: projectID, appointmentNo: appointmentNo, isFollowUp: isFollowUp);
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
@@ -263,7 +274,8 @@ class MyAppointmentsViewModel extends ChangeNotifier {
);
}
- Future cancelAppointment({required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ Future cancelAppointment(
+ {required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await myAppointmentsRepo.cancelAppointment(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel);
result.fold(
@@ -282,7 +294,8 @@ class MyAppointmentsViewModel extends ChangeNotifier {
);
}
- Future confirmAppointment({required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ Future confirmAppointment(
+ {required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await myAppointmentsRepo.confirmAppointment(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel);
result.fold(
@@ -343,7 +356,8 @@ class MyAppointmentsViewModel extends ChangeNotifier {
required int checkInType,
Function(dynamic)? onSuccess,
Function(String)? onError}) async {
- final result = await myAppointmentsRepo.sendCheckInNfcRequest(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel, scannedCode: scannedCode, checkInType: checkInType);
+ final result = await myAppointmentsRepo.sendCheckInNfcRequest(
+ patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel, scannedCode: scannedCode, checkInType: checkInType);
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
@@ -363,6 +377,9 @@ class MyAppointmentsViewModel extends ChangeNotifier {
Future getPatientMyDoctors({Function(dynamic)? onSuccess, Function(String)? onError}) async {
if (!isAppointmentDataToBeLoaded) return;
+ isPatientMyDoctorsLoading = true;
+ notifyListeners();
+
final result = await myAppointmentsRepo.getPatientDoctorsList();
result.fold(
@@ -386,8 +403,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
Future insertLiveCareVIDARequest(
- {required clientRequestID, required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
- final result = await myAppointmentsRepo.insertLiveCareVIDARequest(clientRequestID: clientRequestID, patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel);
+ {required clientRequestID,
+ required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel,
+ Function(dynamic)? onSuccess,
+ Function(String)? onError}) async {
+ final result = await myAppointmentsRepo.insertLiveCareVIDARequest(
+ clientRequestID: clientRequestID, patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel);
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
@@ -434,7 +455,7 @@ class MyAppointmentsViewModel extends ChangeNotifier {
return;
}
- selectedFilter?.add(availableFilter) ;
+ selectedFilter?.add(availableFilter);
notifyListeners();
}
@@ -454,14 +475,14 @@ class MyAppointmentsViewModel extends ChangeNotifier {
if (start == null && end == null) {
isDateFilterSelected = false;
filteredAppointmentList.clear();
- sourceList.forEach((element) {
+ for (var element in sourceList) {
if (isUnderFilter(element)) {
filteredAppointmentList.add(element);
}
- });
+ }
} else {
filteredAppointmentList.clear();
- sourceList.forEach((element) {
+ for (var element in sourceList) {
try {
var dateTime = DateUtil.convertStringToDate(element.appointmentDate).provideDateOnly();
@@ -472,14 +493,14 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
}
} else if (start != null && end != null) {
- if ((dateTime.isAfter(start)) && ((dateTime.isBefore(end))||((dateTime.isAtSameMomentAs(end))))) {
+ if ((dateTime.isAfter(start)) && ((dateTime.isBefore(end)) || ((dateTime.isAtSameMomentAs(end))))) {
if (isUnderFilter(element)) {
filteredAppointmentList.add(element);
}
}
}
} catch (e) {}
- });
+ }
}
notifyListeners();
}
@@ -489,27 +510,24 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
bool isUnderFilter(PatientAppointmentHistoryResponseModel element) {
- bool isUnderTheFilter = false;
if (selectedFilter == null || selectedFilter!.isEmpty) return true;
- int count = 0;
for (var filter in selectedFilter ?? []) {
switch (filter) {
case AppointmentListingFilters.WALKIN:
if (element.isLiveCareAppointment == false) return true;
case AppointmentListingFilters.BOOKED:
- if (AppointmentType.isBooked(element))return true;
+ if (AppointmentType.isBooked(element)) return true;
case AppointmentListingFilters.CONFIRMED:
- if (AppointmentType.isConfirmed(element))return true;
+ if (AppointmentType.isConfirmed(element)) return true;
case AppointmentListingFilters.ARRIVED:
- if (AppointmentType.isArrived(element))return true;
+ if (AppointmentType.isArrived(element)) return true;
case AppointmentListingFilters.LIVECARE:
if (element.isLiveCareAppointment == true) return true;
case AppointmentListingFilters.DATESELECTION:
-
}
}
return false;
@@ -527,17 +545,26 @@ class MyAppointmentsViewModel extends ChangeNotifier {
if (onSuccess != null) {
onSuccess(apiResponse);
}
+ },
+ );
+ }
- // if (apiResponse.messageStatus == 2) {
- // onError!(apiResponse.errorMessage!);
- // // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
- // } else if (apiResponse.messageStatus == 1) {
- // getTamaraInstallmentsDetailsResponseModel = apiResponse.data!;
- // notifyListeners();
- // if (onSuccess != null) {
- // onSuccess(apiResponse);
- // }
- // }
+ Future getActiveAppointmentsCount({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ final result = await myAppointmentsRepo.getActiveAppointmentsCount();
+
+ result.fold(
+ (failure) async => await errorHandlerService.handleError(failure: failure),
+ (apiResponse) {
+ if (apiResponse.messageStatus == 2) {
+ onError!(apiResponse.errorMessage!);
+ activeAppointmentsCount = 0;
+ } else if (apiResponse.messageStatus == 1) {
+ activeAppointmentsCount = apiResponse.data ?? 0;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
},
);
}
diff --git a/lib/features/prescriptions/prescriptions_repo.dart b/lib/features/prescriptions/prescriptions_repo.dart
index 5f2db30..2e3f1aa 100644
--- a/lib/features/prescriptions/prescriptions_repo.dart
+++ b/lib/features/prescriptions/prescriptions_repo.dart
@@ -3,6 +3,7 @@ import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:dartz/dartz.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/patient_prescriptions_response_model.dart';
import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/prescription_detail_response_model.dart';
import 'package:hmg_patient_app_new/services/logger_service.dart';
@@ -11,6 +12,10 @@ abstract class PrescriptionsRepo {
Future>>> getPatientPrescriptionOrders({required String patientId});
Future>>> getPatientPrescriptionDetails({required PatientPrescriptionsResponseModel prescriptionsResponseModel});
+
+ Future>> getPrescriptionInstructionsPDF({required PatientPrescriptionsResponseModel prescriptionsResponseModel});
+
+ Future>> getPrescriptionPDF({required PatientPrescriptionsResponseModel prescriptionsResponseModel, required List prescriptionDetailsList});
}
class PrescriptionsRepoImp implements PrescriptionsRepo {
@@ -107,4 +112,98 @@ class PrescriptionsRepoImp implements PrescriptionsRepo {
return Left(UnknownFailure(e.toString()));
}
}
+
+ @override
+ Future> getPrescriptionInstructionsPDF({required PatientPrescriptionsResponseModel prescriptionsResponseModel}) async {
+ Map mapDevice = {
+ "AppointmentNo": prescriptionsResponseModel.appointmentNo.toString(),
+ "SetupID": prescriptionsResponseModel.setupID,
+ "ClinicID": prescriptionsResponseModel.clinicID.toString(),
+ "ProjectID": prescriptionsResponseModel.projectID.toString(),
+ "LocationID": "0",
+ "SalesInvoiceNo": "0",
+ "IsTest": false,
+ "ChannelID": "3",
+ };
+
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ GET_PRESCRIPTION_INSTRUCTIONS_PDF,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final prescriptionPDFURL = response["InvoiceUrl"];
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: prescriptionPDFURL,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+
+ @override
+ Future> getPrescriptionPDF({required PatientPrescriptionsResponseModel prescriptionsResponseModel, required List prescriptionDetailsList}) async {
+ Map mapDevice = {
+ "AppointmentDate": prescriptionsResponseModel.appointmentDate,
+ "ClinicName": prescriptionsResponseModel.clinicDescription,
+ "DoctorName": prescriptionsResponseModel.doctorName,
+ "ProjectID": prescriptionsResponseModel.projectID,
+ "DoctorID": prescriptionsResponseModel.doctorID,
+ "ClinicID": prescriptionsResponseModel.clinicID,
+ "DateofBirth": Utils.appState.getAuthenticatedUser()!.dateofBirth,
+ "ListPrescriptions": prescriptionDetailsList,
+ "PatientIditificationNum": Utils.appState.getAuthenticatedUser()!.patientIdentificationNo,
+ "PatientMobileNumber": Utils.appState.getAuthenticatedUser()!.mobileNumber,
+ "PatientName": "${Utils.appState.getAuthenticatedUser()!.firstName!} ${Utils.appState.getAuthenticatedUser()!.lastName!}",
+ "To": Utils.appState.getAuthenticatedUser()!.emailAddress,
+ "SetupID": prescriptionsResponseModel.setupID,
+ "IsDownload": true,
+ };
+
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ SEND_PRESCRIPTION_EMAIL,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final prescriptionPDFData = response["Base64Data"];
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: prescriptionPDFData,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
}
diff --git a/lib/features/prescriptions/prescriptions_view_model.dart b/lib/features/prescriptions/prescriptions_view_model.dart
index ebc3be8..aac25c1 100644
--- a/lib/features/prescriptions/prescriptions_view_model.dart
+++ b/lib/features/prescriptions/prescriptions_view_model.dart
@@ -23,6 +23,10 @@ class PrescriptionsViewModel extends ChangeNotifier {
bool isSortByClinic = true;
+ String prescriptionInstructionsPDFLink = "";
+
+ String prescriptionPDFBase64Data = "";
+
PrescriptionsViewModel({required this.prescriptionsRepo, required this.errorHandlerService});
initPrescriptionsViewModel() {
@@ -126,4 +130,47 @@ class PrescriptionsViewModel extends ChangeNotifier {
},
);
}
+
+ Future getPrescriptionInstructionsPDF(PatientPrescriptionsResponseModel prescriptionsResponseModel, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ final result = await prescriptionsRepo.getPrescriptionInstructionsPDF(prescriptionsResponseModel: prescriptionsResponseModel);
+
+ result.fold(
+ (failure) async {
+ onError!(failure.message);
+ },
+ (apiResponse) {
+ if (apiResponse.messageStatus == 2) {
+ onError!(apiResponse.errorMessage!);
+ // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
+ } else if (apiResponse.messageStatus == 1) {
+ prescriptionInstructionsPDFLink = apiResponse.data;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
+ },
+ );
+ }
+
+ Future getPrescriptionPDFBase64(PatientPrescriptionsResponseModel prescriptionsResponseModel, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ final result = await prescriptionsRepo.getPrescriptionPDF(prescriptionsResponseModel: prescriptionsResponseModel, prescriptionDetailsList: prescriptionDetailsList);
+
+ result.fold(
+ (failure) async {
+ onError!(failure.message);
+ },
+ (apiResponse) {
+ if (apiResponse.messageStatus == 2) {
+ onError!(apiResponse.errorMessage!);
+ } else if (apiResponse.messageStatus == 1) {
+ prescriptionPDFBase64Data = apiResponse.data;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
+ },
+ );
+ }
}
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index 798f94d..7433ff7 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -2,7 +2,7 @@
// ignore_for_file: constant_identifier_names
-abstract class LocaleKeys {
+abstract class LocaleKeys {
static const english = 'english';
static const arabic = 'arabic';
static const login = 'login';
@@ -876,5 +876,4 @@ abstract class LocaleKeys {
static const walkin = 'walkin';
static const laserClinic = 'laserClinic';
static const continueString = 'continueString';
-
}
diff --git a/lib/main.dart b/lib/main.dart
index 20507d0..259ce3b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -11,6 +11,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart';
@@ -125,6 +126,9 @@ void main() async {
),
ChangeNotifierProvider(
create: (_) => getIt.get(),
+ ),
+ ChangeNotifierProvider(
+ create: (_) => getIt.get(),
)
], child: MyApp()),
),
@@ -170,4 +174,4 @@ class MyApp extends StatelessWidget {
);
}
}
-// flutter pub run easy_localization:generate -S assets/langs -f keys -o locale_keys.g.dart
\ No newline at end of file
+// flutter pub run easy_localization:generate -S assets/langs -f keys -o locale_keys.g.dart
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index c87039c..f5b5b7e 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
-import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
@@ -22,16 +21,15 @@ import 'package:hmg_patient_app_new/presentation/appointments/appointment_paymen
import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart';
import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_doctor_card.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
-import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_detail_page.dart';
import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
-import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:maps_launcher/maps_launcher.dart';
import 'package:provider/provider.dart';
@@ -86,30 +84,25 @@ class _AppointmentDetailsPageState extends State {
onAskDoctorTap: () {},
onCancelTap: () async {
myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
- showCommonBottomSheet(context,
- child: Utils.getLoadingWidget(),
- callBackFunc: (str) {},
- title: "",
- height: ResponsiveExtension.screenHeight * 0.3,
- isCloseButtonVisible: false,
- isDismissible: false,
- isFullScreen: false);
+ LoaderBottomSheet.showLoader(loadingText: "Cancelling Appointment, Please Wait...".needTranslation);
await myAppointmentsViewModel.cancelAppointment(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
onSuccess: (apiResponse) {
- Navigator.of(context).pop();
- showCommonBottomSheet(context,
- child: Utils.getSuccessWidget(loadingText: "Appointment Cancelled Successfully".needTranslation),
- callBackFunc: (str) {},
- title: "",
- height: ResponsiveExtension.screenHeight * 0.3,
- isCloseButtonVisible: false,
- isDismissible: false,
- isFullScreen: false,
- isSuccessDialog: true);
+ LoaderBottomSheet.hideLoader();
+ myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
+ myAppointmentsViewModel.getPatientAppointments(true, false);
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getSuccessWidget(loadingText: "Appointment Cancelled Successfully".needTranslation),
+ callBackFunc: () {
+ Navigator.of(context).pop();
+ },
+ title: "",
+ isCloseButtonVisible: true,
+ isDismissible: false,
+ isFullScreen: false,
+ );
});
- Navigator.of(context).pop();
- Navigator.of(context).pop();
},
onRescheduleTap: () async {
openDoctorScheduleCalendar();
@@ -175,15 +168,19 @@ class _AppointmentDetailsPageState extends State {
child: CustomButton(
text: "Get Directions".needTranslation,
onPressed: () {
- MapsLauncher.launchCoordinates(double.parse(widget.patientAppointmentHistoryResponseModel.latitude!),
- double.parse(widget.patientAppointmentHistoryResponseModel.longitude!), widget.patientAppointmentHistoryResponseModel.projectName);
+ MapsLauncher.launchCoordinates(
+ double.parse(widget.patientAppointmentHistoryResponseModel.latitude!),
+ double.parse(widget.patientAppointmentHistoryResponseModel.longitude!),
+ widget.patientAppointmentHistoryResponseModel.projectName);
},
backgroundColor: AppColors.textColor.withOpacity(0.8),
- borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.01),
+ borderColor:
+ AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction)
+ .withOpacity(0.01),
textColor: AppColors.whiteColor,
- fontSize: 14,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
- borderRadius: 12.h,
+ borderRadius: 12.r,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
icon: AppAssets.directions_icon,
@@ -240,7 +237,8 @@ class _AppointmentDetailsPageState extends State {
"Lab & Radiology".needTranslation.toText18(isBold: true),
SizedBox(height: 16.h),
GridView(
- gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13.h, mainAxisSpacing: 13.h, childAspectRatio: 7 / 6),
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 2, crossAxisSpacing: 13.h, mainAxisSpacing: 13.h, childAspectRatio: 7 / 6),
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: [
@@ -301,13 +299,17 @@ class _AppointmentDetailsPageState extends State {
children: [
Column(
children: [
- SizedBox(width: 150.h, child: prescriptionVM.prescriptionDetailsList[index].itemDescription!.toText12(isBold: true, maxLine: 1)),
+ SizedBox(
+ width: 150.h,
+ child: prescriptionVM.prescriptionDetailsList[index].itemDescription!
+ .toText12(isBold: true, maxLine: 1)),
SizedBox(
width: 150.h,
child:
"Prescribed By: ${widget.patientAppointmentHistoryResponseModel.doctorTitle} ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}"
.needTranslation
- .toText10(weight: FontWeight.w500, color: AppColors.greyTextColor, letterSpacing: -0.4),
+ .toText10(
+ weight: FontWeight.w500, color: AppColors.greyTextColor, letterSpacing: -0.4),
),
],
),
@@ -420,7 +422,8 @@ class _AppointmentDetailsPageState extends State {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"Amount before tax".needTranslation.toText18(isBold: true),
- Utils.getPaymentAmountWithSymbol(widget.patientAppointmentHistoryResponseModel.patientShare!.toString().toText16(isBold: true), AppColors.blackColor, 13,
+ Utils.getPaymentAmountWithSymbol(
+ widget.patientAppointmentHistoryResponseModel.patientShare!.toString().toText16(isBold: true), AppColors.blackColor, 13,
isSaudiCurrency: true),
],
),
@@ -428,8 +431,12 @@ class _AppointmentDetailsPageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Expanded(child: LocaleKeys.upcomingPaymentNow.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)),
- "VAT 15%(${widget.patientAppointmentHistoryResponseModel.patientTaxAmount})".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -2),
+ Expanded(
+ child:
+ LocaleKeys.upcomingPaymentNow.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)),
+ "VAT 15%(${widget.patientAppointmentHistoryResponseModel.patientTaxAmount})"
+ .needTranslation
+ .toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -2),
],
),
SizedBox(height: 18.h),
@@ -443,7 +450,10 @@ class _AppointmentDetailsPageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Utils.getPaymentAmountWithSymbol(widget.patientAppointmentHistoryResponseModel.patientShareWithTax!.toString().toText24(isBold: true), AppColors.blackColor, 17,
+ Utils.getPaymentAmountWithSymbol(
+ widget.patientAppointmentHistoryResponseModel.patientShareWithTax!.toString().toText24(isBold: true),
+ AppColors.blackColor,
+ 17,
isSaudiCurrency: true),
],
),
@@ -510,7 +520,7 @@ class _AppointmentDetailsPageState extends State {
projectName: widget.patientAppointmentHistoryResponseModel.projectName,
);
bookAppointmentsViewModel.setSelectedDoctor(doctor);
- LoaderBottomSheet.showLoader();
+ LoaderBottomSheet.showLoader(loadingText: "Fetching Doctor Schedule, Please Wait...".needTranslation);
await bookAppointmentsViewModel.getDoctorFreeSlots(
isBookingForLiveCare: false,
onSuccess: (dynamic respData) async {
@@ -541,24 +551,25 @@ class _AppointmentDetailsPageState extends State {
case 0:
break;
case 10:
- showCommonBottomSheet(context,
- child: Utils.getLoadingWidget(), callBackFunc: (str) {}, title: "", height: ResponsiveExtension.screenHeight * 0.3, isCloseButtonVisible: false, isDismissible: false, isFullScreen: false);
+ LoaderBottomSheet.showLoader(loadingText: "Confirming Appointment, Please Wait...".needTranslation);
await myAppointmentsViewModel.confirmAppointment(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
onSuccess: (apiResponse) {
- Navigator.of(context).pop();
- showCommonBottomSheet(context,
- child: Utils.getSuccessWidget(loadingText: "Appointment Confirmed Successfully".needTranslation),
- callBackFunc: (str) {},
+ LoaderBottomSheet.hideLoader();
+ myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
+ myAppointmentsViewModel.getPatientAppointments(true, false);
+ showCommonBottomSheet(context, child: Utils.getSuccessWidget(loadingText: "Appointment Confirmed Successfully".needTranslation),
+ callBackFunc: (str) {
+ Navigator.of(context).pop();
+ },
title: "",
height: ResponsiveExtension.screenHeight * 0.3,
- isCloseButtonVisible: false,
+ isCloseButtonVisible: true,
isDismissible: false,
isFullScreen: false,
isSuccessDialog: true);
});
- Navigator.of(context).pop();
- Navigator.of(context).pop();
+ // LoaderBottomSheet.hideLoader();
case 15:
break;
case 20:
diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart
index 1305ea0..8d9adec 100644
--- a/lib/presentation/appointments/my_appointments_page.dart
+++ b/lib/presentation/appointments/my_appointments_page.dart
@@ -188,7 +188,6 @@ class _MyAppointmentsPageState extends State {
Widget getAppointmentFilters(MyAppointmentsViewModel myAppointmentsVM) {
return SizedBox(
- height: 56.h,
child: Row(
children: [
Expanded(
diff --git a/lib/presentation/appointments/my_doctors_page.dart b/lib/presentation/appointments/my_doctors_page.dart
index 06257c7..51e9703 100644
--- a/lib/presentation/appointments/my_doctors_page.dart
+++ b/lib/presentation/appointments/my_doctors_page.dart
@@ -8,10 +8,16 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
import '../../widgets/chip/app_custom_chip_widget.dart';
@@ -20,11 +26,13 @@ class MyDoctorsPage extends StatelessWidget {
MyDoctorsPage({super.key});
late MyAppointmentsViewModel myAppointmentsViewModel;
+ late BookAppointmentsViewModel bookAppointmentsViewModel;
@override
Widget build(BuildContext context) {
AppState appState = getIt.get();
myAppointmentsViewModel = Provider.of(context, listen: false);
+ bookAppointmentsViewModel = Provider.of(context, listen: false);
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
@@ -141,13 +149,38 @@ class MyDoctorsPage extends StatelessWidget {
"".toText16(),
Transform.flip(
flipX: appState.isArabic(),
- child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)),
+ child:
+ Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)),
],
),
],
),
),
- ),
+ ).onPress(() async {
+ bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
+ clinicID: myAppointmentsVM.patientMyDoctorsList[index].clinicID,
+ projectID: myAppointmentsVM.patientMyDoctorsList[index].projectID,
+ doctorID: myAppointmentsVM.patientMyDoctorsList[index].doctorID,
+ ));
+ LoaderBottomSheet.showLoader();
+ await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
+ LoaderBottomSheet.hideLoader();
+ Navigator.of(context).push(
+ CustomPageRoute(
+ page: DoctorProfilePage(),
+ ),
+ );
+ }, onError: (err) {
+ LoaderBottomSheet.hideLoader();
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getErrorWidget(loadingText: err),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ });
+ }),
),
),
);
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index aa67a76..1451bcb 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -117,26 +117,26 @@ class _AppointmentCardState extends State {
).toShimmer2(isShow: widget.isLoading),
),
// TODO: Implement the logic to enable/disable the switch based on reminder status
- AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
- ? SizedBox().toShimmer2(isShow: widget.isLoading)
- : Switch(
- activeColor: AppColors.successColor,
- activeTrackColor: AppColors.successColor.withValues(alpha: .15),
- thumbIcon: WidgetStateProperty.resolveWith(
- (Set states) {
- if (states.contains(WidgetState.selected)) {
- return const Icon(Icons.check); // Icon when switch is ON
- }
- return const Icon(Icons.close); // Icon when switch is OFF
- },
- ),
- value: widget.isLoading ? false : widget.patientAppointmentHistoryResponseModel.hasReminder!,
- onChanged: (newValue) {
- setState(() {
- widget.myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel);
- });
- },
- ).toShimmer2(isShow: widget.isLoading),
+ // AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
+ // ? SizedBox().toShimmer2(isShow: widget.isLoading)
+ // : Switch(
+ // activeColor: AppColors.successColor,
+ // activeTrackColor: AppColors.successColor.withValues(alpha: .15),
+ // thumbIcon: WidgetStateProperty.resolveWith(
+ // (Set states) {
+ // if (states.contains(WidgetState.selected)) {
+ // return const Icon(Icons.check); // Icon when switch is ON
+ // }
+ // return const Icon(Icons.close); // Icon when switch is OFF
+ // },
+ // ),
+ // value: widget.isLoading ? false : widget.patientAppointmentHistoryResponseModel.hasReminder!,
+ // onChanged: (newValue) {
+ // setState(() {
+ // widget.myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel);
+ // });
+ // },
+ // ).toShimmer2(isShow: widget.isLoading),
],
),
SizedBox(height: 16.h),
@@ -155,7 +155,7 @@ class _AppointmentCardState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
(widget.isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : widget.patientAppointmentHistoryResponseModel.doctorNameObj!)
- .toText16(isBold: true)
+ .toText16(isBold: true, maxlines: 1)
.toShimmer2(isShow: widget.isLoading),
SizedBox(height: 8.h),
Wrap(
diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart
index f3d7664..7e5f4a1 100644
--- a/lib/presentation/authentication/login.dart
+++ b/lib/presentation/authentication/login.dart
@@ -1,5 +1,3 @@
-import 'dart:developer';
-
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
@@ -94,6 +92,7 @@ class LoginScreenState extends State {
),
SizedBox(height: 16.h), // Adjusted to sizer unit (approx 16px)
CustomButton(
+ height: 50.h,
text: LocaleKeys.login.tr(),
icon: AppAssets.login1,
iconColor: Colors.white,
@@ -117,7 +116,7 @@ class LoginScreenState extends State {
text: TextSpan(
style: context.dynamicTextStyle(
color: Colors.black,
- fontSize: 14.fSize, // Adjusted to sizer unit
+ fontSize: 14.f, // Adjusted to sizer unit
height: 26 / 16, // This height is a ratio, may need re-evaluation
fontWeight: FontWeight.w500,
),
@@ -128,7 +127,7 @@ class LoginScreenState extends State {
text: LocaleKeys.registernow.tr(),
style: context.dynamicTextStyle(
color: AppColors.primaryRedColor,
- fontSize: 14.fSize, // Adjusted to sizer unit
+ fontSize: 14.f, // Adjusted to sizer unit
height: 26 / 16, // Ratio
fontWeight: FontWeight.w500),
recognizer: TapGestureRecognizer()
@@ -142,6 +141,7 @@ class LoginScreenState extends State {
),
).withVerticalPadding(2), // Adjusted to sizer unit
),
+ SizedBox(height: 20.h), // Adjusted to sizer unit (approx 14px)
],
),
),
@@ -160,6 +160,7 @@ class LoginScreenState extends State {
isScrollControlled: true,
isDismissible: false,
useSafeArea: true,
+ constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width),
backgroundColor: AppColors.transparent,
child: StatefulBuilder(builder: (BuildContext context, StateSetter setModalState) {
return Padding(
diff --git a/lib/presentation/authentication/quick_login.dart b/lib/presentation/authentication/quick_login.dart
index a370fb4..f10d84f 100644
--- a/lib/presentation/authentication/quick_login.dart
+++ b/lib/presentation/authentication/quick_login.dart
@@ -1,7 +1,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@@ -17,11 +17,10 @@ class QuickLogin extends StatefulWidget {
const QuickLogin({super.key, required this.onPressed, this.isDone = false});
@override
- _QuickLogin createState() => _QuickLogin();
+ QuickLoginState createState() => QuickLoginState();
}
-class _QuickLogin extends State {
-
+class QuickLoginState extends State {
@override
Widget build(BuildContext context) {
NavigationService navigationService = getIt.get();
@@ -40,99 +39,95 @@ class _QuickLogin extends State {
children: [
widget.isDone
? Column(
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- InkWell(
- onTap: () {
- navigationService.pop();
- },
- child: Utils.buildSvgWithAssets(icon: AppAssets.cross_circle)),
- ],
- ),
- Utils.showLottie(context: context, assetPath: AppAnimations.checkmark, width: 120, height: 120, repeat: true),
- LocaleKeys.allSet.tr().toText16(textAlign:
- TextAlign.center, weight: FontWeight.w500)
- // Text(
- // ' TranslationBase.of(context).allSet',
- // textAlign: TextAlign.center,
- // style: context.dynamicTextStyle(
- // fontSize: 16,
- // fontWeight: FontWeight.w500,
- // color: Colors.black,
- // ),
- // ),
- ],
- )
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ InkWell(
+ onTap: () {
+ navigationService.pop();
+ },
+ child: Utils.buildSvgWithAssets(icon: AppAssets.cross_circle)),
+ ],
+ ),
+ Utils.showLottie(context: context, assetPath: AppAnimations.checkmark, width: 120, height: 120, repeat: true),
+ LocaleKeys.allSet.tr().toText16(textAlign: TextAlign.center, weight: FontWeight.w500)
+ // Text(
+ // ' TranslationBase.of(context).allSet',
+ // textAlign: TextAlign.center,
+ // style: context.dynamicTextStyle(
+ // fontSize: 16,
+ // fontWeight: FontWeight.w500,
+ // color: Colors.black,
+ // ),
+ // ),
+ ],
+ )
: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Image.asset(
- AppAssets.lockIcon,
- height: 101,
- ),
- const SizedBox(height: 10),
- LocaleKeys.enableQuickLogin.tr().toText26(isBold: true),
- // Text(
- // ' TranslationBase.of(context).enableQuickLogin',
- // style: context.dynamicTextStyle(
- // fontSize: 26,
- // fontWeight: FontWeight.bold,
- // color: Colors.black,
- // ),
- // ),
- const SizedBox(height: 5),
- LocaleKeys.enableQuickLogin.tr().toText16(color: AppColors.quickLoginColor),
- // Description
- // Text(
- // 'TranslationBase.of(context).enableMsg',
- // style: context.dynamicTextStyle(
- // fontSize: 16,
- // color: Color(0xFF666666),
- // height: 1.5,
- // ),
- //),
- const SizedBox(height: 24),
- // Buttons
- Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- Expanded(
- child: CustomButton(
- text:LocaleKeys.enableQuickLogin.tr(),
- onPressed: () {
- widget.onPressed();
- },
- backgroundColor: Color(0xffED1C2B),
- borderColor: Color(0xffED1C2B),
- textColor: Colors.white,
- icon:AppAssets.apple_finder,
- )),
- ],
- ),
- SizedBox(
- height: 16,
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- Expanded(
- child: CustomButton(
- text: LocaleKeys.notNow.tr(),
- onPressed: () {
- Navigator.pop(context, "true");
- },
- backgroundColor: Color(0xffFEE9EA),
- borderColor: Color(0xffFEE9EA),
- textColor: Colors.red,
- // icon: "assets/images/svg/apple-finder.svg",
- )),
- ],
- ),
- ],
- )
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Image.asset(AppAssets.lockIcon, height: 100),
+ SizedBox(height: 10.h),
+ LocaleKeys.enableQuickLogin.tr().toText26(isBold: true),
+ // Text(
+ // ' TranslationBase.of(context).enableQuickLogin',
+ // style: context.dynamicTextStyle(
+ // fontSize: 26,
+ // fontWeight: FontWeight.bold,
+ // color: Colors.black,
+ // ),
+ // ),
+ SizedBox(height: 5.h),
+ LocaleKeys.enableQuickLogin.tr().toText16(color: AppColors.quickLoginColor),
+ // Description
+ // Text(
+ // 'TranslationBase.of(context).enableMsg',
+ // style: context.dynamicTextStyle(
+ // fontSize: 16,
+ // color: Color(0xFF666666),
+ // height: 1.5,
+ // ),
+ //),
+ const SizedBox(height: 24),
+ // Buttons
+ Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Expanded(
+ child: CustomButton(
+ text: LocaleKeys.enableQuickLogin.tr(),
+ onPressed: () {
+ widget.onPressed();
+ },
+ backgroundColor: Color(0xffED1C2B),
+ borderColor: Color(0xffED1C2B),
+ textColor: Colors.white,
+ icon: AppAssets.apple_finder,
+ )),
+ ],
+ ),
+ SizedBox(
+ height: 16,
+ ),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Expanded(
+ child: CustomButton(
+ text: LocaleKeys.notNow.tr(),
+ onPressed: () {
+ Navigator.pop(context, "true");
+ },
+ backgroundColor: Color(0xffFEE9EA),
+ borderColor: Color(0xffFEE9EA),
+ textColor: Colors.red,
+ // icon: "assets/images/svg/apple-finder.svg",
+ )),
+ ],
+ ),
+ ],
+ )
],
),
);
diff --git a/lib/presentation/authentication/register.dart b/lib/presentation/authentication/register.dart
index df1c8c7..9551ba1 100644
--- a/lib/presentation/authentication/register.dart
+++ b/lib/presentation/authentication/register.dart
@@ -11,7 +11,6 @@ import 'package:hmg_patient_app_new/core/utils/validation_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
-import 'package:hmg_patient_app_new/features/authentication/widgets/otp_verification_screen.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart';
@@ -79,7 +78,8 @@ class _RegisterNew extends State {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Utils.showLottie(context: context, assetPath: 'assets/animations/lottie/register.json', width: 200.h, height: 200.h, fit: BoxFit.cover, repeat: true),
+ Utils.showLottie(
+ context: context, assetPath: 'assets/animations/lottie/register.json', width: 200.h, height: 200.h, fit: BoxFit.cover, repeat: true),
SizedBox(height: 16.h),
LocaleKeys.prepareToElevate.tr().toText32(isBold: true),
SizedBox(height: 24.h),
@@ -149,7 +149,7 @@ class _RegisterNew extends State {
borderRadius: BorderRadius.circular(6),
border: Border.all(color: isTermsAccepted ? AppColors.primaryRedBorderColor : AppColors.greyColor, width: 2.h),
),
- child: isTermsAccepted ? Icon(Icons.check, size: 16.fSize, color: Colors.white) : null,
+ child: isTermsAccepted ? Icon(Icons.check, size: 16.f, color: Colors.white) : null,
);
},
),
@@ -158,7 +158,7 @@ class _RegisterNew extends State {
children: [
Text(
LocaleKeys.iAcceptThe.tr(),
- style: context.dynamicTextStyle(fontSize: 14.fSize, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)),
+ style: context.dynamicTextStyle(fontSize: 14.f, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)),
),
GestureDetector(
onTap: () {
@@ -168,7 +168,7 @@ class _RegisterNew extends State {
child: Text(
LocaleKeys.termsConditoins.tr(),
style: context.dynamicTextStyle(
- fontSize: 14.fSize,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
color: AppColors.primaryRedColor,
decoration: TextDecoration.underline,
@@ -216,7 +216,7 @@ class _RegisterNew extends State {
text: TextSpan(
style: context.dynamicTextStyle(
color: Colors.black,
- fontSize: 16.fSize,
+ fontSize: 16.f,
height: 26 / 16,
fontWeight: FontWeight.w500,
),
@@ -227,7 +227,7 @@ class _RegisterNew extends State {
text: LocaleKeys.loginNow.tr(),
style: context.dynamicTextStyle(
color: AppColors.primaryRedColor,
- fontSize: 16.fSize,
+ fontSize: 16.f,
height: 26 / 16,
fontWeight: FontWeight.w500,
),
diff --git a/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart b/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart
index 1a772f7..2785449 100644
--- a/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart
+++ b/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart
@@ -62,7 +62,7 @@ class DoctorsFilters extends StatelessWidget{
style:TextStyle(
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
- fontSize: 27.fSize,
+ fontSize: 27.f,
color: AppColors.textColor,
letterSpacing: -1
)
@@ -72,7 +72,7 @@ class DoctorsFilters extends StatelessWidget{
style:TextStyle(
fontFamily: 'Poppins',
fontWeight: FontWeight.w500,
- fontSize: 14.fSize,
+ fontSize: 14.f,
color: AppColors.errorColor
)
).onPress((){
@@ -202,7 +202,7 @@ class DoctorsFilters extends StatelessWidget{
style:TextStyle(
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
- fontSize: 16.fSize,
+ fontSize: 16.f,
color: AppColors.textColor,
letterSpacing:-1
)
diff --git a/lib/presentation/book_appointment/laser/laser_appointment.dart b/lib/presentation/book_appointment/laser/laser_appointment.dart
index bad0591..440ae45 100644
--- a/lib/presentation/book_appointment/laser/laser_appointment.dart
+++ b/lib/presentation/book_appointment/laser/laser_appointment.dart
@@ -39,7 +39,7 @@ class LaserAppointment extends StatelessWidget {
Text(
LocaleKeys.totalMinutes.tr(),
style: TextStyle(
- fontSize: 12.fSize,
+ fontSize: 12.f,
fontWeight: FontWeight.w600,
color: AppColors.textColor,
letterSpacing: -0.48,
@@ -48,7 +48,7 @@ class LaserAppointment extends StatelessWidget {
Text(
"$duration / 90".tr(),
style: TextStyle(
- fontSize: 16.fSize,
+ fontSize: 16.f,
fontWeight: FontWeight.bold,
color: AppColors.textColor,
letterSpacing: -0.64,
diff --git a/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart b/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart
index 564c013..c957868 100644
--- a/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart
+++ b/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart
@@ -43,85 +43,88 @@ class BodyPartsListing extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return SizedBox( height: 80, width: 80,).toShimmer2(isShow: isLoading);
})),
- GridView.builder(
- gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
- crossAxisCount: 3,
- childAspectRatio: 85 / 107,
- crossAxisSpacing: 4.h,
- mainAxisSpacing: 21.h),
- physics: NeverScrollableScrollPhysics(),
- shrinkWrap: true,
- itemCount: parts.length,
- // padding: fullBody != null ? EdgeInsets.only(top: 16) : EdgeInsets.zero,
- padding: EdgeInsets.zero,
- itemBuilder: (BuildContext context, int index) {
- bool _isSelected =
- selectedPart.any((file) => file.id == parts[index].id);
- return InkWell(
- onTap: () {
- onPartSelected(parts[index]);
- },
- child: AnimatedOpacity(
- opacity: 1.0,
- duration: Duration(milliseconds: 200),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- AspectRatio(
- aspectRatio: 97 / 97,
- child: FittedBox(
- fit: BoxFit.fitWidth,
- child: Stack(
- alignment: Alignment.topRight,
- children: [
- Container(
- margin: EdgeInsets.only(top: 5.h, right: 5.h),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(15.0),
- border: Border.all(
- color: _isSelected
- ? AppColors.primaryRedColor
- : AppColors.borderGrayColor,
- width: 2.h),
- ),
- child: LaserBodyParts().getCategoryImage(isMale,
- laserCategoryID, parts[index].mappingCode!),
- ),
- if (_isSelected)
+ Visibility(
+ visible: !isLoading,
+ child: GridView.builder(
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 3,
+ childAspectRatio: 85 / 107,
+ crossAxisSpacing: 4.h,
+ mainAxisSpacing: 21.h),
+ physics: NeverScrollableScrollPhysics(),
+ shrinkWrap: true,
+ itemCount: parts.length,
+ // padding: fullBody != null ? EdgeInsets.only(top: 16) : EdgeInsets.zero,
+ padding: EdgeInsets.zero,
+ itemBuilder: (BuildContext context, int index) {
+ bool _isSelected =
+ selectedPart.any((file) => file.id == parts[index].id);
+ return InkWell(
+ onTap: () {
+ onPartSelected(parts[index]);
+ },
+ child: AnimatedOpacity(
+ opacity: 1.0,
+ duration: Duration(milliseconds: 200),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ AspectRatio(
+ aspectRatio: 97 / 97,
+ child: FittedBox(
+ fit: BoxFit.fitWidth,
+ child: Stack(
+ alignment: Alignment.topRight,
+ children: [
Container(
- width: 18.h,
- height: 18.h,
- child: Icon(Icons.done,
- color: Colors.white, size: 12.h),
+ margin: EdgeInsets.only(top: 5.h, right: 5.h),
decoration: BoxDecoration(
- color: AppColors.primaryRedColor,
- borderRadius: BorderRadius.circular(30.h),
+ borderRadius: BorderRadius.circular(15.0),
+ border: Border.all(
+ color: _isSelected
+ ? AppColors.primaryRedColor
+ : AppColors.borderGrayColor,
+ width: 2.h),
),
+ child: LaserBodyParts().getCategoryImage(isMale,
+ laserCategoryID, parts[index].mappingCode!),
),
- ],
+ if (_isSelected)
+ Container(
+ width: 18.h,
+ height: 18.h,
+ child: Icon(Icons.done,
+ color: Colors.white, size: 12.h),
+ decoration: BoxDecoration(
+ color: AppColors.primaryRedColor,
+ borderRadius: BorderRadius.circular(30.h),
+ ),
+ ),
+ ],
+ ),
),
),
- ),
- SizedBox(height: 6.h),
- Expanded(
- child: Text(
- context
- .read()
- .getLaserProcedureNameWRTLanguage(parts[index]),
- style: TextStyle(
- fontSize: 12.fSize,
- fontWeight: FontWeight.w600,
- color: Color(0xff2B353E),
- letterSpacing: -0.48,
+ SizedBox(height: 6.h),
+ Expanded(
+ child: Text(
+ context
+ .read()
+ .getLaserProcedureNameWRTLanguage(parts[index]),
+ style: TextStyle(
+ fontSize: 12.f,
+ fontWeight: FontWeight.w600,
+ color: Color(0xff2B353E),
+ letterSpacing: -0.48,
+ ),
+ maxLines: 1,
),
- maxLines: 1,
),
- ),
- ],
+ ],
+ ),
),
- ),
- );
- },
+ );
+ },
+ ),
),
],
);
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
index 2d671cf..e9e5c5c 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
@@ -278,7 +278,7 @@ class _ImmediateLiveCarePendingRequestPageState extends State {
});
}
- Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) {
+ Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) {
if (data.bottomSheetState == AppointmentViaRegionState.REGION_SELECTION) {
return RegionBottomSheetBody();
}
@@ -303,7 +303,10 @@ class _SelectClinicPageState extends State {
id = regionalViewModel.selectedHospital?.patientDoctorAppointmentList?.first.projectID?.toString() ?? "";
}
if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) {
- if (!appState.isAuthenticated) {
+ if (appState.isAuthenticated) {
+ initDentalAppointment();
+ return SizedBox.shrink();
+ }else {
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
}
}
@@ -459,8 +462,21 @@ class _SelectClinicPageState extends State {
isCloseButtonVisible: true,
);
} else {
- // Navigate to Chief Complaint Screen
+ bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
+ Navigator.of(context).push(
+ CustomPageRoute(
+ page: DentalChiefComplaintsPage(),
+ ),
+ );
}
});
}
+
+ void initDentalAppointment() async {
+ await Future.delayed(Duration(milliseconds: 300));
+ initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel
+ .currentlySelectedHospitalFromRegionFlow ??
+ "0"));
+ return;
+ }
}
diff --git a/lib/presentation/book_appointment/select_doctor_page.dart b/lib/presentation/book_appointment/select_doctor_page.dart
index b0b2a45..46c3774 100644
--- a/lib/presentation/book_appointment/select_doctor_page.dart
+++ b/lib/presentation/book_appointment/select_doctor_page.dart
@@ -15,8 +15,8 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/resp_model
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/doctor_card.dart';
-import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
@@ -132,14 +132,18 @@ class _SelectDoctorPageState extends State {
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
+ decoration:
+ RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: DoctorCard(
- doctorsListResponseModel: bookAppointmentsVM.isLiveCareSchedule ? bookAppointmentsVM.liveCareDoctorsList[index] : bookAppointmentsVM.doctorsList[index],
+ doctorsListResponseModel: bookAppointmentsVM.isLiveCareSchedule
+ ? bookAppointmentsVM.liveCareDoctorsList[index]
+ : bookAppointmentsVM.doctorsList[index],
isLoading: false,
bookAppointmentsViewModel: bookAppointmentsViewModel,
).onPress(() async {
- bookAppointmentsVM
- .setSelectedDoctor(bookAppointmentsVM.isLiveCareSchedule ? bookAppointmentsVM.liveCareDoctorsList[index] : bookAppointmentsVM.doctorsList[index]);
+ bookAppointmentsVM.setSelectedDoctor(bookAppointmentsVM.isLiveCareSchedule
+ ? bookAppointmentsVM.liveCareDoctorsList[index]
+ : bookAppointmentsVM.doctorsList[index]);
// bookAppointmentsVM.setSelectedDoctor(DoctorsListResponseModel());
LoaderBottomSheet.showLoader();
await bookAppointmentsVM.getDoctorProfile(onSuccess: (dynamic respData) {
diff --git a/lib/presentation/book_appointment/widgets/appointment_calendar.dart b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
index e7a47aa..ff966c2 100644
--- a/lib/presentation/book_appointment/widgets/appointment_calendar.dart
+++ b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
@@ -99,11 +99,11 @@ class _AppointmentCalendarState extends State {
headerStyle: CalendarHeaderStyle(
backgroundColor: AppColors.scaffoldBgColor,
textAlign: TextAlign.start,
- textStyle: TextStyle(fontSize: 18.fSize, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: AppColors.primaryRedColor, fontFamily: "Poppins"),
+ textStyle: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: AppColors.primaryRedColor, fontFamily: "Poppins"),
),
viewHeaderStyle: ViewHeaderStyle(
backgroundColor: AppColors.scaffoldBgColor,
- dayTextStyle: TextStyle(fontSize: 14.fSize, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: AppColors.textColor),
+ dayTextStyle: TextStyle(fontSize: 14.f, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: AppColors.textColor),
),
view: CalendarView.month,
todayHighlightColor: Colors.transparent,
@@ -131,7 +131,7 @@ class _AppointmentCalendarState extends State {
showTrailingAndLeadingDates: false,
appointmentDisplayCount: 1,
monthCellStyle: MonthCellStyle(
- textStyle: TextStyle(fontSize: 19.fSize),
+ textStyle: TextStyle(fontSize: 19.f),
),
),
onTap: (CalendarTapDetails details) {
diff --git a/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart
new file mode 100644
index 0000000..0e23d49
--- /dev/null
+++ b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart
@@ -0,0 +1,46 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/radio/custom_radio_button.dart';
+import 'package:provider/provider.dart';
+
+class RrtRequestTypeSelect extends StatelessWidget {
+ const RrtRequestTypeSelect({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ // return Consumer(builder: (context, emergencyServicesVM, child) {
+ return Column(
+ children: [
+ Container(
+ padding: EdgeInsets.all(16.h),
+ height: 200.h,
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 24.h,
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ children: [
+ CustomRadioOption(
+ value: "",
+ groupValue: "",
+ onChanged: (value) {},
+ text: "Home Visit Emergency",
+ )
+ ],
+ ),
+ ],
+ ),
+ ),
+ SizedBox(height: 32.h),
+ ],
+ );
+ // });
+ }
+}
diff --git a/lib/presentation/emergency_services/emergency_services_page.dart b/lib/presentation/emergency_services/emergency_services_page.dart
new file mode 100644
index 0000000..adf141a
--- /dev/null
+++ b/lib/presentation/emergency_services/emergency_services_page.dart
@@ -0,0 +1,191 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/location_util.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/rrt_request_type_select.dart';
+import 'package:hmg_patient_app_new/presentation/emergency_services/nearest_er_page.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:lottie/lottie.dart';
+import 'package:provider/provider.dart';
+
+class EmergencyServicesPage extends StatelessWidget {
+ EmergencyServicesPage({super.key});
+
+ late EmergencyServicesViewModel emergencyServicesViewModel;
+ LocationUtils? locationUtils;
+
+ @override
+ Widget build(BuildContext context) {
+ emergencyServicesViewModel = Provider.of(context, listen: false);
+ locationUtils = getIt.get();
+ locationUtils!.isShowConfirmDialog = true;
+ return CollapsingListView(
+ title: "Emergency Services".needTranslation,
+ requests: () {},
+ child: Padding(
+ padding: EdgeInsets.all(24.h),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ padding: EdgeInsets.all(16.h),
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 20.h,
+ hasShadow: false,
+ ),
+ child: Row(
+ children: [
+ Utils.buildSvgWithAssets(icon: AppAssets.call_ambulance_icon, width: 40.h, height: 40.h),
+ SizedBox(width: 12.h),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ "Call Ambulance".needTranslation.toText16(isBold: true, color: AppColors.blackColor),
+ "Request and ambulance in emergency from home or hospital".needTranslation.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
+ ],
+ ),
+ ),
+ SizedBox(width: 12.h),
+ Utils.buildSvgWithAssets(icon: AppAssets.forward_chevron_icon, width: 13.h, height: 13.h),
+ ],
+ ),
+ ),
+ SizedBox(height: 16.h),
+ Container(
+ padding: EdgeInsets.all(16.h),
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 20.h,
+ hasShadow: false,
+ ),
+ child: Row(
+ children: [
+ Utils.buildSvgWithAssets(icon: AppAssets.nearest_er_icon, width: 40.h, height: 40.h),
+ SizedBox(width: 12.h),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ "Nearest ER Location".needTranslation.toText16(isBold: true, color: AppColors.blackColor),
+ "Get the details of nearest branch including directions".needTranslation.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
+ ],
+ ),
+ ),
+ SizedBox(width: 12.h),
+ Utils.buildSvgWithAssets(icon: AppAssets.forward_chevron_icon, width: 13.h, height: 13.h),
+ ],
+ ).onPress(() {
+ context.read().navigateToNearestERPage();
+ }),
+ ),
+ SizedBox(height: 16.h),
+ Container(
+ padding: EdgeInsets.all(16.h),
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 20.h,
+ hasShadow: false,
+ ),
+ child: Row(
+ children: [
+ Utils.buildSvgWithAssets(icon: AppAssets.rrt_icon, width: 40.h, height: 40.h),
+ SizedBox(width: 12.h),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ "Rapid Response Team (RRT)".toText16(isBold: true, color: AppColors.blackColor),
+ "Comprehensive medical service for all sorts of urgent and stable cases".toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
+ ],
+ ),
+ ),
+ SizedBox(width: 12.h),
+ Utils.buildSvgWithAssets(icon: AppAssets.forward_chevron_icon, width: 13.h, height: 13.h),
+ ],
+ ).onPress(() {
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Container(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.primaryRedColor,
+ borderRadius: 24.h,
+ ),
+ child: Padding(
+ padding: EdgeInsets.all(24.h),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ "".toText14(),
+ Utils.buildSvgWithAssets(
+ icon: AppAssets.cancel_circle_icon,
+ iconColor: AppColors.whiteColor,
+ width: 24.h,
+ height: 24.h,
+ fit: BoxFit.contain,
+ ).onPress(() {
+ Navigator.of(context).pop();
+ }),
+ ],
+ ),
+ Lottie.asset(AppAnimations.ambulance_alert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
+ SizedBox(height: 8.h),
+ "Confirmation".needTranslation.toText28(color: AppColors.whiteColor, isBold: true),
+ SizedBox(height: 8.h),
+ "Are you sure you want to call Rapid Response Team (RRT)?".needTranslation.toText14(color: AppColors.whiteColor, weight: FontWeight.w500),
+ SizedBox(height: 24.h),
+ CustomButton(
+ text: LocaleKeys.confirm.tr(context: context),
+ onPressed: () async {
+ Navigator.of(context).pop();
+ showCommonBottomSheetWithoutHeight(
+ title: "Rapid Response Team (RRT)".needTranslation,
+ context,
+ child: RrtRequestTypeSelect(),
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ hasBottomPadding: false,
+ backgroundColor: AppColors.bottomSheetBgColor,
+ callBackFunc: () {},
+ );
+ },
+ backgroundColor: AppColors.whiteColor,
+ borderColor: AppColors.whiteColor,
+ textColor: AppColors.primaryRedColor,
+ icon: AppAssets.checkmark_icon,
+ iconColor: AppColors.primaryRedColor,
+ ),
+ SizedBox(height: 8.h),
+ ],
+ ),
+ ),
+ ),
+ isFullScreen: false,
+ isCloseButtonVisible: false,
+ hasBottomPadding: false,
+ backgroundColor: AppColors.primaryRedColor,
+ callBackFunc: () {},
+ );
+ }),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/presentation/emergency_services/nearest_er_page.dart b/lib/presentation/emergency_services/nearest_er_page.dart
new file mode 100644
index 0000000..8138f57
--- /dev/null
+++ b/lib/presentation/emergency_services/nearest_er_page.dart
@@ -0,0 +1,104 @@
+import 'package:easy_localization/easy_localization.dart' show tr, StringTranslateExtension;
+import 'package:flutter/material.dart';
+import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/emergency_services/widgets/nearestERItem.dart' show NearestERItem;
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/input_widget.dart';
+import 'package:provider/provider.dart' show Selector, WatchContext, ReadContext;
+
+import '../../core/enums.dart' show SelectionTypeEnum;
+import '../../core/utils/debouncer.dart' show Debouncer;
+
+class NearestErPage extends StatefulWidget {
+ const NearestErPage({super.key});
+
+ @override
+ State createState() => _NearestErPageState();
+}
+
+class _NearestErPageState extends State {
+ final TextEditingController searchText = TextEditingController();
+ final Debouncer debouncer = Debouncer(milliseconds: 500);
+
+ @override
+ void dispose() {
+ debouncer.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return CollapsingListView(
+ title: "Nearest ER".needTranslation,
+ child: SingleChildScrollView(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisSize: MainAxisSize.max,
+ children: [
+ TextInputWidget(
+ labelText: LocaleKeys.search.tr(),
+ hintText: 'Type any facility name'.needTranslation,
+ controller: searchText,
+ onChange: (value) {
+ debouncer.run(() {
+ context.read().filterErList(value ?? '');
+ });
+ },
+ isEnable: true,
+ prefix: null,
+ autoFocus: false,
+ isBorderAllowed: false,
+ keyboardType: TextInputType.text,
+ isAllowLeadingIcon: true,
+ leadingIcon: AppAssets.search_icon,
+ padding: EdgeInsets.symmetric(
+ vertical: ResponsiveExtension(10).h,
+ horizontal: ResponsiveExtension(15).h,
+ ),
+ ),
+ Selector(
+ selector: (___, viewModel) => viewModel.isERListLoading,
+ builder: (_, isLoading, __) => Selector>(
+ selector: (___, viewModel) => viewModel.nearestERFilteredList,
+ shouldRebuild: (previous, next) => previous != next,
+ builder: (_, value, __) {
+ if (isLoading || value.isNotEmpty) {
+ return ListView.separated(
+ padding: EdgeInsets.only(top: 24.h),
+ itemCount: isLoading ? 6 : value.length,
+ separatorBuilder: (____, _____) => SizedBox(
+ height: 16.h,
+ ),
+ shrinkWrap: true,
+ physics: NeverScrollableScrollPhysics(),
+ itemBuilder: (context, index) {
+ return AnimationConfiguration.staggeredList(
+ position: index,
+ duration: const Duration(milliseconds: 500),
+ child: SlideAnimation(
+ verticalOffset: 100.0,
+ child: FadeInAnimation(
+ child: NearestERItem(
+ isLoading: isLoading,
+ nearestERItem: isLoading ? ProjectAvgERWaitingTime() : value[index],
+ ))));
+ },
+ );
+ } else {
+ return Center(child: Utils.getNoDataWidget(context, noDataText: "No nearest Er Arround you".needTranslation));
+ }
+ }),
+ ),
+ ],
+ ).paddingAll(16.h),
+ ));
+ }
+}
diff --git a/lib/presentation/emergency_services/widgets/nearestERItem.dart b/lib/presentation/emergency_services/widgets/nearestERItem.dart
new file mode 100644
index 0000000..3dc2aa1
--- /dev/null
+++ b/lib/presentation/emergency_services/widgets/nearestERItem.dart
@@ -0,0 +1,130 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:provider/provider.dart';
+
+class NearestERItem extends StatelessWidget {
+ final ProjectAvgERWaitingTime nearestERItem;
+ final bool isLoading;
+
+
+ const NearestERItem({ super.key,
+ required this.nearestERItem,
+ required this.isLoading
+ }) ;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: Colors.white,
+ customBorder: BorderRadius.only(
+ topLeft: Radius.circular(24.h),
+ topRight: Radius.circular(24.h),
+ ),
+ ),
+ child: Padding(
+ padding: EdgeInsets.all(16.h),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ children: [
+ (isLoading || nearestERItem.projectImageURL?.isEmpty == true)
+ ? Container(
+ width: 24.h,
+ height: 24.h,
+ decoration: BoxDecoration(
+ color: Colors.grey.shade300,
+ shape: BoxShape.circle,
+ ),
+ ).toShimmer2(isShow: isLoading)
+ : Utils.buildImgWithNetwork(
+ url: nearestERItem.projectImageURL ?? '',
+ iconColor: Colors.transparent,
+ ).circle(24.h).toShimmer2(isShow: isLoading),
+ const SizedBox(width: 12),
+ Expanded(
+ child: (nearestERItem.projectName?.toText16(
+ color: AppColors.textColor,
+ weight: FontWeight.w600,
+ ) ??
+ SizedBox.shrink()).toShimmer2(isShow: isLoading),
+ ),
+ // TODO: Add hospital icon logic here if needed
+ ],
+ ),
+ SizedBox(height: 8.h),
+ Row(
+ spacing: 8.h,
+ children: [
+ AppCustomChipWidget(
+ labelText: "${nearestERItem.distanceInKilometers} km".needTranslation,
+ icon: AppAssets.location,
+ iconHasColor: false,
+ labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
+ padding: EdgeInsets.all(8.h),
+ ).toShimmer2(isShow: isLoading),
+ AppCustomChipWidget(
+ labelText: "Expected waiting time: ${nearestERItem.getTime()} mins".needTranslation,
+ icon: AppAssets.waiting_time_clock,
+ iconHasColor: false,
+ labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
+ padding: EdgeInsets.all(8.h),
+ ).toShimmer2(isShow: isLoading),
+ ],
+ ),
+ SizedBox(height: 16.h),
+ Row(
+ children: [
+ Expanded(
+ child: CustomButton(
+ text: "View Location on Google Maps".needTranslation,
+ iconSize: 18.h,
+ icon: AppAssets.location,
+ onPressed: () {
+ context.read().openDirections(destLat: double.parse(nearestERItem.latitude??"0.0"), destLng: double.parse(nearestERItem.longitude??"0.0") );
+ },
+ backgroundColor: AppColors.secondaryLightRedColor,
+ borderColor: AppColors.secondaryLightRedColor,
+ textColor: AppColors.primaryRedColor,
+ iconColor: AppColors.primaryRedColor,
+ height: 40.h,
+ fontSize: 14,
+ fontWeight: FontWeight.w500,
+ ).toShimmer2(isShow: isLoading),
+ ),
+ SizedBox(width: 8.h),
+ SizedBox(
+ height: 40.h,
+ width: 40.h,
+ child: CustomButton(
+ text: '',
+ iconSize: 18.h,
+ icon: AppAssets.call_fill,
+ onPressed: () {
+ context.read().openDialer( nearestERItem.phonenumber??"");
+
+ },
+ backgroundColor: AppColors.greyColor,
+ iconColor: AppColors.textColor,
+ borderColor: AppColors.greyColor,
+ height: 40.h,
+ ).toShimmer2(isShow: isLoading),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart
new file mode 100644
index 0000000..f79aae0
--- /dev/null
+++ b/lib/presentation/hmg_services/services_page.dart
@@ -0,0 +1,25 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+
+class ServicesPage extends StatelessWidget {
+ const ServicesPage({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return CollapsingListView(
+ title: "Explore Services".needTranslation,
+ isLeading: false,
+ child: Padding(
+ padding: EdgeInsets.all(24.h),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ "Medical & Care Services".needTranslation.toText18(isBold: true)
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 7de153f..9cd72fa 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -19,7 +19,6 @@ import 'package:hmg_patient_app_new/features/book_appointments/book_appointments
import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart';
-import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart';
@@ -37,17 +36,12 @@ import 'package:hmg_patient_app_new/presentation/home/widgets/welcome_widget.dar
import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
import 'package:hmg_patient_app_new/presentation/profile_settings/profile_settings.dart';
import 'package:hmg_patient_app_new/services/cache_service.dart';
-import 'package:hmg_patient_app_new/services/navigation_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
-import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart' show CustomTabBar;
-import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/routes/spring_page_route_builder.dart';
-import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
-import 'package:lottie/lottie.dart';
import 'package:provider/provider.dart';
class LandingPage extends StatefulWidget {
@@ -139,7 +133,7 @@ class _LandingPageState extends State {
backgroundColor: Color(0xffFEE9EA),
borderColor: Color(0xffFEE9EA),
textColor: Color(0xffED1C2B),
- fontSize: 14,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
borderRadius: 12,
padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
@@ -149,7 +143,7 @@ class _LandingPageState extends State {
mainAxisSize: MainAxisSize.min,
spacing: 12.h,
children: [
- Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 20, width: 20).onPress(() {
+ Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: MedicalFilePage(),
@@ -157,7 +151,7 @@ class _LandingPageState extends State {
),
);
}),
- Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 20, width: 20).onPress(() {
+ Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 18.h, width: 18.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: MedicalFilePage(),
@@ -165,7 +159,7 @@ class _LandingPageState extends State {
),
);
}),
- Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 20, width: 20).onPress(() {
+ Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 18.h, width: 18.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: MedicalFilePage(),
@@ -216,7 +210,8 @@ class _LandingPageState extends State {
: myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
? Container(
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
+ decoration:
+ RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
myAppointmentsViewModel: myAppointmentsViewModel,
@@ -245,7 +240,8 @@ class _LandingPageState extends State {
),
itemBuilder: (BuildContext context, int index) {
return Container(
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
+ decoration: RoundedRectangleBorder()
+ .toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
myAppointmentsViewModel: myAppointmentsViewModel,
@@ -258,7 +254,8 @@ class _LandingPageState extends State {
)
: Container(
width: double.infinity,
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24, hasShadow: true),
+ decoration:
+ RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24, hasShadow: true),
child: Padding(
padding: EdgeInsets.all(12.h),
child: Column(
@@ -279,11 +276,9 @@ class _LandingPageState extends State {
backgroundColor: Color(0xffFEE9EA),
borderColor: Color(0xffFEE9EA),
textColor: Color(0xffED1C2B),
- fontSize: 14,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
- borderRadius: 12,
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 40,
+ padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
icon: AppAssets.add_icon,
iconColor: AppColors.primaryRedColor,
),
@@ -406,7 +401,7 @@ class _LandingPageState extends State {
),
);
},
- separatorBuilder: (BuildContext cxt, int index) => 0.width,
+ separatorBuilder: (BuildContext cxt, int index) => 10.width,
),
),
],
@@ -436,6 +431,7 @@ class _LandingPageState extends State {
horizontalOffset: 100.0,
child: FadeInAnimation(
child: SmallServiceCard(
+ serviceName: LandingPageData.getNotLoggedInServiceCardsList[index].serviceName,
icon: LandingPageData.getNotLoggedInServiceCardsList[index].icon,
title: LandingPageData.getNotLoggedInServiceCardsList[index].title,
subtitle: LandingPageData.getNotLoggedInServiceCardsList[index].subtitle,
@@ -512,6 +508,7 @@ class _LandingPageState extends State {
context,
title: "",
isCloseButtonVisible: false,
+
child: StatefulBuilder(builder: (context, setState) {
return QuickLogin(
isDone: isDone,
diff --git a/lib/presentation/home/navigation_screen.dart b/lib/presentation/home/navigation_screen.dart
index 6b33b2f..c2bfae7 100644
--- a/lib/presentation/home/navigation_screen.dart
+++ b/lib/presentation/home/navigation_screen.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
+import 'package:hmg_patient_app_new/presentation/hmg_services/services_page.dart';
import 'package:hmg_patient_app_new/presentation/home/landing_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
import 'package:hmg_patient_app_new/widgets/bottom_navigation/bottom_navigation.dart';
@@ -30,7 +31,7 @@ class _LandingNavigationState extends State {
appState.isAuthenticated ? MedicalFilePage() : /* need add feedback page */ const LandingPage(),
BookAppointmentPage(),
const LandingPage(),
- appState.isAuthenticated ? /* need add news page */ LandingPage() : const LandingPage(),
+ appState.isAuthenticated ? /* need add news page */ ServicesPage() : const LandingPage(),
],
),
bottomNavigationBar: BottomNavigation(
diff --git a/lib/presentation/home/widgets/small_service_card.dart b/lib/presentation/home/widgets/small_service_card.dart
index 416ed9a..ee5fcca 100644
--- a/lib/presentation/home/widgets/small_service_card.dart
+++ b/lib/presentation/home/widgets/small_service_card.dart
@@ -3,6 +3,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.dart';
+import 'package:hmg_patient_app_new/presentation/emergency_services/emergency_services_page.dart';
import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart';
@@ -104,6 +105,13 @@ class SmallServiceCard extends StatelessWidget {
),
);
break;
+ case "emergency":
+ Navigator.of(context).push(
+ CustomPageRoute(
+ page: EmergencyServicesPage(),
+ ),
+ );
+ break;
default:
// Handle unknown service
break;
diff --git a/lib/presentation/insurance/widgets/insurance_approval_details_page.dart b/lib/presentation/insurance/insurance_approval_details_page.dart
similarity index 82%
rename from lib/presentation/insurance/widgets/insurance_approval_details_page.dart
rename to lib/presentation/insurance/insurance_approval_details_page.dart
index c9b1517..437c870 100644
--- a/lib/presentation/insurance/widgets/insurance_approval_details_page.dart
+++ b/lib/presentation/insurance/insurance_approval_details_page.dart
@@ -111,8 +111,6 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
),
SizedBox(height: 16.h),
Container(
- width: double.infinity,
- height: 200.h,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 24.h,
@@ -124,6 +122,33 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Approval Details".toText16(isBold: true),
+ SizedBox(height: 16.h),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ LocaleKeys.procedureName.tr(context: context).toText14(isBold: true),
+ Expanded(
+ child: insuranceApprovalResponseModel.apporvalDetails!.procedureName!
+ .toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor, textAlignment: TextAlign.end, maxLine: 2),
+ ),
+ ],
+ ),
+ SizedBox(height: 8.h),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ "Status:".needTranslation.toText14(isBold: true),
+ insuranceApprovalResponseModel.apporvalDetails!.status!.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+ ],
+ ),
+ SizedBox(height: 8.h),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ "${LocaleKeys.usageStatus.tr(context: context)}: ".toText14(isBold: true),
+ insuranceApprovalResponseModel.apporvalDetails!.isInvoicedDesc!.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+ ],
+ ),
],
),
),
diff --git a/lib/presentation/insurance/insurance_approvals_page.dart b/lib/presentation/insurance/insurance_approvals_page.dart
index 50e659c..b70c116 100644
--- a/lib/presentation/insurance/insurance_approvals_page.dart
+++ b/lib/presentation/insurance/insurance_approvals_page.dart
@@ -13,7 +13,7 @@ import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart
import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_approval_card.dart';
-import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_approval_details_page.dart';
+import 'package:hmg_patient_app_new/presentation/insurance/insurance_approval_details_page.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
diff --git a/lib/presentation/insurance/widgets/insurance_approval_card.dart b/lib/presentation/insurance/widgets/insurance_approval_card.dart
index 71fce58..bea2e56 100644
--- a/lib/presentation/insurance/widgets/insurance_approval_card.dart
+++ b/lib/presentation/insurance/widgets/insurance_approval_card.dart
@@ -120,7 +120,7 @@ class InsuranceApprovalCard extends StatelessWidget {
Transform.flip(
flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)),
],
- ),
+ ).toShimmer2(isShow: isLoading),
],
),
),
diff --git a/lib/presentation/insurance/widgets/insurance_update_details_card.dart b/lib/presentation/insurance/widgets/insurance_update_details_card.dart
index 08e252b..acdf1c7 100644
--- a/lib/presentation/insurance/widgets/insurance_update_details_card.dart
+++ b/lib/presentation/insurance/widgets/insurance_update_details_card.dart
@@ -99,18 +99,17 @@ class PatientInsuranceCardUpdateCard extends StatelessWidget {
CustomButton(
icon: AppAssets.insurance_active_icon,
iconColor: AppColors.whiteColor,
- iconSize: 20.h,
+ iconSize: 20.w,
text: "${LocaleKeys.updateInsurance.tr(context: context)} ${LocaleKeys.updateInsuranceSubtitle.tr(context: context)}",
onPressed: () {},
backgroundColor: insuranceViewModel.patientInsuranceUpdateResponseModel != null ? AppColors.successColor : AppColors.lightGrayBGColor,
borderColor: AppColors.successColor.withOpacity(0.01),
textColor: AppColors.whiteColor,
- fontSize: 16,
+ fontSize: 16.f,
fontWeight: FontWeight.w500,
- borderRadius: 12,
+ borderRadius: 12.r,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 56.h,
- ).paddingSymmetrical(24.h, 0.h),
+ ).paddingSymmetrical(24.w, 0.h),
],
);
}
diff --git a/lib/presentation/insurance/widgets/patient_insurance_card.dart b/lib/presentation/insurance/widgets/patient_insurance_card.dart
index b89d3e8..5190e5b 100644
--- a/lib/presentation/insurance/widgets/patient_insurance_card.dart
+++ b/lib/presentation/insurance/widgets/patient_insurance_card.dart
@@ -43,6 +43,7 @@ class PatientInsuranceCard extends StatelessWidget {
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -51,20 +52,14 @@ class PatientInsuranceCard extends StatelessWidget {
"Policy: ${insuranceCardDetailsModel.insurancePolicyNo}".toText12(isBold: true, color: AppColors.lightGrayColor),
],
),
- CustomButton(
+ AppCustomChipWidget(
icon: isInsuranceExpired ? AppAssets.cancel_circle_icon : AppAssets.insurance_active_icon,
+ labelText: isInsuranceExpired ? "Insurance Expired".needTranslation : "Insurance Active".needTranslation,
iconColor: isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
- iconSize: 13.h,
- text: isInsuranceExpired ? "Insurance Expired".needTranslation : "Insurance Active".needTranslation,
- onPressed: () {},
- backgroundColor: isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.15) : AppColors.successColor.withOpacity(0.15),
- borderColor: isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.01) : AppColors.successColor.withOpacity(0.01),
textColor: isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
- fontSize: 10,
- fontWeight: FontWeight.w500,
- borderRadius: 12,
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 30.h,
+ iconSize: 12,
+ backgroundColor: isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1),
+ labelPadding: EdgeInsetsDirectional.only(start: -4.h, end: 8.h),
),
],
),
@@ -79,8 +74,10 @@ class PatientInsuranceCard extends StatelessWidget {
children: [
AppCustomChipWidget(
icon: AppAssets.doctor_calendar_icon,
- labelText: "${LocaleKeys.expiryDate.tr(context: context)} ${DateUtil.formatDateToDate(DateUtil.convertStringToDate(insuranceCardDetailsModel.cardValidTo), false)}"),
- AppCustomChipWidget(labelText: "Patient Card ID: ${insuranceCardDetailsModel.patientCardID}"),
+ labelText: "${LocaleKeys.expiryDate.tr(context: context)} ${DateUtil.formatDateToDate(DateUtil.convertStringToDate(insuranceCardDetailsModel.cardValidTo), false)}",
+ labelPadding: EdgeInsetsDirectional.only(start: -4.h, end: 8.h),
+ ),
+ AppCustomChipWidget(labelText: "Patient Card ID: ${insuranceCardDetailsModel.patientCardID}".needTranslation),
],
),
SizedBox(height: 10.h),
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 882c737..0b9d093 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';
class LabOrdersPage extends StatefulWidget {
const LabOrdersPage({super.key});
@override
State createState() => _LabOrdersPageState();
}
class _LabOrdersPageState extends State {
late LabViewModel labProvider;
late DateRangeSelectorRangeViewModel rangeViewModel;
late AppState _appState;
List?> labSuggestions = [];
int? expandedIndex;
String? selectedFilterText = '';
int activeIndex = 0;
@override
void initState() {
scheduleMicrotask(() {
labProvider.initLabProvider();
});
super.initState();
}
@override
Widget build(BuildContext context) {
labProvider = Provider.of(context, listen: false);
rangeViewModel = Provider.of(context);
_appState = getIt();
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
title: LocaleKeys.labResults.tr(),
search: () async {
final lavVM = Provider.of(context, listen: false);
if (lavVM.isLabOrdersLoading) {
return;
} else {
String? value = await Navigator.of(context).push(
CustomPageRoute(
page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
fullScreenDialog: true,
direction: AxisDirection.down,
),
);
if (value != null) {
selectedFilterText = value;
lavVM.filterLabReports(value);
}
}
},
child: SingleChildScrollView(
padding: EdgeInsets.all(24.h),
physics: NeverScrollableScrollPhysics(),
child: Consumer(
builder: (context, model, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 16.h),
CustomTabBar(
activeTextColor: Color(0xffED1C2B),
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
tabs: [
CustomTabBarModel(null, "By Visit".needTranslation),
CustomTabBarModel(null, "By Test".needTranslation),
// CustomTabBarModel(null, "Completed".needTranslation),
],
onTabChange: (index) {
activeIndex = index;
setState(() {});
},
),
SizedBox(height: 16.h),
selectedFilterText!.isNotEmpty
? CustomChipWidget(
chipText: selectedFilterText!,
chipType: ChipTypeEnum.alert,
isSelected: true,
)
: SizedBox(),
activeIndex == 0
? ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.isLabOrdersLoading
? 5
: model.patientLabOrders.isNotEmpty
? model.patientLabOrders.length
: 1,
itemBuilder: (context, index) {
final isExpanded = expandedIndex == index;
return model.isLabOrdersLoading
? LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)
: model.patientLabOrders.isNotEmpty
? AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: LabResultItemView(
onTap: () {
model.currentlySelectedPatientOrder =
model.patientLabOrders[
index];
labProvider.getPatientLabResultByHospital(model.patientLabOrders[
index]);
labProvider
.getPatientSpecialResult(
model.patientLabOrders[
index]);
Navigator.push(
context,
CustomPageRoute(
page: LabResultByHospitals(),
));
},
labOrder: model.patientLabOrders[index],
index: index,
isExpanded: isExpanded),
),
),
)
: Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
},
)
: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.isLabOrdersLoading
? 5
: model.uniqueTests.toList().isNotEmpty
? model.uniqueTests.toList().length
: 1,
itemBuilder: (context, index) {
final isExpanded = expandedIndex == index;
return model.isLabOrdersLoading
? LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)
: model.uniqueTests.toList().isNotEmpty
? AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: LabOrderByTest(
appState: _appState,
onTap: () {
if (model.uniqueTests.toList()[index].model != null) {
rangeViewModel.flush();
model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
(_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
}
},
tests: model.uniqueTests.toList()[index],
index: index,
isExpanded: isExpanded)),
),
)
: Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
},
)
],
);
},
),
),
));
}
Color getLabOrderStatusColor(num status) {
switch (status) {
case 44:
return AppColors.warningColorYellow;
case 45:
return AppColors.warningColorYellow;
case 16:
return AppColors.successColor;
case 17:
return AppColors.successColor;
default:
return AppColors.greyColor;
}
}
String getLabOrderStatusText(num status) {
switch (status) {
case 44:
return LocaleKeys.resultsPending.tr(context: context);
case 45:
return LocaleKeys.resultsPending.tr(context: context);
case 16:
return LocaleKeys.resultsAvailable.tr(context: context);
case 17:
return LocaleKeys.resultsAvailable.tr(context: context);
default:
return "";
}
}
getLabSuggestions(LabViewModel model) {
if (model.patientLabOrders.isEmpty) {
return [];
}
return model.patientLabOrders.map((m) => m.testDetails).toList();
}
}
\ No newline at end of file
+import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';
class LabOrdersPage extends StatefulWidget {
const LabOrdersPage({super.key});
@override
State createState() => _LabOrdersPageState();
}
class _LabOrdersPageState extends State {
late LabViewModel labProvider;
late DateRangeSelectorRangeViewModel rangeViewModel;
late AppState _appState;
List?> labSuggestions = [];
int? expandedIndex;
String? selectedFilterText = '';
int activeIndex = 0;
@override
void initState() {
scheduleMicrotask(() {
labProvider.initLabProvider();
});
super.initState();
}
@override
Widget build(BuildContext context) {
labProvider = Provider.of(context, listen: false);
rangeViewModel = Provider.of(context);
_appState = getIt();
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
title: LocaleKeys.labResults.tr(),
search: () async {
final lavVM = Provider.of(context, listen: false);
if (lavVM.isLabOrdersLoading) {
return;
} else {
String? value = await Navigator.of(context).push(
CustomPageRoute(
page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
fullScreenDialog: true,
direction: AxisDirection.down,
),
);
if (value != null) {
selectedFilterText = value;
lavVM.filterLabReports(value);
}
}
},
child: SingleChildScrollView(
padding: EdgeInsets.all(24.h),
physics: NeverScrollableScrollPhysics(),
child: Consumer(
builder: (context, model, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 16.h),
CustomTabBar(
activeTextColor: Color(0xffED1C2B),
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
tabs: [
CustomTabBarModel(null, "By Visit".needTranslation),
CustomTabBarModel(null, "By Test".needTranslation),
// CustomTabBarModel(null, "Completed".needTranslation),
],
onTabChange: (index) {
activeIndex = index;
setState(() {});
},
),
SizedBox(height: 16.h),
selectedFilterText!.isNotEmpty
? CustomChipWidget(
chipText: selectedFilterText!,
chipType: ChipTypeEnum.alert,
isSelected: true,
)
: SizedBox(),
activeIndex == 0
? ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.isLabOrdersLoading
? 5
: model.patientLabOrders.isNotEmpty
? model.patientLabOrders.length
: 1,
itemBuilder: (context, index) {
final isExpanded = expandedIndex == index;
return model.isLabOrdersLoading
? LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)
: model.patientLabOrders.isNotEmpty
? AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: LabResultItemView(
onTap: () {
model.currentlySelectedPatientOrder =
model.patientLabOrders[
index];
labProvider.getPatientLabResultByHospital(model.patientLabOrders[
index]);
labProvider
.getPatientSpecialResult(
model.patientLabOrders[
index]);
Navigator.push(
context,
CustomPageRoute(
page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
));
},
labOrder: model.patientLabOrders[index],
index: index,
isExpanded: isExpanded),
),
),
)
: Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
},
)
: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.isLabOrdersLoading
? 5
: model.uniqueTests.toList().isNotEmpty
? model.uniqueTests.toList().length
: 1,
itemBuilder: (context, index) {
final isExpanded = expandedIndex == index;
return model.isLabOrdersLoading
? LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)
: model.uniqueTests.toList().isNotEmpty
? AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: LabOrderByTest(
appState: _appState,
onTap: () {
if (model.uniqueTests.toList()[index].model != null) {
rangeViewModel.flush();
model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
(_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
}
},
tests: model.uniqueTests.toList()[index],
index: index,
isExpanded: isExpanded)),
),
)
: Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
},
)
],
);
},
),
),
));
}
Color getLabOrderStatusColor(num status) {
switch (status) {
case 44:
return AppColors.warningColorYellow;
case 45:
return AppColors.warningColorYellow;
case 16:
return AppColors.successColor;
case 17:
return AppColors.successColor;
default:
return AppColors.greyColor;
}
}
String getLabOrderStatusText(num status) {
switch (status) {
case 44:
return LocaleKeys.resultsPending.tr(context: context);
case 45:
return LocaleKeys.resultsPending.tr(context: context);
case 16:
return LocaleKeys.resultsAvailable.tr(context: context);
case 17:
return LocaleKeys.resultsAvailable.tr(context: context);
default:
return "";
}
}
getLabSuggestions(LabViewModel model) {
if (model.patientLabOrders.isEmpty) {
return [];
}
return model.patientLabOrders.map((m) => m.testDetails).toList();
}
}
\ No newline at end of file
diff --git a/lib/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart b/lib/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart
new file mode 100644
index 0000000..a603ecb
--- /dev/null
+++ b/lib/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart
@@ -0,0 +1,144 @@
+import 'package:easy_localization/easy_localization.dart'
+ show tr, StringTranslateExtension;
+import 'package:flutter/material.dart';
+import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
+import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
+import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultList.dart';
+import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/lab_order_specialResult.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:open_filex/open_filex.dart';
+import 'package:provider/provider.dart';
+
+class LabResultByClinic extends StatelessWidget {
+ LabResultByClinic({required this.labOrder, Key? key});
+
+ late LabViewModel labViewModel;
+ PatientLabOrdersResponseModel labOrder;
+ @override
+ Widget build(BuildContext context) {
+ labViewModel = Provider.of(context, listen: false);
+ return Scaffold(
+ backgroundColor: AppColors.bgScaffoldColor,
+ body: Column(
+ children: [
+ Expanded(
+ child: CollapsingListView(
+ title: LocaleKeys.labResults.tr(),
+ child: SingleChildScrollView(
+ child: Column(
+ spacing: 8.h,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Selector(
+ selector: (_, model) => model.isLabResultByHospitalLoading,
+ builder: (_, isLoading, __) {
+ if (isLoading) {
+ return Column(
+ children: [
+ LabResultItemView(
+ onTap: () {},
+ labOrder: null,
+ index: 0,
+ isLoading: true,
+ ),
+ LabResultItemView(
+ onTap: () {},
+ labOrder: null,
+ index: 0,
+ isLoading: true,
+ ),
+ LabResultItemView(
+ onTap: () {},
+ labOrder: null,
+ index: 0,
+ isLoading: true,
+ ),
+ LabResultItemView(
+ onTap: () {},
+ labOrder: null,
+ index: 0,
+ isLoading: true,
+ ),
+ ],
+ );
+ } else {
+ return LabResultList();
+ }
+ },
+ ),
+ LabOrderSpecialResult()
+ ],
+ ).paddingAll(24.h),
+ )),
+ ),
+ Container(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 24.h,
+ hasShadow: true,
+ ),
+ child: CustomButton(
+ text: "Download report".needTranslation,
+ onPressed: () async {
+ LoaderBottomSheet.showLoader(loadingText: "Generating report, Please wait...".needTranslation);
+ await labViewModel
+ .getLabResultReportPDF(
+ labOrder: labOrder,
+ onError: (err) {
+ LoaderBottomSheet.hideLoader();
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getErrorWidget(loadingText: err),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ })
+ .then((val) async {
+ LoaderBottomSheet.hideLoader();
+ if (labViewModel.patientLabResultReportPDFBase64.isNotEmpty) {
+ String path = await Utils.createFileFromString(labViewModel.patientLabResultReportPDFBase64, "pdf");
+ try {
+ OpenFilex.open(path);
+ } catch (ex) {
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getErrorWidget(loadingText: "Cannot open file".needTranslation),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ }
+ }
+ });
+ },
+ backgroundColor: AppColors.successColor,
+ borderColor: AppColors.successColor,
+ textColor: AppColors.whiteColor,
+ fontSize: 16,
+ fontWeight: FontWeight.w500,
+ borderRadius: 12,
+ padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
+ height: 45.h,
+ icon: AppAssets.download,
+ iconColor: AppColors.whiteColor,
+ iconSize: 20.h,
+ ).paddingSymmetrical(24.h, 24.h),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/presentation/lab/lab_result_via_hospital/LabResultList.dart b/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
similarity index 97%
rename from lib/presentation/lab/lab_result_via_hospital/LabResultList.dart
rename to lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
index e94bb5c..8893ffd 100644
--- a/lib/presentation/lab/lab_result_via_hospital/LabResultList.dart
+++ b/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
@@ -3,7 +3,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/lab_result.dart';
-import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/lab_order_result_item.dart';
+import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart';
import 'package:provider/provider.dart' show Selector, Provider, ReadContext;
class LabResultList extends StatelessWidget {
diff --git a/lib/presentation/lab/lab_result_via_hospital/lab_order_result_item.dart b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
similarity index 97%
rename from lib/presentation/lab/lab_result_via_hospital/lab_order_result_item.dart
rename to lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
index edfc65b..36cdc2b 100644
--- a/lib/presentation/lab/lab_result_via_hospital/lab_order_result_item.dart
+++ b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
@@ -53,9 +53,9 @@ class LabOrderResultItem extends StatelessWidget {
children: [
Flexible(
child: Text(
- tests?.resultValue ?? "",
+ "${tests?.resultValue} ${tests?.uOM}",
style: TextStyle(
- fontSize: 24.fSize,
+ fontSize: 24.f,
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
color: context.read().getColor(
@@ -75,7 +75,7 @@ class LabOrderResultItem extends StatelessWidget {
child: Text(
"(Reference range ${tests?.referanceRange})".needTranslation,
style: TextStyle(
- fontSize: 12.fSize,
+ fontSize: 12.f,
fontWeight: FontWeight.w500,
fontFamily: 'Poppins',
color: AppColors.greyTextColor,
diff --git a/lib/presentation/lab/lab_result_via_hospital/lab_order_specialResult.dart b/lib/presentation/lab/lab_result_via_clinic/lab_order_specialResult.dart
similarity index 100%
rename from lib/presentation/lab/lab_result_via_hospital/lab_order_specialResult.dart
rename to lib/presentation/lab/lab_result_via_clinic/lab_order_specialResult.dart
diff --git a/lib/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart b/lib/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart
deleted file mode 100644
index fb88908..0000000
--- a/lib/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart
+++ /dev/null
@@ -1,69 +0,0 @@
-import 'package:easy_localization/easy_localization.dart'
- show tr, StringTranslateExtension;
-import 'package:flutter/material.dart';
-import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
-import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
-import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
-import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
-import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
-import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
-import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
-import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/LabResultList.dart';
-import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/lab_order_specialResult.dart';
-import 'package:hmg_patient_app_new/theme/colors.dart';
-import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
-import 'package:provider/provider.dart';
-
-class LabResultByHospitals extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return CollapsingListView(
- title: LocaleKeys.labResults.tr(),
- child: SingleChildScrollView(
- child: Column(
- spacing: 8.h,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Selector(
- selector: (_, model) => model.isLabResultByHospitalLoading,
- builder: (_, isLoading, __) {
- if (isLoading) {
- return Column(
- children: [
- LabResultItemView(
- onTap: () {},
- labOrder: null,
- index: 0,
- isLoading: true,
- ),
- LabResultItemView(
- onTap: () {},
- labOrder: null,
- index: 0,
- isLoading: true,
- ),
- LabResultItemView(
- onTap: () {},
- labOrder: null,
- index: 0,
- isLoading: true,
- ),
- LabResultItemView(
- onTap: () {},
- labOrder: null,
- index: 0,
- isLoading: true,
- ),
- ],
- );
- } else {
- return LabResultList();
- }
- },
- ),
- LabOrderSpecialResult()
- ],
- ).paddingAll(24.h),
- ));
- }
-}
diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart
index ad108cc..2330d0d 100644
--- a/lib/presentation/lab/lab_results/lab_result_details.dart
+++ b/lib/presentation/lab/lab_results/lab_result_details.dart
@@ -91,9 +91,10 @@ class LabResultDetails extends StatelessWidget {
children: [
Flexible(
child: Text(
- recentLabResult.resultValue ?? "",
+ "${recentLabResult.resultValue} ${recentLabResult.uOM}" ??
+ "",
style: TextStyle(
- fontSize: 24.fSize,
+ fontSize: 24.f,
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
color: context.read().getColor(
@@ -114,7 +115,7 @@ class LabResultDetails extends StatelessWidget {
child: Text(
"(Reference range ${recentLabResult.referanceRange})".needTranslation,
style: TextStyle(
- fontSize: 12.fSize,
+ fontSize: 12.f,
fontWeight: FontWeight.w500,
fontFamily: 'Poppins',
color: AppColors.greyTextColor,
@@ -128,17 +129,42 @@ class LabResultDetails extends StatelessWidget {
],
),
),
- SizedBox(
- width: 21,
- child: Utils.buildSvgWithAssets(
- icon: AppAssets.lab_result_indicator,
- width: 21,
- height: 23,
- iconColor: context.read().getColor(
- recentLabResult.calculatedResultFlag ?? "",
- ),
+ Visibility(
+ visible:
+ recentLabResult.checkIfGraphShouldBeDisplayed() == true,
+ child: Column(
+ spacing: 6.h,
+ children: [
+ context
+ .read()
+ .getSeverityText(
+ recentLabResult.calculatedResultFlag ?? "",
+ )
+ .tr()
+ .toText10(
+ weight: FontWeight.w500,
+ color: AppColors.greyTextColor),
+ Utils.buildSvgWithAssets(
+ icon: AppAssets.lab_result_indicator,
+ width: 21,
+ height: 23,
+ iconColor: context.read().getColor(
+ recentLabResult.calculatedResultFlag ?? "",
+ )),
+ ],
),
),
+ // SizedBox(
+ // width: 21,
+ // child: Utils.buildSvgWithAssets(
+ // icon: AppAssets.lab_result_indicator,
+ // width: 21,
+ // height: 23,
+ // iconColor: context.read().getColor(
+ // recentLabResult.calculatedResultFlag ?? "",
+ // ),
+ // ),
+ // ),
],
)
@@ -226,7 +252,7 @@ class LabResultDetails extends StatelessWidget {
style: TextStyle(
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
- fontSize: 8.fSize,
+ fontSize: 8.f,
color: AppColors.textColor,
),
);
@@ -238,7 +264,7 @@ class LabResultDetails extends StatelessWidget {
child: Text(
label,
style: TextStyle(
- fontSize: 8.fSize,
+ fontSize: 8.f,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
color: AppColors.labelTextColor),
@@ -257,7 +283,7 @@ class LabResultDetails extends StatelessWidget {
maxY: (labmodel.maxY)+(getInterval(labmodel)??0)/2,
maxX: labmodel.filteredGraphValues.length.toDouble()-.75,
leftLabelFormatter: (value) {
- return leftLabels(value.toStringAsFixed(2).tr());
+ return leftLabels(value.toStringAsFixed(2));
// switch (value.toInt()) {
// case 10:
// return leftLabels("Critical Low".needTranslation);
diff --git a/lib/presentation/lab/lab_results/lab_result_list_item.dart b/lib/presentation/lab/lab_results/lab_result_list_item.dart
index 00b5ff2..f90df7b 100644
--- a/lib/presentation/lab/lab_results/lab_result_list_item.dart
+++ b/lib/presentation/lab/lab_results/lab_result_list_item.dart
@@ -24,7 +24,7 @@ class LabHistoryItem extends StatelessWidget{
Text(
dayNameAndDate,
style: TextStyle(
- fontSize: 14.fSize,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
fontFamily: 'Poppins',
color: AppColors.labelTextColor
@@ -33,7 +33,7 @@ class LabHistoryItem extends StatelessWidget{
Text(
result,
style: TextStyle(
- fontSize: 18.fSize,
+ fontSize: 18.f,
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
color: AppColors.textColor
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 19d4335..cea3cf1 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
+import 'package:hmg_patient_app_new/core/utils/size_config.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@@ -26,6 +27,7 @@ import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_page.dart';
import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
import 'package:hmg_patient_app_new/presentation/insurance/insurance_approvals_page.dart';
import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
@@ -33,19 +35,19 @@ import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_upd
import 'package:hmg_patient_app_new/presentation/insurance/widgets/patient_insurance_card.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
-import 'package:hmg_patient_app_new/presentation/my_family/my_family.dart';
-import 'package:hmg_patient_app_new/services/dialog_service.dart';
-import 'package:hmg_patient_app_new/presentation/radiology/radiology_orders_page.dart';
-import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
-import 'package:hmg_patient_app_new/presentation/medical_report/medical_reports_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/vaccine_list_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/widgets/lab_rad_card.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/widgets/medical_file_card.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/widgets/patient_sick_leave_card.dart';
+import 'package:hmg_patient_app_new/presentation/medical_report/medical_reports_page.dart';
+import 'package:hmg_patient_app_new/presentation/my_family/my_family.dart';
import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart';
+import 'package:hmg_patient_app_new/presentation/radiology/radiology_orders_page.dart';
+import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
@@ -60,7 +62,7 @@ import '../prescriptions/prescription_detail_page.dart';
import 'widgets/medical_file_appointment_card.dart';
class MedicalFilePage extends StatefulWidget {
- MedicalFilePage({super.key});
+ const MedicalFilePage({super.key});
@override
State createState() => _MedicalFilePageState();
@@ -103,15 +105,35 @@ class _MedicalFilePageState extends State {
title: "Medical File".needTranslation,
trailing: Row(
children: [
- Wrap(spacing: -15, children: [
- Utils.buildImgWithAssets(icon: AppAssets.babyGirlImg, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h),
- Utils.buildImgWithAssets(icon: AppAssets.femaleImg, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h),
- Utils.buildImgWithAssets(icon: AppAssets.male_img, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h),
- ]),
+ Wrap(
+ children: [
+ Utils.buildImgWithAssets(
+ icon: AppAssets.babyGirlImg,
+ height: 32.h,
+ border: 1.5,
+ fit: BoxFit.contain,
+ borderRadius: 50.r,
+ ),
+ Utils.buildImgWithAssets(
+ icon: AppAssets.femaleImg,
+ height: 32.h,
+ border: 1.5,
+ borderRadius: 50.r,
+ fit: BoxFit.contain,
+ ),
+ Utils.buildImgWithAssets(
+ icon: AppAssets.male_img,
+ height: 32.h,
+ border: 1.5,
+ borderRadius: 50.r,
+ fit: BoxFit.contain,
+ ),
+ ],
+ ),
SizedBox(width: 4.h),
- Utils.buildSvgWithAssets(icon: AppAssets.arrow_down)
+ Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, height: 22.h, width: 22.w)
],
- ).onPress(() {
+ ).withHorizontalPadding(24.w).onPress(() {
DialogService dialogService = getIt.get();
dialogService.showFamilyBottomSheetWithoutH(
label: "Family Members".needTranslation,
@@ -139,21 +161,21 @@ class _MedicalFilePageState extends State {
isAllowLeadingIcon: true,
padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h),
leadingIcon: AppAssets.student_card,
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 16.h),
Container(
width: double.infinity,
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24),
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.r),
child: Padding(
- padding: EdgeInsets.all(16.h),
+ padding: EdgeInsets.all(16.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h),
- SizedBox(width: 8.h),
+ Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.w, height: 56.h),
+ SizedBox(width: 8.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -162,12 +184,13 @@ class _MedicalFilePageState extends State {
SizedBox(height: 4.h),
Wrap(
direction: Axis.horizontal,
- spacing: 4.h,
- runSpacing: 4.h,
+ spacing: 4.w,
+ runSpacing: 6.w,
children: [
AppCustomChipWidget(
icon: AppAssets.file_icon,
labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}",
+ labelPadding: EdgeInsetsDirectional.only(end: 6.w),
onChipTap: () {
navigationService.pushPage(
page: FamilyMedicalScreen(
@@ -180,6 +203,7 @@ class _MedicalFilePageState extends State {
icon: AppAssets.checkmark_icon,
labelText: LocaleKeys.verified.tr(context: context),
iconColor: AppColors.successColor,
+ labelPadding: EdgeInsetsDirectional.only(end: 6.w),
),
],
),
@@ -200,15 +224,28 @@ class _MedicalFilePageState extends State {
),
AppCustomChipWidget(
icon: AppAssets.blood_icon,
- labelText: "${LocaleKeys.bloodType.tr(context: context)}: ${appState.getUserBloodGroup}",
+ labelText: "Blood: ${appState.getUserBloodGroup}",
iconColor: AppColors.primaryRedColor,
+ labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 8.w),
),
+ Consumer(builder: (context, insuranceVM, child) {
+ return AppCustomChipWidget(
+ icon: insuranceVM.isInsuranceExpired ? AppAssets.cancel_circle_icon : AppAssets.insurance_active_icon,
+ labelText: insuranceVM.isInsuranceExpired ? "Insurance Expired".needTranslation : "Insurance Active".needTranslation,
+ iconColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
+ textColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
+ iconSize: 12.w,
+ backgroundColor:
+ insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1),
+ labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 8.w),
+ );
+ }),
],
),
],
),
),
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 16.h),
Consumer(builder: (context, medicalFileVM, child) {
return Column(
@@ -225,7 +262,7 @@ class _MedicalFilePageState extends State {
onTabChange: (index) {
medicalFileVM.onTabChanged(index);
},
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 24.h),
getSelectedTabData(medicalFileVM.selectedTabIndex),
],
@@ -296,93 +333,89 @@ class _MedicalFilePageState extends State {
],
),
],
- ).paddingSymmetrical(24.h, 0.h).onPress(() {
+ ).paddingSymmetrical(24.w, 0.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: MyAppointmentsPage(),
),
);
}),
+ SizedBox(height: 16.h),
Consumer(builder: (context, myAppointmentsVM, child) {
return SizedBox(
- height: myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty ? 200.h : 175.h,
- child: ListView.separated(
- scrollDirection: Axis.horizontal,
- padding: EdgeInsets.only(top: 16.h, left: 24.h, right: 24.h, bottom: 0.h),
- shrinkWrap: true,
- itemCount: myAppointmentsVM.isMyAppointmentsLoading ? 5 : (myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty ? myAppointmentsVM.patientAppointmentsHistoryList.length : 1),
- itemBuilder: (context, index) {
- return AnimationConfiguration.staggeredList(
- position: index,
- duration: const Duration(milliseconds: 500),
- child: SlideAnimation(
- horizontalOffset: 100.0,
- child: FadeInAnimation(
- child: AnimatedContainer(
- duration: Duration(milliseconds: 300),
- curve: Curves.easeInOut,
- child: myAppointmentsVM.isMyAppointmentsLoading
- ? MedicalFileAppointmentCard(
- patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
- myAppointmentsViewModel: myAppointmentsVM,
- onRescheduleTap: () {},
- onAskDoctorTap: () {},
- )
- : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
- ? MedicalFileAppointmentCard(
- patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
- myAppointmentsViewModel: myAppointmentsViewModel,
- onRescheduleTap: () {
- openDoctorScheduleCalendar(myAppointmentsVM.patientAppointmentsHistoryList[index]);
- },
- onAskDoctorTap: () {},
- )
- : Container(
- width: MediaQuery.of(context).size.width - 48.h,
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24, hasShadow: true),
- child: Padding(
- padding: EdgeInsets.all(12.h),
- child: Column(
- children: [
- Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
- SizedBox(height: 12.h),
- "You do not have any appointments. Please book an appointment".needTranslation.toText12(isCenter: true),
- SizedBox(height: 12.h),
- CustomButton(
- text: LocaleKeys.bookAppo.tr(context: context),
- onPressed: () {
- Navigator.of(context).push(
- CustomPageRoute(
- page: BookAppointmentPage(),
- ),
- );
- },
- backgroundColor: Color(0xffFEE9EA),
- borderColor: Color(0xffFEE9EA),
- textColor: Color(0xffED1C2B),
- fontSize: 14,
- fontWeight: FontWeight.w500,
- borderRadius: 12,
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 40,
- icon: AppAssets.add_icon,
- iconColor: AppColors.primaryRedColor,
- ),
- ],
- ),
- ),
+ child: myAppointmentsVM.isMyAppointmentsLoading
+ ? MedicalFileAppointmentCard(
+ patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
+ myAppointmentsViewModel: myAppointmentsVM,
+ onRescheduleTap: () {},
+ onAskDoctorTap: () {},
+ )
+ : myAppointmentsVM.patientAppointmentsHistoryList.isEmpty
+ ? Container(
+ padding: EdgeInsets.all(12.w),
+ width: MediaQuery.of(context).size.width,
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.r, hasShadow: true),
+ child: Column(
+ children: [
+ Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
+ SizedBox(height: 12.h),
+ "You do not have any appointments. Please book an appointment".needTranslation.toText12(isCenter: true),
+ SizedBox(height: 12.h),
+ CustomButton(
+ text: LocaleKeys.bookAppo.tr(context: context),
+ onPressed: () {
+ Navigator.of(context).push(
+ CustomPageRoute(
+ page: BookAppointmentPage(),
),
+ );
+ },
+ backgroundColor: Color(0xffFEE9EA),
+ borderColor: Color(0xffFEE9EA),
+ textColor: Color(0xffED1C2B),
+ fontSize: 14.f,
+ fontWeight: FontWeight.w500,
+ borderRadius: 12.r,
+ padding: EdgeInsets.fromLTRB(10.w, 0, 10.w, 0),
+ height: 40.h,
+ icon: AppAssets.add_icon,
+ iconColor: AppColors.primaryRedColor,
+ ),
+ ],
+ ),
+ )
+ : ListView.separated(
+ scrollDirection: Axis.horizontal,
+ shrinkWrap: true,
+ itemCount: myAppointmentsVM.patientAppointmentsHistoryList.length,
+ itemBuilder: (context, index) {
+ return AnimationConfiguration.staggeredList(
+ position: index,
+ duration: const Duration(milliseconds: 500),
+ child: SlideAnimation(
+ horizontalOffset: 100.0,
+ child: FadeInAnimation(
+ child: AnimatedContainer(
+ duration: Duration(milliseconds: 300),
+ curve: Curves.easeInOut,
+ child: MedicalFileAppointmentCard(
+ patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
+ myAppointmentsViewModel: myAppointmentsViewModel,
+ onRescheduleTap: () {
+ openDoctorScheduleCalendar(myAppointmentsVM.patientAppointmentsHistoryList[index]);
+ },
+ onAskDoctorTap: () {},
+ )),
+ ),
+ ),
+ );
+ },
+ separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
),
- ),
- ),
- );
- },
- separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
- ),
- );
+ ).paddingSymmetrical(24.w, 0);
}),
SizedBox(height: 24.h),
- "Lab & Radiology".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h),
+ "Lab & Radiology".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 16.h),
Row(
children: [
@@ -418,27 +451,27 @@ class _MedicalFilePageState extends State {
}),
),
],
- ).paddingSymmetrical(24.h, 0.h),
+ ).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 24.h),
- "Active Medications & Prescriptions".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h),
+ "Active Medications & Prescriptions".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 16.h),
Consumer(builder: (context, prescriptionVM, child) {
return prescriptionVM.isPrescriptionsOrdersLoading
- ? const MoviesShimmerWidget().paddingSymmetrical(24.h, 0.h)
+ ? const MoviesShimmerWidget().paddingSymmetrical(24.w, 0.h)
: prescriptionVM.patientPrescriptionOrders.isNotEmpty
? Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: Colors.white,
- borderRadius: 20.h,
+ borderRadius: 12.r,
),
child: Padding(
- padding: EdgeInsets.all(16.h),
+ padding: EdgeInsets.all(16.w),
child: Column(
children: [
ListView.separated(
itemCount: prescriptionVM.patientPrescriptionOrders.length,
shrinkWrap: true,
- padding: const EdgeInsets.only(left: 0, right: 8),
+ padding: EdgeInsets.only(left: 0, right: 8.w),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return AnimationConfiguration.staggeredList(
@@ -451,11 +484,11 @@ class _MedicalFilePageState extends State {
children: [
Image.network(
prescriptionVM.patientPrescriptionOrders[index].doctorImageURL!,
- width: 40.h,
+ width: 40.w,
height: 40.h,
fit: BoxFit.cover,
- ).circle(100),
- SizedBox(width: 16.h),
+ ).circle(100.r),
+ SizedBox(width: 16.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -464,13 +497,16 @@ class _MedicalFilePageState extends State {
SizedBox(height: 4.h),
Wrap(
direction: Axis.horizontal,
- spacing: 3.h,
- runSpacing: 4.h,
+ spacing: 3.w,
+ runSpacing: 4.w,
children: [
AppCustomChipWidget(labelText: prescriptionVM.patientPrescriptionOrders[index].clinicDescription!),
AppCustomChipWidget(
icon: AppAssets.doctor_calendar_icon,
- labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(prescriptionVM.patientPrescriptionOrders[index].appointmentDate), false),
+ labelText: DateUtil.formatDateToDate(
+ DateUtil.convertStringToDate(prescriptionVM.patientPrescriptionOrders[index].appointmentDate),
+ false,
+ ),
),
],
),
@@ -481,7 +517,11 @@ class _MedicalFilePageState extends State {
Transform.flip(
flipX: appState.isArabic(),
child: Utils.buildSvgWithAssets(
- icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)),
+ icon: AppAssets.forward_arrow_icon_small,
+ width: 15.w,
+ height: 15.h,
+ fit: BoxFit.contain,
+ iconColor: AppColors.textColor)),
],
).onPress(() {
prescriptionVM.setPrescriptionsDetailsLoading();
@@ -497,9 +537,9 @@ class _MedicalFilePageState extends State {
},
separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h),
),
- SizedBox(height: 16.h),
+ SizedBox(height: 24.h),
const Divider(color: AppColors.dividerColor),
- SizedBox(height: 16.h),
+ SizedBox(height: 24.h),
Row(
children: [
Expanded(
@@ -515,16 +555,16 @@ class _MedicalFilePageState extends State {
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
- fontSize: 12.3,
+ fontSize: 12.f,
fontWeight: FontWeight.w500,
- borderRadius: 12.h,
- height: 40.h,
+ borderRadius: 12.r,
+ height: 56.h,
icon: AppAssets.requests,
iconColor: AppColors.primaryRedColor,
- iconSize: 16.h,
+ iconSize: 16.w,
),
),
- SizedBox(width: 10.h),
+ SizedBox(width: 10.w),
Expanded(
child: CustomButton(
text: "All Medications".needTranslation,
@@ -532,10 +572,10 @@ class _MedicalFilePageState extends State {
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
- fontSize: 13,
+ fontSize: 12.f,
fontWeight: FontWeight.w500,
borderRadius: 12.h,
- height: 40.h,
+ height: 56.h,
icon: AppAssets.all_medications_icon,
iconColor: AppColors.primaryRedColor,
iconSize: 16.h,
@@ -546,15 +586,21 @@ class _MedicalFilePageState extends State {
],
),
),
- ).paddingSymmetrical(24.h, 0.h)
+ ).paddingSymmetrical(24.w, 0.h)
: Container(
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
- color: AppColors.whiteColor,
- borderRadius: 20.h,
- hasShadow: false,
- ),
- child: Utils.getNoDataWidget(context, noDataText: "You don't have any prescriptions yet.".needTranslation, isSmallWidget: true, width: 62, height: 62))
- .paddingSymmetrical(24.h, 0.h);
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 12.r,
+ hasShadow: false,
+ ),
+ child: Utils.getNoDataWidget(
+ context,
+ noDataText: "You don't have any prescriptions yet.".needTranslation,
+ isSmallWidget: true,
+ width: 62.w,
+ height: 62.h,
+ ),
+ ).paddingSymmetrical(24.w, 0.h);
}),
SizedBox(height: 24.h),
//My Doctor Section
@@ -565,11 +611,10 @@ class _MedicalFilePageState extends State {
Row(
children: [
LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
- SizedBox(width: 2.h),
+ SizedBox(width: 2.w),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
).onPress(() {
- myAppointmentsViewModel.setIsPatientMyDoctorsLoading(true);
myAppointmentsViewModel.getPatientMyDoctors();
Navigator.of(context).push(
CustomPageRoute(
@@ -578,58 +623,63 @@ class _MedicalFilePageState extends State {
);
}),
],
- ).paddingSymmetrical(24.h, 0.h),
+ ).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 16.h),
Consumer(builder: (context, myAppointmentsVM, child) {
- return SizedBox(
- height: 120.h,
- child: ListView.separated(
- scrollDirection: Axis.horizontal,
- itemCount: myAppointmentsVM.isPatientMyDoctorsLoading
- ? 5
- : myAppointmentsVM.patientMyDoctorsList.isNotEmpty
- ? myAppointmentsVM.patientMyDoctorsList.length
- : 1,
- shrinkWrap: true,
- padding: EdgeInsets.only(left: 24.h, right: 24.h),
- itemBuilder: (context, index) {
- return myAppointmentsVM.isPatientMyDoctorsLoading
- ? SizedBox(
- width: 80.h,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Image.network(
- "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
- width: 64.h,
- height: 64.h,
- fit: BoxFit.cover,
- ).circle(100).toShimmer2(isShow: true, radius: 50.h),
- SizedBox(height: 8.h),
- Expanded(
- child: ("Dr. John Smith Smith Smith").toString().toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2).toShimmer2(isShow: true),
- ),
- ],
- ),
- )
- : myAppointmentsVM.patientMyDoctorsList.isNotEmpty
- ? AnimationConfiguration.staggeredList(
+ return myAppointmentsVM.isPatientMyDoctorsLoading
+ ? Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Image.network(
+ "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
+ width: 64.w,
+ height: 64.h,
+ fit: BoxFit.cover,
+ ).circle(100).toShimmer2(isShow: true, radius: 50.r),
+ SizedBox(height: 8.h),
+ ("Dr. John Smith Smith Smith").toString().toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2).toShimmer2(isShow: true),
+ ],
+ )
+ : myAppointmentsVM.patientMyDoctorsList.isEmpty
+ ? Container(
+ width: SizeConfig.screenWidth,
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 12.r,
+ hasShadow: false,
+ ),
+ child: Utils.getNoDataWidget(
+ context,
+ noDataText: "You don't have any completed visits yet".needTranslation,
+ isSmallWidget: true,
+ width: 62.w,
+ height: 62.h,
+ ),
+ ).paddingSymmetrical(24.w, 0.h)
+ : SizedBox(
+ height: 200.h,
+ child: ListView.separated(
+ scrollDirection: Axis.horizontal,
+ itemCount: myAppointmentsVM.patientMyDoctorsList.length,
+ shrinkWrap: true,
+ itemBuilder: (context, index) {
+ return AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 1000),
child: SlideAnimation(
horizontalOffset: 100.0,
child: FadeInAnimation(
child: SizedBox(
- width: 80.h,
+ // width: 80.w,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.network(
myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!,
- width: 64.h,
+ width: 64.w,
height: 64.h,
fit: BoxFit.cover,
- ).circle(100).toShimmer2(isShow: false, radius: 50.h),
+ ).circle(100).toShimmer2(isShow: false, radius: 50.r),
SizedBox(height: 8.h),
Expanded(
child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName)
@@ -639,32 +689,48 @@ class _MedicalFilePageState extends State {
),
],
),
- ),
+ ).onPress(() async {
+ bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
+ clinicID: myAppointmentsVM.patientMyDoctorsList[index].clinicID,
+ projectID: myAppointmentsVM.patientMyDoctorsList[index].projectID,
+ doctorID: myAppointmentsVM.patientMyDoctorsList[index].doctorID,
+ ));
+ LoaderBottomSheet.showLoader();
+ await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
+ LoaderBottomSheet.hideLoader();
+ Navigator.of(context).push(
+ CustomPageRoute(
+ page: DoctorProfilePage(),
+ ),
+ );
+ }, onError: (err) {
+ LoaderBottomSheet.hideLoader();
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getErrorWidget(loadingText: err),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ });
+ }),
),
),
- )
- : Container(
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
- color: AppColors.whiteColor,
- borderRadius: 20.h,
- hasShadow: false,
- ),
- child: Utils.getNoDataWidget(context, noDataText: "You don't have any completed visits yet.".needTranslation, isSmallWidget: true, width: 62, height: 62),
- ).paddingSymmetrical(24.h, 0.h);
- },
- separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
- ),
- );
+ );
+ },
+ separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
+ ),
+ );
}),
SizedBox(height: 24.h),
- "Others".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h),
+ "Others".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 16.h),
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
- crossAxisSpacing: 16,
- mainAxisSpacing: 16,
- mainAxisExtent: 130,
+ crossAxisSpacing: 16.h,
+ mainAxisSpacing: 16.w,
+ mainAxisExtent: 130.h,
),
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
@@ -676,15 +742,15 @@ class _MedicalFilePageState extends State {
backgroundColor: AppColors.whiteColor,
svgIcon: AppAssets.eye_result_icon,
isLargeText: true,
- iconSize: 36.h,
+ iconSize: 36.w,
),
MedicalFileCard(
- label: "Allergy Info".needTranslation,
+ label: "Allergy Info".needTranslation,
textColor: AppColors.blackColor,
backgroundColor: AppColors.whiteColor,
svgIcon: AppAssets.allergy_info_icon,
isLargeText: true,
- iconSize: 36.h,
+ iconSize: 36.w,
),
MedicalFileCard(
label: "Vaccine Info".needTranslation,
@@ -692,7 +758,7 @@ class _MedicalFilePageState extends State {
backgroundColor: AppColors.whiteColor,
svgIcon: AppAssets.vaccine_info_icon,
isLargeText: true,
- iconSize: 36.h,
+ iconSize: 36.w,
).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
@@ -701,7 +767,7 @@ class _MedicalFilePageState extends State {
);
}),
],
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 24.h),
],
);
@@ -716,7 +782,7 @@ class _MedicalFilePageState extends State {
labOrder: null,
index: index,
isLoading: true,
- ).paddingSymmetrical(24.h, 0.0)
+ ).paddingSymmetrical(24.w, 0.0)
: insuranceVM.patientInsuranceList.isNotEmpty
? PatientInsuranceCard(
insuranceCardDetailsModel: insuranceVM.patientInsuranceList.first,
@@ -727,15 +793,15 @@ class _MedicalFilePageState extends State {
: Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
- borderRadius: 20.h,
+ borderRadius: 12.r,
hasShadow: false,
),
child: Utils.getNoDataWidget(
context,
noDataText: "You don't have insurance registered with HMG.".needTranslation,
isSmallWidget: true,
- width: 62,
- height: 62,
+ width: 62.w,
+ height: 62.h,
callToActionButton: CustomButton(
icon: AppAssets.update_insurance_card_icon,
iconColor: AppColors.successColor,
@@ -745,53 +811,51 @@ class _MedicalFilePageState extends State {
insuranceViewModel.setIsInsuranceUpdateDetailsLoading(true);
insuranceViewModel.getPatientInsuranceDetailsForUpdate(
appState.getAuthenticatedUser()!.patientId.toString(), appState.getAuthenticatedUser()!.patientIdentificationNo.toString());
- showCommonBottomSheetWithoutHeight(context, child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false);
+ showCommonBottomSheetWithoutHeight(context,
+ child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false);
},
backgroundColor: AppColors.bgGreenColor.withOpacity(0.20),
borderColor: AppColors.bgGreenColor.withOpacity(0.0),
textColor: AppColors.bgGreenColor,
- fontSize: 14,
+ fontSize: 14.f,
fontWeight: FontWeight.w500,
- borderRadius: 12,
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 40.h,
- ).paddingOnly(left: 12.h, right: 12.h, bottom: 12.h),
+ borderRadius: 12.r,
+ padding: EdgeInsets.fromLTRB(10.w, 0, 10.w, 0),
+ height: 56.h,
+ ).paddingOnly(left: 12.w, right: 12.w, bottom: 12.h),
),
- ).paddingSymmetrical(24.h, 0.h);
+ ).paddingSymmetrical(24.w, 0.h);
}),
SizedBox(height: 10.h),
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
- crossAxisSpacing: 16,
- mainAxisSpacing: 16,
- mainAxisExtent: 140,
+ crossAxisSpacing: 16.h,
+ mainAxisSpacing: 16.w,
+ mainAxisExtent: 150.h,
),
physics: NeverScrollableScrollPhysics(),
- padding: EdgeInsets.only(top: 12),
+ padding: EdgeInsets.only(top: 12.h),
shrinkWrap: true,
children: [
MedicalFileCard(
- label: "Update Insurance".needTranslation,
- textColor: AppColors.blackColor,
- backgroundColor: AppColors.whiteColor,
- svgIcon: AppAssets.eye_result_icon,
- isLargeText: true,
- iconSize: 36.h)
- .onPress(() {
- Navigator.of(context).push(
- CustomPageRoute(
- page: InsuranceHomePage(),
- ),
- );
+ label: "Update Insurance".needTranslation,
+ textColor: AppColors.blackColor,
+ backgroundColor: AppColors.whiteColor,
+ svgIcon: AppAssets.eye_result_icon,
+ isLargeText: true,
+ iconSize: 36.w,
+ ).onPress(() {
+ Navigator.of(context).push(CustomPageRoute(page: InsuranceHomePage()));
}),
MedicalFileCard(
- label: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.approvals.tr(context: context)}",
- textColor: AppColors.blackColor,
- backgroundColor: AppColors.whiteColor,
- svgIcon: AppAssets.eye_result_icon,
- isLargeText: true,
- iconSize: 36.h).onPress(() {
+ label: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.approvals.tr(context: context)}",
+ textColor: AppColors.blackColor,
+ backgroundColor: AppColors.whiteColor,
+ svgIcon: AppAssets.eye_result_icon,
+ isLargeText: true,
+ iconSize: 36.w,
+ ).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: InsuranceApprovalsPage(),
@@ -799,21 +863,21 @@ class _MedicalFilePageState extends State {
);
}),
MedicalFileCard(
- label: "My Invoices List".needTranslation,
+ label: "My Invoices List".needTranslation,
textColor: AppColors.blackColor,
backgroundColor: AppColors.whiteColor,
svgIcon: AppAssets.eye_result_icon,
isLargeText: true,
- iconSize: 36.h),
+ iconSize: 36.w),
MedicalFileCard(
label: "Ancillary Orders List".needTranslation,
textColor: AppColors.blackColor,
backgroundColor: AppColors.whiteColor,
svgIcon: AppAssets.eye_result_icon,
isLargeText: true,
- iconSize: 36.h),
+ iconSize: 36.w),
],
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 16.h),
],
);
@@ -826,34 +890,34 @@ class _MedicalFilePageState extends State {
? PatientSickLeaveCard(
patientSickLeavesResponseModel: PatientSickLeavesResponseModel(),
isLoading: true,
- ).paddingSymmetrical(24.h, 0.0)
+ ).paddingSymmetrical(24.w, 0.0)
: medicalFileVM.patientSickLeaveList.isNotEmpty
? PatientSickLeaveCard(
patientSickLeavesResponseModel: medicalFileVM.patientSickLeaveList.first,
isLoading: false,
- ).paddingSymmetrical(24.h, 0.0)
+ ).paddingSymmetrical(24.w, 0.0)
: Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
- borderRadius: 20.h,
+ borderRadius: 12.r,
hasShadow: false,
),
child: Utils.getNoDataWidget(
context,
noDataText: "You don't have any sick leaves yet.".needTranslation,
isSmallWidget: true,
- width: 62,
- height: 62,
+ width: 62.w,
+ height: 62.h,
),
- ).paddingSymmetrical(24.h, 0.h);
+ ).paddingSymmetrical(24.w, 0.h);
}),
SizedBox(height: 16.h),
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
- crossAxisSpacing: 16,
- mainAxisSpacing: 16,
- mainAxisExtent: 140,
+ crossAxisSpacing: 16.h,
+ mainAxisSpacing: 16.w,
+ mainAxisExtent: 140.h,
),
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
@@ -898,7 +962,7 @@ class _MedicalFilePageState extends State {
);
}),
],
- ).paddingSymmetrical(24.h, 0.0),
+ ).paddingSymmetrical(24.w, 0.0),
SizedBox(height: 24.h),
],
);
@@ -908,9 +972,4 @@ class _MedicalFilePageState extends State {
return Container();
}
}
-
- getMember() {
- // AuthanticationViewModel authanticationViewModel = getIt.get();
- // RequestUtils.getAddFamilyRequest(nationalIDorFile: nationalIDorFile, mobileNo: mobileNo, countryCode: countryCode, loginType: loginType);
- }
}
diff --git a/lib/presentation/medical_file/widgets/lab_rad_card.dart b/lib/presentation/medical_file/widgets/lab_rad_card.dart
index c7fd7dd..42f5bff 100644
--- a/lib/presentation/medical_file/widgets/lab_rad_card.dart
+++ b/lib/presentation/medical_file/widgets/lab_rad_card.dart
@@ -9,18 +9,25 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
class LabRadCard extends StatelessWidget {
- LabRadCard({super.key, required this.icon, required this.labelText, required this.labOrderTests, required this.isLoading});
+ const LabRadCard({
+ super.key,
+ required this.icon,
+ required this.labelText,
+ required this.labOrderTests,
+ required this.isLoading,
+ });
- String icon;
- String labelText;
- List labOrderTests = [];
- bool isLoading;
+ final String icon;
+ final String labelText;
+ final List