# BaseFrame **Repository Path**: architecture-components-samples/BaseFrame ## Basic Information - **Project Name**: BaseFrame - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-19 - **Last Updated**: 2024-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Android架构BaseFrame ============================================= 只是简单模仿 [architecture-components-samples](https://github.com/android/architecture-components-samples)中的BasicSample 这个sample介绍了下面几个构件化组件: * [Room](https://developer.android.com/topic/libraries/architecture/room.html) * [ViewModels](https://developer.android.com/reference/android/arch/lifecycle/ViewModel.html) * [LiveData](https://developer.android.com/reference/android/arch/lifecycle/LiveData.html) 介绍 ------------- ### 功能 这个sample包含两个页面,一个产品列表一个产品详情(包含产品的信息和评论列表) #### 表示层 这个表示层包含下面几个组件: * MainActivity 用来处理导航. * ProductListFragment 用来展示产品列表. * ProductFragment用来展示产品详情. 这个应用采用Model-View-ViewModel(MVVP)架构模型,每一个Fragment对应一个MVVM视图, 应用程序使用模型-视图-视图-模型(MVVM)架构作为表示层。每个片段都对应一个MVVM视图。View和ViewMode通过LiveData进行通信,这个设计需要遵循下面几个原则, * ViewModel 不包含 activities, fragments, or Android views. 这样可以避免因为配置变化而导致的内存泄漏,例如屏幕旋转。 因为系统保存的Viewmodel跨越当View的整个生命周期 ![ViewModel Diagram](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABI0AAAPWCAYAAABtJmiOAACAAElEQVR42uzd%0AC7ymc73///WImjYKkcPkFE0hcswhhxxiEiFEJkxyiig0flKTw56K3dQUlWwh%0AKjY7xS87SlLZ0VHFTnsrlcre6aedbIWNmevvfZnv+l/rWvdac6/DjHV4Ph+P%0Az2Nm3fd1X/e11ozdntfj+73unh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJMefvjh7/71r3/9jTHG%0AGGOMMcaMl3nq3zFf8K85gMUs/we3AgAAGEee+nfMH/xrDkA0AgAAEI0ARCMA%0AAADRCEA0AgAAEI0ARCMAAADRCEA0AgAAEI0ARCMAAADRCEA0AgAAEI0ARCMA%0AAADRCEA0AgAAEI0ARCMAAADRCADRCAAAEI0AEI0AAADRCADRCAAAEI0AEI0A%0AAADRCADRCAAAEI0AEI0AAABEIwDRCAAAQDQCEI0AAABEIwDRCAAAQDQCEI0A%0AAABEIwDRCAAAQDQCEI0AAABEIwDRCAAAQDQCEI0AAABEIwDRCAAAQDQCQDQC%0AAABEIwBEIwAAQDQCQDQCAABEIwBEIwAAQDQCQDQCAABEIwBEIwAAANEIQDQC%0AAAAQjQBEIwAAANEIQDQCAAAQjQBEIwAAANEIQDQCAAAQjQBEIwAAANEIQDQC%0AAAAQjQBEIwAAANEIQDQCAAAQjQAQjQAAANEIANEIAAAQjQAQjQAAANEIANEI%0AAAAQjQAQjQAAANEIANEIAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQjANEI%0AAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQjANFI%0ANAIAAEQjAEQjAABANAJANAIAAEQjAEQjAABANAJANAIAAEQjAEQjAAAA0QhA%0ANAIAABCNAEQjAAAA0QhANAIAABCNAEQjAAAA0QhANAIAABCNAEQjAAAA0QhA%0ANAIAABCNAEQjAAAA0QhANAIAABCNAEQjAAAA0QgA0QgAABCNABCNAAAA0QgA%0A0QgAABCNABCNAAAA0QgA0QgAABCNRCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0%0AAhCNAAAARCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0%0AAhCNAAAARCMARCMAAEA0AkA0AgAARCMARCMAAEA0AkA0AgAARCMARCMAAEA0%0AAkA0AgAAEI0ARCNGYMGCBdX8+fONMUtw8t/dSDzy+Pzqv//6hDGjMvn7BCAa%0AASAa0c8TTzxRPfjgg8aYJTiPPvroiP67veFnf67eeeU9xozKvO/a31T3P/S4%0A/0EERCMARCNEI2NEI2OEI0A0AkA0QjQyRjQyRjgCEI0ARCNEI2NEI2OEIwDR%0ACEA0QjQyRjQyRjgCEI0ARCNEI2NEI9HICEcAohGAaIRoZIxoJBoZ4QhANAIQ%0AjRCNjBGNRCMjHAGIRgCiEaKRMaKRaGSEIwDRCEA0QjQyxohGRjgCEI0ARCNE%0AI2OMaGSEIwDRCEA0QjQyxohGRjgCEI0ARCNEowky9913X3X++edXd9xxx6id%0A84Ybbqguv/xycWQMz+23317/ud99992ikTHCESAaASAaMVaj0V133VX/Az5z%0A//33j8r55s2b19Wxxx57bPXUX+tq4403HpXv5Z577qmWXnrp+pyDhaOhXONk%0AnFtuuaW67LLLFtv583ctf0bXXXedaDSO5oTL7672PvXT1bYHnVxtc8A7qj3e%0AeW51xPnfGVPX+MYzr6z2Pe0zwhGAaAQgGiEajcbMmjWr/gf8okJLtzNjxoz6%0AXN0ce/bZZ9fH5jWjtXJp6tSp1bLLLlvddttto3KNk3HWWmutavvttxeNRKPe%0AOWjO1dUKq63d+38ryjxrqaXG1HXmmjZ89f5WHAGIRgCiEaLRaMy6665bbbbZ%0AZvUKnQMPPHCJRqPMaG9Rymqpe++9d1SvUTQSjSZzNDpk7vXVs5+7TLXMCi+s%0A9jzpE9Xxn7urfvyweV+rVxyJRsIRgGgEIBoxAaNRtiHlH1nnnXdeHQmyQmeg%0ALWoJMXPnzq2DS+bEE0+sbr755vq53JPo3e9+dz3ZapZzlq/LNENOokHzuXzd%0Afr+sespznaJS7luU537wgx/0e/9O7zfUa8wKqDPOOKPjz+HCCy+sjx3uVr7B%0Afo5lcv4ElQceeKA+ds8996wOO+ywfseV7yurxaZPn16fL9eX17XfMz/jo446%0Aqj7XPvvsU82ePbvezleOyfuVn8Pyyy9fh6PmzyY/k/Z7f/3rX6/Pueuuu9a/%0ADhSB8mfY/J5zDaLR4t+mtcn0Q6u1Nt6u2miXA6vXz7qg3zEJPvuffnl19Kd/%0AWG25z9uqF2++S/2amR/7Rp/j1t5kx3pF0Yxzrhv0Pd928Y/rc+a44y69s9pu%0AxikDnrPEqM33OrI+/8a7zai3vrWPOeqC71a7HDmnfj7neumr9qpePXN2ff5y%0ATL63vG8mf69euM4GvV9ndj/2Q/3Omy1sOWfeO9ewqO9NOAIQjQBEIyZdNCpb%0A03KPn7JV7Nprr+0YaVZaaaX6+S233LIOTKusskrvtrLEg0SGTMJTjitfl8l7%0ANO9llHNkcmynVS0XX3xx/VziRvu5nXbaqX6fbEcr8aucL++V17Vvrj2Ua0wA%0A6RQ1Eory2m222WbYN+ke7OdYJs+fcMIJ9fsk4OT7za9TpkzpDWXlfLmeXHvO%0AkePy2kSh9sqerCTLirI8l/Pm67x3CUf58y8/hzyX92r+bNrfc/n7ku8j773B%0ABhvUXycOtb/nXHv5PnKe8vMXjRbPJADl55vtZNO2fm3vtrL8vr0qJxEmK4ie%0A/8I1qjU23LqOQ/k6AahEmxy33it3W+T7Hv7xb9XHJhatOHW9+jyJVks9e0qf%0Ac2ayYinvtdKaL61XBq02bdP6tQk47bCV1+f5XOuq6z4dfPO6suIpr8n1Z/Jc%0AVkWVrzN5XfOcm73u8Kf/+3/q2vLeOSbX0imsCUcAohGAaMSkjUbZmlZiQIJJ%0A/iGVFS3tUJL7BCV2JM60byg90q1fA0WjvG/ec9q0af3eM685/PDDO54vq2I6%0ARaOhXGPuh9TT4V5LJWR1WhnVzba5bn+OeY+Em/zZlKiT+JLHszKpnC8xJyGo%0AxLNMVkjluFxr8/zNVUXNLWJz5swZ8va0/Hxyfc0/g6xuymqnPF6+n1xXwlSu%0Asb3STDRaPJOVQ/nZZhVNblxdbmCdr/P49OM/0icaZbISqBz7mmOejoG5yXVZ%0AkZOvdzjktK6jUQJMAlVZDZT3zONZMVRCVMJOVg6V982Ua8z9k8pjWaHUXFVU%0AQlKOS3ga6va0rGYqYas8lvMnRk1Z9vm9IWq8hqMHHhaOANEIQDRCNBrFrWnN%0AlTzZtpWo0dzelK1rPQu3sC2OexoNFI0yWW2T57NKqDyW620/NtrRKJMVNM3V%0ATJlsq2o/1u0M5edYrwqZNq3f+zRD1lVXXVV/3f6Us8SkPL6o+1Pl59OzcIve%0AUKNR+XNph6irr766z/dY4lAed0+jJTNZVZOVOc1VPWXrWGJOc8VQ/gymrr9l%0An+MSafJ4uVdRtnbl605bvAaKRlmx1IxB5fFyzp3eemb99Zs+eE2f1+ceSXl8%0Aq/3e3lUY63RNi4pGiVmJQ83ryyRo5bX7zf7suI1G5950X/XYE/Of8f9d+8uj%0Af67+8D/3mQk0jzz+N/8PG6IRgGjEZItGZWva7bff3i/INLeoZTVJHuv2htWj%0AGY2yFau9qiiro7IVaqDzjVY0KmGjBJAEkqyiGe4nvQ3l59jTxSfKle+z3Muo%0AOdla1v6ZZqVStgXut99+9XOJYsONRnmu/Cyak2tpnrPEpfb3LBotvsm2sKya%0AGei5zGCBpR14SjTKCqRuo9Gibo6d9+xZuDUuvy+ToNPpmrI6KKuh8nyCVO5Z%0ANNxolK1oiUbN980knnUbxwSjwSUy3P3//s1MoHno0Qf9P2yIRgCiEZMtGiW+%0A5D4z+Qd8mRKSmlvUSmBZ1CeSLY5oVFb85Dqzgiari3o63DdncUSjcv+ivH++%0AnjdvXv2axJeRfKpcN6uUhhKNco+idrzJNG/knS1oOTbbxBJy8toEpJFEo/xs%0AOr1vJjcxb37P7ZuGi0aLb8q9iTo9l9gy1GhUVvW07zU0GtGoHW7KNANVYlFZ%0AvZR7NeXc5fXDjUa5v9JA750biAtGopERjRCNAEQjJnU0KlvTBprmFrUSkrqN%0AJaMdjUpgyDasrNbJKprBAtZoRaPm6qCsxsr9hRLaRrqyq5ufYzfRKOGsp8PW%0Ar/YkUuVn1r6R9Ui2pyVUdYpBA33PzZt3N1e0iUajP1kx83fPW7Hf49mOlfsI%0AtbenLSoa5X4/2e6W2NLe0jXcaJQAVcfpeV8b9LiyVW79HfYZte1pWYWVaDRe%0At6CN9WAkGolGIBoBiEZMgGhU/jGfbWiJB80pnxxWtqiV1T35WPX2R7kvKrSM%0ARjRKmMhKo2yrSszKr92swBksGnV7jfmI+7LyKr82V+8M55PTuv05dhONcu09%0AC7enDXa+cuPw9j2OSrjpFI1yP6WEo4HOW+7PtKifR7nvUvNm2/k5JGKJRotn%0Atj3o5I5BpdxHqH0j7EVFo+bKoHzqWDscNe+d1G00yn2DehberLubexc173HU%0AvKl3p2iUwNW+T1Nzcq6exo2+BSPRyIhGiEYAohGiUYetaQOtmilxI/GoPJbg%0A0LPw5sz59K6EhsSb5jFlEpt6Fn6cfTk20aV5X5vmVqYcWz52vrm1qVPkGSg0%0A5DXl9bmZd09r29ZwrrFMtnT1LPw0s06fFjeU6fbn2E00ypTAl+85YSarshKD%0A8j7NT2jLn3WuP+939tln18fnZ54Y1ykalaiYrXl5PtO8xoS88nPJzcGz6ikh%0AKa/L181PVMv3mq1s2Q6XP8fyqWui0eKZRJxsQctNrzfa5cDq1TNn1yt18nU+%0ArWxRq3I6hZ+cMx9xn8ez4ijnzbaxnC+RZqjRKLP2Jjv2fux9rjEBKK/LfYvy%0A6WpllVPuP5QVUvn0tnzi2QqrrV1/fwNFo3yveS7nz/kSiZrXc/Snf1gt94LV%0Aen8+uQF2Jlvf8rVgJBoZ0QjRCEA0YlJHo4SPrOxJPBjomKxeaa9MSZDYaaed%0A6tCSye+bH+venGwly3uUYxMfmp+0lecGmk4fZ58AkucSggbawjbYOYdzje1t%0AYM0YMpLp5ueY6+p2VVPOl2tPBMpKrESaXGtzFVW2h2WFU56fOnVqHcjy9yDB%0AqtPPO7En75+4VK6z/fch294Sk3JT8sSnnDfHt4/LdeS9c0xCU77XxLl8j82w%0AJRqN3iSMZDVOAkuiS4JPokt7lVDuE9T86PlMgk0ebweZfBR9jl1t2qZ1OMpk%0ARU9zFdBAr+00uZZcU+6zlO102TKW60w0aq5eOmjO1fX75PtILMpqpzyf99n3%0AtM/0O29CU7a/5Vy5xvwM2vdjys8n0SvnS5DKcdm21s19mwQj0Ug0AtEIQDRi%0Awq80MkNfHTTcG2CbsTcTPRqZiTtjPRiJRqIRiEYAohGi0aSZ8qlj3WwVM6KR%0AMZM9GIlGohGIRgCiEaLRhJ+yLSvBKNvHshXLz0U0Eo2MYCQaiUYgGgGIRohG%0Ak3yysig3fu50U24jGolGRjASjUQjEI0ARCNEI2NEI9HICEaikWgEohGAaIRo%0AZIxoJBoZwUg0MqIRohGAaIRoZIxoJBoZwUg0MqIRohGAaIRoZIwRjYxgJBoZ%0A0QjRCEA0QjQyxohGRjASjYxohGgEIBohGhljRCMjGIlGRjRCNAIQjRCNjDGi%0AkRGMRCMjGiEaASAaTeRo9NBDDxljluA89thjI/rv9lt3/6U667p7jRmVueDb%0A/zVhgpFoJBqBaAQgGgEAiEaiEYhGAKIRAIBoJBqBaAQgGgEAiEZGNEI0AhCN%0AAABEIyMaIRoBiEYAAKKREY0QjQBEIwBG2+NPLqgefuxJY0ZlHn18/oT670M0%0AEo1ANAIQjQAmdTS6/t/+u/rMrfcbM+L5/Pf+WN3/0OOikRGNEI0AEI0AhCNj%0AJm44Eo1EIxCNAEQjAOFIODLCkWgkGoFoBCAaASAcGeFINBKNQDQCEI0AEI6M%0AcCQaGdEI0QhANAJAODLCkWhkRCNEIwDRCADhyAhHopERjRCNAEQjAIQjIxyJ%0ARkY0QjQCEI0AEI6McCQaGdEI0QhANAJAODLCkWhkRCNEIwBEIwDhyAhHopER%0AjRCNABCNAIQjY8ZPOBKNRCMQjQBEIwCEIyMciUaiEYhGAKIRAMLRoufCb/62%0AOnHu56t9j5hVzxuPnV1/ncfbx86+8CvVsX//j0v8Gi++5b76mk79xJeEI9HI%0AiEaIRgCiEQDC0eKe93/uW9XKq69ZPfU/VdUyyy1f//5ZSy1dfz336h/2Oz7P%0Ar7/Zq5b4deZack2JWlYciUZGNEI0AhCNABCOFvPqnVXWeHG13PIvqFcQNZ/7%0A4BXf6bjSSDSamOFINBKNQDQCEI0AmADhKNvDtp1+QB1v8mu2bTWf//j1P6+2%0Af91B1RkXf62OPzu+/s31sbvu/9bqY1++s88qo4SY3Q86etD3e8c5l9bny0z5%0Au2Wr5VdapffrzGtnHNfn+Gwhe/1bTqq23Hmv3mvMOdrnzTa4THmPzXfco9pk%0Au92qI2ef1+eYvEfOlWtda9pGfd778NPmCUeikRGNEI0ARCMAJnc4ysqgEk/W%0Ae/kWdYwpW8ua4aasykksSuTJsYkx2Xb2onXXr8+T4xKQclweu+CmXw34vok4%0AiT+ZZz9nSr2NrXyd2fo1+/ZbjZRJBGpeY3uVUHl9rjPnzfGrr/2S+tiZp3yo%0APiZBK8fke8jjZaVTmRKdhCPRyIhGiEYAohEAz3g4uu6OZyYcHXLy2XU4aYaS%0ABKAEoTz+nk/93z7RKHPQ8Wf0HpvVP3msuRUtwabEmISaweJRt9vT/uGq7/a7%0A0XbCVAJWOxolZGXlUlY95bG8f6JUItFE3Z7WDkcPPPzMhyPRSDQC0QhANAJg%0AhLIyJP/QfyYCwzrrb1Lfg6jTzax7GtvMSmDJ9q3mcaec+4X68eb2rxKjEm7y%0AXMJOzpMtbsONRp0m15Lzt6NRVhhlC1378bzPZIhGWbmWECkaGdEI0QhANAJA%0AMBr2ZFVOeytY87mNt9ll0MCSew11ikZlNVDulTTtFVvXxyQitWNOt9Hok1+7%0Au17hVO5plClRalFxaDLcCHusBSPRSDQC0QhANAJgHAejTKfVQ2WyQmgk0ag5%0AR5/xyfq4cr6hRKN51/ykDkTZYrbzvjPra8jkBtai0dgMRqKRaASiEYBoBMA4%0ADkaZFVdZvY4vAwWVcjPskUaj5s2shxqN9jz0hD73V1rU9rTJGI3GWjASjUQj%0AEI0ARCMAxnEwymTlTsJJ7k3UfHzX/d9aP37WpTcNKRqVT1FrT7alZbtbbrDd%0Afi6fbpbQM9BrSxxq3gw758u9mEYSjconveXT2AQj0ciIRohGAKIRAIJRh61f%0AuXl0PvUsUShbyJqrjIYSjfJrIlDuk5QglRtg5z5EOX+2u5UI1ZycM+fIiqd8%0AGltWFuW17a1tuWl3PuUt15nz5dPTRhKNyvE5R2JWriPXO+OdcwQj0ciIRohG%0AAKIRAJM3GDXDUSJNWfGTkJJQ016Vk8fb29ASgfL4u+b9U+/XiUQJQGU7WmJP%0AQlDCU6f3zwqjhJrcMDvHJwYlDDWPyfN5vFzf2z9wUf2e7W1tiT4D3di70+QT%0A3RLHyvXmWvPJb4KRaGREI0QjANEIgEkdjIwtaaKREY0QjQBEIwAEIyMYiUZG%0ANEI0AhCNABCMjGAkGhnRCNEIQDQCQDAygpFoZEQjRCMARCMAwcgIRqKREY0Q%0AjQAQjQAEIyMYiUZGNEI0AkA0AhCMjBm/wUg0Eo1ANAIQjQAQjIxgJBqJRiAa%0AAYhGAAhGRjASjUQjEI0ARCMABCMjGIlGRjRCNAIQjQAQjIxgJBoZ0QjRCEA0%0AAmCEHnl8fnXTzx+sbvjZn40Z8Xzr7r9MmGAkGolGIBoBiEYAAKKRaASiEYBo%0ABAAgGolGIBoBiEYAAKKREY0QjQBEIwAA0ciIRohGAKIRAIBoZEQjRCMA0QiA%0A0TZ/wYLqf5+Yb8yozBPzF0yo/z5EI9EIRCMA0QhgUkejX/zxkeonv3vYmBHP%0AHb//a/XXx54UjYxohGgEgGgEIBwZM3HDkWgkGoFoBCAaAQhHwpERjkQj0QhE%0AIwDRCADhyAhHopFoBKIRgGgEgHBkhCPRyIhGiEYAohEAwpERjkQjIxohGgGI%0ARgAIR0Y4Eo2MaIRoBCAaASAcGeFINDKiEaIRgGgEgHBkhCPRyIhGiEYAohEA%0AwpERjkQjIxohGgEgGgEIR0Y4Eo2MaIRoBIBoBCAcGTN+wpFoJBqBaAQgGgEg%0AHBnhSDQSjUA0AhCNABCO/v/58AWfr/5+3gW989GLrqy++dN7RR3hSDQSjUA0%0AAhCNAJjM4WjqGmtVT/1PUp95zpTnVu89+1xRZ5KHI9FINALRCEA0AmASh6NE%0Aoy233aH368v/5dvVmuusWy219NLVV7//H6LOJA5HopFoBKIRgGgEwDgKR9//%0A5QPVu+d8pNpx19fWsWfvN765+vRV1/c55ppv3l4//pXb7qou+eKN1Wtet299%0A7JuPeHu/rWftaJTJ+bPiKFvXmo/f+u/3V+847e+rV+20W/2aw455Z/0e7Wv8%0A0a8frD5w7kXVztP3qo/LvOHgmX2OLdeY62u+Nl/n8Tyfr8/40CfryeNbb79z%0AdfhxJ9ePv/2U0+uvs51uONcoHIlGohGIRgCiEQATJhwliGy8+SvrVUCJRokr%0AZXvZKWf+Q+9xiUh5bPreB/Qem8lj7UDUKRolyOTYZtDJe7/kZRtWz3v+8tUB%0AhxxRB6iVXrhqtcyyy1ZX3nBrn9c33zfXmNnwFZtXn7325n7XmPsoNV+br/N4%0ACWF5beJT3iu/5rmEo6yGyvWs8IKVhnWNwpFoJBqBaAQgGgGwRMLR3ff/bbEH%0AhUSQRJNPfu6aPqFks1duW0easqKmBJk81lwtlACTx2+6/Z6O0SirmLJyJyEm%0A8SUrhprvnXsdfeHr3+99LOdJoMmKn/JYtrTlPXL8YN/LUKJRvo+TZ3+gvr48%0AlwiU7zUrkPJ12UbX7TWOh3D0t/+dLxoZ0QjRCEA0AmDc/z/Pjz1Z/0N/cceE%0AxJxO8eMf/+m6PquNSpDJNq3BgkynG2EnumSlUDMsJR4l1GTlUPu9y6qiBJ18%0Ane1vOU9WRDXPMZJolOhTzp/nsoqoeWwC0lCucaxPVq4lRIpGRjRCNAIQjQAQ%0AjLqanoVbs9qPJ840Y0q3QaZEo5e9/BX16qXc/yfPH/WO/9PndYkyeTyrj8p2%0AszLZJlbCTTn+bSe9pzdAJeJkRVBWRA03GuUamz+DnL8djYZ6jYKRaCQagWgE%0AIBoBMCGCUQkm7aDTjEZvessxw4pGzXsaJTzlmHyKWjsaJS61g0yZ9g22cw+h%0AbBdbdfUX1a/NKqnh3tNoKNFoKNcoGIlGohGIRgCiEQDjPhhlys2lB9rqlU89%0AG2k0SnzJ++Sm0837JuV1+RS24Vx37quUVUe599KiolHuXTScaDTSaxSMRCPR%0ACEQjANGIxWbBU//P/hNPPGGMWYIzf/4zc7PgZyIYZfIx8gk6zRs9514+uc9R%0Aoky5h9BIolHzhtnNTxwr73HNN28f1rVnxVG2jjVXIvW0ttvl09pyX6LhRKPR%0AuEbBSDQSjUA0AhCNWCzyD9gHH3zQGLME59FHH500waiElkSVTLaRZatatmMl%0AnLz37HOHvPVroGhUgk5ztVG2q5X3fsPBM+twk8lNpkvEyWQLWlYUZatcHs81%0A5uucL/c2ar5P7jWUCJZj8/0k+GSl0HCjUbfXOJbm1w88OiaDkWgkGoFoBCAa%0AIRoZIxqNk2DU3D6WILLOei+tY0oiS1botKNPQlBubt18PF/n8eYKogSV3Huo%0A/T55LMc27wP05VvuqONOVgzlvfNrwlK2nzWPyWOJWTkm15lrbF9L89gcl09b%0Ay3nKtZdrzCfA5RrLa/JciWHl+2l+Sls31zhW5jd/erRaMIb/d000Eo1ANAIQ%0AjRCNjBGNxkkwMhNnxnowEo1EIxCNAEQjRCNjRCPByAhGopFoBKIRgGiEaGSM%0AaCQYGcFINBKNQDQCEI0QjYwRjQQjIxiJRkY0QjQCEI0QjYwRjQQjIxiJRkY0%0AQjQCEI0QjYwRjRZTNBKMzGQPRqKRaASiEYBohGhkjGgkGBnBSDQSjUA0AhCN%0AEI2MEY0EIyMYiUaiEYhGAKIRopExopFgZAQj0ciIRohGAKIRopExopFgZAQj%0A0ciIRohGAKIRopExotEoRCPByAhGopFoBKIRgGiEaGSMaNTH408uqH71wKPV%0AL//4iDEjnt//+bEJE4xEI9EIRCMA0QjRyBjb0wDRSDQC0QhANEI0MkY0AkQj%0A0QhEIwDRCNHIGNEIEI2MaIRoBCAaIRoZIxoBopERjRCNAEQjRCNjRCPRCEQj%0AIxohGgGIRohGxhjRCEQjIxohGgGIRohGxhjRCEQjIxohGgGIRohGxhjRCEQj%0AIxohGgEgGolGxhjRCEQjIxohGgEgGolGxhjRCEQjIxohGgEgGolGxhjRCEQj%0AIxohGgEgGiEaPVjdfffd1axZs6qbb7551M558cUXV3PmzKkeeOABgWSMzi23%0A3FK9+93vru644w7RCEQjIxohGgEgGjFWo9EPfvCD+h/wmfvuu2/E50sAOvHE%0AE7s69vDDD6+e+mtdTZs2bdQiVM6XSTwajWsc63PXXXdVZ5xxRv3nOFrnvPzy%0Ay6u5c+cutms+//zz6z+j6667TjQC0ciIRohGAIhGjNVodOyxx/aGlgsvvHDE%0A55sxY0Z9rm5XBU2ZMqVebTQa38v9999fbbnlltXUqVMHXcUylGsc67M4Asxa%0Aa61Vbb/99qIRIBoZ0QjRCEA0YjJHowSWnXbaqY43e+655xKNRs/UiEaiESAa%0AGdEI0QhANEI0GmRuuOGG3hVGu+66ax2OBtqidvvtt1cnnHBCHRMy++yzT3X1%0A1Vf3bnFLiMmsu+669TnL12Xuueee3nNlO1XzuXzdKSzkubxvp+1Tee62227r%0A9/6d3m+o15ita9k61+m+SLnWww47rF7VNNRtgHmP/Jo58MAD6215+TnmHj/N%0AY/O+Z599dv1nkoCTX+fNm9fneso1b7PNNvX3kmOa30v+bJtb2LL9cPr06dUG%0AG2xQbbzxxr3X0v6ZZpZddtlqlVVW6XO+/Nm3v6fy9ybXmHPnz6zT954/p6xo%0AK393yjWLRiAaGdEI0QgA0YgxGo3yD/mll166jiXnnXde/Q/5yy67rGOkSVBa%0Afvnlq/3226+OCPnHf+JJubFxCQKJDTlP+bpM7jfUKRqVY9vvedVVV9XPdbr3%0A0GabbVattNJKveGmGYQSRPK69va0oVxj3jPP5xqa50hQy88hgWSoP+sEkpxz%0A9uzZdZRJOEmYKoGmxLqEoTyXP5es/Mq1ZMtdXpuffTlfueaEpzyX77v5vZSg%0AVwJcfl4JVDlfCUOZ8nPKMeW15c+6eb7me2cSkco1JUglHnX688rfp3wvCXVH%0AHXVU/d6JTKIRiEZGNEI0AkA0YgxHo7I1Lb9POMo/5LMCpnnMvffeWweE/EM/%0AK1ba9xAa6davgaJR4kmuL9NesZPXdFr5kknA6BSNhnKNeW2eT2RpPj5YWOs2%0AGmXy6W7l8awgymMJc/k6K4zydXvVTrnmdsjqZqtX/gzbq6ZKlOu0ymtR29PK%0ACrX8rDtdY1kdlr9TCVP5O9Z8/2d6e1p+HnfeeacxvfPHP/7R/yCJRkY0QjQC%0AEI0Qjdr/8G9+SlZWuOQf+c0YlOeHEkpGKxo1A9C1117b+1hZBTTQp4WNRjTK%0AZOVMWYVVHkv8aK5wGk40yuqu5uNf//rX60hTfr5ZMZRVOZ0+JS2vz2qd0bg/%0AUAlj7fDTTTQqn3rX3sqYP6fm36kSxJpb5dzTCEQjIxohGgEgGjHGo1H51LTm%0A6qGyyqWseslkC1oea98jaElEoxJKyuqnsvoo27UGOt9oRaNEnByTn0nzWtrR%0AZ6jRaKD7/pRJqGpvBSuTFV9lZdhQA0zuP5TtbtnalyiUn+Nwo1Gey3W2t/fl%0A3M1zlr9j7b87ohGIRkY0QjQCQDRiDEejRIOsmsk/8MuUQNTcolYCyzMRjcqK%0An3KD7rKSZbDwMlrRKIEq9xrKjaPzdbaU5TXtm1aPdjTqad27qDlZBZafx1AD%0ATFYn9SzcbpdVQHlN+X6GG41yLc2/O80p11J+zu0VSaIRiEZGNEI0AkA0YoxG%0Ao7I1baBpblHLjZt7WlvElmQ0Kit+EhoSs7LaZrDtYaMVjZpb4RKKsm0sK2mG%0A+zPvNhrlxtaZgbaTtW80vagAk/v3ZFVQOzaNZHta/hzy2px7sO+l/N0pn3LX%0Avom2aASikRGNEI0AEI0YY9GobBvq9HH2JbqULWr5B3++TjBpR4JO8aasarn5%0A5ptHJRqVFT+JHolZuZ/OYOfrJhp1e40lrGRbV0/r/k+LKxqVoJLtZO1Qk/jT%0AXulUolrz5trNySfC9bRu6p0/t3Jfok7RKKurmp/o1p6LL764fu2i/izKyrBZ%0As2b1eW2+D9EIRCMjGiEaASAaMQajUbamZeVMp+cSJfIP+mxVa4eYrPLJ1qms%0A1Ml9hfJrp9cnCjSPzX14mvdOat4Hp5y3fN0pqpSQMlDoaX5cfPk491xfeWw4%0A19jcHpfzZYtct1v0RhKN8h5ZaZTrmz59eh1m8mfVM8AnnSXs5M+zHJ/vJZGr%0AeV+qcq+hfK8JhglCeY+yPbF9znJvq/wsc75yzuYxea8ck2vLn0/CUM7f/nuV%0AP4dcW15fbi5eViCJRiAaGdEI0QgA0YgxFI0SRhIBsuJjsJU47Y+0zz/wE5JK%0A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%0AxozKzP/ve0QjIxohGgEgGgFMFI//7OrqkS+/3ZiRz3Un1PFINDKiEaIRAKIR%0AgHBkTL954lffFI2MaIRoBIBoBCAcGTMxw5FoJBqBaAQgGgEgHBnhSDQSjUA0%0AAhCNABCOjHAkGolGIBoBiEYACEdGOBKNjGiEaAQgGgEgHBnhSDQyohGiEYBo%0ABIBwZIQj0ciIRohGAKIRAMKREY5EIyMaIRoBiEYACEdGOBKNjGiEaAQgGgEg%0AHBnhSDQyohGiEQCiEYBwZIQj0ciIRohGAIhGAMKRMeMnHIlGohGIRgCiEQCT%0AIBydf8LO1aG7rt87b9tz4+rjx+1U/f7zRyyxa/jyma+vXr/NumLROAlHopFo%0ABKIRgGgEwCQIRwlFT/1PT7Xjxi+qZ73Vl6+/fu5zlqqD0pK8BqFofIQj0Ug0%0AAtEIQDQCYBKEo07B5t/+8ZDqZWusWD/+1Q/sKxoJR6KRaASiEYBoBMB4CEc/%0A+vjB9Xau5ZedUi291LOqV6y7cr2lrL3lKyuHfnPZ4dWsAzavVl1xmfrYXTZZ%0As35sUcEm4SjH77b5Wn0e/868N9aPZSXScs99dv37PNZ+/b9fdFh18E4vq1Z6%0A/nPr8+daN1z7Bb3v/b2PHdS7uinX1lztVKZ5ncfvvUk9/++fj65/zfny/m/Z%0AfcP6seZ7//N7X1e9asPVe68x52rGr/w+j1144q79rjvfS5675OTdhCPRSDQC%0A0QhANAJg/ISjRI2EkLVXeV519lu3qz56zI51IEl0efdBW/YelyCSx/Lci1Ze%0Arj428aiEo25W+Wz+klXq8NJ+761etmq9dS2hKiEo52yGo0ScvGe5xlxLrjP3%0ASyohKFHpvQdvVU+iV66hfF3mD/90ZO85E3JyPZmsgpp71PZ1lMrr8n2V43JN%0A5fvO7+fM3La+jlxjQlqO+fPVb6ujU87T/p6P3GOj+vWJZlYciUaiEYhGAKIR%0AAIvNY7d+bFTDQaJJVu80V+H8zzXH1pEkYeSXl8zsE40SRprHvmG79erHE04W%0AFY3Kcwk8+TpxJ/c8Kq/N5IbZCUnNG1lnJU9e1+09kbrZnpZoVGJQc2VRglDC%0AVbmWRK4cm59JOSbffzsSJWDlfN+ae0Cfn2N+tnmPsbpVbf6ffiEaGdEI0QhA%0ANAJgvMvKkNEMBglCCR0JHu3nPnvK7vVz+bUZjb50+l59jssKnmYI6jYaZeVN%0AezVTM+gkypSvf3L+jPrYRKZmlBlpNMp7tLeiZavaG3eYVv8+W8o6fc/NFUQl%0AoGWLX77O481tbXms07a1sTBZuTYWiEaiEYhGAKIRAGMoGDVX8Ax0L56ehVu8%0AmtGofSProUSjxJg8lxU85b2zEiere5qT1T3tc2RrWHk8xyTuDLTlq9tolPMM%0Adkz7e2tOtsm1fx7ZZpdVUmXlVL7ffN0OU4KRaCQagWgEIBoBMGaDUTMatW96%0AnbnpnP3q53Kvn9GKRok0uTdR871zfM7dadqvzz2JskUt91DK1rlEpK/M2Wex%0AR6OsdBroudyAu33fp/yaUJTry7UIRqKRaASiEYBoBMC4CUblnj0l3Ay0kibx%0AaDSiUdnuduIbNuuzNa65nWsok1iT1+/xynUWWzS64t2vHXAlVt63uaqoeUPs%0ARK3y8yo/P8FINBKNQDQCEI0AGBfBqExZtdOMQdn2lY+tzz2E2qtohhqNsjoo%0AAap8QlvzE8yynSurcdrnLDeRbn56Wvv53Eso150bcbefS5jqGeBeREOJRnnf%0ARKAcV24IXu5VlPfOFrn2a3J/qDyXG4znJt+CkWgkGoFoBCAaATDuglEJRNky%0AlsiSiJNP+krIyWPNbVlDjUYJLQku+X0mcap9b6CcP3EqzyeyJACVmFPupVTe%0AO+fK9eX5XGMiVO6H1Nwe1vye8nw5b16T76f5/t1EoxKI8vMon6KW8+W8+X2n%0AmFXuBZWZM3NbwUg0Eo1ANAIQjQAYf8GouRroo8fsWAefTH7fXBFUtoMl5LTD%0ATyJSHi/HJ7Lk6zIJPgPdsLrTe2e7WlYmNYNVXp8AU455y+4bdrzG9kqknKcc%0An9c3I0+uq9yvqZuwlu+lXF+22jVXQrUnMSuRqXyymmAkGolGIBoBiEYAjLtg%0AZEZ3yr2bOm1dE4xEI9EIRCMA0QgAwWgSTW4onhVYl5y8W70tLvcyGmwVlGAk%0AGolGIBoBiEYACEaTYMp9nHoW3kOpvYVPMBKNRCMQjQBEIwAEo0k4N52zX73K%0AKDfBtiVNNDKiEaIRgGgEgGBkxtyMt2AkGolGIBoBiEYACEZGMBKNRCMQjQBE%0AIwAEIyMYiUaiEYhGAKIRAIKREYxEIyMaIRoBiEYACEZGMBKNjGiEaAQgGgEg%0AGBnBSDQyohGiEYBoBIBgZAQj0ciIRohGAKIRAIvdgsceqp64+yvGjM7c+68T%0A6r8P0Ug0AtEIQDQCABCNRCMQjQBEIwAA0Ug0AtEIQDQCABCNjGiEaAQgGgEA%0AiEZGNEI0AhCNAABEIyMaIRoBiEYAAKKREY0QjQBEIwAWq4cefbK64Wd/NmZU%0A5se/fVg0MqIRohEAohHARPGtu/9SvfPKe4wZlcnfJ9HIiEaIRgCIRgDCkTET%0ANhyJRqIRiEYAohEAwpERjkQj0QhEIwDRCADhyAhHYysanXrmrGr663evbv3Z%0ANydUpDn/s+dV+71pn+p7/3HLkF97xXWX1a9tjmiEaAQgGgEgHBnhaNxFo4SR%0AhI1Z7ztpwGPe+/5T62Pu/P2P+jz+1P9bVE/i0eIOOTfc+uX6Go5+xxF9Hv/5%0Af/20euMh+w878nSaE045rv6+br79a0N+7cVXXVBttd0r61l5lZXr84hGiEYA%0AohEAwpERjsZdNMqs/eK1qilTplQ/+c33+z2XULTMsstUW2y9eb/nZh5zaP34%0AcOLKUOdz11zSG6lu/P5Xeh//x8s/2fv4F2+88hmPRs1JyBKNEI0ARCMAhCMj%0AHI3baHTcycfUcSPbsjpt1cpzp5/znmd0y9h5l8yrryOBK1GnPJ7tcXkszyUs%0AiUYgGgGIRgAIR0Y4GqVodO3NX6jjxt4H7NXvuTy21NJL9W79+vZPb6petObU%0APnPVDZd3PG+2jmVrW4k62a6V1UllRVPuhZTXnzX39I6vzyqnPJ+tc+d8/P31%0AOY447i31+crWuqyQStBqR6MEnwSl5y//vN7YdOJpJ9TX1H6fD3z0rGrTLV7R%0A53vqFI2yqinH5eeR1Vc5f3PVk2iEaASAaAQgHBnhaEJFo7JFLSGked+iBJYV%0AX7Bi9aodt+l97Ie/vK1eiZN5zR67DLrC5+CZB9aBJfchyoqlrGhK5Mn9fkq8%0AydeHHHFwx9cnyOT8iUolGiVQ5dfccDpBarWpq/Yel2PK6xKoMglOef3Ou7+6%0AYxgrYSePJx4lLK077cX9otFHL5xbP5ZQlO+lvHfeIyFNNEI0AkA0AhCOjHA0%0AIaNR2aJ26Rcv6n0sv89jiSmdXlNCTqdoVFYvJcK0b6rd09gKN239l9RBpzyf%0A4//llmv63Mco11G2jOXxRJ1yP6UEqcSdZjRKzEqMaq8C2vMNe9TH5dqa529u%0Ad+u0PS0hLXGoGc+a32NWP4lGiEYAiEYAwpERjiZkNCoBJJ9EVh7L75tb04YS%0AjRJz8lx7FU5ZFVRCSwJPwlH5uPo8Vz6mvpw/50jISbgpYSkroPJcAlOJRtmm%0AlsCTa04gal9TWaVUPikuK5zydfsG4O1olE9Ey9cfPv+cfufMaqNsWRONEI0A%0AEI0AhCMjHE3IaFS2qCXGlK1jnVbXdBuNSjBp3/8okaUZhhKPct+hEpqyQqhs%0Ak0u8ydflk9ry+nJfpZxjo01f3vt+ZcVQCUjt1UPlPkd5Ltvm8nW2yeV6FnUj%0A7PJ95ufR/n4SqMp1iUaIRgCIRgDCkRGOJmQ0KlvUsuKnrPoZaGtat9Eox3Sa%0AL954ZX1c7jeU43KvpHKz6p6F29ey0qmsQsr5mnEmq4qaW+na0Sjfy0DRKHFq%0AONEor+v0veQG2aIRohEAohGAcDSmZvrxH6nWe+Vu1UprvrRabdqm1Yav3r/a%0A97TPjJnrO/zj36qvae9TPy0cjYNoVLaoZVVPZrCtaYuKRiW8lDg00JT7JuVc%0A5f0Sc7JtbYddtq9/7RSN2lNWEGWVVFYndVohVW5mnV+bUae5PS2vz/s3o1G5%0A99GpZ84a0s9TNEI0AhCNABCOlvgcd+md1Vobb1f/g/T5L1yjeumr9qqmbf3a%0A+vdrbLj1mLnO/U9/+h4yux/7ISuOxkE0KlvUyjRvUD3UaJR7DeW53Kw6q4ja%0Az5ctcGWr2QYbrd8berK6KeEnkaisCspzOWawaFS2vJVYU+JQeZ98T1lZVD4h%0ArkSkcrPuPJ5PR0u8akajXGv5NLZyk+5O34tohGgEgGgEIBw947PRLgfW/xjd%0A5oB3VCdcfnef5w6b9zXRaBKHo5FGo7JFrWeAGz+fd8m83vv5lJtRN+/10+mT%0A0nKPoqzeyeSm0fm6+XH2+bqnsRUuq41KuCmPldcPdN15770P2Kv+/a0/+2b9%0ACWt5fba35XV5j9w7KdvumrEnISrH5boSlHKeskWueY15Xc6R68qx5XryMyif%0A2lbu0VR+FuX7Kl93ujm3aIRoBCAaATDJw9HMj32jXgm01LOnPP2P6BVeWG2+%0A15HV8Z+7q/eYg+ZcXa8UetMHr6lj0JRln18fu+LU9ernmlu+nrXUUl2tKNrz%0ApE/U5zzi/O9Uuxw5p1ruBav1nvONZ17Z59ijP/3DeivZs5/79D90c+y2B53c%0AL0rt9NYzq1XX3bj3uPya7+2oC77be8zU9bes3zffZ475u+etWH9d5tUzZ/c5%0A54xzrqtXTuX7yvEvXGeD+tqFoyUfjfLpZtlalml/qljZwlae7zSdjk+Iyqqb%0ATKJKYlRZ7VPiUl7b3AqXex2VexSVVU3NONOenKP5fM6f4JT7IuV984lpiUnt%0A12UVVLm+xKJ8nffMe7dXSOX12aJWvpd8+lrurdQ8b+7FNNDPZrDrF40QjQBE%0AIwAmYThKMEpYSYTZ4ZDT6lU32U6WOJL7EbVX5SToJLbk2MSVvDahpRyX+JPj%0A9njnuYt877xXvdpi69fW50mMyjkTcfIeJQglXuW+SHks599v9merTaYfWr82%0AvzbPmXMlLuW4nH/Lfd5Wx56EpHJM3iPvlePK95mvy+R7ba6MyrXl9QlFuf9R%0A2XonHC35aGTG3ohGiEYAohEAz4CL/vUPiz0mJJhkhVFWCHXaYlZWEZVolHDT%0A3GKWyJLHD5l7ff11iTndbEMr0SiRqHl8VhDl8axqKpEnX7dXH62/wz51EGqu%0AIuo0G+82o359VjQNdXtafj65vrdd/OPexxKzEsoSssbTVrX7HnxMNDKiEaIR%0AgGgEwHi3pFYaJRhldU778QSbBJUEnGZgec0xZ3cMP2V1Tlm9045Qg0Wj9qqk%0AxKGcp4SkfPJaVkIN9PrXz7pg0PcpYat9TYuKRrmhd6JU4lT7ufJ9NmOSlUai%0AkWgEohGAaATAhAhGmZ6FN6xuP54YkucSRwYLLO1oVFb15D5A3Uaj5nawTpNV%0APYlbzfsOZbICqH1NiV1rb7Jj7z2NmjPUaJTj83zu39R+73L+buKYYCQaiUYg%0AGgGIRgCMq2BUolFuej1QMCnPdRuNcq+jni4/kWwo0Sj3UspxnaZsTyv3Z8qx%0Aud9QeX6g1U/dRqPc42mg927eLFwwEo1EIxCNAEQjACZEMMoksmT7V/vxbBnr%0AaWwd6zYa5d5G+To3jm5/stlwo1FuPJ3rXFSg2W7GKfX59j3tM6OyPS3XnxVO%0Aef/xdO+isRqMRCPRCEQjANEIgHESjJrbyZr3KsoNo1dYbe36PkIl1HQbjTLl%0A09fya/Pm0/l9Pn1sqNGoHJdrbYej3Heo/L6scpp+/Ef6xK+BtpKVwJXtbAMF%0ArrJKqVNYar63YCQaiUYgGgGIRgBMmGBU7l30wnU2qMNIQlFWHWV1Te4X1Py0%0AsqFEo8SUhJiehfcSSnzKp67l92tsuPWQo1H5pLSehfcXyjkyud5sXWtuJ0sg%0Ays2rp66/Zf18vpfySXCd7j9UAlc5b661eY+noz/9w96fT94rx+Tc+X7K/Z4E%0AI9FINALRCEA0AmBCBaPmNqysyNlk+qF1YNnprWf2+1SwBJfElPYNrvN1Hu8U%0AZA6ac3X96WuJK7k3UiJRuf/Qol7baRKxttrv7fX5suoo29H2m/3ZjteZY/Le%0Auc9ReazTJ53le8+nr+X5XGNe0/4ec0zukbTZ6w6vz5tfXz1zdr1SSTASjUQj%0A0QjRCEA0AmBCBiMzcWasB6OxFo1+/l8/rT58/jnVa/bYpdpgo/WrjTZ9ef37%0As+aeLgaJRohGAKIRAIKREYwmYzRKMNpqu1fW2w433eIV1X5v2qeeLbbevNp5%0A91eLQaIRohGAaASAYGQEo8kYjT7w0bPqYPTe958q/IhGiEYAohEAgpERjESj%0Ap+eNhzz9qXg33Prlro7/yW++X51wynHVtPVfUr9uxResWK9UuvH7X+lz3KVf%0AvKherbTU0kvVx2XL20cvnNvnmISqnOeHv7ytvo5lll2mPj4rnG792Tf7rYg6%0A8bQTqhetOfXpm7Ev/7z6NXmtaIRoBIBoBCAYGTMhgtFYika5b1EiTO5htKgA%0Ak2CUex7l+D3fsEe9SunUM2fVkeeK6y7rPS5xqGfhdrec//Rz3tMbmfKaclzi%0AUzkuMSjnOuK4t9Th6FU7btMvbuXx404+pg5SCUiJTIlRCUqiEaIRAKIRgGBk%0AzLgPRmMpGiW47LDL9nW8WXmVlauj33FEdfPtX+t4bIk8zfDTnjt//6P6PIlE%0AzZiT4LT2i9eqVwjlmOb5siIpz5djD555YP14Wb101Q2X118nKnUKXud/9jzR%0ACNEIANEIQDAyZvwHo7EUjcqc8/H3964iyoqe6a/fvd8WsawGSvgZ7DxZBZRz%0AdPrktVnvO6l+LhGoGY3+5ZZr+hyXCJTHy3a2hKx8/e2f3tTnuMStPJ7VSaIR%0AohEAohGAYGTMuA9GYzEalUnQyVa1xJh1p724z5a1PLb3AXstMj7luM9dc8mA%0Az5UYVKJRe2VTXpvHc3y+zqe55etEq+asNnXV+vE8LxohGgEgGgEIRsaM+2A0%0AlqNReytac8VQvs4KpG6i0cVXXTDgJ7VlNdJg0aisVvrw+ef0iUY5d6f54o1X%0AikaIRgCIRgCCkRGM/jIh/rsY69GohJtsKSuPZWta7lc02I2ny/2HcqPqgT6p%0ArWx7Gyga5bU9jW1r5bixEodEI0QjANEIAMHICEYTPholxDRvQp353n/cUn8i%0AWjvUlHiT+FNuZp1JBCohKEGp3PC6ea+ibDmbMmVKn5VK5XzlhteZa2/+Qv3a%0ArbZ7Ze9jOU/us5RPWWt/wlvez6enIRoBIBoBjDMPPfpkdcPP/mzMqMyPf/vw%0AhPrvY6xEo8SZhJvcH6jcK6hn4c2w3/v+U/sFmj3fsEf9fD7uPhEn9z3qad3D%0AKKuNEn5K6Nlo05fXx+RG2wlS7WiUc+UT1HJcXpNPXmvfhDvXkucSnnJsrjvn%0Ay9cDfdqbaIRoBIBoBACIRiO48XU+yn7mMYfW9w7Kx90n0AwWYq647rJ6C1mO%0AP+7kY6rzLpnXZ+VRWX2U85Zz5ubX7RVBJRrl09HyCWg5Vz45baCVQ1lxVN53%0AsPcWjRCNABCNAADRaBzPQPc0Gq8jGiEaAYhGAACikWgkGiEaAYhGAACikWgk%0AGiEaAYhGAACi0RKZxKLcQHus3JNINEI0AhCNAFhCHnl8fvWT3/3VmFGZXz/w%0AqGhkRCNEIwBEI4CJ4q7/+lv1mVvvN2ZUJn+fRCMjGiEaASAaAQhHxkzYcCQa%0AiUYgGgGIRgAIR0Y4Eo1EIxCNAEQjAIQjIxyJRqIRiEYAohEAwpERjkQjIxoh%0AGgGIRgAIR0Y4Eo2MaIRoBCAaASAcGeFINDKiEaIRgGgEgHBkhCPRyIhGiEYA%0AohEAwpERjkQjIxohGgGIRgAIR0Y4Eo2MaIRoBIBoBCAcGeFINDKiEaIRAKIR%0AgHBkzPgJR6KRaASiEYBoBIBwZIQj0Ug0AtEIQDQCQDha9LznU/+32nb6AdXq%0Aa7+kWnn1Nat11t+k/vqTX7u737H7HjGr2nnfmUv8GnMt27/uoGrmKR8SjkQj%0AIxohGgGIRgAIR4t7Djn57Oqp/5mqY1GizK77v7Xa+jX7VmtN26iae/UP+x2f%0A49bf7FVL/DpzLbnORCsrjkQjIxohGgGIRgAIR4PMBTf9akTH5rFnP2dKtd7L%0At6guvuW+rs4z1GjUabXSQJNruPCbv53w0WgshiPRSDQC0QhANAJgnIejxJMt%0Ad96rjj2JKFP+btl6hdDHr/957zHzrvlJHXfecc6l1UHHn1Ett/wL6mOXX2mV%0A+rFy3Ps/96368dfOOG7Q95zxzjn1+TLPWmrp+r3L15lpr9i6z/E5X7a65dyZ%0AHJ/VSx/78p19jstj5fF8Tzl3jt9ku916I1eez3usuMrq9XPLLLd8n/de1LUL%0AR6KRaASiEYBoBMCED0cJQwk/iUCJQW//wEXV7gcdXceWbCcrq4XKqpyEm0SW%0ANx47u74XUF6bgFNW/yTM5PmEp1PO/cKA73vqJ75Ur/DJlGhTvs4kKjWP3/CV%0AO9bXdeTs8+pIlS1vuZ6Nt9mlz3FZsfSiddevrzOrnQ4/bV79uhybX3NMzpH3%0AKI/nNc33bkYw4Ug0MqIRohGAaATAM+ob//7gMxIYSjg54+Kv9Xk8USiPH33G%0AJ/tEo8SgD17xnd7jEmDy+IlzP9/7WMJTWbWUqJOvB9uqNtx7Gm2+4x71e7Sj%0AUR7LKqPme66yxv/X3v2AbVrPeR+fY2vVI4TaIlt6oo1s2v6giI1kViHShsoQ%0AkRChCK0wiM1GWUmqLcwqWuYRZUVon1pmtTYaTE01aWhqmplq/jV/z2c+5zG/%0A+znvc67r/j8z95/Xa4/v0dzXdV7Xdd63mWl7H7/zd/7vOiaN58vTmrNgySrR%0AyIhGiEYAohEAY93mXGlU7mzWad+gBJVcptYMLC9/43s2WDGUxxOPmo9/5or/%0ArO+IlsiU53MpWOLRSEajnFunaJRVU+19jBLB2pedjddoZKWREY0QjQAQjQAE%0Ao2FPMwy1J5eNlZjTLbB0i0bN+JRLzcoeSCd9/MtDika5ZCxxq+xR1Jx2NMr7%0ATbS7p9nTyIhGiEYAiEYAgtGITiJMLuXqFpTKc0ONRs2NtHPJWqdVTf1Fow99%0A6f/Un5HNsd93zjfqcymbd4tG7p5mRCNEIwBEIwDBaCNMNrvOpWPtPYdKqMll%0AXSMRjTL5nOwtNNholMvc8hnNvZQyB04+SjQapcFINBKNQDQCEI0AGMPBKJNL%0Axyatv7NYCUe5o1pWBOXytHJL+4FGo+xl9LFLf9TrmOwv1Pyc9jnkLmdZhfSJ%0Ar/2012vKr8ud0srd2HKeudNbuVRtqNEod3rLe2SD7HL3t/ZnC0aikRGNEI0A%0ARCMAJlwwKgHmOS9+ZR1fsu9QCTgJRrkUrL9VOe1oVO6mlkm8yZS4kzupJdS0%0AzyF3XssxmfKa5oqkxKRsqJ3zyiVqOc/MC15+7LCiUebw15/cc1e4vC6robrt%0A8SQYiUaikWiEaAQgGgEwIYJRc7KKJwEll4Id996zelYYNVflJAi1VxHluDye%0AFUZllVLuknbkW0+vVxVllVBWBZ1x4ff7vVQsq5ESpTLZ+Lp9N7a8Zzm/rAzK%0AY+3L4hK6ut2lrdvk3HIZXj43/+zvXAUj0Ug0AtEIQDQCYEIEI2MPI9HIiEaI%0ARgCiEQCCkRGMRCMjGiEaAYhGAAhGRjASjYxohGgEIBoBIBgZwUg0MqIRohEA%0AohGAYGQEI9HIiEaIRgCIRgCCkRGMRCMjGiEaASAaAQhGRjBaOmb/LIhGohGI%0ARgCiEQCCkRGMRCPRCEQjANEIAMHICEaikWgEohGAaASAYGQEI9HIiEaIRgCi%0AEQCCkRGMRCMjGiEaAYhGAAzDspVrql/9YYkxIzJ3zF8+rv58iEaiEYhGAKIR%0AAIBoJBqBaAQgGgEAiEaiEYhGAKIRAIBoZEQjRCMA0QgAQDQyohGiEYBoBAAg%0AGhnRCNEIQDQCYCStXL22uufBFcaMyCxauko0MqIRohEAohHAeHHfQyurX/1h%0AsTEjMvn9JBoZ0QjRCADRCEA4MmbchiPRSDQC0QhANAJAODLCkWgkGoFoBCAa%0AASAcGeFINBKNQDQCEI0AEI6McCQaGdEI0QhANAJAODLCkWhkRCNEIwDRCADh%0AyAhHopERjRCNAEQjAIQjIxyJRkY0QjQCEI0AEI6McCQaGdEI0QhANAJAODLC%0AkWhkRCNEIwBEIwDhyAhHopERjRCNABCNAIQjY8ZOOBKNRCMQjQBEIwCEIyMc%0AiUaiEYhGAKIRAMLR/5/Jrziq2v/A5/fM4Ue+tvrkuRdVv7xjkagzwcORaCQa%0AgWgEIBoBMIHD0U5/uUu13V/sWL3i74+tg9HOu+5WrftXVPXCyS8TdCZ4OBKN%0ARCMQjQBEIwDGYDi64Xfzqu/fOHNAx/7itvnVD37x+67RKCuMytdZYZRglHB0%0A+TU3dHzN9bfMrX500+x+PzfvlXPM8SPxPf/kf+b0WgHV1zkM9ByFI9FINALR%0ACEA0AmBchKNp3/tZ9ZyDXlhHncwjt9mmOuq4N9cRqRzz1enX1TEo/3ztG0+s%0AHrHV1vWxOz7xSdUl//bDPqNR5sx//GJ9fC5Taz6e99vzmfv2fHbe7+PnXLDB%0AOX73+pur5x58aLXFllv2Os+8vn2On73g671em6/LuefrKSe+u563vOv99fvs%0A+pS/qmPQU/fYs/46399QzlE4Eo1EIxCNAEQjAMZNOMrKn8SXXEKWEPLFr32n%0AjiaJIwlJ5bivXHF1T2BJgMmxmcc+frv6UrTmap1O0ehVr3tD/frEn/Zn59h8%0A7pe/cVX14sNeWR/XjDJ573LJWx7PuZx36ZXVaR/9TK/3K+fYDjr5Oo/n+Xyd%0Ay+b2eMYz6++5xKy99n1WHcpyOV3CVFZSDeYchSPRSDQC0QhANAJgk7nt3mUb%0APSZk9U6iSPtSsxKOEkmaQSahpXmJ1tve86H68W9d+4te0ShxqYSlhJgckyjT%0A/uyEoOaKpgSirPjJ55THcjlaXp+VQX19L4OJRs2v8+ucc0JRObZcppdwNpBz%0AHAuzbOUa0ciIRohGAKIRAGPd3EUPb5KQkFU1udtZpxVIiSeJQs0gk5U5fQWZ%0AEo0mrb+UK5PPaL8uESaPZwVS+7NL1Ml+Q+XYRz9m23pV04fPOrdXwBlqNMol%0AZuX5ZpBqRqPBnKOVRqKRaASiEYBoxCa1evXqaunSpcaYTTgrV27+/7jeVMGo%0ABJMShtqbPue5xJHBBJn25WnZLymxJ5d/NS9hK6uH+prmptzZV6jchS0hJyuA%0AconaUKNRzrHTz6AZjQZ7joKRaCQagWgEIBqxyaxatapatGiRMWYTzvLlyydM%0AMCrBJJtCd9p4uvncUKNRJnsPtV9bgkxWOeW1nabsK9ScbLp97JvfUYeovP69%0AZ3xyo0ejwZ6jYCQaiUYgGgGIRohGxohGYzoYZXLZV+4M1n48dzlLMPncRZcP%0AOxolrGRfoKwUaq42KhtMD+W8sxIq4Sh7J7WjUftSuPYeRgONRsM9R8FINBKN%0AQDQCEI0QjYwRjcZkMCq3n08kecdpH+kJOt/5yU31nj9lc+jhRqNM3j/HJUaV%0Ax7Ixdh571wc/3ismZZqbbScQNb/OZOPuBK99nnVgr9fk/bLBdt4vk1VJuZxt%0AqNFooOcoGIlGohGIRgCiEaKRMaLRuAlGZZPpBJ6EkazcKZtYJxolHg320q9u%0A0SjhJ5Ent7rv9Nl5LvseZeVQVveUvZSan13OL5MQlHPMnkmdVhXl2ExWOCX4%0ADDUaDfQcBSPRSDQC0QhANEI0MkY0GjfBqDlf/Np36nCSyWqg9l49WVWToJK9%0Ajtp7H+Xx5qqbz17w9fr92p/x5W9cVR+bgNR+PCuRyud/+ouX9tpgOsfnsfYx%0AnfYTymqgPJdjst9R7m5Wzr2cY/ZFyjk2w1fuFtf8ftp3aOvvHAUj0Ug0AtEI%0A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%0A5GX13P31N/d5ydmPPn1kHaS+P/WI6pdfeF1PhFp45dvq88u86nlPqT+rfF2m%0AGazymZny2rxfPr/bZW15fb7fHFNe1/zZ5flOr81n5rm+vi/RSDQSjUA0AhCN%0AABiV4ejM455Tbf2ILXpdVpZLyppxJKEmjycs7fGXj+s5Lq9LTOkvGiXMPGrr%0AP69f23z89NfsX19KVt4vv87qpPbrs2pp22226nWOJQzl+USs9nPdjs3k+8sk%0AQj1p+0f1upzuN18+rleo+vvn797rfXKOJ7z0r3siVPnshLH2eV/y3kPr53L+%0AolFn9y+9V2gZR3Pr/FuqJSse8pc2ohGAaATAWA9HnzvxBXXUSATJqqGsiMlq%0AoISRZ++x4wbRKOHndQfvUa9G+unZR1XbPWbrOroM5NKwlz5r1/q5siLnrDc9%0Ar/566hsOrKNSHi8rkr7w9oN7rfLJ+eTythJ+ErQSa8p7ZbVPvs4cuu8u9XuU%0Ar8vkM5rRKOed7+eUV+1Th6LEr3xOIlE5LquW8ljOJ5+R4974kj3r92/GrcSw%0ARK3mZ2RyLglro3Vj7lWzvjcqfm+vWrOyWrD0vurOBbcKL2N0/rDo9uqB5Qur%0ANWvX+Msa0QhANAJgk1v3H2MP/+d5IxYMslImK2uy51D7uXe+Yu86jPzfc/6+%0AVzRKFOp0XLn8qq9oVJ4rl4olOCUktY97yhO3rfZ96g49X5eVPJ0ubRvqnkaJ%0ARjkm4ar5eD43n59f5/K3HJPvsf36/MwSicpqoxLAvnraS3qOyc8kwan9MxtN%0As/I3l4+63+bLVy6t7l38p2r2/b8VY0b53LFgVr1SbOXqFf5+RjQCEI0A2JzB%0AaMV/XTSiweDnn39NHTpyeVr7uVyGlueyEqkZjRJw2ncqm9S49Gug0Sgxqqxw%0Aaq8ISpBp3v0sK3wSt7JiJyuRcknZSESj5gqp5vedfZ3y60SqvE+nz8sqozyX%0AsFQCUc7vRXvv3HNMeX37Z+bytAH+ll+7tlr88IPVHx+8q7r1vltEmlEyt83/%0AbTVv8R+rZSuX+nsZ0QhANAJgPAaj5gqeBKFuQSlRaKSiUbk8LZdwDWQPouZr%0Ac1lYLk8r+x8l+LRXCQ02Gj15h0f3eUz7e2tOWVnU/HmUvY/K8bm8r7/PEI0G%0AZvWa1dWiZQuquxbOFm42xz5F991SzX1gTh3xEvNANAIQjQAYx8EoU1b7dIov%0A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%0AY5qTvY067U1UnstcdtllXQNULm9rvt+MGTP6PIe8x8UXX1y/X973xhtv7BqN%0Ach45NtNt/6Wc35VXXlm/X/7Z6fspk6B1xRVX1MedccYZopFoBKMuGp1z+dQ6%0AbuSSqFxS1mlVTFkllMiTY7NSaPr/fK3XcXksf8e96BXPH/BnDzQafem7Z/ec%0AY7eAkgBz9tc/Wh+XyXm3j8k5J+iU98j3lWMTtxJzOgWeHJ9jPvLPp27wPbcv%0Ax5v6lQ9WH73gA3Uw6xaNso9Rnsv79ffzyfeQY1855TDRCNEIQDRCNBp/0SjP%0AT2pdvtZpZVBZhZOok72PyrG5pO28887rdexBBx3U6/0SfTp99vz583uCUHN2%0A2WWXjtEon73NNtv0HLfDDjtsEK0SrPL68nz+mfO95pprNrgc7/DDD+94+Z5o%0AJBrBaIhGF/3756vd/3q3Xn8/bbHFFtXRbzlig9UuWSmUsJPnJzUuOWvuV5TV%0ARbnkqtMeRkONRglBBx7yrPqYxzzu0fXnZ45/3zEbhK/muZXZ58C9eq3mKZ+X%0AqHPYaw/d4NhmOEpQevLuO9fPPW77x/acQ8JQ+xwTyjr9fd8pGuU987Mb6M9o%0Av+fvXf2vR27d76ok0QjRCEA0QjQac9Eoq3ASiTJlD6K+olGizfHHH1+v8kmw%0ASaBJlGmvSirv2Vc0SmzK81OnTu1ZDZT3bW/EXaJRNuk+++yze1YS5bGjjz66%0A16qphKL999+/mjlzZs8qpt12260+x+aKowMOOKD+XhKiyl3jcimfaCQawWiI%0ARokjiRfNCJKVMiXQZDVMMxolyCRclNUxueSsGXvyfjkm4WUw59FfNMqePwlR%0A5RwTTvJYXpMVPc3AkxCUEFaOyybSOa4ZmMrnJQLl8rCywqgEpPI5WVGUS8gS%0Ad8p75rWJbPk5NFc75ZK8nGM+P68rdz7rFI3yXvW/W1phrq/Jewx0ZZJohGgE%0AIBohGo2qaHTIIYfU0aU5WWXT12v6ikYJRs3HTz755PrxhKJO79lXNCqfl72U%0ABrKnUfZHaj6+zz77VLvvvnvP12eeeWZ93HXXXdfruLyurFTK19OnT6+/Puec%0Ac+xpJBrBqIxG5e5cCR3ty7cSVBKUmtEoUSSXfjWPTTxJZGrGmL42dh5sNErE%0A6hRYco45n4MmP6ffMNY+p2Y0aoafXP6Wx6e8+zX119l8uhmR2nsVJQqVWJWv%0AX3fSkQPa06j83AcTgMq5tT9DNEI0AhCNEI1GfTTKnctyuVhzugWegUSjdlDp%0A6zX9RaOsKMrlbdtuu229yqdbPOq2EXa+l+albJMnT65XI7X3aEocyutzrs1z%0Abl/aJhqJRjBaotHLj51c/330rRkXd93MulyqlWiUVTnt4/JYnttY0agEloSc%0ARJjmJPpkJVD7Ned+61M9exqVFTqdolH787I6qLkPUll5lNVMzc8t55Tnmyuu%0AcnncQKJRVj3l8ZznQH9GiWRD+dmKRohGAKIRotGovzxtc0ajcse2rIZKPJq0%0Afj+j9oqigUaj9l5K7SnRqNv7iUaiEYyWaFQu8errubIp9kCiUfYxymuy99FI%0ARaMSfbpNMxplxU8uJcvj2z/h8fW5ZQYajbr9DLpNiUZ5n3yd9x1INCrHZ/XQ%0AYH5OohGiEYBohGgkGm2EaNTcmDorgsom1s3PGWg0SnzKPkX9fVa5pK7se9Te%0AY0k0Eo1gc0ejspKm06bVueQsl381L0/rLxqVr3PJWl93GBtMNCqXiDX3Luo2%0A2Wsot6Zv3zFtqNFo8lEvqo/rb/PpsnKo/bnZK6lTNCp3VWtf9tbXlMv0skeT%0AaIRoBCAaIRqJRhshGjVXHjVXBQ0mGpVzyZ5FfX1GiUPTpk3rtXl3NswWjUQj%0AGA3RqKziaW54ncnlagk/uWPXYKNR2Xh6MHvv9BVxyqbRCTgDWYnTXuXU6ZK5%0AgUajEncSrvo6LkGr/XNMaCp3pWtHo1zGNqm1OXd/Uz6jv3MRjRCNAEQjRKMx%0AF40Se8rePyXOXHzxxT2PDSUaNfcTmrR+M+7ydfO4K664op4ZM2bUj2ePo9wN%0ALa/J3dEGG40SfrLSKHdQy/mWO7jlffN1c1VTjssm2olUiUz5dUY0Eo1gNESj%0ArAYqK4MSSBJTstH10/bevb4LWnOPnoFGowSnXDKWv+eyL1I2e85lWh8+9z11%0A+Cnvmc9u7xGUsFMea+6zlBA0af1m2LmkK+eZS9ESUpqXeOWStNwJLt9DYtOJ%0AH3xDvfJoqNEo55D3LD+fvGdemxVFOedyjmXj8EzOPd9jfobZSLxTNMo+UTnP%0AHDOYVWH536TTqjDRCNEIQDRCNBrT0agc122GEo0mDWBfocyUKVM2eH677bbb%0A4K5mA41GZaXS05/+9A3et33ZWu6klk2zy/NHHnlkdeONN4pGohGMimhU9gEq%0AK2LKZF+g9qVTA41GmdyRLHc1S+Rovm8CTIk8Jdx0m8SX5qqdBKj2+2USo8px%0ACVQlEtV/J6/7dWLPbk/bdUjRqPx8Enfan5tL98p+T+VStOZnZ5VW+Zx2NMq8%0AcsphHS9p6xav8t7lLnWiEaIRgGiEaDQmZs6cOXXImTdv3oCO6zbluLlz53Z8%0Av/L6+fPn91q91G1yfPP12VfommuuqUNNVgQ136e5MqjT5W9ZWdTel6hM7oxW%0AVje175LWfN/m8/nsgfzMRCNgU0Sj5mVgCTXdIkZCUDOSNPfaad62vh07suom%0A79veJDqrbfJYt+m0J1LeL6uIynl22msoj+WYfG55j5xfc4VO+exOd43ra0+h%0AsgoqIancVa792eX5ZqDqdJ45p4SgZ+z3tH4/O4EpwWywG2eLRohGAKIRopEx%0AohGIRmYMTvZAymqjE95/XNdjsoIpwSiX5o3EZ4pGiEYAohGikTGiEYhGZgxM%0ALptLFGpeZte8NC6rkXL5X6eVTaIRohGAaIRoZIxoBIhG43QSg7JfU6dolMvs%0AsjdSpx1SMigAAAXeSURBVMvbRCNEIwDRCNHIGNEIEI2MaIRoBCAaIRoZY0Qj%0AEI2MaIRoBCAaIRoZY0QjEI2MaIRoBCAaIRoZY0QjEI2MaIRoBCAaIRoZY0Qj%0AEI2MaIRoBIBoJBoZY0QjEI2MaIRoBIBoJBoZY0QjEI2MaIRoBIBoJBoZY0Qj%0AEI2MaIRoBIBoRI+1a9dWa9asMcZswsmfO2Dglq1cYsyAZvmqpf7AIBoBiEYA%0AAACiEYBoBAAAIBoBiEYAAACiEYBoBAAAIBoBiEYAAACiEYBoBAAAIBoBiEYA%0AAACiEYBoBAAAIBoBIBoBAACiEQCiEQAAIBoBIBoBAACiEQCiEQAAIBoBIBoB%0AAACiEQCiEQAAgGgEIBoBAACIRgCiEQAAgGgEIBoBAACIRgCiEQAAgGgEIBoB%0AAACIRgCiEQAAgGgEIBoBAACIRgCiEQAAgGgEIBoBAACIRgCikWgEAACIRgCI%0ARgAAgGgEgGgEAACIRgCIRgAAgGgEgGgEAACIRgCIRgAAAKIRgGgEAAAgGgGI%0ARgAAAKIRgGgEAAAgGgGIRgAAAKIRgGgEAAAgGgGIRgAAAKIRgGgEAAAgGgGI%0ARgAAAKIRgGgEAAAgGgGIRv6VAwAAiEYAiEYAAIBoBIBoBAAAiEYAiEYAAIBo%0ABIBoBAAAiEYAiEYAAIBoJBoBiEYAAACiEYBoBAAAIBoBiEYAAACiEYBoBAAA%0AIBoBiEYAAACiEYBoBAAAIBoBiEYAAACiEYBoBAAAIBoBiEYAAACiEYBoBAAA%0AIBoBIBoBAACiEQCiEQAAIBoBIBoBAACiEQCiEQAAIBoBIBoBAACikf+aAxCN%0AAAAARCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0AhCN%0AAAAARCMA0QgAAEA0AhCNAAAARCMA0QgAAEA0AkA0AgAARCMARCMAAEA0AkA0%0AAgAARCMARCMAAEA0AkA0AgAARCMARCMAAADRCEA0AgAAEI0ARCMAAADRCEA0%0AAgAAEI0ARCMAAADRCEA0AgAAEI0ARCMAAADRCEA0AgAAEI0ARCMAAADRCEA0%0AAgAAEI0AEI0AAADRCADRCAAAEI0AEI0AAADRCADRCAAAEI0AEI0AAADRCADR%0ACAAAQDQCEI0AAABEIwDRCAAAQDQCEI0AAABEIwDRCAAAQDQCEI0AAABEIwDR%0ACAAAQDQCEI0AAABEIwDRCAAAQDQCEI0AAABEIwBEIwAAQDQCQDQCAABEIwBE%0AIwAAQDQCQDQCAABEIwBEIwAAQDQCQDQCAAAQjQBEIwAAANEIQDQCAAAQjQBE%0AIwAAANEIQDQCAAAQjQBEIwAAANEIQDQCAAAQjQBEIwAAANEIQDQCAAAQjQBE%0AIwAAANEIQDQSjQAAANEIANEIAAAQjQAQjQAAANEIANEIAAAQjQAQjQAAANEI%0AANEIAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQj%0AANEIAABANAIQjQAAAEQjANEIAABANAIQjQAAAEQjANEIAABANAJANAIAAEQj%0AAPq0ePHiu5cuXVoZY4wxxhhjzFiZJUuWzPRfcwAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJvQ/wNU2Zuhyns6RwAAAABJRU5E%0ArkJggg== "ViewModel Diagram") * ViewModel 通过LiveDate暴露数据资源,LiveDate可以在应用各个组件中通过监听数据的改变,从而避免创建僵化的连接桥 * 在这个应用实例中,视图包括Fragments Views, 订阅了队形的LiveDate,因为LiveDate 具有生命周期的意识,所以他不会把数据的变化推送给当前不是activity的View。这会避免很多bug的产生,下面是一个订阅的实例: ```java // Update the list of products when the underlying data changes. viewModel.getProducts().observe(this, new Observer>() { @Override public void onChanged(@Nullable List myProducts) { if (myProducts != null) { mBinding.setIsLoading(false); mProductAdapter.setProductList(myProducts); } else { mBinding.setIsLoading(true); } } }); ``` #### 数据层 通过Room创建了数据库,这个数据包含了两个实体 `ProductEntity` 和 `CommentEntity` 他们会在运行时创建对应的表. Room通常是异步操作数据库的,在创建数据库通过 `RoomDatabase#Callback`,加入延迟去模拟一个低性能的数据创建过程 ,为了使其他组件使用数据我们在 `AppDatabase` 中创建了一个数据库实例 `LiveData` 实例.. 你使用[Data Access Object](https://developer.android.com/topic/libraries/architecture/room.html#daos) (DAO). 去访问操作数据,例如加载一个产品的详情使用如下的代码: ```java @Query("select * from products where id = :productId") LiveData loadProduct(int productId); ``` 返回一个可以被观察的 `LiveData` ,所以当发生数据改变时 `LiveData` 会通知订阅他的观察者. 通过 `DataRepository` 向ui层暴露数据. 为了确保ui层只在数据初始化成功以后使用我们用到了,[`MediatorLiveData`](https://developer.android.com/reference/android/arch/lifecycle/MediatorLiveData.html) . 他观察数据的列表的更改,把数据准备的数据传递给UI层 项目的构建 ------------- #### build的文件配置如下 ```groovy apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.zhihaoliang.baseframe" minSdkVersion 15 targetSdkVersion 29 versionCode 1 multiDexEnabled true versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" //添加对vector图片的支持 vectorDrawables { useSupportLibrary = true } //添加对Room注释的支持 javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } //用Java8进行编译 compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } //添加对数据绑定支持 dataBinding { enabled = true } lintOptions { abortOnError false } } dependencies { implementation 'com.android.support:multidex:1.0.3' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.fragment:fragment:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' //room implementation 'androidx.room:room-runtime:2.2.3' implementation 'androidx.room:room-compiler:2.2.3' implementation 'androidx.room:room-rxjava2:2.2.3' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0' annotationProcessor 'androidx.room:room-compiler:2.2.3' } ``` #### 关键代码解析 ##### 1.database版本升级 ```java /** * 数据库从1版本升级的版本2需要做的东西 */ private static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("CREATE VIRTUAL TABLE IF NOT EXISTS `productsFts` USING FTS4(`name` TEXT, `description` TEXT, content=`products`)"); database.execSQL("INSERT INTO productsFts (`rowid`, `name`, `description`) " + "SELECT `id`, `name`, `description` FROM products"); } }; ``` ##### 2.database 特殊类型存储 ```java @TypeConverters(value = DateConverter.class) public abstract class AppDatabase extends RoomDatabase { public class DateConverter { @TypeConverter public static Date toDate(Long timestamp) { return timestamp == null ? null : new Date(timestamp); } @TypeConverter public static Long toTimestamp(Date date) { return date == null ? null : date.getTime(); } } ``` ##### 4.数据库搜索优化Fts4 ```java @Entity(tableName = "productsFts") @Fts4(contentEntity = ProductEntity.class) public class ProductFtsEntity { private String name; private String description; public ProductFtsEntity(String name, String description) { this.name = name; this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } @Query("SELECT products.* FROM products JOIN productsFts ON (products.id = productsFts.rowid) " + "WHERE productsFts MATCH :query") LiveData> searchAllProducts(String query); ``` ##### 5.BindingAdapters的设置 ```java public class BindingAdapters { @BindingAdapter("visibleGone") public static void showHide(View view, boolean show) { view.setVisibility(show ? View.VISIBLE : View.GONE); } } ``` ```xml ``` ##### 6.modeView 的两种创建方式 ###### 6.1.一般创建 ```java ProductListViewModel viewModel = new ViewModelProvider(this).get(ProductListViewModel.class); ``` ###### 6.2.factory创建 ```java ProductViewModel.Factory factory = new ProductViewModel.Factory(requireActivity().getApplication(), requireArguments().getInt(KEY_PRODUCT_ID)); final ProductViewModel model = new ViewModelProvider(this,factory).get(ProductViewModel.class); subscribeToModel(model); public static class Factory extends ViewModelProvider.NewInstanceFactory{ @NonNull private final Application mApplication; private final int mProductId; private final DataRepository mRepository; public Factory(@NonNull Application application,int productId){ mApplication = application; mProductId = productId; mRepository = ((BasicApp)application).getRepository(); } @NonNull @Override public T create(@NonNull Class modelClass) { return (T) new ProductViewModel(mApplication,mRepository,mProductId); } } ``` ##### 7.xml的intToString ```xml 价格: $%d ``` License -------- Copyright 2015 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.