diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 1be249dc65..a4fb07e109 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3031,6 +3031,11 @@ } }, "downloading": "Downloading", + "settingUpYourTwake": "Setting up your Twake\nIt could take a while", + "performingAutomaticalLogin": "Performing automatical login via SSO", + "backingUpYourMessage": "Preparing server environment for backing up your messages", + "recoveringYourEncryptedChats": "Recovering your encrypted chats", + "configureDataEncryption": "Configure data encryption", "configurationNotFound": "The configuration data not found", "fileSavedToGallery": "File saved to Gallery", "saveFileToGalleryError": "Failed to save file to Gallery", diff --git a/assets/twake_loading.json b/assets/twake_loading.json new file mode 100644 index 0000000000..2b39bea290 --- /dev/null +++ b/assets/twake_loading.json @@ -0,0 +1,2 @@ + +{"nm":"lottie animation ","ddd":0,"h":63,"w":63,"meta":{"g":"LottieFiles Figma v59"},"layers":[{"ty":4,"nm":"03","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":54},{"s":[3,3],"t":63}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"s":[100,100],"t":63}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[42,32],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[42,32],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[42,32],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[42,32],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43,32],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[43,32],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,43],"t":54},{"s":[31,43],"t":63}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[90],"t":54},{"s":[90],"t":63}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"s":[0],"t":75}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":54},{"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":63}]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":54},{"s":[0.8706,0.6078,1],"t":63}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"s":[100],"t":63}]}}],"ind":1},{"ty":4,"nm":"02","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[10,10],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[10,10],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[10,10],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[10,10],"t":237},{"s":[10,10],"t":294}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":237},{"s":[100,100],"t":294}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[32,32],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[32,32],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,32],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,32],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,32],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,32],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,33],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,33],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,31],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,31],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,31],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,31],"t":237},{"s":[31,31],"t":294}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[90],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[90],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[180],"t":237},{"s":[180],"t":294}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":90},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":255},{"s":[100],"t":294}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[5.52,0],[0,5.52],[-5.52,0],[0,-5.52]],"o":[[0,5.52],[-5.52,0],[0,-5.52],[5.52,0],[0,0]],"v":[[20,10],[10,20],[0,10],[10,0],[20,10]]}],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[5.52,0],[0,5.52],[-5.52,0],[0,-5.52]],"o":[[0,5.52],[-5.52,0],[0,-5.52],[5.52,0],[0,0]],"v":[[20,10],[10,20],[0,10],[10,0],[20,10]]}],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[5.52,0],[0,5.52],[-5.52,0],[0,-5.52]],"o":[[0,5.52],[-5.52,0],[0,-5.52],[5.52,0],[0,0]],"v":[[20,10],[10,20],[0,10],[10,0],[20,10]]}],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[5.52,0],[0,5.52],[-5.52,0],[0,-5.52]],"o":[[0,5.52],[-5.52,0],[0,-5.52],[5.52,0],[0,0]],"v":[[20,10],[10,20],[0,10],[10,0],[20,10]]}],"t":237},{"s":[{"c":true,"i":[[0,0],[5.52,0],[0,5.52],[-5.52,0],[0,-5.52]],"o":[[0,5.52],[-5.52,0],[0,-5.52],[5.52,0],[0,0]],"v":[[20,10],[10,20],[0,10],[10,0],[20,10]]}],"t":294}]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":237},{"s":[1,1,1],"t":294}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":237},{"s":[100],"t":294}]}}],"ind":2},{"ty":4,"nm":"01","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[3,3],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[4,4],"t":54},{"s":[4,4],"t":63}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"s":[100,100],"t":63}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[21,32],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[21,32],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20,32],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20,32],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20,32],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20,32],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31,22],"t":54},{"s":[31,22],"t":63}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[90],"t":54},{"s":[90],"t":63}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"s":[0],"t":75}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[1.66,0],[0,1.66],[-1.66,0],[0,-1.66]],"o":[[0,1.66],[-1.66,0],[0,-1.66],[1.66,0],[0,0]],"v":[[6,3],[3,6],[0,3],[3,0],[6,3]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":54},{"s":[{"c":true,"i":[[0,0],[2.21,0],[0,2.21],[-2.21,0],[0,-2.21]],"o":[[0,2.21],[-2.21,0],[0,-2.21],[2.21,0],[0,0]],"v":[[8,4],[4,8],[0,4],[4,0],[8,4]]}],"t":63}]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.8706,0.6078,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":54},{"s":[1,1,1],"t":63}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"s":[100],"t":63}]}}],"ind":3},{"ty":0,"nm":"Group 1321315327","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,19.26],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,19.26],"t":291},{"s":[1.72,1.5],"t":294}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":291},{"s":[100,100],"t":294}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.72,31.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[30.72,32.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[30.72,32.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[30.5,30.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[30.5,30.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.26],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.26],"t":291},{"s":[30.5,30.5],"t":294}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":291},{"s":[0],"t":294}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}},"w":63,"h":63,"refId":"1","ind":4},{"ty":4,"nm":"1 Bg","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":291},{"s":[31.5,31.5],"t":294}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":291},{"s":[100,100],"t":294}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[31.5,31.5],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,31.5],"t":291},{"s":[31.5,31.5],"t":294}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":291},{"s":[0],"t":294}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":291},{"s":[{"c":true,"i":[[0,-11.59],[0,0],[11.59,0],[0,0],[0,11.59],[0,0],[-11.59,0],[0,0]],"o":[[0,0],[0,11.59],[0,0],[-11.59,0],[0,0],[0,-11.59],[0,0],[11.59,0]],"v":[[63,21],[63,42],[42,63],[21,63],[0,42],[0,21],[21,0],[42,0]]}],"t":294}]}},{"ty":"gf","bm":0,"hd":false,"nm":"","e":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[116.5,-54.25],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[116.5,-54.25],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[132.5,66.25],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[132.5,66.25],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-59.5,119],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-59.5,119],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-117.5,52.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-117.5,52.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-103.5,-51.75],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-103.5,-51.75],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-32.75,-105.75],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-32.75,-105.75],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60.75,-116.5],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60.75,-116.5],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[123.5,-28.25],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[123.5,-28.25],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.5,41.25],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[82.5,41.25],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,120.75],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[31.5,120.75],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42.5,85],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42.5,85],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-117.25,42],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-117.25,42],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-93.5,-46.75],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-93.5,-46.75],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-16,-90.5],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-16,-90.5],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[40.25,-80.5],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[40.25,-80.5],"t":291},{"s":[108.25,-30.25],"t":294}]},"g":{"p":2,"k":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":291},{"s":[0,0.5068290787958631,0.20713619470830055,0.9958016234659681,1,0.909340854289485,0.6511993962549696,1],"t":294}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[45,35.75],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[45,35.75],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,66.25],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,66.25],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-59.5,0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-59.5,0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-44.5,-36.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-44.5,-36.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,-51.75],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,-51.75],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[35.75,-34.25],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[35.75,-34.25],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[58.75,1],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[58.75,1],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[36,43.75],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[36,43.75],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,41.25],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0,41.25],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42,36.75],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42,36.75],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42.5,0],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-42.5,0],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-40.25,-38.5],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[-40.25,-38.5],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,-46.75],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0,-46.75],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[33,-24.5],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[33,-24.5],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[40.25,0],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[40.25,0],"t":291},{"s":[33.75,37.25],"t":294}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}}],"ind":5}],"v":"5.7.0","fr":60,"op":294,"ip":0,"assets":[{"nm":"[Asset] Group 1321315327","id":"1","layers":[{"ty":4,"nm":"Vector","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":291},{"s":[1.72,1.5],"t":294}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":291},{"s":[100,100],"t":294}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.72,1.5],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20.5,17.85],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[20.5,17.85],"t":291},{"s":[1.72,1.5],"t":294}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":291},{"s":[0],"t":294}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}},"ef":[],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0,-9.86],[-3.29,-3.17],[-1.07,-0.67],[-2.15,-0.9],[-2.29,0],[0,9.86],[11.32,0]],"o":[[-11.32,0],[0,4.61],[0.79,0.55],[1.62,1.01],[2.06,0.6],[11.32,0],[0,-9.86],[0,0]],"v":[[20.5,0],[0,17.85],[5.3,29.82],[8.11,31.69],[13.95,34.77],[20.5,35.7],[41,17.85],[20.5,0]]}],"t":291},{"s":[{"c":true,"i":[[0,0],[0,-0.83],[-0.28,-0.27],[-0.09,-0.06],[-0.18,-0.08],[-0.19,0],[0,0.83],[0.95,0]],"o":[[-0.95,0],[0,0.39],[0.07,0.05],[0.14,0.08],[0.17,0.05],[0.95,0],[0,-0.83],[0,0]],"v":[[1.72,0],[0,1.5],[0.45,2.51],[0.68,2.66],[1.17,2.92],[1.72,3],[3.45,1.5],[1.72,0]]}],"t":294}]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":291},{"s":[1,1,1],"t":294}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}}],"ind":1},{"ty":4,"nm":"Vector","sr":1,"st":0,"op":295,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0.5,0.39],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[5.92,4.65],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[5.92,4.65],"t":291},{"s":[0.5,0.39],"t":294}]},"s":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100,100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100,100],"t":291},{"s":[100,100],"t":294}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1.05,2.59],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[7.92,33.88],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[7.92,33.88],"t":291},{"s":[1.05,2.59],"t":294}]},"r":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[0],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[0],"t":291},{"s":[0],"t":294}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}},"ef":[],"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[{"c":true,"i":[[0,0],[0.76,0.53],[1.58,-2.94],[0,0],[-0.45,-0.25],[-0.23,0.06],[-2.33,1.78],[1.58,0.99]],"o":[[-1,-0.63],[-0.42,1.9],[0,0],[-0.25,0.45],[0.21,0.12],[4.79,-1.21],[-2.1,-0.89],[0,0]],"v":[[6.13,1.77],[3.47,0],[0.47,7.26],[0.12,7.9],[0.48,9.18],[1.17,9.28],[11.84,4.79],[6.13,1.77]]}],"t":291},{"s":[{"c":true,"i":[[0,0],[0.06,0.04],[0.13,-0.25],[0,0],[-0.04,-0.02],[-0.02,0],[-0.2,0.15],[0.13,0.08]],"o":[[-0.08,-0.05],[-0.04,0.16],[0,0],[-0.02,0.04],[0.02,0.01],[0.4,-0.1],[-0.18,-0.07],[0,0]],"v":[[0.52,0.15],[0.29,0],[0.04,0.61],[0.01,0.66],[0.04,0.77],[0.1,0.78],[1,0.4],[0.52,0.15]]}],"t":294}]}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[1,1,1],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[1,1,1],"t":291},{"s":[1,1,1],"t":294}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":9},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":18},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":27},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":36},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":45},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":54},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":63},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":72},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":75},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":81},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":90},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":99},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":108},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":117},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":126},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":135},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":183},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":192},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":201},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":210},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":219},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":228},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":237},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":246},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":255},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":264},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[100],"t":273},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":282},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[100],"t":291},{"s":[100],"t":294}]}}],"ind":2}]}]} \ No newline at end of file diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart index 2dda11657d..0e51f627f1 100644 --- a/lib/pages/bootstrap/bootstrap_dialog.dart +++ b/lib/pages/bootstrap/bootstrap_dialog.dart @@ -106,7 +106,7 @@ class BootstrapDialogState extends State { centerTitle: true, leading: IconButton( icon: const Icon(Icons.close), - onPressed: Navigator.of(context).pop, + onPressed: () => Navigator.of(context).pop(false), ), title: Text(L10n.of(context)!.recoveryKey), ), @@ -233,7 +233,7 @@ class BootstrapDialogState extends State { centerTitle: true, leading: IconButton( icon: const Icon(Icons.close), - onPressed: Navigator.of(context).pop, + onPressed: () => Navigator.of(context).pop(false), ), title: Text(L10n.of(context)!.chatBackup), ), @@ -372,8 +372,6 @@ class BootstrapDialogState extends State { isDestructiveAction: true, )) { await TomBootstrapDialog( - wipe: true, - wipeRecovery: true, client: widget.client, ).show().then( (value) => Navigator.of( @@ -426,12 +424,17 @@ class BootstrapDialogState extends State { ); break; case BootstrapState.done: - titleText = L10n.of(context)!.everythingReady; + titleText = null; body = Column( mainAxisSize: MainAxisSize.min, children: [ Image.asset('assets/backup.png', fit: BoxFit.contain), - Text(L10n.of(context)!.yourChatBackupHasBeenSetUp), + Flexible( + child: Text( + L10n.of(context)!.yourChatBackupHasBeenSetUp, + textAlign: TextAlign.center, + ), + ), ], ); buttons.add( @@ -448,16 +451,19 @@ class BootstrapDialogState extends State { return AlertDialog( content: Row( children: [ - Padding( - padding: const EdgeInsets.only(right: 16.0), - child: body, - ), Expanded( - child: Text( - titleText!, - overflow: TextOverflow.ellipsis, + child: Padding( + padding: const EdgeInsets.only(right: 16.0), + child: body, ), ), + if (titleText != null) + Expanded( + child: Text( + titleText!, + overflow: TextOverflow.ellipsis, + ), + ), ], ), actions: buttons.isNotEmpty ? buttons : null, diff --git a/lib/pages/bootstrap/init_client_dialog.dart b/lib/pages/bootstrap/init_client_dialog.dart new file mode 100644 index 0000000000..8636934b0a --- /dev/null +++ b/lib/pages/bootstrap/init_client_dialog.dart @@ -0,0 +1,137 @@ +import 'dart:async'; +import 'package:fluffychat/presentation/model/client_login_state_event.dart'; +import 'package:fluffychat/widgets/layouts/agruments/logged_in_body_args.dart'; +import 'package:fluffychat/widgets/layouts/agruments/logged_in_other_account_body_args.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/widgets/twake_app.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + +class InitClientDialog extends StatefulWidget { + final Future Function() future; + + const InitClientDialog({ + super.key, + required this.future, + }); + + @override + State createState() => _InitClientDialogState(); +} + +class _InitClientDialogState extends State + with TickerProviderStateMixin { + late AnimationController loginSSOProgressController; + + Client? _clientFirstLoggedIn; + + Client? _clientAddAnotherAccount; + + StreamSubscription? _clientLoginStateChangedSubscription; + + @override + void initState() { + _initial(); + _clientLoginStateChangedSubscription = + Matrix.of(context).onClientLoginStateChanged.stream.listen( + _listenClientLoginStateChanged, + ); + WidgetsBinding.instance.addPostFrameCallback( + (_) async { + _startLoginSSOProgress(); + await widget + .future() + .then( + (_) => _handleFunctionOnDone(), + ) + .onError( + (error, _) => _handleFunctionOnError(error), + ); + }, + ); + + super.initState(); + } + + void _listenClientLoginStateChanged(ClientLoginStateEvent event) { + Logs().i( + 'StreamDialogBuilder::_listenClientLoginStateChanged - ${event.multipleAccountLoginType}', + ); + if (event.multipleAccountLoginType == + MultipleAccountLoginType.firstLoggedIn) { + _clientFirstLoggedIn = event.client; + return; + } + + if (event.multipleAccountLoginType == + MultipleAccountLoginType.otherAccountLoggedIn) { + _clientAddAnotherAccount = event.client; + return; + } + } + + void _handleFunctionOnDone() async { + Logs().i('StreamDialogBuilder::_handleFunctionOnDone'); + Navigator.of(context, rootNavigator: false).pop(); + if (_clientFirstLoggedIn != null) { + _handleFirstLoggedIn(_clientFirstLoggedIn!); + return; + } + + if (_clientAddAnotherAccount != null) { + _handleAddAnotherAccount(_clientAddAnotherAccount!); + return; + } + } + + void _handleFunctionOnError(Object? error) { + Logs().e('StreamDialogBuilder::_handleFunctionOnError - $error'); + Navigator.pop(context); + } + + void _handleFirstLoggedIn(Client client) { + TwakeApp.router.go( + '/rooms', + extra: LoggedInBodyArgs( + newActiveClient: client, + ), + ); + } + + void _handleAddAnotherAccount(Client client) { + TwakeApp.router.go( + '/rooms', + extra: LoggedInOtherAccountBodyArgs( + newActiveClient: client, + ), + ); + } + + void _initial() { + loginSSOProgressController = AnimationController( + vsync: this, + duration: const Duration(seconds: 2), + ); + } + + void _startLoginSSOProgress() { + loginSSOProgressController.addListener(() { + setState(() {}); + }); + loginSSOProgressController.repeat(); + } + + @override + void dispose() { + loginSSOProgressController.dispose(); + _clientLoginStateChangedSubscription?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return const Scaffold( + backgroundColor: Colors.transparent, + ); + } +} diff --git a/lib/pages/bootstrap/tom_bootstrap_dialog.dart b/lib/pages/bootstrap/tom_bootstrap_dialog.dart index 7e75fcc0c0..3ae3a9d612 100644 --- a/lib/pages/bootstrap/tom_bootstrap_dialog.dart +++ b/lib/pages/bootstrap/tom_bootstrap_dialog.dart @@ -1,80 +1,147 @@ +import 'package:fluffychat/di/global/dio_cache_interceptor_for_client.dart'; import 'package:fluffychat/di/global/get_it_initializer.dart'; import 'package:fluffychat/domain/model/recovery_words/recovery_words.dart'; import 'package:fluffychat/domain/usecase/recovery/delete_recovery_words_interactor.dart'; +import 'package:fluffychat/domain/usecase/recovery/get_recovery_words_interactor.dart'; import 'package:fluffychat/domain/usecase/recovery/save_recovery_words_interactor.dart'; +import 'package:fluffychat/pages/bootstrap/tom_bootstrap_dialog_style.dart'; import 'package:fluffychat/utils/dialog/twake_dialog.dart'; -import 'package:fluffychat/widgets/adaptive_flat_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:linagora_design_flutter/colors/linagora_sys_colors.dart'; +import 'package:lottie/lottie.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/encryption/utils/bootstrap.dart'; import 'package:matrix/matrix.dart'; -import 'bootstrap_dialog.dart'; - class TomBootstrapDialog extends StatefulWidget { - final bool wipe; - final bool wipeRecovery; final Client client; - final RecoveryWords? recoveryWords; const TomBootstrapDialog({ super.key, - this.recoveryWords, - this.wipe = false, - this.wipeRecovery = false, required this.client, }); Future show() => TwakeDialog.showDialogFullScreen( builder: () => this, + barrierColor: TomBootstrapDialogStyle.barrierColor, ); @override TomBootstrapDialogState createState() => TomBootstrapDialogState(); } -class TomBootstrapDialogState extends State { +class TomBootstrapDialogState extends State + with TickerProviderStateMixin { final _saveRecoveryWordsInteractor = getIt.get(); + + final _getRecoveryWordsInteractor = getIt.get(); + final _deleteRecoveryWordsInteractor = getIt.get(); Bootstrap? bootstrap; - String? titleText; - Widget? body; - final buttons = []; - UploadRecoveryKeyState _uploadRecoveryKeyState = - UploadRecoveryKeyState.initial; + UploadRecoveryKeyState.dataLoading; - bool? _wipe; + bool _wipe = false; + RecoveryWords? _recoveryWords; @override void initState() { super.initState(); - _createBootstrap(widget.wipe); + bootstrap = + widget.client.encryption!.bootstrap(onUpdate: (_) => setState(() {})); + _createBootstrap(); } - void _createBootstrap(bool wipe) async { - _wipe = wipe; - titleText = null; - _uploadRecoveryKeyState = _initializeRecoveryKeyState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - bootstrap = - widget.client.encryption!.bootstrap(onUpdate: (_) => setState(() {})); + void _createBootstrap() async { + WidgetsBinding.instance.addPostFrameCallback((_) async { + await _loadingData(); }); } - UploadRecoveryKeyState _initializeRecoveryKeyState() { - if (widget.wipeRecovery) { - return UploadRecoveryKeyState.wipeRecovery; + Future setupAdditionalDioCacheOption(String userId) async { + Logs().d('TomBootstrapDialog::setupAdditionalDioCacheOption: $userId'); + DioCacheInterceptorForClient(userId).setup(getIt); + } + + Future _getRecoveryWords() async { + final result = await _getRecoveryWordsInteractor.execute(); + return result.fold( + (failure) => null, + (success) => success.words, + ); + } + + Future _loadingData() async { + _uploadRecoveryKeyState = UploadRecoveryKeyState.dataLoading; + await widget.client.roomsLoading; + await widget.client.accountDataLoading; + if (widget.client.userID != null) { + await setupAdditionalDioCacheOption(widget.client.userID!); } + setState(() { + _uploadRecoveryKeyState = UploadRecoveryKeyState.checkingRecoveryWork; + }); + await _getRecoveryKeyState(); + } - if (widget.recoveryWords != null) { - return UploadRecoveryKeyState.useExisting; + Future _getRecoveryKeyState() async { + await widget.client.onSync.stream.first; + await widget.client.initCompleter?.future; + + // Display first login bootstrap if enabled + if (widget.client.encryption?.keyManager.enabled == true) { + Logs().d( + 'TomBootstrapDialog::_initializeRecoveryKeyState: Showing bootstrap dialog when encryption is enabled', + ); + if (await widget.client.encryption?.keyManager.isCached() == false || + await widget.client.encryption?.crossSigning.isCached() == false || + widget.client.isUnknownSession && mounted) { + final recoveryWords = await _getRecoveryWords(); + if (recoveryWords != null) { + _recoveryWords = recoveryWords; + _uploadRecoveryKeyState = UploadRecoveryKeyState.useExisting; + setState(() {}); + return; + } else { + Logs().d( + 'TomBootstrapDialog::_initializeRecoveryKeyState(): no recovery existed then call bootstrap', + ); + Navigator.of(context, rootNavigator: false).pop(false); + } + } + } else { + Logs().d( + 'TomBootstrapDialog::_initializeRecoveryKeyState(): encryption is not enabled', + ); + final recoveryWords = await _getRecoveryWords(); + _wipe = recoveryWords != null; + if (recoveryWords != null) { + _uploadRecoveryKeyState = UploadRecoveryKeyState.wipeRecovery; + } else { + _uploadRecoveryKeyState = UploadRecoveryKeyState.initial; + } + setState(() {}); + return; } + } + + bool get isDataLoadingState => + _uploadRecoveryKeyState == UploadRecoveryKeyState.dataLoading; + + bool get isCheckingRecoveryWorkState => + _uploadRecoveryKeyState == UploadRecoveryKeyState.checkingRecoveryWork; - return UploadRecoveryKeyState.initial; + String get _description { + if (isDataLoadingState) { + return L10n.of(context)!.backingUpYourMessage; + } else if (isCheckingRecoveryWorkState) { + return L10n.of(context)!.configureDataEncryption; + } else { + return L10n.of(context)!.recoveringYourEncryptedChats; + } } @override @@ -82,31 +149,22 @@ class TomBootstrapDialogState extends State { Logs().d( 'TomBootstrapDialogState::build(): BootstrapState = ${bootstrap?.state}', ); - _wipe ??= widget.wipe; - body = _loadingContent(context); + + Logs().d( + 'TomBootstrapDialogState::build(): RecoveryKeyState = $_uploadRecoveryKeyState', + ); switch (_uploadRecoveryKeyState) { + case UploadRecoveryKeyState.dataLoading: + break; + case UploadRecoveryKeyState.checkingRecoveryWork: + break; case UploadRecoveryKeyState.wipeRecovery: WidgetsBinding.instance.addPostFrameCallback((_) { _wipeRecoveryWord(); }); break; case UploadRecoveryKeyState.wipeRecoveryFailed: - titleText = L10n.of(context)!.chatBackup; - body = Text( - L10n.of(context)!.cannotEnableKeyBackup, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ); - buttons.clear(); - buttons.add( - AdaptiveFlatButton( - label: L10n.of(context)!.close, - onPressed: () => - Navigator.of(context, rootNavigator: false).pop(false), - ), - ); break; case UploadRecoveryKeyState.created: if (_createNewRecoveryKeySuccess()) { @@ -118,7 +176,7 @@ class TomBootstrapDialogState extends State { Logs().d( 'TomBootstrapDialogState::build(): check if key is already in TOM = ${_existedRecoveryWordsInTom( key, - )} - ${widget.recoveryWords?.words}', + )} - ${_recoveryWords?.words}', ); if (_existedRecoveryWordsInTom(key)) { _uploadRecoveryKeyState = UploadRecoveryKeyState.uploaded; @@ -135,69 +193,68 @@ class TomBootstrapDialogState extends State { _handleBootstrapState(); break; case UploadRecoveryKeyState.unlockError: - titleText = L10n.of(context)!.chatBackup; - body = Text( - L10n.of(context)!.cannotUnlockBackupKey, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ); - buttons.clear(); - buttons - ..add( - AdaptiveFlatButton( - label: L10n.of(context)!.close, - onPressed: () => - Navigator.of(context, rootNavigator: false).pop(false), - ), - ) - ..add( - AdaptiveFlatButton( - label: L10n.of(context)!.next, - onPressed: () async { - await BootstrapDialog(client: widget.client).show().then( - (value) => Navigator.of(context, rootNavigator: false) - .pop(false), - ); - }, - ), - ); + WidgetsBinding.instance.addPostFrameCallback((_) async { + Navigator.of(context, rootNavigator: false).pop(false); + }); break; case UploadRecoveryKeyState.uploadError: Logs().e('TomBootstrapDialogState::build(): upload recovery key error'); - titleText = L10n.of(context)!.chatBackup; - body = Text( - L10n.of(context)!.cannotUploadKey, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ); - buttons.clear(); - buttons.add( - AdaptiveFlatButton( - label: L10n.of(context)!.close, - onPressed: () => - Navigator.of(context, rootNavigator: false).pop(false), - ), - ); + WidgetsBinding.instance.addPostFrameCallback((_) { + Navigator.of(context, rootNavigator: false).pop(); + }); break; default: _handleBootstrapState(); break; } - return AlertDialog( - title: titleText != null ? Text(titleText!) : null, - content: body, - actions: buttons, + return Scaffold( + backgroundColor: Colors.transparent, + body: Center( + child: Container( + height: TomBootstrapDialogStyle.sizedDialogWeb, + width: TomBootstrapDialogStyle.sizedDialogWeb, + decoration: TomBootstrapDialogStyle.decorationDialog, + child: Padding( + padding: TomBootstrapDialogStyle.paddingDialog, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context)!.settingUpYourTwake, + style: Theme.of(context).textTheme.titleLarge?.copyWith( + color: LinagoraSysColors.material().onBackground, + ), + textAlign: TextAlign.center, + ), + Padding( + padding: TomBootstrapDialogStyle.lottiePadding, + child: LottieBuilder.asset( + 'assets/twake_loading.json', + width: TomBootstrapDialogStyle.lottieSize, + height: TomBootstrapDialogStyle.lottieSize, + ), + ), + Text( + _description, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: LinagoraSysColors.material().onBackground, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ), ); } bool _existedRecoveryWordsInTom(String? key) { - if (key == null && widget.recoveryWords != null) { + if (key == null && _recoveryWords != null) { return true; } - return widget.recoveryWords != null && widget.recoveryWords!.words == key; + return _recoveryWords != null && _recoveryWords!.words == key; } bool _createNewRecoveryKeySuccess() { @@ -205,14 +262,18 @@ class TomBootstrapDialogState extends State { _uploadRecoveryKeyState == UploadRecoveryKeyState.created; } + bool get _setUpSuccess => + _uploadRecoveryKeyState != UploadRecoveryKeyState.dataLoading && + _uploadRecoveryKeyState != UploadRecoveryKeyState.checkingRecoveryWork; + void _handleBootstrapState() { - if (bootstrap != null) { + if (bootstrap != null && _setUpSuccess) { switch (bootstrap!.state) { case BootstrapState.loading: break; case BootstrapState.askWipeSsss: WidgetsBinding.instance.addPostFrameCallback( - (_) => bootstrap?.wipeSsss(_wipe!), + (_) => bootstrap?.wipeSsss(_wipe), ); break; case BootstrapState.askBadSsss: @@ -223,7 +284,7 @@ class TomBootstrapDialogState extends State { case BootstrapState.askUseExistingSsss: _uploadRecoveryKeyState = UploadRecoveryKeyState.useExisting; WidgetsBinding.instance.addPostFrameCallback( - (_) => bootstrap?.useExistingSsss(!_wipe!), + (_) => bootstrap?.useExistingSsss(!_wipe), ); break; case BootstrapState.askUnlockSsss: @@ -246,7 +307,7 @@ class TomBootstrapDialogState extends State { break; case BootstrapState.askWipeCrossSigning: WidgetsBinding.instance.addPostFrameCallback( - (_) => bootstrap?.wipeCrossSigning(_wipe!), + (_) => bootstrap?.wipeCrossSigning(_wipe), ); break; case BootstrapState.askSetupCrossSigning: @@ -262,7 +323,7 @@ class TomBootstrapDialogState extends State { break; case BootstrapState.askWipeOnlineKeyBackup: WidgetsBinding.instance.addPostFrameCallback( - (_) => bootstrap?.wipeOnlineKeyBackup(_wipe!), + (_) => bootstrap?.wipeOnlineKeyBackup(_wipe), ); break; case BootstrapState.askSetupOnlineKeyBackup: @@ -271,34 +332,14 @@ class TomBootstrapDialogState extends State { ); break; case BootstrapState.error: - titleText = L10n.of(context)!.oopsSomethingWentWrong; - body = const Icon(Icons.error_outline, color: Colors.red, size: 40); - buttons.clear(); - buttons.add( - AdaptiveFlatButton( - label: L10n.of(context)!.close, - onPressed: () => - Navigator.of(context, rootNavigator: false).pop(false), - ), - ); + WidgetsBinding.instance.addPostFrameCallback((_) { + Navigator.of(context, rootNavigator: false).pop(); + }); break; case BootstrapState.done: - titleText = L10n.of(context)!.everythingReady; - body = Column( - mainAxisSize: MainAxisSize.min, - children: [ - Image.asset('assets/backup.png', fit: BoxFit.contain), - Text(L10n.of(context)!.yourChatBackupHasBeenSetUp), - ], - ); - buttons.clear(); - buttons.add( - AdaptiveFlatButton( - label: L10n.of(context)!.close, - onPressed: () => - Navigator.of(context, rootNavigator: false).pop(false), - ), - ); + WidgetsBinding.instance.addPostFrameCallback((_) { + Navigator.of(context, rootNavigator: false).pop(true); + }); break; } } @@ -351,7 +392,7 @@ class TomBootstrapDialogState extends State { } Future _unlockBackUp() async { - final recoveryWords = widget.recoveryWords; + final recoveryWords = _recoveryWords; if (recoveryWords == null) { Logs().e('TomBootstrapDialogState::_unlockBackUp(): recoveryWords null'); setState(() { @@ -383,27 +424,11 @@ class TomBootstrapDialogState extends State { setState(() {}); } } - - Widget _loadingContent(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Padding( - padding: EdgeInsets.only(right: 16.0), - child: CircularProgressIndicator.adaptive(), - ), - Expanded( - child: Text( - L10n.of(context)!.loadingPleaseWait, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ); - } } enum UploadRecoveryKeyState { + dataLoading, + checkingRecoveryWork, initial, wipeRecovery, wipeRecoveryFailed, diff --git a/lib/pages/bootstrap/tom_bootstrap_dialog_style.dart b/lib/pages/bootstrap/tom_bootstrap_dialog_style.dart new file mode 100644 index 0000000000..32c4fd5846 --- /dev/null +++ b/lib/pages/bootstrap/tom_bootstrap_dialog_style.dart @@ -0,0 +1,27 @@ +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/material.dart'; +import 'package:linagora_design_flutter/linagora_design_flutter.dart'; + +class TomBootstrapDialogStyle { + static EdgeInsets paddingDialog = const EdgeInsets.symmetric( + horizontal: 56, + ); + + static Color? barrierColor = + PlatformInfos.isMobile ? LinagoraSysColors.material().onPrimary : null; + + static double? sizedDialogWeb = PlatformInfos.isMobile ? null : 400; + + static Decoration? decorationDialog = PlatformInfos.isMobile + ? null + : BoxDecoration( + color: LinagoraSysColors.material().surface, + borderRadius: BorderRadius.circular(24), + ); + + static EdgeInsets lottiePadding = EdgeInsets.symmetric( + vertical: PlatformInfos.isMobile ? 16 : 24, + ); + + static double lottieSize = PlatformInfos.isMobile ? 64 : 96; +} diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index a0fdde3d3b..fa0d3b8306 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -6,11 +6,9 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/first_column_inner_routes.dart'; import 'package:fluffychat/di/global/dio_cache_interceptor_for_client.dart'; import 'package:fluffychat/di/global/get_it_initializer.dart'; -import 'package:fluffychat/domain/model/recovery_words/recovery_words.dart'; import 'package:fluffychat/domain/model/room/room_extension.dart'; -import 'package:fluffychat/domain/usecase/recovery/get_recovery_words_interactor.dart'; -import 'package:fluffychat/presentation/mixins/comparable_presentation_contact_mixin.dart'; import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart'; +import 'package:fluffychat/presentation/mixins/comparable_presentation_contact_mixin.dart'; import 'package:fluffychat/pages/bootstrap/tom_bootstrap_dialog.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/pages/settings_dashboard/settings_security/settings_security.dart'; @@ -27,6 +25,7 @@ import 'package:fluffychat/utils/tor_stub.dart' import 'package:fluffychat/utils/twake_snackbar.dart'; import 'package:fluffychat/widgets/context_menu/context_menu_action.dart'; import 'package:fluffychat/widgets/layouts/agruments/app_adaptive_scaffold_body_args.dart'; +import 'package:fluffychat/widgets/layouts/agruments/logged_in_body_args.dart'; import 'package:fluffychat/widgets/layouts/agruments/logged_in_other_account_body_args.dart'; import 'package:fluffychat/widgets/mixins/popup_context_menu_action_mixin.dart'; import 'package:fluffychat/widgets/mixins/popup_menu_widget_mixin.dart'; @@ -74,8 +73,6 @@ class ChatListController extends State PopupMenuWidgetMixin, GoToGroupChatMixin, TwakeContextMenuMixin { - final _getRecoveryWordsInteractor = getIt.get(); - final responsive = getIt.get(); final ValueNotifier expandRoomsForAllNotifier = ValueNotifier(true); @@ -104,8 +101,6 @@ class ChatListController extends State bool isTorBrowser = false; - bool waitForFirstSync = false; - bool scrolledToTop = true; Client get activeClient => matrixState.client; @@ -413,51 +408,43 @@ class ChatListController extends State DioCacheInterceptorForClient(userId).setup(getIt); } + Future _trySync() async { + if (widget.adaptiveScaffoldBodyArgs is LoggedInBodyArgs || + widget.adaptiveScaffoldBodyArgs is LoggedInOtherAccountBodyArgs) { + _waitForFirstSyncAfterLogin(); + } else { + _waitForFirstSync(); + } + } + + Future _waitForFirstSyncAfterLogin() async { + WidgetsBinding.instance.addPostFrameCallback((_) async { + final result = await TomBootstrapDialog( + client: activeClient, + ).show(); + + setState(() {}); + + if (result == false) { + await BootstrapDialog(client: activeClient).show(); + } + }); + + if (!mounted) return; + setState(() { + matrixState.waitForFirstSync = true; + }); + } + Future _waitForFirstSync() async { await activeClient.roomsLoading; await activeClient.accountDataLoading; if (activeClient.userID != null) { await setupAdditionalDioCacheOption(activeClient.userID!); } - if (activeClient.prevBatch == null) { - await activeClient.onSync.stream.first; - await activeClient.initCompleter?.future; - - // Display first login bootstrap if enabled - if (activeClient.encryption?.keyManager.enabled == true) { - Logs().d( - 'ChatList::_waitForFirstSync: Showing bootstrap dialog when encryption is enabled', - ); - if (await activeClient.encryption?.keyManager.isCached() == false || - await activeClient.encryption?.crossSigning.isCached() == false || - activeClient.isUnknownSession && mounted) { - final recoveryWords = await _getRecoveryWords(); - if (recoveryWords != null) { - await TomBootstrapDialog( - client: activeClient, - recoveryWords: recoveryWords, - ).show(); - } else { - Logs().d( - 'ChatListController::_waitForFirstSync(): no recovery existed then call bootstrap', - ); - await BootstrapDialog(client: activeClient).show(); - } - } - } else { - Logs().d( - 'ChatListController::_waitForFirstSync(): encryption is not enabled', - ); - final recoveryWords = await _getRecoveryWords(); - await TomBootstrapDialog( - client: activeClient, - wipeRecovery: recoveryWords != null, - ).show(); - } - } if (!mounted) return; setState(() { - waitForFirstSync = true; + matrixState.waitForFirstSync = true; }); } @@ -722,15 +709,6 @@ class ChatListController extends State isTorBrowser = isTor; } - Future _getRecoveryWords() async { - return await _getRecoveryWordsInteractor.execute().then( - (either) => either.fold( - (failure) => null, - (success) => success.words, - ), - ); - } - Future dehydrate() => SettingsSecurityController.dehydrateDevice(context); @@ -766,7 +744,9 @@ class ChatListController extends State Logs().d( "ChatList::_handleAnotherAccountAdded(): Handle recovery data for another account", ); - _waitForFirstSync(); + if (!matrixState.waitForFirstSync) { + _trySync(); + } } } @@ -795,7 +775,9 @@ class ChatListController extends State } activeRoomIdNotifier.value = widget.activeRoomIdNotifier.value; scrollController.addListener(_onScroll); - _waitForFirstSync(); + if (!matrixState.waitForFirstSync) { + _trySync(); + } _hackyWebRTCFixForWeb(); // TODO: 28Dec2023 Disable callkeep for util we support audio/video calls // CallKeepManager().initialize(); diff --git a/lib/pages/chat_list/chat_list_body_view.dart b/lib/pages/chat_list/chat_list_body_view.dart index e35f3224fd..e2ff36e10d 100644 --- a/lib/pages/chat_list/chat_list_body_view.dart +++ b/lib/pages/chat_list/chat_list_body_view.dart @@ -59,7 +59,7 @@ class ChatListBodyView extends StatelessWidget { key: Key(controller.activeSpaceId ?? 'Spaces'), ); } - if (controller.waitForFirstSync && + if (controller.matrixState.waitForFirstSync && controller.activeClient.prevBatch != null) { if (controller.chatListBodyIsEmpty) { return Column( diff --git a/lib/pages/connect/sso_login_state.dart b/lib/pages/connect/sso_login_state.dart new file mode 100644 index 0000000000..c4e5257d8b --- /dev/null +++ b/lib/pages/connect/sso_login_state.dart @@ -0,0 +1,5 @@ +enum SsoLoginState { + success, + error, + tokenEmpty, +} diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index 37dea5e84d..a98fb33d81 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart'; +import 'package:fluffychat/pages/connect/sso_login_state.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_state.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/dialog/twake_dialog.dart'; @@ -191,9 +192,14 @@ class HomeserverPickerController extends State identityProviders(rawLoginTypes: rawLoginTypes); if (supportsSso(context) && identitiesProvider?.length == 1) { - ssoLoginAction(context: context, id: identitiesProvider!.single.id!); + final result = await ssoLoginAction( + context: context, + id: identitiesProvider!.single.id!, + ); + if (result == SsoLoginState.error) { + state = HomeserverState.ssoLoginServer; + } } - state = HomeserverState.ssoLoginServer; FocusManager.instance.primaryFocus?.unfocus(); setState(() {}); } else { @@ -247,7 +253,10 @@ class HomeserverPickerController extends State @override Widget build(BuildContext context) { - return HomeserverPickerView(this); + return PopScope( + canPop: state != HomeserverState.loading, + child: HomeserverPickerView(this), + ); } Future restoreBackup() async { diff --git a/lib/pages/homeserver_picker/homeserver_picker_view.dart b/lib/pages/homeserver_picker/homeserver_picker_view.dart index 6fc8056659..fca89fd529 100644 --- a/lib/pages/homeserver_picker/homeserver_picker_view.dart +++ b/lib/pages/homeserver_picker/homeserver_picker_view.dart @@ -23,7 +23,9 @@ class HomeserverPickerView extends StatelessWidget { ? AppBar( leading: TwakeIconButton( icon: Icons.arrow_back, - onTap: () => context.pop(), + onTap: controller.state != HomeserverState.loading + ? () => context.pop() + : null, tooltip: L10n.of(context)!.back, ), ) diff --git a/lib/pages/login/on_auth_redirect.dart b/lib/pages/login/on_auth_redirect.dart index eed6c4a390..a22371da98 100644 --- a/lib/pages/login/on_auth_redirect.dart +++ b/lib/pages/login/on_auth_redirect.dart @@ -1,12 +1,16 @@ +import 'dart:async'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart'; -import 'package:fluffychat/utils/dialog/twake_dialog.dart'; +import 'package:fluffychat/presentation/model/client_login_state_event.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/layouts/agruments/logged_in_body_args.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'package:fluffychat/widgets/twake_app.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:linagora_design_flutter/colors/linagora_sys_colors.dart'; import 'package:matrix/matrix.dart'; +import 'package:flutter/material.dart'; class OnAuthRedirect extends StatefulWidget { const OnAuthRedirect({super.key}); @@ -16,14 +20,59 @@ class OnAuthRedirect extends StatefulWidget { } class _OnAuthRedirectState extends State with ConnectPageMixin { + Client? _clientFirstLoggedIn; + + StreamSubscription? _clientLoginStateChangedSubscription; + @override void initState() { super.initState(); + _clientLoginStateChangedSubscription = + Matrix.of(context).onClientLoginStateChanged.stream.listen( + _listenClientLoginStateChanged, + ); WidgetsBinding.instance.addPostFrameCallback((_) { tryLoggingUsingToken(context: context); }); } + @override + void dispose() { + _clientLoginStateChangedSubscription?.cancel(); + super.dispose(); + } + + void _listenClientLoginStateChanged(ClientLoginStateEvent event) { + Logs().i( + 'StreamDialogBuilder::_listenClientLoginStateChanged - ${event.multipleAccountLoginType}', + ); + if (event.multipleAccountLoginType == + MultipleAccountLoginType.firstLoggedIn) { + _clientFirstLoggedIn = event.client; + _handleLoginSuccess(); + return; + } + } + + void _handleLoginSuccess() { + Logs().i('OnAuthRedirect::_handleLoginSuccess'); + if (_clientFirstLoggedIn != null) { + context.go( + '/rooms', + extra: LoggedInBodyArgs( + newActiveClient: _clientFirstLoggedIn, + ), + ); + } else { + context.go('/home'); + } + } + + void _handleLoginError(Object? error) { + Logs().e('OnAuthRedirect::_handleLoginError - $error'); + context.go('/home'); + } + Future tryLoggingUsingToken({ required BuildContext context, }) async { @@ -58,27 +107,23 @@ class _OnAuthRedirectState extends State with ConnectPageMixin { .getLoginClient() .checkHomeserver(Uri.parse(homeserver)); - await TwakeDialog.showFutureLoadingDialogFullScreen( - future: () => Matrix.of(context).getLoginClient().login( - LoginType.mLoginToken, - token: loginToken, - initialDeviceDisplayName: PlatformInfos.clientName, - ), - ); + await Matrix.of(context).getLoginClient().login( + LoginType.mLoginToken, + token: loginToken, + initialDeviceDisplayName: PlatformInfos.clientName, + ); } catch (e) { - Logs().e('tryLoggingUsingToken::error: $e'); - TwakeApp.router.go('/home', extra: true); + _handleLoginError(e); } } @override Widget build(BuildContext context) { - return const Scaffold( - backgroundColor: Colors.black, + return Scaffold( body: Center( child: CupertinoActivityIndicator( animating: true, - color: Colors.white, + color: LinagoraSysColors.material().onSurfaceVariant, ), ), ); diff --git a/lib/pages/twake_welcome/twake_welcome.dart b/lib/pages/twake_welcome/twake_welcome.dart index baf1b19730..23b8867089 100644 --- a/lib/pages/twake_welcome/twake_welcome.dart +++ b/lib/pages/twake_welcome/twake_welcome.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:fluffychat/config/app_config.dart'; import 'package:equatable/equatable.dart'; import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart'; @@ -68,21 +70,25 @@ class TwakeWelcomeController extends State with ConnectPageMixin { } void _redirectRegistrationUrl(String url) async { - final homeserverExisted = await _homeserverExisted(); - if (homeserverExisted) return; - matrix.loginHomeserverSummary = - await matrix.getLoginClient().checkHomeserver( - Uri.parse(AppConfig.twakeWorkplaceHomeserver), - ); - final uri = await FlutterWebAuth2.authenticate( - url: url, - callbackUrlScheme: AppConfig.appOpenUrlScheme, - options: const FlutterWebAuth2Options( - intentFlags: ephemeralIntentFlags, - ), - ); - Logs().d("TwakeIdController:_redirectRegistrationUrl: URI - $uri"); - handleTokenFromRegistrationSite(matrix: matrix, uri: uri); + try { + final homeserverExisted = await _homeserverExisted(); + if (homeserverExisted) return; + matrix.loginHomeserverSummary = + await matrix.getLoginClient().checkHomeserver( + Uri.parse(AppConfig.twakeWorkplaceHomeserver), + ); + final uri = await FlutterWebAuth2.authenticate( + url: url, + callbackUrlScheme: AppConfig.appOpenUrlScheme, + options: const FlutterWebAuth2Options( + intentFlags: ephemeralIntentFlags, + ), + ); + Logs().d("TwakeIdController:_redirectRegistrationUrl: URI - $uri"); + await handleTokenFromRegistrationSite(matrix: matrix, uri: uri); + } catch (e) { + Logs().e("TwakeIdController::_redirectRegistrationUrl: $e"); + } } void onClickCreateTwakeId() { diff --git a/lib/presentation/mixins/connect_page_mixin.dart b/lib/presentation/mixins/connect_page_mixin.dart index 67114b1849..de2aeaf7a9 100644 --- a/lib/presentation/mixins/connect_page_mixin.dart +++ b/lib/presentation/mixins/connect_page_mixin.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/auto_homeserver_picker/auto_homeserver_picker.dart'; import 'package:fluffychat/pages/connect/connect_page.dart'; +import 'package:fluffychat/pages/connect/sso_login_state.dart'; import 'package:fluffychat/utils/dialog/twake_dialog.dart'; import 'package:fluffychat/utils/exception/homeserver_exception.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -22,7 +23,7 @@ mixin ConnectPageMixin { static const windowNameValue = '_self'; - static const redirectPublicPlatformOnWeb = 'post_login_redirect_url'; + static const redirectPublicPlatformOnWeb = 'post_registered_redirect_url'; bool supportsFlow({ required BuildContext context, @@ -116,47 +117,54 @@ mixin ConnectPageMixin { ); } - Future ssoLoginAction({ + Future ssoLoginAction({ required BuildContext context, required String id, }) async { if (PlatformInfos.isWeb) { - await ssoLoginActionWeb(context: context, id: id); + return ssoLoginActionWeb(context: context, id: id); } else { - ssoLoginActionMobile(context: context, id: id); + return ssoLoginActionMobile(context: context, id: id); } } - Future ssoLoginActionWeb({ + Future ssoLoginActionWeb({ required BuildContext context, required String id, }) async { await authenticateWithWebAuth(context: context, id: id); + return SsoLoginState.success; } - void ssoLoginActionMobile({ + Future ssoLoginActionMobile({ required BuildContext context, required String id, }) async { - final result = await authenticateWithWebAuth(context: context, id: id); - final token = Uri.parse(result).queryParameters['loginToken']; - if (token?.isEmpty ?? false) return; - Matrix.of(context).loginType = LoginType.mLoginToken; - await TwakeDialog.showFutureLoadingDialogFullScreen( - future: () => Matrix.of(context) - .getLoginClient() - .login( - LoginType.mLoginToken, - token: token, - initialDeviceDisplayName: PlatformInfos.clientName, - ) - .timeout( - AutoHomeserverPickerController.autoHomeserverPickerTimeout, - onTimeout: () { - throw CheckHomeserverTimeoutException(); - }, - ), - ); + try { + final result = await authenticateWithWebAuth(context: context, id: id); + final token = Uri.parse(result).queryParameters['loginToken']; + if (token?.isEmpty ?? false) return SsoLoginState.tokenEmpty; + Matrix.of(context).loginType = LoginType.mLoginToken; + await TwakeDialog.showStreamDialogFullScreen( + future: () => Matrix.of(context) + .getLoginClient() + .login( + LoginType.mLoginToken, + token: token, + initialDeviceDisplayName: PlatformInfos.clientName, + ) + .timeout( + AutoHomeserverPickerController.autoHomeserverPickerTimeout, + onTimeout: () { + throw CheckHomeserverTimeoutException(); + }, + ), + ); + return SsoLoginState.success; + } catch (e) { + Logs().e('ConnectPageMixin:: ssoLoginActionMobil(): error: $e'); + return SsoLoginState.error; + } } Future tryLogoutSso(BuildContext context) async { @@ -246,23 +254,40 @@ mixin ConnectPageMixin { return list; } - void handleTokenFromRegistrationSite({ + Future handleTokenFromRegistrationSite({ required MatrixState matrix, required String uri, }) async { - final token = Uri.parse(uri).queryParameters['loginToken']; - Logs().d( - "ConnectPageMixin: handleTokenFromRegistrationSite: token: $token", - ); - if (token == null || token.isEmpty == true) return; - matrix.loginType = LoginType.mLoginToken; - await TwakeDialog.showFutureLoadingDialogFullScreen( - future: () => matrix.getLoginClient().login( - LoginType.mLoginToken, - token: token, - initialDeviceDisplayName: PlatformInfos.clientName, - ), - ); + try { + final token = Uri.parse(uri).queryParameters['loginToken']; + Logs().d( + "ConnectPageMixin: handleTokenFromRegistrationSite: token: $token", + ); + if (token == null || token.isEmpty == true) { + return SsoLoginState.tokenEmpty; + } + matrix.loginType = LoginType.mLoginToken; + await TwakeDialog.showStreamDialogFullScreen( + future: () => matrix + .getLoginClient() + .login( + LoginType.mLoginToken, + token: token, + initialDeviceDisplayName: PlatformInfos.clientName, + ) + .timeout( + AutoHomeserverPickerController.autoHomeserverPickerTimeout, + onTimeout: () { + throw CheckHomeserverTimeoutException(); + }, + ), + ); + return SsoLoginState.success; + } catch (e) { + Logs() + .e('ConnectPageMixin:: handleTokenFromRegistrationSite(): error: $e'); + return SsoLoginState.error; + } } void resetLocationPathWithLoginToken({ diff --git a/lib/presentation/model/client_login_state_event.dart b/lib/presentation/model/client_login_state_event.dart new file mode 100644 index 0000000000..fac8889979 --- /dev/null +++ b/lib/presentation/model/client_login_state_event.dart @@ -0,0 +1,26 @@ +import 'package:equatable/equatable.dart'; +import 'package:matrix/matrix.dart'; + +enum MultipleAccountLoginType { + firstLoggedIn, + otherAccountLoggedIn, +} + +class ClientLoginStateEvent with EquatableMixin { + final Client client; + final LoginState loginState; + final MultipleAccountLoginType multipleAccountLoginType; + + ClientLoginStateEvent({ + required this.client, + required this.loginState, + required this.multipleAccountLoginType, + }); + + @override + List get props => [ + client, + loginState, + multipleAccountLoginType, + ]; +} diff --git a/lib/utils/dialog/twake_dialog.dart b/lib/utils/dialog/twake_dialog.dart index c87f7cbecf..d117818ecf 100644 --- a/lib/utils/dialog/twake_dialog.dart +++ b/lib/utils/dialog/twake_dialog.dart @@ -1,3 +1,6 @@ +import 'dart:async'; + +import 'package:fluffychat/pages/bootstrap/init_client_dialog.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/twake_app.dart'; import 'package:flutter/cupertino.dart'; @@ -54,9 +57,30 @@ class TwakeDialog { ); } + static Future showStreamDialogFullScreen({ + required Future Function() future, + }) async { + final twakeContext = TwakeApp.routerKey.currentContext; + if (twakeContext == null) { + Logs().e( + 'TwakeLoadingDialog()::showStreamDialogFullScreen - Twake context is null', + ); + } + return await showDialog( + context: twakeContext!, + builder: (context) => InitClientDialog( + future: future, + ), + barrierDismissible: true, + barrierColor: Colors.transparent, + useRootNavigator: false, + ); + } + static Future showDialogFullScreen({ required Widget Function() builder, bool barrierDismissible = true, + Color? barrierColor, }) { final twakeContext = TwakeApp.routerKey.currentContext; if (twakeContext == null) { @@ -68,6 +92,7 @@ class TwakeDialog { return showDialog( context: twakeContext, builder: (context) => builder(), + barrierColor: barrierColor, barrierDismissible: barrierDismissible, useRootNavigator: false, ); diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 312995524e..33f33860b2 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -1,6 +1,8 @@ import 'dart:async'; import 'dart:io'; import 'package:fluffychat/presentation/mixins/init_config_mixin.dart'; +import 'package:fluffychat/presentation/model/client_login_state_event.dart'; +import 'package:fluffychat/widgets/layouts/agruments/logout_body_args.dart'; import 'package:universal_html/html.dart' as html hide File; import 'package:adaptive_dialog/adaptive_dialog.dart'; @@ -25,9 +27,6 @@ import 'package:fluffychat/utils/twake_snackbar.dart'; import 'package:fluffychat/utils/uia_request_manager.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/utils/voip_plugin.dart'; -import 'package:fluffychat/widgets/layouts/agruments/logged_in_body_args.dart'; -import 'package:fluffychat/widgets/layouts/agruments/logged_in_other_account_body_args.dart'; -import 'package:fluffychat/widgets/layouts/agruments/logout_body_args.dart'; import 'package:fluffychat/widgets/set_active_client_state.dart'; import 'package:fluffychat/widgets/twake_app.dart'; import 'package:flutter/foundation.dart'; @@ -87,6 +86,8 @@ class MatrixState extends State LoginType? loginType; bool? loginRegistrationSupported; + bool waitForFirstSync = false; + bool get twakeSupported { final tomServerUrlInterceptor = getIt.get( instanceName: NetworkDI.tomServerUrlInterceptorName, @@ -196,7 +197,7 @@ class MatrixState extends State .stream .where((l) => l == LoginState.loggedIn) .first - .then((_) => _handleAddAnotherAccount()); + .then((state) => _handleAddAnotherAccount(state)); return candidate; } @@ -254,6 +255,8 @@ class MatrixState extends State final onNotification = {}; final onLoginStateChanged = >{}; final onUiaRequest = >{}; + final StreamController onClientLoginStateChanged = + StreamController.broadcast(); StreamSubscription? onFocusSub; StreamSubscription? onBlurSub; @@ -380,7 +383,7 @@ class MatrixState extends State } else { if (state == LoginState.loggedIn) { Logs().v('[MATRIX]:_listenLoginStateChanged:: First Log in successful'); - _handleFirstLoggedIn(client); + _handleFirstLoggedIn(client, state); } else { Logs().v('[MATRIX]:_listenLoginStateChanged:: Last Log out successful'); await _handleLastLogout(); @@ -413,18 +416,23 @@ class MatrixState extends State } } - Future _handleFirstLoggedIn(Client newActiveClient) async { + Future _handleFirstLoggedIn( + Client newActiveClient, + LoginState loginState, + ) async { + waitForFirstSync = false; await setUpToMServicesInLogin(newActiveClient); await _storePersistActiveAccount(newActiveClient); - TwakeApp.router.go( - '/rooms', - extra: LoggedInBodyArgs( - newActiveClient: newActiveClient, + onClientLoginStateChanged.add( + ClientLoginStateEvent( + client: client, + loginState: loginState, + multipleAccountLoginType: MultipleAccountLoginType.firstLoggedIn, ), ); } - Future _handleAddAnotherAccount() async { + Future _handleAddAnotherAccount(LoginState loginState) async { Logs().d( 'MatrixState::_handleAddAnotherAccount() - Add another account successful', ); @@ -441,13 +449,16 @@ class MatrixState extends State _loginClientCandidate!.clientName, ); if (activeClient == null) return; + waitForFirstSync = false; await setUpToMServicesInLogin(activeClient); final result = await setActiveClient(activeClient); if (result.isSuccess) { - TwakeApp.router.go( - '/rooms', - extra: LoggedInOtherAccountBodyArgs( - newActiveClient: activeClient, + onClientLoginStateChanged.add( + ClientLoginStateEvent( + client: client, + loginState: loginState, + multipleAccountLoginType: + MultipleAccountLoginType.otherAccountLoggedIn, ), ); _loginClientCandidate = null; @@ -871,6 +882,7 @@ class MatrixState extends State onKeyVerificationRequestSub.values.map((s) => s.cancel()); onLoginStateChanged.values.map((s) => s.cancel()); onNotification.values.map((s) => s.cancel()); + onClientLoginStateChanged.close(); client.httpClient.close(); onFocusSub?.cancel(); onBlurSub?.cancel();