From 872893027c24be3b0152fd99c8c61f8a9687f1f7 Mon Sep 17 00:00:00 2001 From: Jay Gao <1109258889@qq.com> Date: Tue, 9 Aug 2022 14:44:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1465 +++++++++++++ app/src/main/assets/Root-en.crt | 23 + app/src/main/assets/Root.crt | Bin 0 -> 889 bytes app/src/main/assets/fonts/font.ttf | Bin 0 -> 3704768 bytes app/src/main/assets/privacyas.txt | 11 + app/src/main/assets/privacycw.txt | 11 + app/src/main/assets/privacyyj.txt | 11 + app/src/main/assets/t_s.bmp | Bin 0 -> 22554 bytes .../common/openapi/ClassInstanceManager.java | 58 + .../common/openapi/DeviceDetailService.java | 295 +++ .../openapi/DeviceInfoOpenApiManager.java | 337 +++ .../com/common/openapi/DeviceListService.java | 164 ++ .../openapi/DeviceLocalCacheDatabase.java | 122 ++ .../openapi/DeviceLocalCacheManager.java | 43 + .../openapi/DeviceLocalCacheService.java | 69 + .../common/openapi/DeviceRecordService.java | 204 ++ .../openapi/DeviceSubAccountListService.java | 83 + .../openapi/IGetDeviceInfoCallBack.java | 218 ++ .../java/com/common/openapi/MethodConst.java | 54 + .../openapi/entity/CloudRecordsData.java | 48 + .../openapi/entity/ControlMovePTZData.java | 16 + .../entity/DeleteCloudRecordsData.java | 14 + .../openapi/entity/DeviceAlarmStatusData.java | 15 + .../openapi/entity/DeviceChannelInfoData.java | 39 + .../openapi/entity/DeviceDetailListData.java | 478 +++++ .../common/openapi/entity/DeviceListData.java | 100 + .../openapi/entity/DeviceLocalCacheData.java | 70 + .../openapi/entity/DeviceModifyNameData.java | 46 + .../openapi/entity/DeviceUnBindData.java | 13 + .../openapi/entity/DeviceVersionListData.java | 124 ++ .../openapi/entity/LocalRecordsData.java | 44 + .../common/openapi/entity/RecordListData.java | 12 + .../common/openapi/entity/RecordsData.java | 52 + .../openapi/entity/SubAccountDeviceData.java | 37 + app/src/main/java/com/ds/remote/Device.java | 241 +++ app/src/main/java/com/ds/remote/Language.java | 12 + app/src/main/java/com/ds/remote/Public.java | 178 ++ app/src/main/java/com/ds/remote/Remote.java | 12 + .../main/java/com/ds/remote/SerialPort.java | 70 + .../java/com/ds/remote/SerialPortService.java | 104 + app/src/main/java/com/ds/remote/Settings.java | 97 + .../java/com/ds/remote/tagSerialPortRx.java | 17 + .../java/com/ds/remote/type_CUR_group.java | 11 + .../java/com/ds/remote/type_updatatime.java | 7 + .../adapter/DeviceInnerRecordListAdapter.java | 103 + .../demo/adapter/DeviceRecordListAdapter.java | 77 + .../demo/adapter/MediaPlayRecordAdapter.java | 126 ++ .../demo/adapter/PixelListAdapter.java | 75 + .../com/lechange/demo/business/Business.java | 1905 +++++++++++++++++ .../business/entity/AlarmMessageInfo.java | 114 + .../demo/business/entity/ChannelInfo.java | 175 ++ .../demo/business/entity/ChannelPTZInfo.java | 91 + .../demo/business/entity/RecordInfo.java | 128 ++ .../demo/business/util/HttpUtils.java | 227 ++ .../demo/business/util/ImageHelper.java | 209 ++ .../demo/business/util/MD5Helper.java | 91 + .../demo/business/util/MediaPlayHelper.java | 132 ++ .../demo/business/util/OpenApiHelper.java | 192 ++ .../demo/business/util/PermissionHelper.java | 43 + .../demo/business/util/SignHelper.java | 84 + .../demo/business/util/TaskPoolHelper.java | 102 + .../demo/business/util/TimeHelper.java | 44 + .../demo/business/util/WifiManagerUtil.java | 379 ++++ .../com/lechange/demo/common/CommonTitle.java | 264 +++ .../com/lechange/demo/common/DatePicker.java | 254 +++ .../lechange/demo/common/ProgressDialog.java | 116 + .../lechange/demo/common/RecoderSeekBar.java | 33 + .../demo/common/datepicker/AbstractWheel.java | 889 ++++++++ .../common/datepicker/AbstractWheelView.java | 325 +++ .../demo/common/datepicker/ItemsRange.java | 86 + .../datepicker/OnWheelChangedListener.java | 43 + .../datepicker/OnWheelClickedListener.java | 42 + .../datepicker/OnWheelScrollListener.java | 42 + .../datepicker/WheelHorizontalScroller.java | 72 + .../datepicker/WheelHorizontalView.java | 371 ++++ .../demo/common/datepicker/WheelRecycler.java | 163 ++ .../demo/common/datepicker/WheelScroller.java | 281 +++ .../datepicker/WheelVerticalScroller.java | 71 + .../common/datepicker/WheelVerticalView.java | 344 +++ .../adapters/AbstractWheelAdapter.java | 82 + .../adapters/AbstractWheelTextAdapter.java | 289 +++ .../adapters/ArrayWheelAdapter.java | 70 + .../adapters/NumericWheelAdapter.java | 106 + .../datepicker/adapters/WheelViewAdapter.java | 72 + .../demo/dialog/DeviceUpdateDialog.java | 59 + .../demo/dialog/EncryptKeyInputDialog.java | 72 + .../lechange/demo/dialog/LoadingDialog.java | 35 + .../lechange/demo/dialog/PasswordDialog.java | 148 ++ .../demo/handler/ActivityHandler.java | 25 + .../demo/listener/PasswordSetListener.java | 6 + .../demo/listview/DevicelistActivity.java | 498 +++++ .../demo/localvideo/BaseDecoration.java | 475 ++++ .../com/lechange/demo/localvideo/City.java | 71 + .../lechange/demo/localvideo/CityUtil.java | 79 + .../demo/localvideo/MyRecyclerView.java | 57 + .../localvideo/PowerfulStickyDecoration.java | 331 +++ .../demo/localvideo/RecordListActivity.java | 883 ++++++++ .../demo/localvideo/SimpleAdapter.java | 120 ++ .../demo/localvideo/TodayLocalAdapter.java | 140 ++ .../calendar/CalendarPopipWindow.java | 136 ++ .../localvideo/calendar/CustomCalendar.java | 657 ++++++ .../demo/localvideo/calendar/DayFinish.java | 16 + .../demo/localvideo/calendar/FontUtil.java | 44 + .../timeshaftbar/LayoutController.java | 83 + .../localvideo/timeshaftbar/OverScroller.java | 952 ++++++++ .../localvideo/timeshaftbar/Scroller.java | 586 +++++ .../localvideo/timeshaftbar/TimebarTick.java | 103 + .../timeshaftbar/TimerShaftBar.java | 731 +++++++ .../timeshaftbar/TimerShaftInterface.java | 39 + .../timeshaftbar/TimerShaftRegionItem.java | 80 + .../demo/localvideo/turnview/AXLog.java | 249 +++ .../turnview/OnValueChangeListener.java | 10 + .../demo/localvideo/turnview/RecordInfo.java | 54 + .../demo/localvideo/turnview/TunlView.java | 646 ++++++ .../lechange/demo/login/BindUserActivity.java | 193 ++ .../lechange/demo/login/SplashActivity.java | 65 + .../demo/login/UserLoginActivity.java | 191 ++ .../login/fragment/SplashErrFragment.java | 54 + .../login/fragment/SplashNormalFragment.java | 192 ++ .../demo/manager/DeviceAddActivity.java | 895 ++++++++ .../demo/manager/DeviceSetActivity.java | 348 +++ .../lechange/demo/manager/SoftAPActivity.java | 608 ++++++ .../demo/mediaplay/MediaPlayActivity.java | 218 ++ .../demo/mediaplay/MediaPlayBackActivity.java | 197 ++ .../fragment/MediaPlayBackFragment.java | 1124 ++++++++++ .../mediaplay/fragment/MediaPlayFragment.java | 266 +++ .../fragment/MediaPlayOnlineFragment.java | 1365 ++++++++++++ .../demo/message/AlarmMessageActivity.java | 389 ++++ .../com/lechange/demo/tools/DateHelper.java | 51 + .../demo/tools/DeviceAbilityHelper.java | 19 + .../com/lechange/demo/tools/DialogUtils.java | 47 + .../com/lechange/demo/tools/ImageHelper.java | 217 ++ .../lechange/demo/tools/MediaPlayHelper.java | 277 +++ .../com/lechange/demo/tools/RootUtil.java | 47 + .../lechange/demo/tools/TaskPoolHelper.java | 103 + .../ui/DeviceCloudRecordListFragment.java | 416 ++++ .../ui/DeviceDetailDeploymentFragment.java | 138 ++ .../demo/ui/DeviceDetailLCActivity.java | 109 + .../demo/ui/DeviceDetailLockFragment.java | 727 +++++++ .../demo/ui/DeviceDetailMainFragment.java | 691 ++++++ .../ui/DeviceDetailModifyNameFragment.java | 185 ++ .../demo/ui/DeviceDetailNameFragment.java | 128 ++ .../demo/ui/DeviceDetailVersionFragment.java | 170 ++ .../ui/DeviceLocalRecordListFragment.java | 303 +++ .../ui/DeviceOnlineMediaPlayActivity.java | 1515 +++++++++++++ .../demo/ui/DeviceRecordListActivity.java | 110 + .../demo/ui/DeviceRecordPlayActivity.java | 1000 +++++++++ .../demo/videoplay/ContainerAdapter.java | 102 + .../demo/videoplay/PqVideoPlayer.java | 688 ++++++ .../demo/videoplay/PqVideoPlayerZoomIn.java | 194 ++ .../videoplay/VideoContainerFragment.java | 169 ++ .../videoplay/VideoGridLayoutManager.java | 27 + .../demo/videoplay/VideoPlayFragment.java | 251 +++ .../videoplay/VideoPlayOnlineFragment.java | 1023 +++++++++ .../demo/videoplay/VideoRecycler.java | 54 + .../demo/videoplay/VideoTextureView.java | 55 + .../com/lechange/demo/view/Direction.java | 9 + .../lechange/demo/view/LcCloudRudderView.java | 437 ++++ .../com/lechange/demo/view/LcPopupWindow.java | 63 + .../com/lechange/demo/view/LcProgressBar.java | 68 + .../view/LcPullToRefreshRecyclerView.java | 87 + .../lechange/demo/view/RecoderSeekBar.java | 34 + .../demo/view/SpacesItemDecoration.java | 23 + .../yonsz/AddCompleteAndRenameActivity.java | 345 +++ .../demo/yonsz/CameraDetailActivity.java | 603 ++++++ .../demo/yonsz/CameraNameDetailActivity.java | 171 ++ .../lechange/demo/yonsz/CustomSnapHelper.java | 87 + .../lechange/demo/yonsz/LcDataListEntity.java | 173 ++ .../com/lechange/demo/yonsz/LcListEntity.java | 171 ++ .../demo/yonsz/LcModifyNameActivity.java | 332 +++ .../demo/yonsz/LechengChannelAdapter.java | 174 ++ .../demo/yonsz/LechengLoginActivity.java | 302 +++ .../demo/yonsz/RecoverSDCardActivity.java | 103 + .../demo/yonsz/ResetLechengActivity.java | 183 ++ .../lechange/demo/yonsz/TimeOutActivity.java | 99 + .../demo/yonsz/WifiHotspotActivity.java | 197 ++ 176 files changed, 39304 insertions(+) create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/assets/Root-en.crt create mode 100644 app/src/main/assets/Root.crt create mode 100644 app/src/main/assets/fonts/font.ttf create mode 100644 app/src/main/assets/privacyas.txt create mode 100644 app/src/main/assets/privacycw.txt create mode 100644 app/src/main/assets/privacyyj.txt create mode 100644 app/src/main/assets/t_s.bmp create mode 100644 app/src/main/java/com/common/openapi/ClassInstanceManager.java create mode 100644 app/src/main/java/com/common/openapi/DeviceDetailService.java create mode 100644 app/src/main/java/com/common/openapi/DeviceInfoOpenApiManager.java create mode 100644 app/src/main/java/com/common/openapi/DeviceListService.java create mode 100644 app/src/main/java/com/common/openapi/DeviceLocalCacheDatabase.java create mode 100644 app/src/main/java/com/common/openapi/DeviceLocalCacheManager.java create mode 100644 app/src/main/java/com/common/openapi/DeviceLocalCacheService.java create mode 100644 app/src/main/java/com/common/openapi/DeviceRecordService.java create mode 100644 app/src/main/java/com/common/openapi/DeviceSubAccountListService.java create mode 100644 app/src/main/java/com/common/openapi/IGetDeviceInfoCallBack.java create mode 100644 app/src/main/java/com/common/openapi/MethodConst.java create mode 100644 app/src/main/java/com/common/openapi/entity/CloudRecordsData.java create mode 100644 app/src/main/java/com/common/openapi/entity/ControlMovePTZData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeleteCloudRecordsData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceAlarmStatusData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceChannelInfoData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceDetailListData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceListData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceLocalCacheData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceModifyNameData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceUnBindData.java create mode 100644 app/src/main/java/com/common/openapi/entity/DeviceVersionListData.java create mode 100644 app/src/main/java/com/common/openapi/entity/LocalRecordsData.java create mode 100644 app/src/main/java/com/common/openapi/entity/RecordListData.java create mode 100644 app/src/main/java/com/common/openapi/entity/RecordsData.java create mode 100644 app/src/main/java/com/common/openapi/entity/SubAccountDeviceData.java create mode 100644 app/src/main/java/com/ds/remote/Device.java create mode 100644 app/src/main/java/com/ds/remote/Language.java create mode 100644 app/src/main/java/com/ds/remote/Public.java create mode 100644 app/src/main/java/com/ds/remote/Remote.java create mode 100644 app/src/main/java/com/ds/remote/SerialPort.java create mode 100644 app/src/main/java/com/ds/remote/SerialPortService.java create mode 100644 app/src/main/java/com/ds/remote/Settings.java create mode 100644 app/src/main/java/com/ds/remote/tagSerialPortRx.java create mode 100644 app/src/main/java/com/ds/remote/type_CUR_group.java create mode 100644 app/src/main/java/com/ds/remote/type_updatatime.java create mode 100644 app/src/main/java/com/lechange/demo/adapter/DeviceInnerRecordListAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/adapter/DeviceRecordListAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/adapter/MediaPlayRecordAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/adapter/PixelListAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/business/Business.java create mode 100644 app/src/main/java/com/lechange/demo/business/entity/AlarmMessageInfo.java create mode 100644 app/src/main/java/com/lechange/demo/business/entity/ChannelInfo.java create mode 100644 app/src/main/java/com/lechange/demo/business/entity/ChannelPTZInfo.java create mode 100644 app/src/main/java/com/lechange/demo/business/entity/RecordInfo.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/HttpUtils.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/ImageHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/MD5Helper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/MediaPlayHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/OpenApiHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/PermissionHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/SignHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/TaskPoolHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/TimeHelper.java create mode 100644 app/src/main/java/com/lechange/demo/business/util/WifiManagerUtil.java create mode 100644 app/src/main/java/com/lechange/demo/common/CommonTitle.java create mode 100644 app/src/main/java/com/lechange/demo/common/DatePicker.java create mode 100644 app/src/main/java/com/lechange/demo/common/ProgressDialog.java create mode 100644 app/src/main/java/com/lechange/demo/common/RecoderSeekBar.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheel.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheelView.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/ItemsRange.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/OnWheelChangedListener.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/OnWheelClickedListener.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/OnWheelScrollListener.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalScroller.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalView.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelRecycler.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelScroller.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalScroller.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalView.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelTextAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/adapters/ArrayWheelAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/adapters/NumericWheelAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/common/datepicker/adapters/WheelViewAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/dialog/DeviceUpdateDialog.java create mode 100644 app/src/main/java/com/lechange/demo/dialog/EncryptKeyInputDialog.java create mode 100644 app/src/main/java/com/lechange/demo/dialog/LoadingDialog.java create mode 100644 app/src/main/java/com/lechange/demo/dialog/PasswordDialog.java create mode 100644 app/src/main/java/com/lechange/demo/handler/ActivityHandler.java create mode 100644 app/src/main/java/com/lechange/demo/listener/PasswordSetListener.java create mode 100644 app/src/main/java/com/lechange/demo/listview/DevicelistActivity.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/BaseDecoration.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/City.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/CityUtil.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/MyRecyclerView.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/PowerfulStickyDecoration.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/RecordListActivity.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/SimpleAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/TodayLocalAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/calendar/CalendarPopipWindow.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/calendar/CustomCalendar.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/calendar/DayFinish.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/calendar/FontUtil.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/LayoutController.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/OverScroller.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/Scroller.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimebarTick.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftBar.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftInterface.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftRegionItem.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/turnview/AXLog.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/turnview/OnValueChangeListener.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/turnview/RecordInfo.java create mode 100644 app/src/main/java/com/lechange/demo/localvideo/turnview/TunlView.java create mode 100644 app/src/main/java/com/lechange/demo/login/BindUserActivity.java create mode 100644 app/src/main/java/com/lechange/demo/login/SplashActivity.java create mode 100644 app/src/main/java/com/lechange/demo/login/UserLoginActivity.java create mode 100644 app/src/main/java/com/lechange/demo/login/fragment/SplashErrFragment.java create mode 100644 app/src/main/java/com/lechange/demo/login/fragment/SplashNormalFragment.java create mode 100644 app/src/main/java/com/lechange/demo/manager/DeviceAddActivity.java create mode 100644 app/src/main/java/com/lechange/demo/manager/DeviceSetActivity.java create mode 100644 app/src/main/java/com/lechange/demo/manager/SoftAPActivity.java create mode 100644 app/src/main/java/com/lechange/demo/mediaplay/MediaPlayActivity.java create mode 100644 app/src/main/java/com/lechange/demo/mediaplay/MediaPlayBackActivity.java create mode 100644 app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayBackFragment.java create mode 100644 app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayFragment.java create mode 100644 app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayOnlineFragment.java create mode 100644 app/src/main/java/com/lechange/demo/message/AlarmMessageActivity.java create mode 100644 app/src/main/java/com/lechange/demo/tools/DateHelper.java create mode 100644 app/src/main/java/com/lechange/demo/tools/DeviceAbilityHelper.java create mode 100644 app/src/main/java/com/lechange/demo/tools/DialogUtils.java create mode 100644 app/src/main/java/com/lechange/demo/tools/ImageHelper.java create mode 100644 app/src/main/java/com/lechange/demo/tools/MediaPlayHelper.java create mode 100644 app/src/main/java/com/lechange/demo/tools/RootUtil.java create mode 100644 app/src/main/java/com/lechange/demo/tools/TaskPoolHelper.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceCloudRecordListFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailDeploymentFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailLCActivity.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailLockFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailMainFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailModifyNameFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailNameFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceDetailVersionFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceLocalRecordListFragment.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceOnlineMediaPlayActivity.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceRecordListActivity.java create mode 100644 app/src/main/java/com/lechange/demo/ui/DeviceRecordPlayActivity.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/ContainerAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayer.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayerZoomIn.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoContainerFragment.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoGridLayoutManager.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoPlayFragment.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoPlayOnlineFragment.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoRecycler.java create mode 100644 app/src/main/java/com/lechange/demo/videoplay/VideoTextureView.java create mode 100644 app/src/main/java/com/lechange/demo/view/Direction.java create mode 100644 app/src/main/java/com/lechange/demo/view/LcCloudRudderView.java create mode 100644 app/src/main/java/com/lechange/demo/view/LcPopupWindow.java create mode 100644 app/src/main/java/com/lechange/demo/view/LcProgressBar.java create mode 100644 app/src/main/java/com/lechange/demo/view/LcPullToRefreshRecyclerView.java create mode 100644 app/src/main/java/com/lechange/demo/view/RecoderSeekBar.java create mode 100644 app/src/main/java/com/lechange/demo/view/SpacesItemDecoration.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/AddCompleteAndRenameActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/CameraDetailActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/CameraNameDetailActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/CustomSnapHelper.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/LcDataListEntity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/LcListEntity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/LcModifyNameActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/LechengChannelAdapter.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/LechengLoginActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/RecoverSDCardActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/ResetLechengActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/TimeOutActivity.java create mode 100644 app/src/main/java/com/lechange/demo/yonsz/WifiHotspotActivity.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e3538da --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,1465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //如需兼容 Android P,需要添加使用 Apache HTTP client 库,在 AndroidManifest 的 application 节点内添加以下配置即可 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //暂时语音遥控器还是要单独改 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //乐橙界面 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/Root-en.crt b/app/src/main/assets/Root-en.crt new file mode 100644 index 0000000..c2b2907 --- /dev/null +++ b/app/src/main/assets/Root-en.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- diff --git a/app/src/main/assets/Root.crt b/app/src/main/assets/Root.crt new file mode 100644 index 0000000000000000000000000000000000000000..1e6967febb897f69cc81064c6ba584fc91bcfb13 GIT binary patch literal 889 zcmXqLVlFjkVv1eB%*4pV#LdD01dO8IQHQ4(@Un4gwRyCC=VfGMWo0l3H{>?pWMd9x zVH0L@ay67R5C?I%gazDl@{;D#ZXBDIdNV~3j<37Lqj72Aczv@HL@@;G_rtlX=ia0qY|mhT4XLYN9@iB*y;{bnfPJAYm%&-lUjH9=uk-|n%DfMFcSP^|pO-rV^4V-UGNZM8k1h|{k<)o*_D`ErPycp)6|$LBG40x&lDx?- zi5Gj1yKO4vYkMKtbu~BVYK7R;MK4cqS-k$FBJ5urGFiCQN_vl+$<}Vxo}K008*j@i zOkB+woHyZIwRy?T0{4kZfyrW(>o%@)RO2`yseRFHmB+Odt?SJu|8=wu=14kwv9~_I zT=Pvamo3g?nKC1yUkTQ@3 z3GlIqv4|v8r%Ac;PCwNdpkK>!)?~&1KYzWELm8NqfT7IDaIN@xjepsN-u-WOE!t;t zRKsX%&7Yh(I@)_V=LPT2j$0+@vF$0x;?1XQ6MZkcac;Idyx?(isPv~@@7G#Bblz#P z_?do}n)Uky0bxInas9P8dxX0naLV)|MR}r z*_rJ2ZPlOqdous(33;T7A|GKXaDFy3OTT)%0X$;N61lx5I1`pJY9Zx%Ta!?LEgc?CX+) z_6G-l(SCXS@3!wv@vWB}C2luvW|286zoa2wRN>@3o(?YAYiXg6{&<|!RLgt-09X)I A(*OVf literal 0 HcmV?d00001 diff --git a/app/src/main/assets/fonts/font.ttf b/app/src/main/assets/fonts/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9ce5131a6e31143ca004bfe7d779bb06d098e40f GIT binary patch literal 3704768 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 wY4vdm~kn#ujk$i~sbxkE7R!4HJ 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 $FUQ?Ih5JU;+7ripiyil^leljy#eKVYeLcAE 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%0A=M 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

5H{ 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%0DH>y-M}LPNVq)L}Yu^6Ygb% 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

_N;kCXAacD4 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 z z3ovYCg`z8ZJNqVj%aKS9PES%OTi|2sJoZX?AeySTYt;r5%w)R*gP1a){PW7$B9^E- z!8+*#YBECenPj43{}O2vAeTvqEsg%_939}_UW{A)(5UC8T_)_RQB7!af zxx69v$xqRbxncEo533Kdl#A-EV-EAdtE+y08uBt%kB=d|O<5fru@hI$8HUWrkhJ2a zcDOB>{+(&7xF*rR+Qr^J%^$Sd+1eboUq~d)w2UY+F??nOXEKUm#Ur4Th! z9T!W7X-xq<%zjWUKn$sH@vt@DJ~@&2Vq>B;a-SQNYK#>WTSI@mlzbf21^@2~8M(>_ zm9qzv5fSHgVli#9$%YAG+c5VF5Zq9tIfl?miWEkuvXfFysZ;Z%Fj>Lws+=N1ZYWHY zZ+5}RTZMlC`Emote6e4`M;mK< zW)!}6?YD^u{bIO?u3)UfLj|Q&%FJKO!8)F!;YwXZp()B$CM>bv`1oj9*sY+ZdykjJ z7+BK^E*w^Pvt9mO?oZ38w#u8uKTlM`?HF>h+>Xw|J zPj*%@T7}I8D+^}x8QtdMR>nz?QUBDxKZrL$5hXLt2{loGYH6sRq>4H4G{uV9RTJBB zx(QaaC6M6vTJ8SUHnQ~woa*8FhJ;e%EM+c<)3(Vivtny#L1r(4EJ@-ghqP(lgjVBB zt4hq`lGtZQ<82J)gOooerJUQ-WO$F;6u;4Z1#FgRKfQ?3L_9{ebx@itr0wSThgcE!cgLQRz z)@#p1F=zQiaM`*%@GrBce|v3#6W?Ro*H`2qzOIV;5}6ftSYr8=2EjAQ4irYfJ!t&Y zGgzavFnIbt#w#hV74pYmm;6<!*;*NR$vni*G`D=bxzSqVca81&k2 zbO;v@D}(RuA3r))(ACu^$WCC=>~;xuNsXL1Z(FATSOUwYmO!6sYNwpurbd=VeId+p zA%HemTV z=ED`uD=wkD2B`#1<)WII`ty1Q4aKAy4JR)Al(S1ETRVGeYr8X8t)~tx{S(*aH~y|T z)1Dde-)=YWpEB*JVEl^i6~K=wi84u0Fq}g}6%L3FTb6@`#(B6f);ur@D+IjJJ^o## zrz!>v{U6~PcYKgM*(%9VUYj^%xrdj~UgcWvRUV8Lt+d!G*ib%EK0{HR6k6CkyanHR ze|*1+HC+7IXq+lZiYcpf6A+5JXw|PP(G)(8u9r)CHv8$TX~g+=GF^l=n#U#VVG>0O zIfe+Dpm?%h0QyMMvQc}K6@XCkM*%5Ucd#n*$5wjFz&=ZVQ)wz95Wph4R#Qsc-RPd2 zTCbGga^WzwQ-=rB>*gWE!*uz<34eet?u%4Xbr>d$*X=@8$%TkQ#6^|d`pz&FZYqvn zRF}i2YhrYxrM!xazzSK8l<)4N#l%vSjq4z4K-T?w{k`w^p?5Vv8W|u#C(RP)li`(^ z1-4AW&5ca1S)XmU-rYzYU+QJ0f5L09XZdcO>=>`z_kQgSi*@L(o*etHK>vSBZ(R1s zemlMOu#c5WgZdx|bkig{`8Y zmeH_c=PC&A9$^uGtjeS0*}^3&Q(AazX_bqna;e+Kf6Tk$M<1|!L_* zv)i^aeLcl+meb#p*~GdDbtpYyTTxL#)nEv617(PlrlHy^L(6N$x{ZHAk&&2cZ)?+a z#lwTSbuH9BxlJWAod8l*!+bGaY#H7XuEIA$wT<0_`H8<2E~2g)=QnYabT~>Ye9IfA zHnMna|#?zqmoUQg;pWS%P0#(t67>fx6AOJgIG;tdxif6JW5b4 z_g%RS-w;&uD(n`{q#9RYkh7vMv0fP$Qy8>zaxrn<#|Kg1oWn#@C-&tSDux189?5{G z8MHM4@LHR)`*6DaJ?fsHsTf(*j>Qv@`1~p@b@Xm=j=|_in)bmxBtSrMhv4iH&lPA( z05p}@_4?c2ByD?iv_av)e(JXp)F{p|rs%WyxWLd~Nk&F>AJES_CHuGmc=hkp92mbC zAB?g#32XSMG$JNBktwR-F=`xpSk0?Cx)k^F2A)geG2-P*Y|m&&4C))lC#C)jIq4-H z>vndNw02LUMB}X_#rU?^d^sW!6bUbv#i=2%sV!gMoVu_R2P+{s-cjVC@GypM*KZP$ zdglr^g#PV*00-(Nac}rDpfs?;Kdd^#fCeX-KkEKQd7F8JH>)|gKgaKw(V1`XVL!3< zpQ}D8yjdxsb~r-FEZmdKa#drE3Bq-Ek~zl1#UF?=sx%jE#v5xu?M%zjmMQsR3WaD<@ z*^QLnn>l2mtJ1LE6j$sPyDSwBpJ%{XZEIT<8rPL|*Xi6c1W8$|r6UT=&_BYUCaImp ztGZPMAeeVG_!wnt)_ANMHE@szsU4S5ymAVrrZF`PaCE#SCY+E@Dyx75dM=nytk>rk zc~v&0%dS0Fk>vY?g)x=OHb2xRf#yJr$2jQN!|5jDa+ypf#zIT4*WV7;sBDghK?QSJ zOixJ|KyH@YC1EN+9<7Tpt#C3$C1n%PXw;r#l5KE?RJiXf^6Q@wtQZ(Tr3NI{UC8eor z5wfp%0!LNPCCZELn1{{9t`)O-1QPK7q61wbV^f$1pLj0pTXCJsDdarn%JMH^KyTts z1z-lPmV%lm|IKgJyA=3X-s&41V(<0jjiW2Sz!`CD;v9ixWvCL}!M%%8obM{FSl@cj z=4Rp!Scpm5H(vSHbr%aSJhYD2iAR<2T`41O#`$ETGQP_P@%ru4Lvj7isW$u>&Japz zSXqsp@seA0{VMo^FS?Jdxth1kcH};^+i%h={m#jm20}{di4QzBR`uu*pZLHe%I2~Q*ry5c%b*~ zaCr~IgG%w3HnrD%0u~1)sHXjdlf6N8dsK9EV4oV7M-VL(Dz=6NCCIuYX?%@ zHDO8cckw&2D2V1#y7hb&tPqJqK}f(?%9rn`Twn&3{83v`U5UV)pTUIZR~vswi3jG@ zEMfK~*CTmcJ~f=1W`Ur=Zf9#~O0om|c$u~6U(Mg57nOg82iwiFlcQsjk*qCs#f9~r zaeGcq7FVTvyOih7-LXZUT`eG{Dv_1J#;`P1DbH4lNcikj-`T^)7*Iy5v3AwD{x4#9 z19LgP?UG}rOO=y4-l(ghLn`!N9cnqd8Rb#*O3o@iNHq>3`lvFX(LBz(f^6mF%T$PO zwSX?wgyIaf*V!g2*2Lqg?!DRE&IEGbkFp4ESe$nn*KanA_4J34d6>)a-NR$d^8WWG zSb6VWbCX+7D!1oXF(K_8-0O(m@3G`ANqeJlTj2>99LuN(ib&P!H?Et~yguj+KI4ss zL(&b?sE`@OUzJs`>uj(wS?;iCI4D~RtBj{M216Cw$ytJS&mW)Zpi^rhx^i+%&T3bk)y_O9v&px2Zt3MaDa&eZ zIx-$>(dW%~3P1D6sKfF2_!#en@QBnMoTIuH94gxVcTlG#?rP1hgKdd2BWD) zN(jh2IS7Y)*DMJ&4!qvZ?BOeBUHv^Zg?+W<-(`pJ)2CTH+N!=kH5v(Atj>~3S{`M) zI!Y%szgHb)4!H1Xr4PzEuXI3R#_DJb!;*BDZ#&*kY{&aCH>6&FBjw?>qnwC;z@ak1 zz}`6rb$B@4YJ=jpo^e{u+WYno)98{^crr$f)_mvW#N#eyZ|J(yli~0zxENd2UYSje z_-tQ68<9+RCxEX88RcjP!~KIc^xBL`809nr3bx&`F)_TO?cv<8-h4R-Q<@m$ZQoY?4+CKpK0BI0^3;nuvq|r z;jCnnhwAHv80g5Q1Xmty(z7);kb}k=A^durGHRqQq22(w_xcL2I{bRUgLv`M> zie#J%Cyvy`2)1X5oM$;7R|$Df!PwgAS^ayUj-Eu6;|qzHY{l?Wm7-{eTfbO{!vL(;KAcm zpeaWMKM6CafA4MwSdazXnA-rWB~42cAT2fa-uKcCZH(R$7c*~J!IPc!j7?uEO-vfZ z=ynKh>ZY0b{`BK=4jn|VA5)!18r0Trr8q=XI>tzF{c9OrOl{RShc5-xCxlcpj?;fO zw?PYQ>r;CSCJ@EeN0P{k%*o8KS*ORsXGM+jy5c?2mCfcgadt%Qg<`Fbgq2cUSnu)X zn!4oz;4o@bf;6UB1iAHTdxH-{6S`2b&U3X-eyUb~<`#cp7jf&t7>&i%1{!wOW-#ur z7T@7{^E5wfn!}%7`!7l8s_@AXRs#CO1{Q@G5-$A*XaBTng*PIiQrMB<%Q%zEBhlDE zm>gXHl|Y%I-W1B#$)h% zKwFLT6>_HsQ3j1c?N2wSwiFYn+|5Kzq{#4<1dZ!DRQa#Tt8wt=ychS=kZOuU^HthNh9&$f&akr|Rid++ zLj>j~8xu|tPxb8*rm1&6s@#4ehNzI$U%iu)>(@Zn^Rx5Q`P_-{WSfJ&s4m&QNpJtW zyvu;CO_b)pC|did%CHped@0t%{gNdrVGE#fO=uEnzBnVri^rvyWf{FDqS>$%&nUuM zk-prv{3~Xbe!gG&3o7+d%mX!%EJ>bT>4hLAadq%((IM$!Ff6->dcXhRH^eF6QJ3V# zY=_>qbWn*WHK5x!AeD!CaMaw(SLN~3N{Uj2z806r{OLunzs^Y@(S(Ag=5eVGb zZL;7J_|~=>JC`WNdNWL>TB!`GlhGo;lt~YRY;|lp-(5s-fq>e60%C2QHIeXq6sGbS z_m=-t4cD7&qAdjyu^gV>8=wB#|D%We z&x@Iy*=Cd2LTX5gc}?Xu3Zq5r^s)vZok~gh`dLw^3hrttyz0Z{EBnOt`cFp5$`Tfd zf)rV@*D!g=MI#D#v%rLO47S#PQ=@q`&O!a^DUQ#PbrpArt{OPmZoUu0U%hzdt~iR! zk}!Rzb>;kl&wc~0{{?xP3GDHneD(@l`1qAQ3AQhvzVJ-ZDywf+^hv%Q{7}ZgmG9)) zfN~E%FK3Qm5E35phPC%e-W?jr$;`00H@RQW1|N<&6}NNq-mQcHr*DUB`hZ(myEN0pXpYhmzbo+VMXr#TJa zO3d=?G&_^G9(o~lb(Kz=e%w8jMLc7qGM~A>Wf+(DGd#f?^aooL;hRSD+Cr$P)%YMb zY1zD9S7SY}fK6mawtQUg$bi>3uCsLw@xOn`&-+Wo&-;OLMwKG*rQ!SnL!U6M2Z2(@ zPz=q|UC2pATji_@KBaqN?)+?5tW(q%V|JgzPztXcsY}CLSSO&To#|$Orj!sf#=g%> z!O&E-1O?x~{QB?*o8qa!4rgqw1gljQeCEW)U~{?zeBPeQ;tuvnN$RX(7`YV`BaHrqI&z*Ei}Dy#jVzL7qrCBepUSJXVx~wFy7V|`J2j_ zJDhS}OI9qfU=>IU+f{8rMM7V-rqOv-M_5dWmo9Ush>%l%a+lPNeX4I}@_z_gAH zkxp4jE8Bn0E2ZAfuade8t1H^vUaJ(L`=RQ=iwiPXzj3Sn3KW*_iwds(KH+3M4LUpa z=Ppxl#Vv4Eec>pKW^PmLSkD3q+vBNbnLUuAw{Fu|XBdpGF>uf|_mSq%0JPqH4<1iR zKj~IiblT8J>8Zp(o7bK7dT(xkrYz{tv=9-t<}xPq*UCPs51Ka+KdRuS*>Xk)kuBWl zh@9E^B20(bh;|Wf*0V69KMKgMtU1PCg0v{QN(#dFIYU{M0`_a?hHh&wzHpw z!H6!NaJav(aZg9Tne$=W@dV--TQpI78;%HXP?Y~JkKQ1G)};4MnP=k2aN!12Qft3Q zj3I-B9S=81_S8L?M_iSQWCo~E$|P+sXem62Rv&_wO|DPir@434Bb!s6>Gn*WdBgmt z$u$1xVB_i{^N`N@D1X1yDqYpx@+qAOKTvHi&dK4PiiOITEiAV*Z`;BF0WU5pE=c9& zJH~WKm7kQ6mt-jgaNlV=?=uIiOtYNrQ>-};s}^GzTSvVVV5Jm*;v<1gtM`H|(!@=7nq7FB_oB|DZN@i*$@M{)JgB{ZqJ1~V`)0fNvs z+GP1tadQL#l`5rP2z9AWiV!UK6vY_$43%~XI9>b&BtRkDZ2esHErQs>nxqZN`Qe?X zo{1T6Y)Y=Kb2eKChxKcvtmN#Rl4)EyPluj3z?gBje<989TSi%#tbDs_M+^R`eHUqn z7oPmji>Cbp7%gIex$S1~M*EI;q@~zJ2MYlEzZ{8LC$gk@PWzfvg66hE*LKo)%-$9-u}s}uLi z61FKGV#)yNt73u4&QfmUCPr^n5rt}DK&Vy$9mHPTedC>YytU(z9osdnb^#^=yjq-IP0xqs^@=E>2TvMhxv-Jp;smx2Q5dwX-wuL~Dzq>vz8Z z;+TPw_$C$IxkpjDO|mGpn;UVt^FF1n2*(Cr#wo*K@V4hH8Mb5UJg zjfS40|HoPUIX#Zg>FEfkK5`l&7k()}n5;^N7EK+k5hg0%I9%#ceYc?@}!4F^nhH4m~VW1h8-?0 zIwsqY@%rY7svzyW^G_pj=jsBFIAAgyR7l&xgPra5j&&>QKoeWvIr^#!50A!T0Fa;@ z-!s)!r6^8#aCdi4U2o&oZDu38bldGK;hDzT5YPOpwf}}6@k%vkyU3j{>@)*WUft0A7& zlh=k5wO=sr`uX`lw{JAM+aLf=6-JxQpHu#V6`eUuZq~1eEm~IVO^tqSwti#YJ6ziB zd=ew3xYrFs!j1m!F7=AuZbmn|_vukw+~CiQZsf8vCHlx!d|$byxSOowR!p3Mf-);T z_m3!}r>?-}=?>kywavri;O^|swoy5$GSKp%$oheN;V;{b^VZrAFL7b`7>mc0764e0 z1`CISDgBzX`RPH-dq@jLoPG*JS6b7pgG`s=-I^;Pm4l6C7FdfjAmr=1=+NuN$88GeAu zo$)A(0L4?MGJO)#8eqrk?dR1*q$S$odRm%*fQs#uS_LwqSu_U;i;kgD#w!1_NnXQR z>@`DbJ%d;Sh!^J?1W z$!`>aiOQb-e+8yI7wY+`gfE1v9=L?65t!<( zk01SbqDf)T_#~#DQa%`7U`aB(OvmEF?Chh(!QRHupp0zz$f_U`V)$kzg{M`WbP$&_ z4T*Fs!9Yg}odtA8!_n!P0=T?Ob7N#Zk+Dj>?y%n#SP!(f8@^fpo&cx4ostu2oSrn4 zoYk5S9->g=x%Z`^wy=e`X{NFa4ccN!RF?H$%O}^4kwW}-rp(>G+Z``u2Cg;Jh0F{F z8FWpXdZQ3~y?cJNw|BBJ#5YXCe9r*js7Eq89!~Tt56R5Gl4HNRc5m&2re%C(?LRQ1 z>Azc9hom4PG*MFp9FnL~wH=WOx~aw%6t1rvs?cp|6B7Q;ON+N}6t_r8=Tf<7~xSV~(`gL=k6msed!sXjZvw*v7LPXPu7B7wK=c$1Q>9jL;Rx$*6+n zgZuUI@k9ab2falbXCx)UXHSm=cWB!LI+GoJ1Z%!`J`>0hK6cksYua=c-#d-%w{Gdv zAMFb2iq5u9K0>$nN-XXC3Jy{}?%mQV*nZph$wfl?SmN3R(5o;ZHo4nX1DAkS)!CN< zKAyV~yRC8OLr%*CS!}8ZX1FB~ztK{4iI+Bh?Vqpx>oQOII&bEsvZ>;0dai;r;!0GQ zA$Be$h@ofUtI}#x$cfCJDRH>`w{TuUaaGB83B*Mi;EOZ=rz|?DKd_F_-Ncn3xfl68 z<%+=PVtGARv6eTC>75!bMw#66V0rgS6O~QW)n_W)n3u;#^7D+uekFO)Q8|kS>L0yQ%|?|^=D%+1DG z$+imnq0XBz>^eax8Vsgnh89|H?>@VuXU46=(I~4BZZO?`K0Z)@5Ox*)6B?dQXn&~3 zCoN6Gt;R?BtEk_}*6$L$LB{~|t<4M`v>-Oy4@cYFy4q;2kSg(x#+L}nY>weXkyNvZ zJL-(xNf-maaJzl7`awrY%<<9OT%paa6C9bT>G`gJv578+$BCvn69OrlE>S=*0*k|P zIig^flf8LkXV)w#L#E8l8|VpQxfpn@jw4w92LAd5{B=t#yYN&@0Qy!7P%3JnS2loF zKLxKwUp%g!Tt5CIv-z>JrV^VMtUzjPgsybsX32%}biN-O-I{)UYb=9Q?+LUk&iL~p z+%2M`#f=po^*5&j+oVUs_3`FpGTk%=)giMQ+}hpFWAjnOcYY%jbpj}b^#cxF%XHZJy;+K{9MMbTpg2bgnMwVKMXcK++AH!>hfhJAS;FeeDGyT5LU zbVeg9f8-w9KXdEmg)eW%U~_kOXV*00&~g52|L592WglN$TW;qrFft~O|B*0QKJKH? zG(VMTi_WOD$y3qq70#)ybPDYWap_C=pUw@TFy=M5j{F zb}C!S&l0&isTctUB3G8foBjWvVvIyN!}G6k!5PhQwhZB)SqiJ!<8Eg(GTSVr;3C%B z(<_W*E*se$X`6vQfVuG&H6cVo z#fy^QGPz6;(RWFt{MkFrk9+U7++0hPKWfz zFPl*`mV^ABoSCzj@1?io-+r=InU3=O_r6_R!w_dyUo$&#$M&$65y=G!al; zP>f-xb+kX<(SKC8|3^F^p&_v!u=II+!VJ<|>=|qEqp^!bw6V9tRycI@X&AL(@9SQj z#^&EP&Q6B?{X~D}vvewB%6gH{v3%#hknj99bymxr9AS;3U}?!EpX6&U8*mlm5Ze`N zEg7sZQ>3xTqXRL9BGOzeOU6}rD3|6zZetM2^3IoU5jhToby*_ft_k+2cyMw4u9LIW z`-4!*W3#&=i!5qKFkkI7{{qtnvYZO6*j(xjH*j^;YwG#mI5!^LV-_em7(0zYSFf;@ zLk8ze<#ZhOmJx3$T$Cx4?J*mgydUhB%9x!yi~^@|syg*cscMTDWKb!S?8bnHxjQh0 z(p}|IB63cj$xG@d;8#slJ8iR+K@2|xWPF(adcDnRXf89yXs1zvwf{Wkmgo@1&!mH7 zjD-qoZ@rtr{|%q@zCD1|WpwAp#&{ZI*;3>9t7`dwM)%eooig8@{kBeVMLGvt$PglU zxDx#{=U*<6@wuQCkjE3jd$~L{i)`joiXtGh5)CofLg!1E_duxzdWH5y+dN*paDpUi z*HRXesc1n|wa;#wvLfwLEKuT?I_P%yro!I775;Tun(|(}c5NPe%$bIsJtg#xSnKPy zV5z%uH;RGE`RKvE{nVO+0lOE}V>NXUdPBN4W)<;k8?aTgsVmFu2+IVVwr2dstHh}F z`n!0InM2ih`NhWTeIBFH>X}&Mkqkm(^ZEISR9ZeDU1axCU$c9!V3d~l z;6Ifo%1*!=uzO}#<=m?S=9jI0(EwKtS#8U_^a+(R!Y5(rN^T-^5ge=K$X7Kf!O>nU zWd|(+0*au8wp9!pxt5923q5t;UAYdW3E=Js9pL- zxp+UpP2*f5AlVihwPRotjpgv`@2cAQ$0HHg#!Lx|Lo?ch!o$0cA{L|59gj~U9*qxP zyE!w|ahT%jTH~tP2W!SgDqAuiQbDbw`sCqZhq^QWxYPKoi)c*8&z`D~NskSC4Z;ZM z8e)e?W=ceht=3J1cC;u;*HwX7ZlpAdIv&++s4FVZA<;M3@BE0B&%=&gzOpS(>!sk|$B*9s;){{oy@PmJ>+Ac6z+R^Tzys(vuiJNC7BQRu3Za~w(6=hC zOIT><;Kcd&bYavCYYh9(W}B12Xn${)g)J2lLLo0IvvLAmDLbb*P+CE4Y}rJkdL>#J}l zEkdW~_4@f)&_}I|_Epy?w^)qmd>U7-HYUbyw?;yFOl|FpSI@}Jp4hk& zlzJPY;zNlE5&S4Lzz?5xH1h9-P4hmdMGs$&F<^z z;WtuuLku7f=^T02ySVi)Jb!*dRU#LEL7}yo74gY#+JE&w!rtGaDqXc}$;dn7Rnl@9 zsl&brtzBk@qWkX%ceabBrdZk?Psc|KFH_oy6Gju|MIQfkIQttyD-|`|;rFhU%tU6| zVk%0O6Hc>8{FVKFAfYrfMT#spZfIkcY>)aB`gT!cG;XKzjRr_$MA3kfAMGKkTZWk4 z%nwXIH>UgOpue%V+x7=9KKbMQ-$GqW(hG2TOVxCa&i~AeG4uvFkx$;7p_HhEwuJgD z)&1fmBPN;;6sX@c1Q)INk&L{7VBZ=7w!3na?umeD+!H17=|A<^+K@oF2n&=Rrz14@ zC9~B&#rye@W#`SKG6tj4=3(un(WHMxIvjXTyD9)JIwJ%rKlBU^7Xw=ze320}SO(A@ zMO1=yEAepWOS}7&Y%F#B68-$Nb8AnNhnS`7!Wgsk!DYUtI{3j<=rb;7W4g6D5!>>` z9W<-!WO6~H)-*$R_#auqV1WRy!&QfP&y;KjT|J+o^XcNR$ z_Vrc7kk?NhkY2L04|xz-?e~0}jVXMRcg|c8rN-XQ5ZD=hmkBAkk%Ywo?34!R9yRSv z!oNBEEka?Y;Py*QjjX&CNqOs?Q-wPavuig?_gag(r@LZ<@wj%+jzk@6CnY$-7eLxDO0LQDPjwA7T0UnO8}gdGUk zf~=Kn$?uXYqB}DC-PuQO4E*o5Qy`e|G-H;*CbdV~bW>IJ>YDlkUo+#iFf(g07~Ho! zOj8&NHE&MT%1QTyQZW{KG`1##p`kT4@mc3q$<1&$`)(Rg?O3D;@1JjrH1Q7otD*f; zQ9;3B!^Y@SggwlasVB6>@B3>`Z;K(au=MZ06db?3CWCA>hW* zIpbl9)kXC?&7*x>k8Gn4Uv&dUV12f;zW$p@L*}xlK2c;ZQ#ZIHZEr|ex#NbbIY`1l zG&6-gBw~2-ugsbEaWm{IGWB7kQANsGF+#*^2)>*7Wc7D{6It(n`ct_jKJ&@ln5rPs zFd*C-d;bs6=bPcyA2tWKvi44sQCQAzkzTqaQ_dB&s$lI?en8kf0#(kR^x*!0r|n{3 zDpj_WzDg;sTnU-KDv1Ltale-j}JGpd(+kzt=(=f94-hiOeMCf z+)$dwXV_HaiZ;JJ1f*@1VwN!leoys-$Wr57Z!@Lc&wg4&z-RNC{AXro)ka3HS2}Jr zXX<6M0Y10dz*Q7cB|)XufxXYX*dkS(3V1~yIm~D?`-h|8>{UsfuOM|=6#^(8EzOzm ze5D*cQY={r$eBTV37?G1_QM)21K{n8h+{;{Pu|7*eD?NTUz4%0MS4p~h%du(H*FWA zQvBmT(5!u*yF2M!sl7QFO)Oy-umJBJg=SGI1k}Z~;&Rsp{d3-h@tls!YtPPNi5#cQ zTV@Rcgzw(kl))h?0w>+C03qmK>QMlc#+b4vqvMH9$NTiV4wbWJML|2BBtPfK1-_jZCp;8Pq-g=8%qNr2cvS|4**yT-i9P zQG1C9*Tw4K@7+%oR)n*dD3rLApa;viu;&t=$t>1FwL-BZOlejZ7a=W@S)MKG7F~-E zRgpHZy)?*spOD(m@8Ka5tk`<9n4q>asHagg>)tsZJ93D@%Ybs{+@?T8p3ds;aIP7C zoZ9_Qs47u;Q9w)oddBYsb0XX;Cs)o0DQL+XYn-1Ni5yRW02L9feQs+08aGOpQ@j4D zyhWpN{rV0P>E5-UYmAmTR_{@7?`0BS{m?$ud|aQC4FqX5UW<=uMC+l1*$(UctkbDP)c{weL)ZL#&VP-K_a7_qNImAWG(Xvxfgk|%kxkc0q9SP}@31QIA)A|Ql_O<0sgv?|c6Dj-S}Yu(zbTI;zhWr-)ab=8QZ%SVa<)Y3Rx>Z1Lwo=<*K_m8_tP{1~ zD%Zvg7wTi%P>k8_O>j+U3f?6yk+j`@hZRkBm8x*wIOqdQkCgp|yRs=}jtw5a80-`p zBBH+@KLnlX={KjA;9U%xMd3->ff-u!kUeL5IQnoIO8DxPm>7#Ke83%4B-N)9kQh|L zkXQ2SJ@4x+ztiruONarwWnt zo6r0St()7_ykp-+N0d>Gn?I8;L;%L=A|jrgM5TX<*BzSP?Te zx_L~tlA*P;0Vx4gqWCBJQ`Gs0WeZeOB2pLOO&_JeoEqR6a1`}Bdu#tl>m8n1|MN3rA@7nrxE#ht`CFToVtNSq4cC(C6 ztYVfjtUMSV}Nol5g3F;V3Q^>PsiE76=S5g0jJM@EjQh`S8j?p z0C!-qn* zowW{S6T22OoFi_h%R7}1$V4eO1_`@#hP(v63H3DF+@%~EvD14qJqy-unjXbKQ{~Th z2s71VM3u2VV&G|(NQiE{mYzkE%DD->yIb2wiBK?EyyyO!UC%SMh|b@; z0;51T50~C?{VGn}-(OgKLbB&QB#b>K!bTf7`ylR|8ExaGGumMi*z)8{@MCt0VV1C; zFu7-(PoOQBhUUV4<0boC*}+qC(9KeZnH{OdQQrE7#!DmPFvWI^0<998#WG-kPkT$0 z{1<)!QkN!R4W#=vdP}R!)>J3_v^>S%g&BD(bmiYHx`)Ok?1u4l3- zv#Jg`B!Ttd274%H4jA%I=)nUoC>tSy)@0*Q1k3emGBg<=NpgyD^i0XRVq$qzA_ z>g?_T3o@%6v6sOzNnow5Q$^~qmB3PG3L5}#y~$0$)g;C$>Q9aezkp`yHHga*r!)*- zwW3%X=cTMSTHmK}G8HlktpClfLWS^F#~#VwSSlDwN4i?P3lKXUFMVo6A&KSB$ltgR zuAFvWQc|<^hs$rl`U+g(T?Ki{BUyrYCtS<^yT7ov^x1EB&+PS4G2od0kp0bnLdEur zOvw5kGYbB4_$wjxPG@g6F;zDq1_c`%F&rWABbC3T{T+*eS`a?Xl*Ph?N&LSvVK$KG;|}zQ^S1#s*xV$w6^g5h5qUd`JIm?v93sd!f~E!=dh$?G?vM6isf!gy0f~?_PIL zT>z^anUm1#9fG)|2?~Q5b_)^UJlRtlyy4A{;h>RCv$9)!X`g7NQk}yj=N8`g9-rq$ z95o*$WA9I>7p$i#4G=M27hR-guV!57618L2pN}A5E{n< z5XWuD!#np)9!yUw$#>A{4aD{^T0uZtuUuJOU)h-Ov9jT_0HbG$>P2fkx}vGi#CT-c`)zanBh#V>lDwhi23uI<&M zFboVEc+u=l${U_%d4V@I`Jlc#Wi+KO>aP%N?k=7+uoWlHzUt!E*^sWF^caLfArwW!3PJk` zXlSO)*+|8tp=4Y1T34ehI{wW0W!;3YxlR}f-~CF~4bM%H=u@_%gwCDzE9A7ocTtd2 z#g$@QJM|zDE)}M4ueAK^tYOMWAc%JFDgn)6{0Xwj7loL@u`Qq6-QACW_qI- zo~@C=@Pdi76XI^HNz&3Jv$LiegpDHWws#CgGSV@wXA}g^W2@XaQ_S9uKciC=xl$oR z(bPIebW9v2*)dt{#l4MQo!*}g=k7yBI6-fJ}sdJ^N@j(Hmq@>;1KEbx%qSB^sK!x2SD>5%KF)d zAXebUYPNmH{e14H}S;fJc-=9)2*bAqV1x=`Yg|w zdRKNvMJhHbBWd`B4sqAQ`D zTZ|8{QpXwA1{k-NdLlNPo6|MU5N4H_-9i>Y3yA{c;S_@vLBoi=Eonwm&vtaf9JxR~ zoUJwdCG)udBJ43;)#eeDKFZQqBny*u>y`$I6K(r#x_TeQYPhI>#A)z4!o-Gt8H``^ zlD@c!*JldS7%XPkHPpKQ-#hNJ-ofk0&Z(Z_#wocRZmif!$75~Wy6Gyz(>O3fR|hj3QHA_n(jYghj+8=jDIM+8I$q4!?K+otuK+p8eO z?4t2b*|m*U7#Yqjcbu_8GB%5=Yx>DC#^CF$t(}cHS{ym}FO6>A)y0c_PIx}F$?Ck|DqWEZBJ2-}yTz;Jm9ca2tv`b1W)9$hd zX9R|rj1Tt4LT#*%A|VHLVwA!B#)iyU?1mbdQF+@oP<(Z;`4&I>@DQ#Eo=m` z8P~?+4IVt;)P@j7qCm>4;2|Sjk*I&H#kFM)mln-_pUjd@ak;;M+?XDEk5-FGJG7@1^)y|i=6oHNsMTc)ay_1X> z9MUa4xCQdjXv0?1h$=q&2e2lA#M#wxMdjQwW*Y__SseWxMUX-7^N0Z2VMA0%uFS=# z0CQsu4vS_W4IFbRCcD^FliHa$az474-RaenGO(Lk7jZNePiru<)r0qj|i48cU zv-^A7+F~@YYQk`j!3z&X;YN58fXq)!HkCzHc4lCgR+r2ZbM(~%_LlkUvxPq+GyS(A z96Kx1QcM={soAja6rL~83J$LomR`2Lu^6R2T1!kD8=C;&a-pMN%h+`Gvy@CD(butz z_=~r^wwZ8wc>z`#r)IVVt`i~aJ;w%f3c&FH~`>pJ8t>J}Y zcV%HZ9xfLn%QcO4Qq>E)N1LYkV)@q^3F={+Vw&2Q3b7;upWQK8)j`sqkCYx zShtjjh1}Ziy`N2^)=uVj~*?9j@;YV z-{>;^t2W9Mzh=4HYTL_+mDmNC?hOqBmLa-+TzR&EJ&FFES*$;%XW$*O@6A@mif6s) z0zY*@i+$CFU*^*&a<28&tt(pC6i zp%IIT7N+V3s8~=G?1&Tps}$Yn(;aS_bskP0o{usANLe!Dq^W_ElLQW%;PG=HU7fBU zpme-APj_@hs$j4OykK@`*-bxD7X!2TOJ9RH(AVSM;(@J@17a}ji0Q=l_tdoh0nPC~ zJvbc|8rx^Zx;V;DnI3g!%{tHWiBT+8yq30Wqw_(bv5F>+%b#wA<9Q=vlLhpBg&?@@ zGm;Qtam3^EmtT08nl4r+(Ox;jLz0mk+1-e6bbHinC~L-eu2BaG#-*z)^uiKXD8mFQ zNy8D5xl|Ze7^86lFG=8T&p}coBXF><^V$(+WUd8TMuxsV1k%!>^x_HDR$UHQVX%zkk9)(b@_*;&g1NDcC0vB*Od*nfRJ>xH_$UUr zt%&7`!L_TCxmQ{1C3w+)3!C#QJN^9jsT5f4XmGO&wQC>Gv%H;9y#vi{=nf3`++vFWF(3 zy5Yz0^EhV)lB5bhJG*6Q=NgAj(jsj}x({R1mK>PTWZAG{4t$EZ^B>bquYQD3 zu~F2TZ}bxCb)OxBatGW4@F9pSkJh7jvY0qvl7uLe;bKZnfhB;23F4LUA`7aDDC?Et4@+lhu%Qjk_|;naN#u1hH~97FXIApPp5 zgk&x!PFDD`htmD$c%E9LcU>q`M(xoQIuKEhoTQdqJ#gw)&>JgE%4qz!t9@+5R;ZguD<2oV-0{~K_shbGy<-X3%W)-c_Uv@6V{9Fk1+c(kCSf4UdUWk% z)7oVtqW-)sa;3n^0f!PWfmgK&)AR3Hb0FS%HlV+}v4l36Xv}awhY9x%z%@tvJ0hIL z{;S-4cgG}`WHWa6@NKpVN(7|>J>1RYZOfY`{L$>*d(zpV7dfdu#jyy9ToQCUF;<4> z68Ri7KaRm*^m_jeMti%G*IrR$kG{$JrSYaf3YQ%O)0}82{W|2L(Wz`mJL$C3PgSihD;=tr-$a~pyI;E+qGWmuBH1S{ad$&;h2nMrj08jI~aD8BVIkWdzVW$7R}`K$#0 z_H8X$695wDhJQ&VAuy4FJQ^EQENn{1z=$xqRQwM*Q&Lfr?QmmrRw^o;Hnl+xZMC|( zklpfnD;vGt^W=JkCMGvMdK|Qg>ttq(bw|rQ^^F_%@A;5ElFhqEIAX+CSJ%j<@*rSA zD#`pP!}ak%z%#Rx7trUz{P7<*VelsUywaZy8(U**SNn2U`b)8B(h^RONe>}>`)Iq3 z=fwIYXGLYi>}d9@>nf*L9)1T0Tzp%p206eLof>Ov%eG6gh8q64v>FPQY23*Hlx>3E zagR@xm#$Di2WC>(vo`VwGY9o(i-5zdIrNVtIRaWnipeR@KiG?MK`IK(0bJv^LT>hf zZ{)s3e878P7!|B7DOtp|%5D#e^K*00zX0En9%OcU^VV4$W%4q4@l`CraP{Jxs?(I# zCX@iNiO$7wgPGY+{`;B#Tb}SWGw<(u%8P{!pK1L#O%-*n zYl%#$`Izac1Wnhvl-W@~2cbpQzoSTs5mFK%NNQ!MM{Y`7LP)6&Ht1K#%ayo1KK)O; zZrC@Od8&UX3eE;HR*<4vTHY{nEfF1qD}fZyVv+~Yx2qct(F5$Xs!yafwaQho$fV{? z$uebRLns;ACfHO~SSaZ80KH`k_hp&Ha!h>LqosdQX!`qP9Oiz0{ zSPLS;aJ|u;2#=wx2?q2y1aWTkO)&udV+bd&7sJGC%h^pfzf0UMC75+I3N#H{h!DKG zToSvscZIZWrJ%vy@1<0pE?e=DeZnMnDdF*u%xubi{G8m!O*5LS^P{bGt(lcntIJyR zs7eHyI6$&^%v9bC^j~MClnd)-AJ%BLUErMw20Y!6I0F{=M>X!%&mSrAL zN)cnSv~pc@7m;AFG#Em|2JMm@!P?4okJMk?)S8N0%=}#1(rC@HeFL5{2UTNmH7l;I z25it=wB?1Nbk=zEssPOU<`Vt14By|KIqUk$t>2dQty%{{WX(gT3~j%RAG(oT6x2m* zOeCjtP$y1)Mc4%HNRZP?v$=vH06V6Qpv#mjC5dOJ9J=nfVu-KI3fe-zs<0zbHNxq8 z6bo{Y3@|bHAM8FHdqw^MSct@{t==JlQXv|y#;5XcI%enRU-e>)vISG%52z*$Si!Dl zvo>)Fr6sW5iw`__O_o`0VU+#A@VQp%i3x~&xl#|NWLajUeSo??Q~()&z?T z*B)KS945dle8FJ!;>DIBP{Z}?xlFK`c`PtzzY~ySOoL7XIeRq>{R4AilACIJ|42{y zTja045FVq;on*CYN&RDq+nQ#*F8?&AD@S!pZ3mT_vtCDN< zi(`Jy>U;v0uO~YU{`prM)$E-nPy^U_KYNP8kt{E-twVSPrbVq_Z0{Ycr4fVMr^3hx z4uw7LUtL|8;OXHb^_Xn?I(HUpOxG#x5u(b_hH&@piKr`5@yqtk*Jr7QMki1|02m7p zVKHuk8{wROHbWI-i4Jo`m4^gS=Gu+vRT7pVq;pG);|(6d#x;F#?xp?l{Z6;nj7qYH zURg_o10fE~xRp&5^wx~V7ldL6Q}xeavVYPn%l+zH>*&zPP{CcQJ60zvY^`efL29SD zt@65JB|7z0;d)0K{NH`r3O~_hwcJftJwpPY#_cL9{YR5YD#)tYl0N;()kW5zl7!3G zuV*f9dW^zj7-|9{YhCApld>vSb7}GFb;-G`mlm73tFgG&G9b73Tv6bTRLr;|nm|sP z!nNdbH+r9ze^*7)BOVxs9Dcy$KT-T6!D23wDQZTxf!`-4$sn!3-)HBpUX#~JhQ=}R z&UyCKV-B287$HP>+!iwFNGl+S8nmTusLRZ zoNXS@3pf@_&3a@>n=X2qMlY*ThT$Q;4i#cCh=D6sGIv^ni$KIFix3clc3j9iz2?Pt zmpf`KtCu1RS}-la;5JxCSbC9Xil=C+^(~`zt*OOWURXm0z6w2U51Nf_>F*YbWPCOs z8Jk-jq-76!)QkNXm&78ZC)bodS?HUq8%U31Tq-eN^oA5lG6dXRRQ*<$Iy~q}xS;p& z!Aq~j0=3~Vt1^7YXAZI#_s%|@*i(8NNOUvup8cUXb|R+K`GYP&qhfuYi|g?R;!jUH*;gio{%MpA;~DHRgBKO50vs zeEM5t`s8WTEw*ao+Q@sLyf(7DQhltxT9xrxS=-+;jB;}0blCfWr3K>ejaS!1hLA5Cq7QU_vi(!X9+OMFxwRD^R;qWd5x^R9kpbCtt|s+k&+r~p;`$*lg;H) zcio~ z{7TyC1AL#l=W{-RwZm`y-&>)1OI8ac;-9)veTDl!MIgi+{XY}mba*|@Ta)pN`zEmw zG1#KQ{olTuyclTS+|D}(lgx&Qr^j0`&f)%ee*aL6I;#DHMD3%&*6~0o&6NySJ`0Py zkXlEo9&mcF8CC1hbJ-+hvAPis4-HvNSsJc?OHTb0a_VPLB(EbUpZ|1cjTT&#rb3s@ z0^{a3If)Z%Oat9@8afrkCL+=VBpN8fA??Bw_8G+$ia)EfN_|!QnMA;+CQ>@BmFst<1Ui*=aH9%Ke7I#DXUBlu}cX?X{OQ=1AcLf-<4CGdhu`o2b~ z3LyxL|0=dlwOd9;sK?+?T0Wj6uky#@KSKcByy-|4z2S2KCEmGVSD}aN23Xm#vnX*$Zke^egY*K{Uz0$oj@ev zuRxZ)h(1H~`8o9YadR7<%zRFlMXBh$thu%KuLW!_PjnM9l>L6v2AL3xmPP4u>qHSH zD*g~ygfPvNl$m~-eSo87HI;h3^iX{Xz zPB6%YK334C?3`NrE z@P-7894W(LmoPMnFR!sQ944-|&_x+Ucl2wB;9`2CbW{)DKC;{D{#B2-v$MQ(>yBI9 zzB4?CC3&HP03eFI}qQthqKT>+-%6RTPbl8yx{+IH=&(FNxjOpx?!9<(A zSE2Z&wYIQX|I0YMrHIQDl^Q8E#rPKiFuh^F9h|K+m=g;+Ds_UQxzaSDlHV?h)Q!4D zwsxa7{qP%l>_{g6(B>IWLYEE4Py+P1k*7%((sleB4Xc}jw+r3PVzAKqiif>dWiClf z5*#mMuEt?vKw29GYTN63YA0$~N+u?#o=~4)$8;!ohl?3D6@L~QY3rOJ+1}1zZ<^E` zNf|Zd;R+xsq4PV2=`^7r2T@X7IY7g0X$FVM@|$#b1lKl$G<)9TA~BEBM1Z}pzd)K_ESGl}}G zsU>g33-+n=*IIZ;5k0B`{E1HG{2?ik9@4-ss83XXe*-EQwn|-5BtgIh&)idYrKdM( zV#+}b*H@1kY+t)BvQ0Q```|3h_2Vpl3`~D_d$#}i@8TgFoMDyeru!@s6QAU-f~`2_ zV8^7w_(Q_R^m=esGX-2~eYmG&6dhtCs>$B(kO)it2pT2(K6xgW8)|Tkh8r14X~k0o zVBdr#qvuAGY%%Q_QzWNn-HnN`|{9X!iG)HO(Y6ww7fp=r`0bOpIs& zECd9a+?W3=dwf=115UxelhL-}NgM{=v^jY8W?RazLbVrTr?c-Jn*Sa@?xBY^i-d5n zdp@O@SF}ku}_c-F*Dh&dC@qH23+9cg-}z&Rm`ubTiQwx)H?vr(%*UCI{q z>BK9{SD;3XfcR{rEfqyDk377cm_Gku<(*%8r1yELP67Vlr3!U z&vKMGNaX@MQBGKd?vsg$n5rN~oF);ys8k5JdF60^F}Y}lzd~@R?(~umMsIqEVu~_% z@5zZtxyXw^2&@{^>)64A=ZO1iDqMCJ0YU-s0t}ng1;oD>x?~uhUhm<2!wY6V`@b*$ z_?+1oZGPxDFQuntl4 zz1JZXVkm{h>9&~hX-Bv3te~Nb#K3#~jg9w3FS&;S1PGm?@Njf;?1TQXL`Z@l{&Y-< zQ#PS0RH|$(PcTBSJTlZp<01yn4afWJ`Z@pi zC-_$jGrLfNHE~xTib8EISTpRbMdac<$#)aayVbX@Sw8IVlX86v&`DV}vIrb=Y@qCq zv#!}qr_#kmq}OIjQ&!ll{s%rG}Vl_8~M{bfgyv z`Jggsjr6Y&qG!qXG-3Z+_cbc3?o_`9CYqsw}S zYz3SnAgN3dsVsTd`d#0Tw~B0(RCj{Ix|v(&kDU`-Z_{~*)_jjH04*9O{q_uRgiMu# zdwlVmu3Re+)|^d8Q&6#i6y&4q6s%8w@J^{3`X!C^HUZO+gpW~B_!eJJ7C{0<3mx6n zdrK->7B9hG1PXwQ2hqQK?-{_U0fD{VdzF(1#KMI%(Balx6 z>KKev1+o)@crnT^WifLpt{(E@e{Hzo>Qx#c;|95aYo44W%HniMN`O--w`&DB9n7qf zonKHpIae3{UCGv48nHY+Z)-~LT;xZ3CHDWRvu5d1EvA-Q$t%Y++35TS$CHrAh<_ql zPDrw|WN0g&cLEvlNu=qD$Pp!3=at&)oQxk0I7_nFYQ$lx-Qa74inlFnDZNK-RO#md zeUBIIfZMxrRmOI1Z%6ll&{}8z7!phbxjX?<=)H;jShZTCO4F3WGeA}K_^rzKX z_DRlNvQrb4TNy+|ij|AA(L@~i2n@M2@HR zVJGwB*bo`LPD;ZydNn#1y<1P(jDD%qfZjNTgw6rC_O++WhZ1Gl^MNMiZIKyr za_@Hka4^9Dy&dyVA^uA<5yvcrH%&NUgYG#MWo7%-ovNL%@g*Nza5Dk2NvLg%wLDxUrh~ ze9G+26DM~G{39`uqi2f5V`seFn^fn`uafkP;cAzR?}i>fyet)1l_zy3O6eMxm?Kd{}r6ar@u9`o8sWATMb^r@}@)+6Rl6Q23PW@_5*iMlY;*F*!^oJjoi4| zTjxIbobKTAEwQ-Vt2<{>D}&^1f+I~|$2V2-GcZ@W@)Z&l@=5jEASUd5+WN%lMwpHv1hjuDQRutBfKk58g(XCNWjdB%?)N{FnDuN zW7+SWEh4L<0_NPmHx4MS$(yd3B#3mju~xl>gTpY{!NGWT|6r?fqCZlL$TzR5%~ zmWv-y-dSbN^hK4TqOAA?en`}9UA=DlV_7eWd42_tcIjb2g7Fec$3>=0p8+QibRcD5 zK_sap73I*)n)HwE*)~Wsj0iPBlNJW+8zf#bK-u6VoApIRzz}?&ZO<+8RA4a*Roh#J zb_J@kA7C6o&t$ih<=!1L?hdF*ciZ3nQa%S1PkIC-M(M)ONK#4uD24QES0%W0LsNu| z-n{V^2qpHNUomPjO&Z=4_7>#RL(&0w&rThKGse>R_0jNTkW$_7`3Ixs`)kloU?>95 zAQ7*oldj*paU8;5xiU&nJcLRADVX$s01Nddb&Bsp_ip#Ts8#FSOyI9%qM{N@|L%a= zbZR-YIWt1AF~u0KMDU+shECce%;AA)d@zln>odofgL8I%F+)X0F;?cGX~|I60-Nh7 zr43(Di6b8*f`!cZ9!YED_p(U-P>gEPt+C}JQ@x%2_&z`|14s-huI0=W)Bm*lplrDd*YNO+t$fSLF@{vq zxO>N>@{O(S(j>+!?0iF2z+3}bRI!Q*3XYWw%ZdPND|n<8HL2VL60;+IS=0eqt->Ju zg1z(JZ!*U>PiI9L^+VDwyYNJ5k-qIma5~9GMgHQLl+^Gz3_7;5k-w8}szy`E@l9yf z8V?ni$Z^53Lf)N_qD>g9pVE=goX#SB=f>o=&FysQlG3T!jPN?~2kafoyYlJsRlumd%w6PN(mv_aZ#J!Qd&OlBtsT zAMJQ0bD|@t&c-PuXUZuc5K)mBK*gi?C)bv^zA2rn3rE@F5f~n|FB?;_my>JPh&~}= zckxgEP}Vud7vkIC0-@q8++yuvWh){tHXOYxWyUDr!ErXL^$_9=fn~Vo)-B2F8d@&g z(2J0?BcuvL4i!6JLwhyPkF+B2f1Z=8`g^h{&qJ8LjYj?rk<5$AiLigNCJ88_QO`aF zC65=f;;2UOnlD=VveGV2Ds5gunJXYw{-8GUBX&MfQBGHKN59;u+x`6`GZ33zG+HGN z4W>=r$>wNYazpDh%`2{oa|9xNO4fo!z`XCLp91fMJ>%~6w+=E_&$~u0$qG@eA_Wqr zC)`TkU(2i`K8|G9bJlQYNB+w-`g?nbUGraC5ya?yXv5H-`@j2nA&t0tuy^9#0y!O3 z(q^;cJ4u^3us6DKGjU}9=BfXmM8s~K>IjD=Sh|qXG5}++wmh=_D{}O|AVL}6AtGFE${w#Ye-NvjX~ylJ&0pZJ)K9Nm(mLHx?cQ+?M>=4`Gg zvercl4EMCkGBiIWs0hhY zfNgUt{8&kL?z}6lED;76y2zKXPbo`TGQchV&j$Guj|DrWN7yJPmep}j!Wlp)K{xz% zR+$irAmo1IQAHl5T5vuoSu}kwIsa1Kbn1WYIwI|5r>?-1j%HPB0^Va-w>C}O&JJ`F zJLinDc|$T?#`4Me%NlqOTd8fD@WZiQw_~d94HE}tke?IXkdHRp*%MR#7U|CUw3q!( zpHd}5$fKcM8x#f}M88)_Tc%2ng0tWX-}p94W#rv z-5$sBQwdVZm%3wQw0b16oDGW+4cwVl2cl|c1dChPOIN6mX~0aEqUWBuUZ@lq@q0he4D8qYb&QvN@dOf&D}LFfV9{PZls5ZE!`BfbSYS`9Br2{7>+J|EaFZ&@#rV zE9FQ!U+L8^6@t{y9d(E%g4i4Qa>2=8Xigs^lb@oPGwkMK+s@WI6$g=1e@f}cT-F)Q z5cu)*%<;Lkh_$g!$$XdWX{x#jZ&hEP0zr!Amnn;Kl>UH4pzx9;_ z$w&uch>h01#2M^!8f@c&MyIm|aIt|jGrlIhG@T8YGvEJktmqux#E8xpiZLqTuc%*J zn2Dowc}I2Q zp>oTb7I(NS2&^k3Se>63?-|7q%Mq?i4!3-ToL4;Zac*b4Ow$5GXE0}r0tHEXS{2aq zWf6pJz~nM?wMUc>0tyP~u)ls+zI7e^9PO{}+4W^_zQ4JAAa8|$cC$yE+3PoEXI~#3 z@4w*YQ>{lq*QS5XBe1TL8-+`WlGnt$*n6!?plV{S;@jB;8De3w`TbZJbydnBxYqh} zM~l!XfG>*8{mficd}9|wmmg(zOy;Y0rmIjeK|!{1^89SxCGt{yF9EqO*Kv#)E& zfOT$vkfp@GQwU9|I6Bm|2Mom@a!3L^0V)pUF88J)A6yni8Kd!#Jd5rUoc870vcahas-ODh1Rx1>_KS-Krtu5%&UruFs$n%39T@L zz$$T40`Mq{F&5%@6$a z)w^Le`vh|wgWJq~(&ZmB|5y($ioYe2CpV`0;qX*B5z* zS1?6}hU(VD$Ml6fh`h?8=sSLdxRNHwETNy12l*e%-%ob4vLMOJr@|6Shr&&`J4gm5 zDRGQIHg?*HbB3{qtv@FPIeT0J+&GHtBkCnz1^Ah~*Xw$nPan?cyo8P!T&JbVE}3C^ zR|@BwXOh~CsvY%i_&>rW35K9cbS?!-Fjwa3eQ7=mC&OtMN^?qAku;+#b!%jsX#YiO zJ(#P_0c5ECD7I~F_P;9rK`xuW1KJH6QS6nANdOISEliH{4p#Qj7zOSLd-8#Bh~3aU zTNL^BUS;2$CkEWWuxJ+a#}X7Z!O)Wq4z7%6;S5LB)BJB{{;JI8^X3+P)65_3G<*ea zPbHVSeL^%*4D~v(jxcw`E7G2{qFv=b5WXXLj^g0u>?fq1K?q=>uIH>qR@ZzcyE%>9 zIw+Py>%1wMbD^oO|IhY!_~kgamsb1UbN4d)#SXvv^}Hl#2N{u2Fqd?8a55aNt|o)H zx^!(gpTx=XYJxJ_Hn7CRFxp?%kMKkBN31)%oAJ!tyZ6LIfcl_Lv-vrMD+q#`(vXY` z?uxe0)|xLCTApdqr7Kq|ZBj-%Z8mNto*5r6L`C!^Lc=OD00i58)1@+a@rivwlXVxMBqC(M7#&>}07WviE2P_M9ABTz zzoz{CtNNsWN*#7VboR2|sb8me>W`zl7@kxYUbMtI@_LsinEFw(4xwHP-@^~+Ct-#- zRh)HDH-xrHas6JZAv&OGfhj9ASr2C*CUtUDcra{G;e0X0)Y`|QgaIfU^4&<^CP7@> z1Pi6|6)uLo?~fNIt3n`0P!6B@t91d@C72H~G=y#nSk%%k-DQU*|_CgGZhb#@DwI+u;GbFNl< zr~{rHs*lEe(F_@z<+2XW9EE+t8~~^C+X2wVN3+d(Cbzd0tsfrAk- ze<5T$E)r++gEr1A27JsU{!@Ub@glt46Hq!KebzBtcge|0WxziB5W+Z3~H zz>(5g;5bJ4Bd-4uWZ5S!-aWinJ2bYa-oT}b{}_V);(kp-INTr4ns++j-~CMacZc$G zfAU$K9(sgqNFgCsO0~9nAA9j5?E=}D$q;VXMb2kD|4ZkygCa*tH5Dko&|3xg>w>PJ}dI1P>~!4pA7 z!uW`xd+*+zq-0C~!>?`jPR>qZ!A*zeR$uc)U(ysTbolv=DM%SP%oAreOcgragM*3u zAkg_D&;h}!p9KJb!ucqr>!>nwE^_Yx)Yz_UfIR_9x1{%|;jk3TsY~eelPJ($oTl; zw^Nt$)NP^qy`(p+l*oB?bR&YTo7-G^0{C>P z^W$a%$G43snlqi`P32D`w2kzox#PCCY&p^-#tK!d{(&+LP0|tB?_r=yBe}xUtK<|H zjr98v^Z4Vcc@Do^dh&U!F}=_p;HisOeBhM-mPn9sxfHZX$j#VS!K#-Yt2kXaB^fw7cO^C=ETllc@>UfA{zlF)s>^$t z{ta15UaouF{=IvKDwRnL$~kF33CvVm6a8xi!4~^_7O&+259N~osfz1KRS4c`U%s*< z<+ewjBfzIsASf|LuO8Y-B=Lteu?>dN(qAL#pr=Hj<*nGobO;{ zJX7CLj7-q7+Yc1}(i#Y;8`)%~jrzNzdPhI8H_17M;_$2K5YltHu$Kl!^5YT+UslfrV>l zoA(%-VwY)H@oa^m%Od^|=T9=0;6=}JH-f%KP6@xQ93C zX*CIpJ!{Ji`!yTLG@9H`tU89t`j<2R25;WbA^6srZwKOTs;kXDV)K1%=BJ^3(Xl$vJMPGkK@=%Q%HGpEk3GfBjnCQNFF{*F}rN!f<7f z@({_0pGBEfqPx7ZilQE0d^~!7WK8O4w0Fo1(CTV}_-pp~8c?<^(f6Z@qQjYn=#_~{ z<{FYV6@D`qj=XZWrJ-SpA3!4)IiOt059l0U%IGo zXQa5H}9C>!&f(FtWLCGrJ3xr!=QWb3s_W=v)tht}$ znU=dsBom5M`hp!{x?UsKd}*yHCMGJ(&{a1Z2iYa~aZZ|0AEjR|cBbcah0Vq+!`O$bejGnBR|v_E8$_6s#>VBmI1JQ>t=vbG&Z*h~AgCE&|Ft zV_t{Z(!6BR!lgW5^G`mD{;MS^Df+q-*J zWw_5}(tohrKjF{D@NkE|(M{~a&Z<=haps}sll02<^;Lx0vQwk+lhAW8a|GA-Pt>s= zOruxw(_|QlDi2W}rD+kzByLKF=77XVkiw`1zDReLjAhdg*%ztAdg|6XKx!&9?odov zq(uFg|Jp3dGtq10xJh>jHW}l>u^#ik*N6f$Ol3QokO7SPfbu8c^ z45?a5)J3VpL2i%b?mSo8+iNMBWUqxe!|+@oJ1s@2;j4vYArri&*qIPr9F^!*Af8U- zw9pREyBy?0KIY%yWA4mcHE;Wa-Q39PX=wOOq$;@sBO!zYr<-5YrKw7?Tf`Za9J=#T zqQ)^s+|rU+M8XrNXLNV_(}7W*RohdWaH+OGMPARpX<^Am5K)D-!I|_B&u)BObTx#T z)NDeVrE&y z8~NpC_wIE9TlF7pv9Dzsme>o+o|=%oMaY+=AR(md?5w zi^ncs{p9~iPX8XPz`40D-wQwV6Qy4D&ZyN$8-hfghOB7^D~%ay zljr966EwefPG)O*McG`ch?&bZi7llb%62CINhiQAl>DR1MWI7%=AQmsJbJQSVW+R% z?NXwB6)&+XOjEDF-dtd+{{9rLCPRK9C&o*oh9+A$E&d$O}1 zxNlE8T2in)7 zmZ5x2KeSJCIgFXO0Sn-YXr68|R4J#V!&|nryGnS~XP?4PkL!Zr=z7{R5+DyE!UT&| zZ&#(|&scmbxxT(TJK5fq`DLi*=RZpmmAEwlq@xDsFxWxDW5IFngS-2;6{rkip+K%( zgF+UsSmxfnY_Y&~Gs-V@&2;jBmH;lGYG8s{?9t-&K(dt@IzKRMfkLx#>{?}825<}6zQm;&tZG}kAgVmd=Q+B+d<9%Wa!>OCN6>p# zpYLvYDP|;6NcUn;W@{g?U$PI_OLmj_2;bqm;oyD<|Ab#c(NK|7K>WAj4pwsW8SNB} z)Ck%Jf)(X*oNFhls7sGtZgdq!$sY;Q0_3?Yww!{Ux^VUPN?yujN)@Jqi}!C6z1{7sQRe;HSCv8G zwMUgCYvl-4(aE6@4Q(q0`r!Hv`a%~+fah}29Q5Alaol(?RqkSj$f-*7CEcZ#X8ZQW z;tagXNEb23?CgsH#f-=OZ()OS58u|#4J-AYjvm&GA^-PUlkvGxjqSMk_U9X>(1YFqh4pXjV%e-X?aTJeMOkyZVe?ej_ zc`>=F=%gWh+|L)r`7SQ|4l^B|b|JLQp)m*AcMO4gu_tX$Jj_+LtubC0O;%mB5x$Ip zipB}YFo!rKtoY1+b)}hHs^vc_M;6W0ID?g&nlWrudgda^aI}#KMvR^nRk-xFB=3<+aJHmGm`BLp2!2g57wAi^H!KbSkj>uYg!f5YTIrxdlZN zRacjeM}xFNcp{a*vdvJ)WS1co6#pzlNS%lubt0atP*BZ!}D3(sDfT#hRbqZv{~ty zV%D%ncrRx@F80WeI3!oexl=4pa{W2DYWLH@WUY|z>K>Z6epXNJ@8ZoozQ?RA&G#p8 z!4ig5u_qZV@2>=}uy~ujCju7MrZy@}A`1n$N|4%?lESd;&U|Tb?RtC&kh=Vy$%XNB zXr%-nd>iI5S$3MS428ixaw)WeFCBjaDSD^KfS<(4?@!*rf5FcM%;O+;jrHYO!`N!z z@DE+%)J*sO*4+9?c{zF~5zfT=IfpOKf?v+-e4`|>5ruzmlU?%I(td1>ao>OS8%^M|HhRk=|u z>BU(N6BI9&wQAl_`8rKwl{MQ5Qy_E4f8nIY1I0niUihkpI)$U+NVVwP)uw=OjMflf zVajLu=+gSNeU7VtWLNs1 ze|GyywqImI?%o~^mr1^jrs$V()YJ>{Y1B}L_e@Vh-r3c0{|~c}sR5!b@`w9aHfm+M zomg5rTA9~$t_3Y1c;xQ=o7jOK!-G$Z)tLMA40ujftiSTP?v)lS8U|};ggG?N;a>k8 zG@ba_wMQ!(tLt~~^yjW#xqVwZ9@S(bhdFB6i-5>Cvs>{&>P-d!48uiM=AWMmF zX#%8}k`=Wt;-frODETI24uK2nThbr4xClv`vB~ilj~$wS>xTL16{vvHA5Hm8Q!5U6 zeDTN0n|XmoSS* zt=h6+JXl`szuz_2S5v7QEoIa4iIywqOu>%LnE5l%0(>g;mH_N8wmM9j$0E(tUeMoh z=VPgi?%PFfO+{Ple$7@!W=Fg!7$9>z0Q+TH2b152Qw|Thpgkd#$AS!j{BoH4WwPIB zoTz;W*ZT|Vy?+h1|Et97f3LGQ713PUlh)NSjkG(@LE5`GpmRnmE^0R7oaj!ur~Hbu z#wp}@tHtP83%w)STbCv%iP&%qe!xl9Zgdt+5v37r5xt^C~-10uQqm-t35_;)A%pE#}SX-`A$Ad=oY_G7-|74^w_LjU~N$}>U{w!+iZ|w;0QJ^ zgdK_%A-GW&@kEd0N&*7awIQ{u;fS`fd8FN1%t#fZEw5~4Kc+3y&rO_Tm}G+Bz-R9U zW}2=4tT{g>_#}$#)@j=(qd3I~hu-V(p@KHc&|kkD$}cVL?WMmd%;=GCoajrS(OhNF z-`&$m=uvt4a7gr?vbXu)^1M1IPV4|7#2;&SWcJ3RBk09|r3RZ`mK%d7)t}OZB(gUi zH2oK8K=|4$jQVsu4-2sZ(C7}7@?brIJ?uMvc|ZeAW2m3kq4q?z`G-pfiOS0cT~da~ z$NxqJ|1`>=e$kTukkn3*vBIH>mHM`X=QrGQNP&kGPqPrSk%Bk+wo+(&HI_u&G?YJ=xJkOd%31v#k&ThJd zGTlj&SD_NZQ1M%M!0VI43U{()!Eh~sH620=#7%Sp3U6;NE+=O+pyEU#b#$62_NxM-%EjC(#w!1KDjDRMK8LB=B_fYoS_PUfaTR;i0*_!_ zzHGwwbj2D|;FX-rUebi_Za^%fiM2#ahw$kf8|vkEgKjNwqFj+9W^@j(iMP$o8A%Mu zlDc!LC2DYWg?lVolmSXnI(|PM#g!f|HdL+9PxtPMBQaogwpLY3R?EX>G>^)pgf;EW zzlDNLy|~Q^_}jXi-fJ$zx61+j)!4aC&>Pk1gf?h=I)(+OB!nu?X@Hc3SY7aizBxOr z6m`W)RURp7s7zwxa!0=2SSzM3ksJjHR{32Q~| zb@K6h7WWdOXJXHAy|AnSdL_}5$V3WmebXRR7`$b7q&Kn@!_hA6G~}f-ILBeX*x%Tecx%ZqiMx1n6zKW}kBv!P zRBA|V#MgG|(#wf47Or_opH1GCw1QW|z6qFA$_v`%7@ZR^UJI|qa!h96gHnzHv>+8| zuM5nT9D&Hp!5AW)HW7H8Jh9b2{p%9I5EPdWgrTe|&yfv?@A{)#6B|AfH}>xI*iz`d#N1 z7^vfbkds-(0Ft()HR7m}wj}F=07#vyx4a!X;;2Iz#6f@W`R&PQYnMmV8yq8}FA%iX z|JJI0IwPb`irAVL9auvqv&}e8%^Rr$RT?}r_|^DEI;thbH#F#D-Gtn+OQ~F}L`C$5 z=Ts9EK$v4(puI`AV&tND2p`MznrjdNFNyvYYpYwk- zO%q}jq`fAAAC02B$Q3-l zbJST|j?=RkmPv29Dp4RxeRge1Ew^O-Ih$7#`IUWsA+F1J+n^#9*UuM|ow> z(oeuk{Y`TMzoQ|gLcFk$nezz#B-$cO(M4N$EZh{fs%&8tMuSNdvNrY89KIFK>KJkA zHC4nGcC0K<*YSt3a3YpT1{*W`))hU%D`t0hu)L|tI{xK4>xXs<6T^~)pb!v!a^O*~Y^Pky$$dt&%{@tMeQPRDG>PE`SH2FkEDPtq* z^xyAqotz8eFS;`=iU=E)8&514cWYs8e}4lgV?jSKuJL%Tlew)-T}>7!9DFFTutzhV;E;uForX8uyp@k&p_sz{U9D`R;|=fc!UD+2On@* zBKs5*EfU)Kkss}^W?1qV`RZXdO*H^3r_>hb$lbWj@5N#+^C_3F>vjezRWVwo@zAtk zB%T)#cr$akOP3wYu!vU}xmWt!-!nV65=rMtpkuZfwqh~#!_2c%3#&atSb~H7H$k1r{prW@E9IlZsJ~$j6Z=23A@|S$Ul@mQfx2-qAIz zVhUQX_hoTBT#Wz3xgo8whI-TeCag|X4B^A6ATjS{wZM{>R}K!fHjR@}4$7;i=`$I^ zbOgys*pWiWn1K8i>zeLTsS66~Yo)a^=^)H!a+lsm%?WOv{kBpVu`Nnk04dP<&F#Gd zJBhl?;*zX8H!5i8q^`@|bD4$P5{q}~#s(T*TFl0we56GB;|YwoH^E5b=f(MpuphrD zcDq?S`n;2m^xfwBHvC6Kemms|J}j}WxSU}^_D1MN>`P@55$K`#Wf zC6y$X6_XLBGGJ(-_dHjutIhgoFQc`48@s8xr+zO}{8olY__q{xWok@eTru`L`nBst)KfJc z1PoZy9n*GDsp^G&ky{ml#x;I~-@PDT{fqL|ub%m0b&0<`^Y5ae)Z8n<7!;2mF#|=! zv#n9KXN?hZ6b?u!EN)IEicV9cr>HPbvs|5je(G!Bpy}Q!*j0%wZjS^)^jB3f;-6t6 zEHpj;w73-Sx%=@XMX_*UXA4~;eB9j^qZ^;(w&mrO$G&wrr>gX+Z+=x}_CF+gOIl8$ zG(g{^2}-LdnV~c!VSFGAw!o;-T>47hoDw`-0Gnf01Rp6rR1Q-RWsK5~(p%VO+>p>- zm7E5HQ5K^1wl?N%S6QA&Mh%3~qDO`4iuh3<=55MVn^2fWEMGdHU~PEy>nqDijp7Jw z;&w5aLGQ5ZoF-2}VU{UQ z*cYeYs4V*w%`9l>!JzbEGUh4+%R(I~FIsQou=L?1r8V!I@5{I<7`U}zO${8N{Wjo$G28mD zW`4=cj5E{E-fsHYA8XNoEtul((_M|RqP&V}I{&EU8R)q1OC5MxM_|dg^GPU8gU*(i zYR8lvc7{lCGa8rG4P$o9TC5r_%*j&;5qpG(>Dh>hPrE4%m9%;oG|FXU8C^_lTun@p zb6WQQQ#W~b<87TEl}_DrdSHg$U!3?C16EohvysHYN4|2@`-?Nsk?@P!{LKf z$!ylsn9$9wU@#7&SPR=a2)mhAjGIl7U6W%4F^4asaJ5OyiTK&iOmpC{(}~M2BqYHx z_J(jS1KATLLz1U zQF5q`S+kdsD|t49qJr6EkHtCipY#1AY)MO!Mb`U^BTEY#zLA9|1;gEKfvG`G5?2`& zvAD3cx3WSuj5|%39PR3DRJK!v7{KApPFBK)cUY7JT$$aHUY-eMo`#8ZZ|&Cb;{DxW zP%4?>^w0J3{G{B)>*U}6uxYlx6fMfOMjN4O_=*0ESC^^mPuZis+I|!^EAuS*glF=7 z<3#*bCtuZov#< z8yYAn1gN8hl<|iBjV(wJ8hM=F(!i!-Y)NsTa4um9k_F+kWT z-aeS*cKf4UK)Zz(pn;}Z%wS4^^CI2J&2;%zPr z4sRNN(~}?OHbPjL!TLu0Up;N?NPt~7FYwTwV7C8)CpG1n9`}+-GZF`8#segCEC)+6 zpnm4lLd0#roN=}Bxxsecjc74BAM?K1D>&6jKXI1xD1=|Y5>XW$QS3gs;XbqS-QGE4 zOL$Jiih~6CW1WUOs@B{5fuDsEUzs^lP5Ls^NB@YqC4biRsvj5QhO5KJ0vCLYefWJB zr7y!|T+Z+k#)!(j$bn4}kA41}?g5{Ut3x`Gs|$tq;-q4$_!4(qve+p%$WWB7wvpy&il8S+T43%s8P?Y3a zViA+qppBI$F`*%BrtI*8d&3(p8~YvyMxvGv6Vz1y!98sy#rUG6?d_B#G-qQ~!FGT6 zBGtOFv8@-W-@pBJ&Z1g}>5aggM)w7FY(Ek&IT&3(cJcn%nRv`d`iy$$e=O0J5{mu? zVV?rMe9-XQqDIqnQJ8zoi23E5_MvygS`w4VoZr0Zp=6=l&c9si$%lkN{gIK!R@;M; z5b1(}Zg2k%Mjs9pJU=Q=Ae78r_;drzgc$esoZd?efaonW|ITG8VrC0Lwl(jk3f^ zSg7Lbd=^gH+;%NY8EC2thAZoL9Npz>a_!AW#f){0x;E*+k3oWkcN=H&5EA2uo$JY! zKu&W(8O2h|yoj2!Jg&c^^~$Aj-oA&aaeB*!Vl34+Hoo=xC>7h`Wy#!}xnF_A70Hs03O z7jB4MaRJw!1r&*&QPW2=fk+}En{DyNseT9Lz22NR3shX-9kzFSs{6rn?1aN9(4C#{ z^&nt!$;GR}N6mWk!OmgCq#ssPfWxpmY)}T#5iOD;t|*d$SL zQ0Xk`uRJ2&`k{@r(Wkg?>A2yORsOM3!n;;nFLNm7GGa#*Jdhms82gr~W*x2R%NS1nLEc@|cVsE8+au9h0;nuLy+?9>P5r<=Sj@q< z#Gx46zKbyjci-*MiHiN3lOj02c6PRQ>R0GRj4OP7O8fmhYoV*zJac7QD1Go}x5jyrU}=Nq@J(O=7da9-ja^ z1z%wfckeNOE7mU-U@&+uhsNvit33VSVaUgY@nih;Fx+9_n)76qiFCeW(*TCZ9 ztJhYadoER;Fg!66yJ3)VhL>w#;)3vZft(^C*@QU)l7DBff&|D~F!_VIWq6{6_Y9(D z_?{9$i}T-S-J|bp%Cl?|k30cT1O$_%i!vh*^bjgU$Et8xDA`OIh^X=5y1^KwZfO+6=;UP3zkR#hJS?s>YEkCq_vZLSs%8hMlF0|Ut@&;89JezUO+9@y zFm{aXPz$E=ZDne=aB+6vC*#%Ch4+#cJAdbfph}z$=uTFEMNaF z2^9;jNHIB$1xS#<%<3+Hwj4LE>#?f zhqcJZXB?sWCRA*H;@((nKGnr<)?$O%q>Bud^HYCx|GC)=Rh^6u_YU^%--GTtJ1zag zhAzq%^hT=(Kk9L)9r~9sKRQ~rWsL$5&iAQ^%Lr$7WsZS}2NC@}@IZUiV#Le%!sBUC?s_N7#)Vg-SN!RclC9N};Quh>QB+i#h7OL9<;BMWRah|O zqVqiH&H=1E%T4NT-Rbr3KexKFx{k{h7a>i&QGe^Ll$&?9wZ{%Zp(djq_owD=r3m__ z>xP!fLZqzGpIe$gJv%-gjdpi$ojS`K%Cn(K-<`QD}^NFY?^9C!3%m1J>wj=x35`){Kp(qX8ik)uE#6UX`R%{x{h;cC5vu8 zdPrNl&iu5)m%}m$I_RW9#GT8w%V% zLk&1u!-YqW3Wq&04R*K)b2=Q|zi0I_J-lyg25ozWmO(EKSB6)~B{7^^TjTbP4)){@ zQs##4kNxP)JdYQCQaoQvxA@bdG`&=&wuqiZJHBjN$2>HYMM(a;>yo@=57Bb8 z3NQZj&9`rn>Ot@3jrrlm*5M(GKn4|(fc6;2{#6Y=P<j{@&i+H9djko5$S$)5bd_x|+-#T}ycrgNd^y_E^Ss<*nu;nmQT@j!=lSxZ1mR zB5sN-FeXF1$J65$j(6|hxgzYcDt$eE{|}q`r%kE(is`D9XJI)iJZko^NiNxqJ`DuJ z$4RqF`e#9&{^=4<^Z-tBP^pBhQZZ39{Nsy{EUvIGd2W9ulcfdR0^T``c?fn2$W(C| zQSX_MRw8f`@DcssG|RyOP7wY^c1)sPqn;rS>*mc&Qea#ELsC)W@#NOoo=GVxb%ZCg z!UNr!>?M_|ltPP)W$7iRpucd^;gwr=-Pg2^{r&6LG&<2T^t@gLB4kPP?s zH#Q5)XpIkct{DfeOxVrZnn3ik?ExuAEU0ytps3^B4ftFcYbgWdy z;^F6&p%ge-D5_|D^Hc>rE+BqOa+vBfipex3W^mzdL>9TZ`grcPy#D_@^Ed2-`CX0Y zo+2W;4X~S1?kb#FfvMWwiF8`K{CVn1WbK;p=JQThH)eD0#p4+H$~=`r5gsf?E)Jy& zA6r4_2TZ!-zLt9QEQW!N28S3n}(-Z2>!z%Jt|?F+w;1}De* z@|JX+gLADd8dl1Ej*jC?xq_tnFf-3sC~`_ckm~UI!dWJc;pkvlm}WH<^zA_77WR8Z zgm4I{hWe&XqCwgC6kDPS64TAgldc*eF&wR|uVwH_+;ce^U%C_n;$b}oqcRq!=haf( zUVyop|Ku;K3H~K9(Ybv~K4dSVADH>?LKP}5ugm+2Vk=ROgWZZNEJhN89U*cQ1&HSx zai-ASBb*QztV`Fe zJ>pdLy7u|^W{pbedGl-jk9|X0aiAn?Ej-;xbJ|5yZyO4nB-~kANduEBtLy5{bOr`q zt~~B=bmagrUn@#_(t2xhAU3?PymO;3N-sB3P%zwn>3YsEMEc?a^S6Ao#2K7j$UdZ- zxN~JgcF@iW@PUcR&3OkGk zJNr?M3Cem4t0~BUJgIPu0`INB?NIokwf7pLKyh?|g>$%=3KeoT_tfRo$w(w}w-9$epKz zgbaj>fN4lVAORUeD+-7$gD6B$1R}Nwwr$(C<7(T+#j@8@0V4_qTUoZf?3M;Yn51o8 z_CLK=r$66k@Ap*Q5PB`{N$R}kefQq)-oNL0zR&#px^(8wr~ZR|YySb8KGxHD^103t6NW%eLKOqNs8=^%)C*A}a1D{7L(fhRZa%ii-@%@}qf2fNUQCZiqq8$CoDv@r z6H`c;piz!0#J0Eh_5ERF@6J6w>^^qINq<8!c7ELqRv$#kUb$lR=m=HYWJ7L15F-Yd zPHi=CxgJ##O>%rp3Yfm@yNO1|IOwQ7{7>w}zh^GOWQW3r2QMCGtBb_gheN46OLeqOB>a4IOb+WQgQH~yCe~R$t)+1H z{_~el*W8mK|5|G@`#&-?8XfH0q(dMFSu?LEvMJ5hH)LyPVfL)3LfqohbO-Mq4n+lG z1uHb&R5A1yIldYq)`@(|@%w}I^-95~V4m^;vFiGg#<8_u)H;c2OiJ4?U%4!+Y>iU7 zA@sm9oYU8zMafL0|1|ZBqCqcSL|Z0`r3JOqc3n2IC==!mHcdbe#p|abHoyc*K5JI8 zDP{2IW^?-Km(R~11bxKn`OQ+e%8o+SwHq7uRCa$<1RX*kr)REQIX+2WW7ZE=A?(S# z^gVzPO!wd~t~R^TOF^Y%_s3mnM7sA5vH(y`0gPgD^2;?8ES2>%RlJ>6ZoeQBcwZFobv;Objt^M= zRHM6VRdCS*G{8d-BHdw>a8J^degT1!l7fo_;M&g%BC=o+u9Cc{i=5CjFH+Uv$S_{{ zX3cpKyeO5XRKy>s1g7H1;Bmj-x4oqlI+0=sjmz{4uB>TIvnUoRwbH0I^$b)4A3ptF2fN#wbKNyF zKxhr+88x0Qcu(;H6h!y_9v}a1CHXNC*&2!7;lU+9hWJ~iep6V=~wlqS`6dR z7f$g{r@N_BUrIf7kh9|%-z6zx+)XUyk=y?who}WeNJ&AGU|*_CRJTZ74f`ydG*$7< z5*#WIZefoFC?dQVnoqZTmVaz&)*c66Y**&c{O5I}p?d_OD2foRgNeSO-_xw5$iRe9 z^;c}*hFBqGC@l8IbI2*&j7gef0z(eXj1QNI4`LtghNew$cJelwKVY!iO=Q%CaSKT- z_VQO);dgr4kEA<~!|k8fxLD@5&DjO1GynO?q!P(&Um^iuF^R~2)Yq*W*B-HVMkYP+ zOl;$erOX6&EEgSiG89k$zx29zC7+=I5AAdoW+^+5%y*u`p;k3SLLr~35v*n z`-mmxabn%X6mf?j+l_vhu;{<)2q;!@73NLCE(Xa0w9XT(uBK~?U8T@kO~=~r_zb+* znR@(Fzo|3eV{}-dPOGsRkiaeM&up|*KR6(g@BeW+YeR6{7xpYmq@ZOZT=zAeI*+lr zt;<1YCrujqxqb4c(24|d{;WkPA)Q0|JT@bW!PPO@?btPjr;A)9F6MK`Qvx`DNDkW^Glb2&ND#@l+6gEB>4vpN- z6Bey9Smylpt?}cx=e{pbnbI0}FD{sYHSt4SOsE)e-aijp+`X5_9oiyGSSC(UTom@T zRNd~Snf;?7o%@(P$Ir=gyv0n(4~C9aHM(9>dhwva@r3FHKK)M+KpRDE_1u zJnv*&RkKb!4>92f<6BC7d=siD$y?7Z5+0OY6jU!L&G;VZDURgs#kBG(rOhIuSl?%` z)mAvSRU!3<&%TM$epA|Z)4)RZ$?WV$aJ*(bk3AT!jWi_08_)8PAr)=n4yi`z_MUp$ z)w@qTfi>77rbFBDAQMlVa%y3*&aCNh3s?DqxxLsw!^AHiGqdaCxZ@SM?UwVKiM|ip zpHZ!~S`St%oiErwF}_+YN0dUIfGz2Wj(lj@y-@(}LV)=h()8^X0d0YZwl;SpU*X;W z6#vQp-DHypbqwcNfq>_UoM#8gmDLr9Kp~MI`zphXlOtZNjR(@xpDvU2jec+E4~4m+ zT3x@Fd$#9Jk;Hi#KzJ?W3EQ4OkxSga*PqrH<9oMv%uOYqb2m5CWSd45v@+KQsAUI2 zagg53%CbE;=+1DpKxy`K{8f9j{0#nk-E_p_Kk){u@J2~1EV&b1*05V!{M7Jb44oP! z6?bC(C4Qb~re5-*zp0>I=cEt*eN*zcU`k$9x4lxsG*nLf7I{q?$9xTp4G9@9XOqpl6}O}jWxP;Ygc7( z_mx+<59y)t-${_!#WP-3nM>krw;!j3&OZeAUU=z12}n<~$8*p13r)|#2DOxv^L@lVhz;N; zT6@bgMDdr>;h&Ac$#qJ`joacnJ6k`fWsh$kb)XJtq5Hl3YIr{w9USZ(r~s}h(cS6P zxuOS=&+ej<*G^(U+qRknbPRm%om|Q$WIX$qUg~x4Fd?!%JX>ICdNyHeU3UoB>A(3k zP}|$yeC*NQG;=lTV`qESM>u7hzUWVFp~bJD#dG$V{emU}8AB(WykTK#6~(Qw^#l(l z8l&LU=TU|zRQ6N&`of4CUThYCR^jG0HdE(BB+gFpGOgKLvpK6Zve{xvN3dzKnH@J8 zed(UzfoJj;qb4Ovog25G5Zmvb-x-ZQ*C!UMnEO%DEphHid=O!6qY@*`=MAz8 z6KBNFeL8yj=|pp$xDQxHm%QrjXGaE@$*A4lH#$@RM&P?Uq_;bR$8KThJ73J}9Dc8D zB>cC(|I9NSz#f196a4*;>)QEJoffblmZAl0{d&*4P!*3CswmNouzSnk4=bTkR#aA& zF^=^cU^Pp9ka-2gb~xj>o)@p2m2fAJG)4ThRg#Z7*0%l?7N&n zmkd}Z!l1od6XRZ>vQ=W7jY+0b=GLQTNQ$LInI4+cE z8F@2=3Hv@ooc!g-!ZyA{v1J*3Ijj&PV^9iW07tXNL6D2NTTNlMOS*U?Fh!+=-dj>61_|oNug&ZEsA%DG07{nBE3e}l=Z>%H+!6cmD%tMT1&FS z0|#U=BS?EgRkNMJ^Uu>+Mkrsu+UKA7N@npA?qK$AfhM$EW2gUySrqS_`bbHYDDrwx z$WMz*p;06x3!T;XcJL@a9Q&I1jVgqsm9+B-DJcb_6?S-tZUtqHx|o1m>6yBIU3Q`@ zzQcp%@ztp7QnYF-YnjP-a)n53Z_X^trh{A5OrFl1BafbWg_KGXNI@p{v$>C*-djT| zgl)I3PY?DVepDuzT4e38lYZUW4dZ|6klqwR)e$NcJrDZETJzCbQ=(8B=dNE{( z-jq$^bI|-(Snqhdh(rdBEyM++57E^3m@PZHd5iqmW7DMv%S@DRV(r;P=XJRo2~0Oo z|E4k!bCPkq1ahPWgb6%ItiZnNLq<6lEcTm?ir9Frhu8eWOviVU6H&+bImqnQ5}mim z|N8g*uMbRp-PB);bRO0&X6Kf+G0Tpd)LEdk6|qQR%NikUOP$8qsPZYC5GgC_=3u0c znGgbp;OEHf$2a)v{%>pTHNaa#9~y@}>_J0TB)U#M{ZXV5yhzU!yTJpJFgA3D&hH6` zTPEfKmm`(anyO@#v-1q}4fdrpB=YD_-fMPV5W}$g2@fYScQmJ?i`S~{}9;bC{QzjycUht3`ei`b}bq4)c+0ovMw$Sr?W;j&9Aj-KW% zIcO!w`~qa|^qzgrS1EhQVr*ujW{k$o*o-^ol>PG5Pw6kcHT5Q0KGe6akvx=X>_(Ek z*hxKAgT~F;H{{D9^{Nh^)X01Wvz-8cx&{RoQM?x_^lt};H*}n@tg6|KhNPK>;`(%$ z8&?tj#B?baoB7b8i%WuT<~9!cAI0lfTBZyx3(#mc(}M>Gm6EF7jj>( z@gPFgvD>ZOx#Vpx!@Fub^Z83hs(v4NS7LGtCIKzIL|#Tbhoyz_$`^-hVm|)WWNF5@ zn)hM$Iv&3I3P;OU4>zy%rq=|}-T&q~vsVzllwkIa{B`#EPuubR-Rj?1G>LNzHwCC3 zz$~H4g0{KpLPug0St)-#;hwV$vdM`)bz%dtjeRrO)cvm_03f-IrgEt+KUgpRUnb<40|8 zrUBd8QHXtcv0u}1{g0=fuN=@vBNOpPv*6KbrIv87nT<_a<8I*353~$4wQGBVQh_{Y zC5}z3+7p|15!&AkcxHm^9SQ6-ymjm>BOqJ26P{DiF~;vPWXC;w#Be3$vAaG z25Y*DxR<~!>C&z6DK%zp)iSiIsI5h^bH-_^N(E!hXBl>fFZE=IEscR#u;H4$*w%XH zK4wgVk`HQ1{X_rwXloNlk}zvU;Eu1Pv+8TZ4k6$=kW_A!Ag@tT3uWhMUwJITb?dR7 ztR3*%+)RyuyPH`}FBkhzD;R1HM|$4pBrZ{A9!mD^NBjBu+&|MSN)Ua_`*1d%5visw zGY&7o?H}Q|urGN3%pGCQHWheGWgr}U^ypg4DDN>20lCjVc%$2GNv^_LE zq0p}g8rcgC8p1{dH&OSEbi)%D0(TLo_%x^CuZf2(rEAB)CV6Q_e@c=(atR;ZMCg*t zHRc8WDE6@OrY+G4HY=&!70E{WDQcBy91@TjFkjkQqKg%jOR;<=g{5UT2gVDRE^OU~ z)H}s(FhaSvxFUr#WFJ*k)b}8>eN3D}qXDti6&Xa^qN3#7oR}m-bUbFdstB6n78s5Y zSsM;m(+2gb;=Q999-Sl5w3Qt+l+d9ae&&0hD#7ktWBc=W3Jf{mCpTLy3jn@beY z^9q0be-#~mSq(}_Vr!W`oM$IQ&j|CEUD~?iqZlrU5LK8zxHpV#idIC7H0H$vS|{a% z*3nRr)O^~gzveJ{s+gl;hOCz(!8*5=yk7H!O>hi6d=$aA)Fqbu5pFKVi%wV??t&NRo1;A(5 zdZIt+m+5B@9C&wf;*T%0nsOFAwH2<1tGXvllZIY$5~%3ixD`IRah;VYuVK>0<@Y<7O+wF+XW$JX{72Y7PHK7f9g8A z{R=+DE8enLhSCx@C>o^m31XH%aY{k8`l{q{W7CRX2rqgSxi2o) z+9%45LZw)Vn~i{`ZQIL@`{(zD-@v=uKV(~F_#d!Lgca&p8l?mPrh9zI8YEBEC$ECQ z`mh8+YJ!M5rZQv zM^S48s=LBYN#&S{+{9^KDkk1F z6kL^=UV@*30lVYw^!(XKK_4g{boV8Yiu=+~lm3WJzW1;4y_f7key)<`4~H5pYttx& ziQupq!eBGaA~VAK*5MCWFM1Fxgliht<2Uux#fg9O->qF)sE#QaP-~!kAgm z9i_87_C;bNVRkuH2`qZ29B#mK(BaMdIE?BGwzz4d^iTe9VAF8LL_H#PZH3&%#u3Kv z_qKP5=b9pb8*B>fPbQaxQ$3bnX#R@OY*^+oTYuWv3xT$_E+Vu2scZJx`gxT$&)X~G zyG#RWb9v#=hwKUItqX&qQTzYD_QXZ`Hh;NU`q&aK5d`F$*H0vEqReWtK#sUG1b6KK zmsX$}xjQ@kI$^B9*wV^e3<@?US(ILu!WxM>Ev>Sb@o>09l3VY{GfZ8%huGO8UgbqfXZlS&@x~p zWGrtSon#`p%F!mnTNQJ>aYM{8Lxwii(}S9r<7;!;=VEaPmadXbm3rD-p;hRUd=cU4 z-EfWG{SnksdzJWD0%G0nF?eRsToaqD`JPf+^v^A{`#H3Gjc@#SBR3P%`_mLqn?wud zw979z!c$ELCsGuWNe#6cD1LECOx}NBahw8-I9n&tLX$75Bf~2bYb94Lw+qU7S#*st zPrQcOV-np@QC(f%%Yxi8SH3o;w5MFqwZVv>gP3bIh6Eu56JlItbHPL=EOYF0D;5xp z`NcZ#?Hb2ZddazUg_MsTJh@8-a#$eHzw1v$apnAUc`d19i977e8LJK<9?6EgvaNIQ zPxctB7@PqsgfFQpM&a*qp$rjW1THG%&RHlQGAbky6!W`(i!Q^iH}xvTboJrU0llhU zV&T*Y@Rc^>TVO@MTz6I#W4Cvpq=~c-K09O=BCWgS7p6R4dzARPr|$!Tgh^Ob*d@ui zq%Gk-AkMB`SQL`XN7wDk)Bh5`ZbAO~!&85~Mc2S#fo3aXO>Kdl}5&;--shMbS`$Hfr{{+SF>U{KumAYJCqlhbfcfCGp8n5{|~aCEvc z8J+9poWaq>(X^VBgpv{~(c|QgbSS79m8=xaxA@#L!R)jgOmh|Ee?!~pqw)w1B&a>( z^^|4COx*eRy0$ep3r18$P9ohO%u_p3p^eLB%P*8c&ScfNoZTy3^E6XJqCR;Z=J$$cUjzn7k6?0ae@bC&| z>R!(H2>ixhHKK=!x&n1xdNpjbyK#e4ziJ#@9Q+ul)VJ^n-FhN+`mfnJ&sUH64>kKc zSk?mfR)+?d@0LKu(wP*V#L$Ueq$C^QK5v~05^D^p3*eR3xo3ce#!RGY&W?B|&kyX4 z1j$8QIGAw(5ydnQ1ra7ya1AOfWQN1(M;iBPeRGKqXE#gW3=91aO#p(Hv9g7-ay1E>rD#j*iDITFNewQ!0c6~6jko{?tD2Hn9G_}5O zjeN!%g*Z_~v05{dZWma;Hpq7%eUB?ac>exRUE@+uQ8A0mEQ? zmTb9sIG%8*QXsPas9J%4E+_SJ?eg&VBkR$=S^JjS1!kFH`#x+4jr~oa9FKZ0j<^74SAr=!xf4&}?&SbzW3; zx@$WgJ_o9qu{}%(exW=M2az!7YL5+-jGfm5?F?^rnT5~P2^wOq8dOw8=?>-^sooH_ z6wu_9j`IoEXJi#UlRCsZWZnKEdky$#6~=R0v%&@HGxvby{%#x-d(X*bb-*OexRzN8A{l}W(FjD|*bo}sAT>2pSWDHh zhCUxeuL6GpmsXe9>U@8^b+oS@O4L>aLH()q3!N}WY2FmTW+0POZHe$zW$`P?0~S~b zNzsAohB|;i09RHzci{WW=rB&;gYGUc#0wXCA3l1sDwP5;Y7O;IXm~3TPgd@)3 z=z~tlq!y>dNmI$-;>fH(#~0yXs$_LT#?ZdXp4ruLXY7n}0%4fj3oI({wIbDA5!E7^ zTn4ioO=s}*o7`&e$)^oBkVxfJs^hgh5GZl1%n$v);mlY}{(rBU0lGIXpL4_Gll6!ph70@MHySTI|DcIy{u|(g7vdKqgsGF~N`6b|?hT_Kco)~*z zWoxVAVNHpTzO0+#D*ueV@zm5i^wR$qvgv=Ou{k20DAj0!OdD%Z1O_0uz)FUp--|>~ z>7YoMa$%V*!NXAynJ7bUJC%Z8c4dkJu#DV3!xo zRmw~$lAh&)b#Nf2>47e=0TvWX2Gr%touC5u4S11A?8Fn{2p1y5^S`$+^N-(XwlA>#-UjN_U{ z7rW|ov|U*8es_OoNwR)*Gad$qLkBjB`MUA=%iul=8oWkxg{5$w9GG@l6e$%G)fW|5 zE(#Xu0P~)Ur$)e+zdfY$Rndpu&z1=ai;>=~;YH&c7LAZ&31Mg-2R_75$Bdlm`T6y4 z@iwzLRd2C?b5G$#D%QnHm&Ef{A0&@&aT2Xjd0?H`R#>ygU{dO!4g@ zi!Z^K?(@%gN0MF`aceW`hK_1#2iNrT{f2(N#~{m>o3I~iC0vBuE%<{DLfu#`K1^KW zIB|?JF_1r|0*=9n4PZDtXcF#dtB?hD@7?UQKCh#rU?$~p#WLaA0*+E4tf31H)7I-Z zQAFH6;h8_ZyqriwY5^02E=u^@)`x8}qz_;)@#9~MKD#i8c-oAWh} z18gpj@Um zlkicN>HAeYw;fx}>Q@x0$QJTI@(E$j&k~D3;ikKwp>?%vd9T5VMuBAS)0}&uHt++- z1u}$rT6GeH_%w1eGuuc7e7Nh-y68k9mG$|TMx&(wq*%m`4ci42i7)T-R2QG>d9eXo z)ONPFrAXu|Orf+MGY7&`1|Vnt1SOLcOcEvv#@U!?+uBf&Pp zzy_V>DfB*MwvGWiScmgFYdCMhZu`3?O=dUF&8@BZ;mIa2dzxKsY-yux?8_QW*Ea!{=YXuH9#!4@9OE!67N~@a)4uvwz0FRnz*<%w~DBZmsW}`cvvD|4yqxE{N1l zv_Q)e=}N^2Ae<7{(4is2-STN8^)2lf6@KE$Ho(7*Y$=hg<8!4NAySgwl)*OgJ+uzF z;(fl!-2g{1R?vV3+sxG;IyzsMgg0Zu zK!3DC%r-lnXkpW~qvExXQM%W1iKCOmfNovmL+seAgec7?Uc9ak#}*{ZTS->u!luzI zrF5*@@>55GgM08VA z4-Q`Abe?e|=f%GSNK-+SPD`Jge@6Xu7RTK*Bqlmbu4x7ZxchE_xjE0Eg>=1{@o4VF zWcn82d2o-095Q`Zd)!&rfydo}{V%HCs58BvXvd-$C#M86&v4xx@OW2-C~=LIPyJtJ zSN!DE=b4lE-D=1i{GSj8Y+uABLh_;)^$@T|uG^HoS@Gc&ERzDira~{2YwU#ftxN-m zS}BmvD47%shWsf2+!!4@y=eu#tF&)o&Zyh0`isv58NW5S>1uC)jPF@wuhnKH_O(x(`^4#$$oCC{D0{afA?R|=#dotH3Rv8i`(jKttV;+cgr@N z(RYwI$3HBca((KK{)2a$hy0Z$A~#m*M5QMy)zXF$dZAaye3&RUVX2oS8S^)xf8cv0 zH0IpW`|a`0a8w%yiA~z@)@NXoG>uH68o!OF`d7A85Jl;-+UCcLsox9*3_+M%FeJxl z-L7LDZXAMLWti~{|^ZLBHhJ}YLG z3Yzh$kR~s6ZplQ)40Cf^Z?*A!PfK~`f%SV&#}rhUqvUF7Jh+>Psy6Wer+WLaVObL~ zB1fta1wK|*G3M}zx7G%}6rMx>M zOG@jOFfttKrR_@stpOM`kD`=N$UNf|esfYKKyrfvA5Br!qJ@Ie$r zE*TvX{@J*Help2U*QpaWbm_*_cqq)Z1~eW@PJd)7Rv)s^vuywQY#gV>G+@gVaHb_?tD&w!EJ z@iexFOS~>@tHUG@lB&~bhLY-KF38|n`@(g)Pd_8JW$stDRBX(VA;g%`GxjTb#(oA; zG&`4mxj4ojoB9EH*3vo&gky%*>WJ8*Y7_d78VVm2or4#_1fMqS<#oN040w8&iYFX< zT8NU|3zwyKp75%{j$EQWE8pVcVkH|1k%o)P7BR2?q`u){UK;8;=hToF+Wc=^S2i*#qUwved&X7&XrK zKw2Qa6qMDk0Oh6cB$xl$kWh&!R zVfW~yc6imO%%i#-E^Aa=lgH2Zw#UWxEuacoV(1)@E@xZny0zF|_ZZ>6pg~S&{@$RF z340uzn3;)1Q9fRv%O?HA`Vj#T?Bwgy_crwIT;==j>Bhcv)Ya?*OuDD1Sh9ELG4m^` z=xAwaekk&GblhLv+Y_3MR_ac#Z%~Ua`=SxvRb1N{$ffu8_fa*|hB#P=>B_7P%#=8o zcYUp`FS%p3Q=qFb(8A&i=$9HF`zVW}p(ahlSI^*nknN*Y^>#>Yia2|5YAh94$;f$p?jE-{Lcd=biXLQ~-3 zl6a8XgFqtt;h>5DZnT=#htBlJ!>HBX#RJ%C1986Q4eIaDrEZ5Gt%z-XCDSu&b&M>; zGRJyWMX;bvmJn#LGmlbkFKGwg2s=~g+T|-aAv0wLG9+GhSJ#d&*+oP`b=8Cn-Q1|P zaIP|cD9Uv?#V6<(*`4VRKiB}(9GeMK#&BjQ(Sadxs|2gl0#DLr7(o#3zHu5MsQ5;}g9IL}jenyPU?Ap{y?|T$i>JQ!wgYXnzK(>KUA-$M0m=%i~ zEWuma&0)IssPg`muu*OgcQDz5Qq1F0h4ZBf?F*2?mS>-hDtzWm3TRXLWZ=L?rhI~E z#pcsf>-P6bwfT~0{_jyA_K~R{nfiwvt<_C;K!HIy*==`JIH9RsE}no&p>g;mKMj`! zGwKy})?kqY_Pn1WB}Wk}NVt2MGm3fnrrAuQJdh*X*a$)I)`f;1!%g|Cgex zWAk9fLH`3)>=Z}^8c<|#3CD!S5}UqX9N_Y?w4vr(J>qB^lc@78Y-bPB*6isxAGL;JQ$%Ep4FerH!_dpA4}bat$;@~l`D7!|{| zCeC!8vO2J#_{A|0W6$o3tLIm{0gq zmCMAq58g#F`i(G3`QL*G_z|sUmBN*7Wxu^Ql5}HYj`r9{m_Y-U$YGT1Trfo6PMtdSnhCN+l z8%Ygxd)Lu*c205fVhpI~vIj28i1Wk)@NyswVSD(sx%oJ1`rc=20L{2}Fup8TQAx&^pw;C_yWf)brLT-aO ztF|M|sIqp%xfT(RIh%KQUWr+W-}#G2qr5Y@8~51k@MB$!IZL(ZFd5^)3om35w$`sd zl140_rZ+Z8Q&JK;a7KUQC-pb}Q_;_NnsoPmm0I6#X4PMZyDh&piWYMeN3}?|nG{wy zCOp!r-3u1U3qf++QH}EXJU^L$=|$|^g&$_ayFaqHxK7JLlmx;Q>R0*ynktRmT?pCTxV4=wal07q zs6e-l_Mu<4L3|fVr23jkIEO@fBI#7vG`O;|kjT;{6;^34V1_+)I&BR-vOMtVA z1Lx*GTq=2bcCIFu0x(bE2_@q|WDJG4z+4SzD}&E`bBIzf@7YdfgBEbq;A%pGux&0Q z0`ab~+EF#r+!g>XT{rH%n3B{Wc5R#Ic=yCHiBXhU%`T`f!c`Vkk1RhzWHDZ%X+`_o=7oreW1YXB1J)2$!z7T1TzfZ^FcnnXT9GX*flY zBkpO7kqrYi*uxtwKE+6B4hw&t-hcPuVQnZcX2sGu$ZZ@SfrLzyL7494%kJ~)Bi>et zhX8-i`cX;-HN^VO;GE&y=FZV^%%aODHcaVo&rGPFJ*sPAgnr`3nN{^GJo=wC6Yibv zmh-)_8BAvfX*~2C~W9 zTJh9_A#s2rK~v9mGU#8s3j9KSA7t=pcXONX6YK(SKZ*ypOj+t~KLw^}t@Kibqi9R4 zfghx6Mc-3xF5)_xed3AOZ1>NhBIRe;`e0Dd?AqNt_mxlmlK!OsS>^BhLM4w)?))1U zEtXkmh8D5z{h5dMs@%mGU?j90&E|PQMH@a(Y{8?K;pel`V?$c*?&rn;ad+-~IM~?} zZuFgnK6~4}d%4H7iP*pyBf6_3@9Qu0#r@XBXzx95?(bGtT=yNq_U7+)&gD=z zsOn!IwF@C#3D*92oCE7olVbecfBbgV>+$%GJsqjbsU*wp((o~6U?%*L8+8OKc|_;l z8ck?I{lfh6#yS^?!5Nw9o8k3IUgXc(bLJV5uy1IkydEQ#%|ynnR3xJ~q9mhHKD9a( zXWh)o<S$d-kD-_a5OHl6CVB~f>qoR`bT2Q=y$ z7;t!`)RJ3hYpxz=RupON)ayJ2`_*ASwkiR+t`X zx0Q-HvnkPQxNojuv6#-h8E@!)yAK}aDMWh6-;zzZL-^~F z*|TDhz7B)fUv**w`|$zw@Yy6w5D8!(C2ModQ{t*D}x)aaB@NKBC}zJIdm0?7GG+Uisz? zY_hO$?NPAIE0V~iHPuiFChanfRTR&4r%}2;eB?|V(9&jmt=T!PkZ7xfGfB7J&ZZp8 z{BU}{H@tePAP*DG->J3Qw5QXr+SBPN(V5^fv|ac3)~DnP&&Z4HFd5)Y{!g z`zDar`V>ucCIWS_l#|`y8sy5-MFj7;R)qAg#ygu|lzDNt;tT!tl^6?lc$^hk?2LQ zZ+^6V^w@~A>AA~S7-bBsl@-Mw%O;O)ZEA)9O-!KC-eo9wdRjq`*xl2r>3hQ{5A}|A z#hMvU&kAAK9Qg7{$l^;DZlxym0RR0T`0tu5@pola1LCz_SrvTKN{~eES=O|e$#SSS z&eBKTa&$Rqtle17#O>1#zSj=QD;F*}C43t4AlSVLM~BsuII3Jy81_d^a-7Ye77w)` zq)7MEKvC-eWSR8}7?fSkz1J!*2(`UaRLRefTsVenDZP~if6Z$l={-l&!=+B|3LJ`B z^`GOqckXO#5O!9FFF+6Ku|GW6|2|)~#=->%nM0j#^}V?pDmZ0-*;l&X-+5$r#{vD- z7}u;+wnBW-E0%A7-Gv>vI&y?(Klid*`ua_g8d$y7Kh&eM8)Pz1#O( zijDj_c83j*(k1_bk8_}cD@b=y)!VFDSTjtGGrfoyv@`S(iXZclOP9k+d%IifO!wVk z-!{OacYwBk$;`lvWsK-sI#2&+X?~h6z~Aq`?Xx;_kKL?oBQw=z<_U^}1Lye-F#&3Q zd~=L%{`aY$knee?ys*1#IiPN&5k~}W5`#_dC7;v>5mUqtA50|Ip;dtR(DO8r&k8J^ zeq#(1>muA?nLA^9%eol^W8k5!yq%23+{%hjPVC0MY@LtS)^~Rd&j-pNI04_m{-UNB z*1D#m`R+F$wC#MRDWuq(+)?AlsXM?F+Q`6z>_9)`X*hV|ynj+R;YO^&E3b8CuRdbH zf-^1Q%%j<#IT5Atv^Za_&#zmbf6NYen)luYt%tZCf<}H?g=BrsT53kkZ#1?~ zNIh8`vXX@(8$tYt*)S{l?Ncea1o#LT2Xl|F`9NU!C_AuM?Hnwn$nk_ z^YBSFB@{68>MNb`v(J{vOU3U~ z!p1XToWrh4!HBC2Dij>>rx1c9=e$NOrWev&Iyz>0cXziokYIy63p}P18QaQ{S2KpK z7Unze&-$<|6DPxTlHV&Ls5n=;+^?HA?HW~ICLj>oe>hI#b2Mf`1X_{=QQ{{7y7~F* zuNNS?$07lw742JByTIbxHjn&`CkKT^m23wlLY&2;|Csc&l6pZOWQJ8oE; z`#xFlma``@MrE*fOUMa&3+1@Cf|eVol)}pkX?Pe73M_sr8vHk@QOL~2Eb!d4P{uw( z-t(#mN+d;hbxb%5C`vawn{qXat>D$h?;K4)uwo2aZ`@$0jfB<*ng5whv>Edu*U`Sn zN+}C4+Ib>xtBvl_C!;y#PosB&Q?QH$Xb)7n2VC+4%%hxv(5Q^iAZySJY zapeJqTFt1Q_y#eFtJ)cyCZ!fM3LfKoUA_$%H|zU`^?!q+Vwe|Qqj~dPA2oaj044*r zzCO&h(dNs?>Exeta6Fsm&4SN%_A{_^b!@(GXKdr~LH4+}8KjVrWSY?3=A3ENR%31T z=)mCdz8r62a`59iPr}$Ft5v!Na8yS`U z%=0ee)_eljGq21QWL3O_`we9}!#-gV_dEUOw{+&7dZM`BhvO?EhtqaG?Ga^q?vRc0 z3l)d`keMK{Qpym>`aacmj0AeU&mpt8StNhd`Zp9Pp3mFOyM-ua(Yz6E>aYu*uMU*P z;E4+S@XGo=Gy$v2BW1ps%9g*+uJw| zLK~0VTT?fd@`P07i8ySp&0Fu_uk7_g=LbOw5Tf!F&xk!xDXHEW-MOuh&zq3RY2#UW zq=f$|1lq!N2urYk*tIdL=tUOS;y?FnXZFea)M)X!vSmqvTHwl$!uQN8_=Gx|kFzD7 zn0l`@zCe=3?`t7GoI6pDS?yY9Ym>-|AIc!_0C~rw&V}wYnjl_|6QWYnWc1xr-Pt5r z$3nOE;d9dmhYSIU{A?)_>$iA(dykQQTU&nzu>@yuDy!ka-we>ASQqNNg zQf>8~e&&^x<@9nyr)MWl?QcFJr3uQ}!#zMDXpqj=9t%QSJmBEHob`Hl?vi{ZTl(bf zMWsD^IPxEpjahT5U|vd|3zF3ud@G*>Yrz%~6%C#J!SQkIcsU#U9pJ;>eZ}$##Ik^~ zW6}m!u7nwngt;p`IyZyB-oT>!va{XUbwdPpwiZ>Dh#;jDdQN}!7LcCl&OOFm8qOp= ztBNS}XnN`YsaWbCP!AS-Xv>4KV7V(`0f-_*YmSt5Y|6DBP$rQwG-;ssjBSThPDxNK zB*fYe5i(SHgT;slj%kUKc9W3h2MUXm6IRxn=oYo4EFmoBX@wxt@T2h=8pyQD=Vc8< zwffzY%avv=T@>Ti(bI#q8@DJr6$|=)7PM}#c?CQ&*lR6gvU{AdOkaT$E(~`EKO8s# z7#VrMJTYoirC={JRFDl@yO0nZY0_pn%!WPL9uy=A)f-+LMXUsVl*F4yPyw{A+p;^m zvN$)lv9Yrw{4mhDHeOlsba38${TseIb&K+UU4m+#pHuqtU(ugSQ+rd_WzxQs%%IT4 z1}>*%;C2xOew2 zZEoTHONYlNjIo(3TS6FFZti&ZjIQzU{sPyXdpdSuxLvRoMkDdf>CvoOqi*-bgQJ*> zJ3CzU)M-yk0gw%gc`THYBqWKUGAY|iji#(b&+qW976pJ=!QS?zvK-T*X+75oL2pgi zWtK{b*3R0^jPtF}(c3i?mYve?zxFB#eCZ|kM?&WAp^!QnN`NES#Dp`e>DR@rep(*o zZ7h}4gOr}EUMhjAV*MB%QHl+i2c+{sTbUMM@?#a(v$zfHmo6>t-wekG;BtyJufLl2 z5UQ5Fp~*Sr+H@6X5DoJ`>wl~B{p>aOtvb=}M^;)%;7kJJJrcfJMP42S5&DXV?Zi7Y znLH(q*vf{%s+h$&I=#L0duGt*^ugsTfao#pnk*3@k6{lF1=SLYN!o5(1~b)UtktEVlAYBRNsU?AHG<;^doa3zz3bN~hB)p^ z%d*(dat93hT3H;;Y;7$rEib1Y&}t;=L@7Zmh$_3flcG>5LB2wN zu(PEONFNz}hej`LgO>nGAR zWdHw~`0+oXKc3dT{vQ1TfBZsffK^cDp+G|NpJD4Tc0R$~S!Q(+5weI?oU(M5dsPw; zoAfS4Ulfg@(7<9Nj78r_or9X6NwrS~-!<@dcKSm}WGRuQd+A*Uddx4*K)l)L7M4qQ zdF^g$7S9cG&CaPDpIdCW=q@1vQ0 zNfWNrd^E6qdVx3@mlKU2>lp}yO%Z4s+%=+fSRDsdzQvbTn|Jj-8 zd2K!&mDZi^d%$WcC79UoX>suyQ#<|)#WhrdH7gTFvIt;McUOAzm^U+AS)+eeSEq+x zjhn(wrl#<{{m1NvlYR|scRd_Yc%dY=2yVs`jG@oCgXNNCY4!18x;BQ_VTDJVJtM&B z$v|~Ml|-#$5hd8$RnE7uw=a+|RvtE3JeXf!Bj^+Y-`rO&Brdo|Hh+nI_aw>uYW2*l zj>!PJ!Ze`Q(jL7M{1a-NE7JMI3vqWt%-0G_^%_|N5iW9W1gEAfek>CWcngOM^Z5qeHKk z&$hPBCP`-G_H89Jr?O3>_qd;s9G(sauf5utd-8sI3sFyI9n)cZ-FvMQF|43le?PJc&nbfGZ=3(sPlA%gSMKS zp3Vkl)JhCK3W8P<#v^~xDKL_MiYK#AOvirOgTvm?o;<`yn&mmsr(uf8H&t$T&L0X0 zB$jg3d|)*AW3GbxX+cueGcrcITEwV7*|%#=`rtZ zQ+XExP4Da)_z;&__-kf-*=?qml5f`QizQ!0Hxfl10SoA^Qh z!Y7*3`}X})f1#ydD<(CYizr-RSF}>r-wz7q_k)s`MhFV>isIGaVeMODUYHW+Xo+}H zbl^D2AurAz`jU{o@qF*SQL--R{&y_8^)^(obK-$)$CGph%MNhNk}il8W5h5DE|eN$ zTbGaN3#gk*j7t7{-s!jbnjkvdAMj`Q@eI{LyiQac5gaPj78Y z=5tlJDl|M&%gU0Au_4g;M_twxnV6AhRoj`U1wPGx4e9cp1J!q%K+k${So)A$hn*i; z4CVxUJ%v1&`j*q$@fRpiw-xZlQuH-T`))PkRL&pg)|-#<@fb3nE; zQW>45YYrsGxrq~9`_#X&Fa6K6SiY%^OH|x4YaL?*75t!Xt#Mf&MH(6rtsc^Lso-ht zkC-l{3~TCZXo(-%iq8k)?aH4XLB6o?Bf~$Qro^n<4Aaj2XKIpwu@}UGAY}+a>Hut= zOy%t=cv{K);=Xoxb^{I{N-D)w_CGG~<|D_KvkYsix_WkHfjM@92o`#9v?7k*M3JH8 zNAV3lA&Km8nuu%%cUdW}mNw;>CWAQWstr?7uj^6!G7C01P<_|dnk};kii5MCXd+AJ2dAo z2XtNPGbypZsrSFe$aHMjotUt_461*iyBvoZBWI%-*1If)@tW08v&dRuKm#+CwVnPu z7u7~9v9<;o$J^;%yL2TBLZsG5z18g|!Brx4utc9J?qe;Y&=brJ-gjo9CKDjAJbVit z@U@EmtvqS-r=9)0b#gFXu&O>j@h9 zfp8P$Q#5Fa(}3Q@CTT>iNRYUMxDb_v7GkoSH=ca~4H<@s z-3kgadz7r$0glO771YR|*>t>V%WvdafBHQny7u-)$-X|!67kf#5H?m}HvSPe@6T>i zbhDkgr#b6*MV;2t^1{;U%Jx?LMcJRRWb%sXeZiJN_Yrzs5thm4e1xlL`Y+M+5&8Mo z*)M-M+OI@rqKyg=W$TBdcnb{`3-ZdJv&@B@p?5IuOo3;iX5K}BVYOlAgG9CxrfO@Q zL$_AmT7TN51W@wxot{A@pq-wwS?k(~+wPy=XZ#;Yi9;GK4cC|=+9eeWoASd0n0^}C zB;+Kc%hikJH~Z-GFF5n@o7sG1BnFYa6MFYRoK14QQW@>g??CO|+hYu{%a;~ou-lu> zx(RMDbVMMP%nq&z7y1Gbbof{kNXG?DP0ZRgEuAedE-B*-Tlm@|J;>7#@#283k$~!^&ApKUp^hhJOhN zYSfDP>o|*NjZx@!jTMZY;@lFJa<(&JI9GCnpIj|h$>g70+*|pgiEK>{bLboV>jsj) za9ZCn2A#1=dk3&C5sL27{QSXQ4M)O`Dc(|_ zRZr-STp*&XpqaXLm5Ke%eV#3fEUz%(X%~@2yO|lPcURf3)hB$+i0HTO!lN1e-g)dM z>yK$@U=!Y;WGfBjs-4~=GU_R}Nk38AOaGw06&FZvNQtpcRAagt;N*)FP3#ZTSrzvL zd`_#_9`5f>znnfO6kNE3ZwIGw@&SNm>u^r2R3B0g9&`PjIif#3US3^YTQ|RnW?xv` z-Pur?6N#78XT;blK8ZZ$ZW<>>;>f?Km-wGgeb&_HurCv9`DwAr_=4Q$^%yS`Iuyte z?r1e~*{nQ4yf7C_)?-+PzNH6iAjX8uA#X!)V-PMZqGRk)M6Y03bms%oYc{EGuM5NR z3lONUK=1r~8dp51tC}2yDR`M|vbxOapGtQnDN_=YdKof;L}b$XlfaapX4i3_WPcfH zscdf}ew9E8Of_d>Q8ySV^M5Gp+_~{3A#2fpAJUSXmdrJIv=LwF9b6K5oL@RPvR}i> z{;uHW>V}ZXx?#o54t;#vxy?-?fA5Zg;xK5)8WVY$W8(U5)a#iVJ3FnCFh$1FtN&Rj zF25GVJj^r@t|TLxXg4--x+WaU5D(x$4Z)dIO!P91&AB*bFn>RxA3Sv6#%nc3b8Iev zK}!d6Jga&?(t~`NE&Z>}DPA z0|q$mW`o9>zEOT_8P?z>s`q?Up}K%gOgCH<{<>gH2i0NW&8QA$IlgL|G&AX~@TUy5 zhfc|r9eWP7@H0j$aG3;%eyTcytuIU%^*)@y9zO(Ey@LY^Iwy0ww*@YmX<69lmHStSW~h6Byr;pqbqq$6~KQnY-mIW!rq3jr&Ehie$UH&%TKAulWPOxK5{veOZA0$@r?FTjv? zgCnt+pG~24Vg-$T;8ptql^Ub1wZ@RS5%a9Lb7EFEBe{H1jayB#K#1F>*)!s`tb!ci zWlm`bR@Ef2z}t{~;z<{Y{CrJ*5V?)xw#b#M#YDk%tsD2fs59uytT5BkT@rcLa-8ID z=CGwx07NV*eT2l@I(`TZ;-j#tYAGrU8uvE^hVfRD_=>TR2&&3!MbG;vBfRd?i5@I0 zb&k?11zIvyF+Js-J&i=Y?zu7&Wm4>LtkWAU3&;8%mLqw+Ap@y!7)SB6Jl97V?}0Z3 zQ&7RJBt01_Qfl(;f+voj*VN)>Ru}9@DM}G5o!cfKK*%%eK$ewR&rkG0AdKmuy*qw| zPax*d&0sv(!7I3BMQFS$u_}eeI*&1P&AL_39s^@#MVa4l;ZPw-o;S=s=*?gDN-of& zvMswTjh=qCU)Im|PpAI2-A;b8^bpQjzu=sfl{OJ6Rv)&he;b=Ixd3d2`ZnY8?^$}- zd{kPc(KC_XSoX*1dpjOBmE9K{6Bh83+5o(SYh$vyM&o%mNuEH#8&4?f#_KB?!{ zjHXOV;r9I#0UI%9oDPE+D|De>san8#2~bwFg%umF8VycQ-9Oat92g!*tB8m@0hiSQ zF{$?Oc81$Vc*JJ%wAdwOBg2DBE-m|;Q5iDidb9AIaGG-qLB(Tny;X<^bw{s%o^Kev z<6T%s@j^yHeF2lUJ3Okf8^g-){i6KdKQ9~gYt-=k>1K{BQ6|hqS=0a^XiOm_;#IER zajaE8aUII6!5Og?%0flHyzkgB(gXbvg>*KY?1m8z3#BuFcw*2b`19cSd}m{u___wE zN}(`m^Ih-R*;T|x+>8n*sd&L-h7*pCdj0G#Gt^`+Kx#c~xS=t>u!hV#!5>=V+zC9NYb-6>1 z$C?2(uB!BbMr5_0Qoe3GYV1T+0<%Kl`*D({Ga;;%Q z&^J=HR9ryldk7GSHkf88xrWC5wdJ%`W%acCCWWImC8_xSwG;?hS(K(3yg%Q&e#6Xp zFFB1N2g@q)7M?5N>GtnDMsEGrUAVQAN=Bu)dwV;_rU|+_YIa`KR<1pzdGR1L3(Svqw%3x3l;s+21?vs+rC2g;TKX`;OnaqbCXW$a z2oU<4;!aH4(ctjdRkfLiGreFMg=Z$u6kL!#A||vOWmW?!j_~96rda zGV2mhU_(ycYqG(*?qX-NBJV61%z~oimC0fQt%uA@Zt&d?4@Ija+of6pNNiyUHaPdC``IQX7=W zg*k$h@D*y@O!6g&7V62~_r?M@qt0GXe7Gt8HW(gfSDIK3-OKR?2SfR-ls@5~tswrL z$6{L~Yvz}3Bb;{Siaf^fzjcZvbL2Tn0K33v@!{MZ+*gypz3%j-P*_I`8z~Cu?C%-n z=LMrOSpqeO4zCr6Hy(X7q)Os&^G6b?$LGu+-K~o(*F~7+xxNU`_w}rdNBgN0P#W!5 z;vj>bSQ^W!JNN=iI@BIfL4F4A^!)Mh&09)PZ`(Bt?ufqxmC~3yt;XOJVpt#7hw_vt z*0-`(f5<);Kh<&^$}uJ;5{_a`@;OQ#6{+`OxyClJYd|H4Q=!5bj`%P?mGZEG z8?uwY{jAs!FNADUxsgZA)E}iiGs1{uYU0vVH~0hd^Ovo3Y&~G5%E~kqVa%M4O`Bks zj;i72y25-Eirf#n_k;Z^5|)=&4f1fJVS{W^-!#5_#lP||qL}?nQ))L?Yh?W3V7n3p zAsU**`0#xR<_Xvqo=uo-N!sPWg0 ztWJQ(4dZ8TC``s?x*6D5`3bF7_Q0jKU)u__tp%=>D zmhZ+L8}0TfXk7Ma!$p$~6*ub)bahhLCQ7R{Egzs(^D3lntkkHUOoPeq;-@%X1x4pB z!_>iqlSxGmDmG)Ed>TLbt_erg@iA)}e)2gtYBiywb*XF8e92UDz;}V!i`O_ zu`*K=v$wpx1j0{FEimKr@!Q$vD5-AjVQ)5TE%y$FNIn4`+9^S#3|S32afqz0OImxL zQGctM#4>$F70G;mKm3c-OGn4((>>fb&8N3<02H?>`0BmEk*%TZLtmwU-yaG~gd`4E z`ZJ-tz)X@%1OwY+Fu&6*!V7|O{?0LM*^1Tu|kJh+Wy^ zu9jNDe$__B$9{V1zvf@pJ{*a?D@ZF(7gn_JQ?d9)AA+KSh#&>#42ffNW>QZ)-7ssz z2=xNR8~$MQt*<^z9XP@fk}B83o5hU-e?Lp2VWfchSOmCoHu z0FfIoGxPj&ow@7R%p1XFiVmh9txCxR<+PXMvze)}xibF|e_f^@KOn#MZ8YRxgmC|| zd~&ffM2`n`fglqd301;w(PbkE9o+S7H?z^gAEQK8ydSPIuf5R4pVjVKe3hh5#e1AS znIz$YEi{%_R*;y=t_$5;(HdCVa#*=pH4C8_IA2#kpD{C(2k>$3?|%tzh?ZnwEvLx{ zlK&<9mQrIyoRz>7U_g?@Rr>EUnYmGh);TN#2m6a07S@eG9E3#o(b3|(m`UKKyJx>` z!I5TTNbd};WRQ^hxxoRt0EvRn&hhbdrqEnE?DY?hc=5)H&W!8~1W<+xW6|c6UG{o6 zPAEv)9NPqPhJPYFYW@xIbUQtrEm4>K-sQ^?r#HU}N@VeO8AEQC4h-D%XUF=YAPA^etfXeDvDnF zlEd_-%+BlNTUj|eQrVtztl<_v1+23bdh=J^$cT~YIV2^qAO1UPd-ZPC%(UM>^&Px| zzcBUpCo`HSTonEatF-V`OcZrlXw>XP=RE*foXQ0cBcA>ij%XC!=&X({-aa;SuSK|o z8eLHZMqMe~x5+4fE-Q9UJBw7U0#5HR{>%#s0Y=rWYY3*v#ON zFm!X8z*vARnj)wd@U-c7LZdTF*n@H^iw{BAz!N6Ff#GC z`kBjb(^HC7==p_^#ifQ2L05tA6JH6?jP>kz-~U%!W#QVrfX=0@bk(kJjhbp4&Zl`! zG2!BP)^LJrWH_YRH*$7{Ww@ zJ76nbOz%?c`E8B7?vs%(Gj1k{>-GlsfLegs=X(T^NX=xdR`)44)7ehh?1`ADV229{ ze!llfn)U7%V)tNSZ*&C~x>0x76o<^}`TFG4|5ovYr%Z?X?%JE=FYyF^UX-ErKAB0y zUgkfh&e&^qmZ)GG&xw*NwMd~hTu>iO+Ks|+6ZQx%1h&fR3kVhmoqE^R8kJbgTTW=h z#up?0uz6065$DX9XTJCNZ1SGp7%D->yZ3zG1uQ>w=|(ChhFx)AgyBylJi$1!jG~mH z^~r#1hFIC%HY?AF8&oo7z$oL6;Dtu`m0@q`P2D;1#B411x~HRlkbSjTa@gRKBEC$>fV#Ya%hCMKh}IK{j{oRCK5MuorXBhlR$z#N zhS-(qHM`fazPR!IuL%B8&WtV|C_LwL2zy}HoQt_=ZLdVoW6i-%*czkH@1<1+2lv8h z!F(2AXx;N{+ZmAiLGvChJ1 z4>MzH%_RfhVqL>@qZa5c_$Z3}0%X(R7{&=7)|+@Q;gZHiY`*@g-r^3poggmO)vj;RRIwPsR=@w17A0h^XKpo3^G%+sdK^J17v6 zf}#_O8r3=m2pVt%RLyaYd4@y^-coJDbqvqECa6Yh*~bRa78N1kMVBk2iBf`2fjS18 z$f)m3fo6Tm4D(m!O^yIrU1s!e$CrZ9q93-A}!hV&^U844x$qm;_KFFtQLbSgCr32i7u7?>5v?Xui6q z6uFzx6aBe6Tx?e!eMKbQcgj7m)t`TFcjj|%U&L?EI86cEL~uDUb8@}EB-i`Trsk)% z`7m!$bMOJRTYr*m`4grXPHmn>Z%)X4KbY23=3SIhVv!_y8bw|Ql*19fBS0M<3e(4v zEwd3^=UBkGA)p_)Y}IwHlF#ntpC+h_%Zo3=*)ARIZ2~afZ=k)5$N+k4Y_>dm;+--Q zN}?XHY{cYCree^?7aVlHES<8fOzIeUv+_1bK{joFR?!hEV|9O^%_AE-dnq=ktvqcB z4)xUN0GLo~L*7OheP(fKqrA~v`^rgzej%d_!95Mng2snOadtbyd%laSL*Ay7d#FGjwhvPcZ>1@f))Ed6~4e{j9jz%ve z3xlapZb2=-sKvsvhOf>V)@azMxG8Qk*h}0_#<>B&y9W*noa9DWu#DaQ$;te}N}~L8 zb2sM3M#)Lmsy4|@O=mE5cij#x*^ZXR@NR+we;F6V&J$2gDG)dj;t)xQT|+v78EvV5 z9;C466C)#>aXdjI5#8!xoX}Es4p4FKI2AXS>PzgTe{Rmr$(&hE_X>NeX+VsKxja&E;cwDiBz zF&x@$b39&==D;z5Ytu(o2v*F`?no6+;-6NH5egNT8NWVQ-}D8_wRU$fS9v$Op}05t z>~x75#+f@#W6hmA=FE1j=k}-mlQ{9;!#m$Gu?MZ2r>-T9>ye*!2{FoRXkJ}i$Zl{co*|4Lb}&3T5^$f+mMrow zD~9~d93OK)1?xKYU&=mx2|2{XGs`i%8eo>+y|p6-p;}&IiB3_DO1!R<(C#yj1T=bk z-bh!cnC=z}&|5zkI_O2@8>@F34TqzZWpE}Q5$BiU>MyVI2)L)(*DIZX6*#SNHSJZM zZ*jFjXFoBVyp(|So8%5M%pnz(G&zSPTM+Kq5FVS828DJ&pz09&Q)}iI{kk~BThy2Q zcvB%z5-mb?5spZ=ek0E~+$z4292eAxGg$2pO)V;R7cz|2uz7atEow8 z^zh_lW^>+nY(D(_@tw!vf?;wt<>Qu_?3s{GrCzcuX?g!Td2y6p%4oHKtVSppV@q>H ztEiIt4$EzNaw6Hw#-R$!#{SXyKfj`u#c;^OLnQ1T9VXZs(K9W2{t$o;N7Bn?@sNzg z55`7-KimayoLf#ebVwhg+d-|lZs|-OHE*UvDNS{`TTN8FzGJ%*k*d&F=aHAfpfG1FL z-dOTEI!-|zx52Ms#6LZiUNtv($zHU*o}>xmL2c4Z6_7|LZQAto;8MgmepU|c&F&-P zP7s4Y3rgheABOX5HrZA)i44(ghJs{PS~`K8lvt&XlQhm*09DdHbn2r?+th{{Hm+Mu zeQMY2#$V%~|Kpn79O}gtZ}Jxfn9)AL$vmY`{CHjR7Du`DsU_4LQ!&Zp)lNU_iTiF+ z8C!o{@0ns?Pe4+7inlzq+YSxg=dSK)!-4mNxjgW@*4GTV`U!>wf3ag53a2Qzdj3VH zcVBp(CA6mJmw=(Q`0lI(np&wW%B90FCzw0J&AR6BaEr#s=U@Ye$( zKFpVeJmJgPT6oZFM8MPu9Cp$ z&gkfrogh=kbYy(%P&ph=t+Yth2<@75Mm*Tl%OlC*@mEu@#L$A|aV^>P$H7qV?sYnf zcCqE3xAm{sC?d^8eB`Kb-{Q-d#=i&a4AsAhV5R3#K{WL?>dh}ruP)i6rgyPc&zPnA zjT0HZSgFLKIg~iym~9mn$X2pgrExx+bxMZ;J)O78sEIApELPY*$3pGmoYvyWb;4NQ z50p2{dj7+f&@@I{hA~@rv*`+!W)_EQtR09WyWLK^ddDU9CgkqEwzHe@_V_;YteGIg z!y^F=mP!0kcs%T%oo#MHZQ|1JJk2};0mCnj!EJ>EP`el#PF}m}8^)Uw86g<36s*;u zkg72Cy)ZOp_Vkwt`x3et$pN!;%V{VxC=2fLgOP6Jbh7#0<)s>-?%wqj4d;tDck$*Y z@aEIa?BW=K7pon#3>#W+A@~wG!j<(qyD(EGYb|}9bNx8(_C?g|K4R1=7t!kEL~2{P zwdS?T9sUo-*xwduiD%l0baJ0!7sro3I0y=XRva3et#gAtloBKBUxm@x(Qw_!0t2f! zC8NLpjWOU_9EcxEqDV{W$*Te!Qx!|f$12ZHeVY0d+ z;$Mq(>92B($wDSwFm`6-m=dQ=dF5c+7UzvDB?dku?@RiXvghE_>eAY}<~OWqaqy?D z=>2=ODms%&{}69<2>&+m!>0NGJsRem=rf>~Gia|Ys{VLPeVBn8VCAYSpHoESS zN{VoBXMYD9TUnwXyX^P`L!Vs2yuhrtd+_|>A-UFvkOm4XA4_qOcgaH7Q0$X|1>oEc zD;b`ykg3=Ce3k&V6+N`9m$B{DN65QP{B)pLRGQlqH446})!{{I3swRkKSP7FYl;R*<0&EXsfc;H4B=I3nZ;JoBlvn^Ea8v0+R^8z>V ze7*DSE}dCZF;#tXBn;M59AeYjFoT;IjQ|i4iw%qNF6bLmtJ7=ef&7e219jheo~>qPGat(s`r2V)7B9M@+&5$eUn6k-l=0)PTR~4QIF8 z#%>h6l?1j-73R5!UsZ_7^(NAnYY9<#haOL1e7@&y?&&Vf1L*?iD!xLr&x9g*x3Wfg2X@aJaTXE^?|g5gKKzza@l1B7tPl*q2DJZVmgu^9cK+x1|&+ z0KmKic_J9d^e;r&7axigwdSQ9 zpM*}yK4w9;MvP1UH70a;h_u&F*r=8KHdORSSi!=%<;fA+`wTiNUq=g8(Ak8lKVq3p|h3c*|8_jngZv5wgQQu?9TQI zcU<-8uF}6Gaq!JN?`e8rVSRmpTL z%eHo*1sf~}WLvVun8g+`I2dDm5|)@lY)nqPB_tt$S!^ROU~_WFAt!K1!sZRxU_(Nd zKa|h+ckk=&F@$+i*IVwr@7>?N|4JDJC?1Xy5^BzDKym7dGtGWs|C-^X6scN1V;i=& z%R27cJ>2d7DRSMO2{$*H*btt84p|Y`K;DsGJjuirbj)dB*CXR#BN=!BSKFyn;0o*- z>mH08-M~th!Xu!9>5@AN#t4~GSuWKE*vb?of9f((?qU=T?U6@?CwisCNhMsGA+}OL zC9oXW>cHk$NXi3#3X3jx_Y-Ryk|&uFHME6hUN+E<+;@SI`U2W{JW|F_C#z?O?Ia#K zTu24D{H$E>f=Ha2-~D0l=&1jv6T=}R$dk8gAdy;3Mq_wcfR}9dhO?^fJBZjyW;-2q z$X3po^y+Ph_~zu1!R^9UnOP+prddK|7^&buflruwVn(e8B<(rw|)^JIAaZzoKUu`pVkHgA03d>e=YA|GOiA7L%4V{Ty8=HcC`&@@DT# zFvg1!f{b6kwH>+R8AU~kttn=Z^pnh-oR;5gFx$& zs_)*~27Q4#GK#)GZ&4TWu!}VPCM5d60<1iNdk(#^aXgfWYlTX3_=14G>L8s?1NJAo z4!bv}DxzY>9|FqLWa!$iph>Qg<6MF6Eg zjisxAEDl&av1MKsT2a`5D-6@??r&XGFWUWFu6um)#xLrM0e!6%9aBC9tIG9a%?0|I z6-H~RsGeW7tp!K}rpw#9k&-4FyLAYUY1YukPO!>Hn1atnV-b zsEr08Br(jQp2RTAQ7B900YN)a_~uv8q0ErJvRgzatv zZt;ZOH@pO8aPVp8&5-(xysTV# zE%(Xmi7hZ#!w(3HXr^eGrN6jNe#!hZ1;RZ3CryxT$BalLEaa4!r-F%WCqE?CvE*3S z&ez|V`#yofcDgIrULdesi>siNQ8#NwSVhL$)3a~Z+K&e0)9m01o)(ujEkl!D3m;1_==&C3 z=p~^yx^$8&%gORmAENC^M)Lfu9WF=BGF@I}1KBf~H=&LvQCG`fsz^4C$YP+gmY=-edVB^9EPo+Sb z$VyN_DsHj_Tl#4A4eqK;55{T|1{K75(X&MepjnYO8?L;-1V<55MY^aONgXm06b$7l~}Y4Ir(-5my8Sj5$-jWRe8+t zqyo5Amq8C}8^SG87X5Vz!RVIEsi<{N5ZG8r{r=JMwiRkIyP3(oXP23EzHXjl{u6fI zb4rqjFzEAScPANKpE)^RzD!W^@5$|_^@5C+?5#3n>4S`+EXUF$qf5sWn>4H4KU9Cl znHS}#XO@9ojaw_(LvV{H$HDaMj(%n3g#rx1$T!2_sl#QqMU>*{4f()dV=JU~uaTw0 zt)SpxH^u!X=+m%pNz{_5B_P}UYhksRt*}=H1|Hvz77c20uGb`Zacx9FrEl+^MV=D3 zP5iRKber@0RDQD-CZN~(7l>ZHF3xemE~AAdamm5<=JsX^+SwfoNruZ+dy!z84fWmk zPE`pl8JbSKv6-Y?6Dn4=xFPI=IgEn|J7w*`bi+nBtgFm(VLn4znH>fP%uftnQgX1e zxRNqu{H926I9c6XWpu9+vz`9wm5gk&Qg4N^-GBTRAIKWB(d{RDyAiw=Qm|22CK&=h zTG-fF(9J2E7vE{sE~;>DZ_qn}YytFamEcI^Rre^Ow?Q6HJ4C;I{_B+yHMRG1JBaGfafiH&P z1z%lC2*nD&@Faa25h`@JvSPXjmQ75EL&M}EvI*0n$$XLq4q9W66}8~6o;i2_#$49F zA@=sJx$g^yk)D8?OqEAz!g|V?JrvM-V6n_pDVf&{aLCd0po3c_*d9TS!gjG-Fv|VC z{g7e*fAGkvapb=bk>`Kh(74WIq$M6#>2zk^W!eVYxn`V=2Ny3HX~M-(!;qLrf+Z`_ zT{rM*#%3bFs?Us!@(NgNs{um;2`EOXj(Au!Bs*uz5(WG& zRYs$IC@wOQ>p#_i!(q0QM2tcJDV#==d2Gv!WG-#2?&bMQ1J-($FKDdtj-uP`p;v#@fc!-&OQli=A#%wEn~K< z>5W7)JRXSBhBaRyO3(j7I6zoWQUP@@P;~vy5#Y#ViE7b*v4|4G8Eo2GMqBh(4lXgv zDWTn|nFX;h1Rn$uzjV68epy|kKPakXB*GR6!Yi)CpVVmDoBhYBTO8~PyiHJyc{ zJ$&&zGXfH$3HQ-{f-vYLO&ch8O$8Ix=O>{vbVbfHiCnNhRN<2W59F+&^elp;MMkM_ z>(?y2zb|h2Cb^~WpZn34O9N`SETp6dHSE_yzqDB5&uI&6pdb8ryA2C@^VA!sXZbWP zcI?(%ED_E+kgRTx4Y@#H?4M)uIM!98g3lXsw>d2*X=W^DZ|vH0HG2d}&OU$F_O47) zYzO8fktLtUPoU+;Si{T^Y=DPC?M#i%hRA5VH6~1|#!MPlAlvOewxNO3F}5{VH`HavK}-~A#p%!$})My9gnCz94fY%WPX)@4Bh{Ca|dyzr&T}XuDZRkk@j8nH_E2yE{r` zBxZR6Oui}kUh;ZqU29A&bc2P*Owo{O1dU_zMBSA;<>}Usp{BDIg1p{Rul6tI{yL5O z=4PgI@X?|@Zs9`;XjrV0gmE{DSsR*pXe2c;$xsMlsP?TKQ8grR=P_-X@#}f$r-Cjm zQJt4{fZ539I)p~FtUy2xLi|Bg+_b3nuP`&Yf^DTNt`cBs3M)B@dzpbR1ZnCki zZ0IEi{Bykg z%-kF7U-{7756!qa92jIp^Um^KHF<{ra4$BI&)Ufp81v*9z)$bSdM*Bhg0gx?DU&OV zc*(>n4<{dvTE&jd;}8d-74L89CH7i{6%wLgk)7t(wBfV|PE8^CGbfih7{FIa!5WoU z1!b6xFf_@$7naMW?gVfu?EZ}9Ql#J-l23^zB-kVsT1X3R#?pBIkMDAJ%@d)Cp|Wy~ zL?kbt>@^`e;7cV0)5??RJ@MAHNs5qqMi+H=RlEGSk$JJ1;kWzLxqoVI!Hw$#!s#iT zHd)OYWcKt^zL&iCGTZ5eFKC1APVX!xVyf)1WOuFm7|S3YPwsUuZAyMiDyA{>JjsP$ zS=);W`r^u=$#Ri55sz>7D@IgG$2O%Nvje382mT$*-I2%sc`>~&v5EELCY*fV4F3?( zh7ZcW5g%$%Q&Xzo2HI}7v0?HU$NhT+I&USMo|8-5pCgaD)MMSVG!D&TQO*ttY38f~ zNccaguxS%uZXzA75qqf$~r5mkQm%)sTh2Kpvzb^uH$_7>SfqTBNEg>Crl*~fXxEQ3m4GS zu9c45Od{8&r1=j!T3D8VOnnS38nxMHHJHwrSPADB_478->A+eA2Ph_K< z-@=DZfwCN%Vv{TzbdOwd-HV>YSt1`oP^x-*b~bn>SqGIF<9?NmUU5xEruxI|fBZ+~ z3tdoE^Lu%#|8R!ca5gx$3K~{QNd`+nP4F12x!FQJd;S3XIhXXj)TJBuD8>qg)55-DbzZX zKABx27ylU~u%|{a<+5K%H&P~CDFk6x-&8j(mS5dCOTthXOv$T6aq?QeYJ1zoP!Jak zl5}RH#NK<;Jg$5{9sMX9kpcM8qjTE(X=YM#aB1;X8V{bbto z@XOyy$Gm6mx10O zI$MYn=`nkawxlTPxMqV}`p1-SJLM5l3q_&Ihc3b^z4wOLO6S}^|1=)1l3#txuZd`} z+9{2P080fgvL{Eq!-HTolGqAmgD`i?%J8y^8PG_7aXU3}uy;N^S2`a;oSj3QRW9%qp}GjvJdkLmOkZJ-7Lh(0 zuRFh2H1tR3RF+$Ox~LikY*Ku(%Jvj8#b&}jE;#HB@7x}7qJ1vg<853WjUv61@gyjT z&gyiIQv@YqHomYdQzQa^$NOH}y+BD~h5`~8=piu)5XaYrIb zy0)e2I*AqTh0k1SoM{6Oh_W3A_jpIZS5zMPIHsgirE*BcTwq3Jxxzy-OFaL07Uh3n88<)Z-u?5x zApT$qtaXsFNw_~yOKT>1R+4i=bVb}&n0?IgS0d5j$uTUECcNs?*N?_A-S3N)scUGY8SAab>}LMRMjg;(5M zZ*=r$Ytj&PFf=@6RA?dDyWZMgA~?po+QEb8ka*mz87Fm)1y<>(#cpy*0}asCDt%fx`*(p%8? zaL1TZgUK^qC2L@;LP+~v-~E$_z6QYyijQo~62i%32^q*_+7TNLZe-b!ocaGMA9Q=} zE6lF{elcKbWaBT#xFyVz+&kiVx6ZLFw=1<|PUJc_uk?khbV`bD8u2Q&82p-DcGgSnP3 zX#ORPZ{Kh3$*D805TUtuKl1R;hzTaNKprj3Yt0|5n+Yn7li3mJl*Z-6hmhsUE(2&}-^j6=zlv3l!<5FBSaWV^fN=9pSOR`;}nIeyAZY^`? z^$GN_zf>?ud@wi75XxXXX)Jt`cq-dZRUj)&RnD;Y+e4y#esFX$=|o)hFEGfuql;;i z=p7vo-iaMW7>Zr7hV_uyl+clTcI$M1Y(b=MrbQAX6sXy`02>FPyT5iD zouw^H6fxZ(n3-Q9>KMg_cu+tQ2|5o6c@#xOww<0usYW~BJO9MqzB}ESW>;I{rbA;L z_Al~JBU-xK*ET$}BB_6J#gt;ylZ_EscP83SAfyI-d;9pt=_EUX0>b72BUNR7netTE$C&&?@r6tTzOm2Nm2UuVub?YfTT$w z$?V<-;tg>xiLuP5BC9NJONTcretPQ`uqTo@R)~gnWoycp*xuY#=fbTe$;GUOV`S7z z=}~9+$;j5p=>^FnQBur!M$G#7@W+MbhrMimPFLqgjs2`s%0 z@QC+$#Z7pS75dn9AQ@~;&aUmG;{)KB*!|?ek(s;ePd6XCHRuWKSl^0PFctl^w(xQs zNTX!T#YvUX=ox%N$N_e0AixFBR`v~o<{y)V1JY8Hgx1Y!MI|AJRZjrx6-RJVO!!1b>wMdlb&jvL42{Endu}adXr0cb139bV!LIf<{;=EZb#7jBd);d{ zK(Kdk@pvdU&!m&ZCJWy2r4ed(?y?&K%=xo3XM8LqZ4-)7LQ0>K0E0kOO1-Py*fS22 z>K>EF+uO?mu|vZ`BWxmD`osOVml&2~B`W$?$dS=fn&K&W-93)CGG%E&uB5zWXE?J5 z-dE}N|C!bJA$wi3J)nh1$g-+z8i5!hMxUo?-)$ZZeQsAuKgzfwD8n#A9&OxaHC|sLbi0ADlv8J}$TA-s#tx6);+!#IP3?Sw_UhKpb46 zC9>WfwJLKNDj?*%ZY*MQU|3#ZIrJ9SR+f2u6bBbAHq^3mAA)(D^$ZSEX_LasVK*Hl z5ew-e1N0YP%ip+mT?jk_nazT_ooUkq#%{O&DSC>*MemG-l*>s{E-$2=Oj^8!adDJ{6XC=ULQ@y=s&pA|Q2^3Dx;NA5q!9S0Ew-f&cF_%|WS zL=>>sj9Z35YQ2hJn_;S9nG#vA>YRFacHy%&;EjY7gAsFK!I*0ig|jO+r3>kUn_W2H zQKVKs70U7O?4m_SDbOt{k}yMr(j^I~fB5J~*+({44+qD`!@=oQp3}h0t>9>1qenv3 zrx@XlKn@AGDoHYbs^%?$kLXcvWJzJ4p(oUi7rHkTqr zbs2dpMMiXuZ%EYBxFwfyA)N@;FJ{m}=E_5+t7K|}IU{1@=SiV1E2wwmlBE+u_K+6iJgY`9Zyng&}BaO!frRN zcM&3E3gyJZ$@_F?{v>ebBHq)@m>^tl9`(w;3EpT$R>{Pc%@y#9!x^u!2hDjH%&nuh zUq^4pq{n|e_usQPD#8(wQPR395un*)CS~v4ZOjg2gR-Epk-rYQdtRE-Kh4&ek~AXd zkth%7p$Opah}lv3Qf)w6xzcFUcib+6?&O#PFuCRq=|7vB*vc6fGM}J`dX&q?gE$FA zMN#A`p>=Qn=v+i5hDID2BRag(b4gFU5?#{pcFUc%$DHL*27C>7Scel&NuFBAWmA=f2QU-QVmxNjS4` z9{(_E{H)wGXn`VVsZ2`KrkTh?e9uT0e}cMfwz^ve0@2p07t~c05KK45gU_0n+p)n~ zckeY0BkbP~ffc2VazRUcUE9^lGWN8QOxr&43tgjr;eFp*`i>`1c18V@vqIQKRIKE! znU*UN_K22Ccq3w17-X1H>1U@kBcbUu?_5j|Mnu#F<)9%xHWe#YNj!RKIuLQ??p_wY zM*V@e{bULN=MQkbdSX5Va^gIR6(qbGmomb@yDVcQB;Mt^dd6N#4J;X%yfQDf%9ME$ zL_w_Rb%lhI#EfXwG{hDGlh8r(0Ypvd**&z=>2Hcqp@g7;F7jK@ezjb8wG5#k74-M+%FH7 zaaMbA-Cc%ux|~){R+6AdemaM-HaGITlOV%qu9OR@1V|2mC=A`YaALR)#yTUk1QsCa zCuX`A2FkaQi$-UBu^*YrYaeAajB}kYLM#mA`@NfMZz^+>Q|m-0cjn&qh5vi*hjp&J z_=rAk<8h66L@-SZrJ;JnSVHLRxGbt!9azS#9A_H-S8i|lZThim)KjWI%r^0JRA-4( zA_b{7H_S9xT*&G+LwDI6`o?SH!l*@Q#bl6>PG*zn0BVWw|pD!tJaCejf}}%Y?9llTfxbvj%kZ{W!}9gR&k%B zDs3#TD!YRS@M*EM8xFVT5thbn#VjuAF9xi?pF@v9Gy{3D>e^Kl3gt%Tj2GlG2;5{K zh8k_$RMu)G9HMiAs2cRXqtib+%IyWkn?!0~_aLbX06?a1J9ZZS>M3Wc{72}9ai1v5 z=w}_XZ2ezCxT$8!=upK{E9)CVjtUdawQ!Q_hy#pmX7+t390J6nmnM7hNE2ks%ud0} zaOthb9FK~xU+WFc{y?D$U)cqsb;ILhpD0`G4fgkVO8vRDFZ{Z=?@!y$`qJFX_6im@ zfF)q3UTOOkKTWCQ-8))S;6%=x$7b0nUakdl78i#jgT;oQ38H0XlSb zqZqj9pBK7h4zFdrIj<;<^PRmcehZx%PbI*+tp}~!J)Tf}$x?NOf2-R)Ibtk<>e^Y?`j(!%ftMp8I-cFn0hV)E+MVSXFWkF)0g zXQ%SqM+rzBU8>(b=-<4NsXC+UH~NFCXUM6kG5aOH)z8Dxe?D5t%`$?UA~C zQB!7dE2xek#I~y+|&xT?fVa&K9q6L(@Hf0 zFV0ef85|KTS21Dae6YL4;qib($o4P!*3=r*)57QJ>;gfV@69K0SiI@dSS*o|q6e!| z8ob6VK`?iJyb`u@1~|*8_Xrt?OwUS;e>3&i1qw)HGz2j$Mge+jhk`l-el=3W?qr@a z2QmZAi;cC6jJ;smOqzTBCs~1?%}G;a%LwUrFI_yPL;;Edku|HMmSvd3ogf@=vCvNcL#V%md!b;EE&1dxe1OxrUDD7h(CQ;-_#K_g12Nuh;;77|6UjN%(fs$uKw zOHp|51j1NR#|6wDDz(6q@fjSgZ*+bXh3IEb^9Q0L12j?fjZ{JcS!t5?Hbk@gKCg#H z^GKVBekLu4>?GJqD8!KT9g{)kC~g`6+8LPk`l8FJDh-|Irf8<9Xx)zS`4U<78#cRN z;_;BO14ZV}Vo}Ovb7TQPm!$rh>R><4~elG}pA^EA$TCBeh#>Eb z@zo<>ue5JXj@T?dRc5y7kt#8wcGb=Wz)ag z^nAE0vD-R>tq6vLM^!>ApNqrKj`OMn!M!|hkwq^*HB!UF8oz|3b!~!dXQ|z8LM>WLKkW{&|F(QiHS$B^9kp%DoI-AOkLe29kgHnk= zN6`L?{!>G(XUb9C#SJ5eOc*dGm3U2Q#HjZ|NPr(NIn%#+T^uPz-h?G(fsxaYEWhp= z+H)eQT?W7xF4m${&eGz-W~$ZpqC*Z$p(n24^5CL~Ri^Jucbpm?yl~;C*a9g!7f8t$ zFzstT4t)Atm5BOwiHVU4_f)+S{n}Okcx2&5psUeXqfR| zc4O^{h5aI1@1?nq=urMPRj5DCI{$kO=L-p7$0!SoUmV(yRK3}n5a$iqv?BTu3nIaE zAupIrw_{5QK%=hQ?tYh93-+T9cYnWMe z$yjT5h4kl#$kwM^V?L1rRaR1YfpOvN*yl#4}KU4k_j0_zov0i(wwe1 znxt;gSm~8jlgU^LNQ`()RKY3^iY8sS---@!QGAbV`%u;-f#6QOOZbl#UK68hA}5Dg zMp;ukI7p`p%h(7aCK(+ueBC1U3ZL0&Li12}xtGK|QrkY7C%3$j99}A;S;1$qx`)Z^ zWERG}euZDsukZ_VPt3jA)SYh@d;Krw{*r#PRG29dY@NVZmN6RQVKnupksB?+oJQ3o zMm0)*U}(Y1kV2&-+h&Hm6M`*LX#@ADq#VUp*CeL%dnIS;R01j#M2NM)`r76Y>TwMp zc$BZ0mDFVu*ISL4BK;cb%mv$L)7$a~f0H=3x}(Y&)|OPSm~WOC6_*<8XMoB27IP)0 z$>a}20VBc~4jr+2OQNefhh&(hAGSUsRBGIoxna>{X^Q24;_Eo$4%s+eCwIw0$ur~H zMZdf2@gVyb_AVdGD4d-Mldh^SijC1iGNjroxg{h)Uv;0&&B#=cJMPk#5|QRL zgpguwXoO&KWnz<~z$&sh=KQF8p5Y3y@>$-9PDGo{XU6lJ^2>J=`y%;^7g>5&GN2qw zoW@@k6GFP3MP5;N?p=qcmqHb){71T_#xe=eLEju4J#0^5IRKqtUsyF#V=*>c&O}Rf!NT zY>0X6h>l_*Day}q;L!2(Fw)=p#`sDnl%(CH|}fR z^5RY+_<6ssQ0GPclnn4Hx+T4<1#VTTfSz|s_yI3bK#o@Go06_!CRegUmn@Y6NqLS5Ybh}yGCfT zyvu+1GzlM^#PkHMf){L*sE#R_WJ#2MJsJiCZ_@TbV4%*;sjyPj=&>ykc`ANptkBw$ zt*H`}+-oiZ*EzqwxzPVN#$(ljk)tD3iz$&1#TlihjE>Vns~FqdIW1?FaT~(D_dF^G zp`;CzVX`BuLfa?`)oy^wewcI&PlnT`ekxvt@&`P#Ho3B~!WU0zHrdwy0gNJB`}#NV z^0W;~TiPqq?Y{nXA!VZE>gmBnNEsbpwv$zn)nbNWrlA5<(auQ!K&~a$kmX6HW(avG zGjr;2-Vo*9jV-MPrhJ~PC;>MMWc%<)Y58*YLUa-+%3Q^N&d&S0>VUq@1`b$}(wUxz zN1ALAaK?P9)?Cn@wfg0A08BvyLI+&DQ;|}~hE*EY^8U>B%0WIWz~|7!5=z!Jsx;_n zLWQ}~1Fl)_oPPI^Y{*QI*bofds6%>-v?5hkGErIA^-An-?$zF+r2r~d*JUdav2vZOm~;U@37$6A2#mGuYDixEBmN5T@^q-u})vy+Jh3 z&k(3w?Y-bCO7pk(WZAJ1|64SnH(6i3XpKU5B$fbU{kf_7=wIfCzeR7@H>ryVAGJDT zdpfIH##lw&!DQ=q6+1z}-6}SaQuaoJw(XcVSfjyJP#<|WBpn}-YIV6F=@Av#Xd8#h zHNx$m&AtX2KZT2lHv|s^T6ZUFpw!1NY@2F`LecGJ?L1WcA?U$ika@}w5Y<-8u7>?! zrayjF9F(X_SH+3YFN59RUKgXJaA|PdaMZ#!%@xYR}X42j$gb%7hvX z!_tYA^ROv0hi`3@x^OXk4IW=fA*0~?N^zj{A_lyI$k`*K@nuEjL*TQap zoUz0G!KLD#ox;aY&fQl__fgo$wBs4`Z@Hts8*; z7D%@YG2_TU`)B6}8>1c;wMnM@%;F;dqks4I_GM8e$EomYV9u=L%WsOg#0zwjpc(2H zsFLNAW?$H@Rn97=V~tsy_9JLpQoTRiqu`?w#&VnPA7HgdFbZCvJG#B+d%fqMh0fkc zjXJO_O{atY6SXa(d*w=6F7e;O!iAl!i<)Hlq}lOeYX`82OYD5%|7838H9Go@D&syO zpMa9lULKUFITENUWY~ZMm6v&60;D1Z$hG+_R!|6bl+8Y+zVklHFEQgC5G{&spnBJl zQ6;YQK+H7hpYMr)kBO&Y2b9czWUFj$EG>z!CT<+bkVLVP8&%GvQD&)t**s4xEkA(b zoW80m@?dr2edsgYS22oIKxd%zKwv>W^6L7s=13=_-@y<0m^FOus=@M*gtSBIXrI}; zG}+w|IdTbS@dNz^YK4#*ya(s#BC_p6_3%@qJ?(A|`*DJQI$ry|>rw&)zwSj$NOif= z^1y9xBio`fAH|B8kJsUL7SPrFO4O$<=5+8t0JSF$vhXBvDdwH zH0U26n-V0?V)2WB?dr0$iMsMH@uI(o&YYJZ9_`)lP1e{n>7dI>a;byYW-keghNn<% z-l#je+iQ}!_9>1&Nr3d`?X>GIrpbFvXLs^AW?${>h_^(G(8I5}Xn1Jm?DSvteDHq% zp2)z0=<|nxR)L8qZcq7C_2Um7#8Q@QF!-9eKV-8#T95IAp^@9 zs=1}ey#OXo(oFS4;!T`dpjZ$5@UOX5syOq?#aKcX5UvVaI&Wj_au6v|VO$lcPA%j`n-=<`C~49$qG zFcLnKHLy^K?PR2Tis(M>ZGl639F_dTk97ZF_{7b=p-GCwM&mO8PlR^xvB;}~i@pcj zbb4R%rRrAY+!)z);@jS$Vp~*mx_@Teac?0@erB$n+R^#x)u2YUonsjsOxt}K*Llou zntSJ?TBG0=$N>!f5n$F^GY+c!z%=Z1dcSl;iKd#c>x{4u&7E^uQ%*ju(B><}SFR3K z(HgDq;Nthrznk8Kf^_4e$^M2`VS(1=4U?S99{}8V!`-##PG}9IosZ|Y7AD!aFxYr} zbFH(s#nkVIr`9qUq1*rJ1UV85hNc*?5oD3#>W-v51&eXrifm)TbDNu)`mCz)nlylg z1+`}bB@Ewv>n4Y;JN|Q92gcvfG(E^msbrhrEcMMlBMS3hF=o zTf+U%#u91(%${t-V%Y+uWbpIAV|XCPxO=CrI+J6LYHcrw`l%W% zA@EeyGr~|RRVk4qeu)U}Y}0O*NhFq2TP27o!CM)ZBw902JN9TIbJDRvo3s%w0a*il zKMWLVRLho9Vz zxp^q71Ka%(AK&-pt9a&6tpo=pj14}FYL~nqim{S`Y&2MZqKu(;WAoTebZ;IrOrq-- zWE7VybLx-wQ$HR*Z>YBQ3u>MIJ6nS;&OK*4!tZM2*G%7lVlZ=jX4XSnz8ohlBCADW za8k#dMrTD2<(!mP7rQwwI11-9{>TF?#baK6cpUK7-9uHgVy{qPQuB@j>n)+z+aNGJoenmaT$4ISD z>rD9bv`1}5u^YXU=}O7KH^#s3#xO0|^R#q45ZW*a1x>26E%t2q<$?3&<48CTM%98= z){Z!fx^SHg@~FQx>gBvKjKe@sA71jL;iY(Xc|pZED_zkM4~x?Xf1-aL8_oCmL`io0 zAPJ3Zs_Y(Um!sD~A&P~FGrR=>Ca1kz;VOevtOa(B4xbjO6O44ru z9GR(dC*K+dBLfp^PQ{H{4^!;;hrPw0jyo=Oiy!EpQD&MY;ekb56?(IrjE$Wz@ndL$ zMMLi?t>|ah9ai@37L|~uAs=lR$WSn4xSk7!Uy(v)feC`%kn+`3I^V4+4GOMMX98~4 zUofyG{CbP~7pBj}CCL6ju?IVg2Il5{UJcIA&YjKOQEl=2=l*C}*liWJx`v3vpts#AALolB1CGo{Xr1CQTYIu4@PO@oO z?r&V@t5jwb8>F*b`cd-3829TNE9RqTX-TiIBT#I|frhRqh|PxkOq(>0MfsZ?#BgxQ zjyLS9avLRlCybgBY(xxF)I911`X&8U%+DQoZicJvtzIw_gw z?qFZX(9V=~V$PgS)5*d!L(!JRU}Ev15eigQ8eY;YoO%lExMpMzaP^L;JI{b;&S+ z#VzeBea2z8`^>X`^6e+(*p*In$H!ln+rKK&GrE$v|I9vo(u9gO#>_AYa#~@UVZNJN z;8zeYh(d-(47wmJD}saUho=m;0(RNy7L%>*;-s00_+WTxBSBj|*Tfb^L2Tua6vHR0 zs@#(Wu(EvVaN+PkI9Nd#6Ije2?&Jd1{06BB;cLJMe+cfd3laaV>*JB-_F@y%|JK%< z;hK1j|4(a0M4J4oba7>{uY^(3fanuK7`?N$Ct?-xQxZ&0SY2BBu6VH%9UU29&mQp} z&3g2oxE%Wj)06aMAg7x1J7LelgwR1bPe|=TtfNImO#K_;3|SRt)y67MZcz#UWP4*U zR5pRYG!w$hmOR(5%EwI9p!}iPg!({vIFn%kcLd=LbB1xtBRyoe^gVNSjgi7UIiM8SBLOgw@I;Z)+W6_yuM zW0x$yf@rP}tKS-lr1#jAAPMBO4yh^BrV?@41`0xsireVCSB9*jnNS-Qnb2G~$!uWj za$yxZKNXm3h*6zt>znv-`XTwMR@NGDhi;%{e!7Y2w5za_w7q0_2pzaQIXn^_xn$o- z5^H`CO9$_`po9Vo$l8U*^z09|-Yj?_NQ9qEx5rOUWOce9G{1HA>~eo_il1WVr@!S_ z9PtZT=waeVYoRHcnTThW-^0F3izqO=C%8IW(qXkkPufGu70fMm14^9$r>D z@!B8&|C~k6hU4ysA9HR5VnYfDKx&g;kSjsIgJwybv(wLJj}HpZWckjeV-lsbh3!DL zY2zsNf@qqN(`sxK^J%Yhc3pd~(QOyR473(=-!^Cxuzy;JnlUlj-px!pvhL4a zx+pX!qVK~Pq4tA-p(11DJQ-~*P08XUVqJRJeU;$}DZXQhB=+3j+vi&6Tm3MIj;x$+ znc>MW8u8OBvo`F0d2CdhddLDvprw`R^iX1g)ib%7u3VD6Gx_?K{F&y-bO}<8~FCKA; zvu$KvKJhCwQnRFvLelm3h(dY@{#h3ToOxt%Xhh{B#=|V=S_=SYQn5m@g|x`XKM{>2 zpIqs(?%}1*WY=V}1b-AinJ*qCEZ*Sec*)R`CeB{QU}ZYz!T#P30IMd6@fZkbCHd{! zWRuFKoDnebl{mZeDuycKDcZ`e`>0P%0f}xH8)v<^5?#b>qmQ5ji^kp4X~<0ZIs`7N zf$v;LbT`%0qPfnKT^jYQ%;P+CdPlb-(8NMi<3F9Bd;7L(VDzJy{{4PN#^H;{LTANe z$7Wf5o<8~+vAipC5AUrw()TtVS+kI>$<`1!Ma79-lSh&Z1?~rKaWv8ld(gDqgqKpH z>ajVDc|J?r&^}RI_s`o@T`c`hH(H-8hM!A#G-rKw4z(GCXEL_4{|%wszAd2|dZ_;4+k)@l$NE`E@Ic#sgtkk#W(&P(R0dJpKyt zs|?eLPZW%gZX^-`j(DK+^3f$7-w8_f{@HV`2X7j+4+>69`W%GU9H2 ze4vDmsxldE*n2D@QJDedb$V4;E9+w&bmum~=}QKKC-1NYx7JRt49K>X)uiNBmUz{c zk1$V3PnYej9f!7#kCF^N`OxVp!JX9A6U@RcYeXe>r}rsG7=xZ-sMxQy+by%Me|hdV z)HI%$U-n&df2Q@uN(BKno=Dj6tl%6YG4Ar|y|W0yri&aFf`h4}nrBTLL~M)pS)=>f zd`T-n6IU!zSd$nb@D*roYjcv0%|RtC8##M=_GkAGHE$=D8oi~8IIRn82Iz{pCQvC)QqZ)$lQD`totC0h{HB&|GeBu; zb7@(`gH?WSIVQ<~%ZHRiRER#=&MAq!`hEGl!B~|ir>yg}R%RY2pQ#u9LjYBt6Qq|Ui zlS?)SBlr^ECNPFY3-hpakq(W%3R#pU0h)GS4nJfgc0?#PrA z(W3Q(tmW&jZLkL89T*3wHyaNxpB|j>lhn^FuX45%tm5a63>6nuCItuG4_rR!49r9x zuCJ}H@y#wDV~(G`c4a8<5d#om$QTa$Pi0P#0E$9q{nO(m&8DfmvZM%ip_?i`z|+vl z!NdNtioQV8C(83<;icPq$AM)PddKHg@K&JmfEllkDp(dtvT3uL0+gMZ zZj(SaajXFSghT{zZrb?_9dK3HNEHKX@$9(p)3|WwRhjuf*GddTs6ODwhS?gqTF9EY zZoVPMJ;d$iZ;{5cE|}5q^uILwnF36nNmE#Q;z7|^z?0NI@WI(JQBsWbwX)y4N-8my z5TXJ>g;NXi?v-n9*|ZgnivN2zXPX@hhImGOLej%H8ZiS)XvP`j3+>G&B5uF^_q)57+q zxQ_0}$Op|QekV5uwTZu2ktsyCxV$~RczE%WYE@N72M6mbhdTU+AHQ}@d5!%&y*qb( z=cB5FEhWtE_5-yGmRpsR)H1JUU#`kCq zsPOYlE;lUgyFX(Fc*ZGq*SG^>7KyXq;fPk!SrpB`-QM*x+>EW7l7ST~HL#Ug^O#W# zg-e0qF(P8=&i60oFwk}$(P-0pBHy`KxA(e(OM(X7(<|L)WhF#F4Ot0ZqJ{~_jA2<; zXz8-7<$mWqk@-;XTH*n&;j3zt2PJ~_^^3{IDXCmg%?iZClAYhFEG%KrSNWM5gyHgQ zqiUJs8#?!^wak}RpILWX%(c_sxyoxn>uD`}VRwi1W(>Mi;W-nm+qriei!UrcCWWs` zHeD%l5cBdz|5ly%vt;&1L_>c_EiTO0M5si|T1PLKDG{6sSMYBz5bU0vo z;m{~qf6A_s5N)y&P4Rcl@~N15GP2F(b8L>{twzQ-)O1|EEg=@L8cbPaB(6)Dx-V1pi7KB$0cEi zB11Vz1}&w`QwIx)u=ZDce(93Y>WFHxpo?&M#p1?sZ{@%?H{Y$Hn39N-*&j|#yw621 ze;toB8Lx3Xntpe8YoNLrGBZ@{D&iR}uklQOcW&m=ktw3pZ#Y>@h^o&WTHO<{qAhG3 zIYkwMc-wYLJ&VTg-dVLfify{LH+{3envDIftI-ETcG|DA(>^B#`%R+eKSDEP7CLPQ4Shk!y-(dC6nY5E6w7gs4H&%&)P z=(M~Qf~dTH;M{Eu8OGJMkvfM& z5M70r#>h{;o%?K}_H??~yAp#UZdM{#skfu1kT4@NGzGsTNbe1qB9t5$%@nQA5$i7T z7hSM6g#F2UwU|>xn94GOW;FDB$4dfTT;{>5B$4z%S2Qd>U3JXULS~IhBgwQ(F5Tuc zB9urT9a-$!ESh3J_%=U9Cr&?Jjf-WJh5v@TxhwYL;NyNzM^Tyvo%B0uTu`uMWWjVZ zjRU>Z7xob3hqlyXq3iRfl8@@qN&@1&@z&!Pc8r>{@jmpns7LNs^~n94IM)sKWa`nr zcJB9>*7hAF)aM@bJi+3OF5sCK>>!~g(jQe-1lZ^*pLzp9#(OWt)r5~aqbL}5)Vy3N*A27nb4@1(S0ITk5XXr!L+3WY^g)g?wPz5a)5(Z4co`;a}) zLp+wK0XEj#l!47k9|P2_msM-PUbfrc40?t8C@4R>DA`cqaqFw)|>C7IA4b@NLpNs@UDMe_%xDE)FD7-NxYAa6&zX5gIb z*%+9c^`^$COjz!`i#^<5PWCZlH?7@X$1VJ2<7rp=D^nY8GpLq|vvf42k%Qjbs8VGY zZaA@ed)fPmj{6Zv{%*W*<=5T*-KXN8-F=b^v#@n#Yr8AMiMV@Wt4m_5zbUr*ED85# zb*21RE9F=^kQtk`WKKjCLMy{H&kMn&2`eiViYTiF<>;v^O-hGtM_hSKRddf=Qp8vJ z<|3k#(|kNSo?WlKaQ2S2?Mzv{78!}wm|~6iyNAjW3Ca5j!shP-4+znQ3K?ssx$>D` z)=Ig1e-WsWjPi8M$oVkQZe;X<^iM36q*jFp$PWo4hso^WcoU=qgVIK(k`EBc59%>9 z98)#fk;Sp zzTrUkHSZNECW)L2QQS+}k!Q|(|1WlW$0yQF$^^`ESX~q8-;nIg6I5c@UdnQ~+l=J& z@5N;rUODN#4~4bj({1JJ)dOV=G73nb#NDVO^Hh>Z1`?Hy(h3sz)h(@@Tt3Q8iHg_dd_Et5&D5Oz94tdkvl zSpxcmO22m}rEv+9jgNG8%0y>0{GbzJGP9azg~H4BCL_>YW%80sT2fxDo?yCD=h_h^ zd2lf%bR<(*chQ8M&25zKEo9iUq7-O|_W3)bc6;9NHq`FGO+;PW}W5NThQOTv+sWp)>g!%3w=2pMx5e zYBEhCbc|VlQ1H%f%`zBeSs~gJCCYeO8}9%hka8VNG~a)>>tS{jn-A1etx*JikqLzUE(Kx5AD2D^VQI4Yx1>(*wE@pE3SOD zsgMQ*W-NC^RuOWPvfAYmj9Y}=>DgmY5_P7E>dV<43H)oNz2$zHGlS*nB4-84>9ylE zO@Hw5Rb9KCr11Kkm)$1Y*lA0qgE6f@fIdVGy|Xh`%Vfy(X0a$pGGbMOc-k>f@nXc5 zgHk*97WshxMm}I=?qKfma9>z0x!Q&h;u^xm%Zww0<9Sx(k~px)9T)mrc}L{t;l&qUB<#8`zI3s2wEwS|_+MrN z?b{pnp8T@bP>xNLPe!l9_f*Sr6-?QjZ34G2P$>k zz#SD2gSa9Y>z@oV~To;Qp7tJ#U*)JQdV@8R~EcH!LQ-DV(i zQQ`xDv>M#&69_$z_>AIg1XUmt5Cyb84xn9qiw{willRX5v{-O*Ang0neW)QhX7>^y z7E2_JOUiUcQ$+x%dVXvy028^h@liD22~8?hy$?o=yByJtd%<8Cr=VJgapybTZ`Q%? z?)X-!C{`FibNrmtAD$^`WTsdDu43xt?d`)$L!oDlj4nXPT-c|gCVK{cC5EJ0zUJJ$ z#*gcK;Dd=v42B?8Cd@IuT4mefkNN(!2b1c>~4f z`vw$i=<^OaF@6g4;-SPw_ucgzM!@`;yZ*#@&#fvY!jv3K;>BWnwBRk>`|8G2z6$0TFNFR33XhgS?A)dpf1GRgp^okGB-QK#) z8$?53bd%atnoC<{%1Y;Xts7eY%ZL_5>ONj?C%C2DCpE z2mLiWD1I7FA6Jk2COep#K4nOY>N?(P)m+@iJUDyz&Z=!J$ZJ5~T4D|_<#1l;E~!!L zcjA@SRZ567l+e-wsqBkFCxyr$^MPD~&g*2L_#}zi?VouXv`7t}TsDJXD399j-nnCZ zWWRfZ=uBE_urltvlqQ)J&JKs&Pg+Rgzj&A3vumrYePJ;2pxW_4UEaX5Z!@v-2A?l` z6XW)EE(di6lB~-&8+)c&W0lVa*a;(KPIl0xYG7f>;808iF@eBTUzh(D=0?U-5??y}>h^AF6 ze~)QMYuQdL)F+UOLRnhF?h`3SHR_Sj-;3S^qcpU9kEN)xC@GDIum||@z55~l^SdG| zFf~8kG6BncumleGF97Gkl>~-UWXV<=JrCmD4}CbC@nLf2(B9C0Z0^P~8{k!F@)Nmx zx6sf?Ly%skqcj931V#u&9D_wLt(tj@;~l+ZRc_1dJltzh+^6{==x zU($If9=fu>eSD-|`{?LeKx?mVY9JRkwAP{-rNA!aKttllBrpm85=m?*u4ZcMFm=rA z9Nz!KKC3=#Od@HmI0b1HZk$LV%7A7^#|fDJBfD6yR%Gd$T6&s6jnpiXDWYmjK)?pv zdpaUw8RP*r?AF?V?q$pE02(3Pm zAg{0Qjz>Ft=ICLxg~hkzzJ*2HUuvp`_sO_~g=L9MYwx^#^{S%hcq+a1HJcf0WQ@rc zX(?y3wH(=7imzgXs9p)3Jnke{Ur za(w(~{}w(@_dyS^c=z3B5R<$*@*Aij^0u_$qKH`Ho>oiFFJwVR_f@Lwnf$E1t^sZa z2LWqF06hmSpa$e>1j&jNW2>W%s)5^l=;8~ji|g}?T)}&Hfx3H6Ms(jCJeehGs@N#{ zEs>ah7K`;S=x%0#b9tRV9IFN;H^$?AqM5nE^7%xD(-Ou46Lg*n_BQ(BZ>Y!54|0Y( zyITv%hJ>wT$kq&zJ=`$rIguQiT77xH=>h(Az3iWZtEW{MzJ2cf#T`Y%fmlfo(et*f zu*6WYMhLx;H!u;X2CFmK8(I&N8{P=u&$xdXK-b9L-)9J)67XzZycd63VP&&YZ#bL+ zE3<(vA{MBelcR3u_)7OrMG*UsanS2LmAJf(X33`QHe(=aBFtNPe{Oe0P$(g-B#Q69e~J0?B0uyYK4y@P!azIaTFDdLD^9*=ltAN^>U^`qqS zKA+>C@i~@T`!8Mpr@6m~W)KN&hN!n1^RI-lcZ;|Snst=rt_@TWe}Gg+yu$noTYz@1 zl!XQrg>1$>HXIR>u6ScJ4K74}c`jkOgzS-Wzo!@ntooUbC9Z1y5~f9fX<7r3ZT8+6 z9rkajIf}Ix-vUXznzbj7WIWY#AlOZxxEf9ZK~#ePVb`rYO1W#Nv%k+5S2}X>;??Lb zsl@1d48 z+V_h=*^;>v|ME<0G?MO0c@Etjku?|DaQ}o2w={QdPTJdRUtKWsC}L(pys%ZRh5rs> zg22dyve%&|ubY>xtgnpL%zk^QFIr&&mrlU~^@zaQjs`iLOCA^C@#LU))q=hX;$&Bj zEs>@VKZ2R5JwlRq;u$v(d7-AK25|6dMntv2Yvt)Yclng1-nn{tVRCqwXwvbegjrKZ zA|DxPqZsTG&Jo!~1{*6^BI2@U+oCT6kP~W6eOWNX4HS9GA5um%%GGH21w7f>-7q*J z+|BQXS08^YiJ-V!;|qH_?^1XcOlTF)T&cVtywBfG40(RBX4nmCzW3+FId70JZ!(|Z zYaYs%$as&#PJBzO)DSpP0gkOi2{>bo`zXvZim}sp>Lr98QNEOO<%M04%N%A?UyC{Z z;;!+4Y>>^BWv(|a8C^V#b8S0zg1G%rlCkJrrKmWhXX=9%KNGSoI%TPip2JL0ed&nn zWwNLXR%k<8QvaI}a>d=q;^Wh_y4yM?&cTT#W`~2b<5)2?^7t8XLxn@&w6b(fOwOM3 zgJ}El{x!)&orbC394@?;2!H<7*UWro7xZu4c-5=KtOoqgU*W6#ZLzpLv7u+@z7-ss z64ihvlo!d-$`nGP2>FqjYhI(|V_*XmA{$(*mcpBj@(hey^QDnz3a-4BM>FdcPTD7- z_1KcPU&Gr*Od+9nh~pJ`4~N~y70M(*!@9+|Zxz=FamD!{EfzO7(NJ$io~Uy%z%jpZ zbK73)%2UF?R-v6cgI#C^97@vKE);m1<3Ft<%!BvWCTm+f!xY zW@asnW#B_P&92^yY?^-}KRMwmzS_Rtm(5SAzNGtj9gI#N?*;?I#{H-K&hEBi2ZS4W z5}=VwO_HXS7A5=3zZ@M4qt?sewB&#Al`A)yMaQ4!#aZM^oeZNIU>xIXW9sV19Cf}k$&AFFC2h9HugzHO z2z`kTLIx}(jzz$O$W*;Vj03GxlkVN*FshnczL$Pz36+J*5k#S5=4Xm6;6uXR>&aXTtg%rX)qpS*t2AU0c@7m*LpVmPhE?4h&x~aR0JadbhS7+MuEFE+JX5@4_3pif~BO? zBqcbA#+)Edh9=E8X8eKsia=w${)Amd;`VoHzslNw3r<{XZ}ZOXCI0~pBpcbod1~cN z=W{{b&Mtw|hq=^t*YWdDJmGX2>8hZP$d9E$^MyH3+}_HJtbHPx1&OTwr%VSI~y%2@_f%k{j#aP)b8))(KXz@(F zSBGEt1Mg1DT}L#Qwl! z&#eje^V>70m5m)2!)(ltVO|6h1F&-!gxTSOPL*>23mWn5AT>I^tUijJnqE0|H7+U~ zGDc7Q{flzlkAFPS{~chz{e}OFfBNHWlIPVxzE1|BCLaM(LAlY05#g;`MR&(Q7t#!z z0@~81K}oTCU_Gza=Ps{+Sh4d9;^4c~G?Ti=-pe z?D)lPoWPS*dgvm^JXcFAIX}!dBj+y1+!)xyyKLI_;-ZPQ?@kcajblp~ydi|@I-F3* zD&ZZLa8V@uq;AvU%IfMG;qK_wrKC|k8|ZE#G?ph>o6b^|$C9X7UtjmzG*sE@wQFZd zj7=Nxlu}aIYYOECOGb0Eq)gx#Eah7zzm2l}G7P8L{Ds#-KodqeRIsglrfESxlfPNh@x^iVcm6@vdzBclg#uB+Zt%apOK z4$zILJZ4BP4!_IA{EsvM!TYsLx0X~Wjw;nE#%)8(?jAv7WO4udO33&&Ck-)%wze46 zh9ry^H#c;GN}0xEvLM5BG-lD-8jlSk6SLU6rB98>F<%}>?wSM8UEaPd+vZ}@sOEL{ zKJY#j3h!$C{(nUm{w*=FJM>{D*)>tt$YuGQ(*k=@IUrRLW^Bf$6gLde_V7Lm*BKAA zR%he!w^I6d9$n4?)#Pj}O$SHSx+pKJS_Dx;nmd+|Js!$S^y>F<(Ia9>>0al4shs3@H>rxMJaCo;KKE5uJERaEXDD?rSn`aBUAhPNAS{$<juWFH)e6aG_i!uxYyZdSl2A5O>&oy}koDG&w^f!z%O6=i`)Q;zdMLSXd* zlT&A@V`sMFFUG`&OUE`x?t_5-MPg$ybo z5?7XLV8iA*^E;k}rLB^V+rVp#UaJc$CS(Odr}JqxvFJ#wg3;5+R5%YN(vhb?Aikde z`MwC{&g&zk1rscQLi9og=5czPheOsz%CNw7-U1|3&OhDW*OLOMcy^%6z<7 zJt=P1Q*js0yM6O({hjO{Lyw3!IYIUGaZ0Cq|LH4d;e)K=&BU1LOr~&~^qq-wf+03oP*heJ#Khz-(u_1PH1lNU>l~9jK_;vAb;F@~o(9P4xirVdpkF%En)wBpQ0K*%1F2YyU&OsiX*qx|jRkYcx*K&5TLx(o zqMdg`UhmS8;?EfCX>S))Ca?ioXNp-5v`9>5jeOHjA`#6!eozqY7o=InEWPbZ7rpEl zZF=dbW8*G_^~8r5NTkuuHKRNyCCucL5-OsP-Q(ukJN?-1;o<9FAA9Q!uRlz@X2g&E zJU{kl#L*tBnv!?nw3?s^ma&)1MQyE~XixJ15I=EU_?kIVWwuvC2=*%mEMz4})8e&I zSYrvDiU&*7Z<;`qY@h*m%ixW)@Br#QjZ*Q)Df3dx-_MLYA0cWez! z?3cE-NT-|0&B{02QW6XO*M+6!`!Y$os^vN>i|dQGZ&zmY@|7tb+y278HY4Y6l7X)i zO?zKE5xay@yPYPS68p0FEeN>>)-~jPxRoalIzeLWv_5HS_M7s677-&BR3k?lOSPCs zc(?{b+&}*=riN;~c~%f=KR!Cx(;1iPQJh)h=X}51Ip0>EB(|t*CkN=X_Y+?wH$u_?k zY+H>RpE8dC?>th;|2*h`^Lx!F6-{r-{32xXVHq(+%{n3kZZCuIbqzBm}!_ z!v{MPO+Rzxa@hRh{^iSqNu{Hny-y~c1rAI<25E0{!6Ym)CE(Y!*6Y6-Cp`Du)vL4z zs=RUi=_bzA$cGj3;W-(J>L_g77luh=y_K>I14lRjM5IGtRy-ccY-K=%^t1|Y%OnA< z95rpEe;pH8<}8pe8Sk@tII~d*$LPDE&~}l1zRz0$|8-OnIBE(smZ!+XRfx8Vlk~fQM*!0nfsz= zSIiLDvW+qOFrzQ$=hfOTO*Xej!Yy%4d&9_Mt*7ks?!?LqrL|eVM0xrS(Z&4A;M(Xr z%_7lEktz%;HJ1MTIYcs8PKz9_@z~z5ya(cW7=BBFmdXBR#{@1~S)0lN&>17;#>9&C zcxhAP-kDz?+kWW_|B{~m9Lw_6Wl4R5D*l$%V+_GttE-umUd@bq_zfk)K&n_8J3Y9C zwCL{!eVaZGz9BA0ljsktw~8weNAyTY#l>D}N+qNdw)o`MrrT#g#yeeI5fg{FR7!*p zS52E$P)Q>b8HPjmCiaj5<@QwUiP8;xoDb>!y}bzJPVY_8>sSHzjP3yp2hF7u_UtjG z;l;R982z^}e?wuNx+kNAzrxSq zfRXb`sZ&u8DU*fOGNO8WdK8h!h0FexCPre6s9ul3-+lJEv#X5}b^Y2i(Z5?}{{E_& zzl(FX=U%Jg>t#{QA8aBuQx$_P$UwNQDTwpbj)jM*hg@dvOX6MZV(%3f7G4T9#fLMk z+_IRm8Flc}Aonb9c{mIkc?l`7juLYDJW9Id(DDH5gNC=yPJf4y1&o>49G#0Xf3P04 zoPixFB#UvAAxn?lq&IuroAHd`7U6fh-x0H)egy9&p2s^5In-nysXts+?1*uZI~&vx zLCbnL%pJq%#3U?*BdO+xHkYbl&yI%iUGd}bhQW^h-BzLT!;|FInvdeeTFJ$tJLNpd_ra-eI(5%1bESSyUi zSpe?!@WpVaL53~M`!Zibg7)5)Gm%=(n543Y)VhKH+~v+zT*^J$GWrJ=y&D@(sh^Ig82B(PKqsD zVr$cmh@~YPh8e>1s~hUh!X#1B{lOGI_shTk8)V;OB7a{b1JGpg1K&oS1f*WngO19W z$AW%^{U1%%Z6Yt9A1Xd-qA%l zTJ*w>7+mH;cnK*WrBM*kYU;pg6Nr=eLCeLo`J^6&7w?q) z7S_7&?M9&t^V#UUu+3_&)0#_`oe+K;PRm62)ar(5T&R!?ru1+W6=L>HlD$17&ln;r z656i3)w*q6qWnU#NkxLgD2tw*DAeJM4@Luv0m9q8DwCJqnt)9SKzW=W220$DZ!W4C ztmnPK*)`Bb)uej-ilFQ@qoK7vj&#Uy#oURTMznOhS5LFTN6GY&eP9q}4!VBdcp__C zY5`U1MTWcDvP^;e_8FW9?pn4_b|d$nKowGkLjotA{jG(2J19j=D!9; zq9^29N>x`+4v%=*z00Ee-~|o?J%5>jmu)x))nq^I5NAc44kUpoXhd*S(4r=lDqnq>;y_>R;X zjc?z1g77ii6gylHE+$zT|@9~V6`HUT5U=;71;;qNdPyHAJqpr{h?-VPi>-9z9n|> zC+7kSHJK*dXdhM*hA9;u2$b%xZf$Lms2f%}%f)1ZC@ISPNJEykPll*s?)N>SqR%Tx zt29{)uf~sYC(gYNsI9{w>DSP$Gohc)NtCt{=rx@o5)Kd zn1H`EjhrwN_DRW|WYqGz#BSy9VP!ZRrkkPrfe-kmN~xjg3wDeBGyOC7*tPFL)1R5q zbmL*ii$1?sRaNDNv`&ap+8Ge@c}u-z2nFPTS^x*k2n<=?c#4huuh}N0)7wvjx~4k< zfF1ouwyHdpbcl%5;4MLb9PEF{xJj}>0Cu71 zFS2GDo(7#;fD|1`s{u(XMqDH5^Ug=OgW^qz4)w`i5{RzM{5_&UHqxXDl{+EUy=emD zqv4YqHcu`tsyw1iNcD-%6^%FY4RRh!1WP(YqnBj*7^c%zjZ59`soM(=-MD@mIn%8> z{~uj<8YF3+--W$0pFAq-$hxntKC8N``k3zNvwF^*ot>H8nY~x+YESKb&1yj_tiyn{ zNCI>qc0m$IA|xDy4kUuZ5P*RYm@o!$1cE>|4#INSU>OM^v@2nF<2Ul>`+J`3?p?`U zGgX=SJkS4m^8dSUIotnU9mzR!-QH&k%kQ82;%xV8cefP{s&Isr2?PgW6WJ^rhsYd#}OO zD@|w;r%8B}jA=@iYzc0YgyKUi=C#=UH_*FAWMK#>imjUo>QQ!%j%*{QB9nK1lHO4t zq_>Q==`@QOu&0CeTGhftkD2OO>RAtu$f0OK=@^ggoEDvL7WR_&<*A4Gj-o$ZKoHAQ zPaVbnW7b~1{6zT9d3M0RkuUcg57hg0!X{&PQtez0Zm$bOfk>E8ZTo}VTG_Ks3>0`k zh}9V7)z2YFU)*LE0SX{cP0aI-AY66#yX;5_!g*tVbXX9BF#kq&90d{Q*@epK9uB*} z#MV*QvCp3I;n~`<1e#Ra!G4s0_l^b+!$G}&Xg@NC8_$@~PE-nQZYQTD|APz519&G& zEDsK1Hp;;pzxaIAnw_PmTLwcsw80@Pj87{(=5^sQAOAQ6k(}?}u$yc5kL4RaE(`1R zD#z_$X$~{*)Xcq9JKC}nn^60j9qWA3?M}|j-q1tEJ8fgGdvpYE3k8CpA`ft%3u^`j zKyW4X{|0RuiNZ~oble)f&}(#X7;_-~q;2c%TZtHquHvy6G=;r+(foqNu;#RJ^p#^l zpOux?=rE!i1%;C~xo}D)-*B+2fipy|cwHP)uvlY)%vU5H*vtvRC3xf8zsoHVgpGSI z7hA#!wbcEb8f{aKk0W{43WHiM6j1>?M@oA<`Y~t)*{Ebpti%uCS4K7>R>8^s^1426 z==AI^DwSRjDP!>1pHZZ0O5elhlS(DmY0;hyuTPh?$kYM+r(!Y1P_XVja7<8$Bk-Xv z+53ChBhZV)XcV2M3WdX6lF~}ic9P?CiMO4XgTn^{VEyklpJD2+- zH5G&H3%$lvik+=~Y&&8AfY&x~n<>pw|FpsVu%QpWpXhi8*raFem-VduIhl%=$>JBx zY5B>yzXCd#bU1Qx|FH7FB|Dwz!S%ZG7fanNRvx0DuXkK2TdpN)RVQYZPL7l=bChTV zFw~kZ=xnQ5VRBgyElbOlacz|h%C!Y>_W|URFAmeKwxb;UEZ3hA9m^N>bg|{4Kyowq zEvA=5*4Zx^rrY%N$djuUzk09tsf|_peeK$)+1`6a;h6MTVnTZ< z_bX)UkGR_70?KoQsX)F8?e=O1LsNy5e>Nnd76vgSzZau3XMIfQFv%#yl%vu@s11gDrexJx>U20I0{kW>C+x$@zfz$ie?0qyj+8Z zSWkTE3dvaUrKf|7n|ylzkx%ah-k)!o`$BLrd?+;+56Yf{XExI(cDeXNDWDadEcG)o z;1F|4$ap6%KRT3;T+lK&3$&ai$40XxygDa`N_YfSx6%y1RHat4x_9zZb72__PjQAw z4v2-gBTwV~M7XkdqrlTC(~+N(rkMLco4CcqkPT?m2U5a60WDrL=&es>DeY|c)q=~& z0Iy_%DW{%42cNYB6uAtGYI>iK5(K~;p~G!HZmC4%2Lg#6tV$YGn)^@L+y2Qt6J7Q_ z-u@n`At=4{ZlCII3)VDiQv#S2gH!uyXwIGIvyB(9iS@P2An7meejtMI)E;lTi1px! zryxM1*}+h3;>%(aKPNKrfw|Af@c83_PV1E^#$G~!Bu=0Lw=USk1A26=XCC?Xj!C6} zf>6T23v|Uzya_l6=@3dQ;~m9EI)dmR;$0}>0DQ7e4S0)cJS!-Oa`0d4`WrU9w=c&A zsSA0fv)4%SX>XeoK2VyjoQ}c7{Xb|P8$mv%G!`VT9L$UkmF{9bP803kx97x^#Ekl* zryh+RNwTCcJI@t?cdz%xC{tQbpu54w{CtX6+q{m6)RAgR)*oxBg$#OoyFc8Rro>o? z&x#E>$^Biwzfb$}z*tn;cn_Zs18npQ5K`$VC>dClg#$AEr=J#}jlMCsdi5!?eY=|@ zu&xT>7AxXyEbY$~cd}DOCLBD`qS_W~Vm{fyfU9LvM|ZplaE>!7GTx1{{YtSa_ySaZ zitpz_?@?mwxY&BoKJ@PYlx*qgbaRVlM9LYfIGWrQuq@R--)}`aq_U* zcup&`&0&A*Z9_&4Xi38yG;(4LG)k=uxNvzpFqA-I-+R-&_u^Uo^XFcE*~9c-dF4En ziT%7Tclt|mrw`|D%82|r`2XKzSM5)jO|+fu;IOSom?2yxsEh_W)u}K%xZNpLfktg) z7s+m~Jt~xMSS0i zw58SMZZN+kaGBHyW5zX{mZQ|$+KIDaXJ`B-WHS--R;_fEDq5mNj;g;|Ki{B!%ao2Uk97N!M=ZA+lM?T zSe!oi2o(5E#d)F|+UZAG5)mBvTQa(;^%#1>KwXF@fV0~rU}iEry_4$Wz!XF=trp5& z6XWfhwvD0SD4#51Dd{p}Z5{|iJ3czw27QPN%9^Zx2pa3bxMiae!nEm!F?hFkE~%>{ zKW|7YrHCq&p5jfqJY-4Bk;AptCOY0Rr_nt9` zT&l++;u$yJ>F!e0V8L`n#-V&zhSJ&nXakO_e^ zSEzD)V(IaP5<_p}xoh&!{*@Z#X;~<5E00xXf|h3bRZuTHD2o7OW^j*1Szs?JbV_{U zf#?IU7x_KJk}P`A!F&epj33UAb&DKBe!;HLpC!u+A40x&a&3;Q3Blz*1a{#2<8^*z zXghtZ8yx zeo*XIE+m^pc3@eVczgB?z+i#!Xf$~2%6Pb&$*uG_n2?^7@w%{CfzJyRNGz5S!{kiT z++=am28sDRP< z-8=hKp*=a_=PyK|@?T1*1h#i~H`fIk-jVIEb||A(Nf6M`V`%i%3c~BN-!l7naN~}Y zTOA#;85}1&A>^gJR*PU>pxcKRn!&kq^bw~@36%_{@5NN{f!i+(Qr{~ti5hS6&^|FZ z&;k{xr-P?`{>-yiuEa8EhS#n=WB)JGssDF1p0k|JZz|2LFh64GE8D2p;4)K6>&|Aj zT(HCUqL0o}5B+qGl>%clh!RyO>|V<~0SlZg2~4$42gkNtJ)b$FO>`4c36CG$o}~fzuC{tE%5)oR~E=O;dwJPxP0!cpzQV*HdN+KDP=y$E_acV+G}J| z+H|Xix5MlKEJjdEY*lO2fwfp+XPhU;Q}9Xj9z%n9`)6doq!UIW7k;p%%zKJacfq6= z0^Ke-RohNqeWN5#8Y}zg{WH%nVbXgtUXZx62E+XXL|wYj{AtSawgyDf1n%1rkW!D5 zi8Qu7%`KDSOn<~phLd~u!n^Jmwpt3Zt*iQ#h|v2{qLmNCLrniint;M(`C|Cs$3Grf z_p!*8ff&?(6odLFDk_p=)6VlQm8{E5&OR1v$sV^nzEh2Zsf^L6bv4oH9?F2zd5zP= zXXS9|$u14Y>aK3-r#P6i9P`25pCH7c8y8*8XYm~gc6qZ)V%&M!wYB|yLN^To!oed) z4djDQk;_hmd<5$s3NNBd+mC1B-a+x&D6n*}=4`N}K_~zHth2pC_l^f>!=!}dVGTzH zl3ACw#%djTnkKGg4?cwf@X3z`;`8YSepc`ZV+~s7qxdnMK9zGkodG#~+ zX21WL@cY?J#}$@hW(0nlnW~-Srl574Alqrr{FJ(O)K(LfBls)CHiax~1?n;~z9J_l za4N==<1No&d|EB4V7&6BCsV~sI+S%^3frTXMUeZ+>IL`mA|J9=0jcs9u9f;0uLmYD z>|gYi;|yL{Twc?=A8&~I2G_Q>4=80x*`Yt9b8=H=BGPz<^If+|t-6jjGBO>GJ0{XX zXQB`(<>U7ilwP>!3i{jdxpGRzRfzZVF$?uEp=7?%t&&XQ2{PzK6lLCo8V|;%J)6ys z{$PFmUy{xv^;vMTWHp`|ITPW-U9qavBpteWWS_=dXP}2()kP1b-jP7g)1v*c}I+)Jgz)}Id|c>9Ie8M?ce$h zzJq@NBi>q+_xnt_i~W?C`c6OqDrh4=TbnIXw4j+mD_tyssimXn0-db)suMbuNm6S) z;yDQLt=^&>9;{oE5>EEM!Ye2fX)caGsE3N0C8Q%>$5c&aiavHgZ$PNl30vz-{ z>rm)k@*t4$(NGa;AK_ipZYRyFu_nBDEWQn|lLiSY9%+7ZaN+P`f933%lP8Ha{Xyie ztPWNFx}k(_moAcYxvMN8f-YQfJP^|EfAnKnc~p%Chx*BXx%$aJF6#JcQYZZj+HIR< zI0Q@xZhZ9Uj^|DInR8oJ!21w&m$GPAIvL+8ZQ+q+7ti=)2fG%?#VI=}6yiPlVcQND zGsiE*@+$C%)OieeVO|YiF*uWze8=VK;ib!j#@fcpCdotd-Q46}lZiklT{8F{6O(F* zdO>EE|Gs|u-jpd_KFSfQSukmqs)tr_C)Zf^?z#&M3U*8-)XWhZ8 zpA@S2x;ggl`fvS`-kHAu2A?ze1@#-rwUja-a09R!CnN7NMpt zf_ySlCalteu6vG<-4D$rR9xQPa4qdf*4J0lPL?1O`pOg#y3%qCNExxomn&t0q5*#) zXQBfmcpG=I9T$g5CAke84Nq%pfXkV)go@% z%(WH;y57$N@`|y55K0MnB__v^ZscTW^vl`>e0gMQzM@<72TwhntDlhSdiFfzSrne} zFbmsT6n*NDM`B-xbMWjot8eGFm50#|4?V#0+U@VW)%+Gwh?Fjynb_cWdB z?{2&!V)WLntJjG1{$p1vZzJ%I$mGH&((j00{rj|!?khIL1+bpz*!hgCQ#IP74BY&m8y)8Ju%Q4ZL z?(=oqyw!!`GlPQz<;p#k=yEb7%^6k*YR$%0?+=&wOQILBK8b$f%Ork$&}M!`DWbad z{~n@VUGt7`8%bm3Bbi#%4uHQ~n)n zQ2icH#M1tyu*0fil({hfv^75UDbjY(Jo)6~{M$QnFVcTvwQ{~b*XAchLn(9*pR+5a zg3Nd!5-fIy7;CecuLmKgq5<^S37;}?MrhBmQc&zXmKX4~DPS!@IX~nXN!Z3R?*4RA z9I-(E#-at}aA+VpBJc68N~XP2tffov6NiJ^NsLd!N10%Rh=`e)>_OYnSktp_vYALP z()lLIQ+uy(-+o(>XodgYF`gfV)%c&3x=1WWlmIp7pm0UX4hi^;_3PI?5JlXlEG5S$ zV=e=8RcROi9m*V!_xJKTN_qeEb&yHlE)?Bgs*Z}E_=Lx;q>XufK7UQk;Xh@co>cGF zZ;`d}MKh0no42PBw1r2!thXN~02dMiLH%^nzTIA*beyS^Nw)rM7w8Tb0|R{*>QeSp zw*I6PkuqEFQ99Dkb-S&5yW0`kEGglj?d;`ya_!Tn>Q`p`) zSdbnHGp}MzgpLyjq*~X=Rnz?S=FN)>m$lrLRZOSs_b(nsQ=qiPL9Id5&FRz}_2G3L z14i$`^&qoV-Xy4jW1*E%l&?bp=&ERxJw|1R$+Kmps0>?V{0#Fj{AO z>(>jQ38~w(`dnS$tK;6ap5D+GaaIs>O#zSrUF4NuYa90K?BPO#+>LsZwLC+?IQ>rU z-L+I$Xgd+_>&57+N&&Lp4PfG&p$u>*fIa*l4pU&80v~AyDB$2gnIZ?kdnNqI-nQ8W zdG?Q!j^kap*NtR;gPzWiG20f@9P#Vu6=6&Jr%v@xo$mdCb+a-etAv$&ss$6Iq68*w zhd^Cfq14Gjd|45FNvzc1jvb=8E-X@VRHI z#*JqN=AVuSndpb1=--3D`s{;p`1Y;EvGK#j&H2QZRiR9v^@&L72b&aNvNuw|AO`5 zWj%e3{oYfn;Txwm>G<#n1!=~dQ|0Ly6CQr20DM&d;K582^mXz(0A5@Y!y!1&awC)7oBfwO*u6W~ z6)X3zT}`e3sAkmtAM(4Vyt?Uw`yF$CCQ!7wwf&vwW86o~wVPd4|83b?l?FIBEILpL zoLKjrMW45Kd2>rOITVNtHWZ;J$kL_R6@5}qAEL!^ZsV$ezt)W;F63zW$!p^F#>B$N zn(=Gxy(Z1+Mg~hWg3mGHb~OXJ=yBAtYxGiN@_sfkQbd5yHWv;794gBVQappJZ^@C2 z3BJ3>;Z@*NbY`=4%wJh*r0&L2kAnu!pzP`wz^ELaJ&a{GmQv?b6+KXeBP?L^6s1Ha z4cLP+5}hbWAN^OYh(5m#$B;waU-kbjcKFb+P`Wiiep^L6rt#p)!~;!4cf z=`DGBz5b<3^kBUV*foQT;w}5^^Zy%v-V@=xUKzpw&B<>^4R0JTT*>Q2fx!--^DbJ-@JIP>A-lu`ej&G{6IA^9(MaP&-Qt3qQ8 z6ET(K2HSj`Z_xj!KgtW@TOkzzgS9byVs#t%q`458hndR5Lpf+ZjB5J(r_x(6V0-fJ zT^rmR@xySU^xyo3*yb`eHGM&~j|BC{Scav=&PIbL-R`~bF_sn~YW5mho6VSC6wm)m zO)CF^PI88V!W1b+Ar0GK8corajV{tE26(6KP5;0{uPaqcZL=!2tw8L7agX{+XGNAk z)@rLWz+t=v+FINq5Tmr!Ac@=dY&3lA8m(h{Pb~v->Thj-p_ErwLF{TcBk8WKWeBUPF!dEw zCf@?d4*T!(7>G7|jdDuJo)eg((8H6MJngNU#P6J-SqtZVU|teKU`zd~L3c1(TVOR5V(f zwXtzkuqxc3jhBbt>TE!n(9mDyR zs9jiL{vc1%4z4(=G6kqJn11ir%gh{d;k+2y=%#xU^Ud($r7YM#zSMX{bGmdi;*BLJ zv2YC-*rskNmn$)aB{us1!*2Y&;+lV~YEVH%?pS%7%bY79JnDRg1Cm&^R*i~!zw%}k zSlz$(2)tVA4H$zj&bnJdEnxNI^Jv5Yzaz#dX?nNd0kOzXXokCS!5|V)_(%4+e{dihF0;qzy2~jl3whC=r8==S0TB`7%9;6< z_LTkMsU_)LSW3|{gj`={>kl5km9qO#b{hApx-dfxO6?ODoGEX!sN6+3ai$FoC5LV> z|N7AE$3L0JQEHujXTPD}**`?HH|3eURp#Me`fc=D<|o^6yWRheS|1uD0S$OWT6PL% zAk!)}#Vy+_f(!+=dRwT`@=^jcnFXb;w%tU5vq&`l)!XBfysZR;laO_!VxGij!IG29 zbNTjdqRF7SB!CA5t6H^Y#CuD&z&G65IUM^(K3+GOsRG_@q~bM3QLm0fDw^Aq1q~Q% zK8#R3?Cfa23kxeni0Fg5>Y$_z0c^@WyU=IN4Y~xofv_ByF_#Ej`232%tTc3rQ*=$?$zV|BQA?!4ecfBF3RX?nyDSM)4A>@U%(7EK%(Z0*XCh)BR6Qn!$N zqyMar?ElCIbcr664kzz2bth5S+H<;S7_V*bc;<{?k6WgWuFG_xw6-p~5NDU>UYBxw zx88>qWMVYPM`TkD0pCX*V&=J@H4 zzcnjyoo(;1d)&O=+y>)C1rih#=@4(`or1dWnpzHIgmm&TH6#&kuAjR7Ujn zu-mieUVI_ItZ_Z|`4nHtbO+8(cb&;iw~c7+ z7_f_gzPpo)1vA^80!M#PDo1oflgpdlg_i$`293|0NlLb{7|Z>^^~bAM%wu$lDF5)Z z{{_5oHPeAJ^yO9*_bm`)^OdD+Oou2?B<*t>>oKLVMUnUKF{}W!vDw|Q^1tRMYX)x$ zGm5W==m!8~Z_BE<}=(<`483&rc~`Ba${J zH=9$*3LLeT?hiie|0HR+Bq}$mC(eT@E7R>D32L8=#cKF$Ikn}iB=@1w!B)%3csSx- zvN4oriJ=gq+7twwQH6%Mf<{;I6U-5}8=gIDH(7l4aPt-&q#1lFk=`_0UF_fBam6UJdBPkS z77GS~`Zri9dta9^pYvBFGT3ji1Ud?JcSH%r;YSgIyV>-x_yqnfliIr8!W#XHyGAe) z&AFjHk6xCGRh+{0hdh+v9)%1vb}!0U$1Dip!C48 zchEZHVl39KhZ;k6SzRMKWO>kX%{J2|V9WoAH#|5Z(vMd&x^Ds7<;7Gxxx1eU&LR$E zfgtbLkm}ZEr_NGJZDPVqGk@OF5>!_)qT+!-dXFI)<nH)^5e0aG+S%^ zcydN`wki8o!hn1jyhg$v3>t}^2cs|}zdr#bGMUb6xSE+g$>fzhP9Nisig=CGoxW0v zpX)d(U_e^IL=o4zE}jrAEW)uAAt(NG6U&p9{X=KGd1$D1@a8cz>tjx z(i^?;Ny7a3AV#X6%ErtwKVRkf$vT}>&G8nXAp1}ws=;c*pnWLQU?B1riH2se@s8g{|9O0q7VFBru|?$r;>tntp&P^(oosyKfOfNetU5 znRgcylGdijP<;25dxf%n>L?be%FqeIidcTa2qIcuM#T3o0v<|FP@z9r+lCtCOk6}^ z<7PwwIQZfaVvm`Y(C2|t7UGUv!30P1#oR<^wCl3*N-Zd~lK!Ph{S5mIsWcD1R2^=5s1Uy9<{Jw}KwB z6)K@Vc2mnKD(NRnlJH^oZ97qzQx`{O%u2Ib7UKwYqE*8G3S__>S+w)AV8*>;N)Yoj zvmG^68eglhnw?LEH-V_2x){Hlj;ODcC4`%u*-lk@?H21<^H@Wap4lmx;d=uNba>W4G@Qh3PN&li8)XOGWKF?eH$11+p?PM{A+IqVj9j)7R z?y6C$r+M;QmXI8vnO6f?+8}jA3y8KH{~+9^jO#!(;%9~&fS=RiFz%KoEXEcNh{H%q zbtukLZ0Y#$=qYGvvvy7~hbKC|RoFShz;+k)Btgg8xh=g_dj_e9OQQXE;QbUX(|?-R zgkgq{E-Y^E_E)OGZla_6r{Tu%)Gohsqfs!>MvZ6xK~N%YzfK)94GsHHik~4TEg_BLO!Nsbhg}@+W9KXuqWaITN9q;Tn3p>x_G_WC=8oB=yxLK?6#Dd{m&)Qevb%kUya8 zme8Tej4%soRoERxz63{>MJZFkIakmr3lYia zY(l^_{cEP>MvWi+Y`p4`z5Y8%X@Ymt#oh)#CHg97W3Tro)-q35Hx$LW*=_Sk_>;j8 zc;oP=_fe70o}*D6rT5OVHV*Ii5&q6!}Bo;VkF*)g+is0RL_c8?0bYL0ob%5!LX%jD~ej#6lTTv>gu@N2E-|-u`~mTny+E5QW)TZseft_MxVH_IuvIxP`SnCWL}d(K8Hn7lw8?dyyQs#;$d?qK8;;j z-fFOs3z|87CL#~%`qpe`n~+JGp`8_c@i&SuzE;Nfd*(jzXkYUgG($pd1MO0PBav)0 zFaQ}CBBF@2lh8yFM&Rn2&H)*dH6)nKlN6ZERt>BQ=7DM9LZ$GfQuaY&q_ux&p2VOO zQYwaWKYUdQ_$%YZ(TbjROA%MT?#eB#MjhEcx4b$roG+y(G?*J{^hejV**iQL$)vN3 zKP-MNLQU})nPUPNQ9f$I)kXqdXe>aA)2jE6vu)$amCN4DFI;)dyffic)oZRAf5Xv5 zjIo*jGg4!+?xs-0vfri#S)e!lw)9bUnf&R;2a~lGZNFCg&&9$q^qSA>^uT}JeUqEF%v(qPP5=7i&jv=Lxhs4X|0`d`vAVxk<*oim)t{XhY)E^k4G)>kXd$Fx zV;L`{MR=LvHFbOhR`DRUN`p%&ohU3~u70M~^bFyiIMVXCBGII(mJ{T6j+;g|iQFt8 z>ig+UyIz>(@8&4#D~If*cqn7bstcOLHf_u2gWHQ5$@2H{^4i1LsJ8s*YShce9t*D1 zOp%-d{cuUfdkAawEh_e{rR(K;g4Zq?>O4+EL4}E&M!gyK50yEaSB4GZvQI{omQ-=U z_$MgS3+dWGU)8t)RcD>aB!zR`E&kvkGK=$(S-90gqGwD~+H;0}|DOVk@h1>@GfzF7rF^Z-p1!a_h z&)zXHRzDfx2Mw%^EY4TcJ&n;*G~HT{mi;JzIlne{I?B|@f)BD*LyPQ6N}5!=Uy=^7&GzAgZ|gNqHR!2g5km|?@ToO{coSrC+Sq`R6~QOKbWKY z+6^RXv@m)~TjYwP4)h!N&8ivr@Z9fF^;gxZQnk{D9A_T^yn+0Vh4- z@TfhAEw*W3_wHhuk%l4MlAqP4m4^WW5F!EX1ERAsID;ghes#Nn@4avUNs0NL9feY- zdzmCb!-nZPKpOy(Ej)8-s6qgWB9k?ZUhPu(XJ`QoCS=mv+qOf!(`Srd>wO{=Mi;W# zqK?j|psWN~*dVgOw0ph3xJ>BHkJN6{7&Q$tWF%Zp4$x?%n^aJOy_e5ytH~Z< z>FU&`7$j=PGuR;JqIkE41I&>5g>;Z|`c)t|VY_WPaK)R&v`WNF?}U_|x_miqL$Ngt z;pf$L{3;lww(!*4RWl^tsJ`|SHmC2?2Z3G=lQ36@YiedaH)a^p z(VM(RhPuKW*r$Kdx-a$Q%6iCd$s~m{zF^qebXh)|zVT=GmvuiKtAXT*njih4aM*{^ zEA&KoiB>5)_ln=;iBuG9DahgE<{U{b%i^7yTpw#5_)@_h=s(=@ghQo%&?x=Jc6lCdeV|zvi`J5}yw3%+KAx6Mq3u zOs?~jb1&Gv%0_`pB9Zq` z$~f$7LlD{u+YNXTY2iSYblCYm?4(~OGfzIl&5uqnhoLYCJ{G}5;B(;6ykYs?F5{a? zM@Q(3flPgG?DM_)2BoNxy)CKvnbkEr8Y5%SXh(;yNkm^=R)kQIzh+oA;`!Y%LZZO% zPi+|JcCxvZd`Txy)&3&Ctqn~0JQp*1NfHT+X$xU9CY_a;HfN~;VQk2RWU?gmVMxI8 zMA>%I0)uZq>Gx=y|~v#NxPrCTi630 z@;4YY&m!PD>rGm?UgDSj#hQ(DyK+QAWq+)u%pL`n54) zTccda6L}pWFL5>PZBY#llb29ncdOe6#Xn3{ni2+r`!*XWWisS0`Oy7MVfn zItm(pmDBhE@PUib7CA7ZH}sC&AWEx$e(zSj5ctq>2ED(EG%sFo_IP)7RWcVLoFr!i zsw+2FjFg?z`)h`$EKQP}0^k||U=01^Lp5<;H|Gyh9^i${BqQtuuZN?HhZN(XP}uWy zABdNFhOnV#co#}HE1IH2Qmo}m?(Ef5u5Bxz>op4KQk?YIwOgUtF+1-!#ghKP+(tzz zKUn#*Re4+li$LA8<*{+5a1Im^Z?3f>w4 zGwrsPeH5xQgbLOEG@1f7J+*x?kzRp(lp4}ea0MWn>m%8c`hkUI!sbL{qaIKm4<+A; zt0jr=9Y>cXNS;1Nqf-lDFfl%Nh4~;KbHX2RHM|<^;(<(Mfpvi*g^)V-@}4Llk}eX8 zmP;}nnEcvLvC4?QbUc6dw5CpSo(+s|tLyWpZ)KlqD`SSJT2GH4KCIet>HG zHSb_%z6^DUYj>DTM7Mc`(w<>^{cTaNZa#kHst4#_y>gRpdkRMXNiD%kdV;4_iM8k}v(2pBxv2a3DSM8QP)s$Nq7Q+=>AcrP;yKa6qpknH z{N|QMyZq)5^xap_AApkXBZ}(yB7}TFX}n;XMzUz)B`&i%HNd-AQDhN7ftWrq26@7(4Pg~fic~{+E%;<0x6ui3ERVOp&h@J#U2Ef6 zsCAx!R4}GQq;jlctxkEm2TvrCw4_}3t#o$_-Th}a$u@=V;(}!38!?pfCtqY9FGO3( z`XBW_cJB$>!b8&*&xQNB3P@NcBc?ll7N6<)3#jERe~RF)K^M(8LJb>Vyt#iWBNR}r z$gR7kgbrXq@NLdnU6WfS3y#X8G+G-Cm~n20jyn(xTwB+|{|TX8!AB2kr28aJJqeU( zkg6u0ScRG6bQ;$3p+EAh978nG`OzIbfYIST8|xeWmwc~F7xC#N`($44$vrQwTscX+ z@bqu}U+Q^&L7nC2c(4<*0JGFo71d#SD6T*jj%xQ(6Ppi1AzrjLehUN+YVZPDR2DlN zSOPf0&2K-U<#ySeQN!Zpz9Z%qc<$0#jqSYy)h_pc9tN`i zY&8(kD5$G+yo{WzcwfJ#qke#ML2HOI4r&Hs+Rh$czLIKGxvmLrH^-N_)7}+-6-_~!#oEJ3|U>>Q4u1zRjb*dvHdIF0C)02VA6iRz;Ip6S`3 z=HtxFaJd#J^eHa&yxBTRX&(d91%x!s*X*7~Uucf@jH6%MIG5oXh<{~$aDu^pz(g%> z!&joWjLc#EmAU_O?w{8zq-WIE{k6G&9SD}qeb8;_%=vQr{_T5#1t^qjCS>8KRcJaw zx_7iwz^{6tKmauACxE5cxHg$l-4Cnq;WSa`aMJQ>YX$0Ux?KU^n7KlTphjh)x6-&6 zd2pk!qpR5C94Mzk-S9aPG1t`9_wKgs%3^=^8z3X7s1t*8=e-9on#nEclgUSV%v*as zRP)+<8$e{V7z}w2M>rdkY-F{|R~7?d-`UUD32b;eDVPX2Ii4UiRtfU)*43=tYL2LJ zcTbHHaIF!bAOs8iCR)WQR<2)TA*K(RPjTdxcBd+YLnK^u+%4};MKPI%D$8R+umK{JdxMEwJXPP{&8q+%CSN~_oL|fVkM*u zEOd+BeB4O*#*X~=e=q+%wYlHSZ;{$uJ${*>z*Tzj7EaMN|L96{)sl6#4uIa9p+guy zr1Fz=tvaU_-#Ro0%UVRK-}O0c{mR&Mr$U!fAl}t_-)Hl-ahjh>I|^n^Iv?mIlHrW9 z<7|YDN_QOlH=nd7=V(@h-EWRCT14OPU4P8z!N()GWnAkSBL?Di%;aHz=T$D!xR0ns z*P&tsu;L_YmU!U9k-GekAA|)_Y&jx^nw}>0I*z7Y-531^zG z@TRu|fx77^fs^6ATQxq3HxRlsuX!HG412yQhih^%Dy6|X+63(J(E56~ONw*egj;^- z!(nUv{?%*dhRoylzlPuc)0*k|79Gidw}{CXbdHInZo$w2&HLLs35v`BwOvfTquXNg zv|>zqv;~~u6sW)0d+4@gNZ3F!->?nzUD7)Ozm?ZHyFDQ+sessC?Qj>ibZ)|y6%hmW zpVSF8x>BqgV=H`reO%JyBFe0kj>@G#Kw+>@cX4<%J+#vqt7e*PYJ2C!Evu2^GncQ@SMacF*D7u~RG;!6)Tg9Z##wa}FF%+KS|AyZ zN+cI!@6rJf9vH+gTP{M-DIzW@jFmsAPa20NNdcfs`c<46(56;J_}x|QGET|Kbt+eK zc=!YQ&!H&kwHjo}ZSxMc7|6>gh2Bxn5ZBAPZB}vshj0IU*LZt4zrJ>QKiD9k`#8!1 zqt7;L$&HoA^T7)Tm@WZspAif1AEikFMInmW0o&V|^su&)iWts6xn2fOB5^`I_0)3o zVg*|}9B+gnQY%OZ6vh)FH0RJ@vSErw6p*+qkuI16r;rTM&+w&`rCkk7Q{qpJcAuc% zp!u1gXOciukIbS^X?O8u5m@S>VhLp%827?>J!7kz^HeqhYq$~w_Ym>H@RBLKpzFc< z0WE>b5g*2;o>0lMUuI+d5xqNqjNj^SmNrn7Rj|Bkn`a3JcD?gpFs)i=FEDgD2$|Ij zK>2C8K=g7Nd?&pvhHUR1KQzHwlR7+pc44UBk2_Ks?t2;M^UN2PBdPD6X&<_a1|=Sp z3Ew;V_INR}gGA|pfv<=M-%KY=qEJdvG-mt1dn$zqx}ow3h3!(xwa-Kgr!!V5Z6^H2 zswZk44C0vX^GFMw0G+}a?NVJbo=C5kjvdnOrQQ84{$s+G*8Z2=A7qQXZy@!dPI%2i zH$;Mn_-Cm!txypBI^LJHw_JX1jKwWUQL0*kGcM8&Gk^>yVuH6e$o#eIkVpN8o}Y9= zz4&GLHH-RF4OI;U{SyAreh(q=UG`4c15rwdl9j$HEr@N^{fLgenyhvfOQZ+mQoV(j z^Zh^Yb$NU}!^UPt{i>N!|4ilL>s2nk@1c*Y!wB|sq<5!=Azwgl+i9dpMyt}N9Ac)( zuk=z|k&{U32!mNNW@x!{dlo}!mnvHK9^?~Rf;|Oo&ERVh2HjuhtPA4{b?QdqxwUApio-GQ}W4bp01Ey z;+g$@(m9x+ir2r-**_Z>-zEVo7vFm0m*NM%bTLAKPFIO7&T0nljw^Lnk2#jT-Z_lv z{$XQY0^j8|VFL3TEWGfP6g1FJ1W|Y?g;V|1`9Qj@_YhCa#y7m2Z}{@d=OUL^^)LSo zzO5HzvcF4K>~~Zo=%*jZWz=$Lvo}%f1Lsyz=L4r#2&y)c^t@O5t2e)d<-5)Zb%*wf z3X{P(17WTS6L3O%G4|V@-|_?3wC?8|{%z)2iS%w*()X^et3!aV%C!vLjJI;Ky(R76 zZUbpFA~Xpe^Yd$~XEQ1)Uj0y9IB~4Ah_~Klo2Jfea(88YJAlITeTs*(>H-$P=nrm5 zFr@vCb#oXDzlfmREzGgG+l^AHK7EvU55!ybnW)2~v8j&A&lhQDQII*zCiCjl&1hbe zQ$mx@lVYVyBSM6Zx1lT?SQADt;%CFy?v-ZaL(#Y6H6@|K`P~*v4$;Ql2|0N&`9SaI zk&RM;h?{x|uB^GIHvHzp^qY@;O5sfP@LTzVW zw^~t*O-I@ipT%?^Sj#|CJQ($&p`3(+YGhK>cJJW7|=gK_9^q zT_5o(B#1<0{hDfvRANh|F9|Yhe!t+HeAxvhW#%(UWI88JefcK)Zt+Nr7MAoEk7GpN zoUZKJc?Xk>q;CVdOD&_^3fjOLuXo`aa0@x$zuViq<7LRerQ|VasR&_)KObb6aE&l+ z_-KgU1sdV{`a2<-G>DZoFl;6}@9}g3?HRfiDTH~2cHeuB0m+3rf6N1$zh@@GU>fM~ z$lr;1?|FDDWM~W*UsI75Wgl=pagQ4PL}$|(YgIj+L}gFvtz+?Sq>E=5lKG`!CwaV~ zVJl7gB5l**f0b_cBHQbGSYD|>j|v6wsemo_4DjHzKFLojtmDDS&m+KUp$EAbUW9b% za)myDWqU2|Of=8rw5uVAm3O)uw#z%WD@-ozgt|U24^I>*(Vw1ltHu=x_SHD3Fw?5;g)g1obtB(A>C+WRzAaD@j2=#!KjHz7mx{M|IvGioTH3{P?ld^0S~Py`PTI z$p9;?Vr05@*mYQU6YV{$k?2zDFFYv8K}0Rhh^Ce)u73E)GnIe}i6TP-$D9Gb1 zP5){2AVr=I4+Gf>PD))QRfq~rEF{4<=NZ@r%NbT-pi{SXN1|KEWm2alYqC_r2+i4BG5o&N9rEmFf}qw(r!-kfo~c97UBMRGXYPWEhAj|SZ^)J%y1K)KyL0^&+bQbl-=k`bEesu0Hd?n?o-e^NDM~R7Y ze9flG4< zA`e~rQ79XX@sk^p{;dZN6&p8$Ythd~LZWDNM}{K}PGZ}wrA;cE!kOmTGiTGyQrZ^} zH!zz{OUNxz-s4)`)rN4O8aksgORUq}0;LUu?hGL9^`1?qkT7=fwf@f}|27`gQFUH( z02ZKH;OmGQM3W?VRl-WN#xVQX6ZwBoLm$S>@Rbz<%W?G|N=G(Hgqb)2ftGNcJXPDz zyRE!+FU(ix(u7^*gC_F~-(n6tAsn+6A3tr?hpC9eSa6v%+GWh8!`^Pe&wiC1{VV$(A^I0cUl`R+hRviW*ciO zuodsu*rGiz{JT{HbG~!)w)*J7g2I8K|JIlQVido*BilX6)hF%6Mct+T71@7>91sMcz4%`62Dy8Ysjtn#hCasBwRBhz0~{=x0Jj^LE#wp3 z(+w9>1IdLY8i(u0F&6zB47V;>wzOZk@`iCjJ*vg!0*o@9Rh z6y034+F6)_6D(^N11^$8{r23T+CX3VWbQC!WTIP$5+=gWK44eW3}3i7X}&*?k=}q- z@Q@TytfVAePM21eegxjruY(k_ujKlqlEoBxv+sjm;!RdW!&DjH3K{F5>q9nxH>wo%HPuhPqusu%>{2Ov$g~#U= zz2iTrW5tio{q317$cEd-(yUq%4k&;zY&q8015r@>k6Lp!zHsDai2?*$_E;_`mfk`w zkgr1l9E_-xD<2?id?dL7;U1-DcPwaF=DudGb>GdP5Pu?Dd1gpp>ysqS&L2LplGe$I>3v0K~_`w)Q*mQsx&sV?`oG zAyP^1VKUB>5FQ~vVC4^2H#5-Cmq6R0Zi@hYv;|#N=%|Zg0+UR&6hmI=ed6=j&q8q{@YOhzbyKXX;)Mn-5WlDRUts>3jy4Y4`(u^CDH(^ z#ggL(SWvW#-RGxTLl(>*2pPI!emayPb>dC%yS<^sAVI`J{kXJxD>-E+>#2A2*SmV0 zpjbFihfz*&UHSf>rfz&Erx%&c`X%Ghdu%*9M(_Qmj}FtAUiVHt&=)A@@qnaN~l7e|Q>DN(WXdnQ3BJsn%81|U%+;^tLrwYrin zJ#sAYkwKrX&GzprEUqd&+J63>+LcqqT&Dr7Z|V@ytm>N@cw-#23dLCjP(00f-6nXY zq^~eMnU%pO*+L8m4?~pAFKgxYsfZ;5esM-9=4pL-0><$m;j%IHJ+>{P5G9gbNZZbc z)!d988(9@}j)^N3yMH8BO$~p=t=J~y7(JaFPhWq!K|aZqmP?y*Pa&H8KmtW5QZ zcq5DC`(*3=Xq%M@(4@(ui1q;0!i-8&38v+z#iDow(_g2>w0kq;i2>1qKei`zqAu!c zOS;iA7N~`?RNdwg+>5;uk8~-qSwWuPXv_P1N8b@L1k^-jdQW0P=|I*?7Dev`olKI+ z5+}W;l$z@CFH;0KS(Xmem<%^o^-|hig?0=1ADqvemJ>FKCA%k(#C`Sn(;r!v)nA@iEMQd)CADmNKJ0(6k~2n1s9b z*x-d`6wl+rMb1|!GCGn$#L>i48lJMJSKcqzOzvc6ey1wgzZ{+tMZm@vjRF$x(JB)7 z3aXunjq>=lUWNO`2wJ(4Qv>pX{JoPbd~lmp+YIM0M0lAbvxdFgquX z3w$UA87d+~qf(;57uc|*ox6J~3Qxa(d7io1f768vP5--x$>G2US z%R1TCtgrN+NEqrd<+pQ_xeYnkzphuok-EPpSS0W4B8-1ASn!bYU<1(Dc7Wsfb*P0Y zKN7j%DENko0rT)^+{FR{WexUdBC{ifD;}DfS%&Ff6;Y0t6f88)^iC z+c8WN)Ct2Q zmWME{Vq{>g9i?d!r*S&va2&2A-6AQ!ne4Q~5m2F(Ka1c(F#a?r2}N@S_eGb`YtFzq z|6;`A+umAKB?K)0C#oZHAz{dcu12yE>_R&|+8mq2XAlknPoa#3$Gk&PHI~NXYIfKE z>}Q(iog_8@-_rWs$mHlGud~F5^?mR6KNMbkjverCD>v(&c>mj20r3anpU9`(k62)| zsJx$PbZDlybuq^5E@*^6>y$2AH=K1wNF;R@D<9A-iK75|qX&o`Jd=gNA4r?*;906Z z$hLVw!paYML$a`u_}#;rbcxwTJ0JIn87Lb+>Ig$)*4tJQ)$07dy?sR2hwP8>jN`7z z2mL%Z&_B8{0-$+c5Zy*|^T|I2yS+W-e|B(l%ft-3O$)pe9lp<*11J(aQrgEikY@k8 zaqUvj{E9`d>6trslggL%-emtr!E&Zspr7P!xF4<1!%nt19)%zi#E)VYyE0}QhWiEI zYw-9@1SlIT`3Ld&26)J?jX60@Kb&3Phc{ag5H7@wghB46d5LT4k<@6xwijQQ_Gfgi zwujTt&mHgyy>srvw5~re%e@Sjv)5@;fGKuyx(8q@YOEe3fi5s`J3s-{7$}E3f_0b3 z7f#tyZ!pMd5BVsiJZKYhp_BNbXLek$?7^gf@&+V=GxPic`pM4}IUzP_I6E5^vkWC2 z$W6a+5%A7e1XTDWK{VVMg)JD=Yf}j|0X-Ry_E1I?4u-@oUh4G@FDfPF_-F8IIl9>Y zucESbA)IGyv|vtLEGSL`Ji7|IA!soicYa57De^YuFry0xL4*tE)PG7pkuf`X&U^Zw zb_mh9fSHZ8rH>lLKz`pi{aNV%%sCl9i<_4+50KWl(7$XodW6dV=FK2CG#V2`b&EL+ z$lKu?;9J8to__lH7zudLD+$l(??3C&^-^{B|63(liyjjUE9<=g5`TMU~(fr0U! z;%ugjgc<=HTe??$0{3_IK?v|9V+IB&H_+a}mTOJD5qBO;|jQ zD1lNZc5ETWV(-JFbdpgnLB&cx(d132!wM+zmJm4C3;r{*h*Lf0$X|z3#x?wm_2Cd9 zL(31}ip~a!umBgrXc?qJQTXK*3fIj z@440;cW`)gm{Zg@%_MN7Em94Z6z}Mu@0uV}H35*S&p44ye#rWSslPy_@zrOwTT&)M*qUEEiYhdY|?-lD##$eTzoM z(zUK|o8tVv?~+D=7svFK{$uNO6XFqNgwf!dw@>t*jrXXFA zCHU0dAUD5%^1}&|;Hk@*VIOFMhj3OmVS>uZ;q$)(YR2gumEQFDNHV;%Jtp0}FHM6_-Z zW}G|rPCpBtKwf(9FfknYGVZvu{xyhJ9niHZ9KLq7=A(}E3jTL`wfzfz^=DYWKREYi zYgTS&%x>3~hSn%qUYEncuG`#}RR@UK?-Nd z+CZL1g*}!0l;QQ*9yq8^`v<^Nux`0!ulFHp5=(b=~czZ=>+QTOSq4MpLRB+p?UGPiD0Fz>o4MzCkt^1;r@fK|I*e zqQF;Y$fu=C@FVbdhfq9phuu&gqO92gMSqO0^bI&|ULp@Kfj*dj zK6m=aM|{KnNAdHCnzgoHcxqza0M=h$brRp-LVHGp2Z6=7I58<*5Mjrr$}v9eqSJQ! zD^Q~~C%6SH15z1P*n?{1|#^wEEAzi+V8X!n(Mtk zjNh|<027eg2MFJgh+Udop;$-O!M9GR=WGiUepCddUGVPTSTXg=7G^7Bvi7PcB9Y4r zl6+J#HhlGipd_ z`?xPThZOPr5ie`BNum8+sbFh7H$k6?E@qpJ91AC;Qi=;+leA{IvpuAdxrpbDE$54J zgh3>Fdeb|dP6XPP^miaU_JJ=AdhbR9v$5&xt{9#=CG5YuA)^~(xqm|VvTEZm(I994pzBIkc5%g-bWl3ig_4`JaV<` z8BTs5qM?hS*fe^7A&txgD^%BfMyG@M>Y}B+-LjIm^gqBdmzK`y%{7rp&+BsOkZHcM zzCIZpEiG+9xaiXvL4rDYP%e-TsCOdy3y6jrTs3mI)H;WsfWiWMOcfhFL4E^e4rfxr zPQ_b2lbor(^vxT(u<@9Z>kHr&HwhR64N${!p$o6z7jJ_4{=`nmd(bCo+zJB>tKmw> zd}8C3yvw8=pSS3*cVz0alg; zVkk-spv2snsoepYOeqSYP3RPKIkWy;rbd?kK5xh!%SSB*9cDhM{w7c(;?p_6f}{>*z?m`t_Y zqk9TaFdXJ(Mnu-y5834Km#qv#Y}q5 zhd&^y^se~q*7?i7ghyQ07wVO{_o}P>fw}*-GB=L`O1d9NbWrpLPxmG?SRI~@<#2+D zJosQkVB-JEsUdYk{hh0>+62cnlcdi&*V_51_*!97rkdp^?!orQd2Qt6cLa9ziR)^! zerzs9N$}pz_jQU2oh5H+YdeK)aek1yo5@g~OgA@qK*lk>Oqkb|3zYyx1+i#ifrwnF zq{CfaS=r4PJ%jgwaZ-OKGx<+=;-=fzh`YDMBS&3z?WQYz9%Tcxz!=YCP5 z<>^xTQsN})X}q#xI8>TQCT>Gw$weFj(JejU)r3gKMB2zOLJ9YRe+(Tb4HveKs6+D$ z)BU|0*RT0*qM%Lh?QfoHFieviz2kRCIsSu753;@D{3{XiJ7|*iH1R11-@<1; zP<~4meSdVwxfZ#PkMAX8d&F0=y7o9XtvCF-N#G@X^&gPj!2Ak{GydO5*$ZW^u1{Ae zW?Zbom4np`FULjkYwfwm%HCY*tielz!RqD`220hK1MztZVJQ=nfswEey$I1IO2@QJ z(>nlXb1!_dyh`+N0mRLdb`)uM8!LpgSybzag~eeIU%vW&5+8$(mpI~OV4g`&2(45D z3}|?2b%n`GQ|8ab@7K5RD#dAiwSYnc+h-WT@#8OOBq~sF71Aa}V16=O^^G+ri;tll zRd{rC_rzoBtWZ7V=Ec~*#FqRy-8?UeuYIKIYunBk1p#0Uy%!K#oS|bBm@8?fa%yl8 zP9jc#YNb&w+w$*^J1;}=i=%r7&Ro$WRr!^fPL4z+Y zFK;0^)WkN}TsO_jo&xZ7Q(PH}1pXquvu8v(9??=}((oAzg-2kn7-_3Y+5G0n)6&`%z2L^}EP9{5vOxy!jSTZ^0&zZO#1XpSi{O zq=jO~2Ri3(U0H|QaFG_ea|p;DC~yc%Zw5|_zm(K?CqWJZ%Kc)k)H>A>ZcyhnEeth#= z>fnD(9_G^A+e>fz{;vN??Pzi6uw%d|`3``k+yilULdki@1FnakdLPBA5+p-!fOj+= zZ2>YpFNl&?wR&C^vUFj%j=Mkb1GXxB8;8qNbV1yoNbBeZcSeGSfpU}in$1!CoQaJu z;&IC0P>eGM`qhx{rZ@Hak3UY%0tk2AVB>LF)7*rVabYair}j}x1)H1ZtX~MxW&4SP z8oA;IiH4SkCqcNxKheMQ|FX}$j|-wd(!W5tjF#ie%L_n+p1C6&!sp}iaaw}*gK-ia zi;>LFpN&9&$J;DUAe_0yC)m4ryO%&KTTj+N@wNyt|!*d*Idx2^*;Fve7!$A_rK80OG1JgvWXldgVAwl=vahhl#WH! zp#ojbf^>Dz36dT^ z4_{_Okud(;tqlksL7!qbt_qS>yWX98{#Xxs#Y*+gMT30z+vNdmWTppS=2qj)2?`IvWZEqDb+8MS!|wiARW}@Cxl-<|AZ{mz29AL_yaNBI3o%M?2>}}lLon*E_@6hk zz60#@H^E8xFw|@S3hMyI1|@ckK!q_zzLOzJ_4E(07uH=NHTWO$I?)bdBOW7Op>+mYsfZwb5Yq0O zJ2+hxL$9qj1x~tJ|H?5A;W1%NDlfurc7QI;+y}{r?!7=wPmmSUna=la7i@8!e*Yqx zk5Eo+mfe264QCxN1Y<%P-j&K}C>LztW)xIVMgXO(v&*UEHapV)Jro49MyyiYt?6BS zJ*Zka&3^9O+1_4WTfKeTc>q2-h}vic%e+Z)AEhwH$uf5cM9@pd7u#HaQ&v5*|JrnM z@4fMrjW*W1BbWA9tB?C`Z%T{+==^DVC*1sOGp@zK@KhHoAV}B2oyG#etRbyuiane?wN) z#fl@GI)k}t0=u2Acq+A3tW&)bGS>VqSrGaeHF{Ga&8P=Jer6AQ7%zS{o5`%CqRZ&2 z#2uzvxU5N|o+QimUSk+esrMXigg6r|HdkVW*z$ZV)=gsZ>HQ}7z^f2l1`=tmI6r=w>w)dajX?vBnkzGDFqslK^E=OBZRcdoZprn3 z#j_scQ|s&TjX=I9pLG89Yfr(2i)Ll~BHMo|Hu%ciw~PE&#cmjEmmgnopCV5j)KBr+ zD#Iw*4K2FB000J8!U{TA0%xm41Q8xkbNeb?QG*?UdBE-tasRXkhQtd=Durt+S+TI^ zfeP87S81XrpVxt;E!~9b&&Ui`5}o?h-b)j;dSuwbavG4aj_qQEvY~n71Md4_Z+$xA z9$NiKRJ_=9tS(@4v6wLEu1@#1rt())lm{GiNO#zKFa0iE7jSMulT2+^c1B`%84?Te zn*N5O&FHWccfiZ|wytV3mG%lW7!UNvFpw5(sdm7a*oCk|iu{I2I6siXN#Tp46HQek zYwlr2Uw-lSH2urCMbljBU%KQ`jr4e&%Te0F!sYv$B2JL|PGqUGx_* z^93{fe#JbSpJy9fmAUhB_1XB=%9Z|C@$42sjyso+H|-DL6yNPUKHPocfk6{MtSrr$ zy9b~;M473DIRm>W+$e1j+m7kb_G@ZUBl;py4N2~1XoJ5eJAzbgssMmv7ir6zyGJDr zK6dN5euf$+QiqB^1vBrKp3%Nnyo!=2h3M*H&;V~I^iJtsWYfq0A8B_UWa*mM1wPN7 z=bYU08xTduiT-Wz3`7~b4|Fm&CpK`46c$Y~&E}@YQgA6> zT3PL>aAEezIHU4W?|ByLPhxy{8dcTepRQ!pdw+AbEkSEK*`BQ|SL>BvoB^_e{2*ui5aQMbGc?p&+~od`Q1DqxYw#MqrL-Jm^ZsC` zKiGi}{-fmd0&m*vLdG3#QI4!xDh8OB*WD<swzUIMrv)3BNX#>^oJTCk zI)?>o0oGij~0Ry;M%$h*!#p4^ak+WMd7j2uhyED@c(XKC> z8~QSNF~XqVIcI1jzic?6;~$xO^9%(F$l=6^uo#u)75{IpC)gke@L|jnX_6QM$75QB zk#kXfO_BMI%5wiE$8#dJG~nUjjSAvjdc1h|{{BHS zD=n#>I0|NSql>-cqi3G(5AM^d^|B%bSEbSBo%ETRRZ^1-*SEhdvi0q6yAChuxBf5X z^8fh4Q=$^zPUrlSE%sE1$fRcaf{F`Uw%P!kWiHKV)WcMNRv@YLP_MU>f}6-KnnjTb zpfn3)?vQGUrlA-I@;irP!d(f7&()MVuh5zyGH^+#;=%Y$XuK)sIR9gcE<8W|dNhRC zCxAF1Ohh_lS%XBf`I45_%ULKBQd1_EYXO*UU?V5}_&X?7v zpXx5M6y4@CPebZ)(}4xL`-4h@B~H92LnDZd*y2{zet($gX#x#yJ(fpFX^V1wdP-x%?O(!Z#p9F)Cwt^XfAz`uHXj&$Gl8k^4c#M@n2k^M&;SKN zIZj#$W|-7_b~=BR5*$cr<=DR};Xw;u3l)hEXEw5r*F-{pYDkVxOsv)}R=z^xk?54w zzqMs=yi9G3jyDK`l~HBti5BPWYgmAVY;D3puBds`xr$<{Ie%yUP@CViO*FSY8@%AN z^}qB>P~H0adm;}e@|FH+^?6$*55Bc_OZ-DL(Eo{q_?e59j`hoUyv!Rc`kgBSndxK7 zMZQY(=gs7*WHuQs%!N@(?=Jme-i{*iFgba+bv~CX=CS5KvCPCU+IrU#qCyw|mtCWy zw7SAsE?Dg*+t0H?Mj5Jx(P_BFCUH=^t2ov!!c(wv@B7Ui*{PVxMhlZO;@NXw(p^Rs zq$e)c8-i6?08(XU-#7wm0=m7zA`HTO8+{=NczjXK81&vaBZKvy03bniZU7A%g+7Wzk!ch`<)Un0BeyJXG%=|W*veZDS~ z&M-}Em4K{iB{G~dy>lByH`3rEZ@0|H9OmupTwP9${2ty28{H>Snl25Bb&;G}?*nVT z98h`=;JI4fderk#^h4^z-BN?z`@OoB*bE}}h3H>p&#Fz*4odl0TFLsivXgx@Y-J|6 z++{0}KcFHViPds8n{CK%H@WF6etbl>CvvP{vvsABb;nBLd61J%n&1vC0V+DqMeuqn(|#wM`&I3PU$>RilA~-C-B4^sD%7_2{~8 z(NViOxVYL!-4{p;{*`DhAO|fag$PqSQUJ~1xtt8k#H7taR##Wj=6HE&RijOyVMz_f zZ;R=qQ>y)+4&hYPNG@e}{HjOL{qUFM=05@ti`8E|HEffG-Rf}jO|;b?;{$8CQ>L)B z6uO*}2>S*UJV7R8rXNy^7b+-@MgoQWSw!WSnrl;xea@mc7^h-y4J?Hf7jr;H$k25q zkPD{-LBx+Mg_vB=XnD1=G{TIRdk!?b<R$3MuXlwv< z9Qniw{yDhf+M`={0)acHcF8L>HPx4+P5tNf#IKCZ^uRGrcla^m?&x2Vz5;$-w(%oU z8ZNDMpX&EE)&_%XPht=gzcTNfOPbiILL7FnKk45;_nEuztK7L?lsos+YSG^(%KoLb zpWE-7Yc(FGx%AZALbqNUQ)Iz5vNxp{3)M{1Uo)w9?Iq@jOz@mr%zjPRy~qWx(&HD6@jKwF|La7naX2!|8)FdDnDx2IXp7com;1~S?q|_v>4fbwc=n$M;^YP#!Y3l zI#wNLTB!t3U^+iYHQ*SlHnlQh?Z)!?n6KcA`5T7?c#k;KYZ_wBN50>UQ&!=es0g;R4ZiX&1Dzg|(a2chEm85OZ zeaxIm3Pd=RvxR}zdJjd$}8!Y z*qB(|-AQ~~X!^mHhU9836&s*E^OxWkv6TfI`i`3KA_RGcM z`L1FG4Hs>DY~$AK_eoACg(q1Qq%}1VHpmjPX4{aAkOS|gV|_5S^7+8RD?gd=w2F6A z5%zcGRuLR&$tBHzXy-ZEoJqsGXB8v|(jFz7 zl(StIYpsR6-|yVyA;|)iKzSTrmD98KHMyu${f+Z`o!=buRX>F8hKltxgR$#%+*hm1 zo9ml9QyH0^gS}z0v(uQDhPbi5yDROPfbe0K#870n`w&|`f}xa7oJp zu(y|lKeq08DG?f0>C1*nO^*JBc0(}M?mqC%)+aB6dGGkfGk4u-=k~29YyIz5-PKPl z94$OqyX$^U%bpDhC*>x~x74ZlnH#SUO|y)f#tn&En3A@(qs3*d=g&4*NsR%*6yOK(j#luBJOPqX>FPeY8^_Vo#}I+MQW#e=6_0; ztY$995Ypmcy12GwyFnzjqLVMgg63jMCG|CqcC$SAaxX>Sg94~HcZ0~`R z%uuQwpi<^QeKK9&+={XjQ6MyL_ALp(T3j}sw9>;PNa-Bf9!tzN(II=;WXCh%T=YP< zpk;7kfC*+eBqx5B6}cpX_IX{&zKmA*%`AZLg_plpx?$1690CP^`7BAV@Taf;$hd3= z69j|`v2rZh)&NvPwIyD!+zX-A~`% zGGFsUn%qid3Y?4QJ?-Wr(ZYs<-s7ocTN@JP<=SAX_~%YAE(2Zo&Vi#~>tT*g zDmmV%lH;rSu)b&Ek1YI|g})VSnf=I+CSd&0BB{^L)zos9N2d&U!UZtk@b*_DuO#yq zlA0+|^i;>fU9^4wHGvh>-p!)+T1?;lA1 z)?CZtl6K+B@j?!MiI*Mj2@6YHZNeZe*VWjQ*7YX4_{D(T5!Q=5Jjh;|oDo*YYT= z(wT+m5%tfQX10exo86a^HM@5$J`W@N;A>m5l-==@Pg~UDGh6ZqvQNjl4j}Ja_>c;* zucrBaHw_5Zn${DNu<=T`DN|V(315Jq@-7%TFG?ZQ9?rBkqtxcq%egMmbcvOM(N@Ds z`Q}HZ&&>0e=9rD6-lZy9J34pmN87^qvn853xac!Mf&lcv`40yJS%7)OP}MzXJ_^5T z>7*Y6bF=d~JVoR{b@1pRfY41seC8uuM~yN{w|71LL?rTQjF*hET^pfuW9^SS>uLtm ziz97)_IG3FYDdBPu?hK?MQN$T!(Ml<<*a%|j-nT9&$Ek;e5}-jW=vpau)Fn4a5S0R zx@9XyH$Ut@{iKvw>apZRfA@O(SLBBi<&xNjBQ?@qOnQ({n`FT0DTfIoXCzBF%}WN4 zNh@Hpk2{MGHrKVHR!v9X#YJn6IY!vhc&Q8Ypvlg z?=h3Tg?`Lh8QF~{ybew|(f8`=I;WH3j;4IuL8N)><2r+*s8r5-82vl{FEO%bZls~= zTc|J))E(}sM6;wsZESvQIjJABOBke-$mWQxu9 zK4T0)F>Sho)6;Z38uxF|b)urVzy9EVfq8P1ymK?T1fMMfED#r<7N`P#Sf(~nf822P z5OdgIlVGaut%(pr5_&P0Wr?ZiG+6GQ`cPUFt*;X1rCC2x)BIRFrQu8Xg6O%jX z1nMqFz2DA6$FNCoNL13h$*N$Y6Ra+mJQz1WUJ1+M84C*-6s7s-yIxiB{YzL=v^L>t{ zxN(9iQ9~&Rr7%_B@}^~FILZ_t*8n9EU+ly_FXJx2{!iHFzkcr^x`d9*WJ1+DZ*s_M zA{c;(y1|&AY3rYSG`Wwxr_)@QPs2O#^{dC9Jm$2WTY>+l&6-j*HU-{f7OWOva@CDFi)FKD{@nT?$Hvil6n z{D>C7A5VHy*|ISm-g)lyG|Qsbzm?r*#$tQFAkQ&5Z;w}v<44T?AGWX5MU7)7A-rNr zvB$M8H93FzJr>&|T2V0KmCR29Hiel0pk62@YFhBH5JAjEX@LX@DirrNTu{-J?1&#{ z7Y^p?4-^M$t z;sqvHH{H*Ok0fqfkDT7p|AOnss+*I9#8Z>jA|TX#+qEmv8Z6{prnqfowzqleR9ort zZBJS{LbrEx?evDxEy`hU#}*m2xk;~g`{Yg~RY|H$gPK+L~bqe-#F5-5l-J#7{!L^|J#ej6a}ywYtxO}F`*Wutvap4!*h z|NE09)}Ly+%|*IV;wBnPwj~TEP{A1&Bg^Yerv;Vfqe(%lUrQPlXPof+Rb#xI-$pdT zoHfqRprS@5t3bp%(X2TUGj{AS)ZxV7@WQVTIu{7eDNafP(!D>f?mtP+KKt%2mC}mW zmwx}?zz%}_Tes6=7BXxK&P$&~lZF`m!G`e<~ToxNA4)SyGUKs@iA zkF1jOr6KX1(1aV!6v*kc~8`w#IGeLi4|KGk7bw4+UL$y z*ZBVZ;N9zWw*?M_q9@(A#@v%nEoX5$*g#x^t4b!j`?JprIo-ei)RR#B|7z>eRB?3NG)VN99*JqUu5oNV_c zwzo_MR!{uHr_-I}p4#;$S^AEfPOe7c5N%f!Y9wHFN+ojR{B))}YDt#4J0o>c=Gz^w zFM*A0kSGcM3)8sOAv((EizB($`vG^VHjG+=J>#Vc#`^u);&?B8(JP`{jlIldovGWY#-$GyWJ0>qoo-adT`08YUGGD!7Ab9+g@JfVn9TA<)SbD`z5) z&Pv-h4J8%LR4lM4Opa44v@XX$`F?0N1>Z<85I*IRZd-M<+sM^hjus@gTWXk$W>l1v z`*m}34|pJ+d($C>D1aVb*2hRQt6WA(x_uL26VQ1B#Sm0(@d2d{ueV~kzL^pj8=NA< z8~2e_eRIon*M19ooUR}YnJ@iYyZg4X+vD{a>dCtXg=lKIIV_4!WeYF$n zT^wz$U%RrJ&_-1N;3XY<`v>e~TDAM2qh|wZwoq#ACrg_!mYiR}!a9%~!`;lP2MnqV zV*y0-f()1rJLb=K8iTbLm6!q0-JTBI9Gz;=J!E~8W`mbBYfTLUXG{hb^h_HD53rpC`c6H(`?!|4{hGU_AX2EF31*{}R7dDnl1fBK1q^MzOB zH?^wo?_z^R|7}cyMA`&LDJef*!ONRbKeX|(W7}nZ{!5)^mTf1`E^5xhQA8y8fg*d% za(gR7l(f8GTm=mD;?~fiA#a%DTd<-vt9WsCH>=j&OU)QhEcRPnh}?Eu0=yf0}c7j+n{9MHeDx}2~U zgTh>A-;-|lcO*2$z93LWcafQnJ@^5Gtj4Z0nf@b#JodLPr9@9@i8*Ep!2_Q&>exS^ zq?ma9gL0wn*1mk#WETW8dyK;I_7n`hn)x%_zkcLA3nCjqhjXgaw`^XK&f(hgbe)7R zC0g}m7#Q{HRYy{P^@!n7J@1^nA$=EJPM8R^xP)nO!v}QDp$bBCpQ2kgQaQJXt#AUFg83aKCO1;q-DN>ViYu98kt z2}`REB#5@67$>;K5uHqX8$u5gly$UHK+DBwxsWohj34O+m6XMvK9QM zc*)K+o5|z?Gi~muZ*0F|pIjcNoxiIl9WdpEgX^|fna!5p1wNglqqlt~XHEAV@3Y2rtQRUZ23nInFFolM<~I6$=~0BwqlsA;1cLc-oz6Ks)6D|48dl7 zJp_?4j8Z&P;{)dTpE1ir$<_LEP#PX9rPSl#fmxl#^2icS@PG#_4WT5w@P`Fz)Wwkd zh_`06%z7y={b2C?TnQ$pJ+lPsCHWmdV+ctnIS(sG|_Lye`F^Wd{yl2KFN z*Sepb%wTI94u~baLUP$T!gTwHp=;QNur=(^T{L#oFcv}PAF{NG4^~Ax z)5+l7t_s*mu5;6FX_2=_8GXX5J{8Wf-EfFF`ZYfD7WGOH6z5IHyWa>k$sM!2qFtMu zML>lNgD>knFj<*8$JpA^gA2f|UQ?WwJb8@|5)fWz${QDPjEq`L+P>=Gj$85hxubV%m=B#33C1-Y`n$}#$_6qeJ`yK#A zr$IKMpTbPQH22s=K*8a5F!$g*4x1e4D~>>bKsu-Ox7YHAKkpB{9;k%q@Mq~#qajM0 zN5)*H1Y=Ys*K@?#D0~;7WzcM4TH09PY0T2)A5G!-qcUu>pwHPEz@|QfSQt&3j{@ZxG?3+S9aBSv*aFWVA zUg3%C9v?sTOwe|A`goJ0dwh*QkHaPlTVk+(fQJ1)lB!{}(q;=759btaE)9N%i1;)nf9g&6Rdz5d_@Um;HkeUKQbG~k-K^u53z5wXitUdPC(?%vL9MthrW+gmew z@Ja$}BDEh6q3WCmS;KSCztqs1cRHe%Bq%Kk!327Pa zvEgA;yG}0#r76gbJ}6&Zdb#%~jk(z7Z14fFO+X@j`+8Q4D`hdU4f8R1AnE}PEtJK9 zghQ*wN=!tSkQGc>>%GI0>h|}pWNA(IZ{~Y^=9~*U0d#v`_=Uy&-P?Egucr&AbhCd5 zMezkZr)E2Qt9$~FrFOO=XhjjDA&xMg!Nav=gTB6M`*opxc$n91M{+&%21I;j;-TOn z^MrT8LNhHL3l!yhYBpbO*xlX^O%;ePb$^|ojg#mJx@=CSOM+toHi`??-n|I>1@Nw2 zbob!=wOWu&FHdG@H$l%Y#=XrpXd-gA);FGsm2E}dpw7pwO`Gd=o@4Muf~L4i;-KlV z%6o&4WQIK8!P?T9fx<4BL_a4F+<{#sdgw@M2;TwMxfxwvy>>OZ(BUiU5<=;8-gIkS1IIHpy6PE$q2s;ke-aB~C(l0nDngZF*Xjw!uc`GGAe>uuTcUrbzv&ou1*aAUY?Qq@wObsMh&Sxeoz? za+7?8xQtXTiR=g*>FT6lrd`r6l^E3;P0i-H({(&BS1+KTJcri>8jRhot8kb$TZG;D z#^l|A0J5`%x8Ca>y_LVdzC9xM5d^(wJb5lpEons{I1>1-9UUYCD-Ahi7}B_jE~wLj zDTPXgh_(!5WUn1LbP8UgxtWtUh>$Ki7|IidAnBkobE7NdIvg)!px*K;ArF=#OCU=?BuOY_iI>g&ZQgyC-_mDD>RJqcDdgC#RY544ORC<4mfNI?a885g%emV?tGE& zToTKGXiX&<%tG}fIA3j{tB+cLz2YoCuTS0IT=<>x0Y0VP?uYCk{#X3{kI2i@b3#p( z<#{RTrGp_gh1w8SB9l)lbQ5=W3xr^wmdhFi-a8<8em_DpWX8)K?^W>9a%1a{==!8w zEW)`!%x}({r`uOzEOoG?Dg#yL6S~@o(UI$gHK6Oc(R0YXQTa)mw9Qo;>fA_6Q}Bu0 z)%|-vu#m_n^FB2zt#oE0(MBUK1eRXJ(Xl(~a0hl2B3HSQtY3y znF;));>!h%?9CmzZ?;igvYRfePS2X5>>DM9FMD*rBOh;w9z7qI&P^t7_%S_kOH6?A zEH%tN{G!|{61#67Jg4ra@$Kryk)YK&X9~Og+|Bkr`1zs=pN-Q-m%g!O9R{A~8%xFK z-+ZX66*SBupqbtahC8o`g|B=?*)J{%yOijvxX!G~(esjHa$?brKOOFLTMZV8HJ*#m z2I}F~{4nN0Vb?*SIDm1Tkl5V2Utp{YPz>jyx=aCYH2N*Y?O{^WH|9B;7j}HVf0P1V zV2Cokl>H#X8U4}v=Bh+P7&tTg_KfVW9CIG%1H%7E>|NbAt^F(d6ZW~%*ncq!FoWm0 zvl~bCKJ_}a0}*yB+Nhaw#qPi*(}SY}c;bIc(C`}~ugUUAtj>O1sR$z5#FI}r)E}+Z zr=v%&LQNO%^$xE2mfh}*k-$xe*l7B(*{$Z&>;OfNH$r z_Q|;OgGF{UGte{a^XHg-^3ESL}oSAzs(75kdZDyWD?Y?a2cnnCzmOIN2fa zMI@EHs&*AY!rac>nr(SMUzzsCg$0j*36%T?PY;?<^lPlkpfw;1K+73&kzQGDHE$uj zQMjpO;(w~a$@6x|$|$XKUMfRG>2^2_Dh*7sq=(y?9;`9luO3Hzr;2%=9f@GvQ64FX zW&5fkd@|(5(PFj=L>FnK<}q4~I4G&#Iw;EQkczt+aix2cC_i3{A@Bk6N_iISrZz{- zSok2!)jP%j!HsFlk7SX3*kieO# z2V3kvsZz5n;VcIOZ2T^KlN_qib+|-NY8nm&p~=b75q+MNrUekW!ZFD&AFjrFfc`XQ zpRK*(VeB8gQRmK-itNW4q(A*r`qLe`x$o6)>38U8^7~|={ORg{6U8a>hAd{9%4F(F zm#=gq^BWE^<55>AG4NA|o;MWb;E1-U|MF_h+_9;h_gRlqw)H!}CB$Xxp5_9@9Fa?9 z5!Q5rk2jKI;K!V1jFj^l&op{*e^{?+ekIR-NP3_r$~UmNv8c~7f4jwKOQi7l65nL< z4tkw;Zmh@mV-G|Yo)S)#TzDdNUsm^^bF;QCq<}8pzD<{B01Ac3yVT?`GEiIP{gmSx zC~^DV8-kwvFZ@GH#R0{)_H98)q=_rsPs)lL(cbeB3HA(|O&&D1Z5CWr0%F>hDS`YwfhWSqGcMAO>z4 z8xcq~tu^0Gk2me@t15{B>>3!0adD21RJDOl+S^Ufv7`LIw5v0{|KyH)?v8^ zT2Wy-BJmOZ9SUEKw1`Dw7Smflb)Co~`!}3$XnKs=py{$$jsx%z42ekV_MRdXu5%(? z*I%V`2M$os&C`JA*(bB>@ybf9rPUR?E0n|#K<(@Z`vL&WEN%(N8K?8+{k`-G97u%f zT)mpc2XdjDAVXwd{-r~spt(s3ZK+RWNLs&!UwHLh5AdU>Fb<*+D+3@Bc}wL_5MimD z%Ju)qr%!Ods?W;rOMS;vU`y!Q*9v^q+UV|;u|_XIV}Ct? zt=On5%lqBkY^M&uR}?@dOA`@!eq>fD^|Z9?XO#baFj^Jvj=JbcM(y&!SU1)4b#dWw zzK6f7_BA~MU*^&Ji2U6@C7Z5AhRkk2(KP51Cjn7QP|6hVl<Xr}O$*v?zvDc;+$yqoy)(bwO5*FOcaL9u79Q9YVCe zC}6&#yVZTMMN6KZeybIqha#H6qn>VnT{}7TI`6j`=3=(x<&$1s-O)V14?k z0-KtQ?%Z47q^5#~ZW}U-=w2t$q2sh%vV$vr7|6sTDf-v0uC2+`m54v-Zaf#$Q(k~8 zve4in@OQ9opo-XF0ha=p&Bu;!(w+Oa&r0Kmu+ilDp}mCYyX$Kw6?=k$em7grm_;AL z$)&^)Q}F@NuW+8olX>>GfOtlhZB^DB&K?Wlj8{KIe+N#XO5Wh19iTxr(FxCrc_LXj zz5!T)awZ`IBBXxJUzz?Axq)Af##y1V$lT=I6?k$|?G{}Fg#9iN3H)acFXjWg#(?)) zSUWfHpB0@yu(TRyf|<1?i3KgQTOu1*kL~3m(kP>GZhKAxoP;E{*Y~eH!!o0ycW&Ke zk4JzB877$xOLkAJ>3IInXUf`W@3^wl{i@mS(|YsaB{c`V@qcyopu4*_*xuUg9bfnM z50!z?gl5JT5g(GioK>aa_r`;B%{K(6%o#RvpUKO_iaK@LYuV9#S$&qjR<#}>~r%LJW_1~#`hi-_0L3Xa0p)7D5M&IJp z0{WNXjn@?7Hn>36Hb~^P&HigH^u=F9Sf=m74Se;#^OYXxZ~2`4Og^#j7dqXA1?tc| zRBe{?1r!(DR4O774p*#Y? zM4i##(eA`+rN=e+Mdhkma4w0uyEqk?eWloqXj{!o)wIN|i&N*r)(|fcGjpZRrDHJi zQN;Ob5al-Kf4LJ6>Ehz*`i|1Ev|*5EwJhajarH!KhSJ@W5~)C+9T)cj)ft6+ID&EI zRy6)x$v>~jxJ%BsQtZy>!AyjDg{(C~(?gY;WUOvD^#>Bw*{W$0L#^annyhI3 ziy{}2I2e;5G7UQY)aTW|zJgH@5w-vv-3YuAEs>0-?YS$*X_YAL%jbPDJ!9wrxzEsV z48Nd}y=wTxDlu5M{~Pi+Nb!sZk`95)Fj!K_l4{z+@IGcZlt?cAh49iG>XIxTMGhI) zKemo@L^i55%6Jr$+tN#7_Mn1mZZ3fq*W?;e?k9FW_?3UR@c*(M&gp~iSonPPSHE%L zhg&qDfDIBwJ|O8QzyMXt;@e5BUOeoD*KpkVgOg$~idsbITwcD;NX$}TEO=|=)L5Qe z4lxpGlQCHCl|QX5i&m4KIMVjjiwJzK=Ol|HHq0S#Hg)nI2|gFV?S>tf(Y#;R%G(aj z*K3ny`cOPm<}}U&d84V0jD5!d^xx3tk01fZ9_XNZN1r@8wwm*RiHo)SYL1PXPRtAk zNA!H=evaOW&%xvM{S!P_UU7j4cROpDH;zTyckx?fpYASWg2vw$DB`c^{u;~3eC1yn z3#cD7lVqOTiAl5=Wxx@Cn63&x+S8y!q>QyN(KV z?OJ-mcqzOlZ*P*^vJ4{?e$S{)dMH>`k#TDPbkMqMXHX*(LRy#KX-^ zw#Xqn_GjsXw^Y)+yzn_X7^O4k-?J~}{}-LGX`rIKgVc*ZKPznImHUf{eo4r zyezE6^^K{$>7t`)y#+=z+32I)Thd;WM-qRB4v*oy>}&&M39A;we7^3QIshY%mzQX^ zR$92zTJ*tPjn~A&_0e9Y1!_DRHtT(1ZYTZTtTyW5@Nvl~Ij8C?$D@PYwUwa)+oj3o zM|@=Nm&l3)Ux#TTAqQo2M^0Aq1l+P@nKg3U&4G1@nr}QoWA~eYZHa;Ys|0~wVuBw& z&F1XnMyimm+`64x^(ire^)kS*8^7{T?2Y$#_-VdRzT{t&d;RzHB>lH=ei{U2;$irB zR6&V?K`@3aZN)*Y{K&;rKzMlKaF)z+5C(}b>~sRSP2lO!JY zzdmMjTDy$AKYR+Npt`~yJ)8T|grT&hIQG$cYuoP_p)yB;`GaAFxF1_L z<;}Ipn++?8>ctl$5?*}iN@BRd^Dn{kPge!*C#%!yk3;vT=e)fIjOIV4c<@q4#(I^L zGSByH9GJHPIo#QPA*=7oBB?(Lpx*V9A2Fk4T)ISYY49FRx884v4$@9{yf38Il0YFZ zmRVhFPSHlAq|7&f$xY60p$f{E^&aJMv-DGa-`+uYx2lrX~mgiHi_Z*H-X>j9(B43V9U(ctOP!t+E(!TBCs8UHfhv|9$S^L8TNo?KNe~;Y z`%|TqVl?ugSWi?A)Zv%TD`P84iK3L+=(ZcDlxPJwx>|=WlvoF!WL3r_LkkdZ@R*XN?{Wx_Ok1LiqyM5z^63*MVJeAG>^y4kC^uxU$ z$^w;7Wg+WeFH*Dv$D3=+weHhTRv$5qQ|_|a4%LSLZ0$jLN58yxEPUg_KVJC7pt2w^ zEU;u|^A-G**bgpi&O=>Z1=XNpp4O7Tg45&qAtm0oD@|Z-xaWYDU>an`4_Z3%dAr8_ zf@@J?8D3FlGoH-7YY9U)Q~@PVmP-h_G~z_Wp=>WfTn?{$tcB2qZ)*&<-b%bZVpx6Mdk(i@}` zw~dJxlfjFJ>;t1N!W$al=)ot0S+k}XfZfl?G{v26)}0X`6>A$ktiuaqJST<({euha zJjzbjnSbATJEt6>7L-~jNpLb7sxG;E6)6sY&(c_}44Bq{I>uSnSp>2inSjHkhUKNg zkE|=!W0L5@f&K4r5$=(pviY7CEn#Ihkc4@W1=Kg97dXM@I$3Fh;RZtPZ|`iRl2H_r z!3m99Qvdi4`doOhYz12l9*aDM7;;L*yQ976z{jT^Fm{%+5IZsJL~Fa}JipbkM6rq& z@9RmP+`jFF>ndr!QcUmn=&n*)Z#bxJg#^zPk--u-)epNQfFeP9=Rw;f2?B^;-hh@pnus2%dzq_o zvV7}S7(`xQZ^y2sH@UfFYgrQ~90(jxoTJ^&7wxF78K&>NlqPwhtFj5ou#RgWRyEv& z;YZnNX>)5YO)1SY6CZlT0@jk`pj|Y7t-3t{&0K#!`?zdqsQng5?Vg;tqcvfqR2g== z_n!6Q+1Xu~7%wdGH~ky_rsR9xuq*1<&vQQiVZ+5Wv{{<~m-p_tg2s>a*NMv1hc zpl}GqQzW;^YNr`;W~je23wqVZxlOFe9JNtj^qysY9sZouL@>=&vrstK5tG0$dm+=A ze>6C&ABtTx_|m)AWn!K5m1zvtCTNsRuNEvd zd#RC69uq29QX7_ra#;Xt-%VAcb)gcJ0Ky1C^=T46b-eI$iXB8&EQFXrGJ1S`DY1$4 zSR1?y@?m}Ue*X|a^+#Oq_n&&kU3G5Va3+&#Wq0ie`&wS%#_qd3gDav}y)82NZQ-QT zo9Hk)a*o&e>cJcQymLpULF=LaFUiUu7aMFlcz>%Jia)Q{!9QI1_d(#CVdj&5NQgDd zyv0RcCqp9w3o5}8E-D6@1*rbMkhu;BN*iqjrDet&9y)-s`MTq4%9SGly%m&4WRHeh z=gDbqI;FRm?qL1%Op@3tB0_H?NLTn~9;<2<38F#Rnw0Z3^-*Xu;4A~*iU-ZK%WLF#0p#x$PA z3g}JYQUkmt)+DMktqQeNVd(xV35p#GvG3PN4uDwA8P-vY>x%#(;(nhyEw%C;*K^97iWl3FLDawLhnJ4cx_NtG~*=C2T ztX)qtg?a|K<$P{37v`XFyJgE{fKFmQYvk=O%gB1CjOTQi`Z!Dc50SWkiT|nco`ZqH z9gMDWM+U&bwBL51Vs;W-HB?4Qo;^yDfq1Z)q*2fZu5BnyQAWmTNBa%fYCI!H2*)gO z1#nB4DA#)A0`Wp!>|9=B)IP`b#ab_caTC(cp>fW+wSaHSh$gSCg8QeR+R&tl0v1!& zG<8!Jkv&Uo5t4@0yW3+8{yS-~ysi&oQf(sPXkknMywvYaH(AImoWq3gP}Yg9#P~lC z`EPh%95#CH#4bc;!0r0pNcJ0yB-H1@SgO5OY0J1ZTuos#uxAEGeLbT+DHO~dv_eZ5 z2WJukbG6>^-SHIcWy8yrE4#@KjDjFLFw1qG9XMXtWh?&zTX{+U|F@Fre}s2EKA^uJ zRt1J@6>X`)v%=uq!HD2Y?v4YrV}zZ{Nd}YfT`<^4l66Y>Zb!sk@+t0%#D|oID&pMx z581SsFl2gO&;!^ON-B5$`Td+(*M#%d*NW~?q4u5NnZ1#}Tk1|Nn~TJb7%<0YUl$`7 zD)=<)!6cC&QEvqERcq_cj8>gs(UNGlnQHX2x;-0veCxu`vyYIoa5J2Ym*G|YA0Ov5 z^T1QFEXhYLgn5;iVB&D@qNMnssQa;-XJ(CmJ0^8e35M#N+`xxh_G?sV*?E3-n(Z7Q zO(_{@Pi64;o)`{2rEK9XK`c=uoMNXVoE02LqS6SR5(a9(9P>T^dVQq>?7NFV_9@V%^L7 zjl85^)hFQZTUBlUbYnflQ;<6@pSIsGC@4sRp!$N52tqIA?>5_^JERA02q|I4d^O4Z z`nJTS7v#`-KiK%y$vrO#Ou|zW$Ivz3(Y;yVk>SsL?aUR{j2;_!F4E6` zH%-lhiL4!r&P!-BP%yw@)ILj=477)fbse>fybe1Y9d2b+k3K6+YJ)ZX%Wb5cT`eNv zmX=e4=*w=d>ttBS$N$Xf?(`WZp(Kb-x`$|9j?R*R$o`98AH^~LU+SD8x)SCv@jNZC(PDoA2VB0X-`C091Gk0=@4VD9AzWDw+5 z@qq*xN5fgF%98Bu4!ggTi7!DcqLfl`#m-xSbmd%V=A*SyZ?y7OS|)pJ@gyyjql4Z~ zgh{GeJ|wHyT4Zn0Nc7=#^&xdVTM2dhtLbv>2CR*}U5mvdOOyTHTi9g+OZqDWhtq}a z`M$p^3)dE2lXvl9Inv*x%j2iyE&j!(T_QTzVs2c@wm<++#hXn(3snKA*GiMTM8Rn? zzOY;n8vH^`auIW~RM^uD0GM8EBL1YV5UiFc4d5dv8!XEyRMP!IIUJq0MKR1MbIF<; zHEc+*PQLfQY9U*X9}SE;zc$88$bze^!wu8d)HOj`sZgc}WU60{xPeLyK3{WmBcU30 z@fA5_gTv>pMc?D^I9yYNM508xb=RlUXK9FxmBVX^oh-d_cr~&|4WV5!2FE8L_WkN6 zxFKC-d_B%wfp;Ajn~#p77Wc^{ye!!E8MzszTK9=eKD;d_lFWQxWcUxGU!;+pzNG5*huI@P&K`-}3>bAf>4+# z3w)ztQk=yYsMQ!T7?n+yP z0(ge$j?E5P?(qMc9E;r4X&On$lBgB9HbaC7>{8pgZ3VOh3(S=^PW&bP>+vR=eCD`J zhp1pCD<*WW^JaicfDvHiSNg|Bpm@^eRdX*+5F}-tjNLz4aV1r}6i9Nndb@oiMx!c5 z0A?45SO7y-c!m$p$%vyriip=o(mkF;Po{X@)*gWi0Ep|M@vi6tom>k#sSI4^l7AS> zX6W}lSgEv-8t;J{-`e)6H`m@7_}x_E;|4m9-+2aKWnZ0t$rm%_iFroHleWuf?1i7C z%at{3?a%$m4`dFSUO6&_k4p@d5nOn?uz{Tuj6ORjpW?75RbEupI6m2#gRFUlk55Qg zfXg_}OomXd;uu$JL|DKNNe1|Sgrw^CAgW2*2N;az=QP8(Vh(Ps#ut<03xW=5;&py@ z_0c%}a7+gT-yK{hKVqA)6oLaD%_sSNuW?gEQ;XeupX(S76py`QanS}Sah-AO`za2k zWk{T3+6eYI0$)={aa$m!^mneKycE$66r~VNbJ#{qjd$_ zlsG1?zes*gVN!L}e>Eft))|8%og7Z){&4u18s*B)c)MOp>FXPTt$E6hfFhaAVoEjL z`kIJ}&!PVk(zNe$zjyVZzj$`jz4ynq0Elh1teznbo}|~l%lF-V9_*bBHb%F5^QPOh z!5E8bdiTC(aR2^ke1P7`n_B`sM|?oLT9nRe;hk{|;HA zn&H6faFY5Dt`C!1Q;;@4>#;)!nVVB3#WDl?ghVXO>{!aHA@7%aU?ESI9* zxt+uz%S$^$kTvEf9mmlPciT8=p(icyVFG7WwyVkrUC5->qZr zAHt?T%{zllLqXxw(eb?hO5qPmyj60v#X1}UrxzfCtY_nftP=yMP+zhX!D^ml1K=UO z9O3^Q1J@DQ!O{toMKL_}3a^P*5@5bCatV9Or0%K7a|5-S(ToO<4mV;5bjP>LkI;T| zYjst(oBNwz{K5U={}(zBhVv`ATPJ+a!PPYSt1g#`aIji!x5=($`&OLw?KJ5;`%R{^ zDn_m^c5sBA2}T$Jw<$C05s!*n2`rFFIN9NY1LNSyXQ9I5UL z1$HFVS`?+_L1LVf#Cxar4NPD@9+RJ~JKc+=!_7ubne}Gu8>#{wL8yn*eG*T6+CBeS zKAgd-Hp&WH=rvJ8bhh5dy-R71 zJF0mLSVd`_SEUVflMTE04Eis>B}*;W<@@>KXyTGK&fkp5iXB!8_1K4mtGZ3+6|91gRxk9PrHWai1rzJ8}?%G z(?3AI=w<)c^|F6nkHxQp^K^*$$xB~P(7Hw5=WC8I5GhBX3*;-t2uNhlS%0-w8+9ZM z&AibHiv2-Vp+Tu;Tmr3WjEB`+pG;ce!Jtfjq80acbbz?t6^5s=h3=8 z2lVt+Si!IV3f6AvO#K>;{aYRV${{AQ*WAUA7@oRhs_^0I8Q2UF+)MMgVh)Uyt=oM7h!45q0FH}^jB44Ls3q!n?n?U=qE+Yyh31? zn{ijgr;q&M6|VKzZv39@{%3c+k|hDJGr+$<=4n<&2C17cP>_CM5k7d6$;s2y_+`b+ z`-d();=%fCcX41tu{4^ROg}5}-*9h$)zgr^cP_UQwnu{%JQTM`QVb9PrM9y*lNl)t zBS;sf;xmjZ(G*4^EB>KmLd6GHTK9XeQZ$n817#8JiFcGO%|I@!lHl$Nlg6MK8hhAT zLwzU2F$~aqlTSlO#N6Sp0gs?l66)lF?5^7~lU=?%7#>>^$WzuZBOPwT*&rH5x0Sq@ zD-GBR3txI9(JDZAhD2FhZhYGRj)3$81s0aGrvS~BHQC#6R5X18ixR^^P`n)fyU&rH zHfuZ`gGKu`;^ur3ZUGB?cZc#t!uUAKG_nI4FKxD%FTR-2uFOqmu#xD|I5Bvart?tW z*VfXfUap-}wo`v8M(YEuDO53eRH1&-nIgZegQ@-^zs$S&V^wGNHkJ7Cw*TdYf8AN= zEOj*U!l3cF!%2YMLY4lo7Luk8=Vg3l9Y9>Z=5EJ=X*l;0JOzPI0zjp07CpA3a#9Sn z*kW-L8O)K89dKsZ(TU@nnkxptI=>p?&28){>EB9 zg^A%p(DKr@FHsf7Iv5{gv&)t_}J`(#ALMiUy88%2LmYLYekP7j3U@8d1`g1%ku&!(tK}zUbN*iozhbqZ z*(`)?-{EtBE9MFnxAB1P!`6Ech$^#{I;yor6$v)G}f(ZH4@D^yA$G2PuWyT*RYn>RcV^u z-qirs%%*=Tz24+OtDLj(3oUbLp1~p=PrNJUCUu8D6|-SXp>U!hQ!Ay@AW5>Ld%F_Z zv{cok{Jiec;$Z@818H~gn_~*ZvNS?xZ=N3|2`~~ZiCA3q#*^9W;1L%0rM7$kh_N>PmQ8==hn`cCv#9f_^4tanc1E(Pt>Dd#|&kzfL-YY5=px@vG zg|qtBu^qjwj7?FSw|cVOlM^)#v3)AT>aGuY>(*V-*L}X^Pm6p_#ll{Y3Gl`CSp62g zG=9iVQ**C!5;RRHjLq>4aVP#tKq3C(068j4xH6Voz!s>5luI#jJd76q&OzQ@slzQL zZ-Zw$*2y`#7@NLQjtv-$+TIR(cBgt?J1z*WWii)eT)b6AXHC@2_BjhF8Lld|MpF{j*RpuwzEKbEWbWPDywpGAFVPFzEMpT|SxsG_v}X2^u4mx^s}l zSF24FaA%!A4w@%h5EZ@Jn(6o6YAh?*N=*a8s$b@9!}M(&;?? z#Qo^&Tfg$@>RI(Z(XhX*Q`IkZ)Z?M7dH;?J3>1JG@tI0Um^S?QuMi-sfd(ycm32?_xr`UKq)fD-G(ec3J|k@8GSBIP)&Kb&nPpEsvSgd6gd zBy{B@zw&EI-g0Er52_ElECF{=hH-$5yat#k@9rf!f^qXLy*{!NARQqwErOu?wejk? z4@(XK<19zYP6bkXU_h(ucRTMQ5PUusAbnVnV{Ol_NnWQ;1c$xtZC6=5x?v4!eZy&~ zaMc}10JA@`BQ`eVYN2(E*;%{^l}rKo3jOy+nF{BsXpKOUr-*bZULJ-|V~;Q&*hdH@ zaL~KOh?6W|4djYAz3cBG0V7dpgK-gLXKS0WOl4ndrX=DetZ@1UqUzex<&ldjOg}pk* zYII)wdtY27WD7@8&>u-*m6%Y+WY?RrO@Xu7hXr+TZjQvZL@vxg7&S~&FMz(Sic%g} z$gY?*R^yfqe;UfJwN#5Jw=nmmQ@p7iL3f7mOHsHbS>+C}^_xm&t+cI$PIj!0zOJ+d1iaud?&9;QPAR(ob+MdF@zGM&!N z@Mjtc`o6X*pbXhY)O=@xYu#hKz$}EX;;DorOHq`j*MGuth$Ajbr}~RW)9k$yr0C1< zNk}nBd}^XaN`HKlwHK>Z?l;Yu<;oee**THgV^vWith&y=rC^Iv#zUa%c`y+BwBT;% zdaA&nw%d8tDp}4ZuKCn7g=I@&q#pp^p1zjSA2kQawpC8(=_f&CppC3O#_rGuF}6=^ z{riBl3@N(tYtz18aCfxvz<4y`O3X6v9i%1G#@l+GkAA5I*ZZ|Fy}WQ>FWyg=y_ue> zZ(sN=qA=gB`}mJlB<4SKZUohtcI?S%R|49f`C=nByoQZIu`u!=jEH#i7oT<*+L-_p z-*yfMAlR927X_X%FYAy3^Dr!a?v?mU0y`))L@6&#(axJ~#9X4@^=IyGqz`}YBty_h zn)0v{%kxFBNs`>)ywU zfk4WHbkrZA;|O)ZHnSD?-0JF0!34pf{C%*QW_qf5 zHf`&X0X?`R@Uqw~>!pJ$Sv$aGj_2EkVnO#*|N_ zvd3@A%01Z=h9-~y6{Z4V(mU}%q7-?&w#<PpT7wUwvc|qEm-Laag#Z7R`)gD=vt?XmrnNG5&d$ zsIRo&;wp`*m2w`3xW&qV%1c(b?|CayC8t^R^|Kk&iD)GfWvsZhN_1t^`Z_+Ts^N%8 zJW+RKECX?>=1Na+%}3X=5>>rI*T&eI&g~K}(iar*lo~N|J0dYg_erZ5U+zcDmQ( zELasjlr@BU|XQI`* zi55zW+KW7Mfv59;cGaEcs$NtYu-s)o#pv%J2-H~RgAaJH%5|`WnF$q}A|lo55AjhZ z5!R?O&qg5O)_U@VLVhD|y)OQV_Ek$KV^lN=Gtqw4)w2WswR5LKz&jxDBM>X%(JQxM-?rxFk zL0TY0lpN_3da&oQ?q6M6ok^Y-vYK^)>__uiV>=T8B{tTjlZwKK$TT|I_=ndSFac_TjGb7++)^~rs>rw6YcI?F|*BWj(CwqV1Vf~q8Pa@VQ%Hzw@Sk~N( ze|4r{C|yL_?K@5#z2QyZu>2BBK?T=}#`T067e4Xik$5II)$sldeqUx6 zH*Cy(9Od(Xjj-HY0Vza8Ip@*$5USv3{?;SU>LKAGORgH!n};^%yl?6aHnzogq*`}g zLmQJ7)hW?VWnipI^9d&f>FTBw%BNuv%Wz|TQ;zR=V`Y6!2lqi|?_jcY<-l{Wv#tk| z5^fcclj)D87|;qZe7t5IS;yoaJk*1yO``=W2K+528{QIIU7F31*kE;KbCsh+uaxyw zp?r5R5xk_nb7asb_VyMQdhqkF^r-q#k>~g5WESs1NwT<;nq{AG@f=I_a2^8bPzp`f zPpzQWBdHlm^`Miv7IS8Mm?Ph?vpcdk{1R0d4dpb#k5cktMZdFOkhH z=5gABW;hFQY3YeOqsenGK;zPz3rhsW$}UAQ*<7Q-QcvD-_Fw&5GU2n+ffe>r2RtG< zFCP$^xqLuD*25=sxzy;huYW*UoEYakk0^rEnC$_*V(F-l8EHs&#L$W>L0rUhu?fT^ zTh^L*fD%I1uRU4b{KIkLr`CRZwzRUnxh^4XDCI!%+0}y~eNmYN&gBAqk)^(>lyI>4 zJ1AUz4-%D;Ri4n<2}|FzqI>P`ZEo5lN-Z;=US$ujtUUP?sXcn>%_PwBYj2H)HeS<& zk0_ob#SV_LXV=fsvu^N;e&u}CNo(B^7cM)42@sF?oMr37XC38P<$n>_qN;N3UozD^ z-}NCsm%h?gU9)SVnSs?S5ld(Uu4(b%pY*`+aaQFiZ_J(~QGL*z>?dpfwOf$mnteYe ztM)G(EKBjq1BRy?|CMTYck!;9&r&8OUtt8*_m!)#!E`l5+H+-=Q!ivNIu?j z^)t$Pgbc*wQ(lCwgP99;Fmmm|rDV$k^+=(yPIx`)E)+C69JJLjb6Mc|HfMq-8B}_^ z#U73FWas-53@(!9c-Qlk9Q3I8kz&VqKr(`dL(cQn#B_rob3u^rZb^)#s%&geC*VY{ zSy}OMzu0cStOy|jWzKYryvSTY?;K7E7*t*J{w_fORD7h=jPM=EtH4>L;zYq1jJIZs z(Klihtcf|q@0J;wtZwxCcb>>rV8iXr?OiD$CU%TvR$f`1kl3s1I`pp8T4Fy~TvisL zOy1}yr(#Ttt;mobyWyYPgD$ydU%_6;JX}1qdbFNWrlGu@r=E5>ZrU>T^6Lp<=OLa; z-yk?%PX>(&+FE!J)nm?>h3z-awzd+-vFJwGL_YqJP(K|{-ayB8jGoZqqL$Wq^nxnO zo8@bW#yn*kEo%Oo2TY?|oNXOmTSKBFz33xu*{}O@nQx>iXwF`lyoNYOn;QSq)?Jfo zM!yqq@~E@1`QqRcP7)mn+8cA+I95k&tqpc}_!7C5me;gd_S|L0KJoZy^1N1HgVD=x zHj+C`8N)K-kqDV=t~~2L8T1QunCyw3Jt4n&E`@@6dRh3f9Lb*RTts`$C6la-i{`@h zNSj~={;fx6t44|JF)s+hF3P&d$sP=Uj?(O&gJINS{tPR$_#||MDPH(eee_KxQ zFX5o)RC{GMN)w1pSU~oC$-mf?5B!=*Dq7EjE&I|_rd!8Uyw_sC7yRCyuw~RN*+=H? zLj4ZCn~kii%u<`7#_(rfxKNG2?41BcN*juh`@Ho&DTT`CN{wJrW%3YE1|8x+?A6R# zCTKtVyDbTS@);~o*5rSWR+nSqI2pq;!%lB_uhYA6)53VBH4Z$HCNYmwplg(-Mx)Xg?ki2 zlR_5Q6JuqCEU=y;8Ui*Bo2A-wkAt<%$3@(6N!`=8)avjk-B~2x+)6L-UM`PITPIKQ z{8An~$~$w%L3so{XYqFjU1?T;{42HUW{|2R#r{!AJ8P?*m1BXSx9z6bdNrbK0_BIQO z2Z5AXUJi!3ANgn|>F97c-cqlLypr@?VVTirZ7tbK-QLM@aB<~ex_sS)4D5mRi|mWP zF4y7q!d*Kme8XHm)RQ}D^fDJ04g2lk>V2Bo@P{W_Uo~qN>%lAZWO6y{*(O~FveB}Deq1h5e|hp^AoPYeG?U_l0K9CPqB)N#+uG73 zn!+ScWGOP0Q!#l6lEdSO!DyY?+UD$fS}*nvubUbsSn40_xwG2Ym;RzRq&=d@(hoRT zAx9p&2be0?PVZjA0b1s*t`J6}{uhV=!+jxQ^!VdxwKv$>Qs*r_QZU~|*H%>P^7`wK zGJEze-b(*U!C}qFJHzZBN|TDrn2N>!KVtDK3-9*)Kb0BCWAil7(S@qyQ9i0FoxV;{ zY7T&Q{G%&lSkRxR9JaM{4EPlX;s;|;o4mRI%%!|@f7s?6wPp6o*ra=9(9E-1-jq#& zH4C*vElfBtn<>lBTfxCx8pHnDa@Dbfo^f~VpiTW_fO&1*^MGoFlfCz^COtHvz(^E{ z8vwqs!5t87;0cStx*#Yxxw3$0V14e=>5>W7w_$zbFYs^?V%!i^PfM3Vx{-{NG?$xg zj!br@cJ27sE%HtErsRD8vB!BI%#yW}7IwT}o106&CLXPonaqvBW|A#p(#dYD0)-xT zh<_Z@GmbG%zmLGfcygfV@ZieM-ZjbFhle+_jt{(pF^F zX(j0YL5U|?vQSJ@G~~*XPOs^Sc8@KE#$5LYH)V!upb#lG8XU*DhbL7~tSluhhu-wpst;8OAy9G)>+36a z{f(#_EpBZ}!3puLuALsIA+qsT*29vwAL~Rl)XIj%zilzGffwEE$00?w%q*!qfOO0` z2y_Vr&^v|>@BP;f&=tUUJWEZWdAPsi9USr*{4AfrlFrsoE_~L)_sWoL>o1ehv{`E* zD?G(OGwU48MVH= z*rwlKwfZV8EUtW`(5juBn{t_)@#dDqV!pb)w-UdCh#qTVD_f~S5vrg&#Pyl1mvLkj ztvAU5G~)wXSFI({MJ9qr%!zTKd}}vgq^#ZuG$(WY%A4hzNc^8R%>j|3G!4-^hgYN* zjf@)m#{Q-w<&g0p5rI-?Z&6^Zc@u4a2y?)@>w-{}IPGUJbdx+4NxA=if%_y`DZEa? zSK2a)YS}6T2H%}!+KS48iDUIh)yUdDa`CCcn&bQv?M(jd+%IzbF{x#5cq2BLzQom* z)V1!43@M@k68JpT)$UunpSE`2zVJRB0e-s}e7d1PK}fJB?ou1^%7w;PQz2H;0t)k) zdpK`RhcrX~Sb)EMqJaAC7 z?rfvq|IN`kqDWjh^j#C;!KxM#xLH5)#me5#bea}EPy1f1F0pq)%Y)&wX}&dh;wh)S z#CWnk7O5687_2Q~acwA}2M;6I@IKe3ACbpm-iu3*9SU(@zt%h0O}gIE@zlPgSlua* zJ{k_c@ZSC8XAFDyo@JZ8pGYtaIPueu_*n%EKyN862I!8lxxE|5BCfUrJsj~7*_vY& zAh8j#Iv#L;h&Q-A+5bguODvNN5=U8etC2d=Qdld8hjKB{L1*oip)G7F0=saEXQrbg z;11vspwG43yQZsI3~yl;-k{W5ukn|qPtFSe#aGc*zfC0jM=p4MzV<>03!d1z1i7N194)Q1 zVetow`#n=Cxt-~fkAV9v_g;LeO8Knpb*_)1{%{Fxwy0mHc)kys?sAA(5&`x8WoW?x z>wqFv0jo&b?XcA*Q!-R6iWaaclFWt}E*&%OwHo7p=a}$>{S!GelP<0W6Rsi(B-WVI zoga-uH<7duzGGH5NCtFhsowDnw5Rzl`ip(OT8Kr&~etbNBGS1ub_kY0r~IBhK&7my=#@TFxENwwM1cstPQcJ2{dVd)45!fkkJ z^J%bSObz<-tc3Zk`;{bC5dh$l>g#M^uqMwj0sJ%_0VK46Uve9mM3A0KCuOKfDW6P# z0*niOv6M{fwoMa4OoF3SzPOU8w;TQAVb;#PNno?TI{tPk zXJjl^;e&P+`Z6}%?^0hn*J;(;l@;ULNuVq8C7v*c`B?-6o#IEbm1A~PA$E8q9-cTKvt&cYeA z`%KH(P2!?@Rbns`{W;>=J2`Q2)Pep5SkANrmbpm?&YYG(Obo1kqwEpx}H1$G7Mq$ z`X9S~BxMR&panq{Y2ItAGAg8YM4#wxr;Gs+bhfb)UFr_=A-My??yJmJEQ5V4y0i!) zMpM{AoYkuDUYXgS-GYq=KVg%EM6@MDk8XyeJ55JKm2=r8;F743J@&feKS$3+j!ook z_SgP@#_l{w()6wmeC2&r){#}2bys&)^;C6hW;91%GaAhZS<+~b3<60Ux-1DSAqj+p zjln`jLKv`tHJD?~ZDR~(V*|Xwt`B5~4=^$q<71Cl|FhnWwT&!ewAg_8!y6mg&-Z!W ztnQJ(&?QZ0XJx)`=JUJ1ziZ1pFeVG=T_RbZC6m{z6ygl~2M1oFp>^X%#=H0CTY#Xn z(9<~6)!A1H!7&{EFEzCZu4Ab?()?OUHGL^(=f}->iH|Jp5Eqlu@}c$KU%yU;^{kzuT>IjyeL4M) zt8G|U+wfy6A7vf?w{Y*>%4tnRRYs>3uKf%bs?_s&ePi=*42HRit zxE&5b`6xu;ZE8197(MMLsj6w+ZC&E)PW>=Pr{zU>CP1+vkDtZP#NTL^ zaPEQw_eljT*`XkM{540;dbjXq3_CJ#P1%uMd~lV&7M<+^@KFH4z^RJBbZ zVnf(IZP)CAjk2tiE)7w|J-g(gD5Ef+?%Xnr;WoZ0;dlHY8q77r2mT8G_$ki1`(1Jz zM)wb6&ZF-L(d_ovCky1ZB6>`r&v{>kKkrJlqs^EqQY!PslW$CcJs zuU?JN4ZvILS6qC8Q^~W{+Rm*UYuX?6=Ohb`6Y0v0_+2$t%x>Z@zmYRPjoJsol`V}S)O^3&MIhD*X;VUvD+K-Yya!cr`H)kKB8Syvq=u3kG~ zqL-9phNpOQVY$ZE#<%k`-*&5-fK+>M7DZWZTqi9AdB|0F`e%lS+`aQNIz|E;YW1Vx z#BkMAs6J$4rzv&8AZlR(0OP-Ei5(ExpIc8JCAZ1HQyDgv9(m`+rp!3np*BZNMCC1= z7cFKfCr zGJ%Zjn&PRPG@RUOpKr7_>kRZ?)rb1e3#R-nwn6<=nLz!&mrXg(R}+OB?q{k6y8dn+ zVE6?|pXUKKIHjnusoib7Gc>P!bE)2zmACk!DH6!Xh*wzh1Ys#@0@FJ3c?xqjim~dn zQ@S&px#ZpCT`AV{#27{GHi5@IuJ-mQRNw4&QM^BsLyfjzTR~1jDvAW)V3TN?6Xc!~ zbgny48V1b~K4Is4Q)EhYu(3RDZF9WB_KPSJRiJT>qTv`AN-EU>E@AKqZ&4LmN92}K z0)D^0+vzgAy{|Y7^mEK6$8I{Ytc@uz`{45-(!Jt}rXh?$CxmveF&hcbr&9rIZ}#AIUxd6S z09U|XUQr~K5=>oR``KLN%Ao@|mVY#1uibqhhiUPz+mtjJcj`1?rDcxIYGlkUK z+lho;ur8+QZEx+&Al`ZwoD*n6{Jd3vp$LxnY7nAPi%Dc3Qx7yk$hHjsBB`Z zaQ`*mh5t)}E_|qt7jdV7M9EA7h9V~0{H{*Qpk<=A#DP`RLTAM zdF8~o8&TG^-wA^+Ul~z}ZK-#NnA|MaYD9;ydWwWb|Ce4YqFfSNK5XIf>d3hIt>W)4 zg|*0P`A4o_t`-?B{_d&Wh6&2vz0x(eqCMFfbnfyaGEJ!8eF912cLde-OiIn$H!k=S z8U*xo&$x3T8%ly6GU{A% zo8Ta9ySqqf1+2Oo4&c-#W}ZMi<6Ec%9Iy8!v?SbyYm;a65_PPP#2LjM*3|zNX;M!H zN8ou7V?+4-TWf9*&ZNa$N7b1PIyy4m;)*^R4a*aDSMN<*MC=yc4Y1HA6`mT}3G zW6|5Ozsjm~*QO^Y0x~*(y1KbV6wpD z_NrE&cpm<&T;s3CA;o;leG`;m@m4c$`-Np#fM15+Zhbv~#>^6*rtOsSU5>9to`<-> zYB2+MoNcR3BBVl0_b`12%3v80rv7 zrwXpQ$|dOU%!d;v5!vjmoX8daUl9Jyl`AW+uu%5Wda+H`+BFAZ!W> zvh-aAIn&|UiI8y>h?RKG3H2#wEGXR{-sz02{jg#KcPf9i@a(gSrp0aegnty&Tst%thu(B z_4?~m=(W@ny^sw)(&{X$oO>Knn#a+TMc-BayLV!I6&2$DZ+-H~%myF~JW@x^Bpo5m z?%wL;;!ILkHCxU*Zm#NyHFgShLcSQw>~oAiLEs0#ylZ(1c&ZReapiNUDsNf~+la+v zb-JeRm_;4H%8mYWFTr}02KdR;he7vNmJGo<-O=CW9wvpQ2~{onKp>``+zMa{oXb5L z9vm7ArnEFlwbObiBvj*p%{o0a?3S4&A7>X|qC@CgYn{|mP!faWr-)BIOJY)7NQSJY zxk9c=N{7!^Oe9j@f?TB_eW{NI{X3r~fK^r-5xggX_YpC-N92NN-oEv{7aS~`yblNc zwT;vtr~J&i*?3b@T$u;o?ZVZDus<|ZW@s{N>*$!3dO(9;l1tM$mHOxtcZC+%SiF$n zz&;T?4`5Tfadrl%SqrI1i~q_S=uYE25yZj6hAMx+D0~`qEiB&Nl+>25|MD3Xi@!aEDaIAnNHlaz=DHuo{wJg=jqmi0gaB24h|yr zLH)+#-QB&EPlc8byENVqa!?k%j+*pixsCsuJU+7WhT7Q_ky;voqTWKw`ovjuBbpT< z@>tl&5JUv?6oD<$I9NWhgZ{-?@27R!zsRM{$lq{!mE(!K*afY(DFF(!>W_oLbFg~{ z=valJ!EVlIZx5kj+o%*~xa*w1xr?(h-`P z2=UN$SxchZYCrR0s1h6)xTG&)@Aj?q1bDDbZyoXl z|1CW8bt`X?%loUQw*@`Vvc$sb>Vk@@@!iXzVfJ%JLL8Q-;fN~8cy@Z`Br1nyuE|Bo z=jH7Jn;c}>9)7zRCDmf(de5^;mmQ+Bymlggqpp_GQV;4+W-!I$a`j%{TI8O!(%9Ofiq+OTgEDpx z4v*ugrvfP-G(`l5hmljCkMF~ohee&`<6k{4S#LpF7lcYOeZ0-hN0hN^Q|EB@N>vtYdsQGF9uKP^e zr_sKQqg=i^)GwG%xZ=WuO?*{OwDF~>UyG{g=zF{IjLJO!V`Styo` z;_W{qgB})hdZtu>k-gjw4VII2qA+MaK~8R<#+wZZ1v_I8$dx*Ug|j~P1R zG<1wwM##~E z_@U8#59?L#n-zDz)7f7%;o@oYvLfRyP=B5;;^n?v7c{P)4vl|ubvnzqT5}O2(hf#0 zFCF_5h`IP}d60!5>oTIZ}31E#UAmWot2Fr3mEh4C~-UPhmW64@iJb zqJ+`6kQd#6e%U@ud&6np2=7o;Jn7sJ5DGSws@+YX^u!Yd-smbmpyeruLI34za?SzR z*mK{`Cye7Yu-R<{{u&KW&umJy;Rc@I2FJ&TNBBG;M(dWZ3Xf2sju-I2fKB|@<~#f^ zD-V^KwQsVS?XRr-jY}@5bjUik2(WN?xhF01by4$3)!dcsSLZtnWl`o;mEWpJSjZJ| zs~i;*P}fo7rou3d^4Pg^De;YJzgRNDr)&FQWsAZIKG!8P-1^p&YjOT4^=aqg+z~m& z#UoY}cv6@Z+&#R~UhEr=K(nO)+{^D81(FgXe#pz#GS@n|F1k9k(J_!o$%tzmdR&s=@W?v7@0;!7d4G@l{i_Us`}m7^&z zzUgox!#HA4M&<17Y=TN2_VnfT8)AXfwyjMqI%zEy zzJ6I`i7#hcPUmlr<-Z&bY_3>j;>zKvdx5qAs8_gpB^4&!35w&*wUYg zjPiWu0gy|N09&x4*M90ZRpI~q%I%exUY>|ADmp9Qz2GQCPgO?FcQ0Iie%m*#-i+3sQX1h;C92%?}!vFZuoPg#cg7T$P}%J}-`JuzoIz@n2G{F{C28 zRr_}{%j40TcBI_=g?yU_k%Q5rkZ#^xH^-Qk3)aN|vW@+RABH_)gEF=@qf!6CaHgO7&nv&V@(;u; z518`u&P%B%YOQfK!ccz7se~(vO)7j=xXpJB7u96mr2y6URuw>)yz3SvP)5ewHYfZW z1RI#xJQM3OrhT@f*FD}F#7X7ck7*cne~qr7&;AP>eHqn%AK5dky$X|VII2^442-gQLI zXvZ0S!Wlig@~2GF%o!C?!Yz-7o5DAjw!$HhoM_w1VJzg`9FPCk!IfTH^2trP0y#~) zSGmSL160ob-bL>-ynaI<>n(mj(;{diXE(I}C1nC#QEu|(jFJ|Ybc0LCvy)t3=g1{= zSTR-ht!%bF&m*!at(a&f$@Mg1s4R>ka&|(_)ybY_%#6)zSx;!?)~1AOtlf`=B+8ff zIlu!eG<4a!t?Jbv44OUYmAC)_D1pv^tEZo)`UiLJ@Ko*jTphO4No2;VcU2=ORhiN9 zxrD|83NyR#%r z;kuB_Pg9Z9kgHIpnDvrHC+HQoUHY%i8F77)GNwG_B>%S?m+0=TA|p8ZgL`{xyg*?_ zY-gs$IzJy@KY+eR7LoQ-L8}`Ul<7nkb{HG;BwA4{Ieffys&ZVCW%MWS1q}{|Yoom* zNP&`&`Ib6kNtYj>WfNi;OOWBW?CS7DB8gs2D5>$vV0_bll$t0|+u3DEtaKS2@4Kid z@u86TW=NYL`VrAdr+az^Ag7u1Di3yMj}SRiE`~>cVz^-{c;7;)%=Y<|IR}5!WWYb7 z52fgb!mT2*d8EK8!2H6}IpH!WImh&PHOj>)NnIkYZD`VTrQIug;Ez<`uYn6)R4w=q z9Ui3A%M4zIINp%A&SsMG6XSg|11hE=l~H@% z4+u{#(%1j8fRUEOx zQ+JBEGbu%^qh}?8G9|tGZaKVyv=tot^8B1~^lPr-VGO)~)WiGX>Bc!Mnd|{Z`7!%@ z@lx?2fZ#=|W9y%jd4@}Md*AH4v#>zSh@+CSBy2ThVZ_OS?3@t}JDK1>JxgszZ)c=m z>l-lDU}L0ClQP9ZxJga#&h`x_9Q3MhJ=u7Wa?k!#gx~tAI6v(9MdDXpqMa6JHuDOy z);2bFGfp?2E^uV~D@qY$Yf*LYLY?=osq?fO`k+L+zXpTK{jE%H{;Dy-Sj} z^)#7DyB!YP8>T}+aO-+1sr{=oj;>U3j!mk5*j!Fch`@i@!9kLvlX;kEyS z*S=Kd@kemlc}#Qm^^~}#3TXbhU}hSnSlBLh38%4AxUzhE|B2nkMJ0cjtt$AcMuK_O za!XbKoy@|hEa_d1t64mTV)=9J)x@Re@)o z7A(}0#4&QoLCRF3C{J2dD40^VEFb~ZcoJ#2H$3i)llrXS0Ithp3{4n(nih{M{;{?f z6q`DtF0TU`WMFaYqg};C7D47J9gT$h2Z0lKRjw`z?Mh;Ialb)mbPT60N1oa9>}XN* z%8-M_43`~`Zfst=28on!GI26X^cSppwTfw-5rScA|~8M^Vx8>*P(1%mHOlRno;r zs~&7|w#r=n@MBRCjwU~S|9YfVczkiwV?X5;ac{GSqEXe2?kxvdMWpJP+j;T*{LTEG ze?6Yc%6MN%IIV;yic>Sz`RY_dDd4a(TvO#NhEYzYiC%ooG5Z{SK14aLUQE4so&=3 zSGL8NACeQw371BPDA95(F+x!d)KB$io9!<5eqGF4HF5<&^1i5*_+8~)QCVT$%WAXy zqiB>|yI8wQKq{!=-W_NDS5=(gsII6{??3))ZwSbDk~#q+Ns`COl{{OU#(UD_u_jUq zrkX#xO15QOyPJ24@}WUYNi>?gfbFVC*37IDjDtjqU#!wRB0&710PWUWyx#w~wBkIv ztuuUv`^D7l@9*yICp&AkDMANJpuj;n^PM9pz^DrDsx(?52Nou8*mg-F=Ui7- z(9q@h{bIQdROwxPb@3-Iuy>P?J-;|DkCEx|tl_G5Wcl|!tf}#(V~eZQj((574C*m5VO}R{b_(87!}b+AG8=zURT^?3 z$*FTJG(pp%bo`wkE@FsKpQ}z}${C9k)?ZZ*sa_@Oun1F3axyq6CnHsEfKhIqf9T{) z5yo&Z&nOL8%wsR)_GL{_P-}W8Ulq9oVC}Orzj_IWJ8OK~-LIf`f`}Oz2>Yc<0ERRm z4R^3;9UhwTvdsw07uz#C?b@9mine*hv+*EFD0iHErhzCoh(A5g`sg{Rr_5sU)XUoa zqXTa|{Bv|zj0CMU=vnLDUqNDNN`-iLQwoZzDn11R%!iIi9 zjo`Dq$jsp=_MsGh-_uSC!K<@Vd`U-Mc-R3^aMfnsCr(Rp@G_N5gi5SOehM_gb`-)D z)6rx(Mb4@MjTH1VJy>vm`8Q3vT8nCZBP0A@z%T`X= zEUJ`*a^l5($DEYC8G9r4GjsV}o%pR_MB1F4p+#a%z|*P|+dDg@s>-}K4*xho(JK_a z3b56>ahLiAR-j0j+puA#YG9P!YInT0rU(`*xaNDvX0LmCIx&78Jk{@SZXO=lpm=RY zaw*WsY2)m!zGrZm~&digau@B#-Rb-<0~{S3cWG zwp(l2(pU&9U{}3s4~X+=z4g8dzpX9C0usPhv_F*1k%p2VT#2pd(KEjzR``1>7b~}9 z`o7JC|6;{`ai{7OQ_bY;^c3D_HaLzs;iX-{mb@et9F z{royUO95?H=W%vjanqK^fVQQ;U$2FEyuFVkdyr`pI{|IGFqvP6$^2u!?ia%&OQmp0 z@?h<#lY2c=jb#_)kq^W`MqX4?kpno0)NtAE)R3XP{Zj3n-{u$~WW^!wgd^^G!X;yH zPmYlB(%?sgZr;81Ba>B)?qD#pnKyfSA|-`X?**;l!BT3DxWo^9rtPit-aG8|?UNJn z!oJC$)JAGNjM?WrX~hTuvz;K;K2BYFPXbY{%B>g~3P0~Be_(Qxf{j7Ttf1^U>OU7s2#18`F&bo?a%etu+k6Rmd4;Q#kxlR3*%=Vg#4 zM^r>Ciip7FrKr^2N4Z+=qUSFCv=Ffon>(e;EmXW&g|co1Yc5h!VnvdT zC@Z%LxvTnf4ap04N+LsY=Vw<0z?n#yc3pp_5*Y0rY6P?HMQGy4V%r5VJ2)DxdS}Yy z2_@^|MH!!Xc&N$>lk)=Jl3Y;=o+z|cAanrdB+G}{Qn&Dbl{sG711V<$$!PMD+z6_+ ztw1J$&D@5r{+|&iQ*6nQdeVM8b)-D@={Tiq;5TrHxx3u@5}Nz)nI|m_7bwxsq9)sM zU5q%n76}|7 zQ63XjGE#amSTaR2ver_uvMap5)#>`0A)jgrxC>im6Hb}!zvLg7AEpw6-5(qrmgy*@ zGu0>E{!3rd1IW^Ox)$|sOxBJLaRsv`qu{p2PH=1tFB!k`4||#2#l_O~hKmI_hrA6Z zM*xUSzL;*V?eBqzkYzC3dA}``Jzdbzd8^{j-x7a5p~vqVSN@w~xt4t198w)<7S(hQ zN=3HdCr&iH@2{LZ(&eb*Jdho+&F$2;BP@&0_^QQt>yQFt|aj8n zQJaWVlp##^K(?V^yYyb`n`1|;Pam$W+f@`JH|THAVwWHjkL!dZ zm;2PH&qmbLYjJRb!5sALkth%P{r>)L5~WC2)*2XIYuz!_Z9LVI%YFq6 z-l3!zt|9M(e zWLu#_{)1=!R2ENBuPNl}m7d&RFLPyX>L2?WoqyHah^r9!KqrJL#6-NDXY*5O%5U?+S5$56_*Aa{;d@*Y^I4M#;vSg=^?n)X)B69zcvqYw#4LAZ-R2Uchv# zs#^y_YU`hkxw|b@CK4=CVkspco1OOS3W0oSm<7my$#C8Yrlt2&$?gD9Azp?cfJedi zZneJO|2vbt^wLbWOH)Kn$qBPjYZWV(>8mEc;qYTGu`0n=^gI9KCNTE8-OvPF*+=5*eajzjr@!M79HwRg`BC= zs!4%@5aa~!+mE%RNIBMc3FU{%>xX;*>a%k$M%?}?XNkayhNL^IvvDu5%C!n{5_4Do zuSip+&K;%re`5tUk+yStoq;|ag=|sCFfp7MKd^VWlk7=Cr5vBtGjR@QY7-#&!ABjN zX(s0Csv`L6Tp>kT(Nr)avl7vGOz%FldvZgm7SKapBLsIIIxfe!)nMo$9*FNHu2+zlp zD>D;L?d`cbEFRPyeOZj zA7p@SSYDr6o9bw!%s5hzgZ5uz)RS2c=|Y42O^#|Zwb=r?Q?FbQjpn`e-ALU?Q}xqp zz2ZC0&PBkh8{K_sqsWGC?fqTz8|inpz@Ncj>)Pyi(8r3QXQy>RTzu0}=T`c2(y7z> z)5Xh|5rS`*as$qY%vsO82HWNso1M8qbkSHTaZrMil?-0;-FCV3$5)O7IAYh*KH?s+ zIwEfWhn-4$P+M72JWxrpyGx7ZgFtM1S8iyfF?@4>zkNcYw?W`OxXFi9s6?M^65FS% zj~q$OWq)!ajP_vfy+R0u8~mZjRmTkaUlU9Hlj601$9?p1$U8Y?r5^r^YL`8d#e?t* ziii~|*`*>AcW(DDB6)s_03likluVrqRH{^Ogv8c_X(LM{D88gOxKSlhf@=cyj>V2s z6_YRzLnDL;3VSl00H1>kq=o|NP$o73D@Pd-D&;xc@6$$uhJK+=H=%T?3hH)esiab^zRH({_{##4l{FRndqTAPq==c5}AhR;6N8dlvJgp^avbxH!6YZxj1DqLPr? zwm)gHZ}dpY!dC5ZbEYqa#yZ*99YL=%)hx$+wTHVY7+kEE3br8O1zoo;y!EpP&@ZDXpM7kPf)r{e~&%P{f-ah{tdO1oN6YAwp zFJ*G_>Ugr41^X#SlhBf$G{W-eDyuKS=F2htsfXz7B*G0S5OR@}sG{I@n#r-Wu*i%g zs$HIQvM#yjb?;TlzklfX-08~k*2B!QnixR4%~?JNi2*Q44bHb_XLBBv1WCH_o_o#* z>^}E$FL~M>X)o|s#V8kQ_=u&;6V3-8@0b(f7h`4Xu(nI{;FTn5Ac?< zAH8~BImmj-jrz#(E%kdWdg1b0ptth-0w{QD845Y=YFC0R6m-Ww(^Pk7!06ZfX+y1f z6Hnz;^*zO5C^A){Tenz?#gd-;Xz~oAKmKXr&6a=_6mD@9@mKX1pDHuZgrT!^I_&`L z=zZr89e3#9&*+}gF6xBQfCK!j)LW@kS8OAS^%$+x_A73uZ4{)de*vcP?$R-3`V2z9 zA@4TD(QJ3xg)cIdsSVohozhJjE&*^Nt_|i)?~@5=@At@Bi_Z6*%-q&R4z z{^MzLi9bw+(!&x}6>h&%WTu`mrBgg*it18qLOh+_7ndfYk*N5>&0vjthNVbTL$A*; zEZoCtSia6gnXESA+fcLW5`Do=8dF+NkuT3@M|Lc}+>kR@5_fhQK{>nD{$tgb#`D?H zjp9kba=$!gB^Z;w67Lk{mYSJB0Jeytfp>o;D`AdHj2 zqNSdRa-qTMr+$ks_H*`Oy=>+4%S@qrzF20h=D3$Xml;v&D17f28#7{=xyZ9}m;F6WOa@zaF9q2HX3hCm$8 zE9#6F=Qnzt2hRKb1C4x~s*>F%F`)xKEQ!^wMh_RFW)OOBS8;$6>6y`2Dbjfr>+PMZ z)=Z*YQnACVO#qZmShf7g1g_)#{_x0t*7nAglV112K-JzvOYiHT;Y_#PCKx@cI0NlL zKPPQ!wP&2d=}D$@+H5|XNr?w^@RPTaa=|I&}Np&YG)z`}`YEPm)w_o0P+jZf(uB(iY`-zlXA@=Wz(BDjFfo9n8Lv>TdJLu?s7wvzr{g)ZT} zfELA@OiC;M3PYG`O2+*aiM}XeE})~5R^hRx#-r*O>vgoQ?Up?##a}f{(EgO7WByj$ zDzCem5eWqsdBF?gzA8-}49b|Ymk(%|%ptK=b$WK%ee5xmY(Mk@UQvIrI(pzLa782% zm9rI<0}2&x@>%7AMw6X=o%+RT-CSSap6%{Xs6{-jyRgA2K0rrjyV2RRZk6v%L+Ww3fYQ45Q<7e z|E$faHT3Auu|V~_im7*{Lc-7Vuv`HdcW(V%X4e-t8IPw)9n(Ovi%dIHOonkLiI8M| zwh)Gcny>E-iv<&mc#2$h*~7fGtH6jS5LB5ubK=H8uXi5J>9P|5GXx6y=p|tizxO(Y zY z+GNvcYOeCB9(l0czy6@O-<|s%UF^zmR)=RV66y09Q=`&XjYGv=zaADHI1On-%dfWc zp5EH{=qsld;#pr__116LEBY}r>OObngTEqnWB&1#G)45vo_1rY+fxntvl~gQ*h@my zD|qTm`J4$q?2-w_nc`T*1?g5Q#WB;)=a~X5Hs>q_MNasiFhi|RIAKVgwRfpI9>QX- zGqkfO5RX~v;C6k-6kXDu2{pBFW!i{^%>oP)l~^=$FG42cl`~F`RQFm3?^9VgTKq6E z#Wvm*RLt?q>+}(}w*aipHe4#NZtW*R^J zS)*0!p8#Q=0Swbs0UvuE!Xf55J(hdo)^X7;{Pa4Oyr8+ed3N ztHvgw#ip3>H%h(QYhha78(PS*I4=iV&CogK-xdrOa(J?4U_yfg>X)tdRp%7)6>(TX z%Fdrtj8sdRNO@BfWGRLYW+UkrTYXsHCg@L(x0Wv@VtsRw9=wd4ooi@syFk&)_o( z2b%QTrS0*m`(hbSGdn*p%S1j5>%?)X=v-Z@x?6e8tT&_8%`1E=w#RYB2CZI=x%c(- zWNM($0bxTmZD9xf>YGIgsn!tbTYoM(>B`f@N{u7ZT<7sCaS zJ;WO11XJifNuw<6UtQM5x(Jfj?D_uU%az;r){4K7{pGRq_H=--3CE@nPY&KfQ@cP)5{$sle`r%{GI5 z^*8dG;MjQ$>G4g3rdI?VUlU zQnnMlx@sTLJeFcXgW-5DO@#t;MLFu!Wa}iw##g^Qb1C>4R@nxa&peS|R}T+OhDMwta2|>}JRMixaDrdLUc7+<%gjfICfUr2!PqhlBB7ArH#o@c8 zLdaBfm>b;g6QXjXN`>>kZakhtrqoAeB3{o-rLDl~K;3ww{lQ?Mwz)H(rA!d3Z;j<4 zFcf_PXG!d$CNVZBW|}atNUzMW)U>&@q$o5Gr@hE=rxkJUV6JSc)zOBuHDx-!ROBHe z#RZ~ySoZm5>SSW(;2_w*B{%fObLYbotx<2ZcDXZ!(`lojBDz40yd+8=$JnFa1I zN+J~bJ||X?r_}byJRs}&R06C|ukl0ZLt*OHTL>~`)j^|wherQQto~*j1!7^qw1syQ z-ehk;BN7gBCjwH57os^z#48~UB9&8)eL{v}M9S|<>URlU<>IxBu&Sy^Tp`zGFXNIv z-dpH=>m&Pn;EmPj3x5)C`#J`y>DJW#YDl|k@pwCkmVLdk>VR_;bO=!;u_Ba`hfk6R z;JV{xFOo-!>f;Wqtqr9bGinQ-YitgO)`Agp{+;~x;-jvD;Id%CjVyLb?pT*U=OKVd zif3-W$Zc9rJnmzqJ2j28s-)P#K*7?;$4Y0|z|MR6h5&(%dyDVobEM&&P)XkH#P|u& z&aPpU1hi1q?&?I>h(bjcG(k>e=@aTSenlVY9~0sH_o37kqnaKs2VUq!!xWknzbqxp z)KU$@SfN%bZQb?EVBh_^~bVHc7|T} zn#(~E#1wPn&{dz2hsoq*D$qnZ4bQFCSGz^<8tydO)0-0h!l@zmP-73t-AKA^$9N#E zWNYic?8T{_qQk_fzzN=1oE2<#$JLQiNHgBrQ-!FKhk}-3^Ra`GhONpV1so>-+<)Nw zp@&=V7SF_^W7Il-vbY+lqV$R1=SG%%$u?UrjOAfbfQ4%^h#-%ZNF-3X3E)ktbC*2 z`6KfkYSC%T7s8;pV?8VIOu?AUHjfUa6(1DN#IEtIk_=vP~~iV4&hLJQdZsBg}8V$4?Oq0_(wi8v>)?0)x|6VYo~Ne^C*1S9qSp~Us7 zP;?;3ehpSU+)t$xuV{}0gz}?B1p;fG=KyBSgGjEHBH(GpO<^B;kBrO|tG3AMftu*yt}jPh-+!4s>_1 zwM9)v$#&YOn%Yo_+c6TrAkfTWC~lbYrEWhd9uOZA(tS95G|}VS9^Wb8DfLE|hW-`r zQyHlVObNij-V*b(-Z4WcT5nU@05x9-qf`sw3o5|}!Fy7Hydov4GulN@HY^lX_jmcD z3AH-Y4P%$yffdXa;V7oDqQAH}hnyw;BJ<ECBcf zdX>cQ_LhoB3qZAXD*XYg?0(glJ8Ez%@|XO>C(SPUMfrzJQ~j=$AC8uOD!@=xzQsBs zU9>4e7E6jD{7|mk$D*eT4}_S-h+e)9hEW&;y$ZhoF2WlTXICqlxD@9^$Yyh6EuKm3We;V|3RGOjm%3-?e3ed_4>|Guq*0VFv#ifJ<5n`?oIWGZ08 z41$5=osc7PL&RloHu|q`nqUN9Dl7}cORjsOBmYxFvLpFKQ>R$b9|~E4zTrS325G4u zGrudDUTYbOjm_f8poc}Th`xtcc)A-ee0Zd|l4(dMl7ZE+0iA27SFWbL8~m9Z?3 zXIP7Qj>ko@M_yxBZ{PaC(w)WiS;R$|3B?HN#=3kzcR!oB5DhK)^Kj0~63`bP#Y zb#N(d)C-S(#t>(&KLg6h#eg~{XU3Bqt*t8y?{CZYhN>#*6DqH7{1WGr2oQFV>^m zf0|xkcNH$JO^h)y(YrB|e=buZMuXF~xu#oa^y_H!7_Iwqlb*ky-c8oeaZ-HofQnQ_ zpw2FU@@2US9hrn`@qj9n<<~Ksw{9y3qNI_lY@kRNS*bEUFZ#C@^n{F6EsGh8!K?`4 zWo|IqI`_j2@wB3ws~`r=x=aoJm6a040g+T18xJy7~hDNgdMBo(PfOd#ByiP1V`B<<%0C(qGb&?0isP z^bF`JP_z?VXxKLNwmyXo@+mfF^sqv_8)>&Ck-as|IV$^57hl*8^d>oIZUYmaq~bvD z%qP{Q{GvXLNAxShPiXPhFGndRS+y!Wn2}~+brLOvMck_@C7lfs z>vYad;7U^dAVgPIM?}66XFF`B$_R_89s#5b4@?KWefjr8)k6WVdWyzpn;T@M^Ve&- zXZzxuL&XbyR4rZm!3S;RR5-NJ?mwYMN5-Z#`P-uM(xzOmlx-cg!6uSfO=$6MstgvH zD^lmuI3f>2Wp@c8?Xq`%G=(HN#CgiP@Smt~I_@7~eGUW;-JF{en+6GE5keB4%v1Kq z8Bi#D=8bZ?cjlYAIK8>m{jLmdB6Q{|2vbEKp+2v*XDF}G!pKXz2og;uBMcf*WXvRX z+J7yVvV$%QhJ>7VwLDEtw=*1|-M)U~k$6s%{%G$Dy4D`4go&2!S_b{_V07cUsa@dd z1eI=dt*t#>cMHLTFTc{&Agi>o$Z@6tvTrp5WRB^y0h#}5U@dFGouV`L-mlzTCfWzt zE&fa03-q~Y_>PsoxbojE@c^e+JPk^%Do5HiM<2q5|BFyHa1KpJxY#Gheu?$uNt!TZ zIAa$>cNEP}@p6hE6IJVSc{XIqsom0zD;N-3_OD=Y=i`94v<;GC($@dV29}1? z!B*n4%CV(wR0BU;5v-<{H+4=Xt7S!?5QKNrQ5@0wdjYJtr5I+g>5E>B63*iv+v&SJd0^5&hg}P(H%{Vd<6Rq;h?Fq!J-=) zNZodIJYPr~3Wcm?=#p%1GR&MH2UeW!jkki zIUloKzF5#0P+(99QKFYZl}l?{>|2yze#9Te-6`~iCtUsm-TezqOSUvDaJx83-ct-O z;+dXTLXfJB&x7pk zD@C~)(454x@z_8HXf{`tTLd!(O%PzgCg$nOtmOE)CizpMAiBUqPX-Q10XZG$@<45Rk@>4}&F*Tq@6UlON!2Q(C?ly}NA4wI&avwj*H z80A{O?8&S(C9|1474#OH19NSIVrPS+M^C{V5~}(bgC}2 z0EPDh8Uk!-vM72e6MNS`H)F|J`F28fHoz=b5dBCQ$*Ph%Kw`%TFxCKX4z9Wu1|N*B zo(QD?jkEMqof9%KxH8#;clbEGyyX84$J$Ll<OFTIIbxw>U?ln^N1QysS zYQ1{VeCS({NF=>obh=<^`M9tk0((=5va+Q)W(Paf!45msv#yxQ(kH8qcnN=NigAI( zzC%ALdGD-|NDi3uYG<$U4$GjwXS{76TPmEpaAHFjoU`@Dpc-$^;n5+kiO#My)bYoQ2q6uF zVHn~TBsLbwh6p{gkixs&o{qw`4Y$%{X45T8v*0sW9ng0ZoJ3!wRJLnd^mKj8rtVz9 zcN*@!Z^Zd(cQfF!zjDNm|C>^S`oPM=D=#iOK?GZlmMGQCQ$^#eWEUACh{vp1%?(gJmgXnqd0HN?x@sfSr*WrGL_690!KWu z9b)+1#L4LNnid2VcV0wpGuV3j-br8kTDQbnU@MOx*=A3bz{r& z2gjTcdAO(VE`>F{wpzuGS^WRjewu%wU*Q8a%PwLG-}~9lh_0*8kwa;RK&-Z&OjT z>zUZAPJ})(avHWR@SE~nS}E3Y`pirQ1#ZW0Wq|?-T~EEQ?>MGlqQNpAOm;r)J{j@7 zvDTn>sZNZ;()xL+UgzKKo2e+liULd*h%h%001(EuGLqmu$8pfm)!W3PT`2Y??c{=iMb2vQ5RzceYW{>Su&SUgEuZE~7nKYB1n(B1_CNkDBu1w|$+{GXb z4JUEZh8sh#8IK`suP=u$O*v<>-5n6%ef% zttU6A`Zwrp>kH$ZxLSYQF_srN>d@jaXa4VGC~H|xH6cuAbDG@(o%R>VD^8QtFQ?zel>&R*Pv>4Q1uGayp_ zgG4^(@adS!$(pnZ41LN=1Pus1`8yQ!;IwVZgKJJ!kNA_2s-A)M+q2X<0dohF+1myq zBR-P5n#f)Kwm4#8RDXZJmoud$i|m9bND_YU#t z@s-Y7H#W4?M^!}0V)$OS_Ijz}%-~?lC54T$wq6i#p0{rYOU1e4f{{&Hh=bT}z07Sk<#G^o59DT=5{O z{kY=ks2E+jT3qpo7MtPZEM5xI$YXtpGE5LKC22uQQdOnK`QNCS{hw7VoiVoYG;!`d(Npa7!=lDh?}Brk5t70K>aYtpVK z+ykhqHz-bcfBeHLBd9xBt^L{%1@y_udzRW2OHR( zh9*6I{Qr@?`Gu8pbGcr*lp62?ork*CZVGm>5q-8k+Xj=lFKQG{Mx&p~Q2dg?NNLtW-S zvSH$;9)WLZCU2F>m#Sn43n3vMNf=}?cF}LaFpA=}b< z5EYmOJlZw^6CeO6Oo(K}Iyswf_rIt(25h^P&(>3R!$;s)Y=4Qd5?WhPR}vw6F8@QR z`MU#q_)-(^{&IBQQ(Uwtw?@4+Z5s067pEoCDrBq}S4?`bNzN8!iaKn<*t6=Vn_xm^ zhSrJMLW0l{jcdtMBgV!5^X^8GE`y2cJS;6$EtuLl{|SdJOE-h!s-qvT;d#47iZ`30 z{od+EEJ{g{QAnNHqO-q|`ZUIXiC>4kct>Pxuy&r3OroONmRfCpQ|Y)VX@0rD%cegn zb9F%FiU7;(jch}Q97uPIt=iw?*xir3p6u@dvwMrhY-@EAICFFB%8~n6eUd6gk_CyH zzY5bS)W}GjSWIEzBxAZwKY?6jAFaMjBfrBZNSjaEH%A~N@%V|u{^`}+3W&lGuTAzn zofrhL{*EM55?;21(xo=)w@UuuIez-LHk+51G^&CV@2_al;LS^N7cWrEg;+&m?o_G* zsEh2Tn5vPqLQJXin8>{La_~?Mu`^4f7{yCrtULp>!VO`s$8Sovf6LL4E`g2^2%67U zGZ4OTTm?#1r=~^%%uHsq?wC2N)p2V+ou2vDichH2SFNuFI9glZ+US0LT<*BjIXy;_ zluR?+ldYSWopq$}Hk8ul;S6W%IyI=>|IvS9$PBJi)IJsBl}x^Ta0IpF7=RrS>2(u> z+%{<`NeR@GHGk%5y*e*u$_6qYaoV5Dnm4|3{DhtSa2ssFVJ4kw{uEM;5i`*cv%o+`Sag=*fs?B~jIV zXQy;#q_3*U;K+WFNPI~$?+^8VFUS3&ac1(af*HFp=lwgbUgcUG!Ic!XKzu_aK`*iy z2BS+=c&l?s&t1p7N$0S;n|Xr1>T|YY`PKsCn7+ZEja$RvlhsuPtyA!x|E`455VgfF zG4Aa1Wf(i&Lty{ElBU`RwbP)7i_Q82IRWR5>FKxj)sy!Ap7RI4UOnY&WM@dP{d!!Y zhFDK?*tZ`(()?g!F9tn?y&d}V|+M$tzu|HjJ6dK|AAEKIEbc`6A^C`BhWB z7_I4_v1|-Cn@R7abE%Wkt>fG@`s;Je-g0`U@^3}W%=oJ^QFC*tA%b|JRmbs(ig4I>kBu3^1 znCxoMQ%LVN|A>B558a)-kJSQ^P?yp#hBBzhmYuQbUhRpoLwE|s2rKM7iG7+cB<&2p zn(%Oj6ah<2oSYmV2T|Xd?=8w!C({H}!|!JDl?g2=b=OO}>qz7;WB8xc82-bRx0yEZ)631zF-%2-2tkCVO4_Zn7`A3)!=2k6)*%E% zGse_466zO&)3Ar1FhYn}q}sJ2t#qgl$3WI6JzgTnB(L~GYFf*+?hESbrwBJyfo~pp z8fSq(zn!xlMxT`O-PRf;DZ9t$yf}%$2NQqArf6o2_(kzK@bvS}W@^0np1S1t7>Z0# zBJVJIz~2;Lr@z=sNjC|yX*H7Ezga>?mk`heY6F0UmwG%HB@}QHrDjBVCLV;5zAsLz zf?;)5xh2rvtrhDCt4p=E7L?Ra470J5HpgrnD4Bjcn4G3hM)`76t&>!-t&-XIq+T}O z?lrpV=vR!cSSJkc9UE&~B}pATnp=G=_e4F9M^~@NV70b54ePTq7(m1?E%`R}bl!bY z@UEWt+nb@bC+~Ovxk5Jb8C%pOCp@rfKF`f}m2y;x8AF znHxc(THh;%cJAhh5wuc5*j?D?FqKgDRyI*Xr#T~;l|C}{+0D&|@4Wl`tk*l(cPI33 z4@~BZ&8SnYEMX&|`eb!Uvj*URh8Mwf4%6QJ+U}H0LfhSpR%+VbW zG6lN(_54Fx2=nc>zZRQyb`Q7(@Y9_a?#$-BHO}&A_38sD8t4wT=Euh_(my&pIF3Ih ze(PT;am|swn15|X&&S2pt#N*odbhKdX=A#BLH3@Qt)mhM&+{o*1gqvo}KXo1U` zjUxZ}spjTf(>riPGchiFRI|3Rz-;)37YkpDQc~{DSfVFDyoPTB{{SMsh@0;S+OmmJTkf5AOk*X9ERtcCF zWm;s!8TN~|EoXTv;+6M#g`eBymwB!Vl}jZ-8si%!U&)r2hP=;1Gl_Mfj2nf9E{PyN zg>jvp;w`l zPDrTU9t5Xu7r4S#>6kS-BF(`Jsx$}J~&Qn84Gv)Iu)0N%i1Xd zcy?Ej%;`!$O8~fttSMfPI}^t#@4S6j3h4j zW-yvxLz`c=d+pIuzgu=aIGS>pjnBE%LiH?bMH0f5_#rB(o_slPglMX7WAB#7U67a0 zs2VKOyV1y!v5=)mQ7wWwO*`8%D7<_AO;oh9*98b|5EVj3IvtDFvXHv-s_o5;|CM{? zq7FK5e)wTi4LKjdrH%Oy46-xV#hMAHtdt~OA+T4_T5NhP9Ta*g9qjMzWc>ygR;s1! z%HjiLIO0p=z(5W%(v%)WoEiqwpBfIYGI4#?OsbvKMR$82P!Y^ST}-AMoG9gRsex$q zAA6L@KX6VI-Qp^305#xJXG*@hkHBm%d?C$yxWAgs94QPH@Qx-6?dce;eUXICbB#)9!`@Os^mo{l*(0?7dvhAA@<1i&OeeED!mV-=9Q;d>T$L2NNzzAwI&=` zIG8}Bb>+Byd@3No!bzv3?@V~7n#a4L-89mBTJ0M*A{=|FMi3$UVc7*U%~agTk#}g^ zLLYE;T>W?jS>OXc}LS2T<$p)m7A<}ZWW4bxhMBC>+{xj0NskqBn275>Z@v7F6QguI z(28KOZJv%10;^1*g?HSUo$-dsEXt04&Klgc{YmGWW%_NpfX8leI-)0ki=O;BNcLOo z9Qu)3^Xb${+@*gI<6o2_^;Ly1vRPEyY3!OkSk?(i17NUG7i-gCfiK)vHt){L2VN4ged1=ne-J%DU*q= z-*7dOdUC}O`Cvv#)(^((7aCM_pZR(UTevEGOCLn|7U-?7l67HirccYIq_1Uekst4l zhevPGgNQR#degCe{>mrJNBb2s1`p8s1Nzf`HZdM43kcc}_!&Rooh&_ zrRD;xC56ORX5vI<6(CDip!QZdf9N3G>%6H19Le@#0ZN}W&O`EvW`mLQHk)5TX_w!s zPZ3av8;;~UOqdAdJ{Yc>TL()7_OuuOQ}hY&u=Yd@R^?K}8;XfjcmroNm~&?r5|oW( z@Tk#fFMYxgb6pw5sV>9F)R~RCyPuOqLY`C{@HF z1z&9PwA`{z*3Ws)2n9;rKGU6@k<1(7+VkMmNa0Uk1!p*n<0Smw+v{P;0kl1?yNM54 zRx!C|L^wg`i7QvPHaq=e*E`rNpRzZ2K&sAQsL|OeG@>)w9Bpq-uTyhykiqEa%hjVm z$HJle$gUP{Za>Yh>9JX?obs4oy7GC;*?o=I6;clraZ5ovb)IpR({O>uMH9q93QaJ` zeU?30w({$mUGwVStHq`k7UT+e#NGVY<2))H_X{!%NI6|SJ{pbWrDTT2`$xM;3+<)V ztzQ~@^%kd)Hgl0U)G#k!5&1LpC(wL~S~|UV6%xj5_p)QdOE@mQwt!|&6nn5&G4reu znr&pmm%%@=&!Vu|CGMcvz5=budA6T(=5#> zWC;~+qezMb6Q7)y88M>%DC-0}Ir{>!c=x;r7cw zrZ`jgjb=LkUumqepM=Vp8#IyJZ*i7dr2(;XW5aMP>KDq527~=Q;YyT}6Q_}Zssq4? zvsr9)K8LCcY;SAI6k-~~oR_X#c%JK>i^!4Up5?;mWO_n4N8q;|n+3tx{b%G;M zDe0(i&iThg&Y2x!(_rhOW+9BlbV}+p&EXqQ14Fg-Y?b~3^eE0ijCp~qN^gzG;AQr@6aUq!yWjh(mwz@AE*Enm6*SfZx#7c^G z2HWpUlPt%u)a`WjpnjZR_0M!CzQvrbf;7;9mxxVqYl}uKXizg?76osU)X>>r4N9|c zMOB>PA7UJZ>jf{-#_iQ{t)djGS0 zY2%sfluUdwzAZ)et@$qRm*yHzu3y}+h-hndLwLatv3gl)@cNn;qUu`wB6Sw4V6*mF zoGd;IF{TR>++_8Ndt}nz&VCvEq{5acPc}b@Dq51=A+PSv(_PG2y>`wsxpoqt%zVm% zA0kxei)?n&!Y{1kvZq=(MF8Ao+S^Kj_;JIHQkNx`La#s2XuCQJulP5gGClDcMkPE6<+g0Y~D$Nv35p68aC**4b`dJ?fFG z3IDaXN$^xNd9nbs-d5vt+ErNDZ5jl5AYj#GmjR!BUR?Ztd6tg)mEyh*#gnU zZ2_5IlEBI6g{fI&?0iJS!DLi@PbCWggf5B9s0A)+u<|01qv6hbAoOE~CbQDF&6WCf zb2biioPIHhtFuv>S&&h?AzLwUP1r#iJyoQt=?+>d%MjTwopvqdD6c89N91@q4eEfb zcOqjz^ZL5`)~8ev{1wWK`eI7T;qm`0lK~nMd3bx!BIeNAqfV& zfqssPEz@_!y&UvUui*HOb#-rUdMiXSnU11IiwaH!tGG1CUhbAwUWkMIlr6{YcOhTT z>I}vu>l9hx<%N8>OCA&%xK2#2JxZpsl(Ojj!j{Q$HujF=x_tW z_^1ck^fSY7xD!pwiQMD9qNQXx?&~75dV~dZh%Y z(lWw6BNoai^*u{zcK6>vYQ0@NmnGDOO(`5mkYY0^MY|`>r;sInw;?21@bk$O*QX-2iXf9mQoq=R|;l*WsKa#?P3yZcBH(xrael7 zf4y`lcb^~XUT=T#XGy%bpLuf2n)U_gQcth3=Y6vSJ4c&Ro+_F6oZJUT!wM#jPZ>C; zF+jG{qQq7We0wEbNL_JKKqtxaiVdXJx3>=uGT$=of32Bu)X}pBvntK&y~hdZ9X>>O zgOc?^w%cDQ*J!|He;}vTj_2Xd>C9%e%sDaZ+Zp4r-pxnCF{H8-jwtm|FgzV-VM$eU z_u+>`>^qC`V)Hyx^oQ`?#g~nyTUIoi5!x58{|0;Zv6b=4w#vr0n&I{%P2Qf$bEwSM z&8R~o)SGhC=J+FDF>ZL=-}U%Wl97wg8REssjOO%g4IY*wuS+%YeRo{E=S|T_a^Ia$^av*m@BbfTMy>1s#8s0;NL3P zT$n%ZK*+Srhj_|;{kPJM6hx0+S|F5j@>MtjvsK(BTC|8^9{4H3=L+F~a;f_s7E)2h z_u`Y>>#~|Bw=JSqWi9_v4vISm)Ml2%Ip0K^@2e~xu&R4l~Ya5%&AE&W4mr}18t_|YA*$EhtfEV<(DyPZPr|A~f z?3#cl*3x1gmjXm&mQk+kx+W94SQ0pCC>W^M+SBLsarFVoH-G!e_tkh4?SQH~nT3r; zmm?J`bA-^h@xs$4n~=jiYzSBDEJOK7>$$fs30xmYV}{#NtgF_*2R>O}HR2$>LmWwp5;&bfH`!hDZNr(XwNK6RXNJ0_<2^kVd zFcJX~S!GnvnL*`f&IrP&GYpE3io2-8$S5A?jI$j7@F<9YjE>@X=AX&D-p}V-)qSIA z*S+1p`u)D!@AEvLXL&zc@&?!{=ukX~`?aerrh(MZVG9W5&J8s*|AxzVe z5#^4>5$APid;3A5VG=)@!?@>S&TH0JciKg?>;fqu3gq#8znGC#g~`OZFdP_&oxaSL zk@%gCSC;_^O!uoe*LIL(gXd|@^fo-;C|auI!s-Q&EnWpb$s|Ou{1CgRDS~BH5Rz(P zjPDa3Wq)ltGTv0jMu@7ski;JibU@r!?QIdIh=Ur_>6HV>(P#~LgUB9E?Vu^$B*}dI zT^<=7bd+3k2)d_Uex02&pvy;N33|W?#R@C?Td4?vt%K_HYk{C&ZyF|jyA8qhSn~FE zCF%+Lt**{jHvt4#kZskU?0jH0(=lMUO@60;`ajXD=pQV-3V!+%OF!M|;*hlg<>wuZ zo9GUmB5XS=H}W*nS_M!2jfA&L2WNjfvU)O(cXD(Q+`E@S>(fvyx;r_y4sfZHYEl$< zp)!8Bowc1W(jJiBUGNxxw!}a#kSE1Ql|k|oYeBQY17IMN>d{4JBeVpoW?17XW%1E&N*Rd|2r_M&&=nvP;Ja^(8Rn6m+w+05@K z$sh5_0F3~blS}^hW(T{wQlygt&uJ9wTx4ul|6RcKxJ-~HoG8e?s%c@|C|MK4OD11{ zYGB1`{R85riFgp<-luXMDRBi!gzMJVZ=Sk$qB!0ol1Ah6`{U80lCT+p3B$JpI$jqM zr3NJ>|N8AG6Wlr^vqqx$>dJ{!Pm3Vny8W)eBeUsx0&rvU`xo?D`TL^buVbsdA5!#3 zia)Xen+z}J$PTAqV?O1l(a4h&tb4Zx7-A11eUHs8i6N4rxFoh(Qp8x?mzaBcz{eH( z{B8gjmnJNVTQ04K;(#zEF7puIatB0RQc{*PK}&wlN%A$IAJS(j(!-ND1O$kP_Fm36 zqQ{>kWP=J45sW!gh7zC@0`1Mdu0UQ8tb*|6@yk5-qEAI0p08KAG+ZF`^gk$0llPw5^BQw?mW*ky(KqPy*!4t*KQL*|pmy+>tX z#u9f?tF8q(UkE zw!70k)`7G@IIF$R8TD(&O@#SxV3PgN`Z`Qo7PEo|yH>UY&23|ipB?E$L#Qi@9lYx5 zbrSUIwRvxY8x`O0!zY-~uxi}*T%J)*uc^?f)d<+T zx*>IHd9k|s>QK<-i2w#YA4^94j>OD>(92IHFNc)S@>Ow*o@s;>++?)-b;~OoQj=h6 zvBy&1@+)GVKW7JjOa$k5bkg|Q+MI2hS=%OERLYHPQZ*jL?ZT zROZH1&@zzCU|V;oc)m&X_M+Fjdc>i!j@PbBC`)h}AQ(q1Wz&*9*|fQqng#g0-E&sL zU48TH(QUT)mH=k|TA(9;o_~HYeEBPGT$2_>LLTfbzcYKRT&Va;gshDdlgKMRbHXMl zl#lW-GE?Bm8lL3=3+J@0(I!ugBS(XK5GOum6R546YsCI2DY6fE`{DjTz}N^{ec!zXP9oVd)b~e|+huvLo5Kyd%V58713=Ki$dT zCM7RP3iIupn3BiYeG;nKW8Th=>)2pS+M?Hl+0;?yRlWNmy5s5RN}F+bPAUoqdn`k( z@lOeU2YZOdD|H)YUkUth-uds8tb%)VDyJl{EW974_FC=^_2-$O+t7I%A31%f3z zxjr16-s!Dp(R$02b*U<#2fO&G$CLQH!?M}YIHI8TPf(f26uq2Y>2lad++;5XoS`+X zTv8k_0G`xdvX4hsxrLGxCvpgEu+bMemiR|JD!V_pbGw{k#zMdnqS#}e-JG(yxWIJ% zJM%<5t&+V+m|WC~J*@O-VnwW)E|lFA?E+z&>UrQIHh0<(6W;;=d%KDJN#fAXU8k$L z;$)}ryI1r^9sCaQex3r67%XKdPVj5$*ZxQO4DVDInz&rsT_MZ^#}-XdF?%o63kvL) z3pe?q)npUY*{emzZcCpddTsO+HYH-z?cLhbFERAXB+qq=rEbT_Vr8Fyb}1IK0D&!$ z8RYV_$y?Izi6`cI7?Fo*wN3T$qFMa2lJs)hFr zPh+Abw!rbtaH`B6&Um~lq^|13WibUjwkks^=tPR)Q>7Fe$^f?PdCl<Aq{<9@@9Rxb#1X=-g#b{r*lChfq;?>13TvS_IgopZPWgWQfMt&y%(xO)6}v zvi;iaKI%8&?&`U8N%(FHk^)lj?dE1N<-FSB(XkF`>GgQR&0EHj_b;Yd{K!mtr7s#h zfczAP0l@Fts|N?nOM;8Ko1bOa#}3u^g58V%kB>+~?IO1I$FlU?kz-kET%uIcszxjM z`7FxuvJ(JEWko8FGG0=!e8sGa;nc+9jcqjBHVcjk&K{Ze-<>5NkDq+jm9AeWSI5h1 zkVTPjP|MMk0y_YWkc~JeoT6{aMkG7-v*q!QUbTtuxeFGE^OcY*;XFP&z<|HuxC$-R zUOKJf!I%qsaIo}@*!a(jjlX&6GfRKDSx0S!OFUZ6hsCO2E=6$zHSHT~PsrMcowV$* ztdgAes~^;Lp`uvIfE&H?2EK`Cbp^t;r1Aq1?y&QwXFKSuNKV+dm|;7q&OW)wT|N8C z!(%Rqgl%<{7ID#6XpPbkM$}Mvxd))4d?ASOdQWaBDx031M$N+c1wYNTw6@nZEr5eC zt@Y)ZD0ELN1Dk|U9SE#}Mf$zF<3x#MLfEFiURt;R{}sLc8XncBRMY%fImyYVp`ZhI2+wk7ie{x!5f?}i`h^c{)d*N% zckSzz{(yENarmH%J0;JeW0nZ;f<1f;O0QI$79e>^Leyo7`EO9o_@B%$|AUr}MVo}L{B6hO$V$ze3ZFKmkC-)+%pkT<&t=$xr*VSa&Y)LdM z3P*6Ov9t5c+9mfS_lo8kB+a7z7TAx&IDJk%;)cg+A!z@ zNs@WxY1CngBia*Jk4e2zQnO?=hF`FhAylMTpf$G2tY+HoT#1WF1j=An^}J($*)P8R z%F%4}z0>Im%-H0IotW`-$2L3uSMkov)Tw_;m3r5=xRdEEv7@Ci7ORvFj$#ReT+Z)q zfLUqtE?OyM7E7V9*``Z!QrD{`Y}Hu-c(8%$57Orv(}mk`s7tgwtP5FGN5{M8hkxqY z&Dd*nCR+z4sj@@dQc}cjz>_Nn389#;IbA_XyI2vZHQ(CWj>)D}Yq;F90<5mxWWw$~ zd`$Jg{_a9`20Ug3RT4H~LJZzg(2MF}9`Z75w)!AOj*0m)^5T$J=e30x%Ij9~CZ|c8 zwE}Xl-@uFfHp~)c?)L(dd0-sv)~>& z4it+;+^Bq)0L@2ConKNOraL>dP?Xd$!OEx~%L2KgT}B)NzVXK(!o%b#50~a*A^&#i zugNC(xJ>2$t~3jRmmVl8(-zG0aqO*93Dp$7CZ@3d8F?}3QMH6i2cm|!ktHEa;cSr+ zIKq*HPVn1^8$U(J2CH>6eyCc#9--Qqg}+{ctDU%G9LD=+-wFRF0V}8&vPddaN$kF4056 zbi(PYz3VsQaa=#;m55<+=H{#GD=0W$Ile&=%~zdzZBZHfJSse);#-KFS4R%h!(1zA|xBIw0pDGL#Q$kqFridM~^gTkE*G6>eLbn z=l8*II3s~q*DC)#3MmoRsGqz4k%0Jx9eKYDkvtzO(!=_B?(7fIxEs=o`n?==-G2OzwpQz%;{wJB*mL-fWMn57Y#=7as-yRh8;!HNW2Het{)xTxTl zNlDl^*1>o(S-&bBlY{UW*Ran;A+A&+)&L)cID_TQ!3(0fX^~<#oBc@qGer0o7{H{u zWP=WqGVGhhy{uNIp8JZ7c0TGzES(}%XmNTJ?>6b5E7qUw} z9Gh$RPuQJrIv_WDtAciJtE;`k?=tHfA z!fPdf@;E+)EpdsBMF=1to0I_8UWrgRy-vF?7Kc|;p+F00 zEP|e*8eXp73VJ3p$>IhA2c&@t6FnRIgP+iaTSx;~@U+n-sqolH;e?hpq?UvgJ!s>~ zqbJE9@{6O&cFA0NcE?UKCUieyxsoQ!AISMwq0}Gl)U(8MunN3S1&^rx{u9{t=u)ieJeh|0eY z=JW@be!R3%OG9kz5o+O&;=IOi(NtsrW(bpXwn(@mz7AvMVPbb22PLeee^@fk3*1mV zl`9Z14?G*s%4KnkTY3$DJdGA&8;4^%8@Nk8f7|gjfKb}6r2v^jGVNcx5ufG?CpLO# zHa_5nSe~Y{`)4<^QAZ;VJ+fLMHYb3_UQE9?$uRxFds0xr_28L8098{l)X<=iCwtx6 zdN(%vRI3#E`HUxw8y+9tHBT=keE1p!~xIHnOSJosh%#}5 z;p8OxSOO=lHXHF%R`h82*Gqqet@)eep8igL%3mwl@+^e0l6p(3Qxg6q4U)KX3HlYf zc$O+uo4@%g<&U6J_&^_&0wM~VD#qZ{pmF%-ybMXyYz)&nr7Fci*XFNwA;9J$;jJd- zLjPtH)p>a0L3rQ-ZHz(k0WPEQ)7b~8AOs*@s_mSWoKB3QJk@zL!IwCQ;KJ~OZeIio z4Kp=Rn|zkBJ9FNhSohC$NYS^Z9?`quP*5BU(%%M;=jVj%jRf4C?Xv!?$BEkwFj1XB|ELv~M8YoKVu`;p|r8mC6yO+XNS+MxB8Q z=}Lt5R8*3-`q;#E7AqPsE3l(+vj?_5W)irxk3qlXzHWZ**To9cNBWCdEI-xZAU1Fk zrb=%xTwz-s%M>IPx}sUfGLaF&2{@-b-7rN&N@U0RUdJU}!cI=CONC={M6BSZbfP>W zI`UI!$V(DrJ0^=JykM65u8`MG0E6ek*jl*bD=c4?Mq3B&JP~Z`z-u+hrHswCJh%(P z3RUA0SYoJQoK%#z&(i4V<+f*tZ~8%5mB_M14GHnA2_$eliF}2bPBwqjfgecz1|onP zmEOr4f+YLUe9!b)N%olEl2sTk6C~>OzdQ1QeWH9t_O6TsPdZe8|7 zpg+K`Vc7x`zS|^spD}p&$doe2Oa0ptm6sV9$ zT|Y*IeFWo5W@O;*?46Y2NQCF&Rhcec(x9uqPAS>*1k2jS+rTH0L)FzH)<9?h8>p@p zLdO}p6MJ!IXKN$#3j23L2xc!4KRo(4&I7$k10yOHYj3CTPaKorw(xH9LZvNX%Cw>k z0MCFP&DM6|vyx7d;0~z9DAeQftuyy!{S1dXnX6E6Rw|4Pu1!XQIa#cU!-M73Rhf?Q z72&CKW3m?8_~>eU)-AQQ|3bX+^N}UmAxx^^&j5C_;S})Ef1$nnz&v3{?j_bw7FHv)rTX%auJHMgc ziFJN>@5&rT86!d8PaPeTPa8`Uq1l7WD^I2#0Z+35_qJmi&L!|D^oo?_W+Y*CK40~0x z##ZF|a%E{X0V++j93{zAUU4|mY_FueqzhX_6Bql$g)qfresaP|@_p2(EzTkvELXDP zjy{6>C9=X`3{|hX+r+4Tc4=ej4Qe~TX6c)jeymjzhMY0l9unG|14c%;LNoLz{P090 zF(n>WsI3`%p?uXb;R=UVCxnR9NauhNbFW-ukTftp2Z~nHGFx9$H}R$xF%jXUS3YT zlJw`K?|zgTT$ypeh<-lAhPsOXOI^j*()Ege)$CY{->kQBw~w2uPbofP#gxwxh>-nU z5Op+vWeqehqcI1WfsIOdc!`2dgxu3{F^Pff%SPpr1sxVvj8(?Qg}^D^a;I?F{j={t zmk`(fOna=JhI(0(n1sEj_x5!zq6eWGENjN1y?^uOVDQAFm|xW>*KwqbEW@X0^cYq; zI8po0CFeV&rxUCZiBFUFMlesF+1{T1>^@c~x}p{l&EM&_l~sv_?%Z3J5xd&gj$=4_ z*~|OG=bs;bS#}-jk9M|QJUwbM|76zRJdmeXRZ+8vf-;tcSRCqCm?l<$RCA>~nc~J* zFx)ix{Nf?4R}OXLlxy(vsx=lH9cTJjx*g>3!S4@F z3GYv=vkHT?4^l;XWqZ#}fSRcZUS;z+<*x>Jh+NL*tDJHoK`f5U2rZI}G8rfO>DNL( zG2zi6j);5@R!I&?b{I@oK#M*L15?(43Z`G>Fq9wn$nYSN_GvtY-hE#!{rve14A`yh z6b73K4xe71FV(5{TI*#>4cDyEf#^!`c@RYJTnmisDqVuIF~SLOz~zqVcDfMWuTbN z7+6+#g;j>ny{tdH|BahMSssB{upwFX1phdR=i?a`g&P>1l7SJT@dZDn1IEkv8_7Tv zqpV4Hdu%h89u6K4(+sZNun035;ybI4V`tfp!d7q2oJ=OFYFM&4br-+HF8_P_GJZne z_&-rQ8j(sdQjr%Dv*rR>VHCa;sh7TcqKsBu;Ne0PM+i5|t|MzF&(UjK9@p(?;NUb| zuZs+%hXnO`-TxuVHgwPfkO4*7$mu^~Gf-sFU0P8pL*2F$(INnyWGsqwE=B}jS0x%H zTX^fyHBmjLxX@)_vi|1jO>kJ`p!M$EzC~f`fsw;wH;u=<|8Y6-gON(Qoo&0Lz#+XG zm1t?R((8Se;cVBk^R>#M$DKB3tqWXwj%d>OYLW-zV>7+4UUiPP+8KK@H^>1~@%vL= zS$N=J?N0hCnGf&lrGL+CMLN--cWzTVB(?3pCzgJ+%4~V{`f1WXcQ(aG_LOu2@Z3M+ zPcvYC@MNchcj@3?rh}JFMfo^8tYmlSd{Wj^gIHn-qp`-ile6rsXw(OL+PY_}AwiMh zcG+F^I&W92z-;bnqC$mdM6oTH&6yKVx@M0O{evAf-QQR!TR5EI$HB!h51^bTw0+GF3qdEvnUvJ8-LfC6V$>3g zMBUkQ_7?T5#vY+l&WKB<)3w!|&Drz`yb&rzS0^}}zQkhDDam7US8YyaLQvYm0c8DU zZO$V@`|0q2@m(vIMa}ti%e#f4;TD?-Oh08;WLPR*?^8#hSF=UjLP1 z8>8KW;CZm1p+>ivrJ_#nxv*5_>Ia_56ce4-`+@{gi2NWBn zRA+Rp)8h-dW53QWf0Id-KWy*+Z=JVRn+{L3-5+`sIXVfOcp)8JQZ-EBr%25OYd?19 zSx6`Y3={2Xd}On;?ubZuXPF#4m4kL7$y%4+ad@nk`nD7Dmw-b{t z57l_6o-vkRxq{7hFI|sk&VKyBK*$(MOkE-(8#EA`F;O9dwe*J>p1}1c|&opm| zbA;R27!O`^aD}@jO*c{_jIpklNEC0PLzut?VgXba58T3ncfsf3e=PGfM?~;MHTxe7 z$b-)qVbY!gszvJL?tK20S#_FSNp0MkG2v#qlgbz#7Jfv85pF8`p*!)>bU|vQYuLS*k;vPcvSFibm zl8Js55$-)2uS!Z1^C?MhaQgYHSxgvB(SbTYWYQ$&31%4^qrp7A@(|)>A-TEdnZjUy zXY3GXVx2|U|C?@cejnFrm?_5~1Z2Ri?{nft%mnTio=(Vl^bNynDK8qQc`pkl*i(Ob zAAsRKWhewj%8dGpgBM+l$*J023*23tI@D|tDTirBva-6f9}|-ho$q|jWM<-IP@VX0 zoBF2z8ohBWD*a*eM}GJrS#g=h-ARD#+-&he_0X)Np?A6s+nMMW`+L{&H;T{=B?8(x zs3F%a5uvj6!WU)RpI`V9u{KIglv&V%jJ4&@ekKT;FE7bI!CXx{m~9wb@|r30fmD3; z(dKsS{hj@zD~XU?zs}#gc{4tqo~Bsm$%*AwsAs`Q< z&oX$6t*!XEjon&hb@g79#$?FZCcI`tl$ET`fg#iuda9_9v6Yn-oBnr!bk$m+OIPS6}4=v z9UdwG2^c%s&s2nQQcGYmXP^7WOaF(6-dpUzZ>g$|Kf3gj-9D^+)%nXW3F$SPJ&SIw z%PcRTWSnqb6VY7`X~@EMD2kl#wN2M5KGAu1Z$jYvd_1|(01g+-3#B_HLyni&_b9P6 zikXBDIEFrPjk=_h?tLowmMY@Z&1MHq`^Q?=BBnxHZp=^}pB({fwNgNgTd=Rm_~uO& zT^5)BYu$p7j5ceOlhm70fBGt;EaZbYem+0G4j|RfS!OWu%-a^a8e{|! zslT~JylKP;9$;_a2EFzN?+ZL)_1O@_AZ5bkVo~@{b`vHlHG`P;AG?DF56CWfz>;IX z*`@4`0LuK8(VLOc%nfX2rlqD)0#C!?fo_^)_R6ZLbws_dNM@X!xpe>5$?$7e+)L@E z&mIYULss|}kGLe0!HI)$cp-U4|4-Fizrc_CYWUnA>#~ikbZxq>C^NL9O;er+CFRl8 zmdp_s8!@{v4KNYU?#(CB`tnlS{&u;XQqUfPCk9+cx3q%p(1_|He!~+mS}|lB$>RC} zXkEC~fJP^Htmn?Y;rjLM5C!CPdc)UOf4RReSpp zi)?N}+`@kdSz*R2f9;QZNTWVtM?wb`&#tY7j-?lJpm+ThYJ?;a2HF`5(udl@@Y$!A z;@*ds4rEOIP_!-*idTHM$m)`TfA|Ys&-fyIbMHGQbE|@8OK^k>;@Y3zzxN(i*qDQ5 z{ez=tiLRYapjI5M8#hm4$|%C84^#t=WFk8xXiC5LnvE?RJsnh(@Q31%R&JBG#7Cmr zZF?SkjH*gaevkcx#yqnaZj7A-aQgFuy(<~DKq05&X|j~0u=V?&#CuBc_@as8C%tW= z!kb*t&dT6gTp81jX+{TlLQ;U|V%KAv*Ah0N(;z+BAQV0{Fa^m;_y~7?>R_bFKPjMv zhitdZ>=>Go8Pp%$b!FKm?OJf7#qN`}SfA&3@W)vVs*h?Ped|NwyN`X#q zGp95#ASz?FMJiZAY-51-VuOkgtS;6e2^|YrZM&ZnfXvd8nMCRZnG!7C)6{Rd&o?$+ z01eaTk+aHoj0~($dz?ds{~E#Ru$huHuxvoK41mC;e?G;eK;e`Vjbb#TO!yDQX2(e& zj@8K6(C}JG|Mpymy7+nFlf(TRH%I9@kJU`&k~&738DSoQHQIgs0GG?5HBl~&&3&b} zh9}boHrSs(+vaS!4!rlV^g6IpJO~B4vR1w#4$;=(gGP#{jBs?de8ut7E*|+6wJQhe zKtH0A@F!bNVrRFZ9}yAVeTFDW`zmr(dPs#es~0cp0z`X`FC4h}gcr08 za}>9nO~yMwTh}_TFfM`A`3TJ@38%E{|NESB`{HVs7(yVz-?OzvT-%-LlOio|KbAso z_RQ7>P#Aa27m$}h@5Q5|B$o$(ks?!w>OweO>R^9OVAn!!WayygHZcY*wHnk$@h{X= z5*PJ!Gah_Lha)7XJj?*>5g!u~1U6)A2T8yzdsU7W^FsZLBzASBY>VF0xN@)|i#?4j z8T_pK>Fgp0IGaG-Et`QmCgPmfAI7?3%g%>Sw1jZ`M0t=|Y*fSG6Ar0+<5=+MG z=e==4yfPU_W7Rc@H+r8EEd_#OM546kev-6`n38;rVOBQ`gLQs^3m;l3h8d4;gkdI2 zS3dXu>f`bk`3sM!JpB|K^Uty{66n~4pi9Go*|7^egPQudWhe~8m;CMkR{c+0hGNj+3qVxh-aB+lVFfne8# z%lPkfkG>HmoAFC_%(FZYdmxZp&8Uj z^>$;8RtizTgKO4OK}6AJ`I|K+z zJ-@NJ5a1_6bYUc-d=Pya&>>YG3#C}D$^0m6Wcnm+Ne9i7-UMiLHoeIb|gS7lIWxQsbiXd(rKQ&AF0xm%&U|1+Jp}n z3#gDlaWNvX(^lyql-?JomnTdF@axS>ooS-m1MvoUo?lM?Q)uReY5usQ@Y!%g(j1L_8UATn&n9Uw}Ji~DU=eTU| ziN9hJ``74q`eS&f>KO_&Xbcg9^EQ*UBW|S@UrLbhMky8o2LpxQQuo}tlQav1ksE`T zE#rSbkqy|XNhkpfq;6vEA>8U=i4wNMk*@!cFuC`~mTFM685`Mt$VS@pK(k+MYP(J} zkJiB+5f!A#Drc2pX^re>d*|^docH)s))#fI?4+e)Y+xGPw1zJ!>%@M;Sng2jrqZCR z8RNlzFR3H4h;|Twjca1~kA}EX3}P0^J6vCdBr~NdL(!ziBm;1JChMERQMgTrf3W|k zqqF6Shd=5Sxs*zK2LBEDiG#6W53dQA{(mxjph_ z)cUNhY;Q2%NTLku{Hn3|SBVH1)RzA3|H4e_$KZy)SzpHQM`>Fzs=ryKT!rmmLLG&& z+$tmxtVxXvB83}5#q8Y#C<0!bTqvHdyq4Z*2F>S17mJD^XU;u;&P9TL)%cyyrut0@ zQi#;Qetq%e)AK|a7=@&B{v2Bo)zm=}Gy`lel zsUndLKcYJ_zUbgMN@4^a9_V3W6kEUdRcKh<*k?qDiL?Tjd+Wdo1-Cto{Y553GBbMm zWu!xl()kV9txc6}mMvhle5S5fgKuj5!;q7Wxtt_X?*S8BPR2y=0pRtD8{eJ2KL7rRNE z)}RU&pxScr9s= zY=nU^$HosM(vuGKZp0+vIee2}<3ErL;uVaIt;Hc$^2(<{o@ktzI@bwzcD~R)a(tU` zcj3WK`gsByTx%O<*58YLF+2#>gB3{}inOjqQ225pMc6&*36`XhPuayLsjp_-CeXrO zcFm9LVNJvLw%LK(aD`u$KR#c&p-$x^g)RL=xB`Tytu2xhq)m1<^0!DMMIFMG-`U0} z61vLM?-oVRZkHSml?w_QmuSry1vA9UxZowc=C|gp28I%3Xm^WtI4^d1h#U9?XYFK+ zT3G~1Ke&JPmxJBd*hqD~8stvo$oQR<91Xv`Y-{K*%S{hkh9T8S4oi)sz0FAAQXwiD z;0)4xx}l?VFosQiy6kUz{Ye$FsKm{ieK7QlYpNH5dpa*k14fPWBFEGC5ju3dGRkK(AopDwNFPOSRg@GFuKtlR)VIpo>J>R$l`%z0N6jbD8o{Agfmhp@~g6VX^#ZzOgU1y8P_m zJHw>2aUzZBA(YVoxJZvfE!&H0v8gXj6+8@8IY?)rk{V`=?w`L z-1fD;oC=|O1;2=sUea26uBW@qnh|kqWg@kwQ&SxMY(MmVf;XtpO*o$$9y{k7nPb`L z_=f##!L7Ta6HtDM4oE(E@tT28Y0$~c z7*7<$JKMOy%~kGjSRYI4I6U}-$BO-*&F#-r9N}MyBm6BrEuPU2@JmSkkEuqxn5%0U zOCdMQy+Jl1d9#!4v7()KY{t$suUE1Nd{Xp2vCHX<3+&(|8yhnu7_4C!%GXY>tv|ku z2=9blLg)HCoi(C(D$8%&Y`x;Vka_nmhWi84g|-w%YH#qN5Nx?ttneW@7WT>H@pY4M zp#S@uNf8otk@-1zK@4vUFb4Wh-f6GU5lmXkMPr+6&NcK0!Fq2gTdd0cz)OLVgB>ea zu5doByt=B#buc2nSind7lj;3wK9A1*GmDUyZMK6}zccb8Lhe4dwRZ+4bu|DP$id znz7Jj+uM4DO|N{A_IEFOMWcj<9d4-m_?PNFo-()P1A3ZNPA3J80!bgqkNlCWbEtk6 z+IKx@Y}RI6M{b7_p_iY40S#0>zgwr5f#-l+Dngr#zMy{gxYNq&zCf5SMSo{>m)qyu z=z#lYpN+FCM-EMSsA|BDLmv*y=EljjH0LzDMc+f2KK;e!reRiAS2DH1j@g$%R$ts+ z*XwW)@!6BwuN4Zd_}!Yvqo;kZ#5C1{!F7@-w7q?J)RP^rZ_18YcxnZDz2973e=@OP zK^ejot3Y8AnO|uF8p~7b0kl^?73LcZ4^(YYEHUq|9z&bPvPh;{VgPvp5{q64^P2lj zws@%ORwzDkz0XN9EbqqkkV_($q89@pjV zg{AlKq<(1Wvz?Sio3@L~UruZ{(mAyB(?n>OZNdi&mS;^%hmXa8jjZW=az|m7z z_CTd`Gh3#89fJD9CpNZ^>>itqiZmZ2X+AN-9|OFRgsVLDk5?A9#mu+6e(h=$&*r+ZUyZWZ z#iD*-YL1Br2D{%)as_jeqEuaPLlt%>2jQebz%R}z%2I2HZK`8Pr<7bzHo89IU4fK*FX4mXM z)cf~_l)cK~opW8B73SPFFg^9%K8lzJd97&>0oVWTgn^>yT|#^pcSMbMY23a2J^Ay_ z(ZJmVSr_~n!a+GrH4`DJma;iqgjj$&CYh>3=m5rtswYe3DmgH zGtb~u87JG+e;Snf(mEb}Dn{pATkaeEDXtx@?yP^IoW>iELjWv>Mxf5fsKEjRSEig+3`OcnPBJI-EE{6{wTXV z+Y)8VFfYysOO$l*NfYsnm$H-dQGOB*Zu+={JZ|((7ivl~ik#uGv zwdA^28LCz7hOE?(&h|L>Q4&{?vZHy-bPV3BD716(v-I+ADj3pi&@ zj`%m|LHXzPwulE9fg|@9x8$e7zH#_Eb0FmN)3Hiv0H5WQz3Ov@*)G_~ab;2ZykrQr z$(6nPl1ziTUYD#`I;UfyZcaiRnfl$t0ulMaKHe$et2qf8%e!~XXYM>fe2r`i)@2u%-2;~hVjK8TD zmt(Ym;voZahgQb#5X8wdxr@31K(yZFfF70L#FR$wmAA~+pQnp#q$Ms|PbSr1zP-8q zb$H)ZiLwMJFpe&FD&3Q|Y6`HBgp;JaMwh9J=SU7l#yrJs)Z)-^G=fQ^Ey6V26Ov#U zu*}iBA6`te36tznv7|QV{O6WdbfJ9>bm^=0plw~HOJ_wxm1R-_A*>L^)btrn$d6c4 z*^k|UA!>edT+@GH!uxnHmq6YwsnE5a>Q#G0hG%isL$!pL;w1vDamd4_=DqI<=z>f( z49))+%!;Te3k;*-q^oFUb&qi{ta_aQJ|@f+h9#XF7Cs4|8=j8;e2wHTDf|B{~X0W;}RyR#a|uV zkfKO{ES67hNH!q5mbW%{c8E7nv3klqMdR?t!G3&)U_-xLF`qTP!oQS$`6hm2dYKk_ zU&1`3L?qj-2pP@L#6oK;Vde9~k;uwBlzady(IDrDes)UA*T<16KFft%$9o;o3y%!@ zFfWsK;yw?+PT9o<|NY(<33T{v>b^1 zVBDH{mr@s|gaViqMW2ckp$B{se90Rzig}!=6r;66{|gxm$15L?YG8S)P8ww<9(PHh ztG}lQm^x#)eSPXeo8(j}n4Pt=oeX+kMlejUYr@H@m6~b?wfvEZ{+x^D7Sl=Z@t<3| zW5&S$!0u>xQ7QcF+S>St69z%RxCbFuh+FKE7o9k$7sWo~$9iWmC(?N&T$7XUCz-7_ zcX$Go5j;RpiT(@zabV`OPQr)}$B)Y$Ego^_;*juR;f8KQEIbtLIs3ta^_c;w`w6NV z1&+|YTc@nENL&&Tx-Y=b)Zf`+A%f6Eyt#O|1Hq$SlhK<*>?cyL6x29jqQGtyHZv|H zN!xzd!9J0R8k_S)au`#P((;>@QQ6t8$Af-YJ z8zXjl&eqa=J7E!V(DIE1P~0ZYt^tU!FX~}&?Kmig*f{{}G->Qc|4ntH7=Ee($kRw(Vi9SE;`9;kLb7mZO*hk3363Cv^1&_?ms)_}t{l5<<>szw- zhua&QTPtykR|1A?GBXH@U7SSxVEuAL_ov;Vg6WwgA!#qi}|x@KgY62;9Vy<$(G zu(=5S2XMsX4LB8BQBg4dkT)Qs&YdZR6kQ5t>Ap??;??oDQehdu7op}m@I?GWJq4D6 zErYd)s3hDaRxUX~2*TJ7QkIz+4I_xhydcY#Vo1@3FPL3J9AZ(?E z!9|yspPcA4Yr^UB{lV`}JPc+Hu%7DE`Ahn*{ayCz`O<66JN+7cUH_ZbWxG<^n=isE zz7#bVYAKx1RYoEtU zq4FW!gpxmBY%;TVYXPhib9LvG25LiSeAadin9Bmz1#f1k? zq@|xqm^AX4PM>>T=F;PjVG5aRBdL~2ZR_9BJ(lYn+lCrr_+r9?o#?8?NKqw&bUNGJ z%^d9%XwKaf;FonddhgUQK_a#<&49gfM8^C=^|omC$|rC|SNq%yilR>^I%0n`;n4w; z+wn!jHi`{UE0)b!0VOtj^iJ9dv}~mYbEY2#T3?!;?P`%M#TiX$VHv)0K(z41L;Mhi ziiOg-E~&z#q!O%l?5FmwFvtorIk}-ROj>2fGO=UzRm`a1loU%WpyWa#YykE7)f-iWv#D`9#07qRe2jcY2Vjx@j3^o3x;1;d{_w-m zjX@d}$8ViKgMk?rGNz>HVr|Thp=4aes~8*~4}`X$b&L~t8ntD3%`gL{=R(3n`FfMABuVuA)3p9B3b?jfoF@-Ej@%9 zV5*=)iGdcQKx-63nv31<-1s8x=fb=7ap;}Hu*^gZBojd6nnak83hn03OCjdv1)bAe z*}B{=9uW0-?(Dyo1`Iakz}flz4EI5J1iQ1EwwA0;3mQ5aNhIcFZRIKmJ6cT!;@SH4 zA&)K!sK0-OyiGKsZyo#nC(~nYE|a6*`*@s`OvjdtP;rl#w^osKu=&%fPLP5*QC*F~ zl8jCsbg%auXI1|aG{{4d={D|Qe_yx}#kMfn@Qa)_NvH$D0`COVaYhO82>;1@*jA&B z6_P$RZcjZWpk-{{D_*X{fqO`wV37tzbHc&CE8^(!Nt!P%Ces@?y6}g%{%pRpNunj% zJ-hN@{Q%h|tS}NrKFW@KlwZ+%|8c$dzh2dJqF!-9;(%DJbdJl`D9)15;fB-%(QDwbSZmCJBze##sm8Yrl2b|P#kB201fWm zyfYqMy9W9gZ4wHj-Xq9f`w^s&RCUxwlYkhk7XV1g+>#hAkwtFX@^HC4u~K0?MtuY8Kp4MM&-D~4v0nxmgRyjGrN;+2vGLi&EldgY__rgB-Q1#-Thz^(kHgWH&-{h5qB)!{jXh2*P+1d8+PUzn*ZPOTs{p; z|8v#9JKic%pH*BkRy}K zV~fT9LuZ1TIhF?3vCsScZ<0~>}2cOB<5nYtV(pyVb z{35L5=a+t)eu}?KUi4pY9!lX2kr2_{5#OOdc^=u}=OVGK#7NnT4#-b)8YuNn8k7dm zD)qTbfq|p4+e*5hi4GV;G2Vyls`hM5c$|4^B7@{0y;Y9vQARa zp-qA;H`vC{xmrtR4j-ojaZZEB1dxs47fwhbMdtGoGNXBBvW*v&mn)vK!UY~qwvB8} z%@zfRftXF{?U0&5B8Sz=aS@y$%zVJv9j(0!Tgv{I8Z*|#Ve-6(fXNX?X(^fqAb@1= zFk0qRixk({V;NeWopSUw5?!YZ&k33HFUXvqHSgz&9E-O=(0_92FW?_35<7Nzwm8ly zyHk_|x#B?N*RW9j&Jke-Z#B2KGAN4O5ZR9dio*O3DHUPFPLPQQwjdow^V5zBKNTNL z5(z44)-L1adCbs@d*<*5`YuevZI(sb`8lfdxhxJ$t<5`vk_*qo zu1p3@x^kwI1Huo7J3HIEz0_~%7fcr5P_n@sni2Jnlq;AQ&c=SkkNu}Gd_pGauO}OV z8--`b{exXQKzUYgafHbbH+sjBu_!;`Hk$a6M2v~B%kCrF37l;2Y;El(S!Z_rnif0} zXgF*;5d{XA$0>oN8B+qj2GOfBGvr`8Ut8VZbr5Md8t;6_eW7v5$63%%zs@FEEInd| z?iaF4zYniO+BDfRZj`pw^CNGyW0eRO2u7Iaxq{A%De_xO&s*(9Yk=OEuB^?6tjJ{s4+Cb7pPuUJoZ zo1%DHC!_h+*B-BW7`4#~v24XeT%Khzh?H{h247I_1dxFd!F9~Qo?%>GSzRMQ`Py8_ zer+wY+D3!JBV(5q@G5h)jR1IC8L@WsSk^@{wki>Tacc6K>`V}^elYQsc$U`?E@=TN z%AoN8Y5+J7&Bvx_d|31Ka8JzTAZ006OAl$BP8hr!ukyX)V0mm&w*+3mwSZcrmO{K( z8@?C-_sSt&>>ck-C#N!!+-`dCD1ECBLq(mlxpeia7~SIPG0#OviEstBVJN?i$GcxO zGsx4!mVTO&G5?N?S;jM;(3LauB`O6AW1QU&;X|}&q>Bo`i^$vq*k1!YUgFT#5_DyqZy9$twGr}eA;UZz;^PlZaMB0hk z8@+wSttqxBIzcaVJ zVk%C5B|R1Al7ggEBmOvnvZN8_J{%h^jsC3tlPjsy#qiUkqsfB*!=@R%?zK7Q#TUl& zW4X73*S^-aj~w)sx3HLGoW*L8vF1V5W9(d$lY9Q zP1J~rykuI%;EjpBmP2b>W^=+jM{6m*E{AqKJtfT3Jn934fbmiz~275Jg(GX77D{+wKqI{LmZ)0^9}CYIlZ}j?fA|ePdvWm zw6IAMI~XfmsQ2ir9pvB9?7;pX^JSB#{a0y? zxAJWMR2p7Q{|s1llv@`y_lt4H5 z52O&?Kl{@w${75aaD#PDlqJU`1v-nXE!4+mh8d^hg*96?UJm3u*tMOjGzJ#V(B%%K z=C|MfO)E$hbD}!?FN|?~_G(5ny9g>?jUvB9Vt_Pp>1zyf#XIWCRONX@m?x)+ z8|QcFruj{?G2R(1DZ7-!0Bd1N05J~qpyN;CHBxhT*B9Z+VP0Ygj>anXiDFeLa=3jl zTA_Ch-3dq*DLK(THcXj6EEy&}bv>S#GtM-VVn?7|=RDEC%h#??B(pECtA#0r6pg(1 zwR)}aHXljP*gZKTzf2$9)iL%%OW&$X&`)1R0dYd(9`U@6BT(0mUjQfJgZz@Cim@VS zoYS~0@A@HDaFdgAaQV>DZmBWoTGZD~PMpLDxtA*tiGt0&@n!WZT5JaPX_2e2Q_=zx&jv|7`M;(uK0O ze$j;z)tJ<4D;)o%8#UusoVoW}3Qy;>6`3ch=e7Hlua4zoj>bLm18=tW9Q5!`=6PZ!?j)*eR`Ars@Tmfp3>{(8~tZ8 zMSiTaenX)q9mt|Gc&Vq`VUjRH^Knb*Gy*rp6BaoSYdE>k*Ul^nhf#PfC=>R|PwZmO z)PFjoG192+T#Vb9xcBe<2mz2FEHxyLRqX&X1#|RooMh=vZd%1Hk&1-GTYorsLdbvAN1i0hfnR&-P;^nzV*&CJfLZwqIOdsB??O=BjGc9JaHa! zkBrfw=w;X~P*FJ2Sww2Tr>eACmceQIQpR;XP&E9I#kxhcL3LYRE1pSGS@K%{E$sEL z@`xW3q5C*o<4X+#|?qLtjo-tISKsH_4shoGc@|9V^G!kG%Kw3?nu?JTyoemc$orFaOt*%6) z_r42*QR*tlNy;JL1aJ)~atTxWwhD_r#BUZV_eb2yHD{(`{3-fyB9?icF2LzI;FpM zV*O+$PO;MMd-7JoeGiIYKHa+T(aFKXZP=O?)W8}tN4L1wk z_$OM3`@){*wI>o;27D2mX!ProVXw5Xr!G9z?O4jvS=rY8LKBuHOw1hc;XQT0!*FCix8O2u4^#4 zBG7=%pT=Cc;^ekw%|0V`@~r*k8Sbu8Up9h!E=?LuWessYlNn(PKuf&jx5FT#MwD7KP3(7 zL%tOz*hTOL)t$Lv)KbEP4kXPQbkm77oK@#yk~+$Hd8UrJ)K*rED7Wyz{j+be_$!tN zWN)j|O~?(a%7(F`!8o(95Drma8#!4Z3A~TPP)V$35n>e`l{j}ZN@;lntj+9rq+G001E5vfNT;;4y^?umclSP1 zoEAOMp(GQAvz|TybZ!2%)cU1*mF3OD_msSsN}|O??wqPBUu^w-U;$nBA`oK39KY(7 zEbG`Q60MS3_aamYqGBEFinO2(K9F9G^mes5nc?Gw@M7wN%{ZM5*Q>{-yjZuHEHs#c zMt>)TpJbKRl`B0h{<-|e|9R;}wOHT3^n(|^cqrEOm}t}sF{5}wMf7U{pb|OB3@Bhf ze9%6|9xeblOMK}fUu|3r64p_u*SIq;&P#|~p86kfoelH=*3_z5`T=_is7{<1_)X0!bxuXni@4E)jRI$!7=5f%xyAvVquTh^}2 z8{@-0R^NU#yGaq0%%hdw+oR|}7|FKf(_&93N3zkF4KYR_K(QO(B9zbI?z3pgE>g!l zc<#qNtQG{;-yDox2~rE7m>Brggsuel1CfwXJ3G{lZ05zu2|n1d^*8r*)-ES#GClmb z*6)*TdwxfK^RKcgo|Fgh`&tF0U4v58c=Ipw$Wl1Z~6JpJAK6K*khFZg^t~=fv+*InVwYd>%RGta<)pt$r`vB@`q8c%eg$Qt(j#QE4@=+If)^YR;fcyV z&8vbR^1IKhder*a<*u?bCtBU!&i2e+?WFk0sr~zqK5)Ws*!s41bguuv>P&o%UjHMN z8%HbZ7ay5K8cGhGsdMt>nb@!`E0#_}c>&_=_n!*LE&I`m^gpEF8#A-e4@lb5Yh>@1b( z{8hxSz3y2h$P3!3plYVzXtJw%!G_fcP1TeP5qH~I+uvud(nOQ-?$_xyG+L#)#po|) zlf9Gf{@oqkbQaY)wj%=%L`G(xA+*1}dA?We2a0~7Wp$6R?LwG35y>Nxv)4oDsO=bL zA)Cu}wtS9lRzdC3ah;u`-6iKS=E6Fuk}dY~7_O1`F0N2Jy=5EMIc|UE5Ulup!JdXQ1|S%fu`>8{ z=}^Jmpoku)Dkw>cp0aoBkbGu7$|h7S=2$c^`+}8##bKa>(ZO!QYe3l=vrB>ST{qtb z@8n&kUzQ&o%w}gN2L~yZkiNXVeeH%O%g*<0jL)2|y7P|SE7CzI4qb!UEOwJY4JoD~ zCyfxtPAr4@`a9iV5#L~{j^$sH|9?yD>{#^dO-moF38_C4ogImb5a_Q1BD$f8Uu)aP z)-S5p5f^W_sc4ZNWx7Y2gyZ(YM+AkF>!%YOxT2EC>MnJUI3&MO?;>1rzccSjdc_Gi z`(GtZ2P#yHG5l~0A4?z4$a=leB2b>p7*bviMwwg5vJg5A6%#*A1a*0~Yy0*F*N)a! z^+HFVDcQ4stabp&rS{Lh%v-?$(EzKsykDf9uPycu*LBL%e#VfsWl+Kma?4mUSJ!>Y zxihKV9w}8VU&%`_UMdmb;f-4;M#6*3)FEBLV<$i-8f^t_6vhu<>09s~u_P7-aKzOd zUmvjA225AIte9|5`>JES`K0p()#qr0DRen{iaOKRVfy8Z1@YAHdK``Ah5s{o;eXFm z?l;o(pM)#^snEEjLiT63FA*ao&6d9{Zh7*`YHL_jk67?i^{?6G&}tF&2$+2Alf*Qt z-%U=wxS~t>sANkR;KXEw-0Oj>w->w3Cx*%NE)_#e`Aarwx}mD=&;Bq2oQ#Ix5#Nf} z=W_)~+5=;L?`ay9`N+_NATB0S=_7E1?yk)x?Lt<>sdWBb8Q_40$^ElCEGh=AhY?9FJB7CdDXZjguc0N;feNRf&s!?|aw+tl%(+y^2S~ zJT^o>H}qjSJ?VcLJ8a!^(jS^6sEW}qVW8={N!+kfp6SsQIT?ErGWaQxT>VG*0&LXm z=p>fs>ut*Gd?CADiV?;z$Nk_6H5tuwbeO0JMPs8M9SS9T^1z#0-!#_^6|?kX@7?*_ zKUwrh7J<*DI0J3l#d&v#b~8=3VqoYMcNBbz#@94%`4F;-It* zt0vVdb=N!@<_oLF)+BohsQ5Omqov)&`=&U0$~mqYIncjuz@%g;xDa4Twv3KaRO`t} zHP?`wa1;CtjTX%A|a#YPs5bd%7_Y6+AO6q!td9<6RhX z0)k-e0fOSg5%%%LWRQY-BK%X$K3@hsMfhu*4K2*LWQtEGUysd8iJ{T^YA3Tc3cIuk zs3)vTLMdn!eNnMZDcT)zZ1um(;N_?!u~@e!(4ryZ$nscw{dciLWqCMu;}KU_-_SkK zQiS_*hwUxUK%Cxq#87*{ffr^#JC$@DM!*$rkyXtNZOddQv60weakW*3GssCZSf}sI znHD*WdrCg`W^C3?m_usizJT`mdPw;9E&UA`C&^THDrT!hj`7Z=p&82{lB9`snn9 zC9h)-JtVf;-pJ#)jB92SXt?>@4-v}gGL_a?+>hjArKL*3O!3;e4i*Pr#3ZeGJSj9f zUS4Eg&Y=Iq^(Qb&5rI-8Q?kxik3{etuIQi-Z0J27UQ6ts^y%M1`k>VShWX%2f-B;6nWG!?7|AmtV;%x*n_*QAn9wnP?wXW|d;k#SlxsOJh@0*$s$`)7* z**W8Ge&f$9o#^%SY8lW!*7`g}{1j0!SZmXCTGWf6d9oLn8Y33-;D*SRVn@zSt#8$^g_pmn&1oPy#=vBfc-w3ej@V5pD#k6R+LE7O7z=lhaF3_=Wrg

0v8#Ip7pxXDzc;KccB#zfT2<*{&oc78)p|;4=_!i3)S!?|fKOQMg3VPlD;6>FfL7mLeG@eN_jST&Bj&vn$ zMI-}M*Kc=AX-%*9lfkHSX6)OsF+;k8;Q8y%) z-uh)u$L4FRYcEPnefpUML7dIH2D^KH%FPMAd2C>%SFVfkr<&nF0odz{!$Z$ZlB7)X zdXN+iXC?v5KdP8B!Gd*u&&KC|(LC3`Z>sN`m)_0m`6Pbm@`liaf9mh67ehkmfmAnS z`Kx`$dG>STgJ!ZKt+0GJh%U*21OSSKuIV0hLYiQQvR?9$w<_@A9)4pA(Krde`=z^X zuCc>cub*7WeVkYElUMdyV1$X|89J*i$|g6wkW8I6j05lK2`*3KDz3{I|KWr(s0akH zUkPnOfrE)L#$z2=VjYmkTH8`hCga+#ww4MN>u%+dVI|EUqRmgr*no%)PEsr>aqT*G zB-OE=TRcJGWV6S8CummIu3R-^X5DZttTA5OWR9hSvPet}+82^t?5f$vcr*gv?@2LQ zPU=shxvN@~tN6yGS`T6D-pBB>JC`(@rxg$i%NwL&SW;0+&Xe0wX#fNt;pq*1&*H?> zN;+7)BIXn}Q7h~VIDId%LD8aBVuhmiwyS(6rjHHhRuPqxnIw)wIFv7=znMomI~$Hq zPt5D}2-o70{Ef%25ur8IGT8HF@EA!*S!GErcfwg)jp%`{i zi^crh(!LtKXYl9OFa4pG3li@MZ%`^oOAEF3@vTI!bjn`r^TvD6-fhDRBFIWf<$Y#Q zFQ#| z#YipYXz%CZGP*|xUqe+I5+`mT2nbKy*H%>do+HpIptM!_41fZw?GEQQ`-jX z&yYi48{pOPQ z(|VZ7yCFW!-`Lc7czu6QcDMF3lef)5jOjd_!KI_6Lw)OhLEpNCD$Go-`R^}0^0F?H zy?)LME7Ue*D-c(Nzak?D$&)_wexsuo9Z(;aE8STcb2GU&uEXD8ZIm2N~>x+|-C9A63_2Eb5n53ph zqDtywqrz))#EQ+vdAhO5fnkU&r_XbLCDB&0A#e>VC5)jRiR^Sunubpm)rWY55eVFg zGcvofm!uQn92-;Sk7=TV)Mns5ctgit+eH4lGufv^U~q57l3W?KsISyCVbGe!Q~5?rNU`!lidc*lne;%pL}qy)v-N3jDXM;0rTD^mp6 zMsEZZ9U9>xnZwxELt|yOH#dMeoSHTETbk1dImXYB9zJ?Qg?2i8Cc*4TXp)BcL+_8o z;-SQ}h-|bKjYRpx_U>7%1RXgzN%Q4+`mD{gdy)@J0!_iiF@J{7fMj-dH0t*#$j!8B7XDAH|BY!?jRHawat*=MGj%Nm4c3Ze0UjGf8h z5ja{%XF7$^7~|@S1l)MK^UcPb`JVmM+fA!h|DTGV-Z5qJ6{Z@$A12#PyKT}RMH@Yn z%M%HFa*9l+XQ#T2XNNZEBf`0|GsylBzpU2~HY9yWT->Kfq7{mJ=$8C!6AFI3OI~RE z;nUqZ>ykT~OZ|W=@)*v@Rq%vs&3~WL1w*MT`+wO0sotBTLR^~S zr6}U#@}1KX*e^&jkm9~Ft68@+5xt91HfNgH$4L3gFv@6rb_OxWM9I<7@@1M}kY)1lh5c9xH>U_Z@N?eEL~VyGlq3<}(lP@Cm4^7j36Qx!O{|R8uii0?DQfh9=cQ# z#XlFCrE_N5oh}(j=3qFcw9*CBv^U^=Ea3KxUhZIs2SFcqE6tS$D_Me9%TU!b#%2D} z>V~TBKpZU07t=B)jnfoMp8GuJr38L_ZJW@KZ zhH^43goSZsLWatnP<@$s*#Bvhw!l6T|H6nIVg5LAq9M}cu{+YbXrf6p$HwZx-gITa z3o>&vLPS?g1Kd6Ic<}y3l+*6cikXS2(eQ}&;dpZ!up`W$R#t=2`{H#?l9$q-@9apD z#@$ocM@EM(Ct#lcuwAko>OpM0Rp|vulrmg&CW^>pQA?7wwh*~04(yH68UgQZ!i;|n zX8bH!^t~4qdDTY~Ig9OzZ@8*xUArDl{gg&}K;I}bJkV51T%*!c(MuSzsS}=YK4^!8 zmkY2vaZFv1oGSr$+F89}-3llCM+)-dEByzGC+_`uYuR6xcV!ip$p?#@L@=8(LTF7Q zdh8j)*O&Vm3J5RAHdA?>EUQ#EYKgjVOG!C#VfklwrmS>|B(4)#-QAS1TxoY{K?euyYcHF?d5G?&RQ;9(q1 z)wxUjaz`;`mcN8V#MTIjpz0jhVVDfBR%Nh%`=bvhJ%wp*QyB*#JRuvBx*pFSd;H{N z`S|$JI{|A&Ft)aqJnICg0`d>Nr2EDyNfIrA98q73SdzUx)&pa95;_+(>+HkNCj^q!{IexBN&xIFU+% zVWMh~wzFd!e{@0#%?o3}K{*RAHnml@jNei$dOxS2R?LzWm(%*%x zIgU7qG?;`5#PtLp!6nP<+Ih?JT%$FksI(1J&K*nlJ9rgXitpLLyI9GxRbx=It${W? zYu=K_cGlojk^{4IG=3|-W^%moOJOW=JTV5ged4jSiOBiMctlt{QI92bRIOESRokH|q zulLmV%2WQkOaJhK`VCO))I%1(MGuj8j1CM3Bh!#9RL@WJNtIGHIg`dPp=eGTKM*DP zttpe1U)ngMBduz^;sv8XFAlnxsX*`)3o(rvl(N^w2bxT)<2yIkafDQ4RXx`|H}oa$ z-oN)V)CDs)pcZFW5-wbg^lUiQaOGIY8KG?Hpqj`yr7ebU$Zzrx)0tL+5Z`vC0!D-l z>r|Lm?+MI-f@qnb^UR{@(f#5e}mzjM}zb0s*4N*)#lAEf|>}t;nrKX*vaGZY$Qi_V{=Ex&upaGvY8g&y}XL4pNu~>C3F56 zeD~-1({F_EzDMoVH!S_pCV8T!R=WyuLZrND?-e7JaJbAw1He}pGh!iXCoFic!Txyz zH{v$z8CIv>A? zAYvFRkrh3fe7SdUg|N9QFFuJX`uOOTDtjsGo~T@6M*z`Xxyd5nH&^GxFQY#o*uoQSK~ zKlNRby)Q;FI0P!_v1uHfYeKvA`d-^wZ~Dfg@4Q>02Bi8dv>#u}ou`*xspsAInDE)n z;VTCgfx-dN1Kk!c+w&n3G!p?)nrtc>mClKrLDU@ty7+nM+(@lUn5?OpI9ly)Wwyj* ziF^sXo9pBv-J^7@5T*(@6hP~ou!djjI0Jm{{VvT4X$yj+99gkt5?}I4(*G$Agw^=qL`9hN9&> z@sO@}?qQ!ZrIRG_N~S4O9v-|rxEc{D#mUZ&o1Z@`W(P1~=bXkQ!AO^wk8kW71~Yb- zv~rBcPRp4?r09IQfWI}km1WD$A~y!fwUY%!c1W<>GC(3~Ja(CxZHL3(y{5l)`YbFh z&6bv7ala0WTNMxZ4jFX+<(_9`t5c}wsBYdwZsA?W;V91# zF;p|$E~ARY^3CG$XnEH54DO~5dFd9n$kO} zya{n_w(-bfB{9V4hsvBm13?$-4{n15ZZ5Cw1smJ)|5WZaj`IiiWVGbO-5jn1+O#F7xDOD~sK4 zX8FZFPl>RUImgq$HUufmW_Ed}&NQ{(?%z#_9LEiGtWLJaVEGv)y&1gXU(Tog0F+`J z|371Q0%h5D-i5vHJXGD9$F3f$URS+-qu%STYT25sCkYR-Y)b}7ctS$cvn}L7!X}<$ zL$CoGEE8C^!2}36uvi2TEC`7qv5ko^UV)e-K*F#ffH5A)VoI_W`Tf6rZgoFnAYIa{ zTlb!`&$(y+_y3!}?VD5CDAytt?rS1_$+z*`WC|~Y)+{IqK;xbFuuiPM)zYO8#HxNu ztm=KTBfeXX_WxAc)MdB?D9Ypt5Nobm?pEjGsfoY1Y_1qnUZfKIv@-N2;PO|4M9`Et zR?Dt0mvG^{;9gE+VQXifhM_L%IAmqK17~`lPdKk0rkF6xqH`i2G3G~Us*bO$inYShJ`sZVFqPsMGrtOnabE? z)CN4|4Iyx)JW0P?U8IsK8vx0j6+XYW=pP>Q#F_eM87?vEU&d(Wu7*jTLp1Z0o5#@< z5g1*V;=u`|(HLz?*;Vy``}J_by^z)|+y)dnms{W3)GIO><gOxLKO{e|jj)#3Fu9EaETYzo+OE&O?y5N}bz(HEmO?nCPrb9jSt3thI7O}sIIjclqlpWWq}x_*7u zzqYw$3j)v@CIG#?WAhZ7kXp^t`7^1Q9vA(ZJRmC65l;KmOK&OLOk*@+N=gi#Pi<1ecgaZbW~E33=TOyYSnqZ5_?&_ z8_SQ{)<0we0^NmW<%YN{kEq+YDtrs;mKuCABeBxjYr#q5N^*Y~UxN|OgfLA8b|q5n z$+Vl8njT}TQVxF`{bD+L6?rgDuCjP;}PPRsf)hfnybVj87V6@hiW!#2sy!iu?7 zh*`?4%zZ>Ej5Ix~V-@c`=6Y-&FC$?^FDl^Cnv=MZDgz^;JkIF?Ycn-NrMa)dTM*UZ z$webEJ3(CgXLQkyZ@6(Q1s-wjQE#mKJPjO^-WPNd8C?l|SnNrK!S;g#850f%p*O_m zL}=lt(Yo#RB(JZnaUWv7-EA^1^I%i-^lM^GM#j*^BQAW#l`uTeiWoLWgKw@}EUYN3 zm1I;iOr3BUA@bBeYg({~r^S#C+l}vdeV?m&}<)!eh&eS^WW!Vwkie=t2Sxc%}Kdln@mv+>& z{_M&pY5U)?@;meh`zt|McF4?z6MAOS$7GZ!0mVh6@Jot?nH6w+ydGuVi` zA@T}jYX7J!*>%C4P?v~$zEseNz(QP9!@L*ODlwCPA61pSbx(mbHoTI8k5vBe%L?z) zHqa4hMF#EcX#+PrI*k627%An|Lsj6#)jalGZr|zkZtm@;^f`G1+GQu-Q}KkSsrf0r z9N?AWyz-Hg^seo_ zIIm-*(lFJ$YUf$fO}(3#FjV@4#01KqY%sJ5J(I>ai~hft1<8v6ItlcJthB4!E&F1@ zg*o`{h4z-yfpm-E%3NO9zu={M%gP^G`5P;Lr;~U!=T!%N#a6o=TQ!XdF@ze-p;-hg z)0)@bUQR7FNOstZ1t+AEG@$72OBM@QLq_4AD;CQk8MY1f2po@haJD4bYL-@@DEX39kHc^XpkHGFf=Oo*{RqQfjlKy{*M*!N+wRC0rXqN2e=Xyt^6{ z@>kNn$`KVaFXb$Wy-<+FJ9w_8T4R*invDaQqeuJp#$dIV&(fSJRq0Dwj6!9eQ`(ar znbf=w@=6%rgiCj(uA>m-w7N@Gp=ib2pp+w))M>_s_)?z#&91rCCM3iS77CQ18~I zdBo8qzch*tBSsL>ilDdm#@}LXDcdzl88XCTh{}L2Ey_#Chpkp;b`ar?Q4KaamYnbL zkktGtzAg00<>!S{E?jCGHXm*Uel)IJq+k9Ey%?__PiSF$V!C=3wBx+^B8unQ;EDJy zX1MI}Fta22HND&1*LM1)MgS5H|fkw@6fiz7l1?(Ov^ejD+k!{q;Nh&t*wdqQzAiPyIWm zo}H)V!Jf*|U@&i6*P9zJP{jwe_t%~Yq&;IGVY%Un1sX-1!c~cTad+}t<;|W#izx5r zEH6COWFhwY?{2>Eh%ZypRBqceWOFVxJTeQ^!|ZF-V9UhmD(BkgTi(piW7`LDe8dYj znb^VVAUjE4+D`&37q8aUd(9@%s^NJ-;!nVnp+!Wh{7R7Tqq&EQ&5@dkm&rG=0EAJv z_^})BLj+VdEyrNo@oK}bH@_7fTirtBmM(q(Jx|u_uHLS^=*lY8fDXPhrU*ZHFIj@w zgX*8D-OIkGudY3)Ugqtt-HR(M+s$xfR_D43UTSipfQJs)Z9q|ZW!)#4?nVx6nftt0 zq%d%vDXqpJR3tv`NpovY&`eOY;vHJPufLdYB6$FPPqEHlm`pQ4(t+=sfbwV^}fm+ z0z&E@qJUNoyH*R-rxb>9pdV4H;*VNa9mq--^)Bzy+n{WnT%f7QK+A@6aV5}H%&4wW z+?Wh-0hJrCGW`S{RriCKeROoVMUjey`0R6rk3UlMu0P(qA2)VHn~V4q-NYSh7$W3O z*im3*b?x@evO}0|s4ih&CbC*HzEpWD zQ>Uoj6jkx*r;{(8D*T2FvS0PfTf6M$1g#UQ_B=@S7cVSI52mc7w8Kd2g+yGV z{YeLX)v9eXj;sSSdniBjItx4f!LCdFQ!{@v_Eb!eUtzTq8wn@yEXGEPvssTz7PTvB zprA%2R*&XV9zQz>1NhH7Qr|1RZx^V?3E`A#_W7GI>UtV!!{)({VD1g(<=EO`U3=dwIv@8=}viuy(k}r?b;L?qX^y z!}-SAnIpq#X?A-3%lK=!pVo%gY}nvmYIXm~%FobKUn8>mxmCsaExKv{`K5Ho^rm=^ z{BLPCZP%7&{ATStpeYgYP+O8o`+IPZy-LlypYxL@J(_R1-s~iR32emBZAzK0f)1{0 z)dXXLz1=;EG88p&lNb4a1=|C$T%cp1rY`VjKYZ}bPn@b+W^Z^LrZQwIUEDr?1b6lT zv;y?-(a=q1m*c2s!`D*;87!<1QKSvZfkht=E0^DT?^K@)wsM@o7CN^z=pD_sJw<+ITJFriK;t{?ZT|j7^lv07M+3*`(ly2$trx+CJjB2>SrGHcrC=9xH0?-a+=vlUv3aKhQWtO$C?p^u~L5O_KnSa&8#8#*g=p z=?~ZBjX%qi_koqK)&=5^H;j~7D|g(=HWl4un6$i(VN!m!1K1E|fB0h8ai>1P3Uy4k zqT2u`=MRlhOkUIbP*1t0F_dZSkNAPF;1IrV9-xMca0MXdqD!U0opk<{@1IV^l02b` z9VoZ=sL1w_?L?FJ%k!_5Tou9ms!x55Sz!xIMIO~~20(Z2uu7zIQy9{?eE6=4k|JI% zm&tfMxQ{0U4-*F%yoFY1Zld#LC&KcgsQAsq4tBU@=ld#bsjSecRXhD(o>-p=5@Tp@ z_kod2K=j+wC;Gj6p)NJt!?kA<7SY6M{5eX(6Re-kg!=Q_-Ktbco-B(5KM6;9Tjwxl z_LL4f7%G38uwDop- zM;s5&{)k0@HBhJ(lqUO`X6B%W&-7!ChEU>}Gi&Oi_AGge zpIY=o&79tH>rNK-@bn};C;Y>tQ)9TD7BGp<+}0JA-(t|aOr>1Nh=@kvvYj#qu(S9LE|t`}ks$%Zsrx$b-nH^eAsKFvTCL{X+T7VWu!DP2pdcVELHI3bDdL}5vzPik zrCdd(=vPEDNkY$tnqLn)HQ}afjs3xMv7`5s^OO6my{*p{y_d1dBrPMkO3WyPMKVOC zNZMB-wxCNikY3D#guQre;v9qsNKZJG6H!7@%*-zcb#A&F-%F#h;Oy_d>)k%# zWvop-j_eW6nW4B6AMzjS$Bw4t22Ri7_LnLe+jXJu2r)>#+WDA@3KDdf7}9WMA^+z8 z;_LsC$`bw2M`+1}HZf2X)8@B0-<*Yq0*B0da{H>(go4^+$ip`4!Iugpuqw@E8KUH{ zNJ?oZcBm*^B{|f|(LBxfUK#+jxYQ#_6vF!VN}_12v?5?@bq(LOxs`OAxG~9zyJztO z#o0vudfqg}a1icR)7Ct*NeHv7!`W1je6A?K;+5*fJ1^z~KeMAGR&d`&t?*&yEI&7| zo5GA4^JDs6#tc#zq^Sj5#J^vX$$?Vy7V`t@FW;Dpsh*=z^L8cX@KMo2@=Hk@ePlJR zt-*o;rDT>(;bH(LsRms>^Q@zueu~za?G3$830I%%h=cuv#g!4KAT;i?UjtYSCJ)v< z@UvJnSW1S_AiJye26yZQ69OVal78_|@s8sV?l{=UV0XVV|Ps{5O4eJHV4j-KHr zTXu`A`Z==dmM-r1L#&#LP0|nB9^|29E+(AtyJ(@L*NHhuDahGJ?g*rvT4B!$f0YIE9}iwvTF8k|8IMM{I~iTeacmb)0(6GgPNbV!NY#jRm^o^ zD!*##U<8oO4e3rAqHy9&75p@NF&{+X7AbG{MW=R2y zvem{c;J9j2ftSS7X~2Kb_xG$qHNq{)$??FH14IRw&8J6)Lkb`>s*8K9j0peuR<=4dQ_7H&4mhz1_KulI0i0>X}S7 zZ*APVQyd3-ams+P9xI#LpODK4_4F?3bNddBdJ~m0j%|v>E==%J7P6f3-^6An{U;h|3|u< znzp7htF`jmX71KHiJ(fZsm9$pcT7yC{8;4O8T6P4pa7}f3s2;@utZ$*v8$HXh=x;c z+z^&S_A*q{Z}zE0)fuO?9r=$nLEzNYZb2_?v)OrC_Q%vhtI=+VP@3@?8BJv{XGgF_*i$ivZK zN6%!a>0ik9+{y-4$;le@zO~`a`i@Rg{khFm(iELo{kd1GA}cf?WKzw!bFE(Q%UylE zdv>0hFIOfW-Dox~PdG^)tu-93&d(tfu3s_Z`#eQ0ZA zV{hvqYPp-^wf(ZSh3yM?@$L+wH@7{{KB;!^yH~!KKJ>pu6T&%FN7qfiKbPzySu2t0 z*fwF4Vxi`m%WGLR0a*lE<*lEgpBxsWx$66FRqLa$RPj_3Mi)z)8WvI%=&H#QL^0i~ z%ZY&^@mi*G3DJh98*6I6 z^_E$mXbq91gxy{Lxpj-VM1#=HSZWqcn0hJUFA5cw+1XKZl?2trx>6S(R&G3QO4v41 zu`I2Uk05CvD8*%8-DqoB4@z;05OlN(Tz%T~8%aYGq&3*m^DV;n%iW&KxOi+h%?soU z3RK%Evkx4var#X6F0S2Vi^dJfZ3K<)%q=A9Cmc`a#!VUcSvK2ZUa_hy2>gtH)b9nZ zT0A;ME}J7+r;Jm$k_0`q*AtSSz6!jRNmJ33v1!Q6Jt383e0I-HJYu+QjD`_cGdIo0VaE|4gudF7vewXA1u7pl-Goouq#*qSQpuebsyq_EYljW zfJU>z;@fS;_@qjOGw+dcV3-2}l4Y;}gp0!>x!@{)o!Gh;$S#|JwK-M|>I!5$HQZ4F za;aRe5R5sXLANS%u4)t`MgzCRlHBYcTvv=mz}dW^=0$rU8!#go2AxQBnk=U1X~)Ee zOIAIz2+k-$o7?+4Q;xbSU%GLp zw3oYQgI81jBPdO}wkfjh(}y<9)~BVUpGk@>qSmqK%%e;RnsT4tfcwcNi_&20zS6lS z$rZ`9a$F@_(|Ka=g?nKVyH*_srGoos-3@-k!#jr= zN#&65w0)iPXg?x*cxbP`ELDJZsp)F`VVv)2a0-sXRI7XYaegDk&7oEpbGw#%s=lHI z_I&2wm{N}H2)avtZvNY!R^#*Ix_h@rc(McFd9fUHbbY1cf`AgV=&gEj z$wDNi{nrpusPkWMxT(5Yacwei^0x~+*XX$?O;WC1qcM>#%zJ_d#ia;XFfXz(|MRJ* zoLDgWGWFD>nJCCE#!+CAjyz8n8;TiQYz6 zD?4vGeqD}^7Mu@JpX*{KfYCfK6T73OU9OwD!Qm>VwdYOmkHX_%vbm}96_|DRG8hAn z;3J_g1JV2UY31%zodx~SkR%w^4SkIkk%eI+cVhPYFT9ZVZCl=#S`!-01~v~3W1#V8 z&>`&%I$VD`z2$nd`y=fyWjsIa=^S^l~V zblOkWU}BnE{MSEUdqBn#ywDS&A{-`Dm@=LujfOk2$y_!isu-d~SVg|W6#I^f)98{O z7A-8C*2LNsI+2>6N*-(^xRkvPE>TxQyn?d+gWJ_NG)CUOg0jB)spqm^YVUc`%j4lV zJ^wW_@%0z0l-L(l-AIU_r0mP?jkD0xyUD=uh|^epZ1%-E>}= zrd&;Ff{JvMcG=AMBPlJEvtoiv>sO%j_~!NIIa$OAsXETva8?(4)0z5bPN3P#xjaNs zmV&+hT@#mdKtW11V7xtWZQQSQm>6ck9)40{A?mu=h@GKX!|;&(w+@neo#>7{D^zui zHr^ul(qcaRqf&XvKl=yz(z$hoKBINYR@?27rK$>kKKK?0*3o5ZN8+(sji2FX`lNkO zzD|Gn@5Mxaqw_VH;-DfwNpkULW0$if1Joy(_AGhxTTp7qiH=iFOzXc%wPmtjvj7hw zFKcu-@*8CYL5XJDL#4x(H~6oz0eYEvj=6jo_koXzy*mG~h^e~?@f7u3IY*ZqBy4{6 zyZG3WijWE5^R?`ug1NJSlcSYeqS+l!T9jyr)qvgF#pk6`fsZZ2T4R8Qz{W0B1JWTNww)) z?p@i~w$OR>z~0NoW+2SumC~*`2ciwSDOQJHTn)_CFpS1+ya$_`HX)5!n*HBs*l{vw zkr6@_>P2YpL4!&BbF;ir@mI@kWcelkOC6dP91{*Qccii60Q!cvZ}CcSV;zO~Jb*;= z`zHl9?Zm4)Pmc}6svr}<4g*gnhaaA=N|hZv8!{TNjB(Mw5lh>U8Thp;-zCfR$KkAH z14af3ikrO4@+5_0%x}}d3w$-X1+l>F5_~R$$&x)??s3IP_IyxssRKra2r4cdT*#;} zOvcFgjm!#%4qEo@DFo-uM+NpZWP=we_qg(&!;&X(cK%6~EIVoB$lqhbE?a{{ecjqi zD}33)veUswc>?)GV|T0?iPWj$?ob7B}ROH?Z!<|)M%e;AYJk9y*kYxz+brtQ zMQK2}J z04A2D+x+tggEK!a`(!78p5&lF7RMauqTy|2v4X{Bz1%F~z*qD+I?NJSZU;f#@35w_mlo5JsijTE^%>D&?NxOS8YLQ9LDJ0Y{7=rIVm*8 zvA%jR8+?t7qSb6mAejd4W_0#{Mz8wh%FfDlyF+{)d-1DOlKn3$e=m}=%C>?yCRst^ zA}}!F4=R|O%AA|Y-znxOg(*xH?*xp+5sKb|r6z2dd5#T^0=KBxI5Lvh*agZ6UM8S- z{A~2P_v#SaU=qU0{GT(;SpZ9C{?beTOF@`JatS}piyE@)6tIl%uisA7n5Gjl_KD7Q z3qFR6`7uHRCmVgBCp)gkojS4+({LjKi;S7xqD1T36v_2wkKVLKZ;n|wkjL*N+Z&-T_S^Mc<4MC6#Hu_u9d=x4bEkjn>W(dG7gRbx)*sgtQxv zOJ|aTPDTw{+|i9j4&I)EV)qt(Z)itp4@9yq&4R`dJ#IGm`ef;@t7_liC)-!o_|xhd zKZSh#FZ7rBho!}p!4_|W*&FXg>1w3bQ6k1F8!;1Kk}+G@nf?Gyh^VLs?R5bgpaR-J zxdA8vnMSQCvGsuuLx^7Hr;82cFQ_cX+j+q=7kD)Ee>nfG;8@LDYl&R8p`Gq0iFDr` zaih3O#0K=FviOf8tLzV;y9|{H^^C>(p#TiXx1FuYjfDyf%V>H6oCPCA>PGKi5Jl9rqqh4tMmvkV7yv9vR$0RY#t45 zMBDoFsqG#9F^F2IPC~s}3~MxMz3O_vZctn18yMRG@?jX%sZp>Ej$)Cq0N6%X&`r80 z%9Y*)zLUPR(|xM2%@4xL7R%(+HLZu~{E5@l&aW?o-e&VBeGf*@bai_3BUw^ummNms z11wp+As71>=zpIphw7VH8sEpu@wcxmjo>OjrnUI<;n`Jpt7Q;6?)}tnM|OjtpR-Z{ zcfrnQd>LTcx!p1xsO5z7<;YPM(d+$v4ilGY{Q2+_j-nbC^fA}Iyv?A$#iQ>3FLB3UB}$sW=XA$seyFTphHpqTDqtvglG;t^r{j` zBQ(DK=!gEJ-^ccGsu95)NydM+u_yrrk@$qOo}?12Of2Hbig9zm^?Gtr5*>yyVEhK+ z&sd6ilMa!2jG7ROhNM%REgIF_x-g_@C1C7*2@vv-EEJ^0hlXL1RdP59d4q^_D9IWC1t;jAcAes|o7FGaNEoeEqaqlAf2>Axt3G zr7o!Uh{?XKVlsWAe6*_8Ly44&O@;>t6bY9R2jAF|f@~c{D;aOSkD;FgR0UpzyPYm? z>!D6>-?{QT^#%RAY68elP>kaDO~mRv{rCc?(G?%m!2uNMdofIwl3u7pjYgO$iL#d`Za7JN*`N_4#s3?bWay^nsUsI)97KhjuO6o}T<=$rE3@rg+c^iY8s0eX3Qk#1N4(VS1 zh3A9SgrnF&r&d8R8`49S&&32&vAcHb=95qI7An>~znA)QEXf}S%`sO7`a!XW?<{uwTS4h7awXs?qP&A{ zsIp7ZDXN3KE=BZ_pkB&*RN1nXFVN{}OaFt#D2_mqny553jHoY(zC5jAx=CL50`Hyw z@ABcKjx8oGc63+mtVhrf|2F5)BX*2Z5#;|4k0diqO3EzcZRq!&TDOPWrv2rz{;52R z1!zS4#*2b(q)Fkhv>8=FmpIU#M(D zF100^t1TAi_aLpmdH=F9J_@pu=TLTPo%$t20_OH763VpJr%9+?(Vf)U^~4^E>^p?}cvAsgFI26vj1 ziWDnwab7;2xcXeE@`_x-9yN8%U&b+5#CUbLU2r0f!EaAgr@tczZq6SNs0pA04Gplr ztHY{?UAsc`)Drd1pKkR_`b~^>!<0diP}$~ecMf+kZDP83e*vK8HAEQabGRTBYRV9b z=^(ujX#V2pSgYF5Y>b%py)4q%Z1o+f$TK!6DDc0m$m^OLN^|GQ_PG?(4Q=KObOX_$ zD?0Yal*5x;6qJTrL9s962|zj1@26mPXoAI6{sw|?At8{}boX*v4wUkNImRD?=tR$xY53H`;q{gYD>GyBli1A3y z=qe=+bOnt@lIoWHdEb=qG50OAwGW7e}9gmlzfA`L8w7FUF z%HI0@&-`q2+V8*VrTOG_JRDNwQPtpcl0#WaS_}-LAC__h*ACKbVQVMIpncgsqIPye zfVgJox_~+qyK35HJmWM-<@6==VdDt3#r;C#Obfo?;ASKQKI5Z0J>C1WN8p zVfk*?wg9Vwe{hfloa@&tQSw0L}=BI}RZA7wvjiuhwFbGCYfClIC>+%wPA3oT@efMc$p+PBZhHc`^KKQ?Yr zL9OQ~{AmvyX*;${BV}0mY;xqfW#(UBI;Nj(B!?jb0{ zKWQ-!8U$wY>??O}q$0(aR?XqNvpAoL`Zc(HTd=l2+nLSwHV*bhU9w}q+taOWI?jdx z6LGJf75DnfIOL_3&w__U49n6XEpWGH0AQ zA%ya%mtoV8x|!>mjAy_OC2{&jLMDcfjbJV=7;VIE^^!_dXD0-4S+F>0a;>u?Ts81; zBaK7O+EwmfUOf1o72O_toJi4nMHYpY(&J4v434EJ;N9`7o=+DezVv9k90ahFX6|cq z?z~L;f4<2tlkLUlWzoL4~Z6mO*2)_LKnfa1eXFi%1G(Sm5@h{_h=! zrWP5j;+avcD~)GMlf?>dB|BHwjq<6zhX#~sWk1AEgOX;-bL8VYUwjt#ZEf)2ahPqB zN@Jn=G@=+yuc4TkeEO}*)SrIEreOaD`5{Cq0E;<=a(T!EQ{!|qe58%;`HATU;nBQg zPmz<(+aMNojURiFrLeWLdjNMkJ9Bw>X)wh+pU-xF^-LUAW5<}5a9y{zwvRr19YrIKnneI#UzBZ_*}$msIfeu3gtm@qkn! zU9x1YeyqO`yARZ2;5&#H0!0Xin=I(n3nyB05Gr5hu3bD6b?D1z3kLf8hS01j02~e@ z60ywScIJ05d~1|57Mwp)d+UcYx#y)jIOquoBQ^yJkB$ws+R2Ss`k zq&quz$2NpukLr`4DI<=ipU&-Z{2i%(ULCYtkhZ7sKPLO`uY83(qd&d!7n<|~yg;o) zPfd0H>Le925$Ob01;|2`zq}U|wG7H#dA|kbn@bR#bMs@CW{q_lnNRTyPa+ch?{eSjT#zf6u_^QTMDkWYu9KLDV ze|4H(`KECP&SfRp#V$dT)YBT!=#$aOXg} zeSIU1U7{?<0_8=PqbI>h45L*xx_kV1^SWCb&R?Hz6Bls`Y262ph=G;=?RX=H$vRX2Br2?18L~lrH4zaVL+&_(O(5bo1@4qoX*@#_5gU+xpUJ3K^KM z+ww-%#ae$64xd?hz(?_M8e8QjK}kbTzyo~#Zm!ngrrBwM8j*Dw?0`!pG7@Papn#}h zBtU_ziDSHz}(lP6) zjh^ z8cUNN8-ws>1jA*)CwgU)R1+EP_qfCU@Y6qYO`md8&6v~?85DdcRdIJte1!q0>{gLm7JaxbSPw)JwYf3zPXW@Za`SCHN}EZPLqW+x{TvDbx2#^&l7=?Q}TfU_H4#`2tbNF!TC z48--f*aXR!e65K7m#bv?9#y)3Ro~)&6IlswRsRSDg_$n;2`hA{Kt(=(i%1nTu5gnA zs3tTW^ax!Y1ONdPBIW{9V+N>ocz|4&awNO~rD2Fogy_(4VR{q?*%pFh^G=89ZsXG{ zhu4+lY(0u&W;}MO^7Osp#&TlqVwL;){x}8z%(C`a*H&-dvQ&psr#oVKxs(E};RMrRQow?A1JL2*2)^9J=r!A0DuB62lMR_hFmhEKL*aH* z{}jST!w&%lIu zAi&y~`4y!UX!)uwM~dHM@LB@5)J8}vDenWH`iDt_M3079#?iRrOz)_=+7sPi1!r4r z^$C*PYZF#CpQ68muaxqWz`=X2u0ivNLh$e24=SkJi9BEE%lFTrd9iZ5@-lh;tt)@s zH=H+Q7of>uG}bJK!ZT?#i~+FsF$#Fm#4gDYCTYPeQ+_=t!z zewJO>yqQs<@5da$pNzUM7Yfv++nK&(eM;x&WZJn7H?W&Pl^}rdxOCy{JZ0+0aj_gJ zc91L%VRlVy`k{Lx0vI3<_tvU(4-~X zIk?D}Je99&)fp)5-$Ik~9cYH*M0)#sTPh1kfc%A?v9l6V+ri++`1i! zSMEFm#G<A3UJWcLf_ z8kP0>=Z)Wg5x@UP)kS|yh0nLM);}TM@voXK)B$=Q%nNg2^U5p;_e1qT&;r=YC|fM~ z#=jjzV=(*ims*{R*im89rZ1Gd?_k&7O}n6OP=-=>n> z!qL8ZLe_BqI%;xQvQ2|HXbt@*P2Ml1#^%N5qd?t!yQ!aXw1S;t>Je(a#kl9^u^&ea z`n2-y^-iKX_wSxi7x;d}or&rAlW!#)%9dNJNP?q$N@^QC3h!X2)Rg>@(M|uO03` z^NiItp54yM0_JF4+7G)QTAVLLXpHZ$3iB-H3(8Gp_HsAbK%RbGmlu-}^Z97@pR)g2 z>ei<8<6pq*KWcZwx3BzX@*94DXZ!E4+~V6VSCdUP7nL*4TyI>LxzEp3?R%|}93CCF^FW{j8jK~zUtEFTiJ zHTw$$RbploO0>JmXg32%G68iE=}q3cy#sX)r%D7c={*uPI)Keg*FnrKe$Ju zrdx;M9l>o7od+>e7b4i*(-*VioTh*-NwQ!>0}7$Vc`CL%?hR*=* zSDgg%g$D0s0Hj;Y)|O2*X!J@dL+1{rPR%@`y7jwpP|dgg1pK zmveJpdYu#|Wn{DQi+cye>*1k^vyTM;ZEWkost@KNuO^2#mlNe3*Op7uXbK7(Xdq$97cdx;90cACJ>_R-N+jPKo@O}+R?|8&$; z1j53jV@EL;YBaT&5(P<+PBrH2DJbVWcN^3Go8!sf*_2hOCU0j~Pci8ceCXQsZLY1& zUNX2mo_t~BsRRx%(k=lm%dXFTN*?oNXtzlhhae_{drwj3DW!KhU%PV~y?TPX+q3PR zCzJGHZBC~9FY6sCt{C6cWaX~Bg}=S>KdYI1A8+QLS@|IdDjD94db4fLO-Y;fJ+ifC zyMsoga_Oqj(wS-jPV+D7x|UguCLCzB2_Kij8Z_mn#)h>x7t|^}77M)cN#(+2i?uUb zzk^gjMF9ZR3&S+J<#G=c;}?qxP=TMIFgFz1M@=KZ51QD{`E9x8wN#RE*(`E7;}J)-}0eBjnW(!prCEo$Eq?pCXDwz(k z>@fu@0*JbbMku>CS7w>T)Q^@sQ1nOb-imV~mRW2wS|<%*b;~{T+PySMex+qgtG4ta zar0e5^L_m&<0VNT$#@w)PslLVVV>Qvcb;_i@vVf|CU2oV1j6P*Hmo7&*S?XPpYob9 z1$@MUGnWH-+lOLEKP4CT^($Xshmc=vzJ^A6w7Ujl#|AV7Js1j#&I%O`p3qPx4L(X= zrxXMiA2rb}0r4ysYgjKA>A3g|$dbZ%wOURlt>ajhOSf{I$&)19`YPwxlt5B_ZGCo^f$FLh2Q;MNsNg-~)X&scok zi`12wR?Nr?*eQpRt7rBfX9Yk76k@VBtHk z5?q67i5(O0A+=)#LV~-=5;JXSqUp#lsmz>MLGTO~-L|7C;1kyri^<4kG`1$Wf z3oR@+nNFq5%!gPTuO$*tJiGLocG_l(JPBrl^c6)H{KJgSZZHaZ{dDp44BL=x@aBo47FVG} zU7gJ~pDyYE^0++7W=&^eR^Z|JARaMO=%Tz`AFd_};M+=J;>ho+vIOiUY>T(6GL%ir zhpRY8RaOK=RvVHn4Ho=oBXO?PbsDiLrnA1mxiD?nz|YNF<>#=~gvu7tUR#K9zm6Ao zm?WI|Yox_Yi<`v;x11#My`XiDg=tz*i{Bfti+1g z;^azGPu-4`W)UMhGgU{k?P~n5ac7lgeN-;y{UCbh#d@R<3H>}>oLMX<6yzArFua~zyaitk-VBqD;~ z>=Wyo?CEq$h!=7^h6u8@B83q|Iu{Jm-ZDn=hJ=UFWKB?0@`Rl*DPIY0Uv7#$^LwQi zuuxJky}H{BB(0!(ljFU8w#VM?+TbX>ldNp*bM=gk+pBl{p26vz;tnz|q!b$`T|udL z`Dgn=)KwWv$=;^8M&sa0GyCrE2d56_LQ_a;B>`NT!jto3(Ez)136CV*6SEJ7$@qKlqxZT2ceJxRPcCBr z^mI6UZV@G;Xf*zVsGihWwjuc=kemL;^k`elOLXv+VrnHG7CLoaJZ+wDFgTMJ@~`EE z{E)obdn*t1m;R`@)gO>&`@c7DYw-4n36uN5HZC+S=`XBU%o#x*jx1dhSYl*1(o_yW ziWkI+5u0Q!$W*79B$0F%=_uFf{7eQb0G=1VDUp{;C6{?$7CMxv!VW7II!k<)GJAD* zRzowJyztURt*eU%AC6nYe!KA$jneEAD~?jbnWmRi%ct2C`S3=yLCCCt%v17e(!e2o zKJJ<=e~`KaWR%Bj3g!vR0*412;9o@1Sp6H2o7lkQ#!Y58wlxnb>DlD=Yj@Py69N3> zYb%A^VMITdD3>cq2QZr(YQ>6F)ACvw>7xIX0n`5j@+NE53NR@Y)H_8~40xXcgGMyv z`-}{YM&Yh3C+D!u1|M@wd;(slERBlkZ!lMVrO>}N`>{-U3|1wM_+CiySNjr4oDx&n zyL*!7XEl0Eo3Vyif^cSa>7cHrG=i5Tu9Hn$MXX!A-nvUna7Obqz0gZ zSm4zin@qMk(h)iPvTW^1nx>}`84Z#UKaRt`KsT{ zo?Q3}cu^zH>RS5`FaOlmR&D7#(T<}p#9aGyF)@M~j$y{EdFu5(XKO3AIe&P(D{Rx` zvrRcHV;z}^i5yuvrDka)BhO@u*Apz3_hfKgerZ;D&=J15Pdmh5uo}3g;%GX3Kct(i zD6dk=qizL~no;dvJJuvW6HB>L;Xo%GT%=pX#zKOVEvDqQl8)7uf7SQxLiJaP5#zV>xS!kD{B4-e`2WNLx@$XM|);HJr{=;~)ozI`I(a}riOOD7d z@HGA<`EO71<-D2J_XBc7s$*7kv9MeiLLOXk++%^w2rWO6XFh|j`a1@7O?NCBpI%C! zdxcHi)UBeQQ-reU1FfKUY1qTbs#( zO;~H})l!v;YrFg=fuj%2benGI2m+f08?q{Bg{vAImj}|fa!@NPh^BZ}PMe_X%(X&f zI-Z`Dg4o4n3eJx#;H$7quv@txU5NBD_v*IfV*Wu1ynvIP8loKU9|E1ox{A@GgUGSu z`vn%`(d|2g88EHe-PLaimfI-_QCjS*!{;efo1XC56MVVJR6`nb`LsYZ8l0rYSmMru zo!ET#WnowRK61p7L>Fy)wemJ=iDABxln>ikC+SyKRL%!qQE~*_0 zKW=Ufx38tO(Qw;kW6BswBSilci^YyrgFJhJ<&eG(i#sRMv_!%c*KVAXtNn%Y0}}Gv zQtCw%?*%*A>*r_qpxeuCT)Q3S-Bc^7=8n7u|AZSH@Hbr?+jr%lV7Bw~NPT>*`qJE1q1KKKjNkTMZ zFT7?0rQ5_;j9XkpX?r53o2PAlU%FMj`+85F_1{2aOW=*QL6=IVZ;~x%*KX_|YEnsO z6P+60Fon4D}r+-Lx!J^*SlWa~>WdIa? zg`Y`c+Wa(}CiVecuw*T)X<^zH)yYw0GZSRLh0E~%Mp$NtNP^pjF76qf|8PsAma!xTXY07P5z_a zwV>pp5t`wzgx4o%uNvElNUG@36cY~kx$LILep@{{RtJPq2nzk~crZNw^c%grr22Kg#E|4rv9T$o2bqAX&wUUQdK z9|$bBb2!Vax3^-!HFd@3X8;p;RQi8&dO^XNPLEY$be^ppGM(p{*|16J${~@+nDZvf z@;3XBH=?e65wdYg18M$SU~K8IMlS?+JOz{PBJUWa!RBV~;Nrm#uOtO2c1(7YWp78~ zPmiueZL#p7C%R-djFT-$B+z?xm}2|WDe0eSY`{`Km0sJaN+ zHX%gyKgE7f{Qk8s<%b|7*okwJG3Xy$4W$v-+I@0h8{BLv-BXt95~CeeuOfYRmPwar0EPN`WOh2T%E~qW!nBEa^Xt*`1AhapLhW zOx`w?s*^CrwQyGUMg1xA>?iDs`Z}2+->4hL$Mp&N>nqh|pzN$TAWtTz@jw<2UC9uB z?xqS;Ubu_$aq&}_rZ_3?B5y{2EhcJ*Lr*amXF#zO(#s1IpWy)~MArPK&{H0-9B1&Q zvb38ELE~xh*Ir1i4k!r1YJJ#1`0wjtYf?n z-te5dxdoJJ&G{jlUk(J&BbJM*88j| zFW!>JdaF`xZ&t;xo+wcKd|U+hD*2siH#I?EqQya)Y&)~>3oy!%naw!QgAR_3d`gBU z-v#ZVS*lpRnYvAvneFj3L7~b&I~%jkGH6 zN{mu%D0J>-&DNT~W0CMch-=Ch`hTwc12{W`yq93^`&NE%*(q(AgKx^wRYX{L=fw($ zhfdV=CsGqXQ8)3m_hu>Dky3BqbSm)~&?H^XpTStr7!r%*O>JAM-1t)*13f;-*fHW@ zj#EGH7Z5qSLS!&oE!G^IK}yPIL^NB6j`up6?M4fdFCNL{5Soi#Jow)E?0V!%$|4sE zzap^u*`d|UDNC)b*ediMKd4EGILl*RTf0-bvA9Wm0pK-8T#K!m|Gq3cRDD#!oMh)CajQ<4p&Pm7N| zmv2+`Rz z{7ur69R>i=wToQ>!Xi6RDeKGo#cj<^c@a!C4%^6fd=OD&b@@EOU5eBB@^@$M6=5ZF zBVh7_@GhMfoCe|TD$?)Ha)IhWl;0&y9eo1R%T3)bi~J5cDQt`y(TZsx{w15beSMN| zh|_n`u$10%Q(p2B_7+=wLvu@3J{G^vwWGmgy&C+m%01iQgi1r)4)(SvUwp~6q5Wq6 z`oZBD1A+U{huS0Pe@i1hy*%FKd zhdVT=u!+z3Xpei8MsM;&n27nzFgKdGi!OU}`!bE~BPKjKd^b4p1pt-;Nf74e9LIQr zCfCzdg|gs1JNVGIB9Bm;_JjhEkTTlY9ev9@N){%=edbqy2Dx&ML5Y?nhL`@fCt z|MpMpFZ>f?LSL}*_41B?a^?SM=qqY7l|?jRyMQBd76#09Y{sTvwbuZ%cg2TMyP8O3 zRRj>Wa*OG?-aCI7y7TetdlyS`0E~awA2~VFNKj8WE<*H>WcrjS2?goI z9lns5ZYi6iduQ0Ia&eJ|z}s~21=;3VITSTNG}Ut3(ySm>CH)^ll4OWNF+fm<1^Z7w zr4Am;K^s$Z?}Kqy^wfleJ%TM3gKYkIJBBG2l(&(xGmXPndCJ`Jw;QxFk!>M)x9#hd z1(46ERt626;$~OV22oxE9x`@=>P@_gxJQr))xY_T(IaqMe{_D&nn)BXE5Z%Ny>18# zZ@vE&-W*7&W>#eI)ilh9H~y=wWJ6oc4vPa&q&7MLfRFcgak;Kn>X99~n67QEUpsI* z+iN^I_^=M~w!e!WI9j=BU%7w4VtuFjroXuI_vOP^G^oQ}5LbW;_j$RbzD9KBx;D0l zOei@yr3Grb_b>#)1od=fXy=mrLXlXWsNGF@ZflE0IG-F~q5N#}KbL+BI_tk;a zjYOr)$=x}%%knsYa|5uK7iGEZ-*?cXpDt%4rc1jih}}O(h#-Ld%I!Ek6NJvpnP5BA z5`apu)Jf1r_z-u&eh}i z6Yah>=K zY@w{<+?FhIRh6M+v<)7R78#=PI{Rv07N=%OwI$$?E~lvZaW0Jeiku?p@P8}MI$lz; z?u(;$c|y8p^xw#x#kQl~jC!||50?iv8QqBSG2<;K3uAkRM|~E9))8KVV1@|8(9i~F zJh=qann)6X=Iz0)xZ0}RB9!&{yv0UN{D!eIOHW<$9VAmOY70*;GkZpJvm}#fvavaq z?QULs`{@PhICsv$k-A<8Wx!Kg#S{33V@Xs%B0c>EFFU7CI$|(cbGvMI9beESq$Gvf z-O8Ru_0J@_&|mxFpi`{0-+%G`wL?2FzVJL;j^}agh&3b{;?mf5!XOFZ540b~zRc_S z-d?q!kkF!PcDkxM2<%yNGKf|OU#Ew!7~FKEnZV{4JLugT~r`Bt2FGX{bRiP=FNyy&H zaod7jFD>D>_rfm8dZ0_KqZLEwm~lr>hKOTo);3<{ACq{)qf>)&{v|#Eq2WhJRsIq_ zew56<+JD)6$Lna~Q_ab+rY;zLBfazoll0x?ejIGs>j0h$0mgU4O#v}olikm7lNmF7 zDj2xpR+T!Y1^%YhCw11=V6BaiaKAE3BK{c-Cxehz` zl!PT_OvVqh*Jo8Ut9PzWMTu9P%j5W)YBxXA-c(=D@AtdJ*(=K4tP%QRC$}TD%Zr0= zA`a1Aw6d5Qv~-9@yD3<(oc4a07ZC67SZFLL zI-=nwt170g6!wTlY?1e}1}2|kF|zB{t=-kN>w|q8ggz>Jz%C)~tEEp(e-vGDE>8N>Y?i;GUh-Uh*=uwb|H73I*rV#dp*cR5LsS%2 zLa&4%dI||PJQUOl4j0Yfs6)JL^6(s_IvfRK0f%3_$emBS`#k75D-51BFv76YF2jUS zeHAl}x|%g`S)!eRQln8Z!>M&_UU^%$i0?`=qg5&2Q7T4K%}u1HK2idEwqJ}lj!f`t zYfCO_yt_o?riLk~Y@oFYOC_oiILO1=PTtR_*%dgR5L-qi3hOC5IE>U=w_9dUEYme& zPCu8}q|GhhN5>$}9lwx?j7EF>^!Wo-x5f_9;!fe(qW6W!D+Y4}tM>`m@mozKO`z9% z&4L9l&c6P9JjrpuJ&a{DCi0%5Etp%-cqY>ENXHF#aB`BmvC)$gFbq`h#dM&+EoxU{d^?)#y)4&nShmItetuq@ z{m1l>ITNvn&-ptm4>Fdo32c@tRm-eptGj4lW;K)jc)3@QVp0LD9ZECvLk?$3omtGp z#|IwY)QlX$r6cS2uG*193@`=O>yewjST%XZI?;p#Ce zbw!xe>-OWDTjCA8Wac|NE=Bu-g=bfJ@GNvZHU4aceW8NvI&0BclSi7t_Ipn}F&;{Y zvW1NPR7v?ZZPCA;N(jz;Z|&UE20#cEHNhi+JnElvaIDTXQdq3tjxZfl3z^$VH-x_F z$Fz2VbF=FG$`OJ{`;0R(d%c6hG%NDCeta74ZuHNHe>(ut-V+>yw(0D|DDWFhIZ{I1 zr>3OP-NI~)Rt2lRi@+DCfvp079D`@)&1aj$=O z!1tWJLw`Y@$Ez{dd!X+VnCmB3{&mm?Wi`(*6?SUK%KU*!aMgmX5rD;BG9hR5ItRRkOVS$s47a~V{L#sV%5TO}K$%$PXsfgqeXl9I&f$MU;7wQ$(GqmCX z>1SxqC2U%?v9P6$U5u8Tx3>0M<(9Dogu+~9Fx4(O+Zp#546b2{D;rnag)(r%Ly0$| z#NPWQg=jLDSRVZ$m*k2b>&zwjBjU}?(iQVXnZBbcH83YJs~|ys3l1B=EQ!5s8@(OyZw2j zqxr_#{(dC=7`S)7geQHt_Um4GvBm%IYeg>{vW@>=S#OJ#Ph0uzE5BR+=D(+(bI=XX zK_!fJwgj|?TEWXtAd!GaZ8_{Nj#vt*)E9X>T1M$aBg@S zLJX%|-v&%*E`7xp%xjtZ;b&ETTcVZQTXOiY z^qMUeqVv-0ynk}yn*@F-5gXY8uIzB(l3i+D%5kW#Jl9l2u4@@nN+_%%Uv_9S1xs|q z?a4lRx4NM5xc@bC8PRb@ecn5Gy59IkwC`Jn*I`=SxAxPXK@6+bx{EJWVafLP@e!Y6 zn0UPNk*rb+FdOWSx}2FG6Mg<(5x~F6^Vl@VqF)fmbZ6R4tf|kep9d#Rrknn=*JtOC z;3;pW7$-K56TFihP#sJwsM9-u1)m1VCxKCi)}XMH{H=~RzyWCt2grn$z!Mb*z-W;5;Gd3LJR51G^!j4= za9z??{66bj8r#HV)&g&|uHrp9WD14ck`jp9>Kq0)c?se>*CQv3G$P~f-JLz+!De&F zJTX9@+MJN#9U4~=lI}LsyJuFxbFa!$7)b`sm#66L9SlD^B@_I!+na(uFXa@fvS&d7 zg>owmsoQnwi1d+v;|6U&!QRpScl|4~?b5innYiFB_RZgC-@J3>L+Z%0>%tG}jQJ1Q zJh0g?Nul$ivnxV~d1-pYo}b|L0Bidi@eZWfwl?hMyjU)O(_&be#O~Y z0|+s(YPf2OEu0;s`G#LUPJG6#UA8fRtqYOY;W3*~X)9)|n(`dxj+Y1x%A*)F_`Q6P z?;uq3;P)?>KqxROmnj(6M$5_mgClC|AU3W*M7)57%7Z=mfwSqRIhJq^8hTHe)f7uH zSoAa5+2kaweKMK!-LcLqe0&lMKW=D zloD$LT->r!UvBNVmBPGPRGqTr&I92;-^i^-#pTv&x5Ny?RkOa%bvAUMKeYBNG*Z<{@mY)!bZHHxH zFST811jNM$m`P+IwF%@rRjOaiUAZ-3%h#ea1XO$1W6tV$lF=Z*gbhb`;#PtY6o?_G z2_uJ${fjxCfl@>(Dc~m* z5De2zWo-j4*>VdTp}WUFrO(Q`o60B3YBZk9(UT=g5)K z==QVjxN6C4pZ-$x9J?ghq8OQOXh8tw{l&qV--1AsG5s~NJd0!eb-BmnDKV$|*_xCe zKdEQKI8*D$Xu-Sjd?zhOuUwWBJ)DpHOb^*IfH){+DjN#-|+y>}P z&jrJx$dF+YHJlXcgvi43S)f;<+FQ;FE~QwPE^;RSsKIgxPk%z|^Szdh1hH2F!6|h+ z#ua_CQYtQ*fxTV&!yl%PW`dJrZ%eFn3W&Hu5D=Bd0-i;}T?&Of^aye!9O8{bX)om) zF~{`fbxOSBT5-lkrWSbmt7EY;$3+LoZ|@lu+WY};y|*@Mi=$c!4L_h9LPu@diOl3= znP>-RhtK#@|0^wQ!?hDS;zGWV6;ul_klVdNO%}g2$PfuZG zb+1%g_*}4kD9nUjRbK`}E@*l)caqmDA~Sn={!A zd9irn)QJuia8Aw!rv~?iRWF3nn4`?&)P&x(BYG%@v_W+a;Pc^I>W`T0-T~X&bKXdTd(eNnN{E>~ zQt|if)+rBhGJf%StET@N)lRCmA-sRht%p^o&q%&xwk)0zOpGg4u4YC|$3st{ZzV>5 z;YuHkmGK38rgPt8^R;X1q=N&tI*wHK`yMhrT(wDWye5a@AIYIuwQth5>bds)D}Q+9 zkHg(R4)Tzdrsy@>51N!M`e_`6Yf=asYAC-_Fc=9MKq8jnta=qwrho^Kg@Mo)8>U(m zH2WoghqwyJP@bO`wH0!4Dq~R*(eDDOQmcLG#IpAsSVRfgNG&d?WsPk!!gJAAsElRS zJf<Soy?c!0a44kcoFa9E)^bj&Fe?>MF%orRJ~NTPW(ynWmKWHh(!){c(^1NBRr zemvv^PA(R=YiZ059p~p6GOAl%?6Aa^aT`Gtn+qyyobL4W9 zyfqNFP;^lhJrUXAW0!kO0cf`zv%l2aLiw4;+hswzj^*(1>|1W!R*S?CNS751vks{7 zVlYUNh@^$Rg99lluxt{wT=kfBNa@?@E!K(>jlp$VBQ@|OuA_LEMt6W)bddF_rDeDT zOgNZ6<>b_FMIpn(^rNI^XB35c`-ERIHJ8Fi*<(kL$+oj{%>pYpuge(h_S8C7#F*&tif_7)_Cibwh=q z3sc~vMJx{NSUl+8=Cs7AujpfG zlb#z+>1)mfAYzEd{9}E{LUO&gvo6GeUq8~ zM!g&4`Am(%zk=J>>rnhv_Eh=(D}NHtb{T4AWt1Z(%P3^`n42gbo(@VJMLq-Di1UD> z6X%TMvTm5xsFdMsl={hur4=Th!#jKB4Dup_oL|MSLyyn(YVfXzfk{(9FBF#_vnhtT zXb{`(_%aKs)v-qg{D=LTorM2HVItM{;Gj-?w58vozLHZ_Qksxtwo`tT^fhmX#V}1g zN3V;Cp}l2T6PP_=pCygAjNXV)FR<2i8H{Ukt)o}k{z94#ccLIo${(nn$jnu?x7am4 zCgcZuDp-=}faz3~4Bp~8UIMIC2Vv)6BR0G#-(Iut38GbXp>07lfDQ3YE&wP05AI2a z@bV+g=TDsOEA!+v*lvHOZQ^()5u3Y25qcSa^Ts zY2MCH*W>b!>V#E00+lAvNG}4u18`?o6qQMaNR+3uV{%A3U*w~(Y+F*2 zYOMBI17N&5K3rPjb)}+7z!WESsGlqDZFLfk&(3zu#oo33C?@Yh>A1IPB#&(J=)s}x zcFvhw=-~UFL^v4S!!PG)kz7^hi#nLO8+J<7Au)t@%9R_$@S{hkVX4dR!4COeOa=B(%+0|lgRpPG# z>wWiq{bn5KaTwYB{jD?+ulA%btE{*K9H{~uP40$jlX4-n(EBoA(wGsb-9=0tw*DFo z-rXA8G7+^+;^b_qjn-AM+hD`|_>Rp2kr z8+UzR%Td(bihEk#NGZt%Fe0oA5-h_@O<#D_h~esc1jKb+xy*U##z_xerr)D~Yv!<+ z6(0jqQX?d(QPXTKpkM#$Tz|i4ecsE2;#u6|B(@QossE|cg8~K+j4p^P{Ganjdn;-{ zG*7P3xKe>ph$v;tamWi-(oc4Fqc6*K6aS=Smi`=%B_L_LyThflZg(`f^4UH+2EW{R zLcwL?A4qtz|1b%Wu$wC>ijhHAx#Sd6!Wlv901&SzBZw?`H}x1Kqby}r7&k)O7x8Ve zvW00gH;u4bnwx|chNjh)D>DqK7yj}3(A6mnhA8dbSUzBkMz?TpEvCjXpdnfMCZYtr zY~n;k_x%q!)tQl1q?cpe0*YYM#+OGWip7`w5A1%hx*2D$GsP_l-r-YP;QE z)ppyMe)aY(Vj)sZAHx)P8^kS7_CFw`VdQ(2|G8EDiT}si_vqfr3-$u}J{n2wITMK< zMh@H>z|wBB6yfr=KlBNl27JMJwpq*X%eKR47D9WYu(*+qNtKdbx=c4R(4NNvJ7MS< zrV|Np*{zU#p4E|sMNe@|kUxpq-pJayyG{4Vefobbv{H?_MPabk0p1u7eqcUF80LE| zKBKf>h2zO^Qzd-drB7AK*Xr<|lr!Cdt%0;xn7wrCc8D8P1w>;kuO}tS6zWyZf{#Z* z%I>Pp@|>uA>$CMuqw7r~JI(xZr{@5?Zx9|t=>S0V>Ktkja28=^P9i!^TxZHhG)2_l zj~*P_%T_V+6~O29(Lm7pb#04{XHc_4yB%jAQcBFaUnIo595CotrW8z>_uj`l+i!DY zE>^+uv>x4+@Rw&06d4aRh>2<12k?S!=$yj)Hq|JF_C;Zj8ZRQ{3+O}(w&}n^J+Sfy zvI(4HpExNzhEfZD=LrVFWU*=2ht*XXi-~a%P5XPJZ=24vIM}Bx4Cuc9FQnaDdF#rr zwBy$MSH6Zv>)Yk5{7`4JK|{Ey!Z{stHrv0feF#CvEepi7Cr6|vKQL-}?T(0&?Cqk# z!dGDGfMBQG@MZmVxGVQo0k}JYv~SSLo1N#g@oMwZLs8de=ycBP|3HxBLR9@)Rmd*jI zYiGL$&!R_`-F4k7kilEo-n`uVm~eDUX86W$q-q$B77;DgwAAda9v>VZ_jXe4NC9NX znA~CSSK$V@n(3f6RskXssV*)-bVRLzjWf9?B#CZnh%`NULceo>+dBYl`s(RzgasBa zP+DPQbS*#Qs&lIOko=|t5qk94f0Wi-CZ^3cHA`M5utPc+KjLx*;2}hXxDFu)ugMx@yD{ zv!CzpdEcyRz}U*}syE;Ff4$H1{oU8*I?Y!*i}A|#y91Z;goznDfA+~=li&2;m#+B= zOaDJ#`qQ#OKI&17mA41koP{xxNOd5Rw;O+I!n|$1MBha!QAKM4lxT#u)I|yeVO}M_ zqx99=VJ{V4pTAwMsJVgUUIj=(IL9xX>V?mTt^IRiv{>HL_Ov+*ON&WHlgJ}$o8hGP z5c%5y-2XW#&;O`3RSjAjV|Kc1=ZpAEldR?7ABR5zU7E!!3VJ9{`}_UQXUjuF<+@K~ zfH!WUGfKCA{iPHBmRQ~y5J{~kniCme5{y)-g%5N#*9w*4U@^isHj@E|bHWN8YcpaJ zHv?kn=r%gC^tY|eq6|psg<%Qj+~?()aOKSn4Ow&huFh8&V(<0*xHw&kytB2w)c@knd29Q`lfXYRd zWcEI89=-+n$z!gBr=H9htlzn+ex3X zL)tz~HFMc)-G`Y6lhu{pS7XAs0}HJBX#euk$HnqL3l01;g-%jXK?DH=LvcUlMKQVt zH7qaW(cWrDg+1RQiK>$5*5Rj z!OB;(XT~0#Kb;4>V9~2eK_qtmD$!S@&x`pAH)f2_+ptY z-z8@t8tnP~;48R;=wS6S2{5C8!+~MN4_sfui&D{`3&l|>@_Tc8onKrkn%lW<5QlJ@ zaB+o{KPsj`=5pm#zrh3*_XyhN$ngYn*fBD&h1f<2e#%l%zgxZ}C|Ke3c*vEd$f z{-AfDNinf)iEPgK=5|bRIhq{>$K)}a1p|XiY0%x1W9YDL6p-F*8gJ(F>)Y$B7jmBn zhMXIWI{XWb%qyYj33z8~v0?M1^(C_|+XzQ=7C?Rhu)S2QTXtgd0&2SPObmB9jn#P$ zlnZQi^!-fE$meR|abQ=H zt7kxW>!$IUa{aoU_on`R#&b>Ma1Zknj-}&o@YK$Ry*~_!nV&)D0Q*+OiaBRUVp+K(>n z=>HzS*H@}k%1rD(t5Wlylr}QY&MO7>-lZ;Da3ju(bK3oAk}%dREm3dKTNAlTUKxqN76}-aPQg;8{N5a?eHL-dv|7V zhpw&jXniOOKIQnn5 z`?c7kh!w76|6(I2MP3^vMhNvH7R}B5HjIzgN6&9&vSG!DSAnfFXd2YP^`Iem|ky`Rus5T5eX408v%=>y0M1rT;sx zJh2t!4U2_&pO?}eXeVnw#fr7pM<03m!=XrP{@jB0t zeUOnzKOT9GX=;p1KV6r3yuBL@L192LFE?k0>>yBuxh=pRIb$$gc^3~4z)*Q3?SVd> zn>-pfC-*Hp@VM2Ww@kO82TYAH2-rX3X*?8y0%j4?kWYqWMbpu%n5s;{)Y$HU0tkV);&O3Wm?atuNzfO`k1gx31a9wJE)>_o%vy z0CM5nYwo~Jj>4BF1=_MlRqPD#HCxvoNlXD)+c%p%&X%z|`q8tI{A(}K!L#-cOQny! zc{HL0hanSqF#@w6{loCymF3g54e~zI6vU{BRj#e*r}R8tdoakQT~K2PZBJ5z85$fZ zgWuUuS;BTo1r4{vtiPr1(v=}l5b3@3NMYtlp+Z0)<&VakMr_5mB=I652QlE8nni88(a_hcM29dfC-7^2uUFPE}pDekCXg z`(5cA%SfdZb>7MZ&S*0FNsL@7Ova6?`q?xlE-^Q=j!M&B8J`^WMz?Nf)u&HBLD&!s z6S=Qt1=Fbd;Yrm95t#^8p@N?1hZnD*`6g7uSea>D%gw^0IIn2)C#4cRfwo zCHknPe>DZC`8MkKIZ+mUVCRhl5l*EShPs}+|NWa=jEJzz41kM^%paDemRhaq>N=HQ(aCa;_s45^rcH`jYa|Xwa`L<8X$eXJ|O|{6K zfQrNH+f|JzBK$H@f&r#x`B=o^c;gj82qwv7P(g^viTE*(ov7K%DP_muD}m)1 zCLfnWd4_R$fmhg-w(|J?K}`OxOEJ47S%E5?3}KaNxSN!Gkd=oFx;9YOYj`o($5jj` zawFEJB=wt`t)Kj_IQ+j>U$c9`j5Q81blhIHyL1^GJg&=!>wRp7eU3kxUJ5 zZU|o!80Lvt5xg9^<;J9>GdtI=IfxVpxl`^9@x&W?65TN8Wb7$ZNZNcxubY&okFE6@ zEgSRfO*a`1B`$kB^_WxLQ_ST<3TYoB$>)QfIpMqhR_Wy*mt*#iygF6!{hZu~&(dH0 z59(L(vGf^*nYo97vT$dihFo9p(0FTi0;_Z8S3xK$f^*6sn@juv)p23Z_b)pN6!h^qiciyT{e6oPeQb^`8&^TZLUk2W#Xh<1#7z{dB5OUjwZ)#*&6uQ zo?Z=j|0j!-&}b zNmoqBu6uV!!?s(6N z{|&ou@;<#BjYvZbhA6jgi`||Ckf(8^W4v-4GxFQ}RB`6zCLM)q;WbH1jw23W!r=j5 zIujkNcN59P9}aIkdRO@+QFX?VDh$)J87EjjgHBg-giHA9Uu`Nyh9FnY&8mFIe`|)~ zi!8z~)X)D9tA+i39HN>17g!}F5bcw2KR|LZZ?NYNyJj-)@qzh8=Hx#>fLypZ!y{?|WSV(#V3Gs6Y71Fhk>?baS1`DN zq={HvzVzz)HL{!YOEN7Z8SA})O{#do@+@eaKtAIEnWR5u%-xBJV)|S~P}$Efjs2;{ zh+aBeIupPB-|@b8>Z|v?DzX1rM-!FcXO50AnF2xSg3Xv|3EoXWaz2DV`MD@8YOI$4 zoL}Z5GcvefxfgH^li+n3t!?rhQe3NKImVfhOu6FSdvKognn1PAD7EtL8L{qmm+f}L zB6o%u@N>KK&fg90oVWE@9xS9$mv^1mb|v`dl{Td}2y?VDa_*0IY&?6vfBygrVT+4} zgV;(2WYPlH6B3AfeqDJpW+R0Q#{*B|WHdDJCS%2%yc?W#u5ud9Pe;DrH)3; zS29?J;jcqZsUcGzhm-)LcsWd_Gx*&8K(lYqjtP}m1QFQZ#akVDHB!;g3Fu+!OASy( z?XY;{bKGj`R)_1jxIYpR=?M|>l7r)hbwzk2Y+HOf2mFpukW0pjj21z$L~pD(G-{rq z4pB%21E(6Mv!JIpcEx4&|6!#0W!=iug+}m%d=>D^zQxv-9_n^1rY^Jp!2v(xzpy zqD0rqJv(d)C!`fcAdDIwpCH>_BE6&7U_KN=PlB{u6f7`e2|WuMK7z zu;Xor$rPi`-rJcd8Wfw+EaZDt&vElyU$ePGTvKy3wAvu>ySJv3wBx{e-gxIZp)$Mr z)RX!=UF>Y1DqP01?eOUp|HdsByF@7?u!$u%Iw{_np=c%IKUfl-hr{ZQ(9k9uG z=@E>298Jm=>A2qD{ZB_3S%n_^QxYoJ&QQfna3HZ2b@&oTD2(Tr6XNhD#aN4<;o@(2S#}WaYFle#aptQ2(i}Hp)o0D(sSm?}1HZxp zhUtLf(|dtmWOk{j!AzamETzUJWBoTJpiw{rTOeQIg(?`7rhuys!&QCoh{vqNgeP&A zdY2&=SHb0@v@g(d7Sr|8*?AV%2@m$X#i;#KsTVG>okkov<}VPX#(e5AVcAG}Ehr-A zl8&F=Iuf^VCy4R#**{xXA*RHHh#lxU_ z<>i`^++tzk6cq~_Zmdlv3}@45O$XhbPN=e7W6TB`Jm0qae}m!uKI0yE`~vM6(A)Y0iYJX8cBWnZ5GnidHYlU}^F8&x~B1LFsKku%|Z z3@nN!ep@9EJ+TO+w!2MKISua}u1c&WQsD28L#g>$p3ZgniLpnj_ewI-RK8=H80>KQ z_}D7??lrk_Bxh`E3-OaRaz)4QmnUuv>*hy1byCOFy=S#umimJth=|-)hBloXePkWXCX8Qe~5jx^~Gjs=VQqP}v^e?{*3NA=l%MF!c2Ouzk3H54DKKIg$x zTv?^a&RJ{#Ij4mJcyLn?YKljpnErY}tOxnQJJtt6bI|947d~4gBV5KlXt*!bjK{Ro z*C=VB29*j7g>~gn)ZX=ZN%=xgZjTf;{E%7})Cb#@tQKT@uMx{fEAnss84{AZ@frL| zrmp4f_zMdv*DmFF260K(<)p=7Hjg5`EqukS&KcwUm+8#WeM)6BK^%Ya>Z+zL%Oe?U zVO}dwtj%_lacVf-h9gr7Ut`8xb1hlfE!j}7>ez5?@;4Ck`a~bzXJ`Arg0Ne{f9iR8~5*_f6{AJRWThTg-i4^ z(8O^EL#YS&!t%;wM<+NsxM1{}47=!X!Djo3Z71WGqH&f<4XyKgeXUTP4S-y6yqxRY|>uOHwrlW3m``&O> zHws#WKeRYlPT5*=PXHN`suQYzq@YDBjvEJ-MX2P*p2oMT&|uX2#`Sbik2N;dv2`Fp zpe{i`KeslMjTWYtn=gaYD)=zAWDRfz4EkS$>tZrVR*8IN)fYtzKDhMP#R-1>QbT>j=M(WA0EL~!&hZ087)|79B3=>t;f{U_U}A&$=zcKM z1i#M$-cmkeb2+r}%s2`Jh8^h=4Qc+3nh_uu;LoW9^OvnzM(%v>68WcLFf~1(d|8`b zIgn+}l^3CD7`aBfV4dmQ_FG7(9<-`4e;6;b3tFFAK%8ti(*uB4FmW%Fw@RPQuJUf3)v~>%T|q0wXu67l}=< z)$;V7#1|(DQq4pIhEMmC5%azIa7Z8UxBfHiGX9H^MIg8x2k7X5{Y8|Ilih_J2How1 z9+3sFHBmq;iKuD&rEG1~*MJ_)=SdC@EU=Y8yqlZKdFVm0GDpMBukZyTh|1@+!RPg_ z_`KG1FZx3Bu_ zUXGs#EAI6!&WXipmmAFupnIPaZ-m$p+-YTQ>!O|U2*F$G6*kwZ_p20Pc{K%&FjfI7 zc9LmG^zC%9d~FSS;<_-MG}S%0Wuly*ps;`e6NksWIQ0T<9Xd@`ain3TyjhztBJx=bBuZ7l1T`Xnt*1p7=(a@u^Q_*qgg(qb=N{s?dD8-*Ph^1K6E-=kYT_wGpBGbs;OX?v!kmwf!))b>azb)@Z|H{Wsjm%7 zP;|QIL9hlM1!Z+;IcQ5-n`5$)T_cgCQb^;K1W#Dlum0{{ELhfn3a51`{oZsnw%*XH zSk2V2t1duidtlt`B z?(a453v`u=f$hfWg<(bqO*og@l9L1fB>S{79^<0c0 z>D=+h=FcvabUNFgNjITD0MX;OV@B|;^-o5ISx%=<&DN(I-DfMRJ9~azV}XuT!tVW; zRf+pDvRubDbUNtq;zh$0v*RRjMp}bHo5FaV^ zSj5*eYQ`|`jgkkMR`b;YakjR$ab?7}+V316lP21457b!t5=6h}c2BtzZ%4Q5=`fKn z#EMalG^(ER34~daBOa=LmD~6=4V;3jZubxPCtf-q_WQ>s667{X@pQ!A9 z(%blDGSVBg@a#+j$?ACqkI8YEPN`Hmo)Q;Kp4tPtJ%wFr$3(xbBuYe&o{XREeS@)T zqa;O6^y~U1b3*?iq#mhhe;a?q_bmO0X#)Sev(Y&UI^nMLU^^W5L_oCtxF(We+gM)U z6fL2FAeyjaO0f+Fq8HpTpFJQdAfI;f3-9gj-g+*gf!yN4)Cin47%RTJfLAUIOi{Z* zHP}n`!O&SzJQ{3A*O5nXKgYOx2^G7MAMm6wyF#AJ6Ge|NLdXM^+-Z^Gc`(Dp>r>D0 z8{2x-RURoJ{+;P9K>O=;zC4bvs2!xN=>gg3SXJ>JB{0=BAt$a<9O-mxwqdVX``P=> zeQ2}0rhdYWmaSNhE4pezv+BS5od-Y)?1_x%VC7_NXqu$;X}nd-;>Q>h98AyXFU}NC z9vmbrntUE=&8m4%awU>?>8k$T+*-TIEDMoL=+vJX-Px7oukGbr4R z){$?+X{X|sW`+F%7p>Og4hL*9$zfD@N`45~Lb$)yhWs_fkB439GL<;7YCx-HN?zOG z1*9?14$QCwH`SbzqCwS=(8)*Q)$j(o7StiaNVt<@j-EuViH9l#h)38Li|Fb1k2bLl zbSP{3Q*A_=N_f`-_)VymceCdAoW{8koL@%@66xeWgj~9OKDa^O) z&o=ym%M2+~n_r?VoFwb5$ELjY$)DHF_Mhrt@?PHMza_TvA3JvznmgPzO`yGix=K)M z?0wEM6Hm!B_Ju+nk3@0tIX4Y$(D8%pIcP!IPt%sbIpok_?r(q&+jTUCotXt*woHlk z?ggSLQ}y0FKZ2&+R2+JHH5yH&l&h4zc|W|p{4p2xX0&{jdAkUFq39s2eDqSaMMqSX zON15d%nxzdT;F%7>&EPeD483&i!Yjo`%;bWlZ9gw!sdixZBeQ*ZBoST244cso%oC` z@90g#rMx#Ugio{>=+ck#H5$pK0$Pik;}p8t!p`-x^fi0tDd|GQMIf`jM!N5EAD>rWVdBt=prq`-NPPe}I8wDSh{se8qiAl4G-@oB_b z{6jG({PCeuC>nU8juLoW$Vx>N!7ufR-&6w1Q1N1{1hOa%(P;h_()U~zC7i70!d!W) z)p$)1bToWY>WBb1m9+X$Sq_W88*MBu7nY9|;^m3-Dn~+Rn<&GbSl1E3RwhfPp38a9 z3dS<9&?mXWR#1u(!RE1iubEOdrb;G-=DAYUgNw0}VtL^vX(EE=V!>GJw3g&I-_q0S zSJ@MvV?N>^raOIN>ECrOI?pU9uBqJ66dHm4$|H&ZyG|xOON(a{9 zJhlVgjvj*+Frw%P%%}l@rN`ku8hLkw75aNr9kyaP<0#ShawXHJWRyg+(&@)E#ZZVG z!amh~c@>F#`ZhqKAKxdR#pCF4xe0*L6I&f$FfJg`htg2}4)^R6h7ev6o)MD1^Gv3$CKlu-nU3-#iyQ0LhFjY*uO|e{1`j_vr*pntLFVzB34gzo)6{06X3TL z5Rfcmcs^7aJTEDauZltyq!%t5jm&-ZcjL`UN8v^%ITih(Ywdbj{p`WG^dR0|Dp|x|JLl*Z; zcq)F}c?XfX=IH3(vUyUZab2M`g!N0v-J~s!YQUYU%2Ze)y5UX@)#X0E|&DwnJKoUSt3pccqc@%YAwZWLcb$}@}(EJJc z_w*!cO}cFa+Hp<7T>n!mQ~*qZ2IL9y;`mzim?1q=d*ZMM&f`OUTSP@81)Uh49?J1# z2@7!>CK6s8QN-`|cPw?T`JO-Xda9rzOImXu5Sv|)EfvQRsH72!ivyYVG) z5r;d(RAZs7$t(Xi=@#Y59^Wh(WPI|0O+i!kwlogjEh?4WHT>Oi(oElir zj}NOIeFUQ3VP<3>pP!z}s?JUZM;ulv5MyT3XADY8`zG?Q)##!zTPk1$z04UAFQ`H| zM@hnzhcOtuYdDk!>ZNTZ)2!ARbm1BlA@u~ zJc{$g8HbvJiJ3+Ga5RS&aez4Oo(9BY-I^T|t@Dbe_q%)J!}W~t0zvcWJl~qyPvrA1 zawLgDkxbEPkwFCFaKuT6HudO@p2lE9OsI-s7}=-^Ghx{4-C%AZ=9O#cty&O{J~b5K zQp3o&@H>Ag+ls6*8X3oEQW3-NWVQbs_ev5@mS(lyg#BCBY%T$^1ej(HtfX--82 zH65blqP^VpsjH)5{+wM-6Pk)MX76@_jpxr>GLd9cjov5ZV45N(N9YULaNp1O@v)^} z>0F^#KHYhceBi*aES5c5U*rvZHF_zmU+R44^SRqT4iue(UJ#cCPh<$P$nPabqIu>* zqtIZPa?Oy-DT^P#jr3^5)?{9jtpqBmlZU879px%5P#D4^2#2E#{y`p1_U3O_bGMev z5#kAL*Aw`wJTvjmaKa=0;ZDAB9>1bJvE0ga53^d|JQ=v&FRHoLN;m!hC8+X(%?4}P=_voN|5;bf8 za283kF=GVEN;12~nTfZgQI9lZntx_irm*qL^scI#YMx8I8 z-!jcQIRuH7P%OontRa^ae0cd@r>8+NvWT9k%T|Ojl`YD!Z(&>-y*O>OWku0ACEKS3 zC-*$hdFs6r2NEUN#bLNGd^=BJy(Mlrjn+t;Ozl{N{R%33DeqObsXqVp$cXts^p`hYTPdliMbNiG|VgV_Wln&)*mkk_Z_^EKcsf*C#yTa z|F-mt3$G-}RU}qWZSYRhVtF8uQKXWWAuyPg;dCW)S-g$BA~&20>G=(2=Vn`c@8x7H z+wNWw=Y#n>jh!X{t#XC-L@& zB|JRzybcY!h)k1D@KDm-4@EATAUDTk9yj-D59hmJDjwqezg%BWJ6ZkEQa(GIZSR)q z7vsselo)PD;)yHAoCfiRQ`ACy5}QT+5LVLVgjXcoZKldY3uOLsdrazr1y(L zaKtr^s8ak7lN>Xim+B}Mgj|QOpwJj&0b6861aUcb5S%|*Hy@)eFUiN?-%F>s3XDhN z?Q44M!IT%GXZIZ*sG03QmaBJqU+p0WpGihpi<_nlxINbp`gZp4C}OZ1B|8t*f3t5S zh85Y}jv_gcck(c${%Y|MvcV7as2^!38C~}FW4+xYA=iyXx25s+7pzP)hDfX6=!k1e zt8~O)-q_OLG(meh0CG=IOKK*pt+J*^)Hbc z5l=jn+Y--`$sz3|$V75Zh6NJ_B< z2s_AJ=gjEHs!hf#lOkCKM6L3!phZc-xO-(4@vN-8LG#%lmjkDl!SMi@UN2ZX--q_J z0s~akl$)NX9z>=T@wM4IgG%+{~yrr~OY({cv!p%i#78koQ$64>05g+Z2` zG7*IVz7f`Q1|v(sL#RbMc&K+aS=R@rdg~D--2KQr-AlWtmP|h?SPgi*Dz&F6-NbemrpGvHy@(Xd|LjmlR@>$Z?1R^KT49PcxJ_Mi9Clg~Ceo z`%k-0o-OLQ716VtcHv8e&yYr_9lN1LTGj5C`KbHdhD5uudy@U|WkOCOBSO=b+Z9m-2OjIc( z!->8GTKf88MDW&^CsmW_9Or0v=^1kKAIl+nNjDwz9bwdn%fA6I{D+=H5ZsR?E0M^9 zrWBUEoIB?iGLyKgGT#S_?6rpUTme;r{_kCr(dzq-`H~gn`Rds2Y;9|EZ8jrktl(sI zva!4?lhxcTS*aFjV?(8tzj2{_K-U!FZZ&;s|q-_p|nUQ~+&BmeS zg3iYg9Q4IRfd`66x_X^QM=FCX8bU^NG-?>_@XBd#aP^dcIVL4E4Q@_x_$0u=raQbp zGgt>XuNrHX?&h7|-^@y^5aG#}>j(qmBJdefs0;OSyURIPl7%09JToTa}Ca z0$$Bf@U4Tm@Z@^wlPn$V-2Gi4U0Z&11QR`dqIe^(sC3c6M=cnOQY3z|%C{xWgFa%m zkB)-yA@2~~WnX{VLS8%NETX@M_NV&hE$>eQ}=QPPF;k5f;Lxn;XE8?-d?i?L2=bpm^+->UDa>^62ou@X~EGV!we$Y73@o zSZL@`pvGzpy<|R{_`bS2+eqW<(aNnSdi@W4px3+i+%$s$u3fq59#33Ir|jOoUD)X9 z@A0p7HTXO7THbEjSMZT+fQJhh_y-)1CqS6JFMtFEwRpitB8pYnuvk1ss8eY1$<&&c z;^wmm+raDM+xQf5^CKAYJv1+=^3qfiu4abIM9qkGqXmjBY00|Y8C4${{*!96F?dS0 z2XWNxyy4&k4N!3{dZraH_XfScZBe@Cw+stmO)ZbkZ?Z5EOAMT0vQHAUa7ajnu+SkT zhS>@rXVI1)yXwZBH;@6(-?+*Go4zTI%-)OS7O#<2>*_)EFZH1MdonG)e!+L5a9|Q_ z_U3zA@a;DHalU8`ap$pbvUnD$L2hVS(*n~1S^1`=*#n=?nO2UQgE$bKLpLwZza`qS z|1+nqH$jtBhPYj~x1~ZZtMpwPXGvGowke)~5UYS;P#KtmGjk2`Rl@VjPES*L+1oIj z7d^8vDL)9YcW@L=&8wTNwAngvLNaWC=*N)VomI1Wqf*NZGEhX%_a}(l#5Gv zad|YEa!@C+ht#zPyW!yA+VAU*IqY4T0=ykbk}e@md0JULJ=_)3S-Emz2-H)atUJJDwXA7-*YVk!{`ByWuIXf#JAHY83XO`OHTiOUtpPvWHvA=@(fU~gQ zgl+kIYPFMQG*~g+F}#iiKU_XM9&&nIQ`;^;EGVpqRKuOsWbhknWlcD@vvP0H9G zA|hPs!$iF!w!v;1oSpUGgaxh334bz9im|S2gF8=KZLnQl>MiY{^Iuu|88sXKnNB99 zU4+m}Pkt4z6xu8vpQXt1G%jh`%F7(chK8>fZD*PNa_35oKCd&>gF0i*O~YE76nLwT$N}hgV;J)-*M;n z-+3W6M$bh?k< zX6bHF+5}c+Ya2XN!%-GuM-^$}dEF^L5|O4U6zMEl7wCGF;SP14C^mV{04UU#eMe6j zM?rG+509ksa9L_!%FQ#GPBu1_s+ZC}?!JhfC$ln?F@o_e^Ok?rys=LgAE=!ov40DY zm&C3`k7gKFQqua8vBXlVwGC6LIfrexi>cVhImtAxZ3ko{##+M5i8$GZ&iy9j$DBSU z?99S0vL0jmSQ_oEku z;l^=NI`{@>VmcxZPmVR>@a|-~uNE@;g_afhSN8PtM4{4k&-l`dpr(9!X{o<7RnPZp z^oY;kL;ipc#|ueV`tzQAgNkiFqE5UhczV%RKYm{9WT8r2^7UdZbC#Y(Z~VLp^B<%h z+S#qpX%Ta^DUG6XU1!_RuqedxXQB@EyF_M`=Rv~q`g!j}W0d`UxEh(6E+w7u2DMU^ zaOoN}Y>-PH>)`XJ)1VyS>{>aL*nfyG#e_YQ5Jz z`uo``wL%n8*G(Iswdw9|6q1xab%*PF;83aSHWcQuM#UZdRY8B#g?1T749UmeXOnec z<6a^#Bn9_~R2C^GsQlq+_uZM_Gg~JcQUD?(PFBeWtv0@^tJ$Lid-RKHEh|K! zLzQyQwQ7@avbtKj_Ri(bcP^!nzyccVmSxo`0A_i=JJsnjK3zPHdwD&kwcecqhm_sK zidAD}NGwZKsuSin)hdQmN!VwyHd;^r(V5}Mdn3> zEg!%cSekd6STD}U_z7kL56KLnF`xQrcZhUq-mf2As(`-5@?}yq=^GvF)7W=*VL0;y zDU$T~q%+#XWIsg>i=^)N{y;aG^zmER(G$c=$i(=;rV!l51~zFVZ}LC;L;e-(6k<#8 zPLAkwvc4)h&7*(#(=?~v>FzE+K|J~^%Uhe1>DE3?nG2UNAzRQqrih)1R>ou!`%}@6 zu6j8=BV>COnF4{&OD3c3k~_L zfaK}gzqL>Px)}CPpu?|Q`p82nw1#^YyaxGXMHj2=C1QK26C=9Jg=`<{s<*T1sLVUr zJnYUTY<=63T&|GOs`$cBB?Zs-DrJ1GThwbJW?elj_{Vjlv^s*W`thb*h+C__v(a7I zlmiZ(Ooy({=@?(S&&5U+D$TBqSH8~7+7!rOpXp59?JL`{?ps@Z6=-Cv$V)ooe(TbAFa4lyjsJK-XQlHsg}LaWiL`lqalz2$bk=$VS)i<)kVtq~2p5H8EOZ@1mU+$*CRsIT~-8`7YzzuCK{VxO~pa zQYCP6#N}~6y2S5kyD&Age-kHUOIMi(p|T+-EFOo83 z3!@BSP7aMn)Yg8+aoQi=oF<#K&z$Axl%v2p3wDOFui_4ZQY!4w1YX9V=x1ey^J$I- zN+~+`<$p>H?DaRNW}6I`t%T~OH0QgKnq!alK58V!q`e%=GC9wPgu;Ye~L1`@{;K~uii5-T+xOyw=t%Pal+`~ZdjglvS0gtygCc9vI zVldY1NKpoUL2%1zuiT5|^{~ohJJF-;j<{`14BY*BtB%1lIkJ)c!6})GAJ+(P`ON(L z7^k|!M523x?ahb>jnN$I6nsc4^`W}mjpQp~`-=Qc!{hz(FnhZ{nH{*kw_j=iAP~!& zn>z<^+GRds-)Wg|n>~U5)DYN}@u~_1njGf8zjrH^B5zzg**XSNs$5WX9pnMw%5fTR za6xXt>$1+9E6XQWJr{uyw02Jp*4A8kpqCi2s{O3xR|9}}X zKh>l`W%7jyw3I&k(6;gt0FR3ESLtMBJvMpJBth7Vuudf$-GK>PPNI90<1$^*+FNC^ z?rgX6s}ktNj7S6E0fENIF6Ma1lijUL1a=L0E*EZd|GR<+!cXrYQXkFx)+P0KcjHAe z?}{5Jc|@#is}-Mal3&RW2F=@3O&Z=$qe|l-mD=%Y$3Nv=@p~;B;whwMDNv#g1a`&} z(%R%vEK`=fN$I!M6w_V-dOKMwhYeO<` zL{yXl)zWHML`<|q?hCeJUn)R%ZwIWRNx?xFTQ&3aAmivW{w2-?Y9J!Qig1&M$1k>} zUNPDFI(_G?y&XJ961qkk(C@T>aqSiOPdhJscTFNxcT@Im46Lp^olmHt`}=f;AB2(n z$ndvvKD^3ZR&E*FV*^V;ctmBuA1W`EBq~Vk%*VZLdttL{Z-oZyvk0OVD`~K4$jH9u z_n@Oxhq<*JIA9R*@w)R5a3Z7*aQ}dQu2UjDu(qzRu0Y0Y9hXn{9c0eir9BUiw+Io1 z!cvUh07Eg=;<%!{Cw9ia!z_~&CLFKJhw2CE%(N2<^TrIzRg{m(CbMRHFO5#I-DR3R zG@;Y!x^hQbvDNu8is1PzQA1rF$twL!_!L&@1H69f-sECB9 zrhH__^8P~WzzrfxasW~mVlxTM)j-%rw^(<3=9xl=psqG90y{c?_w zu$i6h2lxNdQqqZNk(?M5%0x7V%i9~>@%n5k(vkdh%VBpJvy{q_6jqv_D9rEN*rJI# zGZI5!twcqCAha=EJvc-$WQe+4%)fIZIqa6xpU$50soX9MT}C;FmoUiY_Lb|_T_l-3 z(m6Ovc6})KYShZrAB*0(L1>XuKsp$#v(ML9WQ;^!?> znq<6WD%>S9@XPiF8YN?Sq83v*wKh5|1i#{&eJ!w#ne9nb`Z4O3kr4@EP`~s{kKwr7 zf8z1}Ko?L*z<^ekXKBnQ5fiPyeNCpqEu$eIXzE_k|;bZtcphS81Az zJJeoRu3ol%?&7lBg^lW3hk^w{?SHh1mUMvAdo%A8rt!ai4Rx@vr27(=dZpId?+ ztD?7eUhvhd*8dq-? z$$k#r7ZypU%64=#H6~`QWj?uQ1=Sd3i=Lsxvn3FHh8n9=s;>SsqI zHLM&Owxtwx`r2|~QQgx#=JIGO{X^j}0XeUfr*3ZdKkVSqvVLK`lf%=ij1`v@#IBt1 zl4&pF_f!2a{_l!q|CQQZs~^g*ZLrPxp|~v+y!`smO;cFN!S_OwHmMAPoDh00FD1wI zoiv)SOFe`JZ`oWg$o|^Bi|ds+k{$Hp=yvQyyMHl{#%sd%@saQbcVS!p84TMl5Z>Fn zaw5WrEv= zc8Ad@)>fnz;#I3E+vzMo1&&jGXZuQ^T~FuE-qmYvsZs3SwAI-bujl17LMYJ&bnjql> z8BFO)cQQ&=ddVeg(;B|ZEE7ir9?NM4jZ}62I>2^b%{+e436}`;m>QjVgu_iY-)d6~V=WQr!w57>q+B5$e}~qs|XY@JZwE z#Q;S6&H?Lsx%sl)byh?H(GlJs1#r0Y$iKyZ>S{S)K82WGI!u1tk1&g^=iy;g1Ad#n zGPK?@ZOtDVm96M*rWB4~NHu}qkuharW#t3sx8fw|jS|<#x^;lH(8(;)@<1YqBpAsw zsBpL)6Jh%W$(53iCS#Y8m^B{X-q}w&VgSN;04gCabv+z`oxcig{q^IMGC_w1`N~Kz zpeZF`*+Kk=s|2%xTbeDYm1oD$j!$-2u6T@3&#qw>vTbf&t&-r98*k^;iz=8U>de>KWbE*$r{`zca~cVbIiqtZ14R5y#2A zo5;qX)~~Kjc;{@S*l)CgNeblcf%SNMx})^V4{O&GFk=cv^Ftjxe&;gM4PZ3;HC16~ z9EHLII*PnVXp7Uncjvhgn;}TibU4BNa0*<+J;Q-`I6J)`@r!91A0R=e*jt z1yh-0WMM)07hEDo;Dmw^o{~h;x^c_x2;&I|a(hxCENF4S9Ag#GDEzq6_su;D<~5A^ zx#MXsLJiBJ;`AME$t@d2D)@CV-T$&~kbTpU3rM!TtIe&MC zpQw*EGwdUBBq)Hf3fV>@Y5s(HCIi9ITBg<&obhPdlT)2vpH#8H@B+RfTRc!6_wL1a zCtkryXD|sAl$(L1O%j~FA(=O~$C@dU68gYk`pGM&gi0@4>5RVq$)|W-*4dFYKa&wo z4<*lC4u$c~SYPm&G79nTmE|-{&@+(Ch<2gxQPL{5wxP%{HC}b5FV9B>@xS$UmitD$aW5tw&BqP@-qhtZ&T{B z@B{m|a6Q@g6m$d-bJerBKuH*5EXQXIji&k?x*KwUW^$wlX~!=ad$6a5r8tKk8+ zRxBMl%W*hRSXF}_-6nqRT^Fg;fX42874QE5K7$!B?DtfYQwh@)LccNMS72kZDmP32 zhVj-)M{92my;S3}57G7S6Wh}_CjG~Bh~Q2LQ&N<#>5zvjc#baMh-zdePr(PB&R-7t z&Toi`Wn#Lx=IIq*B>aYqf!3+1zT_oA2L>!K?x*pN@+JE7^u`lWU;9HW65es12rN^5 z%!*GN0gjtDx`k3pItni9fbE0*Bk^hID%e}L;quk1$;`<*@Y@=W`suWx@K&4=5J|A~ z6cl^0MA4w)IEz8gcb7MK1@Ni9yvlz`hQ;Pd1;@uqw|VIEe1t!>-nP+FNvSel3Uza) z)1(u;%)J|P;kRH=#E%TP$SbHwlNn+zoFxz|WP({Uo*xzzyAw=R1P=p((zr{3lF>A8 zTQ*ma3y^WA70L>=o{Cq^)7-oJ{mI3qsvaJstekx6E2goeeHm3+A2M8kjLO2j#rG5Q zq?{18<$cxQkyNZ8A30wA%MwglV= zG)xI-^h-}nTmwg#$4Jj__P<3*L;5MAktngUxszaqQN`DV8HuT2zUh$R7ShRl!0em; zw?P~i0Wy#pkt%hfpX1n3X($su$|Yy?8R4DLu87aom1L0h;H`ZsxXX{>N02qp^rHiO z?c;naZ#IoD)vkY=?ez0OSh69rJxxz3ZsfPHw+6U+0V~wu?Dzt0dF8FM%QvcP?Pc=& z1N+Tldh|l=Y`(X9xeR#Tcc1%pn{d56Lm1nI`xI1jR3PbtFvXo+a<3Sx=W4P2c9~E} z(8-xQ7rRcG<1+kH!8#_G2D!52!kT{btrSv7Ui}lUY?^U2g-UXQghe6gKT|FVU z;DW%7GR{1M3+ySWR**g;k+F%s!K)r^u*2dPA<$eaV7Pihb}7W0_J4{dJvMfdE(C6p z_LG29i=967PK zd;2kq!pjm~Fwt5wvd`APY+K1YdoOKt6JU}nHNiBK&N$XHgA%sPk(WeD0VYAaQRn4! zf=z)~YLA5lm2L*;6%|bD&RCJ%bXJU!t;myb#5v8i4Id*})y*RWnRUrpo~&La(k8D> zen~uy_)_F=49)n2>Q;UWD>7%n8`|G!!c~&;Be6)Mn1L!ipMJ5mC1uEcmvwpM&f<>n zeehsKtAb7ajXif3cg|l(hWWzx$*mBr0GcSMQRIL|3QpMPbXAK{@aM#qXP8(iBPhb& zJp$X6*L34eQ6kM#7Cx9bQ)V!HRG#d2be0sW$}WrNF8pHGCN>8`FqeI10fJP19=eNj z&?3x~EiZ=HW+g@s3nwawCxmB_8HVc zlRHNQ((@sZtHoC{uALlW2i8 zSPHuUtE;R+Y?Jkk;- zxv(P<<{J;M#03(34Ev8gVKw;hQqKh-)`k)x+$ZfL#sozqJ0Hg`BOg-y2Z;)T*I7Nn z#aF17BC`4*rVxT!eCJsz!Oe}?=BBJ`0N&k`G_=8UkUJh5Ks-9g;5{nN@_RC7htg9l zS54l=Rm1hN(phfxoJ7@NcpXU=qsLKR$w~F+&1b2b9)X(Mv3WlR}&Z`@cwu6~wR!Oa{jw2pRW=;)!_|GZ+5QAif7x5NRoot^)YGK=D=N$`%HX~R|z)|0st zosEu9nsu%beWeN{h>ZA?jtcFDEvVy~Vz9%T*K^$Y#o$zah1elW>WlZ)OzrQk_1=2* z6eqNJj!u&gOaM^}npg7a@BF{#5*RzX`@)MC8C15YV4M*n}5u|=fcqY~p3I?9$NtxF- zrQ?C)4N!m%P9AeXoSh?G#@Th(h2BcOLSXS0I8h_|WXYnETmn z>8V&shSjUSRgavu^>^I@Vg9_Pj7D^LuK&8;RSl){vr9waY0NC_HM` z+!b<3qYh4xIM7(2p#2-2ZGi&J!EZ&P==~g1&uOFEos&*(okMd$;b>>%W$PVyFW02k z#Q;A4bG!R=AS~CiAZ+Ro<(`&fEv}v%@_fqoDW!y&&!q3Z_4EWmP<*VEid?E!%9bpw zMavYRbb^T7FPl&5q25Q|F*7xZ1#tn&VJa6T#~CmaXH2*D>uwk#8A4=w<0{o zMqi>HFTJw+p&2D^LbT9}hW#tYcuX`0<^aFK@pO}3N9e3>Z>wuSo|_wVK+htRPw*g4 z7dsi1eYO!}bM#qBH$$INLZ9_@Vq5g~JsT#0@O4C(<-4rz?MYVJ5iO1^t4W+-< zeX+|%_}sT+3qCAQ%)xsOq8(p%egnY$_+|@Y$p=cr=3boi#Ry!pc~R#<-iKMl3t^I{ zm?tI{pWl6;7XSfYKMiyd85wHq=bnni12}_Ho16-=vLd~33G;Uj$4swYxwmLmKgZ)OCwtHkxCy@p3!EX!# zq1x_mr&wekArQejFKKGrpxA*p}$)mJ}@NAq4lmD6~0L9^v;UvQ6;^(0-4Jp#0 zcyqHOb6Q@d;|=2UpfL{8d>xdPL-~d=aBf)uH(;emZ4CpK1tVmd_-HC%G8xA3%5MM4 ziL4Z9FV{~eFGt%RO8@7PliZHO#gDSOfACee&ed5MYm9SUvQ!^h7>kBSgn2S997eXg`QS5D49U>48R~ALvtFm~{B!!wRNwwL z7A*v@5jKHVa1w+@v_bd_W&;CCF|HCE`7T+%)hF!OB7yS(x z7nNwRoDU+sYgK$C5<=jkvoe+QvC~3q(FX4~&A;fs{6tvGt7^R(6S1mRu2p+|la1na z@%=DEKQlaw?;+~5B4;f!!fUxd z(zO|+&bWTfbnv+j<%Vlh!DXgx%DyzjZ!wL;7lqr+*bJ!-C!rj0rKp-*rji=FCy+Z5g&gr7(CZ^+1wdqq`kKaOgV*q|hMNqjbl z@Um#6nxBf%Mhv*thtXw<_UtrImCC-_=uPk3O$5y{r$r?{C(Vi~mA?*kUO%$m{clY> zc0m7QtA1M(~U15dM~XM_}diOz!T=ca(0r> zxSesm&Dl6z5xxS;B>2Na`aLP1d&;xvn*YR;krZ3AQ_X*40VH!M8yqIZiNhrwWb5#TeHJQwh!Py^%H8E> zpToolcb|TeMhZWwf6~u=bzV0;DNMX|>9?yn`^eG{EU4WESn+BmyMRWtDIrwEX^R%b z-muX`q65%+ay3%A*+{iCdRAYs5WBBf#hqLddi?JwOwuLG@Xl|!2J}?kS2Z!n<>Cpf z8NfNO`2i8{ChsgT(5^G5tk9q`+H7#*PR%88SqUl)3>r1q_)|Ffp^ztY-0pn=sjLVh z?7wr32#ivk#GZr@)ljDkOcjKrZMo}rl_Op`JehQ^o-TK>*y?!6BlsJllea<{J>Jo!wZzIXWe zl5VTZa`yhiC4YYpYyA(((fKKrVE?H0J_KrwZ3IQj($9B4%r?K(-scroz7TR3IlMSM z$Bd|Vx(v4i=c-kn-Go0C`h~kPvL7(qye^*@t4LG?^F!F+kKjYCLAOZWSIJ&-qTNq%1J3A zd+@~5#C_+9+fqspK1;N7=kwfP+pv}>UA%au7?MT9R3Gr8Ds;+~nL#{)u4GN*I)9%F z#(~ee81-(FRQY-??RjW#jG*DLdv+EwW6(gTs}~2Hy(f8Qn9x;RQ%2b`%QUVvOE0=2ghsNdvmlDwgn~0yLuI1V0psc%8o!VJJ zuxU1bgeGrpn?7(Nma==L#YOrH<~@#+5H93DqcBaDQ(+b=-rkZ{)ioGpBMO{7QLz^7 zcecJEEtf9wPNtxUCw{X*RbCM=@0o`@(SEEIb%|W9DJ^Bi4~G}Zig2ayKC_9r`a1oi zWdBvqW_%!{Ii)AT4Nd(Wm`iCV?uvbAfF~lyjiAl7;LP%bgR%6B;pl`3fd=r)C?Bz6 z#?#Zc#o-e*TQ?#!MeW|(0@}6NXS=*Wfrl2HJmjnF9+-mbt1mB4-%Pajx0GZ97<;xK z7fbI(;sG4T89MN|9A`QX;rs$&E2I&TD$OxMt_pNw9z>_6S4c*QuNV6Xpwr~I0M0J|>xq#0BBaP6 z-;7L9StR|zV~;5~9du7mFX&r?>E2-oa^tRv56tE2*Y-;g{}0VbY0v0k=&1$L_(31w zZvY)8=*O$#i?M7A-<~;dWM0AUUbH9Yw(rvfD{#O5#*LWx{n6oG(hvFv$A`zgJhe={pPczglpcoY7YYmb`KEcdq?B273&+m zKi5=rXTO)C1j3!+%C)QBxxck>u$P0QQ*_b%FQWO6>5%`SSMQQyj(MSf?UUd9*rwvt z^VjyMHI%3+(V@-I9RAQ&VcyRu*?iWk>7i(|*0XtZ+2QZJdcAG3ENsuay}haCaS=Z6 zsrdJk@G0yUEsH|6$Ji?K3Rj~hdhf6bDO1U&HgaeSX&4Ut(Q z7vkI}k}aErgj>3Eg7xvS2(cNDLB?aZ-0QQ$F+*4=Q5DEKVl;P5m`%1@y4&!#@F>Lv zuU!XwWH^#C#qNd7TGJEx);}*2|E$S{m#E5;MB~1n@1OOW7tq$?w8e#)utSSnnpF5< ztyWvj5~bxl^8qwwM;wuVlhzS8OqLlO!8W^OaZ3UZtF!F=KYn~%K&1RAd%6}UMix8; zaD<9B7HAAU<2rafA9#EpYN?Y0k@ZZCMR6jC6_BJQV~*UVNhQNuOrVOdMB%-%U9wec zY@RLr?0LBVaMm z07glQa8Pu+&^~XP9p(t%6)Az4EtNi=T?ROho$oPOO*@q2^yp>N6YKcDmi{&U>1kc} zzOwDee60DaAZ|T@H;(N3u@g1~#7Ef=?=}6X7QR)xUQa(q?r;kqZF(-uN^UKBW!NB_ z@saD-c`p-Qgu=<>@L2aSZ7-6H(%+M25VaFF2Ol^&Vdrz|@z6(sQOdB~-Pw)pBEj?E_D*7wW>tGUvXYjI*`x~2rkJEYVD08JgVXo9O zy7Ik8w&#av33Cn~Q2M!qdFE%Fg}cYHY@g+~z`Vu&TYw=;3&SE!@GDAsUI?Fuh8|%Y zE^=P&z%gL(wzhLw-`Gm%p~de*Tr`1m&(dN^cmMQp+86d}y{}#;;nySD@s$t(P$y+F zAc_OH`*l>0Po?CKq+onE-9DTUjON|yv@$99A8N)nzALdvBf2Fba>@>eTFv9VB^hi;_ts} zudbd|!MQA>xC?2i{C3M1p*Anoj<7A4r$mWtQOzEg`|rTq1Q9h=c`V1Qa;%Xga!RQP zeAq*`_2o(W=#HuycJ?C^25N*pF7Nw)TzYKY5qr+Xnh9u$i-pZK{o2}WEPF9l;6nf6 zXP$GY?2ymP!92OF9SnOL+q57Gox^BMQGn#^@E1|? znRxXN9E?|fSYZIV+S*RK#AGnMc;fgd3gYSM&9kneMaa3UE#B~|OK2afII-V<>^!t8 zk*ueug=aKalw&G2zp)SW)4Tn6qkNgVTijUkl=Kw%61myvbNPlnNtpU^b|-^}2VkUE z-LLTTeRS!`rRSI4z`OsQOPOc$sBX1`AhPUjbIuyw&2^HnHp@RM=Ut1@Rt8V3^w1o$ zKi(b|nvHP@|3{e2E&Y27LW){nW?qrH*CD++!&!4zKvVf6mwavyOC@(alKu9bz4$_Q zHoI5PM!gLRGK8lB3Jszp%cp-*c-`0d+eZn{eIawkF`2V@Ej)>cg7q@^;de`{24}SS znNw!?-Dc;Rizmo2Ar(~{={yr-Dm@?LeM#@AHCp_q!h=>Vz3Zfl9Tyt^u{gMsSGT*p zmNDOh$DTMo_GH(tT$~A_OLiob?mbI0_>)m^BZAiAz7!BfUdyvLhLZJbsqmZ#E!vF` z@|U(}L;lXV_oi=1V6R(zNK$wd;QOI4kjGDok2YF@GuCH28l;o z@!GT2j;uDK@LZ^_RFnz<)*jUEWVy4Ei*2kCK3F3UM5C7|;8gKB@i?;G?2-KrB{kEu zQIbb-bXkO#`~C0+<$rL`g&(B0983LE&AHSanb#7euA^}it6K(WY<`vmi(Yf6jmT{4 zWewv8wyD%XB_*qeGK!&v&8L7kPHP$nA3&zHQC_lpGPJ1?+z9=x?G0Pf?SFYBOA_~^ ziYM)e6p98<*8rSiPiaq;@H1^C{d8T7GlJtW#F_f|IFKg&_d6#usjyxozOo}TTH2xG zWWn%U$AzXSU;}p!pi#Sg6i@9bJKZbknS?LM&Q^k?){chidARlDCrQ|OuVGJM|G z&4HdkI%U&mZqrwPmOk^T`fmR*QnU5Im^(TlhO!yZwf$}~uNvD&T$b?kUinHN+|RE? zz@L4)vla`P#|lgple z{f(Ozse5urHpp|2AX6Sg)k^NKAjio6I*hJsibkR(PdVAiM+adKC&Lj2j#1jo&b7M_ zn0|JO*voG+5=3|_}7kNYAs20e$i zo4!CC8qotVBz^!iaEG(jb4r%;PY%E8bH0I_VP$@m6WW!_cKFGErB~_S75{vrxn#dr zee+){*?8Zk#-y{9*`VU!S?O}=FfPhSs6CQIQ2xfSkJu-}W->ph?TI<#5@$YW4b~lv z_ssX-*492dr~pB83X8Ib`5{{y>j=lX_f*_xe(Ijp^)wg=n`=*3eB=D$dlC|c=6vh^ zy3CPSCdt&Ti6i}4%I+vK>;3&qYKyH*>4^u~c3w$C*P`X#;IU*SDU1;m6?7;jG3f0d zF!6?8e14Js&XPK#pNPQGR8uZ*m4&ca-Ybg2hT#_y5yp1b>=RRS#6?uU)1zre??!Gy zr8PNZ*&RDN$;7 zl5VB3{9t?M#Z0MY=_DJ2Jv!Oie2^%(1dip6t<{}MFdlbbQ!;0W zXYkj~WzL$sn14gsyiGn-t8li1s6N{P6LT9Sdsu8>uOv)lcjNzsiMc%Cr@Y=gD-kJe z2l=DhmM^9~6b-j?OOKdyo5Eo3`4AcZKSHIs+M5=E(fl#YFH%B?6EBEiGvU!f71Y}4 zWXE(V(?vFCkrHy%xVGt*Gub58s*;_vV+o$4v5>EjWm2F;T6Xs`(Xc!GiYK0?YzVg) zv}$88cnv#C(O}I4CP_R+{FDWps7A6SUsXH4<*5h3kEi_)AYcdc*SJ;aT1_k>SEwvC zUKca_DuQAX+lpRSVqz?U(Ms|>BAr6kWL|X2_jn)$wdwpCZWKRLup#^Tt!vJrhsg9A zDmmQV1~v@@6Ve!3AwVWo^a>~L4&Dk)Dp+)$U0pS&MHh{ehi`hSX>rpMTIQ%2L!5s=0 zVL;x_PoVWG)?ojCLcOJJ;2nzDNvv*fq_rvq@)^3ftxTV3EYej|o3 z5=o1((scOW`@~b}s4LIe6>G1hx`hSX?f6BaIdG@~>xyKD*=k~znL1=rgIw6yOsKN| zF3FFaA?`KN_@Xyn+uh!ECM9u0l$ANQes+e-;{qJ1%NGL3Bdr-j}tx5mfWRyyWl z_W9@WPW>pmAhyyx!c;WBV}bGMIh($o{k7t{+}Z@Snck1kzX+w~r|k(fAsf6PdMCtN zTa?d=_{|#SBRl_)@E;-l-11VLyxjKt_pqjG~Foq57DsuD;=QSpYPU9k+c&CaeJ8I#vk_w-SvKJM;qk_=xZ z;YF1bV}q6!_g7@YG|4u?+pa?#B@$AFx1{!U{Gy(}h@U`HESb=adW&!OOQ(rJ> zpug%bsd4&;{PwS3dM{4Ud@D(N3Q-3(Dfyh+lTfjs)15K>9*KC=R@&tR zE3?}Vl}?W1kohAJ*=uTJ;0AlePnxEYQe$sE#GwlJ}_3&nNpYGqU8HWV&NlqSfYxXol^_GuS}Z1N~Ge5YL!?@)z_``zJaWd=;MY zlg%!*akl?{af<4U+L*@rVi-!30rL&Zw#8&<+n4BIHm&{kx(wBfPpr9G7MQq1M5F(Q zcnHV1R3lyDp{&3(=76~58I2`9swbJzCM?3~7^7xQd5Z{v> zj0zFfkda7iRh&KAASHpTDp}{E$dm4^fW$zD<8*7~@UgAZR=-KM5=CBSMmPphF8H9W zj?)>m60%S;**u*I+HiZ$YpKDW)i)91~+J2S6n-n^#%Bw?$%AxpMoxky$qb!*PnBv43OtEnwj+a>>3$G9Yrr6k~n9xEJV1WZR7%(M)B&@8Ze7?VZ?wxtU zc}JRi%HIFI_y5=X>{@gON%z*)UQcsReS_Mq?Xg%q<7sU}9Lqj5xP)578P~l4X33`;P1^;gvgy@DWC{X`Xp4^bu&HA zQRT5}F_B0AKgc5Srwj_`)%oQ@frpQ=<(w_S$VS41eVqPi2&0lG=?-LdYD!R3q=zyJ zNi&$``qHujsAK{tol4JbI$XPTT^LaQZ~C9~p9w<^j`4I0&6$7|PhM~Ejo0y!MQ#8o z*MtC%2-)ALmS9OKiLh`D0WE{2L;@uvh*hTW%00x3m1}i-??u?7(Lfkih7Ar5kzp@< zgQ&9f$}QFDJ~j7BOrwQ3({r`6vmp8C_MLTFQkwmR4^eMBFNd)tID>0pAmWd@CPBjS z^NZLH{v*G^oernRoVb>ZmKh~!UV4W=eJPw0AF6*ry7lIPD4FgC&g7A7Mr6x*kBa%J z*L30fv8n$Kcj4@^`{%VaQ6C>8&Ix$slW#9(VN`gmU>g2Efo2#C?vt-!%@Y#lbLGo= z0sBdg68YuJT%-~|t(4aVnk1{HGIr0=g#P(IGA2iwS@*kCko)r^&LM>g5e7iW^t4Ak zq$TZc#STytLRQIPUmj`Txe1vtpIDHvgx^SmO=^TNFjmZ8^o`ddYv4#!Oa`ax20TYnfyby6=$7V>Rah!Y zlcxVt#k9h}VwBmd2=8b%AsLnEYPY{R9AtB>Rnx579%}Zsw!ZvETB=5kK?`~ePdE;u znj}s++u**ZSC$1}!)e8EdA%(-TF$%(Pc(SJAwdnyYnEj?By;{Lne&VCeD6*@gc+aY zx&HaaCki<#tQO9HzdjTvDSMIczKO5dOs|Na3srOizlmT;&OwUkiqH{xu*HI;Qj?w$ z*jgehU^JC@5QJz1Ue*qlJfWt9V?2pOj-B8TP4++GG!cHy@TuZ65a`o!I!V*Rse6~W zFVG>Ds_UXMR+|=y6;EhVqT}JYj7qiF>@Hj~EJO1L7GLr@qGxJ~+3oFY&#D=YXj{}U zn-M|)QC(*{6dE2agqZ;#GO>i-WKM~(pI(Eq!ZhMT7(>id6DJyV#(M}F1to*>9E};x zab0mnwG79BT%^R@sHaRzclUVBIz7#W{ZZ0|4N`wpB;XEe6_Sbq;^Ay5g6Q=24_ecg zz63((g(BB5j0%>_WV(RsiDabFJWs|k?vZ3d-rDY~iIGT%k<`WE#|~yM=bZVC$gwmE zQ-FcjOyf=zBZ8aW<3zk;CH?e;PAGC6Ue@t=wwjf{F%Jk+X?zT&)Peqz+=#z5wIrwb zt@8c;rU{Q_E0tV|RtqzvoAXju_DaCrD7y}*7rcQX6A^dXd|Br_py=RA4nX`aKZ$4s%E(Gvl@Th>s$Xsvx?Wtx^mKFsa(B;U1?R1t*Iy2*tr6B&c%Z1 zUcY@s+7u?EjW=CoPuQ0|wJqF{VKYz?23W`Sm2fi;tj;*#DU%(|rw_f4s~ZtqVBh=Ht*7G81fZBJiOl3kpikt441pn( z4IT_WI4YN7Rmt!v4nAb(rb;_UCQ#PC%aZ2{cWN}WtK`<2=w|N$N$c0%)?Un>+<5RY zOS^@`qe?o&tK-R?|1Dv$9Qa|d2|h>a6NgT50B(sfk7hZOoXNtn8^)?a;)KUjc4S>z z*Hru#%CN%MSudn;dx{u{*5Hd_PjI-|2 z5vM;sgmPNLNl~R`OWF|EdL#RuddP z`4{M>O}TPbo2Kr*hEj)O`X;sw>xzSf?LC|3zHRy;lu@6 zS)-r0QAX5`EA&ET-0#5-MIuo;f8l}8Wm8Q>3wlk$22=QfNk*DWZb%wMF+)Na zsnFP{f|{dD`WVj7E$OIx(A0c4oIW^)oal-BFYBBhtKE1 zUPzIE0bhH*dINWU>&ZO8ow9=O?%#>mZANsF88PB?nuct4uSrBr-pTe#Gsq6Y7IJK{1q z7bCXahL)aEUmn`sx&!A+I$S;MmbDoo|bQL*8v^1(G^icSwW9k$e1@LykuY;$iI$Hu1H0 zdV+F}jsi{J5}0eh(Yh!x{8!t&IKoiW+}y!I%GNpqI50EcKiQri+-vuxso)u1Y3X2TUpwN zp)84^cBbAUX8%)sBHL5f)uT0;CwQ$;S_3Ft_S|j=Oh6?XfnE|Ielo#{N(X{LzWGiG zg<%hQ{^J7$obVN~PTx3?LS;MCu{s;=KS2(O-WymBw)bbKL30bYZy)R%kjGQhXCNhmOfvyLa+Ucb^89t&K~&Pu+@FY+><8S!TUYl9o=tGn*(*$#!umtRD=1!CT1hu52;O-f zTU=XJ@V(l(M@JBsBY1;v@eD_$^PJZ|`~OV+ZIeJYW$-=HxvriwB0b%p+O7S41fYfwD5Dyg z->3Z9e&k69pUyO04?X)6nI}4!zJG6je`SSMWQm>4dr$XY<#gzQ8Yofn=Ezgq|V4LjIlO{i?F}lL=8qG5(LGk>JQk@W1s>oWcos4fra-}+=uHMN2%%fyS(Lf( z73vzc5G(ejBuaEIX31QUC-DLO0~#t1ZZwSEUPhHKf-pwzbfU*-P-)8?f;X?7^YcQp z+9f;H{9MSUor&#rYP0S4vyb29K_wz=9R{HfH}%bh&M^jCcO^bOea8CPknB)S!Tbh? z_O_${c=?|P>CD|blpC;r&{~xafoKknLpU8tCX}Q+Y?iaa6*^C=eR2{VpAxdDGN$`A zz7bv$-a>vU$gyG}ZLfRnicg*48IPpox8ZQ{c`1eJ3p7hw1X+7_Pp<4=QHQrTbs``7 ztDeNcpi}KtvuzD~oCvH6G-W4JvS;sXhYt^`m-+=qqDBVGVq7(Sk#fk%X@Mc^_NCrn zE3pjsAEBdlRv+82ZP)l_R+csZI|8nEb4g&XwK%i2y|6c!$BfcPix;l9RlNqJ6|Bc% zF-^&DLhXACE2CBYaX#VUxk%;OLcVY)*kZ3+PjTPg=%tbQa8`w?C=K)V;P|l9+uF*+ zSweX8>Xqdcy{fWq)G~3TPW$j^V_g8z9kDLby4C*8eD*)c+xv5@&tv=dE!n?@Q57~# zwok~#E(Cv?;gcm&#!(2oL%0dc`ItZF5tDp6&mRwtMTJO2HYxi-%j{%uuu)Ph{{8Zp zV#50`EVyNYLJD$DGc&|2O7Tui9S(gJBSx4)r%0MZd|NuvtLUMi8_arBH$i(SSccjh znD!1)O6lu-40KryyIbFHE1_F@oN`y#);L68B5m*Lbfyn?fA*=wZ)|o;cvDY+_TeES z?NXpnv@AkC3x0PK2c7Kio!j}_xqLjLCerL~UUN-ikAgWpynH!zPF;OL{+XHNe|2i3 zxaHSA#?$pkgb63C%@}8!>?UcD4T6{JPuDi1@cQIm!oA^$=j5I(Zgw?nA;=jgQ|zY( z?ccO8+9172Ko-9NTyt&P>*%p*KWq1qG zYa$Jz}hc8q5(rSM;b(ca(E=#NXj5X%B zm`mO3hY3l#XLdgCHE!-FnZ`52wG`7$?_bBy58S8rc;e1`wU_C!@^fU)m(@Il;*;>o zPK9=DPUK54FdwrUwzwRr`OtJUPd9{f+$+`@RqE+#&pAPQwnP9^%u|AxT`&FVw3ck( zbNVr4HPhd{)LTv-{J^l=iXM#`r zNQu1K_ypp|0jiyJN9#@(3~Tje_v%ql|EA1=d2JBx(FDC^=!muiU$^w@_+@*1$CU8* zvilp^p1myPB$`Yki)y#B+c855*}_}l--Bo^WoA@E8QYfqW?*=?TlR=u&2HMub#dFg zzGq{jYSI&N%#e3~c53SV< znM21`$fN#wHV3TiW}tg~oWt2`SC!>ic6H_S6!3IAoH@9J0e26PzM_)p&j+JOvp2_n zcvh}ocQ+oA*2=5h%r!P}oFlv2%6{$Z4e*ahqPzOJeNb&c?N?Q7l;4g%TN#K%68CTM z&v-&?Te#>w+t46mZI~T?5)tiXUg5w=nQC_I2@zfmdfs>AW9?amH3@q{JDkVV!ls4K)*rd3j}V#CQLbRavBEHb8tJEC<{qw8rP zxJx~iA+4M>P7gboSk10Fi~n7n#jLJq@23ZS(?lx4xDp*rw%%G(dl#nId~XLMx*EpF z86Nehku%vhzwnz|;9ib@Y%7IDoTFp$PV26Z!*EYdKb6)fY+C&??!+ae>8$D!xQAb@ zNCGm+C_+1aa=1qTd&eV*D#s6RD0$hkzlUVeKOl>?*?2&fE|4P4dd~`($X8A=c=7Pv8T}h(ki0e zHJYb0codcqn?2t8ujrn21f5l&JnHrj#x~al^2KBd~4l?QE=14>?ZOGv09srWUF6HnK2eJjTf^3F>IkcY zlyH0cP%YcGR_7;C6qN_5B_7tvM?(Q)W zr{BJ9bTau8f7y#-tlTf^wm2n*>P!bq3(45%<9WZP_w~=B(=GK-Up)1dQ{P`4)BqiIjJ*0x5;E)+`yAsZcRYPNJjvDv|}$8*_{1KGy;I>c&=Z?(RC zbsY937eBN(Gb3R}!JUy0#s-2;r(_dn_E$4t*5K;p?wf;s%3{jU{PO&24psVKTl)43 z51D$b0&JM#^RCwvBJdrLca9Ju09?HR6sahAHRZC;xH{5^dbRpu$C%U@iKe)Bizl9v zFMp4GIpI(ExPAWK$xb&^8+n@@LagCov3zh!f|!kbT2doyt`W88N>Ny8CTtXsEVKtT z^Q@aVkY5YsZ?#ffUrR)}ZwS0usVQjsj{Tz;Cv-ZxarivVjVa!sTEF$$+IqT|Mak42 z*&9`E^45ay0fv3Lxx7X;(tpr-3@JivL$*`cCuQi7`FkCyRK|)KqS4}aiW&NOIbNZ} z*sA^`!GOjoO^2wP*CtIA-`o^VN@-}~%Z}~QtnkP7S8{^%2a9lGCaqpe>2ycE zuAbq#i1adhs6Tt3;>iuB+d?s~g2f@5^B<~b*qVCARDzF)8DD5eFxLLs*lc$rWbFU_ z^F4p^yL+}6$ZRc7>^hh|x%1#D$7u3s{gFYs;*g;Q6&{?e6W{BSiqI%$~XY z)KkO$jq5?JCH_4VPx-7kVkHT4mr$cUYi&QtMx#oHba)GLz0RXUMaz5pR3`~25&ZV6 zyDD*2kqZlU1kf7pF34`RAG5!~sZ1OrB$k&C>9tX8M+@2He&?fhH?|TRszoKUddYu8 z^Gt$T*9Ff=wb?tg53(Siy7bN-z4KquJOA?3p^Tp2B-ZqMv$r<2SSY?ySX{Bj@&uJ` z6gxC*yRnYSLF9}^5h(OO-~I@+pnFKdrkB6z_1j)Vao%4J{|}}|?Jv!st_=)H89m)E z>Mi_au-}e z1YsTc&DOS!43dW`m`_iug3ge`Wi^a+^mH-vOQ-wx>}}F|ATW=!iKytnyQFipyQimJ zgqg0X{WMkJEFbAANCYGy!|9j|I&r47zr)`JMJUc}WAxl9+DfUUTkm#X5qd{?{d)-v zshk@wasp=Hv!1V+w@%A0+PH;J{Y|>tvMj#eqW{8wF@aw>?qW{ax|0Gxle390g_$?( zDH~ibvNlYoc{TA3He8$#jdoY?u+W5hV)9K^D84n(n4cscf}#XQBa2IA{sB!y)qUA) zy~`Gq_q|Cx$7ZIsdAu3MV(>~KGh&#Q1mk&WGKfrj6AkR_sDow))5$xMqhOzxM=NVp zmos5z_HJ{7HUf^JurRcT=4s$(W)zxm*uvdVp-cwzv3Ub?QB)yN@`ARgghyY(1$mC3 zT%AJAPp0Mzs^!wT6-W}-PE#&F9Mn)NQmpqe^u!l})Wjh3M7~QBFqn7lg#xcqKd5Ch zsizGE!d<9<2K!Slpus~;gGkZHi@Zy*<7 zH{filx$Y)A00hG$KNn)u@(W3mRepV%`{342QiqaU-x!6S=kn#6>lE&9yGVl9c6XY( zi%$3Ybvw5-+Q7SH+-_#HMEf1ft7GCORAVzjYnb3x+WXt1Zuez8k5^ohJ0fVe4-Z|b zkvHAm!J+t+=2#g&f(*b%t?lN9I*oSwI!8P~kyTaH4!TzZteFJi5!-6#tHeZE;gl|p z)iebtK)YtI`!LXG-H`sIC*%BmtbrcjeX0WkknYqmc>H~~_$yN%qGOdcgnzYdBeVyL zq-(?KXN*l-dGE2rOLD|B*)#6{0J#!z5Z?oA~7F;G&rT0Kqh7Y6u6ZeZN4j z6d3y?=%ea^bd8-IB&DABaiDE=V#!~PXV?3*AH^a(8=ubf7h!QKO@e>^u`AR`%my#I zv7}xm^=GBZqL9DjAhGT7#`T-evVBrA+wVMkkKu^jsPsSrLgcdmpyfP*MGS@_Ctem`FaC7##2HZc<@9jG~(ZS?^ zr%BsprX6pr4`#;tH)hMCb}bAblU{t)2$p<&+!ARbJ{lKRM3jR<1mhsTL;dB1jX&`8U18^g z{{3g=r`biGV3J_i;|e881g&Mw8%57yN=T54`d*lfr0I;*xaqVylMMlq(!XZS#@xyX z!qu%6nh4+^7R-D+W(b5zy01{9d2Ln<_v!#90Jy-{;bCgmi3b-C<;<_FCVqts;5&-a z^Ll4#Ss0AXD>09hG5s?0BoqN*kV(G>;^2r-iuB^a+Q;3j*z@|@T9{p=L;^Ie>$C-h z9n-g@dL%L08($yW!dBiLpWJTW zZz$xVw|u~R5i;PhMGG;W8#5$JB?NOK?UGkFKb(P2BWLb^$>O3J^;ikpZ!5m-xKTd?QI!?E!t za;eeXI&b9_lRI$zT5M#|1%TPu-_w>^Ne@?dYwk=Ui3COyT4sCSDc0p`L^uFP24v^K znd)HHN-D7IE!_7Xg3xh^l-g2uH`lq*)&n}3B^mLEE)GBYZ|wWesFZt$?h}((*F`6# zY@k;Zq4U6tkBTKL>;fVMkBf#%RqYZInf%fi*G*6O2XTP;KCr6T!^!ElPg*EZXFTun zvQZ22LL){!Z}z@=s1bU>(q8W^!)dm1e6u+0(y9l>u&$~|v$yG7*ISNrmisiPcDg^s zB^w@>@B=qCRfM+O>7HI;GFtD_?&V_)aJsX8-bv{Wr0fvdfW0{VE+i43?wezzJP#gH zqTK{wFTJs29C%mzKNyeG_onX9PyagHy(QcCqhi+IQMfyye~%m_3$nq^d|CU$YOu3$ zbQOzk8l#h_himZDFO4LP!{{-W2|tgr8|#^I(gYBQVOyG^N3K*`jbGh++gl+}cYAZg zG=sg};F~yz2^SRcr)~#xq`2-M+J`edU3sCclyJgsW6L?ygF&50gzfFx5kN49asTv5K#b=8oV#JcNm0T>cpg3gK(W7MxAw5Bwx-DKv!^<5-rj{dUA|Sa7jrQJ zYB7#I=FD7rJP&G!ndhK0@H0k#s0Q>2N#ZA$<-Y%~be`WJ?)#l43^x-BY>)jdebL(| z-xYQvfd`SZVH=V5_z9qKCnJE>eZG=72@lEx8{#HFXXV>GCA5gS z`|u%hA^pm;Zs63HC;6-Tz5Rl$koc^B6W?E871{{W2iF0klofz0rQcT*?$uy=exLZS zv&~^-QG?1DaHORi5GpJWEcu$F3J)vF+gHbhNgkLkmEvesAMyhZU=q?I`V{6N{t^`K32_^b+K9Fp7Fbu<#LG z_$scq{u_F;tLuXd9cgH5EXMNB<)v&_Ud8WfI9>&zFfK$;1e7=S`tG>!{_%F+ABRBX zRoME-B7aT-AUnO6I+x}JTu*Sjw2>+(<<~}H1(?Y7T;VM#Hu>&BnooUbFdQKOTZFd& zL*8*(nQgQ(O+tvai(UgN=~}jffoB+HN;5J?J!l`r5Cgn~WF!*L%6`i%!H3>>^9smuAm$EQZCO7jAQw0B+;ydA z34$xkXnzJ?$=@&C$?@Xsd~fCbU|?bt!jG)eBwnvBsa0E(yVx~cJT5wsrFnDPOT}Wf z(1{VFA@48(g-3X%B=KSELb$guYG+vXOxnogf4kSChd9;K6~ zx_ytJs$tfgBqH1!4LUr%Egb4`rQ|^z1Sgpz-&*bUjkLQD5lN%@DhX5yl5xsB`tm~9 zmx#zA?+RVXqVXhk{;HqjyLBDXOPwYfPPVQMI|D3FOLYQIs=<^jS%z26!o1mt@&?ZZoncXrw4(qemq)z`pRcdPyhO6pD>kx~DE zjCzwCgpae!!J}f}#k5LF(FAa!iH2|vBKkuEt`LrQH6|g6%yb4+QURufsV;UOUf5gDh3p({}3-fGftb#(}sab}ykvi|t z3PblU;ET>BH;jCzTXaq`h`zHZMV_~5WKQZY!tm7|)|tKQ&mc-74~_!>jTlgYt4n4O zko<8aNiV0!DDLXDgA#{nw-^sV3={ac?QjrS!+yRh83MX?xY`?g-Tx_7ypAAL0* z|6Yy9Ps^dZF4yA|w1Mv`yw4s-qBJ`>mPH;7E$oXLm7OjiTzK{BFp{Fs+lCb^9MvS; z#EzaM+m&o`9I{{>Hso-g*KjUT_?*6##MPvEofL*A&^qc6o(t9AssS2Bctwpt`-^Ve zR9iD`+wF~3kC?z(+7z^eBFx882dI&r)GldqxJ92MLV7|sbB_S=*N%Vj`+yo8#nv_Skp-LR{(R+0<|3`}lB^QJdyz zamFz++*Ew4`o5o!XtJl1-3_450aEFVWn%=VqpsEI=M+&Ca6gAP)=0q#s0B<;PrkuJ zaPw@z)pm@L-QAeJ{pHd2)}_5TjOJ>zx!r^BbNdIW1!TnTZC}5ZQ*JJ-tSv~rhvw;@ z7=hgx+|eE;?VSgM#f556Wk1?q$gi{@fS{?t^k|-y%M$@NGovVlCF(mh$uR!B*EzZl z?i4UlEEOpD_WVZ@;_j{Kn?+0{{?%1ZBksQAaP@$3C8{_)j373I~l zh1t;3Ym&TB+j_r{^612e@;$8EvqIz`q|uU%Y=zy$yGwftX;8O5SGA3qkqt*26NnT} zhYi`}CV2FXbd14F71%3FuzLmK!;0Gu@W*aJB@UOmQ^*l{ZwH0)Kh{R3<}$y$zX^jl}6Jm;;+g1 zMF=TCWtW(8?ouCv5x9lYT|vRz5#}fXQDzB_MIC@!7V?HOP*91KMtjbQy|Kd2^e_3D z?#Su*Dm@~5VI9XVVi5y5gUNza}(edK%%zSZ{ z7=wV{t;hZVxWjc-cyKbkDC}AYXXE+oz;5mYM1Zb^#ctC42j0ZpKW*^qS1>FY*lN{6v3nPu$;vhlvbPtNORE zYk03O4E1!L&J+cfoKQD#^G<&eUAC8}2W(v@0kX;Kz)M?|G|L`+!yBMfw1d!e>$!uy z&KsgItQgd^@^FgYopEV$=SQDo8MSrj%0R*N2AHxYa* zN1~mc{HZj+q2YwN!BS~&QkOdIV`b?JT3GVSyBPCMz|a%Cq5mv6vB6Yr}YM7Ge+1e)(2I}YJd`eZmcY;nsw(ON>u3f#3 zI$nAtYSTC4!+v?p1Qh63t>@O);$YtqkH+2tj<@d~Y^0QAi~YQ`LNx|IJqG%>xNh%1 z7%IY4*cz57t31=o-TgNkSm?VbJ+tIBRchCJ_wS-M&gPkx%Wp8yac_ zz6``qV4vtoZwxL0IDv@ZjxUxa$%t$0AB0XiW6iB}wTk>hyLuQcEJyXCd)=UW{cW;o zp6>NA(&;;Cz$e+Xcows*;d%Bi7;Q7cxF-B8_Mu~l<%#N0-5yYreTLqrIdadYJi#8b zV$_5{u&kNaD`Jg~a5e>tSxcz9{~B7b2~1%+q#LI=440O)kB9xc_cq6C!@=4n@e`dO zsb;MkE9<0Ka@g!on1Aci&I0k_6YK6RCr90bBcrs(&Tn1jPUCsMPF3S03XZkw2V4oxxiALf?=4{|izaqvxk1u`F%+x=u15|9i22l@7;c6PPHQZ&*ZU=dx zZ)8N6)_Q^Fe(aHQD+aUcsIvK38{tvS_=5U+;t&f{3Ve$nJ@$Hij$W5*cum~-QJ!P` zyiT+8`%@WVDysy`ntgXTK%}}^$rWz%i)<|@I;T8hc43x+E8B)(iad_Sv9psznk2AZ zmbx85od6swx! zV%~>yZ^{)xV1RDfQz)d9$y3({ZOHeTBE%8W`e_Eq+u_m9nGw3fbYr`S~ zTtcPcUOX$Y#6(|cLv)DN%E#TXi^zOP$yWxjXSKq^Zuhz5hP7_+NyOP%GxpN|p>kSq zywtgl@w|VI=cNxz^?z%cN54K)j?irWV;bk|7P|Q>tV)nC}F2>I0dPJ89;QUM?NLpc{Je5EJ0b%++qmY`ZuVxPWHo_e{5S z4h>KmTS|@WFb~jmecSagnIWKjQgznuZf$`Ge)wG-8C`9~9!w*wP*d4>CJG~xpCJGd z&BN8`57Aj=7C~NK0vHO}tRIcne0HHDkEVnyG!eG{G_-8{ z8%?l`UE0Pvm-b{p3E&sa7T+#Rh$`8b6qC%D0$n2$9UGPoJuDC;DY%|}kp_3D&y4Ym z#EjAnS0B^r^Q zULsT0?{jp7c`U7u=(VxH=S-=tu#z$b>an~ebd1SwA^eQS@h@9UraztP;E5zjwn znSEvD?fvcv_icy_pS2~CStvy_ny83HEd(6C+5DVcD>|z>jE0t+lCMd+@&Nr@RoA&5Xo zKMIH@LoRF-skB#i7c@{w%dF9>D`RqUN#n6l4sx^2>P)Nb55POL_b~6)^nUt`fgSIg zNZw+r_Z6|S<0aA_9dS69Y3{3;c0a}PMD&Z!?Demln#Poha*iuIF4dxcxWBa##U{)) z4GPSdT-@F0^wLQB@(K4We!H`^IJ%Fa5BrZEqAf*nt0jI)+Vu5wFUx#^`T|NQkMcb?ff$FS}v2NJTBpgT} zmDc8Fpr?~M0O1g#_E(%d9OnR_7?0$OdSq-(A|W+gv`2ovouo zJX0!iuRY$BfhW8>KBCdn>BEtE|L{IMtMef5!jvHccT~T%+2r4L-Vc?8ZMoEo#zJt| zaORjqY(qv7@;Sw(Gk5~wDxJdxu}o^_&3JpY8~LyfMq!QaKdpPpa5PWZXFH2;XF{>!tFqbhNvt9`b8hb-#V; z_cdIz0D)Ky0}9ZK3j$!Y7Vn>=)w6qt@Zl_drYe22@iv~+A&{dv{Gr$rt;bqTKdFg} z7j~Sp)xxXCB_qWL;XH+=Qf0F`_Sov)44*h@ z4+OYegyg(_t9vi2uX599Di+^+|K*plfoajg-tOJIP~_F#AdcwucMgqHNXm+$n$Yry z9{jKA!H?v5e!m{Lf9wfJ#zIdEIvQ|B#|RbOKZk1Q+AD&w{fg-@LFF>gTTt@ zf$Ny0Gf*s&S-?uoUl(-SZ##Wd1CV%)5E0KQ;9` zr+zpP2e0r)%yMwVjt5(NUm=uYzmcYyEA6- zlL_;Vy1Q2=n$fJQ++17`9NV);iXI@(0V1TpY=f8^>22O}`xzyLEJsj#oHX zSTI(l=}H7E2x5LovX4WV&@*$VeUH^|ulyXhv;AZ4ylRdBd;krMaI{j*V|pi$!y0On z4I|+DCLz+dww1cc=#aol^wN}k+&A_lo*p(u=gWAXU6|};>X>c716VAxyF;Nxi@H~v z=|RLQx|@?GDY^gf2<{Rqc!3Ab(h1wV%a^I?c%w3{)-&7)GJL}1Tgxv&^ihiD)!__F z7N5yo{i`y}-a~W!om2m%PNSen1UK6^nc|(&6uUeT%oy`zcS|Q~yl~9b6W^B3YR|nZ z!5c2!23 zWjG@=3&#jm*kqWMHOw@lG-1;m3$8opa9sEvxLS+V>xaqXy)z)8d05r6dUgg!_p#gm zJpZnym1rEv8EMe&9;V_$IplF9Ol++v6^+idEx+TR$P@S?8rSboPe|4wW{i)#o5YC_h#U!uC^Sa@Ki( zTx*(Y`OijlyM|FwaKk^9+ zPQ8iE7K`g|o}S9F72;;B(7YKg=(gK^)9iHGYz3~^q298f)af5BQ=&*jwr{#HTDJ2O zIV8N>%(28qN&BH3X$01d-$3qH4&azgVintGFt}v2W1CjT$JG|tO2d2LvYN+&5o`NF z*hT3>#q%lel2G8wowl|}Ox50_7a+NM0#)lzJq52{nyA!o>vN~2TOGAN@Ez*c@h|l2 z_yrcxU3TaPM8*Ge^!$UMT%MvRK=%Kf|DGHb-GK%a2wVg9NZP#6Tp-jW<;L+>--1&m z`!^|zNuLYTuT>j9T)=%Shl4Uj!$1#PE;2*{Uc`)D{1m<${BBKa>umeRa9JK)+54z+ ziRV*ah3?#v?g;JHi<{e?R_KQ;OG5jwx3k%ANr~n-P~*{*4hU3E3QieGc-#xHxMZL ztrwNXpz_%aXN&77Ln-*E+P6^YwD9lD+yhbiZ4Sd$`)Kd#l|cOJwcZ1EG-|xf5#fH~ zqH4GA-DyA78;lk-K7O$~IOq&05M=DSxZ|(#?S8Z>XMgY1ADH^D8W|f10!{s?oln=w z&{2SQ5!V7P^6)(DSU?C!PbLrvwH14wkm@)vucJcBFrhJYvZ&7uF61h%1JL*C$T*z> z!`G?Hpo(9A7Z5IV7d2uS&94hdBw^f+R>Kk8NzP3=mWGzOj^tKz-0{fMYa+xn8WQKz zwFMU~N(N0<^1|FmgZPZWj7O3vyiOjgEt~!(yH746JJh5e$0Fzr&wkg(fK)x z^_N%qc6vMmp|;c{Qges9y2enYelN*$#d8}QD_-y9z zUtt(Vay#V@9|_v;}P?srW6Q8sbSq&nxKfRW7y*KGVr={F@{1F{fqg9p`SClng!Rqh35#r^(DO?@u3-N!bJO1-iAA&ExNrw6lO#P&Oi+?eEBCPuYBfz7iZCG_kyRZQH zUL^g2=Y^gQv&upeHwDT35>8TN9W)8Ro!TJRT9iWH1?sRP2R%5HP*_*K|FBZoE3DCU zQy84%l9kDn3#>cOqbjM7gIMQQ>xV=l_&)%Ta+UeGaG=cSKrq@jNN=nIrf+@9ELUw) zV8Tq20 zF~lx7>6mF&l}ix$y`4n;@B>A}Qs-Q-_vZkVyE_+z($V@O+!sfy>-ryaY=+q}L{Lqwr)Rl+8>&(M!@pSX3gLBQ`>0acjo^ zQ|kc9W(&O`zSMumm--jv z{a#_ueH$D82QO@ZXbkHzcuR1wzoH9-1yS55x&?%@O!KbymP%l3=?d_cSx^^v(B~9=|>_65cztCqEb*-bX)6HSPMs){BlR2T&>@9xF2rYos+iNxvhnI8v6Ce70Va zI^!fQ$7t3+x-f6tO;maIdg|mFO=6*K>}uu_JMjj)u&+MUC1Ydw50ESShj4Gkb|P%7U!#12Eqg0LS+qfJ}gmg3nHTEVh#Xbofyg_0G@dFDrmJ zd2=2H%ei3-=X@sbqmg(e;auirB$|n@`RX*smKJ%MQ(R;H{O_l1RRZxb7W!y^p6iYG z3YQJbRdc7n%3A@Q_-xHLmoV5`T9)`^XXy~VcPuO&h1C^gCS2(I{Il2i)zlla%&dlRH2drenI4{I=Sio11zJlGmM~1Z4_hXZH9w z(&*aNbWLT)&yqR1A)Tb171ZdXYAz?XVY%#|l?>GyR}$rr#M#}$w|m{g1&KD94#Ep4 zMNt(dD3Jd=?cSjE*?Hu{AE@UDJkUiNJo}yHHL7hq1E~f{R_QK*)K{i;_i3DP;c0CW z-WPo7^-TTaBL+^`VbzUwgPl{JMPfwG#19zHbbJ%|!zF%#f6PyCNiX21r(QJU@RRh5 zPdAxY%~k_Ox#W*d{tMqP$4N!vK^mX6TCZaN#K{$O9Tm`&sb_MD zSSnaW{}r3tzkbs_DD#LTHFUOme1x!DSJ||<2*c-wQzT_6NqN;3W>bHK$OMP@cB<=I zcR?!~Ckv)b&!lB2m1HhW$A|iI7uU)R9MRpEoRjoso}Vsq=L_I>CQhOo?wR@iOL{LY z$dG@F2&|?lLE}Y+tm5q<6m1@ZVk2>Ufmlv4-OnSTD~eI zm;OpHUjOxtV=lY64IvNeY(i`AG$eB+$$80*nbrqcp=w+(V8@q0g3PiY6VkSBKThL|2(Gr%rTrK7BIZitU*(9UmET+rI_p zQ1mb@1If9SlQ5Q^2|@c}0pRV18`6z`C<%XJF$-!>{;jy`9e#uFm5=g66Ao-^y&8B0 z6v@ml^=hKo*Uy1}XgS#?a0Kh6V->l^_M7CB2dIvVHg|DS1oU~i(4YbLW7l3*r7=1f zA7&Tkw7iR3{*P>?tdSQ?D~xTewlWXULsf8u@@60pfn2s&>pDuyZ)vJ(4-Ix>BT>s( z0|~7tWe|QrnB*Ac7G23=8nxfebI?eAQMEPwZph-{Zv3ZWEm4|aPOOG@`%g-KKtAo^ z)=n#)B#G>s_qO?p^g7x&9j|wXhbUQNuV?PNJ(?D&nfVyluS0p`AtP)zZW!rq=}R_T(}W>Arp5d8(%F-zfb zI2zSykQSvY%f2?;FLsQ6i18F{(JAmW?jUCwqF|%jv$7(z8L-#!X{X$BZ4;S5j_u90 zB`(noV6@v+M{nv5_(W?^BIr=)PHsp zuj|o1XL~taDNNE9f|l*&lVg@09FubkJvyyV`qKNtK;R52nHcR!qZicJ0+Wb&3?FL!8H z?`8FWuh~lz{VL41#4GANB`^!-f%sYPLmD zF;qKJSzGPT%r6-tUFs3`82uSKTuEAHgz0<5q0%9~^XV;?0sEm`6)*;HxoNRJb++>U+bRw?IoM zMxcP#n8r_=;}#Gs@3cox5%{`jv98|Go`|8x5lk4(ZQSf9+XbH&4%%PJKl@kpK0p73j+CU;Nq=_OUuS;TQSfqq> zZ?-rKoxV{P3rLZvpjB}bhZGs8l1Zs=`pZ*_dkzd~nI0fENG8Yf3B zc;F3a@+LEfje*_VR_oF~gm&Fo?pVSXGR7H*-$sH$MfB?a(hTTL?!}YD<>L4QM0;@9 zX&)bUHZ;qv6jMeL!%v(?DHz`*r}HoqgvB8oOyf>APk0aCHB9Nwd<`YV1Lz>c6-9kZ zLZO0e-eQEG(jvN^FPP-Xo|~5h3s?I5dB4n`_luQFc!SpVK6ZK0_g;#Fz`ikg8*RHG z?tnD(UbL6KnNX$3JK$_mCIZw6Yl!(X(b&pn0`y641{^Da5$^xs?zvD1-j&opiRZsw zlm0`Ef`1a_+bh1}4E*`z!f1=r0uAA}yE{>fcw3&~_`uggQbOt}$XeF!30B0g27YIxhh`VwRMff!?GRzy#tEJW z%ozv4k)x)89-g~-lMBuc-wjp7eMS0l5A8?}+^a~!pgVhwfu3OdO#jO;ZWNu_St7E4 z7=>GWeKFvjGvza5$8ItVyR$X2lDj&rO`N_4*(ReBDsv{RLKMO+C(B`E1quc#8HlA; zHXo^?I)wI^PC3(4+j40BsXCW=-Mrq2zsINh-SoGzpur&=Amk4Tycfy?J5Y_f9p>y) z@rbmX^0fxPj*8qy!U*_7gKS$sD~53a7pz^)l%>v zeBtc$uf>1DaFig_Z+%HQQz+<&{1u%hDAcSXrnD{|ap=c&EujJT#6gFP=|M5Ku%v`3 z<1+X6Xn~HD=8)WmsQPq)xvyCqJ<&c`Ft**gmDvhul_MFro9;#j0qWd>kh}q{&PLp> zjIGG3nf{=E`OB3vk=RGP7BofoDw?k~Rp*krgoG}09V*pa#`M|jm@&HWbYQlXDiDux|Sx&( zMFj^X>PxL<{!7rWcqAfyS#gJyRIuQMjvgFN0RS;#fFoFfJP8!y-hp}uS!hdJ-twno zt`34FqlM19oQvi@z=7gsWD3W58V#(|dZq^502`(tOzbK|@qZ?KEK*PF7;*7-<CGdm7mJ?}rO|zl;Ef(F~q}4=;`1R=f0h;!G z37FgwKJ#7sm-)oF2=~mGlU_eac#PnUvt&sKR_)&U8r`k4v7Yuy;2<#GKDac~k!H8P zo~)MgR#r2G4NyitByY+!gCJ+u%0iJ1iDG-dW!naUu? zZkPQ|Kg7cC0`BnT3~1wTPr<>n7Ft{qnt!!BSdqItVu6Il2kJfkC7tf)dC$}9@5fA{ z`FZ_gN$TRv*?gpSSo&H%6mi*8ge%Yy`P@j)a|S$dYL);FGY2IvhlS7QedA`Kv*#lT z4$J_JO~mLsOjnz7h!@(_8M(ydUJg&QLgB@IGaH=KfIpYvhYcT?U|kc1YoaR7fp7QD z{$}Ej3?LDsBICu;!km5^0wHNqFi*=%GZlq{11@xgJUzYqB|1u_5Fo|5;9c43qIWn+ zBCSit@=C@sq5?ES65Gs zbojtV#;;PNxYUPY`X6T&Fy1nTd~tNm!OgjtRx*V7O@JoVb zo+SO%NizDo*-fQ1VjR9TSz}1#k>~PMxax3Gui^#*&P(R1G zTkoo2iPyEG51jiRezS*R*ytki=$P<&Q>VYQil;2UW|XJ8`Q0WbZ-GAWZ|MWCPW>MF zw12_`y2qaMM*hY#1B$l!Jjh=d7ZpALhh%yA&@gphH;Cw@9MR~B4YEZE3_=7=@@g=! zG5(=#b7C6eHfvBAf|{i`JjqNNsp4`$Sr^ZpIO+cBCytJ(JwX9tJB2!sDm{<1C^Jk! zLou!I!9aN{j%%+p_KAMHE%Czi3W>)YC18~{&Qh(Sx-+ttmH~pFXK_JEmjPx{ga84o zrHEh<(p7tD;DFaqKS_3R_dl?JUxnKUvxno~94)5snVU%hL96udOinE<9?RYaoAEPm4K}yf+J>huNN?9AfBX7Po!sq|g)JAYIy;!jQRA<@Z#Xc}%!I6gYRkVf$bfaAF?QAyO3;@>j(CcfQB zs{3VZP$TG=m`0OL5=~NEC#$d^k|XFRD;91z>FHuqC24*ghS7xoi&I#^-%Mipk@>k5 zEeDbjKQmY!rr+VbZV2oxQI3?K&d(t`&fBB|GUTLaN_jC#V@2h>pMkTRDT#X0v(REk z($7HiFgiXK3=*x*Nqh-VCpyB74LzOK)^>MDsV`VqTqVPBCiytlx)sVL0?X`2fKU64 zGC7=<;71rHN|BI$EY`$>`hjCW%@#i9l@h?G*vQuysE?dJK4vu3ulxK3epE%$moMl) z&QbQ$0wqN9NUv*PXVp%t^TE*uOGn&cG#{A`GyNMB-r;K!(n1F;ruMh@Wb7|55Btk+ z?+xUa8T&p=q4+d?<)6}5esRJlKA=Cww^W|@k2Kg3F>=8zq73{x+~R&(swOYPq3F9w z?|;IiU~%FarIZ8(DnW=_LfGIuB{A5AJjU_TQUcL|NJu+u-)YYmcyPkQp*GS6O)N_O;`cO=opBG~+|a zF$Y?2uUH-kFdEni?e1ASb2?0Zns2{byF}!bOhgT1!zp4yY^9%&BAkIDVljnQ=kubZ zEXHT35_r11b#TzRj={_HN6uIIwppMxUgW*Tvf|yb^9`8}jH6UY^JYm#$Cyb5Q%B*k zd(^>(@Y7O%kahv-i~_Gr3Bo)E-$H?bDclmB7mg3?#Vgo^$p7-&G}#$dgt29-TpT>aFRHn4~a5YUGoH%vPmAg>FqZvUfa)URRtWJ)v( z!PkaTOTn-}1(s5KH<28Dx@7~!LYHJM2IS#ElcXNpp%Dy?iZEF&H}_{L^U^aGmpT$- ziNn6xLOA;6%cQ=7V;R{aDqN=hTs~1NCF3*6QP^S{vWLy~2HQ)*dlGT^bJ?c=ZzRo| zj-TN_PD(rkX+J#0uGu2Jx6SFN5cxZuQ8^+vl@~0VM+_)QUZK2EZ*D{o$u7K$7i*9c zbuJnoW-R?iUI}MK(kh~-sE21ce1%lsxlFc&qV4w4F$_3Frj(GG8@a;>o?%yV$O8XC zBL7^Z5LK^`5eL>C&0Y96`w!EFu+qRQg za?*|Q9LNaS4_PnJ>u0KSkSA3@<)sQShuC4o{RZ;&nMW#wKIzL-C{s&>^)yIQ*DVbK zzU2b$usA~9>B;Gzl*PrR)02Ry9&x~vrqwOGU8*?4JdMV&W#PL`@a(LQzz7adv(gJ` zWo_7ASZew(Qu|ic)^|c@^e~+OmT9C;ReI_8h=^IKgm&5g;R-?UnvXNnN^nx86W?I6 zH9GIOdAsEM-P@LV>-=I`M@Hy#P>p6fw9M$2)z(0v7gE0qosArl&Nt_3@odKv837Tc zgLGhuGDmSC3TXczj>2d&Ikb2EYI~?}H#Ce{-0I(OmtEr!9ZJe@aM3@*Peh76f*ZN* zJTVs^I%15{6%hsp8aX1_KI8()XXb}OymFhy@aDcF(4H>;!JK(0A|EO@M>Hd zsShk(!L}fDI2W`&y=T4t>+aGm-h$1xrS4@Y);9>}Wav-Et|**M-%tgVp*x;=2(MT5D&}hwI9fPsOo)k4BAJ_aS-)H zcbYG@D9l)y-%N@kyzX3v%`75rk^_@ZSxw@a?QevD@t88tSz74~kQ(Gfa$q)G#PvD? z>GPsBB4LVE$izA3ug(m-D%5(<5e&uvt%LP)nI}V)`Mb6%#va!^B!|ZyK)Dpow@IO~ zwtAk#vz!{(nX7|Dh?~4=2_CKLGbGte?h90@>o!3_JtN z#sc!?`MZ--fS%wc1PG%_Wd&4&7>&wW2cL_*!ix#IHMkXV*0*BG#at=Zaemlhe6I25 zgm+mn(U{ywlSAJ)*XyVtaJXBr)2#-Ds~yj}gxLEZR)Ct|L5Dw-TP(e8?a#AIOUWDN z0b4Uv0WftkqOB_I9ZZXgm~Fe;x=p{~)Hu4F(A13^2sy5lC_Ic7)A>YTy6sB`orTS< z^k7Kx!>Y^orz0M!fnkja}v#I1>c0lM!cuJf1_MN;1NuI}gpV`Q@qqjX!@=7x>Sg`chrxeu8BE<-)XyYz=P< z41+*{U>Xnr_P78VCrI(9q#PC^CN5J5)}U6u5t=Y&!YR*-HGGp?3O@Ws{R%sUOy$K5 z!ojWR#}{I|!7}W#3Gq3)P_Y-Mn=3psm?zY{`(tr;IWoViBNJwEDmjA5T`ix*_y znN<4BrAv?x3FvnpJ&X@Hs=b0$=Tn6AwQ>TSad&;=1os3i)jEJi%DFAS zx1Zb45#MmR1cVg{@EPcWhMD#H2NJhnqKLJBYB9kF9Insxc6@9N=Hna@A6!lrQqXT^ z9HzFs6jtkziCCkar(@F3EwLz*n$p%`EJL)S76yy*-m&pJCUqP!M84yNDG3bOAZchP zf8QM^U?>Uk!+y2)iptb#!W4y4gnQMa(QwQBw|1((Ej38otqO+*Q%j%yzovdoR>4cU z;{Opg|6iZ_yK?{VLd?etauRW@t>BLrz=jW%r#QF}y!3r~ROLg&U(BvD>2f?g%2Dv7 z$_RrV`L6yptH9A*C4r~5@)z}pd#^6zK5nAbc_0@?8hU?S09y*O+xv#J{O}xx z62hny1YwfC=U2ewIL?#1-BV&t_2YSjEJ?6|t8NFMy@Apw0{j6UtBZkRt5Hu9o(_L? z5XP1OEgc||*EeuUeL*lPX-|G|u{f(Hr*cQSe7}8rQ>6jSy?pA@&$Dq*`nTC((LF_e z(O$^~{SJ3id@ODC5KVH(dCXSa*=&?~F|dC}KYWAO*C+U=zOUjYf4Pa91m0L3R&@^e z2304lu)%~d&mbt&1^eI@tf&l_oI561orI2I%{f-*1n5$lqJt*5AMV?r*O3)0d)G0I zh6&Mf3+^VEmV+i;+>GUbtMyap1}?jP)hs_Yh2d%tGkWZg!647B3-K%^{-r-*Va?GeSRkW@YqvtFS;j)x3^c)jl70>?)*IXjs2gm3{8eE_Rta+Y;{_=u zuCepOU9gy%Ky6dZS(w>iY8KV+9X96V*P$Hk&~1h}zi{r%uK)|QJX0?B`|-WRsmUC$ zRpn}r6T-MYTNUT)8||5Ls%KnQ=L)GNSVu8TT|?$i*ztw=rZ#Q=(&GI7A&NdZ-cSl< zSev3bLZ3igY7JM{j^xWEDgETA(f4$T>a385LE6?O%m|;jyS%8<3VeTDHDtUZu0*=6 zNr39NhL_?)%VH9sgL=jZ!jR!{#BU5BjHA1oa=8sU z#p$QDxJX~jMClW~;UM00%Y(gx7|_lbx;re6`4Zm=&Oe)y4>>B7N&V1mRDYg`5EUM+ zC2&L~S*CB|@AK{BqOIZCS%Y+)-r3!5`x*HjIQQ}khPCh%Wr9F(ZiBA)E2QrXPwRn* zOnPbj_|*Tv^ZGyY&rgj3F4ipsDAC-M-=7`T*H8lQDaS~0opTo*lsYN4GI7H7n^hpF zS7R$jMJ%K|YEpEACc(ZYF{~_;sFpD?@_m^XX9*#T9mhrqK8gUICwit1FD+Q0V9`SK zf{Dg@k?Wh4D$ExFUZ>~p*{6sXu^Ph!4rx~?m_U1#3?aIpW&dORo{_8Vxwm(986(*o zFU+?C$=bWb;LHjG7`&hbHbw60prQL*YQ>jVl5RrQ!q;MMX>VrijROx4iFC+uhszCu z?8G9ncDY?Krt2dmoY7pP_YHn>ezXKDoZyHgcek%eDoa9<8k|gPo+9yP#F%FotJ9o% zO`=g|XeN?}1!>oB^|`+u@rl5^?-QVy8_Xl@W8Ds?$0k=q?eoFWsR)&XjL}B~cVxTp z9QwJtwd+Sc`697(haei@_9x?OYWME6v{#hS%2G2pW4^tzC8#7dIYq9c#U8oa8N7(D z`G7b9TIvB)^_A4&_E6?IFHILFu736(>Iw08<&}M)W+eO}H6TByWB)Ht{Tmu$p&opL zlD8%f+VZ}vmDK>f3eTb%HhNw7(-Zu!v1OScSePZC5^Kckl;P4}b1Yd{_DTGLjZ>!H z;ib)b2%$l;60{JvltgG(ER;StNnm>2aY4BB-_ETBQK4cZn=gFJXKsQ$mb~&m zt0f~DV)%8vL&w)ut6XA-Dr z>I|V{iSOI36G+lX_=;|vOnj0-SCOwmeyGICULQl7@HJE+f1!z0`>H7(>_gCS67@bP8r>Bd!XGoXS5myXO9j$?Rj zeQ!@Xbw$rU5`R(A8<{5kJ-4`XZrZ58XBd?@X#4>lfCB-Z&wK&T zq8?`CeVmP(;()Z$dHxSBZ@FKy z`d0p*G|1~Z7XHxGuPNwWXl*w*2M9GS>bS%Wt}$-s_nJd zFjkmg?qQA&3NuF_sduzG!aS&44y8UshN(`k{O*YO(oB8h63@4+H?g1Sttlr6zYKSe z8`7fQMa`VB^GRN}3$bd#{aq%skb4NJ;K_|ul&>zrG>t9fChMjPh4Vlmkzl&wA1A+a zYdfYn#v3mYW+Y-ZEH61FUk`=8w7;;A&UjOf&CRAuVsMZoH_*>dt@f1!56#x$ z1~7^*-?WX(h1pciK3sEjWOP=IR435YL_}e>KW~eM>07F`ZrqaHJN^t!T}oRpef$Pl zzyQtl*y-rR@5yJAr>xB%s^!e0>_#amc8?6AUim1qYCk0i3wQ({V!X79;(St1Og03$HKHIxXmN@qM^?bqVpn|=pb4TF} z_C0!5C+o664l|B*L3)(g13y*6Z!?_VtrVEtXkj9~f+V|7qEUsG4rDo(W zg$0Q=T0_X@{DK!^!Wyo>7WE=j(Xjf&x==vHvPv4j{0YgpY^ZYL{F;23P?+OusfKh= z)%g7O?>63vs8X))9#1}uRW&%sCjch>L?0zYw%1-9Z@}pB>fWW+?w0vpRLljL*Nbr{ zM8lRJLv5D2(&=2=sduo?NU+|u+8jy~>PL>o^PvBQ#x>T~Y?%8~Wx-97h!zR*CM_l|kv_di$4GR+xIUH+;*0Td(mYP6!{y@e>*>>h)HJlp5Ip;g z+GN%9Eyg{@LO?cQ2>AgOq7-z};V0|rp&J>pz=*bG6p;Hi=H?Ce?U{UkKwmOe+7$HFZDV#AHYxiX#mj1Hp zYK$_CbUb5MjrzZ57yook2>qC9mveh0BvkTdBAfC^9=3G-JZZ_7P=E8TwxuDXduI`? zIX}|V8k&r9qgbG5IpQ~&saYw18%9y$u(mKP<$Ds$B84=^%#hY_Um;J(jyK+s{z03W zqj3eMvP2PKoM?QYu?8U58r8e3LaJ63GbELmH%#~ZTT2V8NflQ3#PSRor-z}!fjNGEja#y7VI zn_sF1el20$@oQ}(&4hMM1FB9}GUW`ok06?x+1i>TDx=nb#a%Jgzb3Nvg*pX%Tn@>k zXJGJ#BGH7r+hOwoR+}_4XP;4vM=@o#52YT-i$2DIAitk`)fyi-Kpu9of z1tR{2vzN+K2B`1fJ5{9tI%{We`gQ+Kro!5Fs0bvS4;svmsGb!6^w|_QJCdi;Y-Z?i{ z^$7@eurzE@Q+y4CJff@asx4i7n64{x^J<%<`svyd{eij@S{i9zXZ(1tyYz@WlvGAV z*rl1KN@WxeLRf|y78k`$^`Tn~V7lUu|Jp3LpQ-sS-`dR3wPD#%QZOj4=Xrr4pqPjh z@F>bjvS&b%SLBu5&pC<(0*!kOjg?B8k1qs{MNuVjiNv}>6v03yG!uEG^0!v>wt)H0 zTe9HV)i-*SE`~u;sxzJfLUwVyF~5-ZoWtq$*)fwt;{Axy4>@NDfWcgAXOlx&9l3_D7l(8(z-MGVL=V*JOw{)IxC z4w|_pbDJJIv&2~CMCSm&45O%e^kKjH+W(5YtG_n&rFvoiuo%am4DY5n13{HmWYZ_` z3aL;xd=cuY&1~o-dVwDsVkzjIlg8wis2*{wG=~IIfl<*-!O*XAHN6e#e$Eu1exTbR zLvhHQo#pSJQc4=d$ItH|;L`X}`6yutD)i6JINQo!=^mSF8%L8>D~U2!FR5z4uvq?_Z|(91u6aqCo$s6LiGFie#0B;(7{old`3lW&Iv-{suN=_f|1kW zD6E3N7akTXhK5*ibm8D+Jjf2Tz{T&G^?OoR$1G~O=96!~c40(hiBkn^>+2QarXr%J zZueG3LMpbSL?wG{yfF(*lqsy0Vwng8u-Myf@AznwAIK>R2h(dk`2pEm3^GGDk2vOh z$wb-YoCsTQwQlRK5&v7a`_4=YP9umtQ7^{Q-J}Vt4h#-zYaZ7VUetO%YTN!k|DI51 zSZ{7)=h7t{MCz?GRiO;0`AyQmd)S-(L$05LBW_B~W8LX7Nv^}T@mK)OQ{y&KZX0>e z6zg|JUyLMNnN;H782X@Ha9q{&+m1$->2HySO?HZGij7+V9MYh@DTZfT{KDsOqW8o9 zqC@vXotwV`?tC}SQuRP!H(|yN$G;H1g*X^`v6UolPgwuiDX!6QmUElF7I0#*oX?F( ziG0Bam?0^ughL5x>SQCHDnewmq6==Ni!_`6-oNN_BV{jC)ifh2yK%jP4VJFSlJ?4{Zwsos>UQwCF{P|eJ-Re z>_mfT8FokahygC9@6MBF;#aHqmmv*Qsb%V8D#S+TVPT3IQe|pRka-HBmtv6hST0-x z#%p+N=f%^E22cfNqT3uJJ;~$mrDnql0|{7E(Hkr{UQcs`4AOvbaGDV8(>fV(Xp8K* zqxSe0$)0`Lm}e&9{Qf8SN(4$c$CGR&0nLW3K$O?9m5G!}V~+;22$)GOMzrpU{3ys5 z8{nyr^y!yeDXws?PDHwdhm=D8|50}5LALjKUD*5V=k#`ZIlcGo+qe7P?z=trdG6Nt zdFEMWV>TEVhJk@$90nCe1A~f7!jgnd0a1ozKtahwq1=*~R2h><3LT9KQ-h$D%Jzp< zYO2s-9R)QhDoL5w`}6yqzV~5?m3yA&-tM#f&N<)D_WtbN52HkFq{;d0tJc<(puwqe z0{3>Rh9?RGefpjIHVix5D_5JrU7h{?{V5p|nONV*K3MqKY=>e0+A-m$J2JzGLZH!U zd}rs^ZC4KX&DZveWpQ3X_oNJ6{ zUg@sKqBa*_xwf_&`Z$@yv-UH?wc<#fmlZ6k7U)fuH&L=?G53y|Dyz&iB?_Y0PHtwN zo3z^Y7OAZxUDm^&S$$Xq-isah$||nvsIjF{>GiD6$e@^Y&edqPVYf=~$QlHx%&}v_ z48N=MW)=pjyLprCPCSjm?oF>9_im^t!%_kw_klq6e|fR@$MBFw)NoQ{PncZpn$GeW z1t-$uuAW+0xuVkLIwakphB4KONbC)bfOiOTBMKZCs+Dy$*{X!RrpG#@2HOl2`hB0= z{xf;w>^J>j?Zf#ajqJAK8QL|(stiVzBQ#LHseX<~Ch>65Sc4QaH`*M1Lla7SPNwk5 zP9y9M=<|COytcK{rN_e+rzcVUd2xQrYZ?w}l=$PbPx_X=++-OGk9Rj$m&KFBG}6eg z1e0US95ZR$r;mTx`xA+M?zTgBSpM%m_Z;nx!m5VS-udNOOfP*QSi7n2bUpQeTIXil zd%G&`Slwa&U?=?Hm;O68)_83L3x>M=y&ZlbXYh-1+Cz09;*lmc17lH`00yxV-ppi0 zS|543gRRs~`#7V?)oWLdeHa5_M6@J4JWJ^;g*@mzpQsYRyU#nXI?@flt=b*lQWo<(Q!?#t>8<&z?r5-+-$MWKd$i3hv>l+hmm_%wp zZJ^N<%K-)!A`75BI?c2MmwNR1ix6$&kuGUeemwRV3TAiQt2B`Y20nj(BF-u*M=D+@jkV16?M&Pb0lZ`(y zS$^M_p=nBZJ15s@31+`{^WJmAhaiCHna^BAraIwXXzTEwsV(x6j{8H=wW&}9%tjzCuh6GK2O6VC1Jbd&gmX_l_ z*`F8xhKdQiFf$+91_nZEq)61M)R_rMrBr3HcSggi z=>|lzrqNWRzv&%Dy$^iZbc(G7sD|Cs)4nV`(tgh8#Hk)^YG2;lB?0i~sP~SZ88~*j zz29%*Ghgy$4qevBTI!QvSRKs0-rXmU25%Z>-2dWm`c6dIvIKS~ajgS!t)CUwdZb73 z+ZO)lQ@zo||B6G~({tu$k$hUDaY}Qp%o9d$g~93No(8zYU8$R#PxH8aRBdf>JAZHmA}j*4CyFHz!jmaeuhAxo$)WcFSD8xMf2B%Mi zr)3LsDRl=YHWgzcNcU}v%b6;lXuEN8?qX5+5#lGIR$vLMlF;! zF^`j>Rf65_{fkFFGA5_XG9=4Cqc;t_2LFfWhvJQ&6>t1WGssT$J7kyX9}aEkj3Pj$ zK9o*!{^!*=AQ@KPU~|-1xp56!#nq^%vU;IiOB&Q{o_?u|Uh6!JDvA(A4q8$~5#`Pj zg5M8E8QAU!LYqB9BJr1Stv}L6U2*r++zUvF_l+_w()`b{f$EeBhZ57ujV&*3C|Kxy z@oFlo8o?MP%0(8Up?i19mx{#DNpFctp#E1oB#wg2rZ*jLtjj=21F;+C$EynX+C0@T z-sS2cA3p!et5jgZ2b_RO_dTCW^dQ^b_MxP6A{lHg7Gk!qUE@elLEYPr#2WY~MuD5S zJ=)wRByhu3HuaydsgF!(ukC7K|CF{A6l}8_bGeQvviEFOA#~x;d&8eu|xT*N-k~*3Thz7L)K1VUzyZ z&5*VnM~dMgJ0~s|(dpbNjBm|yuk%&48#s0|i8y)6%vqt~l2T3-J{h)D+sE(9m|RCr z6fy*x2Bgc=KhIs@1sEXGzMDkTk3{o#`|th&`xv2lOx{(bB)$-*VUouNQm&4lJ9YvtCD(6J%U{1qj7b2r?}TrZa^T__3^Jv&bxmM%0T^vM~DH;S;b z=a0|+OV)*R3+wZg*OhMp_|DlGrR{|t+MY4TLlaU$FD3sRs`WTRT{{C2Smq@m^4^sb zCxa^51^OmlN1p}OOA`*hWwMk`!NdScDqVsk;u~&sj2_d}SJYW~#LjhH3P!yo^4we6 z9QXg7_)z9L>==GeF$lVDRCE9*YE{g>4AsBPk)Z9$x(PAa*TofBdCkm4i*^S*4 zDGoDbK^5}E;D=8C$GY9m1N_o{-Fi0llSVVOXtW9c4)h~7Ihx00 z^^e$|@rh^X+RAI4eMYX7QTNG8VhbvepHT4ZsoI0NDzY2KNLb~P1umX6gZ=8RXyCbk z=Ed>yq915WoAEqYgrspJpb>Lp9dbQC{qWLCT7M(2#^)qdQi9Z*?yG;~R4_r+-la#N zWc8kQs?7N6{Rp<-imw43c$MKyid+&q7Z$13lT`d(y~^4#VzhA`wpQd`|3F6hv6fVS z)>Az${vqp=O5X0^&yszh=5251McQ9NXIwp$T4BlX#IgCv!GS@ZTN~7b&-Y4~v&JT` zejyR%`{owTJ6<)3lp|jXp+AXMRbh!f_GNWUL!uMYY!Po9pj9 zA0fzLOx`fN(L$txC8flXHvgu-<)ZZg2s?iu?a)r*rdcWl6SrOMXk1Y@Lbg_P-?UxX3u-tCOzOW;158Z9x|viNQP0svN3Y zev41F{$nq_*l#viZ*Mv`0evYGHF{UNkAOdmsku|Ylc5w9+FV>A@_ZtzC*-?@S6tuo z(~6v3B-n;#j&sh$eiKdJ?LYs#IqX$>(!KPNvped>T)|-h?}=T z=8MOft@5yhcP{Sq_dIIzmsVG@vaWJ(@Cxik9vLX7-MfRmduAoEl;SUn60%6I_YL$J zQ898vMS_f$^f~W$w`23CE2U@F@XBerBIwh>?H%G+<;ny-krk8JC#g!-*XEKzzXCD> z=08UH_1D+l|A8cH`W-DGroEx)+1}3S@!*Z4B?<7Q(b_w`M!b8IGqSQ%5Gf-$0qW7X z_Ves)1^LRvj+Z|`D0`b!2&NNYJ2}N6HzdJFLtyrneHYBR@AW9z^(2k8P^Eq)B{bBO zC>}XIK-YhYuJ`rmraJfso{fCB(bA&B950~}(fZA_FRCiUYN&>)D1ve*M9A_}2|2>F z&?xd9qBgYlBawC&^^3yDno5WImo~`1(F#?6@)wrX#BdPABPXf*29Y=g=~Si0@T>?` zVq<2UIr=-ixs@r<@zsGU5hHmGUHFKf$){;l>4P?w{<@-Bs#l|%xq}&Gi49aYcz)HQ z#B7^kE2APQ#&ci(O9@(Z`ycvBNtE=*3{I}~Y_kkZdgH4oqiSR}Fsw0wreXKZ3VZcZ z(7S)Yr?6}@WkXg+-(n9GIIRfBlWqKvjD2>}vXKHs&k8E1l4$|(BVUz=qn z4E7o0Lv@eu+P$KaZAm=zu=bSxv>CV`Rb~6h>Q(r^Tbo)$C}KAB;1fn*9DHt0IiiL_ zQMm<8D>ae3+6|*+Z0FF&a|;6{j_MUf_q-l^%mvrA{8mC=BTho|*jax+EFu?AxK3IU z&hSdcs-Fw4=lxooUfI-9T`@L&+lM^KK4Vdv5Z(4)-jEh>p{07^Iy~wSNS2VwG ztf$gn_;AlcqR!PT6Hsn;Os!-TiiHeYDSe2hh>49QNaBrOFB59-B2}Bd7Xm0~Fy`+9 zh2;(F68M7?3oas}(dhAa$!X@Ld2*8RuGTrJhMTFE`Ur{6^*(}|8FjNuQpZd8C~q=q zCG0NT;f;KeQH*y!l1nA_PP3<`+%U(?s3kN;s+fhbp(fipPNj@=m!aV{PmL3bdjsX7 zREk5QD8gVUpIbNpM}}L@n|tP{9V0f3k8|RJC++&D1aw6hgW$#zXWO&u(e%E;{-N4j zi2KM^;fObgExfe81+7cFj4d5lo*Z7m9|U{6l$NZ{7xp`=@}_;sQ2p{y+aEH6W2}x+ z*-Rp>(mNe{;}5T5m)p13S0_umTVm0wK*k2@CO-~HC3MjRlzCcwpw7Z=y83?=E&kH^ z2{hXR>r2KGR{fqYT+k@7g*pimMW%?2b9h{*(1=STw+d7J~W~#s~29HMdGJ zr0@$Bf#ZP&>P{sB>6SUApF(t5dsQOtt8AmD0xU;RH-R|An>zl+OdE?ELl5%XuqwIfjT==ms`jvAyq2vCMoPM3d z%N=UNmk-UK#g)#c`TpULRMADNG$-SU%@JT0CsJm|Ih3|5xcTJKA0%+zHJ_@N?mA_( z%Br@FB09R-8{CwSsV69+B6Lgk(yfjr`aCyHJ1|PYlTGN&B)Z=I-lu*2T7M{mVCoVU zrvio}&1dPlmDWxr{@Zh&@8w7H0~PMa|1z~N_MP0tn4Dq-LX>>TEN2jW{d4@`_v3}L zuzWE zQyHRE04y%uIOUAOxC$%NN)Q(jr+`vhO8XX#N*Rb6$!l>&PMOHF>mAt=M`G$)DmSPd zgGV=%stj?s{fnDZ!z+nhJXi63Uvy7YFzL(w@cQZYwlYDr0fvTdZs_4o0*3#wgd4j0 zoBpN#roRoBeq}2a3_v7$I~2{q)RB}Bgw-4KhhHw0M5;5QD2Tz<>=bKoOF zN!aB3;Nc(-@kZ#5x$pt6E?pO&a#EeQP#pfzZ|-Cg3TY-uZSgCrVt8}MSC$uDUYY0& zN6`NE_FvG*cwoH-c}ve%)~a<6`T2>38sq%JJ0p%(Fge})Z=#zC7s;|y?WfOqhZk;k zx>|h1sLd6&R#nAiESnB8eppwX@GqEW@l)a^UtZ@^0eD}p4&+gGO{EO~@;H(#Db}g; z2x}DHo6C(?m8oqQWr(}{T18SH7uK1^ca_(m-;dY}tw&bFcKb(Hrt8Ni;gd%%(446y z#Zt&A*SSc)POOOGRm$!It4TAAclUqNzd_`bI%+?4-Uyil^?r-obRLxFQh zt;kg6)}^Rm1&9>>DC^^A3|DvrkjX>UQV}uqtnXY%XGbO3ky7inQDP)&#;e=g6IBUy z!#zXgiQ3_P(AdjA3TDNA+jK1ag7`@?c&a7KA z^8PU%+Lmu%dxPhFwJj18(}9PzOpFycg zGmeJN#gF*^?M}oO2b-LW3dk)zL+NAoz2l|%+Kc`SMM14ZQB!Q4sFRp|+6TXRV=Bv# za+Ei`-0gqeM|*Jv4BzoLq|O(cfpg@vUUO#rNWivtkemn$i2|eDXYLhPNt0c{7 z-MtHN-7HhQvb=*yB>$7WA1TX7+mrGunVW(3=)#-q6yf=ZtQ3K6x?n0K00>dybdKzJ z+QK@W<3mXwe&uj&P0Sc4a<{Z>XP$3&_#s4b(p_0c7OfDCD}%u97ln+~VDC>)eVxUf zy`W6v0Px(B{)T^LI{Z7^Y;NmBI@FS?lD~N^uE#F5d85~IT8=+7niJs>3pmetJ=J%f zgHes%iHqvBUO_cF{JhxjMZL#ShB^IDh>_;|I9i;kKsKg`MJCRabAIk6hDMjiR3|kU zN0qtv6k2ccg${&5O8Qh9k;;x4b;|fHKUBLa&6Smzvo)ST0zcwV-|fN_!nRGTKy(`L z5IJL%`1d}E#=S$A?*s0G@n~b?f=zDl={D z(+>xy*F)}G=NnrIZ;kd3XOgBq20P1)pvO#{_7~;0-nj4|G%|2mg%Bmz6e_l7mQzC# z3_TZl2Z?ocj+Mfc1ySmBsVwp;H)M$Tv>GMZ;Irm|xw^Qd!e3ci6;tn8%gchM6iTz! z@**#q_FGr^O5G{Rh`&A_Z>ksz0U#?Tr@Q-Bha9C+on6EoB{Owv8gX^y*w&-fp~X&x))>id?C5PIcWi zN~mDe1JTQ3iTu^+{HI*Us8IYj9==%(j0xdRIJJ7Q*n7YqO;O{=J=^`K3WmCam*0@y zHRhicvM1Mma_VGlU07}wB$;UU?p{Z)Q<5c2oWtj8YZuKj6<2m?ZLpt@ya}dY_{^DrmYqeUo9GO4kyb(LaG!!!a#45Mv`5mW+Fny`MSnpR;S^ zr}>!IRFYI)y$pHI`($*|=zymOUh3zW^A7vAr(MRdNx3&+iY9~yVm#^XyGgQfUI&>wBzqx?r^i$XVhVJm?PMYtu(2UaPBWNs!CVA0vbMuU5o_HxCORQbaKj;R}Qi(ONv|OyoI;ryAvNqs~l0H4DCf zdKx)IB{(l3g{Zjx;?M%|;mBx`9>*zWUR83OzHYl$_ovP2{b*~0=f@VsQDGyFO^y#) zO8+Eh9{w%mJx`iH6OQz{0w^IHbmDoJaHKi-hTdmCcyPc$OPSbcw7R~ywqXLj#n4>8 z?kF<>GH6UN-)RK02-AxJ;8Q&lq8ELUAUMSLHk{ERD77-dirqy-V5R#_$_it@wcDKO@nLgh)sgTe`(}pdxOWC|3g-`B#o4`u?lTxAzx~RHK z1zJ#8&ekA=4DzcEn5n{z48r*9d?K9IKRm!m0dG5dCnuiUJ-xOwgMBB@fQ7JR=&CwZ_$nq6->twQzgjpXeSIym$0~HCGicnX zI)x;nisLeSVje-oiojl@2!ej2rt>7{^%N}!bL3j(OJG8`rw2Nmo4>}}2!lWQDq$Fd&tBq?q+xRP#&iKmls+8iAg*FrUY{J0j0vyPQ0lOPRpaI}R z%LExY$7vMOlP0amhH5xUkt#JD9l@2|;@>yq=-xPs9#B{Y4XPKhCvMf=b!|uG?;uF& zf_?j45(|7F3xy^-We;}>1?Kcpl2Hb&fZSXKIJq-%>YRTWNv95>cu}!_{TzunZ7t?A z(4|^`$Uzg?e)Qwqx!UX1XjaqRHifaQFj!Q(;+%ytgo`ZTO#8~}yBi-g`BjO76;liC z8KBrG1!~;+N1G&&Fr2OK9&|g`jyt`dboW3#YGi~`wMAjLvAZYcW`j%GDB;P@;@(ch z1crm-RN{6IYYY@p?=5SA1mcNXWv=V>uxVXFcGaIv7_P!`kSE?58*TCOP zVCN3f;T=jxH+i5RPTYWl;cWb|CTvA5YS|q!Oc^K{Nn7fv$aucB7^S2p2Gbm@e^E+j z**wz^W_vl_8qyMrV#q1s*V2ucsQ zH(VB6dL~mx-f}PFmMZkaBcD@P`|SD%oMQ-+4jkU|T#+v?0n_`#dl}$1?BBdaHt#(L zY1-1{LoY7vuaJfmSI}OzEyTVZsAK>OfVT4jNC*rxK8rt(O)@^9in7BIm zCaG4)VUDm7a31&zz(ZNrp@!TF>@|k(scJ%xJpS0fXCEP&^dQ5Z&zp60@!UpZc1oOu zQ!`l-&_b=j$!WM%Dso_+C%5`2H7PYDOrXw7_fiZ3-e#eMh0kjli0f(A!^G{Q_q7;o zWmn~v;$gPG^Tl}9*`!FAn?%1PMUhg=fI@LW3I;ud!d8Tb#E^WNtO#Hs2$S)ewFx?! zpI24{k^vc8V3&6S><9Zk^u{#fVy7C6kU<>ZU+oAvKD>wo0VS;jJ=W<(9@2(b;)DndQY00neF7}qP7BDD+q?O~3N)5*6108oD4|m$5im9S3?IXQVql`B`g?n~%cIYV)+p~?Sr9X*#XSiT$;ZsrBC0eN&L8RpI+_4FC!M}CZrCM4jovqsy?i8eo+7B6v z06G2qveg8s8uw>-c?D*>z1-izS~AC2J{Hg50NKQ3Z?n0EMrQ4nm?{CsMIP#6=O{Wt z6L9xy+dx(Ve1Jz#HBIh#=GaE?LuH(dFscEBR&P1E+15|FDgwHSW~=ez7p+({&6DjH z#32*UzmRs#EYxKuln<}z{7G^e>`zC~gWfd-WvR%4uT2(Xim6r+(bE%(?51eoRJ0E; z9c$`GBHyV{k!)PC!MZWt8~h_x8WOq zfMG}D2ioG~#KE0h?|xkZDk;x#Dpa~|?=y{J8QhW6 z?|nm*#U69sUFwZrd-GVZk<_@ThE-RI7jXZ+ZdwLwb?GoG>I`dZ11t%}Agb>Z2U!Hp zqiN$g++SYNLAkWPk%mO##cvwboZp_@{b$*LpET(w+Yy5{lhG?+7?k6jF?F$Q9aQXR zo$Iz|=8)_B5aAMC&e^=|FTy1Nq z@uvREtYh>sZf(w_j;J(89Z{@o3+Ekd!`Cs4 zCsmpt%+i=wK4x=;(&bgbbl!#>n_O#X6ygNEx1}!sS-ux1r$BJB7~MFJ>XP|;!-Z|*}1j}Ic zY+1Dt=X$bqaGYMB!`*Ch&p2epG(M+#YC+w}VDCWjlHknfV7p%GuM~+6uIucCeFU&h zu0veii^nTGB`K@5b#gG_j4X1Pu`)zKXTw^0QRa1*pxMOwggEY0% z(`b-7IMG9;?rD-2*rhC{;?yjq$X_+khf#mb_@|?|rg0q??Z$&cbL7$_^!4D{72Bw! zTgK&^m$qHa|E=PdrVPJ`> zDMnG&6UgXEoH~e9Nj9m%!MedbQ|%fFb2EDV&8;5>iwDbQ(s>evz~TkbiSmWVGms{0 z$%V)TUNUAd6KnWZ-j!=}bkrYa$|6M5eH8t3CF)ouG!T;Uq)D4aTc6#;_?_EguS-jZ z84bHVyLv@+G?k{_g}&%5+<^W5p?>f`q!;{qTJ%8!BS~|D`Kh#X(WXqG^s(d34a>&U zJXdv5txo3+NMSeUiPTmtG*~+g-4|Zg<`7%W;}S0G-I!C(k@sm@c>Yj8YE)~c=yQ@Y z9Skl}1(z_B(v7a}Ph}|zSyuKe2X#^kcS0v$E@ns|Q280%YLbMG;DAUR>j<0Nq@&bH z3L>NwHk~$|SNC)+0?MmD%^qTV_2fQ4VlQ4Fs1oEIFU@;I=_(~IprY@_XT5sOGvYeM z8YFsUPLO3|F6BzqNlv}@g(`$6s1`-y-b56!uN-LfRmo)febd&r1RJqYqhpron14yf zoa^~*;xY{%XQW5WUdVEC`nVC7b0#lpxK%GCqJ4&Ek%>0@?-i%NA@9I4HUjb21pa&j zxP$UGb`=F)cn-o&2+O`i>HOZ-moyr>DFA>=`knZSX(*F&^;e8kciYst_&RYt1#q_h zLkN;V=nvMfW#~fcw)CYsf|b={GiXU#_Z{BYLdFJKB>o~pEBC_+j7I0@4n8@a(ct(< zD(&cM%51o75_g3w`j_=G>!urge#6a<2yZ#1VCBpu3IF*u_R9BtHjPk6S?Z-l8~C&a z-n3fSlNm#YH*bZ(v$9&k*Z?K_zstj}2xJU-}nXg07o^78cBwKyV6Hl}3qwM_w;2&OrD zf6uflJS&L~Pb|rOrfe+%@dTKb*6qbKhRvT5y1qSKEx4P79iEwE#V-N*n&69`jKj=Y z${6F($~U1Ol4Ehnw+R@Ug-olX^<~w!rgqCT_#RzT&m%qDC&{@n2eXSVzaX#tQ|3#z z-H{EH9ySUfByw5~Gv}2oik+f2(o(nF?UBHZHEtr#% z)xa4I(D}R05uZ*bOB6|Tn8Gbxsy`I@_*#QA2?HugsKo_4$fS(F=zoIPpy1-q@ zfQ$eb5^)l#RBiYmW=N&_%DP@8VT|>r5I?Z6A{nJdt{nQ#X+@tdXRt5d;JN30Kh-Cb z^or}Az_lwj3AodD8(fV&?=P&WFZdUFnpZ^i-`YeRkg$%nRa>Fx4(GM05NM9Q$)?bZ z7iN`Ln9Y+yPtQV}*M%L5POX~sj5cf4(66Ch0uHTkej^0pdt*Q%_cBD3A;Ruapvmhp zzgT57YqY;Rv-jGB!hUDBur3Rc^Y4CfiCt)}%p?6DeXRhNcd(aup2n0I$SVK{*Emt7 z%A0Q|$ECh}aQ!+y?A^IN*jUqcYkCQ(iQM;=K!hqQz5% zp&WUnrnx=3sQc<59dM4=L1u|xz*S^064X5B7x$U@}pJL-ot*F;5@>m`;py6$NA>?XA0%OYi*p zc(7ymj2Z$3^2@IlhsSMT@~YH21vZ(9fDDu`lKPvnT+$+^m{9Z~op+wDcI>@Af;BGL zJd3`_P0Ou&kAtLtL`xHln;ahW#~F&&n+BeH;c*H=U4F9sPQE&cTchOXx)>w&lGqsciL0sqw0el0s2i!H*WABKZ|~=_K5zTqF$_Bo$b9& z;|A8Lk_@s@SuwR`;rypsE99I|Uc~coo>Ry0=@9 zoBLZl5xdeR%NwzoKM>>5+#GG5lv};NMFp3t$HgCC0*pt$o%>q09!K1dKH`q|dp``d zf(Iba_!XXmf1I<&z^phLDMw;#FlSoEm|>-4aj5x!axWM?<(=4;YB6ttP0ZdaM~6Li3F}Kc zYlqDF;Ln=S5S0M^PHY0k=t6$-<^Gr%YlFE2ma)vi>e{2*2l{;`>W9 zSwzZdH~xUv)yoq($`5s=1`pNC1Ah{tKKpaatCFgW+90JHQJ_-eOJv?CUrdv*yrbS2 zu1;?VLekw16*pN@EJHNvKis65F`$~5{}|MSK)?@GQJPo<6twaM_ldu$S}>Urvf+ut z{sZa-R6st{2);jv5)8a{fx2+Je^`!;#$+D^tg_A`*BgvZuB9BhH*)Laj99 z@{PClvGolqLf_I*^CX#_`k<*`+AzH>-;$r3!_F`_olb)q%pG|i>0Qdu#n%e%J3UV_ z^_JVk&;}k7Bl6KV1*x}X@^i}CbQ$h-ew+{tWb*y76+snWaHb-i^V?fn9!iQO@!HY- z2ZO*y=r7yde8jbUvSHfcG7LX>7cA|aAYOLrj!b){qq@)E6Be21%Il94G`98Lq2PZ*60*sgMBYqn!+!}ZwWvbJt-T|`ehisnS5E1 z>UyrYNn<2DbeR}?9T8jv8QR>~AD${=H*N%P5BCpo%*e4wawXd`#EkAZ6z)sSrEy)P ze>A;rhJp0N>eO?VwLne2uCRT=`~jv37sAtm9+XvFG^)+sPkM@CcEnbMA;?bW^!Ttl z+}-1;DN&H0dXTXlSkccy#?lHAMG9CTMMwJ<_SQ!f)iIRET47k`RX&M{<MeZ!N<()LDgaeaN0%1(NuKWcNE8{!ndOm@C#Zez-kt&n$nm~%oo&&nVNbfQQp zs>BNsDml7GjV7wUTa)ap+Ze{I2_uFczg~VWmDnY=Y5-jk>6=e)CVe1wA=roe$0~#! z<@)+YAd|$o;!9Bt5T4VJ?4`dA8B`d{XjgnYnM`w^Ixj?{xr@n8$WSkd=Brkrbwy>9 zr5mg&QBE}r6=!MVckLu0wW-WD*(7eo+NyTm?xtcGY>~^DZ^71dQ)UFLifoc@m0?uX z>dLk20SaOt>o;%3^1aDbdub}Jv{nB)=X`7?!+3oCgmUaXdI)dt*<1-?ZOypiO}tQ| zFNEspkNu2z;m?=>{Emfhi7Zu8mCQsqqO=;HpezA^8~htF%0s2%P_O8QY}@W{B7guRd@HmW(5?0 z5C-eU6r_&VDplXqny;fPSo$q(l|>cok`bCqP$@tnu+*RI7!vZ^OyUpx67l;gq>jY^ z&>ZI4I=5VJB+#(?@3SvguVlI;nAdyw=C@>$IF~XZ=uYoT-s{=h{oN~~Q1POrzC}{D z#F+_y|N0HKP_K3};2O`CRBVeNkan~T{Yl(>JbBZr z2I~5dySssK;!og}0PV`?{(aAU^e8!B5Pnf#hOBr#HJvpmyV6~l{+s_pY&G*yzqzq0 z51yu!9AfZs4d`j=rpt=VyMLPQm8#8cq7rBGBQ%tOkW z5w2cFY4lEL;%?{O-rky00beq6G6fkFea+$tbb3!Ji;>oZ5oenpSP8y7yeHZmp7P|Dx}}*IIDMhYDpTJ{cjTHrWjZj zIb#}SW!TUR+k`==V=)Gu_!*4Cbr5&93{L_3;hr+hwe$1dkl(tzHR-(>qGHS0{l*+L z_%=>-6Z4k!%Bm0!X@2*~d4arwORhR@uO`X8NA|CuAq)NEwa;kI3|#DxxAtW*)-dYA71 zxteLz&QumT3Xjj{Ylalj9AY4xw)oS{!}*Ph@%O{Z`m_orJ@FN$mUrFC5RJxk&+RV; zZ>V?n-Ph8a+f&O%NLQD)_eBLbtMTpdX|o#+yZL?a#>(>xE~HUNXvbivB>tCHSTuQO zxrQvaO^Z}zZdv-#S!D=3m#!}e`baW0Ihs5{wRB!k%>H`AIzRKGOvN$I z>&NyQewm;DlOKv+PgfjRBLWYZ;N>uM{8_UF=xrRs00-Z!jSxztJptrJ20U{w3zl@$$k z$xvu7(A!H{D0alnqZRruVUgMT(YL324=aGiBQPLRGm;0OsJh2j&u)l??C)F^CL3!` z@+^Td2}FYAONkm@&p6jfDxo5QheWKMIG!d5IRoiA+^_03aMM_ zyk8c9c7bhE3zom&r592L-GIUnzd!EA?}dI{u_bEF9G^Vie+kN+7z`kO6M$M zhhC=L_qtaO6fJI zEX_ADSk7003AFbx9^Hj?viHx)-uunK3}Sjvn*|V~Zl!+s6IJxL{ji*fnub{f%Hc*h zTGy|@>h_jOs8FtC&UK>bE?g}*w>3)*daYMC`*F<-b{V(kRnK6j|AN{|#aT47uaYQJ z>J7NCOiF^NOIz%VYDr}wGt_ez^XoP1S;3C`AgRPo8RPY}4+m+XL%J8JrYnxoQj?HvR=_#y*`tL!fwmmum2P9k*zba=;|T1~DxIt>}WT{I^VC?U>7w z$doTGHLMghRZST*U%HX*^h0O(#>S{KDuK$fb10K~k%%NNPWM$bou&f~s-!|Ge)m(T zc5-!+5zm3hu+wN~XG!8nIgrQU>=T&)OQzu(5#PVL$KI}!m-rK7y zUCKa(5(`Q{`tz%)kHwg}aa7)o*R>Kd-O~Kw#PH};#)cNQ0Dekrl!ll3S(g;vRdfgg zWYmK!*SumJFV4HVEka40ss(JK7z~ifdDYQ6+k6+;AksCOF0HJ&%=%I`(@GX4!s5WS zywje3alL33q2E7<iBUG-ODe| zW(rNUS4^iWf1{^p<>6t)Koy!Z>SRmXTOsDc1H)EuVrIOsjjMkmLA9lolj{@`*NOMmRVi#Pm{>?~ zJOm^WSB;-qk{$0ivibl%;ab>1VcdjI+B z$H~KOZKh*zHlv8>m%V?_X{t;!kV@_Dy0WGt8R1tym(WxVTtuutcrJqweU|HIwAr28 z7$hk}z2l}tZV65a_VUd~%S}(TFibW)rzy zTE%=q7b=iI6$$|n9vvOQLiYEi^GKZ5z|tMrsNMag$w3UD=ZA;hltE@Jho9%^jKaH7 zTF_0FI?T*{zD#HQPza<8(8{)riLez9UMaFl|Djp&OWo;acjpDsEgEe!e(rg^oc>sq zY#F(<0?EoSUOy30>JCJhI=xIR)@9ebp26`;ddpAj-s( zp(S?L1rQ+?p&c|4Sqj9eTV245JUlN-_^<(QyIn($%**H=?8bhop*@Mu)v4T1K;@vf zzth>;O?d{dr7DhO@|?+_dt@?x`E8vS9}#}!xpp${-aPM^D3<~!1O#$HNUd!7@2!JmGJ*oEZ^j|qY6BRi=-dvaXPO1kWhRpy&bz$h`i8E}@v_<^ zQ#>3!!ili2F5XiGh@7MGZ~Jg}_5EKIry&t{X)2dZlxlZdMg%yer_OIC&~WehOtdiq zetBm%!$X8Q;R(UAZezDc;(@p+YQ@aL@5=uinBR(31O3$y88qn zDEYI7dS#kh*-0BT5*0<#xrAO`bm?%QcNve;c5`3QwM&_`6eB!M;ObA)J#mrfC}C?; z*?49Arp2+@O1yV!ZL+v2tLcl0&Ej`eY2D7vbM!ngMRaX?<5YS~$z(GQFv5xQ{6v@VPS2-Ow!@y8 zM{NYgx>@r89bp>{HmYXim#R+l9hEcJS65|BjU8!;)3n$|ZjiI}8p~yoH4bcsu8)Fll*pliy7MkcEl$18aF!KJ5n?C=+?&=Ks>> zylfn>yTmnEowbZ5#+ooOWc4}qa*?^%81PFO1UyTC5CrS%7!%U7F~iqDXY$FuV_Lc1ikqgkYX<2s?_Jx=#+yzSk)tEVW%lMgbmxTyG_8*p==>>jsN`nVP-(D`JXI%pZwWiRa=oRsboK;C-E-}|{t!-++ZYj7xWBy*Z!YtRWhh*fJ@fby-_A(rLWC zx0Yph0F*FDd`R}HGf3+Qrtb}Y2O%U+!(4Eo89Z=U#w-Ti~WXaVcRAb@3a{|Thi2c75nj%(RIwUPZU+T7B7v*ZitkhgPT=*~2VCn!@AYX=< zvf#sJWujl>0K_HZF8d?F))!w%T@aryq7;W;&(v zPPfw26<=qN1%5sAMgRAOf4uNNsr&!;7k;Rx$=Z`fig!-(b{F0Z$GCJrN<9_FXbNzo z!snq9q^l@UNkMXawd*FeK0=Kq6-3%Hs`SbMYt*@YS5$<4G-GPp>h8ocmKW7b&|7`` zy4U(<;HB$rcjxF3ziZYUQKo~76-5s0f@YDlOR5#!vLkh+`~Hws-E@w%;ec-Hyd-7l zG|kC-d&aLE!WW_fL*ABM@O%RH5s`=Af-yL+tR@pV8rtcI-!_)-F^^+T>2%Gd6k2Pd zJ7Vg5izAYZw|tLSHI3y$6K2AxG);~@^HF}rj+YNCd^~usX^L-DV*?i0l?sYQ_(G%H zh~6nP6k8PeB0s}XLymfl-<*2`-HMv?^-Hcr;zGX?wM*SeYo7V$ZVe+mgZjR8!JKtu z+1uYpijaqC*b6Wx#b{cPVSp-!2*7mpKnq$*@cP}GX{*eJRpx%*`l+fW;#fxZB>g%c znkU1A%TPgRy-|*snTDfGSM|PX-3Krl087zF(f z_lyEgRmzX{`&SO&c-PB>bW^m^>DnP%sjPMJ%26*73*t+MBG{f@4-L_i{)qrj_ulhO zmXg$NY$h?}izKWaL)JB8;^)O|etO|8^B7rEU*!B#H+@O8HdK~VB^Qra{gSfKD`B(> zC%co9oSUpC&5KJ)8`89ZyoB^OlIDAMw#50=lfrCDJVeRWglG=W+*);~sOGnfY|D01 zXWvx8530OJS6h>i#EYUIYOsI{@|I(bRG1&Hx@y%>y`=LU(#FOolMSQPRPRlsKearG zg~b&%TUsvq;al^MVL!}+{SQJu_ zL*I!CqQe@TM|ggV6K`eU|EuQr$9ZiQ{m$0jd$8}^5B3MWw{7pn(~dp~;Lh|~hd6s_ zLuE5frNl=pW$-blf(BLn%Z6myd&BiHKXvBjSp<5g6>)6pjPEZQ@PIZt91af-9|4Br z(fL`o_qQDDcxzPc_`r%Nbf>Q%OTnrHr?|j)TdDovJjb04;hAeQ*xwhn1Y?Nutvdnl z4;~Cn4^=4N(+#r;Cc`7f*bUl#=T*IezbcpVGOYGh3qRVNxQuR8gj;mY!gBApYb4w=oQloa)tOArS6e6uiwr49 zc@+ZM1LtMq`pQejJs@r{+E*zsWaTr`A(L?iy)PxpVo&CW!xORzOH0w2sTm}5(^Ua! zStFRnUDckGw(tJ-761Yepzqb=EPlUxXRyAJsJ3R}t*u0BlRr%;jt=XaY5#L(+W(AM zX&*%2io!t(Ib||bWFk6#Z3RfEr%l=Cjv`htLR4CQOC9*EqMzZ562iIsRe2IqRWz;| z3@9)uYZqT_o!z9j%eJ*D^5XliUY#mc_gxg6pp=k|`9Umo&Ie-P%2M6{omyaPpu*~% z=kADPrRr2;q`@^q#jS?E@M>9rH!ST;P`mqWkwI&jQ_I3Va-={tM#$;Zx}w$f&hG#K zn0yV>%j~;i^C4B4(l}nhW4W=76pG7ukJmE*LiERD42qhAe*fM1fY{Hth&Vr<7npen z{qf6|*Lt^VFWPY3T5Q+6c2({7RpB9l4J@alKJn51LQj3<|6?x0fvIUHP>b`!$spjVQGa=+pG1AVSnZPShbT0b|=xCA9_wcWo_(@V^? zE6=rpKcWbbVT{AF);_5%F&oCq)p$qmaup1(xW=hM{uwD?Od%q|`$-jhhZRVK_y!R$ zg!wnpF8-FOhTk&jXP&=)!N9iUqL*BQthdLNbIpsIp<~FYr*o2uEn1FhqBqqaWaU*c!O0t2o$9q914eKUWO6aDnUp2+z7o}$6BRiR#}(@LZh4{;mCS=BZz>7Lra z6e*KUl#F|p=VvX)Gjk=8*q#4B=cax;G?;u(qze(8pZGyMsJknc?XgReGW*mVo8}w^ z%`(B0K3-cAX`*XoksaCc(mwdx>D%EPXla@x#cbGbb;RHaL=U3LpCq!ysAM^T%Iwr( z6lcGiO-m(}KF(!GKL~_Ba4T8bB&y;74?h}O934uDdn5amUVJJ1fDF8-N%xE14VrH% z8QKkFrJN1{bEU29H6YUT%jszh<*nPCyG5A~^9|E7gQJ?6Sg=W7y!KbcYyUP}@?Kff z^1R}4!PySIt;KZ8rB&VIc4;*UaHC2aVT%Hs_f{Y@Un*Cy_t=xRuXd=*yr8MG-FYSt z+eDhCof^9m1)ktkGiUW#6@B(SMHSy{w5&3~A=ySu3!=@~gm(TjsThvdR*s^xI)|Iv zi5HsSDJnrjt!|~1q{1Q$NuS@QWSA(KarSvl3`@O@jI)9wQgMsENQedt`NTwXHjI@eNz^DIa6#4?qYcxu#V$Xo7pUWIan`SaqkeNCtX zJUS1_%5iQk+QR%xrF!;*yZf0950R`cXXF;q*iP6Ld|ZQN5(F0lPa3wjrk4`KQ#DJ= zYXVmsRV~*2Efb>Tk=~I+KV}cofwj{x>5$_Xa1&TEUYE^8$zl*t7qzhH1R>Gus^95dA~Sr0k2KZUt+n$lRTE^U0c1bZ@N?so%09i`Pq1Byu6Dy-O*P0k z3&ea*i%q9<>lW8Ao%v=0EH5R2kCG<_Lf@N7FX zSONh0ifQG=vjZkrKtsz;ud`<&zdD!^n4We>FA~ylDybDQT|%K%ulr`cs0wI~s0u~3 z{TU>v<}sP_6yEuh^1Oa;Tez6p98POv*$yTM{y%(itdPa` zH)+j*ERI+A7SmfP%T#DTG4e!AnI+(&HA~4iki~(XJh64PKwPzEtoP>Mh`AVEITn#j z5!UeNP+Cg+ZC?{-2F_1zzE>RH5Jz=dx{fah@=|IlK*QnN!wT~FkqgCFTaXGBD~xi+ z;p_CCd(JGA#mzOy!!&QOzbTszmLJqy|9>JLv8e0&>&!u_?IMN3b4-oNpmmx^I|)cM z0s(Ss4{DCPFIziMtAX)xoO5fs#4C8-z9zLiQFKk@C?oPBP9fBzZ|M#0KGz%Gy(8%9 z43Dox3a(!Zr$a-g@oz?3Y)-FS6%6d3pLH#J6E(o(305S>Bhv=F#~wQoIa9Cqa=na4gvnII346BcIq8}lxy znd4ERXWz;Mh*dP-QST}%j76)J&yZ}2D`u~y4A>yaQ;ZIDGX2HtzpO^OnfdYVg+Dge zPnTy`Cl`wx{lqVln>cTed>#U7Sw2VX;KKaLDmA`RQ^VkVTP;@>qtsamPfj~G_t0(4 z?NYlvIs0Veu!3iqE#>QSK}?wP#eGM&Q@Yn!%80x6L2>}77V%mT|TOTu;GGO_|epMBzWa{{jr_y^Up65 zhlIV1(uf5&4u3+^pD}T(M!Ble?UTTrls{d=QptP?K`5blC;^H=k&yU@OECsnuoom zf5i~Q;sUQa$evCnPIRaHfdggTCYp+S>`FVyKcxCo(0a)p#vG)gqAy2a10wMYIVhLM z`|_}SATw7x+gA=$O$BoKdzp`1vln#YWZ-RY@bxrk8r-yBFJ+Z47RziFkM%dCiN(o$ zLZh(2(qxYX)d7>m!S59e>8DbA@J8$j{NScZ_l8fRs6#4rC<~vx%b$VSe#U&|mlwVP zg+JcTDT}-`G_7jgOV!sVmF6J(^~w)@BcoB0$#`4{xtDyAx;VKl5Il=0bD|sJ^Gp2@ zq<%@>NMxlUTd_UKtmg+iZ3WEP$GU^_o4vu=IU?*NHgR+uC3meh5Y!pibt;9RI%soc zl<^sz9vGEj;EcFQ4vx;OFch2~q#9*$aXmug&%|h+MSH463Cksu0DtFL)to$|Q7)a~ zX4ZxbQ+@$@Y5pPD+@!0RXBHV{Y zY+0l`dex5=EglI>rS!BVGpatD%WQdMu3Ll5%k1SfrL)fy^7!V2y3cQ+Q1AS#`@-|R z!Oe4|U_3x-J!B?`QgGevP4k5_Ed2S0?D^qA#%Jp}*h-i-Pc=V`7_4g#2AG1rvODPRUjfjS?ZXB$+m}8NV<(26J}xQa6}4m0_qyen%VX1%APF6d zt|qNQX~>0X4%foi`(3Gai3gUyW0?I5B;m8^y6Bg;mQ#qSQ0io(a>rswACtnjR@-_9 zbtF&_Is=`Vn-eVZw0`L&Tjy#ch6B&ZN2H33B^9k`lrRV7LE7N9nxfFs3o`RjZ6URs3}OgWE9oZ(SFW8W8t*jUBeJo-m#K5)c=TQ5q8*8j zqI$BW#i$2WOAQ(~f>%20N`G;G??9_>VR4lJ^y3!a=@;RXb67kxJ-)Dw^G2F3l~c{B z5q>>sGE_wpi2P#5;fXkfY>v17b-s=?_XVRDUWqom?5n$ILGJ3Yw|9h%I4y}?hler~9)rpzQCc9&XmBLZBVaZebdH7ly5dR9U(XE7^f&G+C(20B z?&LcHcL)>OGK5@QP1yE?M-oaL(Z*f?$EKGnTgx!_?%sa|HhL3F@6OJ`28`)FQu8~6N;242XIPi{xW;)COeiW(w{0M87f6#CAd(gs2Ck$ zh^ESYk*PCeD!l0#?Yh7KmQcWh)LWkX1az6hO819kjYhnLmM-#oVfw9S`2J-)?1Z}} zFyUWnXEdFtYP7^8N{H4HfV-aoznVeN1GID`4-^v7Kw0@f*|`_Gd_i~t+z*iZIN~|- zlnV+l2p-j%fu?(@8qPd8R58nIm`+#3eq468`J;_MX);PIF4VgF7nb@nm$$M_6-`9{tNrEs8N4acAokrKSZAV1M)xEDNkCXS(=tAoSXZh zgg}mlOral%EKKUhHl>dyZjE$OsE>oxJPmX z0OhhnfMm1uL;48)P>5)3%tG7)Ry6#s^*Hgst(|xiLa`^;sD*B#lfohH30Sp$Wj^lU z#7FPmzL_~Em6J3sceO@ep;bN?*~xywUtahp^x(VNT{ZK0UKa)4hA}u!wH2CXjZM7j z`8{W~elK*Xs8N7{TY!10JfA{`qGyO10z3^LwX_I50fFAC)*!t0__}U24uGR zlMYELOtym=r&3^3myLok-D0qwWB2aq?+hrj(Eb!65bYg}KIbjoP}+ILn>EP{sYgj+ zl`_E@N5|@pdbe*YpMsdgWY^bCRR`S?H&>q7x1+C#vtBd5wB6g;AUC-T=ajQlW&sv7 zARzPUoKV1YBNCTwj}W=&Ts(b)+N1IC-wqzmU4WN1Oc9K1moMZG6y z-+q3Zicee^&hBnym<`hqVbE^1*Sm``eWzq}X`Rt%YcqvLp_B5F9-osWW#nl0ePR)g zJtdh@SxFt&)Cqu@9;&SssSz}It?fbTd@wGm+E*nlm^2kB%!@acVg4P8j;Flg%s9xt%-F*H8Y7`pG{n zw)b9{`lcE)@*swn69o=R9vmq&ASjXFN@dL|mKOrGOlu$m|S_@qQT>2$h!F`9_H3Rq#`R>rqi@k0|bKPo-ZlY z>o>V4WetO`X^ACO(X1Fz5|Luej0i~%!g((V_7$zL!%Qwno>#QtKU!49>)g|>nQ9H2 zwE)BQ%^iW>#$8#P1!%5KPp^Xa!t$c;A{ENN*rki-@8B`c(_pgoQi!%EZX0H5TgEIS zdGy$qFa@ByrFuqX*>qz=@+?%tAezQ91N9fhB|g0{RY7}CC&zcCm!>7u309AE6tNn; zMqV1L5=q<1Lz$Hx=ob(dvalvKJ+g74T95VF9!w-U)Ac9smsVNiY;N{Xk%ao%WS4bVp{VHm2U$EH}oHgSk;}>gC{WgI4s~ca&y2 zaRz5`QE#Nv^?#BV;^?YmM@o`5^*AYyw9~G$;I*_Vv;{H_%>oFHHsN$C>Il!@^zzj7 z={UHqKepIJB(nF7WD}qygej8ZoH9mB%j=>`WY#pcY_T?fN-_{IkqXuZ(4PP(N)^#0 zxG$?myGGp#CW=G>eRe(2zf)`PSU+#!vneAm8hJ zLqcaNi1LkP_t+`P3Wv1}y|L!zvL?zJR7}2h$W}bp^ol7yje;?$;%Y6UagupXtWu1e zbYEg{@^iVXv%jBpR^o%xeH-7)eb3)H698z$^^GoWVaeOajes1QzOYKX%)bwIhU{A%6 z^X}XcQ}^vvF7yU(xVWGv&EW}H5pv6dFDlX(OwOfq>)i97Z)Hz@-plZSWO-sq>>;9n zjQPhxJz=))Y~28X40mw7&Dl2rYb@VD0bFo1n)jC$ufrH}WGZNQME#o_S-S7Fx1>Nx zNHFOz7TB}L<9EC@HLAl4cl6U(6~79JMwU+Ua7F0{XE)rD;c=UrDWvHx9$W$OrQL97 zf=d1j7OsoU{zLi36_rYFh88pJzK$A!8WrldMu$4^2D6`L7H@lBWP|usH0d;0n-Wfy z%L7f0xkSvE5R-c=5f-1>-MO`)rS@I6hDg-*@w%(g&`s#Kv35V+8S6ogs&UBQkWKb@ zHOKMc6sdIyj(hO$a_!F6&xVN&vNS<~(|FfJA>A4Ai+6(jWOs!DX%K$yCMw>$Kj;v`Tb163lUv6@txVnT>|PAY(K2$*Yu7G*h4G_V7rNYJP>YKOKc38NvR;53q9deW$avpD%C8)8^WA%R$&? zm1d|^TVh?`O)Apz;hf6UIMFB~hd6p4u60+zd~>ms=}HWOk*t@l5}9{)DmsTA`tG>A zg1rW?NJ&A3s5#vBUTkd6I`fTu1PQ7dBvn9=iq*i;U<=c3R?M#UROK*68;Gmqi=d?` zav9k;M~hFmblc{qs65hul4lfDEL`#n=F0s&bH?9&884qZw9Roh_*~c^YtXD{jSg#u z&s9JPxpJnLr<(H4IJFVP*7il(LXLln$MtwlkVk)Ydl#Sj@*GqK!U{WqR0)S1Y^VF$ z#)f~@HAI?Ve2y;woIno~pB;)qNO6QElk)r&yi53~SE-e)?kEf|Cz%OCHi3xamUi3t z)@8w68Qz53TyDIGa9p9cyxEC$-ul+T!5H8k3=a+xOzNMX>viA;k5GrkUFx4*Z&Vx1 zUR0oeC#Y~a=RyCJk6SeqQ}vkP7oWF3g4z2p`_I*$-0W)o@H0~hoML%exco8!l@opj zXJ2ZboL|zwq=IC4#j}Q{F3?&Xgd{6yQu?iEQ{fCqrLJA_LGBWWij+P2qus&nJH5f} zTS9kS_TJU24!V2&B%!uwG#v(dK2qy7)WaU`zHv$w7?>DaVy>tI&cqb8$XaN{GPYD> zzCn0HEY0(#nQlz0?d@0SCj1#F9{S$tcXsxGv9yy&#wwj0tIbPY%$It!^G-4`G9_e1 zLPh>J{xX}>O`E~;Mj8d7J9Tw10<297muv0=>4)05m9B~%of zm&le=ol*UB%6VQhJ_yC?MHMb8CDy*a4Ht#xf12u5#T~Gt+`eNCXh?JC_Toq`$YivH zocE89my6#Itfp7kzoooY)?7(+CTJ+GaI!*h^!^)~G-4CPv(LCTd_+M$4dSWI+t9B7 zg(vi}x$(Q9IUy?V&lMf4Z&r(%PeMB#AD<9!-_MvPzDdvJpdShBtdBP%HH zf)z&g7@7$MX!Ln}SS=e(4Pr2*u(#N|c^(dX{<;4820YPQ+1rl<^5Hq!!<5FL*MS)y z{}jDm(?gnRT$g=qN3}dXhe<;Tvo*b=XXmhbZF)4Cqk(y+2vtQDk%751m8`Th4kZZ^ z8L5a;_Tq%hFv2|4`b>DQq4s4S_u`2;X-PH_1qq^d9>Mvj{KzoxfE!8EQ&;{FUao_35_@ zW2xOl(7wu4gPoFYK*+Jsgmmv?v;DKuY7ms7sc271#b;aoT)1O33HFqH3>H`I!7;+C zMuGacRmlwMrKVi$H46DUNZ0A#c~1Mh4A#=t=BCVWT0x{XLaWp;XKvcxu{G)y)OvlL zCGE3~x3T#&v89>T-tc;J)Byw+skbbvbkQm=kGEthk(rzO3u|pIYb{G&pV}mJY(h*1 zLp}=;V*3!;8=n2S&8(U+=zX*{9Iht(sRb7EZp@gFoGAGFN)l3}X(rM+I6qU|bbP{W zK~!QEY#9nSo54UWo(QB}`+{D-!!{KwDVs3ikhw{;G0CRRmnX5R8-G*o9r|~_i}v=i zgC!1>B?EECBqI(*A18zB_L>6~i-U(LKv!HScXI98R0T!HM2Y>~U19wJJ7ofWKqwB& zG=}OnSQ%Hd!Q)518(4xjG?q6#+TedXf4;9*;QxZ>e*41Ls`&fMB#ao4Ef(c!jVC~= zn5i6|zPAkMtUDqzk+jQ)5S05Gh1gKDG^C5wjmm7SSYi?*FC=V27EQ0{&ZS_wwzC}aNR$I1xB9H!iQ;(&TdKwEI!9ax+F1&zL<7ASkh|# zyg$U$^An%SGe-WT*8}ep+|J;JS}0MI-skAvAYAHf|4hR8fgzr=yxN&XOZ7+-1ssdm zUE;Xu&^3xpnU(UXtsf`s!-1+5M$G>&y+m~jS$fk)FLa+%{Mx^ByVHH)z7V}|le_!3 zZuS+$a-DA7%%_6XZ=a{#Au^Wg7gEd&4!Oj=YZ)=a=Q=#>bgr5?9PkP)(bx(b*C8p= zI_%xQkF`55J?XB?()bwWyQch+Wlg&`A8ZBv|0VjbnoRX3v%|hG9MBZDASKiH#!hr* zBd6%0pWE*U2#Oc&8^+kVc#NJzuI=A}CYy_J!b)W}fsb|>K^|&dFqdo?>~fZROX3*B zW|Y!*noh28f*+jJ(nl+sifAY)cZcwT@A^oG_9ik)FkosXkoGzO3&HpUnXiivdMh6y ztBy*DKVb&>tK|O5kII}KzEbvfv%0P|OHZE>7mvLwgehonr|gTt0Rd-*;~zkZ6p+}Og(fW(NA#nya9+L}>S!I^E;9{Hkd z%li!}XYl|~uQ^^nRc~FS5XnO=+PDQT4U%lIOQdn+_8U@NCv(;OXO(hEf6J*ZcFz+0 z69|gZN*q|%lpqJ*)i9zR|38{5eFoDAl?2L`|NYi*IhKOhbW9q%0s_V0Q|6H!1?NjSWEB`lZGGv5>$ORdsQwBXM zL>N5Mv46S%ja;Lu%^TFIKQbSXO!O(AEuq}%%1b*qupTw(?9x&G`vU7h+j7jISsQ8S zY;Vxa{E1Hv;3Ah^EzyiPbb0s9jjst4v22qK_T8QF(Eaa&_O|d&fBfW0xBK{!4Utgj z@A4XvvJ_usy8$3AstvNl9x%r~LD$frWR3KAlF4K%5>1I{vH&)x8a+kjVwIHfbh=M0 zq7XYzk%@JgD(^EC%5(o;&h7+C^F6H#d%gQx`(D-6T~*z+bX9M+Z{J?;o&C-ZvpCE! zFf0y1wiy`584wuU5JY8+j>m|eL|h^u9*t;RB8dl$QPBVrmzd>bIeMa~h!WJG;Uwpf z&-eNL-|D_|2a}UqGxxsr*8Bed@B4f9@3ZAKTg~^G?frX5Hot!E`$O$UJd)RhC~-ra z)OaD?Gn3=S1T*KPh*uQ%f;cku(`nErUR97jB9&y9JQowy1zVyg@A|AE*)pQPgfH}m zsiZpKwB7VIayU+tLt$Du2t=2hAK>W}PDCnmDzHM|J!(?f+wQ`WJqiw5CLx=(()KpK z4Yv0VbjLlD-xB|bC+YC%F_p;5?u$Dt>|!qUXX+N4O|RMNeI&FqUQ@5iV0?Km^<1Rh zXJNusg-b)bOspvvcQ`rtU_MrcnZ~zXm>wTpx#9~g?ClBq;sz@eUA;j^)AD1Vn4K+1 zd(UL7XEGO;4*7=ac=h&G*+-djw+I@ zR-eMJI>GHsDP=6rJ&Op#8WGM0M^=MngnS2QG%I@MIR>=}<|9wzjM+esi@~YQ0H@`d z^L+jaR(UGXXP=0K;%qVH*Eus?Lkj3$%;YkbF+edvP#)6*t~*1r(OXc^pTMHTO!qPg zp{~Ox+#m(K1;rB{iTv{yr%SFa>7iW{%LzI?tH#iT8!bt?<@7A=M8NF#Ig3M+ z{=VT_S|l@RUCwp%2jhgt_a)DhtNZAejk{@mPAJN9OeXsWkaF%zngmj~sw8J8W>t1} zGPdS3Dw^kRPQDINotE_WaC}GSJ<<=)&xV6Lw?#cwL^fGllW$rMwyh0Q`(ApE{vmAh z@2YcrV4kpSYsqlv^i&v$*Hf)Y_)vBC@orP7$P_{$u7+A^p9&)*k9a{&b>;#UknQQu z5n(neHm&?jDbHV0!44R42-gf>RJbGoHXRy$mg){}ETy&oXlim)Y@TrKZc?QEh3&k< z9=9YB_%GRmizo_rMHEvKW_3d$$ZaPW*5t1`O(_GHYs1Ojwpm%&R?8_QbUD9?rV5{ly+Hp!% z@7x^%^)!194f&Mlz=x?#5mu(2q|J|5nLE_O{s)RCvr5L8&lb_oywNgeO{y|njnt7S z(h+s)m(rW1Asv5dPH%|Z(aDZp$Z~R46ZE^SOs`rX?meBi8sqDyBh}3DJ^P=;9;txV zpQ26Wqkf}RoIW*mS}WL1=}SiU-ku;+ z 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 JcL zslZ8EdJ{!oS)=VM1Ta`$yg|7R<7~~ZE@f_*NKWtkae6tkv_&>bV8|q>TdW*}?#Z{- zwo}fVO260#kw{q#mhFq;OCOOI8LX(w4hzKvbIb2=&n&Qw!C>+b-hjtwck?#y^QGb*Si|q0xWysg z`Jd{!UNjN?qb%RwZzg&>ipSq_qdK(J84kQ1rEQDBN>;r(N;~q!e+(UpwgJO4T%_{iksR-&`-OTLZD0|z~*5+1x=gykR1320XMzk=yxYW+} z^1{-h$jNY1ormIPS*@M@P)(dDU#cEvZRKN;Tk{KP_)|~TTfRTJ$Ecg$GiD^kF!7!E z=)4&-|AcLJlSav2wyOSys)REdR|Djm=}ps3hG$^c`~;P^GUWk^8;p*Ew%5dBA-=HJ zYWZNdNrZI z?}RzF*SFMqBTgmS9$a|JG)LSKeQhk}uf+RCz_gIDdb%80RpXwLzJ+u9n(pkUu+(7v z;wALX<6%1ynEj(fOT^3P%))su1Pqit4K^N3^v(^z4{-PI@qzCRu4xvwZZntp@3p;- zpDOKqvxR44@`UJHl4s$z9C6yrd%w|;c~j9H(E6dLt257MymoJ#MUztJookf`SZo!| z(|DNII^PT5tUJv$6`7c%vC*s5l}i`Fcxg$;k?dw?!SJT0Tr1RJc(&Oh7(lREFJ524 z*2mT~=bDTUESmhZLzxH!jsTK+#;!*DKKKUu+R|9GK6G|^cjGt?_t&>E6i;V-a>;w| zNbed_B)Jf{dV0lmad(EplZYEWYj5KRB$GtwRhT`&4uBIGq3%!#SBga4ZM9jW-6g)? zzvug{+-VDiy1)QjBY22;FNYfiazr>ukz>iB`qWX8Bq;i%{`9gD>Ir!ao$Zq{WN%j- z`$-7v*?dThrGGXy!Q)>-Ul$75Qig5h*5NV>vRLJqU>t z9+44%>xFayKJ$tC%Lztwuk9jirYHM+o4OqI)p-6M192=jqFg=stV$Yn zI^)S|RQ75ICjdtpdsDUh(+R}(2RCl+?E@k~kZB6Og&#KPT=Xv@f?3JdA;}!s|0ol7 zg6fg{!884_88owl#kcGzE0|kfPiuut`tIo8LJ9eF@T2T_J1^o=dZ~V zWC~C0pElDLPoVT_P|(_&$whAl;$?)kM31@wuLOp78YVbCDM3A~p}sk~Y*#kYoh)_R z96BrZ&1FgoxhSK{E0+w1eO5RiH(sFP3yBx0FCu?N%T{QxDl|T5-Z@AWPG^5}yDGI* zt??EZP7~=-Vx&+8@GHx+7xV;%VU(sWbj>!6{33iiE7lfE4Zwpe>S#{fI^_c}xjg?t zhX=L8f$Az=UP3BzbCEO&6spm)h6Gsq!)qTR+hxZR_>RHGdL9gu$URUQj~|D<9U&R4 z9iH>Jz-;#IsVw9kmyrCM^U2@JjG(gS%tX-78zd7F0P7S zQs>2-sxOh5IoAqGXY3;IDO+aHho$U^GL{dYR*H$%Zm=()Fk5_-vR z{5$!LUr^h+ug>zzss=xpZ`h-FB%zGjQe5bbAKtiwEqa4lCrmxaMp8!2Oi|ZpqgEd^ z++N1R?Pf3s`*}$zHSl`GWp3NBbCq^wZVn%Q>RC8cJQ6#`gx)O)3|^lkYoO=P(-Tf# zr(*6Sg$5E*%ZqcD)#yX6v9n^m{0z0JB1gRxDh@ss&10fD)=2PKk3%xlxN5O?#SlTf z_5ABrRs~%c-;u+nONolik6(Bp>tuZ8djiI}c^x7u{1@T?B|MhAC!4c3AUUL<^Um^yF?hCwTzQ0XAe)-H6PKoBF9TQ8HrHID3QIjl_(0jDR|=7MDs+id7)l|LKp4@ zxv(Oq9h!W^tUAPc$%yR4P$T}FHy9qO!J6;BKk{^bA#QyP=%tGjAutKZEau|5*f_fW zOJs36gprbQ=k7v_S!5?pUsB{hw~+Fcj8#Z+M7MwI;oRKK8*VMD#k06wXOyl!v(=Je zkAx5v)pO~e2vBeNjWwyC<=wXdS*UF8?kvw0@xXf?Ium=pNV?}l)i=s^w) zJq5w-5~djFjY-dCJr%z!*QQ}yD8AmrYjB|eT52PcpDC97z8N$ebQu7ED?9~BBqx?a zUBnHllCLbS7%<((gyW$ELm~aB#K#OO#j#6zgJ4j!^VY_O2KT@buvPI1LB?|FPBIPI z_Xrbc=G2PVTga4+wPk+r&-#+?K!F!iW%gK%jcJ`RSDB{P>E3hC13|5^c5}O5B~g|J zW#C3*s#x~>_l*|z_g75~j9taj9riab_C}l8w3Cd+@EvY%cqlg4@9sVAeguQadZKl3 zV;I*U*<-dpIk^U3U(oM$fi?4vnGZ~RF$&I8X<4eS=E4`+3ch&{HY%?3U;;W11Xsb? z&Ex`bYnVT}E=MMoGrE1b218h|kpH){J~5atT?nqT+mXo+<5}az}B&6x*dY<_l!%-<~U07(qTuxV6F^&&X5>q%6 zh>c>yoQ0AWL6vlCkrZVJtDCSEZ|f+G^lh74+le_xXD6nDq(l#xZ%ML4k>$6D{Eegi%*&;+6dgELJCW zmpVbP4`NV~pwAJeq^*RvunT>f@MlD>L(ge~Akc7+Xa^;ml1a8nzxxd_6Inmha?BEO zwOzH5o(8KA26tbyc~8aWUXEsrb+>URUXXpTQNCHYhkSz|c4Cm(F8yGzW`0?H3?DuWt|2dn zHtYpE2~JFt(%w&W_0@w!icNDq+0oo$Z%<_7Xb6{c->}Ej8$BzuLf zQV-ArP0!iAdJjrU(qG7iy|Dh2hKZQi3}VO^n|VBSuNzjHEG`mbhQswbZ&&tBbqir5 z##P!!+q&r%0i4cmNo2-I>X1aQd+(OD9H&i;oUwho?kMnAtKF5V;MJi|vgBl&~GtpBZ; zb)$1WqD$p-Gd~m=r>nXsJff~q40q}rU~E{Tm>@c)kQT@{5{a{h;9IblOvFhkB53=k zbkLJuG3oKi183;TIWE<{F7&)s%zYzU*($-sg>BxI%65J+Be8#E6%B9bOO_T=2&Q>w zLEQg&LMY*C4mNtsQyXDOF&Nr_p#X+(%33X6l6*qNhPqc6AT(X(XebGrUCRVNg-gm5 zIM+hW30zqOY(LJZ`vR6oXBkUez}E0qI0{Z#5zO??mGiJVw>HsBuTya__|9lTp-Ah_ z+&?wLb5J7{m*2nMq6CSCxBj?yC5>*qm7@!uwLkhqq}_@UG2+>i<-26+MlOi^6ApR8 zL;2TWbSmrC*nVH+UB62W)F)ILR79jA*$p4WKT5&VDa2)EOhQeKYqi-N5OGFm;V4Ii z;~*x;LJegR#`SLgB-dQ5HWu80$g>jhS7TCVVM897Wc*jKjfk9^um6~1WE~MrO#F~Z zt1GqTS`uJG)Go=&Bzo{-cL}3`BdNqY3fsh=%~=`EH`jRyS8BM_k{*ODji(5lj%MW2 z`2sUbFyfDElQrry`LvED@2(D^OoFxb!MTH&)~biog9D}13PM9}M%TCr;#p~UI-ZPQ z=qMvdD7dc+kC5(PSK`hnUDrmV4TsQ9-eG0o7|m5SmHrK3<6CrMq=EOLhlF{lN@Ow`zy6JG zdHZ!QIBYon+#(!n>4mxB!kZEmWjdjX)bH3jS-GxMk4Kh36`8ri*Z!AsMF;G{FJYyB z>&$nTU3kVlQR>n7|NrI2)x91hmk9yEH^@-ojYgmrJ}NX8l?D;Qx@Wu@J3d+vd4xZY z@@F|vj7S3vDF;~$jb|hw2m5noqb!TF~>{<~6WyFqdTm8DiVk-MYSqZX z+bXwV{D5%c=+-0f>SlfI1K0cSNlsTuxy&ql4m`VABE}V(!pZ?3uiO*VWyrzsl5D@A zXQrg4^#Xp53dhWks9;HFcmZP#g7k1g3rfSoUKY zYih%UZTh=7D$G{7yyFD2PX26VIt-Hqfr;@N ztJGyg^tLxH9Q4Qcens@4l8@!JH-OQIpk7^GzeX+%Hn-H++$2Zws+-dv8^SMHm;xLB zMsgajn9cIjdeQe(;%8#Rw=_~ILa7W_bf=>$QU`)+S>es;-^BrK!jl_X@~DjKMubH& z`DxyEPUX2p)LYw)gA}4}YHbQ@AnPK;5>Ri-UzH1W`rtcpK1g6}^!vL-chZIx@|>N2 zUY%HiX5`LuQ4{m?+7no9s{M%GlS>&rq~6l;{1Y^b<0}cZvN->#(0C>~M3JX>JP|$$ zCo64zkv2;Li%f`M?{z)_6E>Eqz15EC1lU(;MyJeQPAe2MQdf8Xg8Lj?IIr(TnluOK zoH2MOWgyz*=MN8}LXIyIK!*nxzB1pU{7xnLSg>MVAz_Rew-s&mC0YHRTf-0;8z8p6 zC;#+oW}G}N@AL;|{#b3n4K5P=p4!8u)uS(z<1}>zm0T(spSnD!!w8|^p@IGbo2I0s zATd8J`&1GO8iV|ZE?0!B2BC0tk_(=0Gy$L%+YKTs{Y{3k1>49|xaB7*J=(Q{5m;^kZSN3r8%joz=C>1eS-7N5rbO z7*Tyxf<8`DMld&`T0{{*s+^ ztMhS>Rju??MD#T83P=uS#|u~7G%6b+^2a=L9uplFe-38m*$n?-=4WRv@@PLb^YY9O zMhi78cZL&ng2K3T!iscOj|((XszY|Sk04|pD5m9(!4ttMCdp$Vgd-k;0XIc0)LoB`7p+-co#G zSKZv?V*ha;46a;3A89OEWI~)fH`_HhOnAOKcjJv3-ZC?g6v4<6B8>3SXltvXKlOUT zERt(k%j*l(!%CinIr(}@QF(0L(Yvx8!U?YYXk%06k%*pt=U$IZHG4(ZHMZY$HuO!o z<1ekgo7#_2J^%5NzIx>l;QaJ0J+~)7S(RlWhZm)K?Rc4K{OD zTg(zfz9u63m*Y!e6-JSq$P$mGm$_NQC9MqoH#2`XLf;clndaXO;$lvR7=Svhn&>B%zqoIFDN?& z3Qmsi6h%&NMN!!Z|H<^&zp%4k4oOBK$5vQ0DVjwjaL^=?dT%j!C7@6! zJSB!vNyFJ^-s)HHZO;vMc|7om?uYvaQWYv94c=mi$f6TtzFwm;rX;s6UFtsSu(85c zdrxk{RxFqjGo$Vmx6cHM$e~VRAMDO7sT2J%v9|Y~#Xp;P&8t?}CtWu}qeKd7r#Uu4 z-pRe6nGqr2NQ@ebNjl2;^t0SutE`~?N#$llu1>X9sLEo#_#(aKzhu4U4Jp`qx zE^TF5a57ODa53}cT?V^I*zgq+A>c69^NGC3kazf)W-P2tWEONPIHTM9No%(Jp{=an z-2^(QSTdssHqETmZEl6k>fnbHxZ|x{I=!rTrN%W##&&!6UCR)0A%an7HiPRJ@2R(P zZzGlR1Y0c<+1)}Dvv=JUQ{Gq7PDjUE*2r}~V<+xV?|XuuZ;Ob8(B!ZlR%euhmA^wbR%T%!^C*G=5FmL2}bSj9qB;S-a=q479i3Ev7M*Bv?(i1rp)Ni)u zjR@WDg*hbFVo|tZfW>mL2c78-aspT9mE7z0>7z$V-# zVlii}0|nQ;ayN?!^*ecF(NS6ukSJIRmqy3zp=tCw?D04<*vBpQ{z!yddPPhPem3MB z-O11v0&#ayJLHK=bOvqA_*d0)T-L9exc#)&jmm301b_!vFeV)es3(DQ-iW#^56+Q= zrA8A5j>86w!AZ`eK^scWc{vM(-*yhYF4yzNYA_t^9@$acG8EoxVo-ZO67NY9WbvtxnZW|@%U<3fe|9t_RKgMYHxv|QFo|_ znW*QPje1WByAwG~`$bdsnTp-TRn`c9eS;(u7S4sn**Lto$WL7EzaR&>kQw06xw>jt z{9Tttb}wHZehLL3`qga5SXx;;r-nJf3~fqJLt|kB0l-kjp8l2C(=UVklNH~3XtclqOKlS_NEww5jLBM3kqfVv{736{LO5j+hj?L_ zKHgCElUcW!+w!qE4ZZ%F`E)v7)O<1CDmTtL#p zK%KmH=b7lz$(HomB!fl}hgpogF18pU7~4yvF*6)HzwFP%Xy7`ledrndm>8TKn0*Hc zZiY=WK4hSUjoeJ68QZ#Lp#)dp$Q`ztc!IRzZh)s2dFPB9Nu!_ zguQ5gx@T_uv46|Oob9DX-U0;*tf`UD?Ad0%%l-PK zKFHVmZ1v^@wkf?X>TkHLsWWZl-I?G#YRJ7@lM-v0S04x$P*WwhX@E$>BVmjO5{mbK z2bt`HqgrH5Cy$A)HFYCHOw@XVt*|`(1M)0VSId31Yk5rbJBSmu+PoAaYJ{wX#o19a zF6n4s5A?)v$BbRhY5EAt$vy$Nz-c0~k_ zKMog$+HfLu3eOt^OnfLPf3n8?o7A7Gk0S3ht$XsuOe=95N>q`sf+z*YdfJ*XE%wKhe zFx6%TQ}q_iXGX9f3N~=?HA?eG23ul`ec9}ApVg|MW3`jtV4`WBAq5S5$8)dzKWYSi+B}|TYM0-~rhfcX?WFdFggPCzEYO%1!A@KD=Pzs% zd9)FfluioUH3s8Uu}uw##z7>viq!)0KQ$ij##;kMrPQ5s=Q-1)zUukwo0HT4?Cd8) za_&$)^C4fZ)4z0l?vR3T{2yntd9V!)d}da94~+)8-~hb(4+^|L>Ehg&t?iGaVrn8e z0#?EwRS#AnT7%$>z%p$L|Aa&bbBmV*D0}x`Rr>csn-Oi9U&1c=YTpSt;x=|msdloL z#`N;^$~N()U!0jWW$MUu-`~@Ce39w@6vNx?NT z$R9a>`X~LN*<>nFBKW86&PD$&aPyMc>$Nr1aCT2D?i2cA5Fw?wbYEx2&7!H3BB~e8 zjR)tBRp^C2GM18Q+E=8ctYVj9$k+?f47pn%0JHPw=MCQ?t!8ZsNceqJ8{I73>wa16 zA7QCJ&p5^MM3XYY%UpP91yweb`3oxyWcj>N|DD_{u*cJO2BbITV|T7@1^r0>F*G22}b(wh~$jlp--euqjdX zN9$+Awu&^TP8|^YhwiQRf=C5_-x*T%8JW@IC?8YOcT~B4e1^d*YStTih6n{>7g>%B z65_kCV(&*>%8C|r+Tr-R0 zj=sdt&!c(R7cB zq3_}Z_Y^A*-W;U5TQWYG-u!Z9`6vkM*{Akv?9sm~M)=swk2Er=F>H!ArcOn`8!(2- zi4y|rG%~;5E_MiaRcJd)@>(WJYCWvAXScsI6Qca@K^rsw91Vl;13`Tss1 z#;2QU$a25Ijn)q>h(S!NmYb--)O)CSd=Sz^Uf?SjiCGji6#@vWHJJ6DPlp?cI4I^T zgw}bEoC?b13j z`><$sYoqtN@ZsFnPQSnVfRatJhboe7_O{iUS~$Nm1% zabUnI4kyHWHqkn=vwLXf7!ZhYeI2{P+)2n^*fCWR%UJ^qwi&H!cUwG^_d1Z%&J2@l zHB1)>Rp=$Mz(~0}ZB@Pg{<(qWe&O{@KAh8hAhWo=b$miuF)=#b=bsjD#Y)4c2t;C6 zj`lCeLHCuV;gzSDG2+U~n)+|XOsEDYvq3y@^jKeS>96Z8{T0aDk%pig_VLMp^4(XVF*ex2H47;RdHwPQOr+O~7$TJK{>t}nq7OG9Y2 zPouda5fMWbJ;gJ{yqU3<3|cazmbn`RwX(h@$e2tWp9~I1GskMd{*m7J;P8#bXWu>Z zM_Wv`Dk(@2REvyjlLV~|Q9-uXU=pg%YW42e7FqI)6Gtpn$mG}>>4b!Q#r&dfOY$Jd#hLqSMp1~>GEUMv+U&r(PgQJYs=Pe&eZgK# z^GL$R*o*dx{yB-;Q;gIGY=%Lt;{>>yGaNrPL>kE$^QBN$R8TL99qag5ImD&EQv~2e zr7wzc%d)()WAP6$sVFn%7r^fvlJszZ6$us3Woblzi+2OCp=m&=#EY3-F*tX2bPP5V z?wBi}#BN8{Mw|?;(>^#Lq)+1YX1_6snYCq21&N!jAFXXfbMnD5=B7WE3mvZg4o9wU z3XG=t^l-NpI;b?HzxqoxX~n1)J^)(~ z*_ErLoJUWJL)kPNO;KL*qglNz*$zXsK3Xxzf9t<#n$Ta1>_Li1Kr9utgD--%*7OBM}} z@!xmsS<;goY^bn*{(Kh2s*@DbV&qp51joL_%lK`Zc5K4x;won7JOY1!wXmZ@iOI5T zq%KMNs3*7VT(L1kY^-$e-!^n=L364>37vuA)#RJ(=cxO#(zU)xG{hP!Z&tpP0JTwJ zD7CP*wr5kS`$-HZV%t;^@fk+rZ0ETk7=IJmzQV`)jgi{<_vL10br=S*MpmjGh%LnO zBoLl0Co|@UlVj$?$0on*H_eKgCk=n6tlhU(HD`sIH^M2`I!)hNBbpjL(}pR7g^eHw zTEasxQx-*-DgO_n$ySz%XicNMzz&auf$$qgl=9hjr6UWO6LSC~~@ zBfjq!A=sY(i- z4(P1Rzh1ESFI#z9+Z}KN>Vk7&q4=UP9Ae5h!R&@%ZsQ|JE1rtaHZ3fVjBF)idDz&m z#9Z9voSJi>s_c%@Z7JuwPhPq^^}`P+7aks`yalkO{6!zOcA{zTK1R zOZ5m8)3|@{#iO|4adwlK!O#Jz;O6ow`6znMD+VD=f*cHV2h4H?;&~o>x~P&Vi$tbC@fC8xw!G`)PjK;*XQOoFdj7vEgVd z@s6qBYy9M5uu_4;pfQy;@hO~o6zu)Y-jHL{HTtP@ui7D=P8M5Wq@FxC(``80C%3SQ zvhl3706YT=0C#qRVH8mF1e}x|Hi;%=a+taVMbIS8k_2|@6jI`#+S*nHHMZTAdm|sk z>6-mt)jFCzg|G$0T1SPTAv#HQMJ9iXp(6i=w+4@2I8Tgbt}Y|pZ7f^&8ePZ89jq|? zb)QDq2~{hq%BWAKqTB@8Jx+nJ0By$o*_){2o`H1k;G7O0If|&#rK6+15OH^`uaCd2 z=hV6|b&ZQhGGNp}N?r(-(E}Vy>5&qmTRD3(N(z(vg`9^G9}LWOi2EicyN#DIy>CJ`2*!o=C^gKsanfM~+69 zFT1l#7h|?7nHZ!bj#PH=mo8%O&|Yl^PCB1?!Ouuz@JNa(0(ETacj`g=-yo)LwwxaO zx!Hw#32o9pW^Lzb!kazog3}(j19O3Xb>?UE(!WXe=mRYO^4;kA*DhQ(rPxIzSV81P@`frj<8l zC?y>-*iZFZnf07zarqI=LneG4n`)^MN=|yHHpU-nt90u4S01yrgdh=ZsKFYn z+)Ob$yJ*mVyG#ZH6IzlLO25Gu@xm{%?Y>Hs_Y<$F?c8h)wANxKha&1?f|vZl1)Eby z$!oyGS)6cc#kHn(tM1ZGee>+2+t>r|SIf8W-rO=S6*Z0GyjTy2b2YoGRx`(zn2R@x zFqz?2_r?uP<|s-2Y>Jl=arp5CRRm&Fl10Ks2M3=z*fy+ZP6=jzPWLUg675w*(9XV6 zMJgfPy(ek##Zl^(T^u2X6svn<(URcR6^lLJo|5UYQ8iHZHfe++_E7uC{I~yW=HH?94IOEZiuYyX%(u6C zspzrRfESbrjFTXuSu>JIUc&~^(%`1>gW4ND2`MMygr=K{B1HWvRKO%*)?6jh>($u! z&bWi~O9p17Fl~D`Ns7A&?-1f(dwYWnv05RH$I|@XF6x$h6FJ!Zvh(K*FUAto$z~=> zP)P|12#WqC={9;uA~VPvPo$NNCIT*PnAO|awT)I7z58hbXeg4%1`9Q>NQ#ab8m4T$ zNz7m{I)3QkYNd_MPu3ruyJj$Mx^jCDJixkOgbq79+m}z_^^a_6VY5dgBhVK-nc={1>?+43mD+F5pRFk@RejO639c@ zi&8$3K9SB9xl#Irm{WW#5`;ugE=IVlNKPCMNCl=qXLg-QOz0OJ@ZNZSc~6Zqk1#zO z_G>&$7@4TJOoDgSMJ~rdaXn=~w1@w7^~hpPxhxYGzb8^kAtE~uzQu8t;~|^%Q`J1K zu&I*DvF!2w(o57iFCg;OUG{$jwW&LmLwVC%xZ!NJ-lGp$Bx)d5lp+E5`Zpnl?H67* z=*)e>y=VA@>58KH!>c&9m=K@3sRu%b2oPzcLAO71nJ@eI`Ldbp_pME=w$b6hzf~L% zL~ONX9r2GuXqkbg7Bq3Y06(mB3fE*`%)MZ}398?leNQQ;V<%Q5{Y<|gkQjEwWK}qs zuc7Ljm3Tq6>z|zdHC}mS34apwz)cK=q6R8`nW_YKnB0uBZl|PRFB6K_mJ=tFSmY~# zHW?WPqd@ZHYN?h+9|;DMF%Cz*`4YETE}G zuQ?!r>IuA6Yg7f!w@Q`6Vi+hP_^_XYf`eyzX%U%KuDOw#?bdGd&~iu68A@q}6>337tqt2uorG<`9w%0s|73WDZG>O~4!i zUl@GE#EuQdcI*dyhTKo=#ED~KNH7i<-*J*h`FwxxTRnq}x24_gs<+;%`v30l?^177 z2vlZR9G@Jp{-dn(a!xx7X+@YFSwK(b)QLg`jN(`yyl`vR>8OnhR=bpX$bb)kZfvYC z2O0oOPnB;lhy`9S7FT&9baL0RkuL2cQo_*>_O!3S+9YGC;7cUz%AVc`uz<0s7q305}peCvl8AG;Z&v_wWB# zTyIWv==qMDT)6(FW6#EKIQingoB0PbKd%qr)erb(EUzV z?kx-ASBJV4cWPfST0^B2GMNctI;fNHcmJS*51mj(3T5^V-30j|K3Q;&u{mX*O7*C6 z#JH&_G8i6RzIxT+<{jh%ZeF7rSE!w6-y|Ci@EhrG@PX1my||c~pN>&VCs%tP(-~x7 z`=s{*F0}}_-+wX1jIJ^#;{ZIvnH4){e{<$%#3vu9iTIzN`SJ34eRB+aJj%)CnEX+8 zr|G*XRG`^afV-h@;c&%OnG3=6gxSFkMGmJ+4D#}(;wNH|XQ$%ei5huy=N>br^v9J` zk(<``lp1`r9o153+{y9R?(OTniHhg|5oiowXt1RH;+XfNerzbd^MFjxDBYjEXW0PS zIyQz9r|(_l0JF`;Nm`>bxOS7$7|aD{?Iz8`jtqOB&@45O!jIhTR=)LYA`Y}C-3yZD z%Y&cfd|`WUAotvymR%9Q<9`Wc+*v zi>W}Vdo-S}H|!ql8YOZ&BZ9HR`s(LoJV)_8VJ7b-L2e(vE`>wlT82oo$Y5r=KlPMf z_i^}lReXn^*_X3%?&0<#bWyiC_|irxqBv@%^F|6%_Yx^{S)~xsxFm!E%a3o`AO(Kc z;&3KjX9g*ZQ1*zqat}9ev|i&;)|(&S`yNgH$q0foSCM^~hjkkC(X~WQ;7cM$*F%J=C2&zO(|~wriL1 zH;-{-7gne@N+ylgm^G2n)82_{-A<#7Qu2&j7_GlApJRSooT1?IF}fq}Z}O1&rFX@c z66b)(@h1-8NWTn6dbg}bdUq3@M$)z-QFV$n6t(>|4>|Y%OGoG&lGabmPJSYmp1`5Mj}pvLk&aIWSwso)0p4vrHYDkO!9|fm`p{@ z=$6SEBhmTm_#}Dxm>mjqct|!PjG5TBGS^$4yLi!CoE%&07H$yz&ekX$-a*omKGodp zB^AIpZK6Dw=1^BmH*9^c{o?%*S8s5S9&m4S0bWRiiCqv|k}Z%Ls&o8R`QBd=Lp=-K z`)*zIf1-(^HgZIDT%k`T>zY`$X)UUgc7VYZqEn9p)8xcUBvHz%+7m9S`Mt;)C*!Pu z=GeG@FWWlyU=wWx_lfl?YCaHW1;{0Xl;}Md=5zTI*@T@DH4*CA1jID7#HUTQie)N# z)r6S7vm84R9BDag`F9-WO7~V~N*%Fb8_-xAw@nw*$0mc7vKDoCmkm-u4`FGrSB$+k> z*V*ThumV{-BQmw>>WERERgY0Dlgm%?z_5|W{CP`LRbqg~$!v^g-RTem-3>uoq}~m^ zG9nt?KvCyzA8|0OZqbO&|n~@ojbO*&k2kF$;mGfB@@q=+1r3Wv{93T}!gTbp(X$!745UA*SpmyVz z&BNW9IhuK>_Q8KsRX}CtA2%qZa?Xh4fQv@l%k^Xyi=g#z>>M51#NRG2%9lTHyL%+g z&r}h&qbe<+qQ9jZIxj>*hh`= zWJPaVq+w{@B0(O;(Mj#0pr?lmR+U2t*eJ_|SF7UfZ>)0;)54kM?I3ws$Yr{ZiuAhW zr4Pj!avKfw5Zg>Ysle^x05mw<05{%ZXNem(YB+eVD~)8IJoC)WpzG1Ioj1Iu9AhFi zT6o-0AFqkXKLp+|{ADw`=kipm%l-W-@K*Kb=(m;hs0W-+2VW+u|C2haBWUv7LRdaJ#ghyB65>Vn^m7RD z8fDtpO^-|&q6(!5_8o&(T^3V3mB0JSw*txOZtbb8;-MB{i60boaJJBVbo}EA%R^CE z(yTrY5u7M7OAo^0T*)i7m{40s7EDM}Y$Zz1q)i^qddB)>L#;FkxI_nN5PR*@U%v)Q zGjMD<{9qDYrr`<+;FAzDsZOJaztv=#(ctQh^A{*)UbGReMhK7W;(;RHQaN)iR@?l7 z(fDDR8s)2#g;(Q7Fb@7v8ES06*48GsdVYOvZG9romV_2Rckz#LoPqv9YUt?~moiCw z`r^0`yn*!IjO00g-LAsFqkeu}k8gHjC*#%RI-4MRq!xE-o|-|b&aW|kIsIu_VJSRf zc6{2z39VOzMud;VHEMTsx2Vfq%&y#)0plNk4S?&4s0_)`4TWKuy`BH!oKQgZ2q5oAAfSTncbpPAe6 zusH$EW|3zh%M~qD;8tFUgQt`pICE0bs6o~&{swzj#tw>~2!C2H72(Mvf;(5ZMICwS zHzGYnOM=G+Ht5yXdIJO8`MS-mu$hIP2Nx`+GY?a_R;jJaMd4($8Wnr+%hDVn+Js^xDg??8#hXOGXSoBs3Gnd=!_0@xto(DVVs zOrdnb3tp&5F8XPB@ks68@Zr?TQCOTN=}Dy6zR=H6UgjEI=lqyJ0do}5LO-^ov`fK=T^Vl$4EmbBbObtZ)!z^0b0+b=e+A z;^yzh{h$6h+G?KslA5Wc2J-4rq!Ax9B~y9ZN0#+$d`Zm^N+-c|I#H&vzBlLJLz=3 zEX-5!293GhJBj0%*c6?+E8QFUbg4nXy4#(v^0CY=bi0i^0ad(b-V8fl(B!Ih6s&ccJ~MTrI* za)(fN0XFL!hp}H5dVd;$B1HA!2Azk8U4XiT(Ja`X9h=r39q25eo(%9-b^KML~(d{MrZ0c4YoJ0=YPV zf0oIl{w1EAWHP!?d>mJO8EeeIkcx3FXz1?S=hqp9kWb!e|J9Ljho(^0o~g@XVEFADARLPeVZ&Y9PLU| zq+RpjyY_r-lW%J*X2l)7xeP)a^tYdeyhNh_J?rZ{;wfK@bw$k4%thE`=BsYcT##dH zHdT~wSg~>`MY0sagxmQJp#fn*ptvh^-IRy~D6%Juohu88EbUmxNX69gOd92v04&M7 zX(pjf-qo#|;W6K^ys{Hr;zJKjkmi2*PDZ3}$aYD|jMkQ9-3CWuAXMw`@6Dwz#pV4K zz0h7{X>aH|8mw3f$V|Ro=defC*W(aA&^hen)e}e=q;+_8@KuR>dY2$&j!9t%2DyB> zdr^{1pfr0$lGIp<@!&m#sk?tp2oDi^)oW+${AK#>GOy%$GcPm4E^`eUOXcYE(?Cw;b`(`& ziyER#Nm6)ah!O#5wp7q*Uh1@Y8g-Y}DR148kl{ZBAK!EJ`VB|jxq5Yzzq>O#Jmn|^ zXULb8=*^gi=bL6L{2dOC!LKgE#=ZVajtzq7UOXaNJMakxvc{j{Hfz7r^4+PNn% z_RrQP@6QX$yvM-I_C665*Min98)JQfoZhMD$y0{2UV}Qb67B>Dy-FJ;aXOlPi+3{3 zOEcyEsb|Y_l@V3?b?X-@@T>01ZBXzt^fzqy?DVw6eDVJXkW=!Hnt?gPtNm5EKsVK(&d;wxlV}o z#&uSK2yBc78}XX~tso@_&d&5ka%Na{ZN2~J6n9Fz@Bth}8hjSU23R;kHEF}K77=fs zTtMo5GQR~XUy`TBa1p2D@b&czE8>$idLoBq>{vN6cQgge&!S9Ft~>@kW4@{@l% z+7Ptxfc(-JigdTSVtQ$lYL1Yc>85fU(93-@HR1u~^aDzWu&Zt}7`Fb+e8GVwhvS`X z2O9iO{km^8N#T>Ds~#zXw*{oqkT#BXZrzlK>08I5p3`=>?Qb#E1LJN%(TSX1j3^lU zO1(sBN6$c7uJy+7O@`Hap~9xjfpo~}-Hyuvuo`v(L5Z*yl^!qzYB)N}zsExY=^%}S z*f4xwK}-v;X(8g!Y6&3{YD;Y_s6Ekf);Cj8Hkrbsm7tw7=o~h+PcKeM0`nEqtyFsdFPQ z^XI+0-xef&YiBb;2*R^Wu+9 z`&3qynh8oLkH?e)-tqb7LI$+Ogb#-@d)xaBVn>c&h13j?1gB z?(;LOSyYlRPgJgF6p_#OqV<)oNqREWu@pniKr8EJ;~A2;{4&0Q{VVYh_a2v!Nj

D*FTiYz`y15s`G3NM$R;Xa3)VsHRLEFH44npw|_Ni&T~c5knqmm!d_H`VP5Jhb-qyB zlTFCAOtJ2qmuYA6jid)MTowmPTJVU%k)4eThbjd2cawxyJq+4P6OX41+79Ca?)sh0 zbNX`~#wGKyqUHi**;`%|aB>5dm(Lptm3IccZ#h=06i<$=;weiZ zj{;CS*x!5iiUJbL|0dg8SFRi!Ot!bTw$ESSosHfdNmStuTN`XVLC{i;>pzllPZ3=f zjGQ2O$;Yhxe$xxQq#O9va!}u4W5*vUO#JNp4jtYdFia_?I%(lcd(>wHibzC(#hM63 za@g7N?(}bUU7J@IT9D`c9rF*A_%&=v%{B)&F23K=P3;jDt%x89H}$u?e8@bkTh@f$8fl_y{cxT-@Ch? zl1|Z7r7;AsH4ivY+tKAYP1=h3fOx>XgKTd=-aKW;#*z z^!MgyuNUVd>G1bCH#b#sMpBn8GPh^Z{dC&TE@n~@tC`@I^vux`eRHY|!k9O#*k|>B zEg_p5x;07M{&}gA1m8(f=F1tvyV4zAI7cn_hVZ0`_7Sxx!_VY2v;l59g3TwwoX#eW zyYrwp9^%!gV)Kq&x#%PH)&Ed^^%5UD-Qk((-tLlj{!MjMy0~UfdL$Ko(7Z=PG)UNJt+7K1<;M*zodYOf4Q9_P>g; z8%mRF>UttNB>swj#{Gvq>(fA568iE>HuQ7-Q}NOw%Xj9NG-8yqJ2^(k;DjMUt83$0 zp8ZkJlxGo%ZM(?Jk@tegZW9=}kq678IX)TPE!oBvF?r1&;gV7s(F9W?sB)B*asphC z&g-LB^#b5{XAgoKTgtq^t?QbvV+;v*eqm|eZjjEbx}I6U5a(-SYb=?};uzh)Rd9^P zCyYnu=m#cDdU1UA;P>;k*#i=?qA_<01t4AQ5Y63?(GqNv`=OeWH--SiPjid zzo5vNYBm;lQG?2=LV86v!}awQEa0=_B)ic_k6icm?ziEzh3(z`aQCqk@gyP_x|UHq zm65qW3kegZOkhhRatBU0+$a)C zLsn|I?Va?PXrQu)b+t13f*$JBiwf@JBDW58kG%^blFrh+BHt>$igG@>a|BvC9j0oh zxvL(_*U2;Lu9?Uw`EJP+M!jvlc5j!?5tD9e1vN}@cb@>R^|bgnkZKW!?FbakJ6A5p zKuDEJQoX8CMOv4Ep(PPot4Qv9QW#8dhrK%-5AGuBs>4kc59iM0rAMRnq~Fb4rOeFu zCEH#XKm!hmh~~zr6y~=KCdQKtZviR>cTN)qc!BN!cgkFwJ+-qbl^}oLczkNz9{Ou25OgVUJG6KXc z&yYm~i!CdPls1$n5sn>~YAh*ARaJ)06wZ`b%u}IOgZt-Jt&yAxRwIjOicn~IH#aZE z+*Yg>D>bD65!&Oo?(K|)1df2(GEs6Jh)vcK^wTY1ZT4$>Q$B)CGkK_Q!bPAvMWLEP zR$R%Sm$j#C9iiz8%#67>A}=A-vMxqpp9+gX=LwaM9C>sTLD8^jOHV>Dldx4>t#$92 zBQwy!VFurXk~;#RDfxHz8j^Z(%cn&N^@6t z)Y6F`GoXdGQ^p9~NTo>cl93o;DG1x#;45$$<(!e2-cJb}=F)VBxt5n9CyBh%28Md^ zW)d3d5=6D`yh?#23AFz$9=z3EdQ7>hNuBR0_dNUSfDom_mM-~?@k2qG&#CPls zAXjzwa5bJ-Veg&|Dg0k`h)- z91kAxls(9$4Tq0BytuQCt%V!0Gi;m6td(I3E>!dY?|U~jd|7Mu;i$!hi9!I%YrL>@ zB126g8N@U5;`PWZcTrfFd@%t6roxuu)p`kZI)b#vXZ`tr_vLywIw{>zzP zH*0e|b0`AI4B{UPJqTDeEu2OPwwnSPC&Dp5`cx+_Xlt?>&m%;lHgo(jh52`+qtLFr zFF7f58cE92d1y)vZ&n^_sm}cFsp@Ku)aRv$Oys0&bT7HltDeY{}Ap;}NWPS8D82JEslsF?al+^bkzuS^xRR5CMlB`gF?b8&JIOcY{$2)hFy*iX}%Xn|qz_qcQszE_$!8XBz)9M@HB{iugFax7`h+ z=z_P=Q28RXM>j|O8`gVs&1@>Vvy%>V88xIg&~P#_OLTc|0pYx_I;*Tnpc#h4?&3FZ zfS}``!p}x8$E)I1+!8}S=suBtSx;smT4t#H2AlXdRX9FYasS8KdgJDZqv=Am*tJMo zBUN?MRabo6KrXGFq+`wdCTDbcDJNKOJ z<|eyfxr_6Y9bAn$x^%RPRuYVa(UgImT^S7;jN{koZ7+mSg39>?Els_H9r!LMa(=>w zOjfVN=2Rw%dOO{hpWZ1V?#o=skJJiRPxD_Igf$skfwHV z$gY846xS2RQzbTWTWm9Uu3^?m{3xVSfy0)1R?!brKAxLhc@a|$c}pqCuz&C*)!{3# z)|jMw%MH*av7cWed$V$5zbZcXrI}^O%*$2Vyi@oIF$>x6 z?d)OIJ>BD>^<-J+Kakn4CUfVesy|<6Az#d?cSu zl_}hrLpxN+r2ZQm#P45PGX&6~ubMYKyYzhFdC)akxo>j*VrS&sv|TL-O$bdPcQh=f zG=(vaavaT!*{XldR*m5^Z?Bn_Z3iG?G%a0iDsrmLa-ccr>icR>JOpXPg|L){EPF+k zl6axl%7bZu=n_6RuX>vXWhP~b0M0~7gb;u(1WE{htMk_}S5%1lv?KdTeHHW>7@5yI z1g+4B-*@F0xm3&o+AK;*W$q$ZvqD=}&l-9k7cfory3Teo3x7|&nDOf?3vbfrC5NWo zW?|o6Q$hANcq|zJ>S#d)Z?E(FDLn&B9qtDm=Ucy=>hli;EYRrn-n^)4SMpI`#pI=*U+o zJ&M(3e|sae%BGD%%3T|wJ*S`{RGf>_QPp&Dw{a3` znlaa68dSHmY0TfSQIPi~s%%`Sd4kT~ESeBtT6aCmpiQk<$+G7j*ctixgy3-s4JzDZ zFm`q#TgomS4^hho7D+7XPk}GrxmM72yXOz0SuPwZkVwu}sXP{jFK?b)(W&NC9DP+8 z^lo1BA}3|skq+x!1l!pNXleyTLTU7OPeXmbjXV<43?rIZdK{@~g0v=vK)Gf=8j}@^R<*uGM^`n^lrQ4CRN_aRBjyCRDaLXC zAGu1bprGD1c z0bERflb4S5=jws?5e1|TNC90YiV|I{FL(dA*NEjDG65n?uG=yo!YL01H*R{(^{eqF z?TrR}3P~1TQtHn9QU=Rw#=^qOavF3WaSV9ce+7OV>|4Om+kP3D=5nesi3301zg;7L zEz29lfc0mV;Mc#!zxW!ROy522o~S-een9EO)*2UC&3uQdUdk6S(u)p2gw-_O=q{N!Fk-{fqr33_# zHTn*w_`4^|ETtT5Kedc;JFE!|Uk^sr^ME#qq<;ZNq-`RyFW&>_Hbj=Cg{5kgm^-)E z>8qgH-4XEnB(b*)tgS%Ns+uXpXTM4{bO^s}v$?wdg%Foe~=VATvA zzS?^~9&A*M4#UpV+!l$a^)&n~Y}&AcF! zTI$Ugw`R@4#uM@DcuT|Xm%A#3Yu+uObwBM;8D<`Xm++noM8r1MQaEDNSf=ZUGar#2 z?oIagB5F!P#!Kw41$>D|?9AcPWD-?(_)%ojnYy9s=S9i9R>n(os$4FaU^Xx1s1k+F z-NgLvqDmK6@5HAexHpFv;E~07tLCbVubpwB!)0Vw0`#{j`7wB2>N1y zLvi^3!q>dU!o5&7FrA2>X*RnefRlPSXA}J7 z{P-65d#MuZSxIB7lUc$@cxbWma5z+HtQ~?;B`EW=l)KHmv1E8jc&KCP0(2lFpVc4< zBN+0%gYm&GIIaAv-rHQKG>pGxK^U3@WCJ09&F1I#enPN8iC1mbm*GX6gcatxPZ3H| zNp+LA?9KiSwWq%bySyNtdy^S{AFi7H4E_!Aa%z5}$B-aDWw{z(vi@#-Qv_fp{Sdnv z09Kb}$iY?;yIY}4qJsjp8sk^5K0M*v+)H6Uk&UmCH~b6MxJh#Q;$z()7m|a6KNx*R zDh9)K!<6}B`o_}X%dA9x=+VGg-6x-Pn2L)q>J4CU;IK~j)4Th914`%nNK%oTx*(M4 ziLnP&bBfj`NUTTI&8p%`HC%5qa19L9q?s($T>T*lCTUXT=Sv(BuZ~z)Gyuq$qjx3c z9=g%*9n)?)xs^!HzQ;J+(Z+iJwNxi)3_Gb&)MLherCcb*rpf92dojSz%{*GQCOP|0 zN8eSUZ>zvaNYveQ%0y#{9OvEg9%Im|FQRlF0&GpqR-@dixMwRv5*m4I2{F}&1zI6* z3pOIgL!I>M`YAAy1wqh+|2k z4DHDBDC;qpJN7%bE*&nT!TX~gEmW3np|iHL#X3c+;cK|QztAnvurMIHrx%4%}#B5$4l3+M*b1_X3Ns~KJQm)DLzU5_^pReOH z+Mhtu(Dex~<+gjzPWSOxD&Htf(#-Td_r-sNKL3L%ly~tkzSoqbnxdG)4pXP$(pE)m zTVzR;7FWVy%OFapq*SXgMczdbD2`-F6LOrLdMH(07sIv;k~ERFR{lKOdh_vDP)4kV z_$7{K!r1;jWX!0@%?2vI#^v~-1faeeu$+>JTg^Yqfyi`un3kXv?7qy2#od7FlM*&+ z*gbzSn*QXtvN0XGR0Dfwmv3X{Ib{Q>`&?S#e9)fIMh)vrt8=e$XKC4m%*9z+oKG-0!M#@Zw4?RRxsUhnbEbF(6V3e4${yELt zLOY>_ZpOjvuFh=RoddiG79pr1X4tO#joLYMa*EbCS3XnLIZesAb;xOR0r35jF zOrZF0bki-|Fan?k~{P zP^47T&>VDDXMfLE9*+0uurw7Xs`$9?+aIdz9IibEW{92-3w2+VAUM_IIi2Ez;GMq# z@BEv*(PyDFzu!FepD?xNuZ9z-&@ezeQQl*`6NjIlCikG&CAN$-29>FC7)@B;vcpNH zIC`ZY*QH;;9SXsTnDdA3HU`zBZsY1^b`4%?-z|E-0!2*ZU7Nb{sD^f!O(~73FO+*u zSLqGI8vjXjv|`OHDmN~}gwh~+4#!v+vr2p( z$>3UqxRmuyX^b2ERWw`5>Pw8*AL-S@Dt@0BTYaFwBW)+z^K82rs_e+e#+lwj(aeCW z?Kdk0GUKEB(8J+`p}V5CWFmm>Yh%JS6zg~FVux&PWI$D23<`Sid1OEbuZz%tOBn5L z_owtw;aNH1-r!9b2jBT0=hzsw=~Sw+>;IhH_yu0o&FUThu4Wc|*?_pRjk1VQM*MPm z?nM)X9g3Cwk=zj`3S*U!qd()(uv;tbN&qlM6OuHlWSZ~y`qKyeE&SD1$Y(-B3V3p# z@aK1L?(D{&?Qn)j?b@hs@c~pOcCb5of!Pad*;uhO;A^FM-rGW!TQ4R@8pBCD9zOd|ZcV3~l=oDWGMjfR_B7#0BN^A6^W z%lsp&OQz>8c3)WU!LQYAWh(bJ_ZPCf)k;>4Q_*X9_H#e{K!jfttKkZLGliH>PpV%J8CWOwv zegF8kFDz2pk^(W285bRv2jh&O-~2Js!E?!!3Q?iT2b;g=O>9>``bdIJ^5%OhP*Iv zMdDyO`5SovEJtTvNhJWi)&YG;@1+jz3gg)6P{I_Rb3{QPG1TVA3e?Y%6UEIo5q@~fxb@(lKPCyVLZc#|) z=T1mcU8tp7JyR2Pkt52xt`0FXerjrlqhY;fM4ywT+Z*ngr-GX|$VB6bHDc|#sM!Bt z?9B)F_A`B&0UX$5$7xD&iZ%ma+Wfp(LcHDum>Hj`+dnx*l-_yePYMVREOwsNniXF< z%PlTc6pqa?fexN9eTq}M-J82IjECo!muaX&=5B4xNEOSVj4q0JkF(g0{49!M_ktHl z!Hv4ljuYh1RRtR;k1jTCLI0}Bc~UW@3;1vBMFi0z4lhyr;<@bal%tt@)H_QBD|<8g zOtYR<8FZ{s%Sln1fD;wHp#?T=gg*1!;A>?>b~RfM`-iU##KiCx;|>+aM&?u0;GfnP zyC|pizrq>zXKtvz$Smt0z3+vWP_|>G5u~Mb6YoUU!VZ2yv<3>_C^9!{v;h@T?glL^ zk~SHX(xsRpM9j*G$T!8Qa_QEh{z(X!3wJlecmR;N2i-TfxOk7p9 zZ}B@Lz)vclSmeSW#?mqxyliieJDqYHtD~bwg;D&S`Gr`%<>eaRWhlIfb7m4{Fknov z0bm_P!JW=yDrN+|qDwM1__U_52sNm%(@{WNa0GDGC$SqKbL4t`O<|{%Nlsa5BBA7~ zW@oR*xbv90Ljz8g5RYd^pN8FmjSIZ@X=Pg=z!fS9A$XOD>w~)km&(R5pPVKD=BC5f zQyTL&*J&r{L-fr@j2r1$>WB1ibYbZ4(Yfw(6B={LYZ-3*uV1ejnR~kTo^L+(Tjex^ z+(+gcnQXLdCjA{n=qf^rT@CKnk{%P3i(Q%I6I3j1P*_t0mHg*cLavbNK@Zzgs5mvb zb>*~~DK2|m{h8HuXhNa~35;D}d#Fa8^&g%cttdEBWHcJ>jnsu^cs-p6b21!k)IH+5 z8ec@fmtG+A#G!~P9d`J$0wPSH-vROuv+10kil2}8&+K2F=SaSQHGN7NP_ zj+bDI7vt(wF-r?izE)OdW!DH#6JFNW?>-l$Mo+vKxU#()3io$}SK>7l8JWoPqv6Uy z$}~qSuPri1uZYfjomWXn%Qc9ng!|*@WZOZ_r21#(p}b0l>vyUC{*;LWKRWZLX8!zC zD?3+m;s_(C8-6P>^ShrMcZ+pA8d4qCqjjqO3cB79C!%EuTp9${X=NpJuJ&v~=#w%Uri_Jg88p)%>n27s?wJtv${UDu^+}&F9!^@A0X{Wu26`Ka+iR^#cY|KQIZj zjj;tm37KrgOYI!sL$IXACI|vWrVlMO8MwJOxHo@7;Nlz3Uy1TvI1e$NJZ#h>97_f1 z__4eTzqWgz&yB0SlhX0GYa8pSSMKp07;+VI0VzzCN441C&n6R%9L}3h#nOH!3d_^sAx)t|(g;#+A3|sHqGx|a}7Oi25(qR1foT>Rx^d8^Az@Na`if2<0f(^{m`m-CWMoq8uUz*n9bPCzss5jE7%q{fZj=N=K zXZga@T?CJ?+uu<$l>W?=JBmao=MX~#vWI4k(#_xK9Q_?mILsf7dG$=0?2tEc6*Elx zx)5=v2DoCbJQKcZIIDSC=--CoQQ%(I;4^1_SMFMu-tURaNBP)pW*5k0WtAg!J!e9o z(n*>(6c&Y~fG|lE8RY$)VfWf(a=>V(2xXQjH0(?WOicaL+34*aU=;14Xltz!E87L+ zq6;*Gpr!sC`FcAF7doAH88U{AL^1IAQsP)sl&%5=+ss*_n%QQLz~dBaj!EWHKIM|> zSTXp~M8ou2MXN}ldyUcwtv#Z-fOhhD!F_siefam9_F(L;A(^~CNenO+6%2wRlLw&goF{lcu|W>Yev2_QfG5W+@?BKW6mvg|~edcktVq__%>nzB;v5 zImmR(d>yA3|2tX9htBoDsfz!E#O9I{07HL#S=Hr+h#dD$u5^#KG-4VPywE+4i_1!1 zIO=NkNll4qTa)mC@fRPDUohybwO$%0OygjHPr(;5iIZ{H+Mw~BNSsALs%C?3W*$tm z?d;&0n%_Vha6c}m++G?tt7gUvm&O=M7vN+!svK|7=H{G%eHRdtc*nI@1}&jG){y(B zgkmB-%isYn@5j;dwMqWX_ny>rp{TJ8fA&5#`|cmH@jlpCGJj;bX$^`%*Uv^MsVMOH z=-31IwK2&n<=zl&D$WIhBNi$(uMX84{TvV^=-A2Vj5iutE$v-mU+>+d+Kc4h6D>tL z1MS7(Ja-V>N2=CG+6fPvX$F5}H~nj=Yo6mar`f29{axt6%bmbYdW^^g5%}zVzxpoR~-boEo zGU_4z%@~RdR40+y1u&YqWM19>tY_$HICk)i(5b1CD7DtO#l*mwdmzPmNnR92vFQQ& zH{hkypSIKa%f(N1Zu7SCl2*dbv~nX+m4oMj6YB`8Ah{9fAmLuu5S938Q;L(0B<|C6 z4V~Qi9uP-DlE@xNEj3oj-%u;F7`Ly1B*_bT1>P}RkeDULla$(|;g!46wBUk3Jexn3i+U z;=OyZ{{&s7M9AQ^^607RQ~aRHiB{jf3k|%gnO(&gQgH>m+Q$WnfygxMfy&K;Ge$s> z+jn~XV5zoQEWOObv^lEF>h?M>09Z1`#f}c6?NQ&dFaFom4KB@`=mdM0+Lv~}Q*(?B zg^0^tS;VO%B10a@4=*{{sbNuy{zJqNxQUMa(hz4@nlUfP^HG`83PJZTqBi%MUQW-l z&4I+-Ix6?$d>j8`4O#wQapWoVE(dmBSFuq&zOfPp!^zmjo^(5yhN3}M3a{1NDR|;$c{r1oQ zE*Fx^B<+1OKF<72=}pX_-kzWLr29oI^9kg62Q%lyNxuwRe3tzE;LM+#`3qAIn0~CE zHouEX&Kt;(BlL3w2Ha{rqQfSUUcL&L7#+w~;-Db?PjycH<|W87?Fqo~FL3QR3dA5(iQ2jY<5jd8ULZ}HRk>TJ=r+#i&-;gLNoJa+`2S6A?G4>Y2>qyPZE&1aLU>}Re&+wKzM^#h{lLs0Yk30I;=43* z*!(t)Uc(ZhY7zBL5hwB)_op5zQyYR8OwshSG}vDErUkf8aF6%NNAkq+>uP+qubR*zx&QqGBcSB%PauqoyL$^0a@~bBriOMnkGAT; zoPS0ulb7D$RXbT#Phz@D6sGM0@aVp|vuS-n6fUFlN~mN=Sg-R5RTNyHh_@L~h`UwG zE4s7Uq?}n&{m*$jI&|pcSS)Pinr7YXsPGb&oLg>EpZi+;7Hc5F8L7Ib>(fq3xr7x) zMlbngG`q87Pn;=jMlYKxn|GBZAZCLs@750FaF!ebZB2k-H6*sB3v~YMfL}L zs8kk2gU5wpT}zPLGJ!xMcj)XqngZd*c|zH8dP7>&Y;{WRnA>dT|69doVWs2mRaK+m zisUUVZgCw|dva~eVPziI)oBdY%o{-@K`mu$!u3EsM;7AA1%RL8^$ZREU;rcaI;QRM zRn0#dJ#34Q;feFz4@WH5H^70t?m5$ZLmz!FbcYg-3?Mbs^}rjr>CXnBj*>y+(acqOqyLd^KZQ_cn$I_> z=5O|P7agaHGr}Z4)W~lfAqU>9H9>krZr$VX!4OMiI2-kbJTeeW8M9e@w*ra=ou#R z0b_jhOtH%**I=}?GTPiV8UFaDVJO3`jlt`o);?yGwDPM{kt}BL;qiB9H?ODuU+HJs zG@I*I8B(B;^_I?YI0WDUi*PR_QTh>(=yI@~zN2|aAQ*Eq{%Z;4W7x3>XK zqsk*`^?XyG8pz{IQnY7u^ZvybI7o2fw`mR zZ#3E5+aH`iH|QSj#Y9PrIz;D6pT@(Y?`$%`+2uli?OL-IsIS_dR1h)t)6D`O$Aej0 z9Uc?Rk=ep}^&_L+GekP_)|_n=hIRDsdd92QFX9VoVtw`avRmBxxa$vWj?~xd;pLS$ z-a^hrn)YsF@rr!>(f8_foa4$ruiR==Z4|26C&w(^H~P(P_QBxfGc-lb!&kHc3NlQRSfVU$|9tx63=C8S~SW z!T@NUxiuHtTld_AtfbMS(|y!?1|+tkYyMN%L^4k+C+`Zdm*U|l(Ey5~s@Pbb z8P8~L^o!w%j zG1*wCxobOGEVny8`9vzTB28w>JRBvbSd&_;b96vfL9&zTnxqra+*Ccr(oG~joaSPFugZo6j{j(_m{Z1 zxmpWx#CGwU6xd{9?-gW>%Pl;9(!X$d9B%vd{D)NzM8d9mkM8BmCXC0b(-&V8ZZo2R zD*>BKvIB0?W7UTSD$gx0r^YtTV2lR-k!t|xu+MlZV=3Yz^d_GSYtF4^D!wAY1O98eH(II|*7*cE1hKY*YD`Zt_CD0<;hz(p?4IW)%+`7m)MEX8D4%F8rFH9U=W%~KH zNp5%rh@1AE?&MNsc+F!VPJA~WSoF9*%m%Y^Q=Jr`8I7F%c>L|jD=)1uvhzDxYO5Ze z!BBDQo@%mk_MNYbKb7nzB{ABYm5Q$0T8FL$kFy0+UtOy*g0AwDpgD0de5sWaG|u+g zz&*YpWx~VL>k>$1IDDBe;X`_g{~m1?@7@PY%<1*G!h6O<>1H2)%2-L;QRTf(;oyQ1 zU+D$G5Q-@&5noiCwk&V)o3-OUGk3ms=ErbIr3DZUjl(90$=Ww&zKOSjVq$}&J_IzjGKJn^s3ouIjFAH;(~XToSzs%gj3MjEo4ZhO(t4tGBEEucsY(lI0H&lv(Im zjE_PiE^?Yav$E-<+q^wlMBbiSe2QSzg$~bDz!X-oAIl59-xJQ;mXGLde5KD5pevy_ zmvYCP@3q`|7hB4? z$Y5$M+bS;d$pZ*Ia^MkvzsO6J??CdJssS^Q5-Klth-xdFN=2qT(CU!~I(AzUB5u)L z$_hqK|DRcb(cP)72^%yDB^T$SFAdgS9~KV)!L*-0X99|eadH*rbw1}*AiR`*1Fk!{ zGZ7PIl*x8p9`8QRa1d2|pv)xRhlna&55diQX7ZpVCfc%-Yj20o$c}KFow$F`_1=la zR+|E&gJv8n+2emF23zdy>k1Vxn-kRia>AbVY1mxFi2i`+^V~Rn+U1MqeoE6bhHh{j zHyV^WJ08A>zCiG_*aGp))f!YgFS$fYnDDwAq@8!z4BWMrd29vILRCl@IT7jacQ-!B zBP+SR9N=Z{#yPLN;t@&Ik5UD_-9-|MOSO|9ppPh992!NwvOzEz%z8g2NTL zN5@!XDtzVnH4iu1AQ)&og1Guo?Wh_NZl$}-M8$rs!9d*T2ka0rFZ=Iq?N0@KCGn5m z_GJB(H~N6SxSiPVZfkC$j0))CT{ekJH}<;kpGiqo^e16)VhZ7rL|bmUkFtp%qQXk2 zoym3Cf>ZR#!i!`_IxS@9ziu!;e|U5S=bT)2%R@4{s4^lasJ_Yg+yHMxJUYf5$16)~ zcDF~FDiu>7_Lj8g19Om{-;5YWG$ECJp$R(esr-}PQk_{yjM2Qk`%)OdbvlIyX~1EI zyHW6Bzf@y*@m}x&D^YPIE?2t-fuOu`PK6#6ORx7m93Xdu26u-)%c=1OK`|E=Ui$`9 zOgYP=XI`S7Ev|^JpjTF&JZ<&4-D;$|px!1YhDdyp(&?uj9XhCUHhMW<}R@_x-s znzyP>`c4y|+CC9{Q`3OLIr%ANaZ9=~6>AAP{2(U#QO`C?AdgHLCZ0i@5p*mTD##AO z@2i9}r!xBEL2!Vw%5@Y;aYw)*>@j7vSd{8AYB=QNbK*5}VG5p%uyf|38Q_wLG2UMN zv$sQbKm>6SY~0Q8(x`02H_kbF-^+OQ{^bleH^Ok-@~Sg$6EZ&*;v7AW?$ai9Q?a z7QGE)vxT=QY=iQy4j3B^j0rtEQq-gFtNdTUIiaitsG0q+Fj?ovW|nG_-x|6yW+PRH zN}nhWvj_ahdYie|9WL$KDW^Et>mW9=$bG&8tayX#6wqdvr#JjnHD6J$b-QOAllb5xHX!8h`&V znbyWV2n=)*4rpyes8uKi7D4hUlQh3X$X)8Ebwlu#nW*tL^Z1lU(vyz(4apOe)?Yp# z*2vrZ_Ucq?ja6GmX2?h9D=~M~IYhILZbdvGe?&2Tb%L@CNhB#lERm4km{d(UvTm1c z(}@DW2>fU=oXBHm&-o?kVw;f>VrClGE;YLSwoyAewJ2~H{~yd)s)5Z_i3HCB>+{~r z>2{VlLfkoR2aJ!*Z;c8Oz@(D^4#HQ5JBL$MK)lL(6a6^1{o($8Jj#S5@pCMAUtQ)# za3V8vdGQSfUl;U1BMDmgxEX`vyFgKF z6&U|O#M%E%Zp67N9etY6C!?L1BSlo%&(tb-9t`&74`eX?#`?uWuhbg4{u-uENbD2B zs;Q7{&r@Ev`VE|zq!*068+2~nI(N=M<=8Ht<2wU5WPX#n`-S}{@@nV@n%{8N+A^q6fWt8a=^=FEITP;UrY`HOBI%iQf= zxzax-#;nThP4(&m2(4S5ym+CUii3*>lV@@ZU=qhMqt#N&D4v|1+uHqler+lcHp9-@OjP`9wC;9awIVr@IZgiNYq=&9MeKW|hI8D+%kaAF z5>*FZ24g&6gmWuZ0(O;ZNww7S^167odY3xTi}c@PMW~I5%)RXmrOMdFt>=lPp&ASD zC6tX3U&=&6aOmo$F&*a&ximG@tNZfJTbuc$EWqIA&F*SON9j~0?|>@_T?1<8*VbUu zqK(wx;mpaNj)@*@hraMgut;-D-DGI3Dfyp+?EfjJ#pi^T|g zdP#r9tcBB=7wBI4c=Z&wS|FuT_a%|gPobO!dqDfz=TVGN)gj`5Ow3QyuqRvIDv|X7 zI(h-+(XtUCkK5RY{uu+5SI{Vuh8OcdR)O5E>A{D&{zrT@U&I=e$e7enzqhNwM{;jz zd3#rxIX9m`guo~^>7J8ucY1M-4-XB1=}8`H$@L0!&njN7xmcdis2a!?1B(4R+GRxo zGmdR0bE<0fyVxJ>E=#pW7A|N0>!|w%w}n7exK6(i=SnOjlvZMx5?8O_U4r zBM79*Q49@?0V|TVywH#@f*t>j_=cpV{$nX3`;{cfEt-sCqqM1arorth?ergMN{Yhy zDDBnRG?AB0b#OVsUItFej=XHu!sV3aBq`K;-*dF}=AX>5q+$tBf`gUS?VW|i%Uy`3(gX!MbiDw9*m-BksrdA>=D}x@k|H!J zTg`zxr+_ux4%ai4%xzU_{yC0qB~yo)Uf`AaE~yo)MkEU%LhEKH+%L>LB2V4v9|2_{3_c_($^x3{<69bk<_YCS=G#_%7cThDpc)zc zzjimiI<5yKi|CcjM#J+^X^6mpCENd=Z2zn|nn!AP(gpm7_-y}a>$TsXGh75H3dJo$ zT=u((_YjsMotkGpb}BJK>qap*rLm_>JVHmW9}&sZI|UwAyoi0;O;BO?a{9tEt_*+0 zxIf^?l@@8ZFL!CdKQF{3KTkINFso1>m>YRtERIT;m3W42bM?6 z-OF?II}kO|jbl~@D+iED%_5OfO5S#`uxQosuI&ry_8ok{wk3(lD0RW1(4aU5x>9R9 zrHH;O!QI|22715$|CvBBvN3VWe1WxkpEr%^fi&&2Wn3L=kP#_!ZimT31(DDY4`va#MZV-`_4%-$LhXqck$iQ z66Jw49$F=P8wC*k(cXpuE|0Ila0G7mZ*o$qA{Jnp_q+2W0Y@^0tyFnuTilI2SFbAU zkx{>?36c-3MDqp)CoxcHInNyVICw_HexL_zf|?wSa4ub*--o@j8zSzyN-D zVK`0b0nf-QKB9Kbu0oVId$m21-X8;*592`5-oj(0(eRg?s1LOA4uq78L$-(?TnQs; zNrA*M@@#Zot*GQ2{3p4+x%a-WyZp8Y zLezQ9!F$ATB>x9v8US^?fPQ!R1^Cz3jKcQuzRV}{xxH$f9q>bYss2AX+P`Ra!)YNb zf4J=sPmml#9OW9xDl*5NiXG-dMOyFPBU=7;UBtHj$ZN{Q!X3itfGY{Oni~{vM07oh zG5jkpH+H4!w%xCNrX9xWuck87o$q_!hBUdiJJx5r`;Wu<`Epzo=K0`Uns|KighFwG zG-d5|yP04t+MNAB&;v}#Io$iZ#LkE@5<7qC!`Di@6pN9BvB>^3RB04fbz48sWcYT6_b zMyk6vMfGi`OO15#k-R!Tr+2<@vY@#$XJj3v7%O2kk{^-(xZ1{m_lS(FCTBba^ia0Y zIA9i_a&dKA-kcFn0QShOe)plDnOG}-h! zgoE;;J-yg{7iVnQmNEg|ppQPi?#WTu$lt@|r4hCBIsvWL!Hys<1^Ah@;{uKZUfNTT ztGfNorV^TF2uji3)<1nzX%dDs(7e-q$;+v--j&By)Q&zLUkl_VFObd}`78WlajUDWOXgU-7-#oj%zP6gihx7Y_ z9yE@-;{3QgHY?E^A+Q{VLia)6WRIO46LKOSW19yPoTotWTGlUag5uMDmbl%ikEBw2 z-M8}&u$`SL$-20J^FssAcJ}*8+4dKX0-j>S$!9aJc7NCBHv?{EMN={|DZpP)DF)16 zN`hu<%bYQv2R*Sf=CXfqFXmw6BMr}AWMsIJ@52g)6U4zZMtW&}5B{zRnXMSy%P04t zeXFwN=fC)G%~JX+X2L#Kb}dt3KT*?^jvasOZHd@=Y3nAd6;eeW^V1B#LgBNtN@}Lc z{1e1DVeENG>xcN?54BJ~L)V%+e(6~4ddr5hQ2zc@?a$6|S~57Nx4N>eTd*@ex+Kp* zYqQ2iv2bnUrOg>Ve!*22&&`gux3&ODoGH(6%-7dfm&H@Qd=pyP4MCnaWl2^SySGKc zOY3PYw(*6RO41$}uq}UXYhd>)&}wnj-3$@P-W-A5V6e1c%@2=3yfF%n zmf1p}p5hkexlhK8N1m?jPoy@*(yikQ=!flQk{l0(XPk! z-&UJ@Bu_>YSG*K=ta0fgx*6QzLKMXpMQ9J@`cnR3mXi3)@3{|&eu)r|Wb>M7n2}=+ z`0?*uS-r+!Ma5Dq1gmF~M`gYp*f{_e2WANxIhou9k2AoeAZatmShTcg_ZpQf1sxV3 zA4$5-ZhOeYoz%b4vE!!`+r|wD4nh;YH^MMWCl(OL;W|u*8&We7QPs5|t2@~k_g~>H zV5(by4z)i~EuwXuQU+;tAJN<34JQ8UDSjJ&fvLpbw?sj@@s-J$yt%DDWL2 z)CI9-MKf<gAU20P2#*@wvU$3)jZn8>;NZ50e9xRka&0(Tyq~uZ*1?H45S~*%{DI`C)S!%aN&*_ z5W?m1sh88jlakKvjfdR6bNZ-ct}R-ei<+E=6}a!_Tl_vZQE&l5<&P}CBmy2Q;5&4C zua#|69)N4&c#meTu*-j6z0@6;_PZ-5-fn|!Bs+)fI4gnS#LGVpNl>j7WC(F z{^(Y!>x#N({_@#HDZ6h_PrAQB+lrFN-e~jE2u&iS_-N{X72SW^G(-cMf{`^J@CS7p z2KXR**@+bkn~_-oCDvu3*MfiVY&kn%3gp^WRN<5INC(@U_*2F=Wsc;UC(I%4 zfJF^fB^AQ@I{HmYTwF!xG&!-|s*>k^FIXgER)g2powzr&HYh~RIxiEWQ%>K1CudAl zbm>@;N-RjqCh4GaT3QP>E0r{~d?YlV93J90fIH|iT?D;boT+?tarb7e`Z4*z04Ubj z_Zz;5vEi6=F=Z=eVRXyzQQHN0nLexU^3xe5jYl)Fsngfc82#iEa@rmbd(wp(8t2Re z_zktxe^V{}zB;J)z)P|X_LJ(W2WJkGmYB~{h{C%BISDK?FSj#Zy@3&Xv>Fb9vfR5q)yWO`N#?BjmLnd;rT z6(C1pU7&0a0DOQuqg$MRYS&EccejfEA^!!T%wO*e%#Rp9Yn||TDH9i8%xe&#dG$TL zb1A(+Pl42+b_e|%^(-&vVSh%I^G~B&otIdNAKVB}8x%KEgDz#Zk*OHf|ZPXP4p226~1oxO4=P31xrr30h05NU(puBpI`19V~zoh0l)DqZ` z(2@lULFvwHEy!UdflW6@CaNGoNui2jkKtl2oBvu~{&X~TGtQckuJun5jRHZrRUpWD znvn!h?e~ZQI@Y_cjYYrCmaZMbQuB)jX7k|pc3kwc-rJxj&l56r}V%K7)kS`#T7FixTC zzRh;;AC}2(D`2N6Nh6UV%E`T)eH%>O50_m)Hy71XPml}qlVoQ5({ROf^>_5Z$=L{r zhPL4sHzwZhL!8~R$#}LeorYQ?uXL$5Y%kQec1l-f&w10hc}a2h?s5i( zqWpCetyS6^wOIYFmk%brHKPv;WW;3(g=J{m*T7BCoKmAQJ@1?yzttvPc9t8+1FPkW4N}%^Z-kxT678+IiIXy{t3Qu8X4WW5{FUF+{C%C&^{6n~dq< z5%G^dR*SDnk(ZC>U0v2Ffhocw$?_l92|qKQTT7Y7C{?V=!+Of$4cT-k$^~RGC}UbX zbKE97QoG|Fjsn6 z}v{&TD!?=)}h9lv*W8T>-C>9HbYF-ea>@+^UEoc2L~?AzbBkv zB)S6Gh0#31GXmYCclvntPkVKD=ecn-V;Yh%@=K?4lb4SNQ^pm)Jvr}RmKXbPb;~{_ z5Bg?2@~wI(el!-IfW{D`T1$@n2fa=s&oKhiS_O~ir}5YbekI0QGp@O^o=qO@b|5-D z((J?i9k$)Jd=L&~;-hlHXSrcun^G7Rwt48z=PL`=TVAb>q-|5n8ryz&DZ+B;5?6g< zAetIiw6nE)2|?prEnm>+lD)$=Sed(rISl{e{0vSg(nMDk<8bKtQ}W#}r%@)0(bN+; zQ|vM{?hm=*x9f+C`xt-Wm0lV}Lgg?3o#D~N@YIFFOw9=P#+!UY+`@(JorG4S%5G~%Jfi7slrNmMQ8pQA2xN?89Ej~AC}TND2y#jOT6dP$c)@LCk5=CCvZx< z6vidBnlS(a{@bte-+oE`(r45!{j}_7OI7|<^sCdYou|`3LhaBl;^~M(x2WpVy1IO_ zJQn9Z8Ir`$5qN}-cL0NHZdv4RUK(8zp>IJqmz^qB49M!f6{;7-n>TXXP<@KTG*yzD z&F9P(i;o8`Rw^8|o^9YGUo?OF4Ga@qPprV8Fh*2D>p|6Yv zP6#I(p`?xbs~Mzgf5kX86EPGCmd(zd-`h2sYxZ*dcyzFjSU4~lpWDhVYYUJmATSSh z@}cH*W`2Ds0~k0e(HZcwxc+1i{LSDH#Y2{d-d*=> z%u77=;lcjVB}GStAg18bLvcWc4&nT{3+G~H)Wt6BX~V-?sc^}cGK=AaKcr0}yvJ?0 z=5}SO@*g}hrYArrw(;cOE8a+=IUNoXA>AbLL9<1 zg(+Bp(7NE!iptyGgc<;ti$d+j-*d_I72zY#`C00a@-q6h8=~7bI(@4B(i_9 z$(okK>8@VWjtb5P_&|Wr$N-srzyC+&;|(!ba1$f-P*uCVlW_dHjf1sdh|4IK(NFU= z`vXuS`qJ$j7wOa}}c`MYS zCm#2W3JP#(@xuT%`~SdZAGQPP1$>4N+mi6f!uJyM;em!2s8Z;g$L^dteW7KDRw~1P zZ|8wH5czL(1hy$I!U3*B{|wN$6Ap0K#%m~^3Y6afL>sv#&f-~~t)1YTk5QHH#dYBa zZ+Lp=59}VSgP-Rs<7EKyk{KrXqEQMNT|7U3uByZxTIXD#6HeomY}g*s!r!)#9egw` zJ&-gi30+R4?7ZgES?|}3Q&a~feLHyEvD=-dys5Xgla(6Do;Xruk&B^!D1|?0BlKW$ z{(@Yuo+-DMCcrBk6O`ObyMJhJ+rg@h87#I*8@>IL?m*N1a7W6Yr?a^H+Sdb{<1n7L z9!@7W`_a96=aK&NM&Ly|3buQ9yF;+UsJr=UDra8VK7eTRiF}n{o1JlA5wnFW?w{g+ z#$hzGsJ8XD)V7|7;yzjXO8*cHH};{nO(gP`c8T=)300>;+;TuuZ`#(SH1?t>UwWaf zcN4hh>UwcFBLY8-7)l`&Yj~OelJthT+Ty3XXYb?6CfQS*=h`n|aGd$ zG8yMlB3>)1-u%Q1VO0@4iV4c*Osg8-d1OIYXMbboGBs(yePrk0JaYNkgU*#Dep%Sx zC~c!jI!Bq`DHcvdp5QPJK#t`bxKCJQtownFH8*!5p_E4g>re;{{Jyo>dwMRzt4w+=At_2VG$yi5q)$@o(&C5E8R4cv zn%jmELSlrR`fOifkDnE|`%YoZ!TH2wMW4!%hI@xQyY}v;u8);g>F)qX=$bFga-n|I zEN@unFchS>z`n_GKqtr0l&E5tbq(E)5;uY|A-#ZYVRB{ffZfx(4h@;B1{9qji}U?w zQZcNS-SIA6rhiBFB^k_0@cg=H+dZutD(>qbNOIkhdNLCaLAPvD#v<-WUJf%>O&{ zm(?Whi@rXl+Blw9ZKWbusKCW;%v(s4$h^o%B7>9*rClYZ83pSn3@KWoWSiirggcj< zH54dWECU>Bmr&*v)7N+`0^bxaQ3UNxV}I+-%js)8d>k>YNGu)k1p}+MoDbZLhdP|- z%M$a95~JkiHnkGi*t`*3iU_x z{^P$Mdfwi)TQTl{gYj?)RksKs7NGXc&R!oZ2mkF4e0Bv9xL`GXsJ)tvrA=~ugN=w8 zpevN&2_aTZ+rqm~rF4p~CwlCEKTvqQnqHTe`oh6|u-jbku4B@=l>3tFX+POKj6Jn3 zU$|eF+Q{O4COFKDiE@fUUP76l7}ooq*%^*j2KVl5)AcLUIx2@cmwJtIGtFO(jF-0fZToMgtkm4N@!88WnBsaZ z*Mwb;zj3Dfx&oMJcg^2Bw$RvM+T|H_yGMtKk_=bhv$@EI+U?Go(G|=uF(Bie-f`j9 zxWT!1J6GeqFcZ$3O22n-ZkLX|dYJ&<3JvTrkeQY{87OfOTc_s9$@dmgJZjmIOsfnl z_=^h`@=1r&xeCpUljPpTO-x=-K2=iH(>_|?3eX-uS#NZ(0e%Bb-U0JsMdQ;7&LQ3T zP%Br4{k+8ViuvJpc!{)uMfDaM&OeWmih>etQXid{fN$gsy-@?ir`MpF?|VYaf0?Xm zX#1IFqF_;FDu(47=cLi>?&)wOZQ4pV>UlV-9Q{tFmicbF2R-S_Fe&&-)QXJ((dGq>L<_v-4Zi>rz(2~`9VAcO@n z9m&Bm%@hYmmTgS2fly==z$;*3;~H0N%b=K;mA1TWCoyp-QowOp&hpA1%IEw1-aRwI z%lAlg_SyS=fA72B=lgqlsUUfyd;`&V(lwZfy8gq3Oo=H+QGWLmx2B9GaCWxqd+pA8 zJsKF9H(bXIS+;!e2s)jr6NqzBtq0$B_WGhqvzs?9cdqOPbFBXL81rC*W+P_0vE_-G zX|gdRq&%^uOm9`qy_nkGoi}@$8pdU-+Fh{Gzj}tIaFtA0{4>oiBr>LkNRMCQ78B3| zbTwv}RAUN+Ez4ONTrKaNi{JC`FD^cV(HLFjt1Nv>kYdK+G7C{1!gWR(Z3`{?gIB6_ zRdSegR6P1(mp8t$@J2mA<_5xxcK-GC>YkJ)_Xx)GJ16^6=nU(x$IV+#CD?eWzTBeWv;KEOJKGF(3KOj}x z)6KIzi+cQAZx*6vr;?~_pzPhev|}qNv>2w3^I4WDEvivwPQ`I;?Lg9P5Q?s1zQTVC7?7z^m z+)^FUQNdfbT!qZ$Vzah*;lhG;c(cVG(8-I^ZDu3lS|miz){VY@?+(W2C8cv$JCWM? zd4Fcskb4nv2ZtUHQ`fV{rNcP2l_be8pGLi)8Q)=;CN?tbvltPPM<+%F4N(gzl1hVm~&H70DaPb z(jDjr!fsH|KfWaYCaxO(Y|gm&EO7}c-7oB@AX(-|9lw&L1-a>VHGETa%)r4Fu%1Ef z_w~>I4xiU21q+FGGiZ{HRX|q>eVc2cW&k~yBZb}AZ_X~Du#{{ z&AlZMQV?k1iBqJ5Ngx*TW>Yuz0!;U4?`)=43F>>DM4KW01=yY9$}}HOP8d^CV}&Fv zXsl3Txu3SW8OGL^c%os32gPq}C!5zzm&yKqct@&BRN2g@I5NS+7PZ3k1$#Smok6** zhsS%vyGX>j9qTN(>UR|Aq1M2@p9qI;KVXB*+KVj@ zCr1aSWc&x%c!Uje)TV0n|+2#hXFRC45r!Dshu_)F} z9;*u$uOti*>xpQ8YN~yhK0-^2S7(FK)l;WPF_Up+TFxdMVdUny4nA<8*K7aqKp&B6 zBbc5K36pV)c6|g@8x1~)afxzsudFK-=gbpcBl6wjh<81WJH$;Va0Ni}U%7|k0a0|yoRhO64>}By z98o>|Kv7o{BS7n8+=oihw1}VykLjQoi9+A-{|9xGcSYjzO8AAl(5=Z|?9?}2MsT_v z^;#R2!K=z7_f)VN&tXW9Cvil!jk6gk#z>VzlHiYzB)Jpzv<>Q~;sqX+jkP#lwF71j zpoX3QBy1X@m_DMHGSSzP@x37gOCqfRbCNz1ZGNyp#aN&8S$(A#+5zl}LUqT=jE}Z4 zdUCLJaK`0e9h%DS&i1ziAOJty*PdP{Qf>mtJVtvFa$Dv%@+|KvS&+0tiZXGc`wo|; zd;q7<0kt%-Y8T&uuzwB*ObIsrd!00 zuGLCI=}4cqvhLhtz#r5teeWJq7SoEOpeuq2HQQK%0JP~p0EhNvzj&|3U2`wPE_2O}vO_0P|>DN7GpnR&52P5Z?Bt+%#*C#KRyCN_$phQas`gJDrf!&w?$x*QI( znMV9y7P|L`58b>(p^ErWe&f1H7p5@XlrTQj;-1qOuxGJu#u!n*|4r^Jj_qh&u8BF|BZ)LrPG=?*p@DSR6amaT;Y3u8F*`X9G6n*Qje3H-LaM;caU*U&SWZgyF#Q;KL6+W(ikg0QGUG> z9n19}!<5Z9(A}5-(u^`xnQAX)%dsv+eE5ch)RM<#*WwPWfw-SA1zy4a3nKPCd8|iD zA9ta0R?l(882ji1bfUFcN-{M|PckR1cd2d1%$xa@aHXr)UjI5IxpMMN>0YPLOsp1- zYbTQvfZEzxmv}u%__2;o{)A=xc6Tf>Y6Yqz~z*^(g!leYQxWwN$H%gLA&XhejOP%IQ@;pAOO zH}m-ae_omRoNb=mu#YWd^7L@i93Z)x_Q7gQ3*1<2-Yz#HBJ^v%+TNkjcRKH-5^8^+ z#JIS*btQISf<;M^?)9I0E=ir&W~<{%ij>jg(n-8Kz+q5*k03VRkCy-zE-l6*4?{|&x9*>67u5A#>=+xsVuM6p zh29&(?*#Qlc_O%zwCw${yrXzKNS?_4mVlI<-Y4(ZHjOxnvnCzZOaryb?yeKljc1$l zg)CCq>tK=PO>XtHUNU4Q^Lzx@G*EGOsn6Nv)A}^LtSuZ?hX4C{rGHQlqrXx-;y&j` zhHi7C2l7YbR~UEBzl=$AG@hfWBk=u*UjZrlVsz4+Tt_^X&a{D;C2}R~XwHpF3Gh)k z|C4uH%%QRV0$#y5<_DbOPC08W493sxTc2RGjrDx>1$mvnpeK=o^AGdvjn+0P2If!n zS)<9^k|J<)9G}sZ6T8>2FiI0_seQeY45^KWhJ)LW-wLTS88yBNDI7haB=o2x4BDIh zM}LctIthDk34Ycx=RmTc)G_O+A`34`85!zUI+e(BAjRuhPOYuy5i*4cnE3_#sJ+Y6 z;Uy8Xtb&_T$JqvKWCpD;n?7C+Ddv%Q!XGQ!S6BVPG*1erY%YUv} zC5@k8EX78$le4?Cv!mqI4|*fZ1WVBM&@b$uec-H_WK1eVF@c=9pH`>QKANpyiB221 z-Sp2uXgoo6>$IGL-|Oyd{KokOhV$7^Zta8?vM(-NRQ{6uJO87WMYGG(MSa_-_cCpw z?0M0^0EE1$YFq}1#}pyLfY4II42?3|GeIW`$Z+?7U231x*Obq$Kcy)S)siq+-p}q+ zDjqXX9ElE^;;SSF^nQwU!e2?`XVRQWWm`KZmy-R%qx!_-3Nr*g&E9!D(w!ZgoRw() zqsgu+`eFLwI5dU67{^GhKkZ(&z`i8*9uFS55tU^{ivSEzi-0)&mc}2k10<{TM=$bK zqAa+H!K=gK@T+o@`IcOqc*2f2@@IIwURRx~|4>CV{(?NevPA7uRBVsA(J^Ky`s{>d zXNODI=LTzt2m%@pM@tHT9opPrflN+!Mn$fio^wwpJYilHaZjC-KL`YDqthD$6Us_; z*ogL6+~~>uQ&uY2j`zF3xX#XL9!0|7%!r%m$uAsLzJaW}szd zT#DULp&@oEsgp;atu3TaiLh;xIZ3;8H2;)%fz+`Z%jqQ=?-bsi>a8f7@iFy=&u(sH z@G?xHm?jK{(vbnV#NCO)&J-T4EPXe_GjTHM+-ywD9~*Z)UMsln=hxgaG6fIrsDPG zcGVP<+<+B_Hjg;rrZ92vRt#sH6hk0}nJ7?`$pO!b4iV|2HJ&oMe~Q;8wXTDAM9z8$ zz)9tP&UOOd;*YqUbHZO1)qa15&-GUpb{AeN!|)5)Bwxe3{>NJlILskCWcZm6?5+q| z_zB4oOrSi@a*qM!(6E3PHB8R@2?2LtHyEj@T*1nDJ2SwWBdzh4@Tih*_bxC=m^9+1 z939Q&_K6G0x$GSs?CxA9L3D^*-&+fwD$QS;U=mpj(oU1ZWIu8$n55=ghpNFxK+>D0 zHJS9KSxQNSqpxbim9AY6C$=i*I?wK7$xMn$8Q;fFD*2IbolcCfk^@a4LE8ef|s2qDHmJ-=?1i2-`~K-<6HFNVrDu`IPt*l(~t z(-dE2(CU7gEhqhKH2vDHKO(*LtyvJN&^W_PCEN(+D;`T-z`s`)@ONYf-;p2ucJ%zC z>VE&+!Y?%0(J}t8lG@Z~^Tb|y!>tgc;~aLh*D*t)kcNEqY4y)U&_~~hUXTJfW zI77E0s>fMcgv(LXjcS+Z%?F!!ocjzDbFp#J+9|DzN6C^uTX7PKmFgb)sNM|5h<6!@ zxOyx|w22U1WjtA7=F1#ELYQ35qQ$D9fsfW;DGy9H_Pz-CHkjdZ`*{zPWrxQ0H@omE55w9sV zQgK*r)$NZ4-xdrUi2M%ro{L+B1rvwN;_zW!RlhAvW|e*NTkMm6yzr#TfUmK?e~5>( zIw*S7p>j4cG&J^&5HL`FM?|0dA;nLZoPi{Rw9I-Ttsy0(p*d%u5pCl!_Ts{k z9ZX5g*p?RVK&<`~D7;qVl{Qy~S7TQ2AJQfrK3&zXk=zJRlg!~8vUEk@boiToKJu%C z1H!1WnPKi07uN`^-S3Y$oRBjw7>mPm;SOFD)(~;w=xwd&>z(+_uEtr zCR?q0&Xv`IBq17o0+sSQEI)(_=@Lmtp^B~gGZPnbgoK!Qq>6$eU(%S+(i+$W*5aeP zRsfs!dQR;Jz}8u|<7gM~Q?Rtgjrb&{6HHj@s7Gg0d78Gs=xU}ZW~y0lEt782Bxi8a zaSV;{Jl|CQ4f_W>qv7f%ft@Vz8#k9{mya$mVH1c~O@Oy9(<|PUVSNh2YA?!aw$-K_ z0FmMwy>ZuxZL*|{^!121mCPxMQ9hr+#?`BX-i_3gf#zWKu_Pebf)vI6cUpd$p`b`e z1Evsc4rdp%NhsMc=jmN7P0R37M1}N>qIXv~y_3 zAI`$P0~}x!%ZGb$sq1O|Ni#7XmKF2Xh4<*^l1z!8UifRFt}WE`Hx7a10OyU?e8=vK zmWE_DeN4GB{MrefO;90?ka#i+Sh{bDvrs?!kHNu|DtB-J!d}hciihM5Q29hP1MA5ZQ{1I z8%v%CxhCU#gp9J+d{#xpiaZoB+FG=S#u{w;v~Uau=(czgW&r8Y;x3R>KM!&QZ`7J? z0b*ybZm-zKAMKCM&-=skna6p6(e*eKk^YKgGc|fb15*3#{t35}rcV8%W0VS3W7_B!1-@Uv60r2KZ5eT4Ht2r~b4lt3K{2Q9>HLzV0^E(_QDAT@Q3`X# za3oBnZU=|z{He3g9jx}T<>h1x`>sqQBAMsFAR}`}QczZLpoHl9Q^9SN?d=e+cG3DZ zyd&X4$&d&uB@QjAWfaEf0emshs676S82UG^J20tHbV-#zVwqMvvTMc9Q9@h&!I$l& zsv+Kw>8=U&Mk*29(qi=-QkbwUXBmn_CL%XT3mIX?rN`rwy_!2mdt_s=R_-eRg{w@y z!smU7o~b`xPwOukvLf>Qr_5VlI+e)GnVG=WVCf~HyN0Gs3rs9Pg5)>cK<))x5< zrRGw}_j+$B?NIhRra`~dohrdo;Vd?vCb8@o=`j=(a3G~{3lt64h5$5rAAm^j%}h{l z^#<1k91YdfM@Ytxzmx6rO>Q|$hudQjSXJa4zhtFqNb}}xGs$hJJC!!UD%Y0Mb;Z1v z=%lp5;bimsK#RAO*Ho3y=Jb{B5Wd1P2o36EUfKkZ>F(iS(|o<()tl%gvZ+6;C(YmH zpZsU6i>70Y5gQd6+pg_P(T^1wYKPAG>7tJ_R3QXf78gU&F7MJK9NhU7+Tn=jz+2G> z^80pzCE-*6&~O9*MP~e>yUxsYC?v(V+>o=fX1t!bRBq4zAuK+K_`3yOT)sZZ-Fd%h zGpFZ)_FjwJ6}rx5e*=Az;y}T~jmL;6?Tu{*FZQPxKvL?Zszhbs-}N4zogZhtWs8@Z zUZ2E-f)p_Xhg##vhV|Z968x}tmLf_CRN19C3CDGk^x`wk&|LD3nh(L`yquj})xI@L zEw*l))BX!bN+9hqP4%M#l&rW8X|@9ZN8YmBJ$=`)_4MPve`^Tn%vCivxfpVcAGN&AK!g+)U;ymgM@PTmNaKaoLZQZs> zN=vGz@haOHFLaefx&LjZ_^0$hYjXg9vCW7BGw1-a@FEsYlXX#pgQ+N_;UW=Oovk|) zoWDVfUK~;?byrU#HC4%QD8rR)x-zh%M(LZ$K3$QE3!9 z@Q@ZauAC}{24z6vY6R4Q^3Jd&c{od(#)m|~lBLyu{q`1vG9LXeMeRhtLZsc56jTO} z6KYg&&Q99WaqGfGr1*w_J)_Of|O z3m^eU?3g=Hv$uaC-q2v9b9ZX2BNRF>-z|+MxyN&)oSlM3gID!o2qMcr)>xh6@1dpZ z){#&7&Txb7jSWO-u?M4_kkN4!_*7p7$3~6Cc(L{{XfoTyWzrCq0 zn?T?{cqSFq_T~y3qc?cV=C(v+Pv6lOFQ$Hg`Z-v<%{gjT{2u(&K%(6PIa{L-CbdU9 z1H?)99Tc1-FEGFmQHe5yKZyDDdvC>a2sSZbQV~F~u3Qx5#1n^?E>U;~i(5U>nox=w zyMJjE!~OV32|{0o<>`{XeS^W*g*^_pHxdiN21mn-$1?7dXUao@lK}!XZ8YAKB-Z;e z*O9iffemk@3~3^%gz+%wy_AQsZqrtBcItNG6)9hJE9(BZ0{d zPWD8+-5wpGJnSFshrHqA6UJO-Nse?IgbqxXeE};9wWjX*JuL{+mTt1W1CS!Keix=C5wMnECle`QCr05vguvYe@k zamHIOV>271B4=|soxf!Kxerb?Olcz~ltq|tDkGU_>})6&_dif)&g&+!50eHcAJBI; zcbDkcD~n~G(^KvJWXw6vB#v0{W$EEkuH_POE(}&rdqa)J$I~}}!?OIc$X}t18}66g zJsP~+ohqSO;?uqO+5e~q%-<;6`w>0&U#XMt2YKv2V(LOX_GPb}o^?$gy>VYHne%}# zilSs!g8o#LUI`!3fSXgNaSxa&K+U{gsm9JLe8qTj-~+KcC$yshq}B;rn$OK?IV2yx zcoIk3@^tIkCU*({>r)<0R0hhYG4*!Y-8ANs?On+h8D22BzPUl6y?8-C2ld4g$}sma zi9<6pxqAIVl4xwE7%51xJ29Trn)};>x23zUs;A)ue*rC40k=KvBmr8FSK$-vw9+=a zfB0^frv+`Tt*3~@e!YhD3GgjFq@@Jv+0y4>DctPD+~CyCbrk&=vfMze4KJT4N})HJA>GW4qFCGH=gyfRbK8(L;cPA|N>U^*c(2>iGabDjEOz@n`leNy z{nHpgRMC6-CVu1Gd*kg&87W1#t89w!`ua!)ghRI<{ugT=V&97H`h-`c-+R*r!=gefM$5(4v0M9# zPaN&_hP$|f!PXi*?a@im;u~lTqPbBFHccM2Et#Z|2@&3U^8?+gfc@|f6iMSgRX>^f zqn(q>8%&>IHmO9=$(JHaDb3dXn?_xnEsNAomX>&+F7U$(qB^olH?*yDNE(60zUU8m ziN3Uy(|uFm?4?0>t0_!;f(ChPn=fO9lD(x7<%r78VNq{01CM24Eu zT9Miwb#2I(zr>gSANcZL1WAeF{VYH3FVFRfvL}k>g`>HjwL=XrNLiy5+KH&p&7B}Q zZ3;&;hwSdcU(-4K-SD^@O<=xSc!rb1B<_|P0f+gS>nWC`bau%blag71(}Ru{JfvMG zIxQP2~k^zqjX z2bu~26Grkyr&p67fHtva^OTXZls%8RnVH@}6%0lUDf&y4MDu$x%#9(0p6{ti5`j8lf{@kXYRLdLObhPA7rSTCM_ z|Ajn+&43=Id5W1|$4a!H!=LW9R}}FZ z7QWq-m#!{uPI-hc)>Bw0wXhMMREbv7es0}P|IgwOM0tqnv}XUr;%$6}m^lw9$t5c~ z8TNJ^blc%j)q;$HV~r!2gQuO5>sYV@P+_g**aw2a=0^$F(2nAd{pirO>2Xu{_|3H) z=IN3M;2|2C!|+HHm~`hz3*Mqe^uKUMy`mtl;gH5Wz+Uocui6Ue>-siHg%aqCjqI}=)Mg)ZM9l+e>qz&JYl`tAyINsjg z-A#Myp|M-b`-jIdum^)joq2pA)et_}+r4O8!12o3!#6Bdgw3^Xo3uUZKR=pmOM$x1 zloqs@JPs3S*`&^Y@cF(EFHTHul5=DAGVxfpU|4bgIWdvgSMU>ONakt(?!v$43weup z^2gQXmaHmYZD|#Df0#|o*`h=`Y0S5LY|>0duaRB+@=Ko*@ni1q`6JFzrYs0l)Hzu|9AXHX;R*uI zhPfbaGWp1r>3DgS+;Fidfw3jR%!ZKz=^Gx+V&i!KAk^EIzRIE)NGE1Jh|p+T_)CL| zgRe*(v2)9n14*gP;I9jFj6dv@`0V$uU17G!f=dwvd4eS}?W0@LykbMg%@Pg()4V|e zkT-aLTv23lkDtYny@NxVlq_2d%_hF@V(rpS zXsLlg*hGk59<%zJhN$KdJ3@tE>I zjMrWrKdROOj$>Gx5eXCryQ9}}*-11~$-A+2@#5)aV7+tqf{|l!rVRHKNVA9~!V5{J zz6X>1apRI`>c~BQHEi<#`B&umSkzk?)fmPf~h_A zZr6nf%`=IRp-YlKBMXWn%zVmQwyUC_p2+@M|Z;r!W}5v zk()QM1#qnBU*f@g3j_YpPtZ8u!zccYVu0U!Zw4TtZjW_D@+zierw+_0nCB=Q+ILjq z=nR|pZ*9D6MYIh_N;Ab2ZqMiferoE;gXzPw&YH=4#Lk11&-LKsK1iBV+{$jqJ!FsH z`nuf%VTz^Yjg5^k^_Yj8!0FK9>63e-H4z2^x(J7yu`0yJ?T7448zbG~RV}!|1K0(AD{RVpZLEkpZHZ7 z0k;-jCKCK@m1Fz~{ioxXn7fz8`)xm-B7CUqqY~EM&0hCcxU}CD8)<%~I%dwU3mW*l z6XF9aFQ}C|>ms5*`eKpRLU@6*{miBOyxBq&i|!y$yXA-=B*>aXYUs7r0)4^Zd#>L+ zvzw8GR;G_Yl6~g;1o4%HujkT3EsFO&tvmw*yoyq1Autfzj z{8&Mz+tHwtAf6a*5_oK_5AQOdC9$f22*r3%@UR4(GbJm#T4jxh?XH*!k4t~|NQVbX zpYe6$!OJQ~b!(jy*Vl-hxvfuUO7S@=IOQ`0VKCy#_Bal-lOqt8mNvKfwxT$5oyS8X zyijyq;|DtUl#`YN2vU z8mkA6%2E{5pQk9=wDxhl;>s829L63`y6Wss-e)v8twBIQq#KYhuQiz6<~(>n4@) z7#j8Kc$Nnk>CM`iC{^inUy?MhO1F6FwGZYeMh6OGwl6P+5%{({aub!M;lVvlAd~t0 zC3BY|NX5iCqI?a&Vsyk;MEUFKSSy~p($nGs^F`#V=l;2VeQ$3%I@AigH@Hb5r3tve z@Q)hzIOrc75)}Gh@+ef379xW^W1A;kjqmK85#Re7+B@{F>u+tIUdbeK8pdGo@WUcE z;Xsh`@FTKGoTQj;GCg+jXHOU+kI_{4zsHkD*vOoh%ZqP~7i5FT;MXSJ)MG9R7-qN{ zBJW-a8=I7}xc?*Kh7m-=jNpjQV$sR)1+i8kA@*;d99b!w;*$$c&<@`~mVApE$RE}9 zr}#(OI)ze2-R%C*xAZ_8m!61!?1z^`aTMriOk{7rLk1w!ZqL~$>(gWxB{b@%xxdG|_BM{i%DB znMNXMJ}vh{Xl$paQL7gU%|J`9pI-m3a%2pKU+@+*&FqQA-q~qBjv4#1mnN7Z$f5)J zZg|jm@Jg+J*TR$5HkKr;aMQC;qHYWZ7f*QdlG2#gfP~Mh4>rjOmWM*>izn{!!f`OY zwD@{UuN+?-jV>B_Lyd~2nf%0f8lLDipBRo49xz#0SJ(J&s_y8LjIwX!U-&567v-bg z)kY585U{9A_q)gZ(H&7bdsE8U?3_?fc&Zhm)!E41)&LNzoRSN-yztZbL*=A<2@(%V zh6g4Th=})o2}JbdiKgPZ z8!LkIUX31q(z1`qTE=UVsJOaL)FnYk3QvE0`jrlnDH6SC_gPe&FyR69NlO!JJ_qk>s1cwP7XhOCcRVn&p-lO zS72{X(i=v*y9(Q#nbHVWNvixZ6dY(aem)kB4tx2yKfFG3%WlzY6y&?$ejX0auDC%t z#fEbwLN^%fyh}n6s;*q4H~QX_v(($OLNmo~a^V6OB7S-eE-Ht*7joOqmt7NZ&mAyGJ)39~`qDc=1IVcIjyX1Wu>p933x?pHCNMc}P6B zt)uerkEO?PH&}ERGssR{-=HH5YTB>3^$5dwRW$e52q`M@ADKK#%AN41ogBAuHN}W% zp}p}sF)N4P#7F}a1_a$r($&NSLt0@Xl~0;R*(cmrecc|Fu}cikM@j75w15@;ux*iV#;@>Dcogne}#)x)He{!+l=c zd^X;hbuPk?4vVg>mxHUK*uE_>dm3_gKiTLYQ9fWjEW91QUasP~g-3fYk8ik!gZ~t7 zD9qzucdG-U%@U5yOQY07*FDNN1NRxkQ&bxQ19ZTlq-Ya7jyrBvE>X;qvz{wz}Q(d>)9ot>7Q zpBYcJ>*({r1mr}b@9oznr@2E@3uSsminC5HRZnh zXuK7R$%#)FFHJS$lCgzNiP+my;p?+%R%TqgM@wtFeC;};O$0=eES5SMtw;grJ^T>Z z$f69b@$+QU?$XucQjr_QxBJQr3EkS_t$T4?Lu{`%VSa)zvXJ_hmg885o#}cqhZOKt zGdv1Hn&G`MRpPD$2`YWj#E}46AuD}Kf|*GTnL%|H`|5`%&{PCMnTKg9!(z4Dl@V?;cWOAO$C26$p;@H~Mr&px%Ww=aOO*C^->1o>q z^Ya?liI3;XXa6trO8y6VDQ^{_{)ifp^d|Y_oP(oi3d0bz2-R%o{Mi(?;tWN>;^g&i zl=X1oC|nIV=Vjg1ZuWMIDc0sj*KmxE%vm+^IVa|lvDf1kyx*RxYqAR^jXC5x4iED` zE4)=q5$3Eu_y7Ef>EZ!nijr!x+Iz`aV%zE{q^(Qrv*p#vDz?Fsv$^3!&ndR_qDewV zMe_Mb3Byy;?c;g2cv!9@V((wQbj5)&^88z-4@&@rqs4ENGASj~x`@??QN5CZR5J>- z&n=HoOt;V~-~3?tu#EOwfEOoTo(!-pi(`1|}2vE59v&i`%aFW zH?6I3)M|oJDL-B8XO`Dzjk6@x(P`lw=!>&F01>E2rb6_G0;hvY`WL4mKV}I5%=w6m z-tEo}KxXn=tkx7%obC4e76jrWLZISVl(O&aYGN|HWGp#nM`;hE_XaOqJmXQexZV9n z@8+@9TpfAw*zxG-Fz(~%(u0-T7ld~_ST>?3ytkiPjlqvy(ch@Ir76jjV6Mcsl#+P( znguCr^FS|OGOI2EByQpL7g=g_?M#q?KiBJtQs_)jMc?R{JP>0telpZ{Ft>E$=3wy1 z_Xfa{+9bSa*95hcTdflq@+*m9`Ci;TN>L_8Jy^8&^B1p(hVAXhm3&vc51^9ok7qr? z_Hq4u)u?)S#Xi0Nx7Cxa$dUeDJ!*bLgzzt$UCWw7ph)@b*hVmlAyAArCX9=Ls{!4pQ1pt7Fj%PHW9 zLnt;@$U9lvmth79x8e(?MFIl#EevAg=wh!wyLNI(YW{2&L7*f)cig1X*@O~(4W7ef z68^Y8w`$v$2iuD)+52m&a+*Oy{BF1y%MwwzZ+VmHdD3S#S7eY-Pw9P`qQ~IlcMM*X zsfbc1G{G|D=YuPsb6g~Tw-zIFY4Qmi$gLuKG|AW&ScqPnCMoeU0;5X{FA!xF&DBmDCEURpV4~iuG zH1z!a4m}utHn#CqrEXR^`keS7U=)+=@TS|}a~TBy2{}jTc!s4=)~i5lHc1wx)2N>o zFZ7jXI{4@q3+@tuR3eTzQ7>&BKhb@2H}Mq)Jk2t3Y%#6-E(6C}n#&;3`&i=AkFVHa z^i7dj5+BJZ=N^fDJI14B11$Co2wvP(!mdvM9=oYwjPPCD&-8c2eEK0i!;dEW2(j3q z(cvWD;^2@#<)q}9R_SeDo7)o$(@GT;B`pf`y{_o z@-x$t2}syLF&r&v8c6O69VHXcG-*|XB!6Fw!{;Pvj>FOR*4CQR&SCBYM zDXY_Redm;{aWmZ=+%JRg4BQe}1MXI5Cy~ne!LoRBDY*YFsiA4eMWFww;6M~RQorj88nES^1p-~f~OBcl} zZ@>%mWZcLw1=A_4*mGr#cAnz;@>cAs?L9RaDqKYj1dG!IBfgK}m#|h;MlVT=om4)I z&Rl8UC&ocn7%#1DIDp4uadgMo%QAm^yQ5^r`a)J6Z)T`AB;#aM4c}sPb_NP1bbPU+ z19~=QvM9WQ;YfBGF22`!9IE^K`94}>*i~m&bnQI8^tC?eE57v&w&DSc?}Jfj$^l^cq$x%@S!~ufXnu~B!VP>;3i3aA;#3QvWzoKrt+%awz6^RlpKNxBP<79C_O5C zEa4w2YT}E-gWXD+bkt~Ydwat)f`MV%XqK{DCqM6&s?*gX>t=E_$tn?sk}Bz-@~pr- zLnMD7sXTxc{D_tP1@22GFa4Gn^!2=6T$Os)ADo@VRYK3hN;fwp5BCO7sCda}0xzf2 z%ar*;JzyQWyu0Ue5&6@DJFqB^Ab9IGGf$n9*+0rdw4ovuN=XZb=6(B zgYmy5zM9`wkNYXJF>aWS@`o3`i?8M{(Z7DpRI<*aUSQa3?Ho>N(~*r3RGev!;JJpz zqeDK5xX1GhFrzH(?HFK6EGgl8CFEqk|u_WKQ&wLRbqBIirwl-dFyEa@}~ zp*tz&R}A`|Zsxe=3v&Kk#XE=8y}OJJ4;epd_5tjI0tK+11)HC`w%A5bINAy8D0tS=JsZ@63HnL()B@PSj50^Bc<;@>F zQ5}h|&s>LQCB*AD5J%A;9Pkv|7g<;+x8Hjv42#wX30ZLZ$o@gv8;c_M`4o0#5gDH- z54nFCqwcNvE@Zh4M`Zg?w==}|n%#v*F803N+ZborTAI|j4Dhk(()13Hm$@;b`FRgS zvH4^OC1uvW6=CwPEhM>R?Fo7xgifz0zhx^v6C=SCUd!CLaZ&l_^7`uR+Rm2KCs$*` z*pu;!xUKK;J%$GM*+UtgyRu7#nIy-l|Ds5aSi89`0A1o=`VGFsU!~t2kkRju2lfYb zp!yLWg}>Bkc?HjLvBlzC_#D32V)%*3LIu3wwykubvE9aa>-Yf6L5{iKd9HY4Ver=Z z-F#j^ba)czTU*0Boe2U&-s59P2^!uZayrV{p?H{B?z06m_Dc%B8Nrd^RTy$x04SFM+%t?&{X%x?YKFZkI+1 zAo+`zMzT|@$D%Kb)k4Oj{3YTZlg0Ob1%2-wZ_gj!ne&W5PHbZHk;s#%A@WM3C`L1m z@2lC7pV39&S9C^yOib|ecnbb($>NTOH5+XYMIa)=I3!26IW|hi5)H(fir7zSh&hXR zED+?lirmKx>=b*i=E6F$;ozsdP-SyOlkI%}drvxf}d)Rwh7cU(i60hc0CmUjLqFzh`(O&Oz9EbtSvj^NzEG>D$gWl^> zq^RATb5oI;{@PML;4IS&V(zVY)O;<*Sc8~HtQRdta&$;E*rr2~`mfqbSE&lP-3x8Dx;v5}~l4yqdVIR@M?+{pJ z_9I=ke~Bx<8~qCjISMq2kcF&}vV>D-@fFP4J01Pe{N896sm(!7y|o{0u+!1b6LPXF zq;!VB=ejftw4B$@Y5dKxU%R$(n`$1bZV3hYr>9ZYBSKDO-l~66gRr{#Sdz4=mR=oN zH6zX=9S%oGmCu%9PPakxX*J;0>-V)9BC)x-}W*tboJ)v|sPtN~1<@ z=i8)-TFFGt^!T>*ZFtd7x5r~H?Q}eR+fsU+Y|&~67|!z~#~P*~9tI)idImV)C8u@5 z9}U3E=s(*%Dy$ZGU~j*gTaqT!)()EUi$pX&S-C59Yk!*r+1?nK zXzI~_9zBIu+AQ_agI?%{@FnKSiAVbIykK>AFF`Vf7pOS65=rcuUiS1SUP5 zMLHEbZ8Un*%WvQz8jBKO@iv~nG)j70$NNWi`utnK zjB;vP;ZBztStea1#d#;k{3=ux6au^_jd_osvRyq#MeD}cT(}ubl~curK`Y;!%U)&0Z4zK zfjd=gRDCr~kxkFE-)2o^PT13=&o79Ke{$h})nzx*2d#L5X7+zHh|W*h%$02V5($ME zbgSK;KQ!wuqM@Ll5V?kfcl&%7YJ6PoN9X&Ciz@glnKg$cAe2(%@6i74xN#AH3J|-Y zB3UO2Z|)*xLcLpM#$Nyluy=6>(gPR!^fO3AubB78rAA*&msqOvlmxrAxM ziNC@bah93fE$^O30cxsrA6SBt7~Q5YrT5;pgm-oh@8Goe{$r!-_79c^hpDwD%9fzi zJ<&`xA+n}qivCG%lN1T9X`zqB2T3%J$0w(G0gy3`BIkxD7u}W&nWb-M8uCwBK)5in zgk<$AS~6wZN-4>cH0A8|RjN|0>^VhPMeDLCOvVoItUNiwnwIXcC|0@T$w@XET`2ZF z(J#vOVlv#y!_j;9wpng+0AC-t`WC(bk=wglZI19zPrhRKpBBUam4)==`k)AY;xIq1 ztKZ)VLZ3Z@DjbH-0Ww>*Hibx`QX$PB=DHW z^UndWvBX>rT+7ySWFq^48=#jAyf55}qjeHA$V;#I^R7Ceg=%l#`aZEV?h}y}+(A=C z9=<(ux`vw@(L{@>8$+$zbB5JRvkK?9daZY5b{${RCv9&(xmWD(<>;u1?Bj&&UygN{ zRN2zsN%JB~w%-FWb_Bie|%p2^@P^iYn0{#S&KM4IcZOzyR_3GmoI@lT;Jczr#* zg_ogRLd!C|}gen(J*=_Fe~TD2^rf=qf* zrqi4MIOC{xPf+{mQY%|&*|MqvAaNQ_iBk*NJj>teoi2@k?d5I+&_FAFT%M(oWotF} zuW5H;v%ez``;&UVzqqFAew6(C*@a)^Ir?7;H312joQ8oVK^k$3H2mI(ImZ%i(gYKd zSC(CA-UXU4n!G8l>SZWzoINl#=!G?wf4n^BK~V{}q;YoqtPHA1(rEQL&neh!C24-n z*!#Md9D`HdyRW9km!_1?a3vjQKbK_8srXkMH7qe{mObi1HdXpRYGpKCT0t`e6s*xE zL`PL4jV@MA-|DgkYNB&s#;#dGqSS)Rf8QWa>|UyB#!=uPTl*18(1DyM;0uWU>|GDn z4~@YsME4fq+o7l2%S>Us#1@IFIK|T4*6+KC)}hHfdG)j0?ilb zPkjL%Z&yQF|ixLagFf$?iqL=X~yehzjC(_C8-npGC#Aam6-K#>1JE-$J23;M# znj>Py;19TVgoj+|=ayDvPEuOO5{pu%oq7sSX*Z?6c6Rim-prHZvl&y&5t(!G`Q+TB zddFkW?o6d%p(D+#nMz1U871P67PYEE=~iJ7RKinio_>JI*m;s^J>M^Sn7{z z^Xt1Q29rRRkdGl58SKfT@Bdho@4;(d8@|Mu0|pn5DC0E7{#_&Y0PC4P15PVslUk*t zo8Pl@Co5@LY^A|idZUO=`lRgc64f{mydS5}?!mqg)Ijc|Z?9UQKfZVZAeq3Cp$+Vi z48&Rfau1-oCZ(8V<66`%3%EkR_u?3_ag8orNHmFCk1 zK6f*<3OW0!G(ML=mW)CiWrpGp%Cu6UU)-xa(Z+I!$0$Cf#zj1yM)F}>#ci6O3D}x0 zmPx2Yr|*8+$JV;b+#;!eN8Ag?%l{ii)zQC&J`{%wn(5 z5Jw^?=|JvIF3RHI-L?WA7^fc`(DEntL*qW-jF|&(XpY`toIhg&p~Gm%UIs(oIaY~= zH2M%}EI*|#5~-SO=%|138Tw_(SR{jO>FzN&%(K^`V|huLlVwcwing?rq6()3^4SJf z#vM1m)x#ty183iKx~$64eY*epPXjT3^XU84W-*NyuJU95GdXcjn4s`ox@P}mHz#`FXpTADql%>l1+`)c6cyK`#2sbaaAp-_bS%^Z`TgD$GvB1~HK&HpC z!mfBAc}nSSCdq}*5N%|9rzMLIkY#<{BNNHU|Mc=yK)kW>Orf>iXwF2esL}Bkw?P_;OZrckDJm6ZiLsISZSwCj!%D?hb{_J*Nk_n{)%of*y|EKRicMcfehgNw1}Ojfczc^Jao; zqyFCQd~X1x;paw&k{Il%D1V#?J6r zc{Jz}GZo|N7)J>dgoX+Hq}-Lwh1}IF);Zx3Ott2R0)}ECP*FM;ZTU`cTa3bDYZiIa5#0S-+=-i*1Lz_2#oU>*{yH)zZ#)fBa`{s#N!@QlH6b4a~$R+U} z&Ko)a%&0VfO#Px#Wg74kSeKoT1L>(8{Rc(z>rg8ddI3k?XzAR{MhPbTP5MIW(UPKN zWJ0khwV8PFp6E<#>-`fqVsz4%7cJ*g+*HWGW+2UpX5SD=lsg1G7MY2?j> zE_MSv?e5X&_ysTt;~elo8~|$)3gP*7=3@Wb>jtSzurrukU0bJSfmOcRaB%4YgBD7* zUT>y@FFv{GxlEFCH#|$paJnW$+h6)(cdywf&-n0Iw|DHr4SO^!!ABqon+bPu5D3w~ z59K}mhP;QVGxNAuI6zBpDnYTwJ%lu5+TMQi1e9}$qMhR+mgZ8) z?^2NgDDM(b%~N^LBajq^LIOo7KFVrFD(f*&!l$g*7Sy>Vo{4)JPy?xx>K!-Xh5$I1 z->byhkF2jtaPtH`V2uT;ZakD2Jw#Vw-17X54|F}6?yHcHvaYW7Gz!Z#aSdS63v4Kx zcC@%5-(aL)?Z`02G5aTJLY|x{3Wu38NgE;oY)&4a{>|*leUYyhSP3Okp-VU|Pfs>W z_Zi3eEI);Ak45xXc)uShu9jp~8WT~7c01dg22QgC*i587eje*=*XSSW+{VhanafXa z>})3wKop}txvq_vQcJ4Pbnq0xF;ySJbMH1`Yvz|}1o?D)Iky%51DxLx#!I!gcf?7i zD=M!7oS>p7=8*(&8aP1(A7l2}zmYrp_tnR~PyNMD@J;^p@;8;f!hIN#Qa<2r&_?!h zh3JdsC2-D*yq#mQwm+*#iX>07znp;PHQ*;E937~+fB*l~scHg=PYht&kP=*FI7$>c3ABWZ})iisJpHqweB zl`Tou$UgNXy{GNAU3L8UUDE&Yhl%!Qr_%#bv+Oob&Mn>7q(pkHfADZ=eLd5FFz>{p z-11j!CnhEis==Ri1{vWa#9-{WjXV-s`yn;j{5dxM3LAYmUW-#I;ZBaKrB&!sd=p}7 z!<3FF*osE+DTU+KnXKkGGKkcSG8EtF@Q3K>@TWJ(;8Q-$2-@l6kIk+xX%{K;_O;LB zLhubkYp;K!GY((-+9YjF|2*wPTx{@pae2!v7!F^~t>5BeZI;iXzC6F9FV8=cdwU2a z>C^NNXej@C%UtTBRK@X&1Nr^K;(4Nnim$DK}A^j-56P91e~OC7Xz9BMQ@(0Z(c2RqrbsN1Qa_7qHC~&2e3)F?zYArK3<=w z36LZ;9yj6uh{e`3-gt3w+axGX&#-j5L;{`@LXg3g45_t^%ghzt9ICMmytOgW4=T%3 zQXv}nFoxvL!tsFlgFQyB$vYYLR*g>YKXYWZVdl(ib&kubzSNr~K72xNoDtbG%q3D; zjO+%BEQJQP!M9MlePFP?y#J^;W3ym_KVS6t5wpN69IM2z6$!G}5v-e=58p_*t1E=!<4JlNhlWFcga`BTHPqa$L} zcdBKRsK8A9{(W6hcDILbaD;`zenktO7+3!9a72g1=N1?CVEDKBp>FeDzRm=~|Dt>X zzaTOb?>YpwWS(fo{cil+Wj4zcqC!8y1KpzK@ z(ab(X*TbfhodB(D>)X~F)N-Gzd1#|F(8387z~d?s4;(qIO1x|U8C&r^Bzq=qN} zHR@lbn33s&54!R3zG^x7Cd|d-qiPJE5?Tq z1&9D9p2s41nnmVLEE+~zc_YW{vdlAERl)XM>d1dk4}rhf&9lKP;4|a_24<#9v-I(e6`|IK7K?t)~ud&JE`*GfNc&!>P)t6m&sA^)iLhc1Myd>hXH4os=6j>lIn!BhYA z+KcuMsIU8b0TX0he*}Fm$luGDLXz#-fwdaTy4rz}|YAk(C1nu$_ z>pIBaNOtKGxvXY+<&WUA9OsmPrS+wyjb*u;##j2Tv}oKBnxjl%H>r73da+EBU%D_D zKK(*0^ohrzdca}DE*V~kM~n`!xb%eH6MXGgatmge#IK*U%JrM1^<>N!YOakTd86g< zoE5s&zoT2NiTl4=SG%tl)BAgK-%`Ml|ECpZHhUo^SV7M+<>nNPCon`V4ip&OxgD|A zJkRkY;$G-n4uC{qtm@~S;yk_wn;>P<*ql?VPlbb;NX}C6eOkg%tta!ix^_Cft{N^i zBP1Klb1ArMZtyIDyS1bziN(3m?{2d}^27k+3sRqC?_v0Z-a~PysEJI+LZYirVYla# z#6|@+W0}G|(eqrg+mso%*jw2^ZbaJL(o+WAc#-tXR5XBQ?_Ie>FnJT{F%q<&xEcJw z3G8WlZsa2gCKDWqyh1dsC}KD;*^C+?+lZR8XjYUp|0tvZeC_U5hG$kzILNu$=kVIY zhZQ)amJB=N-^YRCC>US40Y*{KN|>J=VrB|_@x;l>#dsG~VGgHnj<_5uZdek2=D(N7 zvZ#;NbVu&gM1VyFwf40P1xB#Q0U#F0&)I}Gu4hJuFQr4nk{pJN`^t3iUbg5feL)U7 z6R0#`TfLC7JZ6mV`9hmcOL_K0S^Ck(8*X{k}$(6Lp3R$Cvpl>iC?m!G;OR=(b{pK`e z6i^{HryAx)UBK5SYs_`yPh%&XT*ebP$x(NkPDUk3(8I^Z5%97nbT1@W6A89&Can$; zXgJjE%!zQpmtq@)@XkKn=3mN`*Ldb#_&~s`y%>9R%3VgzH^2`f)%`Y;fhpwb)Aze~TW^oY^unENsUR-9XFN~@?yJ$-YOBSkaH4MaU&7ML z!i9w|)}8HZ`4s+0^;Y>gc$&48+7epfIS=YB;L@f@WaeLZ&aNDja3aJnth8#EK&@tR z6{EqFFd6j-(ZAw`DwQet$!YoBL|(nBcjmtE4mh1vP%tbe*kv^Z;(u;|$B(hZ3AOcP z#%X$3Y$nfSd@TtoNr@cl&Dl4%iUjO!B@<~N56TX_bS$jK?P5B60ta-!#2(a|Ud|S5i0U6rcHyQ=UX>FC_23C>JITd zQ`kZ^5ySbX5SIW84uQXMY^DU_+APe+t%qdVG$hw)cFjZ@{bxZak(=SxN8*!8J<8;= z_L;uh^n|X1TMfsjg-v|=b(o-nOjTCT2(S^7VWqNNG^lXjwnKITelpRU?f=%B?H`G* zy{9JD{4kHwFNT}6J)6z!H4+z%QVWN(7i0okXNs7bjYSa-tLg(b9lXxo8S?!MupkN$o-%G}=U-iBY zIsMCL9^znYV|HaaO7B&Va)w+ujemz4Ou4EEqlag*q4=Xfl^RZ^<09o*D9ZR{F=H7GR4N{F|NrRWQdQJT^izijnO`;q^Nv5*l!;20*E7`s?VVrKT-_z zrVZyLYZoh-u*Fk0S4vEqRWP2N|7a93PmH5l+cOW3s8B`W3629E;r63AXr#G$)Omgy z0UfWe?S>3?_Gw7iR(vEbHK)V!BeBZgAD~#t(6) z$lO@Gjx7pA43@qoXN6=@oQEKqS~#o>f$%vemprHk!)a5YDYK-tXRSEFp{}5K6Ha*r0cq!<_2Qz_%hYASZIH zqW;BV46G{26V??r^PihyG6!8QR}iT;vex9}3k27<%_ZQZf8iivB>bT!LWk&N zPo8Hc4=d=GvN~Q%7d91r;WmS3AgqtK40K}V@FlYORj#kApb|@Rx_E$g?_vW;!U>$J z?%wYH#>3pyp7p`*;9WZhLkW*4BuB^zNpR#oUau_Z=sa?wKfJ;{jEQihkB!(%#0hKQ zMSzR#ANcp-F@kxNKTZq}zb&Rc?jW5&0Sqz$YnY$t^S@huX zCwN)YRBE`tkMElM;Cm;hOxr{}8?(QBIg>#92}638o`p4fGu$4XK*K}25yeq7(=&bK z!i6g3IlpTD-BV%mW3kr2&Y-EY^lasplUmEb(d0Go*xwz#t%3zp*@P0&%9BTv-qhLmW9>N`QN&s{HWX)@wl zNZU5g_S<71ttg-6{8dVF7ozgD{rBpG1+Ck9PL0^S{|B4*eWIPD)LD@L*-$6>3d04!rTq;HI?CLDoQQC_0 zkb_r9Z`N8a;2xN<7EL{B{ZTN26X~*aWg1QJQa9m7+<~9{$f*3z{aEL}mL5k~cm!I5 zdYJqKR5T`yF*pp%Gzal$cLf}D3`&4Pkye^fdHCoOoj#kFWFPTya1I|Ni7IWZv;g#| zw>LAYK5d27*dvUP2g?!P=k#(_Pali2$cLAgw<1HxdVNcRpSAV)+45E@gnB*xWG6`B ziK`E@r&9NauZt@Mnp=`JdFM)mgJ~JV{llrY#M{^pA}1jus?xZ>`q5nXNUvee>C_Qs z=5W{t#7E=c9!Y4Ah}v9({E4QbBI|}=^%r$2^R;=VLbU7nA7d$TX3Pf&f%r%zgvgw_&8_R048&~7N8jYkiar~f zigxw(VibkFC)rAT$sZy&6bj9+APzuZDJu;KW%?VsDCET^c4VxM4=i&CQo=JJDXGmw ziJ?l^KRF`K9^T_ZcEDFVx#DfOn7hpTRyU_b>sso_82^IFqyV`MypCU2jI>p2j7F<^ zanW1lq596!RXFW@o6+D^t|$>U-a%gu-z6rA#wba`xa4?dzz;UvkJU3mA>Fhv=LB4x zvHEd|nw2E>&OAA9Icm^*0Wh-)VA^it$ZYvxOXj5ira9@qszNbcFW<|j{H-L}pOI7j zSLWP}&5eWMC4o?Z2%l-pt&Ileb3yCKnQ%SX@t}j@lp8scFAVPvwiKuqj%K%g++?F@ zSA}0K&>$4h?Yd0q-tz!(LFK`GvBGCllE;NC4DEg!)IZ3=@qDPhYhfm`q`5YHbN@>X z`|9x<GaHG zm?_b~gN{G@uf(bT$->JQ-d`O?{)sq!Nj<^~X-mSCkV3K>y>N#%7(ED~mC$8TJgQ9{ zqz^-oK(rNyadt6@oHi?PMFbV)8)9;lgLW{Kvd7`ia+#hJDVCS#Gr()uAzHJJ|JPl~ z!YtpO1FK_7&B$t|ImM{EOb5d6V{)LZ76Ebp^JOFsPL|o1(E&qH-O>{j&|=NA z%TB}>B7!zI(=iiUNw{ET^_WY~1CQUw#&cYM>t>8q=i*eEyb%YUhi~u31y_c0?5ETM znWmB5pR097jDw*1-2|Ny4B7Q2%x#Yz+0FDWx=SWRiRjnNS&K5)zcRLutXg+2u|Pj$ zSL03y1|-uaxG{N5&mE1^A0dE&tk=InUzXM3>z+lFuSDxl>_2`$sU#l9s?WmeNtz1az5-* zs&ioPrB1DU;6xtC!-<|D|5{Imf1v8|i=Z)6(SNO>vD|XSH~<8>Ap$%?+(fS)kcDO6 z`>6fEPr%d(!w!R8$UO*49)AmvhKofriZ`%cH{@Es+)Q@@<96YC(V%JJanrNrm#7Yq zwMR-lE2FYGqwY34p;+MkI<`Xl><1`alMKGm_ZpI@QLNo?FDiKy6?w3kCW;2M8S|P} zmvzG{7AA3Z2bbZ}izdqv?ZKj?;{D1L43WMleTkeI=Rk-<3i2yZgs>~hAMAONLMF>F z^I}JF%4AW(QgAcXYeeC`94RZWNi`xIlWQb}I|T#j`O^RU$ZaAFS*%;1_hL*QXg|Z< z!=MbPMRdhzU1@lMV}QbDVSMezLvFwYY4@=b#IY6^_urtt2>05*EQLb{iFB?VywOA9 z%!s&i6@?&LQ4`tR>5{e~bv#P0rX2LN-ie!fyq)=TcxUyT_I=&P?$-q6W+aWa?z#Xr zn2nMxr}GjYyzkyzN@B5>^n(AFYS$j6oqbQm?|)3D|KB1>JDZ?miiBRZ5)2j~EKWl% z#=XQti`f(qA{+x8V2$uQ1Lh%3&+$d-tgNfgv9|1w2$_D zP|azr6;?eDXD|}m<(Qh*bFlSYBR4#A8s5B- z2ccIE%fgqHN0PP=`W{jx9`eTI6@p?+pXs$Y7q}B1lhvzn-s*Q{XXr6z$^PogLCZdf zI|9N-uZ3<(D4wX0WQ5lp(#w7mn%-Nrkw2?z#4mN)e~m%!x4xI-wi|e&+3j^g*VI!i)7qrZx`O3e0n0iS=@v=8j7C z#yyc@xCaDoyS0K@kPBd4W^Z24zHxS)P|faJ+7m^B2RwyLNx3Z+LbJs}l1##56wRBK zpF%i~35)QsJwtRdvNzUKT;v7Sc+erDH+Ymxp2#p!o|-|%B3WT5B$S@SmP1$6O)EO< z29nTZjpd~;kMU5zhxvWht@}#Sky!&v8*-fZv<4rflE=%`OZ#~`oZ%tcyC!!=P8_NN}oTIWaE@htEeSMWyI%B#(N)3j~Kgc**R%>j3Y`-YHj0)pxyoz};W<19< zDjV}NY|LMw-~E0a2!F;L?@x6c46OpAu!d5T3R+CKVpV}o$D#t0#7V-c087nx5w>(M z07QPsDCU#(3X3q3U+&+gDm)g(I$K+rLEQ4E;zpxmq~y8{k_jM zFTd%^nTO1EVE$RU5+~U)4QD*RvAUr=)85_NqOeEWZ+K0kmcvv*RMfM9e}}yu13>(tvy< zg;rQli*TAFjRNiEyJ_~NyV@UMHU5NKoo_eFl?e6Hi5z2V~e89w9bsfIA>I(6%<^K%$%bhncx3;znhtD zJ7+SgGH=}bE${u_|NDRT=dI>7=Th3F`0~Ukxg(AVMJ2@^u*s>11N`h&Z6eL3QxTmVAi%G&Nhg_T+mfgN=pV07Sl;}Eqle? z@If_u#VO;3tPZn}PGhMgyDqa#nWEakOuA5pa}!8n3IrLxLTdbREn~&==}ZN@gIi0(S9E3&h0o# zD%-%-7Shbw@1Z{jCx2v*E|wl#H&wYkr{ePSR5pE$2;XdYD!N^qmSeraBZ3veg5AQJ7dZu#{8zhs1lSM%1<+&V4Yo7)hu5wS4x*Qh#*fA}5bB$p4f=1ori}E;m1GkP zYcHSdJihd#5eXa`{YwBxvj>S*o78gB{rDT^xTdCPIk3#~&$C=ukTU1oD-Vk+aws|MgWw&&$yDpe( zm~nT!-}Ao%3UD+HoX@1|u;YR)=QkIvJN%J^redpyXjBUEEU#&dG`x1LgpD={kg>eF zJb{n6{_LMOIJ-DP?3N-$heI(zJX<005-Bv;Qg##}X#VLh^b?coN<8`Uw-@(#Na-NF zio@P3@k@xWW?P5VZEHTcWhg-@rHBa?g+rFp)aDb@Ps3ou5F(316gHI@i7TyQoE?tb z{)w*POTq|HEf*v)MJsrjaWJ}YxYnw);;mDIoe2H|m`%v9Wqt!sQr1gN<&Wt{-a9@{ zv9@|O8a9iQuY~CRlTaOBz6Bw-?fIxdr5r{aek@0XuR*b#*B2+fmw!#)k-t5+K6g#* z_mgxV{ll{NW50E_+x=(HnQ5usFG(r;Yo>gp0yb1o%;DvBy^Nsg8f{?#;%DN0Kf5@n zu>tM7bflaD9D3Wphl>SJ7i@AcEEMSdMTpSMXpFokS)_LI zo9OdyXD`p`uz%&qB8}#;wH<$Y)QPCRtLt&g3|@L+GT7d+c;tkxa9$3#qJ)L9AVuGc$jh&lm|L?iV*Z;g70sZYAU7S;pBmog?490|0$~5f9h>DajlLsTZ zlN3kqOF~MDhj8$3M;`GUpsPd{X%kSTWS}f}vWd!jcEVRMIPXu6`h)e)i!{|T$*7E$ zHl!W1Zh@Lbmf^to8yy0$bX#A0*#DmGjnPC+)SG>?627F~Yjd+aiX`C1m$amx!+)TY zEZgDXD@9j+!s}m{&HpSWpG8}gfGj-uHrL^gnI>^w2xzmDH*3aDDZnz30)#jtV}CVD z0fzI7I6oQd^=VmR%_$U{?2d%#a%BZ7rZ*SxcHyW6^<3#Z_IsC(5PopL17Bt|n>Ng@ z!^2;qt7Ssd=58+*5z9U0pZ)&HwalzuTk-l}07k479HgI(y{LH(84XU4qUI(b4?3|Q zq@3KenTWXkI!dYMU40uo_r=98(PfJn%SR#}%b`P{aI9l*cv~2)YMa(mSnKtIrZg@n zZFcl17Y-Wdyu@;RL%PSq!|F=^`xA#X-==;L*NsFa3Ni_cT&#B4>_4xJu&z;J6KTI@3LRdT#Z{?f7c8JXZl= zt1O_IKLH+(MZ|Sr9madd1H+F(TkvUghQ+0;F_FAYD=>q-anjR*%HF)fMOeiM$xB!{ zh~*UplDE-33W9(z-(LUZ>XPgP7?Q-OmM5yJoVa%#9FCF=`%qCDj1N*1o?e|%F(B(% zOcDJhgACWH@X5Be(qa|u40}&I+DsCfRUgLz zEWGV;`G!yNJW|;`02gMjU)NXUAJ2WzKGt6)Liac2ApG+}RAJ)L9=AGCBJqV7qJXv(cb8X8g8Ouj?xGoDyQiKXD($)93=Z z&2E(2032lQKCrV&4I=vh$M7=9#AF)3hUWmZ19p5?90dM1pj_xYVEd+nV{;jUAyjWB zm?LqKAQW>+x_Hcqk@D6hW|7XqsjbBK5qxZOBqG+Ujfa_cAX${cUZ99Dkpm@9z|0CZ zuy~8eyOu8S& zcJU>lC#ZxAvsyl!nq{PyCT*S3-ceMEv#3H4n7jm^m$$p11U2@93Jw+w*P%P~9W)DFqI1?PP;vd=B*-mVu?V^McmseDq#X)ohoV4zuC-t_r zpf+s*Md_odq|;K5$-k98I$~@}Q7~h#_k!(jeKtRSPEx+L@b$X~2C~0rWZ6R^^>^%S zB2UY(`|1BO_eUbo!N+KPl9^0bO=ZB#{ab-VjLl+9_7j@}8ZQQTc~VPLZhl0A~bTNU$L7JvTt;(V{Q7uRo56Y!%CvS8vt3_TS^guIG! z;{B3Oorty4w!W!eGT^VEw*IrO<+{ptnI`i&u9xXL z=S>WBU2MoErk@O_bhHYYS<;*H0%MEw>zgt3hwG~f4$2F(x+c>yk&n$Q$@cJsTdRRY z>81;-_=z@`8d!`PF^XbV)G(=C+HSsS^>pu-Iwv6GGD`{t+;DqGHv(F{_#Bv~_5Yyv za@bN=KRUSL74{v5BK;;yYeYS_{4!;aCNC~zz*#-+wXhFMgXbhsX%$8Xz`OHOZ4&<; z&4X`j-SPS#%8E%&MXW!=6rd64885C<9i?RmUmJZ?KcSN}W2J8_+G;A6MSr~Vy}Dj# zD!(xpzeN2Ewa|7jwU%j`9lMQTXc{=Dv-#_Wc!M{-7vd zaadTTBcrW{2*a%2fsv{oshJMtv}P3m7@1n4cXFyNNffw3LE#9J%D3K7)sn`kS-`>( zTuazG8=;#O?>LWnOEhq!eym6xsl-aQ(<~x8IgBjnYLt zTIGO7CaVkgkxHTkH~L-dG7do@|B1Tk zsMj0<{7MNNOD^3}A0=iuh+oOi1>rX48+e_t8F*%2mdw#ssp_G!>2vJbm32Fu^m`}s z&5Lilxj4|dqO#u{V6Cq5Y1~2|#wMA}@~|Ntr-c3(EB(>6I~mBpC*C771 z3L%OYr(nC%s1Ek$KM&UuslK+am?aXGG}2SJ2*MtD#6#M7HP8p->0OO`Sqqy~JX@;g zC?0fQc4Q|r1@pwk(yGF#-s0=|al-Hx?C@(uVKyRRhbNJ+v4Km%&bsa(Nds=V#(Qd` z{w06Kl*i(W^;G#09QgBdzX+E}wL&82osuMTpp__LBe2M4fm88WAO()i!r+w%$6eeF zc~v}`I4nJ@4vPFOhiL~v42#F^p4BN$3bzZVsHWScC+-l1o9&Q$RYxB73|J%m!=Y8> z&<*LsG`_RblsRM>1+m6;tM}t`W`<)ycRrb-)5%Ty$Xn72hd_bD;Lqei$La=qB`TMGDXy46HjdD0i|6D>BrOfPBkn6T zi^N=fDjDpcAa>M$SLRAB`AAO7-qqSu#Xfh*P|zPR;&p6SgWk;|F1W`$JfFQ!NUd<- z0J#3KF>cbY`OlEnNH-sapyO9^c6L1z96*N_R~RhR{N}&Z>*D8Coc~$Xk-(tKrb^f1t}Ya%>#K#L`jpD6n^yFra3 zf;w=##B9Mv$8?N_prl2I0jrP_w`!<2CQa~M=ZE?769hN@tzi^j#=Q0MS;)5b^a(+p zUtma=F_OzlRz#2$txVl$E<|wOxjoB74C=p$E77d&C5Fq5VM5Xg9)Sdv@o6n+v?M4; zK6!4@v~XTJ@B$DOEc_G2&@(2k2HVLuroN9hgoYp*pt(6cZ<-{BX~>jF(+Fmy9=(W2 zUkX-DvI5x9%nIhr?$E~SUegeLHXePoIFPO|n&JYq*rCGR2U8(xc`c(C*Emz+ z*l>$A;phYlTo|S$@;7jj(rhRyfFxw2NUk#^$g#HxXo2nMfJesQdXulW;DA21G2O)R z=uR^-55-R5zJLq}wnsGIMP_W4N;+MK+tLR%ay%m+uD%@ACeFc|(fhuZpk|>dT=VQc z!DICNtbys^8D3lD>jrbYbXW8;|K~6mJL5T37aukEae7RB-rU!c)!!q!_*drU%ro4z z`J`c$@MZW0kxw#sS;3LG%@5o04E!)pF7M&3P~)9@z!0hfpb)6QcKzF=c3rszxm~30 z6bE09ZFHJAf%kKC{&oEMqs+J-Gv2V7@B`2$h zBs3?7aomdwui=lBR@5HKW=lIn`d0^AJ)-9)G zDdtPX-)pA~cEm5SBTiKq|2ExveqU#${yF$C{>&nOTaQmaD z6F=^!*%Zf$M_4LzLcHB^i|=n;eU&+S4S zQ7XIVCAOigfyLe-Mzzp;kFHUtB6J6jr=yFLK0dMD>3B6;A&7V%v~1N$>wLi95wCOl zuJTteFOHr^&W`wm>^4TpWJ@GWmL$c?WWCDv;X?yuPN8oNB*@E@2Kk;Tn&b}B^a*2$ zagH}Pd~HG((?+WUCc>ZLU|4JK!i&BF!<{b51m;?nmy>3{`rIRS4iQY8sH9-32jLuk zn5zS*?@d3$?JUXpwPkIv*5@Dd5#j3bMZou7u(aaxF~}$}jNbXV16=pZd?y>2?qkI# z-fMr^ALzU(nQjn0?aa^ckGBew#W*wUrAK}Jc%z(j^;=`db8cwYy^{uPN`1zH^>t%kD2mA7D~KzL3`vA-^6Ewk6oWKBmEWr87n|OM07wo zRwEh8e19+@>A%MdX}3B}^r!*p-Z^|EM}^9Wyv0c>$>N#jAe4(6%O@l|U0nPGx9TsR z92rNNW@sYWo1Tr*^N)xhr^0d^sY_jadpMiL95KjHO{*Dj!IPGda40zNL-b!o0$gucU|a|(Frp535c*mFV-Xwmd89QF;di#aA4i8v2zobe?m6mXBFrD1Y6_p z#m>c3k(8A*Q@danfn9{$BAETqkxA>?9tx6`9(IDkdw) z-I6UO_qyEbDNL4N83Gva}yK+oULu2+}M1r0f1dtiT%xHTz z)F4u@wPhbE)AO#g8)PvYu_?n+DU_3I5l5G2?&&X07z1M^jnKHk`?4pGn+fU8qu%TF z5MV7rC_f0Dk3+g?-#b{}dxulIlWe%;_;>!-4ORrb$C#6S@H2Y|IMPh+Ke&r&v1a`Km z7rnh5i-SjWW!Y9dk?#GMz_+RalLGn8Vl>insVBpiF)zvL8~0v6j#D5ac|-$j_5S~g z9s6^0yJE60%S!x7_1n$A7ettxPBRaUWRj!qm8Mp1yPDU|Tx>i8MSxM-9h#BGxSQFJ z*o@6uD7Xj|W(Sp%iY`II(UQCIH ztQ3eVSO&-?Z@+CiAHQ*2sibO&IRM%7SaHR8aB=G?f$un0O=KhqFxfW53O~En@1GW{ zr2;WX5Ll2Mp!b-L!-+O=dJLx7n&XoacoUQt%@F*JTn2DjTsV+*Oy#TVXp&7JF=;_I zRU@?q690t~2P`gclIoHYmanE;&7evGFiLGvLt|U+e?0D>0>oa34yh(Zet;e}X>P&+ zeH|Uc)8L7xV^3FX#S&nFJpCm7viJE=%q49JC1c$70=f^VT9P?!ueW@0_ttqA|L?}S zNY@b!9#_^E7fuvE$gN|G5wD5lrZ=ScT(Sl1R72tucKl~h5nrvnVDGP6Y z<1Dmi8HV;KeRwaN%fbyd7umP}ihc5T=AM~*J3q^3u~Gg2KlHah)Kx8=tumkC6bS8r zB^@l;XTl38I}c9VOLF zbYQ*~4b40!wRCrgBF#kmkKLs2Fg8PDJ5zqs)Y-Cjy%{;&e^%%2&=dLB8@zvS?|eMY zMw|?TRE`h(Z$H`}Z13B(cyn-k=E<+VH>P5e+Yp}QrZ{J;ivTY5BM|DU^s%J3EzaMT z6mE+vVTLsSRGko|5UrW$$WneiCtDps@%W>|$&1^v6lD2QZWBVWuDF1({a__QI&o;= zSNTaJl(Mhc&9MJb?mk@NN{OooJKG;J$ynq5ZvqV@o#*sX?33>X@#Ag2iOuc9Bckq&=g8b)ac5YL#GIhzbzbjIo_5&uZYgP~x zV6$?X-18=tP>Z#hNGnb6L85)2ldCw#i%vo|!5E1*Gn5pFNs|mmmbr%5ElxPA$*pHeg6DVv(qQ=?oS?_aLwB)~p|9O6se#XnCOZDCv(twaS zHsZ0BZJo_Kxb+XG88|1Eb(o zFF)Cg^t#CFPj&5Z7*z`rvJBESM_>)Z#`xAxftD9h4LtKp(-pg+Xd)P=UB7i>^t*?39%tKqw+8(DK4Ob|Mu=)X%PC?lz6gF*70Dc{2jb znfx3_CYL`06M_arbcSqcca7D;WvwnLw=QQ*Yue^ExR09XCZ`XXs>WwvrKp`jSl8XF zhAammkh^>5i^(MjipS&Ko=KMf!dpF$)ab5n$Zhtl)-2eb4In8%i#!3N-83|j$STR5 zG?1%^)s~5i(Qs?Ece1;GlRJ)n0+uHyvPQ}UJLVAK4W&;lZ*7>(XkOe95zI=6Xz+d? zPnLd18LKNOGqx%wkr#a5R%J;8#h5R6P=$3#WszQG7Hu!U_577;enp-#I3z-sT#C(* z-r1ZVV$V2@gJVN$G0I<(K%vKFjDMJ;4%usj_T==mw%){cn$bx@sYbvApbc6c7f$p!Yg-ij1>9s>@u{+4^kN|3Xh& znR^p_{V<&^(TCKaN8yh^G(mCsUsj5LEKUL^F!KXV`GF-7*~qm!m!+c>O9eg{N1Pxh zJj85u1^8-;T$rv4q~V(|R(PnT@OlFz-9G<1u8GvW!|`%((ObG?!X=}bZan-|Gvm$CN{MKYWybpY^! zVnT)}nUO%)nD;eH*VC2F9k&9~bIrI`I4-=8Ju#S|{+MFr6$2247-#BXBN)k`e(x~4 zHv#^|`yxmZ?U;!x#JPi0=1GsjI%yUcp~N111bJ+2Q}jq}p5w0xA=bZ zwn$T!z<7OrWobQ~70kYUSH-+EBOBa!F8q_Mh2(6B>&JGdF{CUVgml(Kg=kP^XA-r1 z7mG$Oq1+ETcQ>*Tp{=Pgs_$equ6>M%u_a@Gdn)E=XEct_gz}*sSB9UM?-@wC$z+K0 z2zjfXdeX;v=_8jurDr@RZ&HQ+yVMx`F?r*&o?)hMhMjY>9}t?!OBB|C5(ccv4=6k1 zGvxM>PPho?%iTsyP533ZIN+tts)_$yLt(oyi2oaN$H5Yv+5LPS18W z2H7xu-ljL8CU!6yz2^Fjh#l)$+ep{xUpu)T4cPRj^ax$7KT8|R{-WdF1q&o0ThE@x z^(^vwuxVu`gxwd3W!HmHo53Xmz-~F|R+l0AD^|1*dItwuSR%{m_=Skp1??#f2@i{A z$YB}itm}BRJL&D4*``$urf&n$vXSM_G^0WgE-piDX1Fyd6KKq?UzX5(La*#|iw2;+ zBVswZ1d0$|bq(0@CBtVg$MY5(#hggDm8IId@|XDCmggSl*?o)1RVprjj8^vdMDzb; zdEjbF#^%Eehf)$DNNB1BRXa#EzN_pJfT-zf_FnClQ+!lSRlq2xJEo&VuxdA`<_N)3 zDQyL$a999LFC!rvByzgwSk5nTN?8m~5u$mkWGx$_^*}(XAJHGRyX~X`aADDo+&(7) zRrZ=`>5Y%`i|05PAEvH9&E3}5o-*C0`Z^iJpMlo$EN>_>k(iwT>hM-t2#2-e4k_(S z%2IDngY|Oar^?gAN00!C1B6?r192&|0erL?UICE@8}cfKT)LHP+<4w5%a3tan8M+3 zk7vcR? znkTqABN`+TT#grazJH0*Ejt11ni~Y6YOTeOwU3^F$uWOhX z^-z-vBIf95FgTOd=?{2`r6+_Y8DytY&ViHZrh?IVn1bTNup98HmI=x(5U7wW?A*&s zGjin$$yx%iys=feg>6XF%nu|JOjgk!+OV_YMs^317wBZ*oTj7H3Qu>I6;faB9b;d& z5}E+6G%H9Qc${T0lU(C>5s-x2UjN#eGkVtoYn*2Umfu&^ zmrX8zzPDv!3CHsc;>y6vzst;6CYHJ?-r##gH z>=Wsn?vz^z4nLLyvu?81vZ>uvtn8P?%62;dq<)wk;?0>Aasf>DFkts@0l%=9`~h#a3j~Rcx9i&O7w9*THc%yOo5U*k zngxYfD{XPO{{!u?(nX&Mb8C>5k>|&L?M2JyzlQ@V{1F}-d^Ar0xx|z8A{DT=xRwmy zxcK8;qmk3oP!W|%`s7xEM5Y+yLV)(v*@r-dNZMdUP$5W>(3@ z{(zfq7H6JYO?wcxm!+?W8LNEdy?1MP6 z0|H1h!;(~TA(cG~U+xmLH+Pl!1wj-_%0X-bi8#!1Ul%kEVp`0z+Tp=U(l?9Nk}ZW6 zvWM$%+0v^N&tOov&Y*dbvup^DH@I(-k=-Z}H~v3orjFYCQp^mEQJkuG1HqqzmG6^t zZ!NIOFReG-J^C-B=6W#s!XfezAKr#Msb3?@m*x)U9+R>BWqf$wRCVvasFz3hG9u8V zCLyI!W9j;p*nTO9y0aSuF=$#iqa=3(bYcmN5IO7}79!Y-`U-e?#Y(+9o)r9M|294> z+y>*p7uj8IzV^CpeC31amWAP!UJP!-0MPKKfh12VzMq2hN7&63kU9VG_{N{g3iS*V ze(F6|Ss122MBnf9^^Zd{Bj8!B8}@#6;frdYUo18+Oy+y!DEL*@fP-q^BR z5g*BycfM;bS)jOP%N`y4c62R)ERuOFY)*ND2?2?u=*C5s76^R2cq1aV-+PBD*V5gLqk)7vT*>NO)#}Q9Ed2hIIes52n#O}_{ zLA;b6ofu>soegPszTBP?DcT;rAqp)U2Z<|>%LsyCoLENBSe@;!+q39z;lwY6t)KDg zA3d;h%wwjmvrtguwplgZq$Aw5z*_hVs$k4#6uSn4kX8v+c-VbNH!Q_26nFmLD!`@r zmFRb;j_~|TNN?SSRA_IAzDr0qfYl~52H?EnTX20?W&8-ieCKD>YNW7`uEZel91`pV z3Z+2uO~@kIC??WmEiG3eM}Kf~3=w^1w`C57L?IRwO3l7`>5%1oEV!K%gt)pxaqMfM zlBL&4D&m1mr%=qqJmF;{-N;=6KI*%3O?RnrI_eD~u_@xx}pY1*;_25=%Q7tR6&+ z>+AG-FTZS{W17d(UX%>oKEO2zJu+Zpk|(&~@9lN{X0nfNh;%{DKGqwr{r*j;o2M;~ zU$jnY7fgKjHg`nx@!A-)?>>@8wXM!Sdx~t^FYAV^f@k%E_(A;kcOD?HRI#9|b|oez zCE9^mW1K)S=xXH^FmU%G%(UZp$91kohcwwb!&F3kzyz@uDvc)N?NjWQ)EPg;TU|;* zFrI@-6Ua&V6}JU%wIpVMY)CI2MXWm(M_iJ#TYM+KmHI8JJ@Isss;$k5lsmTV<7*@+ zGJ9M^RM`E51xPm}3tl=tHNmM)T+BYQ3S~$W&OS&bQpvU@DS=#b9M%L?)V^i?)1YO# zx`ZPw^0@o_DM4?39Afhlr=P_vQ9+o{@Np{6{F$GxdL!}VY<`?9Qv-R`l}B4Tgy0Fg zob04a`$VTScE|iWqn}>6bjq(iNl8$;cX{3KeM3xi<7EReOQ?>a*63~-3L(#67m0Jg zIEgkk`C?^Vk)(|fZD@kvNP!&B+dZ-icofAn4YU_l==%@GSV9a?d-yg77KP{A4SSEd z1Al=*d(mfi?5P>b-T?=8m3W5aOn0Mys!}alUN|aQq_Rg;8%Cu|t}lw2VI}2fUSqpw zZkKZ|?Z3ynoOgj%Am(23*k}1vj{2`1hsl!XNqh+4E_dfE*VZ>lLvXU`3rm3kczb0f zQ=^NFcHx`-_3a>p;I%w?FYrs6=ApzmfMjLH)G)nMj7P5O+9wR>Sxik5E2Y|@MW}EB z_TK0^MS?unsVdX-PcGlWIL+PSH4(vsO(FPf!JddPi5tZ-C1|%}I4&%2#-Az7BoSytKk0uN9oYIriXT))fD-?-(He;oU5x0oeZ;YR%ul5ZzJdgFY{9^9uKMyib^tGggr0d*(Lg3zs-3|3o{ZAzE z*4%Yo?9bGj;79GQbKeIU0D)co6{xU2LWmvZ1#qG*4sr~(goT+%?f~Z4qPbu#1_Ut) z)L>l>7+%7Aw*&olefYf0-HM1E-E1Ukq7R&3|A#13!=9sTEblsAo}Ir)%}nw7Gx30T zPRN;o(n0)T54vwrPEi@ZWn_Kd_U0;WiJy$$r5fiwqu$N(PH<&BJT?O$l_r--1x!!W z&F#T(Z&wznRXP9o|P1uu=r1ZSSb{csWx%?`X~Dq;z5irL$PUq1_z^C z1AqGtgEIvy!*@DsvbC|O=k?-pO9+f7J|KO?#Un#_PT41mc=kiZvrGItpD&9cnfvM1 z6G{G4Rr7J#sdC}8f=1ISt16Sx8Zr)Uz^-0&{W7Y&&AaEttpFBl87{mEK^80CtL#5q z4wmPWcy2BRQ$*4(PK%+Bgc$?vhJ4^kpY6@nz_-sZ) zxQyjEI*X%XILfbN<}OcBF7)NL$Qi6}YNeI(4v-jatV?4VOgDtY1~ya~ZO~P@;6pbm zbtFMZfLR*M|1`vruJDQq2mOsr+Ms-tRQSZiB7o)UM_G8ZSd24|KZxkHA9dt1D(Yt& z!m@}*tKS-}us_*i*K)g08A-UBL$vJk;qV_zrRLbO9T@GNvlJ3b=fHlJ%|D zE{AGCeC0#(nEyW1?32lFs-0Q>oQ{@1H}}6sE;m{$ZYskRi4+mU*Z`dHS&7lM-(YYM zmWwEt7}LUa*yg?vZwLsS66592acnRUW{d1j-D7#ci@CNckvTJeabAFEwnp)r6RYnA z6)}_tJ|NUa+eC27du>AA%^J+R!Jpsxtat;*vFkrmplX2}5RzJEsg~=G4lSUPxr%`5 zZLeJ1y)9%Doqd@+H^z4AoC{a3q^o&&$U*#JU2`Iq#Vko z$3xNg`QGSq$#b?9FuocbsmNshGN8f{ho2A~P;Giz2ahJ#_)(67JqJuCXOsY=V1)2< zd;!57K-1*#FOnU?lEPz!D>1p|d7BvK%v^>?w8_ekmE)WpWDJNQxAQ}?0-Z)V7`>7u z7!S0^+`Dwu#DMT0_rF5&CH}u(;{W>~TjTk;H;9!aCnh^Pe;3O)Sqm@-XYfH}1$+gP z0$nVQHuaI1nc>D+O;;C^oT$ZKrEm3Ld+i3DhBWNeW`r71k-z<$H{yfV zYQUoBtO2AAsR_#Bdi#Pi${M%$OD zGo5U*zpW2~U)5{Gmife#aCVS3Ekej~sIhXTfDYfxvZe&KeMkiIPELUSDvc~%@~#HX z1{Mu*@M(lwpf9W$uBO7)J`riJ-rL?v9tK5&S>pjck?gHRL}H}L^buR~{I0q8>t*(Jb3Y_T_kp?p z?SU;a6FS8zjD(=0*e~+y5^X_K-i)0BBPG`g3x(EB@d`OUi0yUc=qd%^`YUJ)2Np`p zAKhN>+@?ZSnoT|_?Jbycy>d~XMZbICWAU#0H0{t)l}y;$1-n@z&>ve^qL4&X@F7H7 zrVas?-JLujlqSJNzf={al0j~!9n0p{d*hT~*=nx3ZtoNmh{) zF7=Ga1Y4Y9QG`JpCq_X<9Q5}XnNCb{fJs9H{*8}UTgFe>+#L?K*Ijo+UH6%8l|pAi zw>J94J~(4#Y4B%}7=!a|Z(o(dl01S@@9L4>zk%oTuK|(XXl>ILK`EZ&6?tCdMq{bv z?5UojCzkg7*ajg$wZAKbS2%mK4FB=AydN;aMeeu9uf!-xv8TWdRWrKXSe4ovED{-s z!MT1LG}eqg=uaWt`VSms`?CYR8i((SsbtATWp&;&xG?xODu37zSNQdQi4AdGF2gNApM<6hKja<;6GV%QSeO{!`> z_2JoAKQu4;69rx}8($O;R2FnK>b5p<*68|%K*ahc-xFg}?~JvctzDCLz%M^~y@S%0 z$s`^oG~q&o@H>~6ZL`MagTLs^x_Hu;Yb4$F>lCcAYs>=i7S-ECe`PH0!SInsk1!YWTa$SSJ@NxmeX{xZqr=`!{3bZK z_=L5i3Cm#Vb)b-(#_YZY>SI)7z>~FO+0<7M{@|#7Plq2UuL$nunvJ>8+vMu?AfH4I zCG(NX-jI-{|9(gjWm+={b~A;)VMlV?bZc|?CO7e5O0JHF&qjs^b}2*R!&|HVQa`8a z`-}(g^D*3Cqv8D@_AF}BH2$@8Zf;Y1elH%1=yOdIyRW6s2&k!N-K@hL@fPvvC*(r* z1~efnhuppYYQ||1w?TE(y24FRC>9|V7Ot!cNU1QJCCF%Dlo_j=?-@~+N7}n zBkL9ky9y$P;^>!lI`40;;XpfbWv>U0Lp-VSClT1B5OCGVvXk@j#1nyYdIOpLRf<4= zeR+DbPihYPYfoA&FfX={Xs|f8Wx#|WEVF|jN{VJMW(hoTYyRS#9c65M;uF{cvs{r! z$_}>(e{qnOYS{qEZz?$^T7zzFuWyanHUzry#@DkWG$Y_hln4X)qv{~xUzRdl{n+8<)A{_Pg~h-#mo zHuDu;E#a#g9Hn)L3FJzU7I5$s43r5I1glZ=X)Fp@E#wBWfo>odaQcZBnAi4WYr?l- z-(8(pI-^s|7@eKk^-`eR}|*0Wz??e@+Kh;a|3^Yd|e*1v-G&ELb<{(hE4=>NfXs z?+3xXV6@m90k%`N$~>R(YCwIzN&n@&3&(Oxdw08-b!M|r3sC6HO<0b>%Ph0D$}scy zu5Eat9>2ZT;%=o!%jR4LKN6?apK0V%o-UThp#Re92KO?okXtw)1T*k{QogcxjYJV_ zb|o7e_2F-()J4H2N4MRAxdYQjIHw+Pisj!iGlaltM)Vdm$luo-1mb%!S1mdPdajZFJA7LUSeQ zg%+T%$wQ#P3d&>uM2Df(x|TLK>XmUTO~cj_au$+60F-iNeP`J~U!BD{Ud&4JEPz`< zR>XdeHI^(L8V{#*XtFGJObK2J?16>RBR z^t=5&Z3;g@b6+s`CDpV0ud;srF}u5q zymaEc+e@_p3Rrf_wB0&8tvFoAbWsl~Hq+q|u5jjEvb{{@0vPQSg4+R{K*4Uo51YDp zcsUwqRz#H5htsrk6DQVkN+8AJh!?1ohnyC4`f*k$6@x#3a;FXWC_mjQbGxn=We$JO z$=NpCDF!m`g+FkJESmY`ymh6IM_jRw-Ss9fPZ9K0t+m-d1F)Rh?D9kysG zFc)n^lsi~Uxl9B%b_B<)%&NW#RbNBIzVc+rnx+%>cO5nq;~XtX+{}BFRQ8Et|VqpD^$Nh_p7%oW$w@sbjH)YvNHX3c+jt9Vh)=Y3a z(3#a?1XnbLLDjYYnmW7>*bU_k`ptiuobR8qi`_qHh%JUfo6RSb>5c?f#ol&fg|Pa8 zvH<2jA{q+@e9!Ej2YflO7_<&)km>BFY9j+Z#i$+Tq8wZ_cy){6{H#fK7i@%#{hM)R zIXq}$6uN#$R|QUF-=%g3mp|^YMD|V=(o?9{d+dBPkV#M#!4`Fdxt#5B|212?#G+@f z_(SSSvaO<14M%sz^I~RlSfAeAiB%lKrS}2@BC{^?>!7MFT3u!MP}k0m=WR8h=>~fw zxqQ`QkfJb8{Nt@5JK1F?^Iv3ArEw=O0TZ3*WG|D;@5Yw)3bEIT-p6C+iXx^k1~p=5 z)E7$`uDGrA4i=RhO>Za9fQx{frt$_%#-^XS>J@sq?Ke^I<7B-7guOVu=1>hk@Q7k zsMmX&<1s;rG2lt=af}evI74VvUJ{iy11S`1#1B z-whKHq?5?$?J}KmPTTvpEUh~2@}3>6zQ7~x&|YwlVo zE=CPVk)p$@ruie0R~o}sdS^QF&rpdx1dDEW*VBrQmChOo@WO`f&J)`Pvu}Yg9v-V3 zP@^*TUqubsY|>oUd`Cq~G|LlpNU>u7ddjGH9%Gc4I62DDy{rp4K^^~!AeXSo)>6_c zDiiMz7QrJUN@ej0mg&zQMEhJ`S-MDD4`x}Yk~T7p`d4l5f81mauAU@Rqu*j4_`zoT{j4H$gy+hA6G5}`dPYEismu2X1*vRpW+I*gnPuZs(JQnN>}mw^@6 zz>7V_?m05F8mPnD_+loH8zmR(0ppB<(_ygj-f5Q2pD??HzP){O%J~R~T4F3pTwO}X zWRJ#Uvhh~}$1+el^m)L&w_Ujcqj=LL%D9>DA029=mcDzmz`@fAHLIoaSF$F6GT9Vy zRT4Mzy~p~e`V=4y6KTeJ3jvANfU&ae;G@&(%JeLLBY4)}1|k_|T$1>2b8YaG0o=(k z7k)ZGY;1&9*K{409B%i_G><`Hi=34y4~|=0(AYrn(utzGuv-7gCn%W1Ls~}?UxiBM zC)2w!SS`CZ@n0(Qve|Y23KEXOnZ)l4_l}{o-@Br4iU*;3>LiWOLm>EjU+7U+Z{;s_^zeFa^AGGh!cZv@GM5ht9`3e<9dZM7# zG9!c&K;#GG1S`!$yV{g zsE^}#BpY1YyJG`shbX8eT6zG z$;YszA6ONmvumc4D$hqm=`)YE1L4!rAW#<}paAR9jdM_LE8;JtVe?=NA5Vq@E{mCcF^&)Ixzdw1YA9TURv~1u7^6xiT28(JnKLh*x9-T{n zhSv4LprUxj9F$W7v4mQhBrJHChe)1GuXhtKdC+>L#8G3E!c)0h>O#5bObhEw>?mAC zVm>?fx+v^|B~ty`N*}A*Id^G?M#2>=+tAq6P5iY1J*0Qhx*l#R^ry9JvA4L0(GBdJ zMJ8O&2bZua;h@(FeI}uV5I(WMgLS3%4v#w;EulC(y@vL2iI4fx@_cvJw`jg(rTxb? z;@|7v80q$7Sx)A4o^@TJRGyVEnG?3R65S>6A|zcl+ppY86jfc4UkB@ln^6Z-!W8eh ztbK2a-@cXqFj+SY@!#jT{=T{&mzkel-b*)Iq-Fu2HAywEdyZqfKfkte{54nrX+$#X zn4k}l0HISNw)H>fUU?}ydWuGp$#SLV<R$@d3S7lN zmw{PkIU4(M*T5j$5fZ6cKkdNM`9|t}!l^l5a0)aQuG%>>%r!j@qzhlU!FdPX$|kP74`Kr*UO49pGyGO`O)+0rUpQXkC9fT4w~`L~r(Z2gF9P zQS3ln?`W_lfdZWg)0NM*221^v)RHG2Uhg(e_t+({o3`s`SSpED#r1G23n}V|t)vDT zthEy1*k-)DOE66)E{?_g;^WpEmEoEWjp>XQ8RwcwT8Joq8r9gBitOFoPj^f3TuInY z0eEdf7sqt64SK!59-gAEO|%;#X!*k92M!<(SC;i>CR0^+F0HGW%KgXN+mTAij94UE zsZ!sbJ98UCRGKVMs^E_m4sy$bwYT}#DrCc!Eh-v)KzWnBpF~35(aD#xJt=u9VRaiL zg#Y;330j#j`RYE{_+9y6dVFm-I(>t$MtSvdpgOb>kwwRY>A?rt{)76(PZFT|K3C_#Q{4`4gE!GMtaaxG1wUhU{9#<|JJ}wVR zkmu)Ck2}XoaLHO4U|H+QpbDf-v;wuH>9!P8iu|2(rUzEiO+g|k#a^o9zq(v{BBn3 z{d5%&P>F-%*80`~y(-CX&Pd8vgfcMXge)r3e5&np(y?EO*q3L8skjQ4Bk7?b`$RZU zhK~+y+9_=J|ANs~Zny84JOit1VY-&e`N_HvwvX&rGuYMP17fntjgbOz?WNBB5d(;N zI(XDYL^RV~hNw2c)lDXm1rWoP;q2p;F@GrLKf8uZw@dwt;SlYIXb)h*8$G zaOLFP3R^vdBuhYN@766leo_R88H;H6{^-7I%hor{PoLs=$!u6i@%r@d`rWH=Ff8xL zyZ#jsz?XD?{w;G~LECFxXMVorctJ;)Z6?mca}7b^L_uZ%(QDqT!d(Dc*hOw$B=2BG zvQ5no=>_h&Y;&>jbccw;fIHhUAv&^!uGtX}Zr=zt_ezK|hIC#l9oWq=P}_mjHKGod zTO|XVoO*}F@?hxS9FLUcOh5M2Fs)hN*+!%aG~)2UK%N(BP~=0RF0RVpC!%_1XKLb? zR+R5nEwMbmVGMiE05=)N}a<9$gm5ZNw01(L36P4nbsIWXvl!|LDg zujM@a9PGWF7w?bF{fW6h!_N3oalQWqm;T>nZ#<*HxG8Ku!CA>(lZ%9IcgAD+`b@H; zI`t7BV#L(J=frkO&?0#lS0vvJx6>!mW(%QJDPmEd`)U_ zOr|90#4X7f%Mgj}@wk7La4rA_{-geHEnd!=9gd|_FRsKiq9F`Nszw=H*e`0RundcT z;U4|mikEKfdCl*;emv}Pq;jQtdhShQ$z~a{aFfsTr#uyG9f#7#8<$}~veh|w4uw{O zC1)9Sf`!?q@K;!9&_>CO$t!j^Wn|1kX^8s~VAZFzp<8 zQCJfWxv%R^!g3MswPzB2Av%PRO6xxtmTlPV5E{gn%w{{?%c6kOPONwMGXOx0E-|x` zijJL^A+%t%n}T$$qw*5|04JUBmH9##V!Sd7q6^rgiVTynfPfYjC~e+KvyrLYYlTvJ zPjJ>12 z0TFRCOO-XGFUp$GKU#o8X4~?4>OSeEn7A)0F^-ea_H`?JEOg^^HLa4C2B%1_Aga%Z zfCY^po^s-Hqz$k2z^FMHN3!0A%Q7l_D<19qV_g294o^=Td3Skf^*X0b z5b9lhFX{6h2YnfzUSp&GUwqW7a(fR^g{4`(Vscu`{N6F$h17OfLHBO9Zw3~Z^V5+k>Mi~~ulz%AHtC$B5&>}y@8!2H zigMo}-ZgM7c8uJHwfp>-&Pwj#OdmHx%oxA)_#_Uu^)=nUrFD)*cPNE%?Ww9<&}Q|{ zmNHLH7yUaV)I(Em@W}jvk^oGYvRlt{PiusTe+$`IfsYZ?av-_=wuK{Hw1f3qP`>6`|uX)6&11?flpKDu${D3t)j>dA2c zlahhaXm5uYIN0ky3!%A8w8dz?M#mZ=q`xQhUcKV_D=%k7)-@x)d(Rb@d5bdCxNI4o zJ_Jvx$vc&m_-xg*CrAB2HgFClx(@I*@jVWiQR>{jGxjn=j9->AC+Q&&H-Mo4=s`T|! zyLrfqq66wpL=_BtL`F>6VQ-`mgtE9ZeC=b8iHcp^paPF_xdQpq8aNh(9q^%xc=l zSBc39k)%Hf;v`+ek38jsCgIoXT_mC#K*CQ#$WV}c!wreCTtM+Y^>>r~jgdx^kA4Sd zz?yq;pvWVPMKU=lRH@plqe8MZYnF9^W_{yt7RIG4XGR#_W*{*XWEu3#P6M z$f{qwSO~;PWybv^`!O1^j$OW6UVfR-BUVFuQC~f!w?LW~{bzLqN&I8s>Hb7>RmW_SNu zEZ13k{$o~}yhWn=YqN-pDd4toRLjo7-9e4qaeCU?%Fe#zpu<6Q+L-TrIXaee!uzQFee0dpvXH7u+^I`1n6VO=2h3OE(Bb>*+3PT z-d7P5#Ve+a0{U=A5xQqn2OAhW5W2JXGXl5B}z%xjbFdXnL5|s*a{_RR|LdLydWMzM@YY3~nUrw=S2X%}bKVuF&f>D+IlyygCnAwGF#0l}F|j+fMZP3NDvEn7<%PnA5= z*?OfZ<`u7~*-s?FNT@MLI((U?UqnIt+ctpmonvKC5@bsHUM@BKs!B;=Y^5v7uniz8SSoiKXrC-t8LpC$9qz zH-Ga#h&TULJ&8Y7MRN8+{O54_UwW&h6#zq10SbwM<#;>ohqFIKpoV1YA9LGCw5gM= zc$l9EhT2bOZ~$|&K;W`T?NTf5I4Vc@<+j9eA9kd^%lT8tn%!;-q-_g-pFzjj6VHiZ z`wW2s;rG0BnB_ug7=v;RE_ZR=+eu^$hZl^2{=@Z$$Pni^MW2cW5MaYCo$=uXI*> zq5<;g&HiGT(RJ3gOU0=85x|KK;bl&P#I<@y#>e0`Ce6ymoG(c;wsTALR(nB-Hw>4Q zM*DIybt?@nUoq! zeP0TRmEN9-r>U}xCgWMGiIb~~;FwKoGY?`g*jXpKlKz_pPOe1cWx2jxAj*2Rw)aE~ z%*h>Z&mUYF46nRUiil;Dclu9eiaaVm#veU-UQdY+&HZP#*C8wZlho;a34Z>5y>?jf z<`lgJ^^0Gf06P9zCf>>Hr;RMG*=MK;W>b}v;oiM>S|0ke$PPB zP4ZT5I8!RzAj&zVucvo2{J=aY8ZS`o7`SfHK5KI5yKxZGc*&C$SO+6)H!J7dvJ zGg65d8!WFxQf$M%*aN-hbdznR)Qa*3LNJ?zBm%ru2_a*v(sfh$O1;;-r_J0zCl zcLE9E_J9S#6Q|~>$-lk+V<(F`&qY%E&`@r3CT?v{2RpIk%_#Te8m)AsErk6nV$StH zcRbqIT3MAOM&3)ST#$jZv$OVvfiON>*o3Dc$5;# ze(&9`lTJ)&?VTdB<-_CMeb&HeXK!zR?QnQ<dfc82 zk!tC9^|K6eQ8mTr@I`U@aCP$OEstLBskE*#2zo)=@AIEx)qhyMwqKoV8Q)){n)*9f zVLvH{to)O0KY^WWTahM-ciA_=Mo`tl*#&}5%tnSMc_-kap*CCT!`nH;AD+VsjnN_; zmA?yfQK1XGvF}2cTm}GBoZejQPHY63i?o&jb)`gl+BE`HgLB0kY9L|n`zot}pTGV2 zm-cnM@jxS(H#OnNbX$IUb}6VnJU*j#dEOfvn;Y>F(?$E^>$-X^Ej|`c$|runQfB{>^cc&Y#7!IJK49k$_B7qZ2uJ!kkG3|WIIN3px}ys4@Oyvs7N4(h zNyUzV4kd#96S_fIL{3~#Kg<@+gf$xX)x7^@hAb^MY(MB9*3RPIrs7&9%;oS;f9bWD z9E*!7>3AH5qi*lUPvGWUqt?v${kei+`TuVG{}|bA=lf3wb0wCt?i!aJbhTUWo%?zb zoK$5|vaVAN`sdCHK$ z9n7rAc@ULx2z85#t77bQMG+$Gps^>H^k92KAP@vj&Td44>FAV*^zl&~kt`9DXu5ja z8{77ekAk=!#n+-3_s`SbE=ZAa`r@sp9N0fQRS>DH*2ZL^Nt{gvKPh(Ddde?LiOi|3 zr#!D`ZI_|Xg?oKcG*4lqATfPkTkf4$3!OFYGwKP}nru=){YmYJ$7YNI_x?N;jYjEtzD=cfjt}9M>6ofB zFGiySI#Y5$rNmv&6V0873xNMlHz+?TJ^Pg`aEr(%bc*M6p{Mqn3ig~L8h@r@KEI}a z_Xp-a)&9x9Q^$Z0>YDOz?6Of-)T|XO{1iHZrqd@QH5-Ooy>?{w*=Z?}qB*Ud_q{-| zLCewcp)<6I(pW-`=XP8yIQ0P_)>^@$vzHC>L1$RA1&%83JBuZ5F4xMZu8=g}#C|f0 zT<^R_SxbXf(2=fVZYi;~_8gW2-L|oB-NQ=lH1B-FtlB?f(-Xjwy3jwlN-d0V=RKeU z(la3``x~cEWBkui5>0=MYaJcqnQ?R;G)u?yrL>{9zy}onWuE@1uXCtKQBpEQ2wgml zARpb`7gJB9l6oo5$CJjfN^-^vl~UK-iU(B?6Uc%cx?|M904Vc2NSlc`Aue3d9LKe< z$-zX>7p5#O=hBcP8Jx*^mpTMI$6Y5~PW_==^c3+XaVw)20Sh@F*^RV+qFY}QoqWK} zmfDBBNIF#dJo?I1)A4S6A-;JuQKo3~$I2e`QF7(1lNZM2rWJ@^iab$EVMQ5u@b61a zt6Hgd#*^9svV6QQ2n9wn zAOTYW*uQC+=XKlOuQ?g+dOKPsnofr2tg(U90S#?;S1&9()BzQ-H-HC=uGR@yUR;v8 zyS18pe*2jS0Ty4k?;j6b@}C;Y+v2j2>iVJb1nhy{4Sj=hih1wOPnsCHb6oA&qrj}_ z48Q`9w9W=Z(k!W-3GO6;&X#E)1AHmQRlZ|7*(Ii_vU@27teli}lcEG`jJ5vonUJW& zC(7OMr3QNJZ+HtnWU@YWkY=bJ9@OSt0V{7wW_yl?4W5NmcK ze}6#F@_^7d-G0HEFn|FCxHme`Sk=CQFJHT6>q-d+FTCJkJbg<%=O%4;j|Phcahb9U(uVr0p5R z>8ijr17v$$>Zx}db3%>_0JJm57hs=*Xg?RT1)vXKcpcu$n*fZpTrT_ym!%3fcSC#Q z@@}0Nus?iU2F9BlZZEDbrKvlzTNO=Japz|YxXx|si9R2>WwHDZ=#ILm$vm)r%+V1W zO4z=CabfaeGm8#X5_D>K(+SG#smf$%rKGMo&5AvBn zE4^*)bW>q2tB#cuWPk>IT0`QWI9%`NUhma93U$f`h0KV2j#Qe!%DO|+Dit~o6AjiL zE6z>@BWD|%&J-+31vtG!Lvo97YxotepCSx`2*7S0R49zl;KmYbiPDl4;i7KhN;04G z7QodOD%ovZJT6P_r8^wr6b(6!o(m5zz{bgf!9A_`SU5KNpE!wU#1*c`#dl=i>Xg<~ zkPLw%!A%72vLGUPF5cq?&1y0Xw~A*Cwa7CY zh-YlT@~^@2y}38)OZl}jtbTxp_bnM<^izRJ~LKdVa zv$!42VHvER3uOvPi|{4H??rTVuSAVOQFRiH89Ib#@FQICzaqSz+{UDY%`fh*+5U6B zzak~)buzU;C?Y>7kBQ(+!3IYLjP8^q$Ef^1nd}&Ubg$|A{HF6deTW8?ZQpgpKS`S% zL~%X!_O$-q^eb@n=ujJUz0jYFiiL=M(Z%7@YV$RGh)}DLu$@Mx^ymMl_NjhW&i|*` z=ixhb-1;l5#9yELPrb$7Zl_73zJg_N*jO!d-|=S1vh?S`cLpO}BB8q>qoT(}Yel~~ z9^rO0``YXUTMA6xX;!4v=b*cM4RJ`gPVS!{$2?G1C_9!;-K2Dg`WP&c=p`K}r*>TL z)lS^Q2~`C7#kr+C2gdgoN0o$Lw%9dm_n}461cW-dw!l;iaJ@%c1m!pg@Fe6UY8tVo zM+|Y#*6%;7L>N4zQz>vXyTCOXoP{yLF=E+SeDOllfD@{G;Y}yWlkits z0wcyZS%=d7ro(I54g#ck(w=h5TTeR1@HAHn*N&&QnT`8=V|Ah&njeuF(4Q_{S($u> z(L{~OV{*vhVZQL5uC>uCI0rx4?-U=(2L&amBSR(DgUMNf(!$jzIKeBHF5}~kmPM&r zJr66Ef5d4yDJhKfpzlmb$n)cqA6?=M4?7PhcX-Ngo_H@lm8H3nT(AFVh1{F_95o1E z&9m|?;&*?6trG^G44^?X%-E!8P_0mIP6vhdQH2-%WAd63@1Tt-e!|vmdylcEyn%Od$F!%?h}om zl@jgSDJ_i*uv~y%-Os9V!VvY(QQjLsYm@?PH-DS9w1w_rEWdg*{Tlx zmdr}b)srK>@GneLysat$)1EJD$cDPHF5E~Yg#~K$E-ww=%8P-D)tn};f>RjfV&T|} zs~f&E+@%HQaCGAaygmLXU_&{v<$Dna@m9KJwi%G13%owegIK#F{9*;Btbh1f4!BN^ zLg+rf{3%|EA$`qb=`YyWM_rPRj8q?2i=r(wmClT{twq$Dd`Sj;RQ|fUfkvX#Rv}>k zS@0@={@T%jvG0oojoulNQ4x4d(SIrq1yVEGS(-#m^fvw#y^a6wTsm<74Yuhos%%J) zo(iIkwym+k=}4y#!wL z`e;gv%dy#zcDyFiw+h;nhKu<9(4x9Ndf=IV{U~017M3I{zra|s7StVzKTI2XHZJDEy?iq zcvYN70NSLA^$ZZXc`k?82{-GA37o89hDi`>G$8GmROd{dxHZgPFK%e0fIrG$`pMK7ZQcpblit2l2KcB$4Y8hI}!`_HpWPv$-a!oN&qz@bI8UsDfh=}~U;8xHr=DC~+J~a;9qLH%lrrj4@GSx*jiSVZ=XbWRrBKoQ z!QAeaFrNt@oT7dSLl;s>C|kov2?p6a=M3f)zm0}xS&&iFT-HiUgKyKFW^F6WwUNl8 zVkFcy*xV+lY{V+nsCbmR535ds7B623zLwWQ*4eun3N^|qn|h)cv+coP)vcw_NMu_- zEdmbtI(|Biwg+{C`8Td3kY z%*JO}eR7u5tTqZ#Q-IpKhy*AFD7)DBq50QIxj_z00Icj{%R^kS9g@W?zVuy=K+4^=U-_#9T7VgMC_jY?XKmV}kl4 zwHVFGO41&GW3PX(6W^^1c?2S2hP<%wWVFd8?pf;nyfi9_I(E0`e<;hSi4b?n9#+a_ zJl44OBfDf%xpWS2omBRxOEIH|r;PCOiO=0RpUBsZ)iQZh!HEP3()NjrgS(V#fbYR_ zo=^NR5yI(vve*|>WKGa7E19rn%z@j#F=<52zTnTIrjE_(xVOp`0F>DMf|Aioyfoh~$$D|I-ZoQ})n z-nqXyW6YBbD+|1g_WFM9jt^Jux%h`w?PZPlx${GDm1=M)0?_Nf`^xcz$FR4xvu?V~ z;$o#1){C-+(=T7-)r3BJGaQ(#t~64T`1#qYj)|O(?^o7f5>nT;vR)PzcPrBy(ag5nfNwo(8n zuJ*6^ow)P z$916F$H#Ubh`-E5tppqsvx3?2ZmYpfqIJe$<Alg|n@Sbjd5AHKy%lOpC9 z^39c!U$ZF3;Wv0z59Kg^x_qrvv;K(wD8C@n;g{zAU99$dmxa$D8M+~6M$;YZcX~XC zmWT;{BUB=P?m4#0-70ItJK^&H6l-rq+i$q7wDZW2?h*~`A$Et@;U^}4a&q#UqarqP zztWcOM|Q`#XFH%Ry9}i}Bbx(7|DyJ}On16*T())MnzcrqQ5VU&tvBlQJ3p;kjt920 z2i!|i9;A@tHOj;Fb*VW-1}5w6?=uu*M26YTmMGZaAqA__zF;bzTb5<-Z7gpW!=KN~ z-$rTE;aN2dr)40{Bve!0O;Dn-$;d^t-nz~NkzH^i60NO|iSJ+Bn2h$44KR^Ho0|$c z$9ER`A6;9eB*mL%MX_FGZ2y+69Th+uhQp=@gJs4NWp1<@L!6*cAF=YT@$g7Ok*WtC zBHaRH$}cYLY_Gl-khSWO?KJ^Rn4Vrg52r`STs@_+TsyT|F3vgQbjpt~?e)HeV~+wy zwONz+rIAY9cZ0{%XUHP5!U@uW1~gtmG>%|U#Hvf2!*`O8HXXc%#T*x)2Qx2FV`E?z z+RJ%kM-F~$u))=9{oc75E&cB(V{_l}_ojvY^x$Cdsjd}~(=3!*k^1hGm4q;o2eG7n z;zQ~uexa%lZ_6wDk-48`vHT-;%dc1gpO6&*3=s}NLy&TQ0Yg9--)!hNASOb{f=Y`Z zO1d~fsU~1oUVY$lfvk(l{}B*wox`$#qKc)Dg(OK)fQ!yy46V7zX|N~*GPP*>X9U&{ zd|CQam8^&qy44(0k#MzUXL)8hp=o*?x#d=f)H^%Rpba+5;C!;R!#ZhiobOHy!bmNH zEMmXZ(s$%}6vQTIlqMxwoh&*su9I@Ev+Hr?j!u1e9b3RPh+M>q{<(PmHRKG1E7*^R zHJ~ny+$z`s<>e#|1Mxd|58__L^L8M&y?Rn50fuXGWcT%SPmbg$X7e)W$IsCd&>^;q z3n-qi#C;R!h%1XuSRbY4OU4q#L-xerNEY(^JA%vIU3UI1$V00>8)+0Mf&p3Owi=8! zKAE(P$<(*;k$Bk&Mzs>{xfsRH`~1TiTQIFd(Zs8Q4+mSoto8J^;o0_;BJcRS=cNVP zekRIdT480}+gll+_DLF(d_MFJ@7%T|uz_)`ua3g>{quz6NZ+AtzpRkSO*a}Yz29wd zfrpx&hVdasCM9g`X&9sx83ooy3EH^{f#xZtQKH|B(BD=Nej*m^ zpZ~_0eN=eND!wNj0*tAFo%u177+L6@8!B?5Eu5^``nmHsZq~{fo_x>gYcqXDosDD? znt;UJ{msoQhr{ueqim->QL$#*$>FN>-UKRsxBPMLPDctRd~)zU*t2m%LSQAeS6247 zSC{wpm->hM;I3(wY7DDDr^k(rz5T1c*KqDa=ZSx$m)X+X&fGP9f0HAdX{v9q_gPZAGr z=w$8hJcAy4yZd|V>(V{eAk1dF^EbOoh5=0!6Lr*C{2MhDf6X_0THTy)RzG0$W>JWsrsbHs zilkbt_h;k^I^m_GGNCrbCnXO*TF)5WLAnNL9X&K?mJY-A_nQNt(e~}18s?QyVt2)Q zowvP0I3d%J{LT%VV|$069Fe9D3Lk>{{&wixCpXuant5G)+ct&@|hG7x;Y`0l7IA{#yN zWV`ju(;FKb)1lP2k(Uw|?b&B`6(LcNft=5<(dK%_@G5f+=Q>S0fA7$%D{z}AFfW3|Kf-&I;e#_K01 zo!;45q=J8TQJVQv?g;CZXmW6?oxO{T@{N6&?rmP@cytI_>9h`R(8ILsaau$yp(9Nt=KiTD2^DSWY<;CV9Pi>1TS-^p(c>rgT|h6j$Pgc~`u zqWc$(RK|&!m*KEEx<`hf3TDlnKN8IESjnK5k~1||@y2nK@O-e2xC>b2l(TyjcTJ38_vXkMx*ori827{xLFm$bysD!SG164XW_rRU?ZZ zd&Az1Lv=E=A8nPJTYP0mXLr}Yx6b+PY`6#ox_wd*o7CwD15{q9=hVfqy)l~}V!@T( z${jtFe_xHw#>x{buQ!eS>mTF7D!WxtSNY3X7U3-+T8X-%tFNnaom*lw$CyJeS0?{o z+`xFJ%QN*{>{5Or))9KYe|G$(dQ^g!PU~%P_m#*E?1}EFK23z(J1Te<{{{L>k^uiPX&M z=4_aOxYUsm;Je7jB{Bzf2P~r8ZgsS|`4$~I+baFM)5zAs-n&EIo$btb>-6^b_IAxz z8%);r_P3{^I@Ii~uT6{0-?1m_f6|pbcG{n!Z#6PsvK~?Xg&iHpqMTF$i{^BeKKQ&G znP}kjJWs`}I5(#qgId@-3M7yDd34yQQEW?dw>)|Id(t!FxK*6(#hFZsmgWkdfwig9 zS*ejU@5A__6u;ox_0cxPIr?C{Ghd1~M)ds~mWIgj=t96?tu1|UDF{efOpY`e+qYxf zG~f5W*@<`d7U-tVYiIi0T@}^B&d7J%D8BsD&p1EKtB`nj`&pM8;V63B-W)!IO5KxF z)1;CL1i1=DmEYx~YTviES1HH#@y#%Icjd0L{(Gt)*Gy~p@|ACBY*I{gd>^h~5qOMR z&MT*wLoK}P`IHtk=U$bNdTbO@%UC zolTSWkKTxnO&tInw-`jd#k2u%CJarX&@r$zw0(CcWOC;HcHP zbJ5<}Wg-vKi??aKp23pYN~nIlx3e?doNgZ-g5#XyP5ILQoo^5g!grI`98R4oKvqwnR@0?9P`0E9GzbabP+G) zF%?ptyZq*D&y^OJjY9~(KvUSmnGAgC-Y;j7Ra^+PPZpdZ3R zi4WVE0K=I@B7!0k*`rv()^xlFJS-7G%4u7Ag`bfqT>E(Eqd40w2CFI0WgIxkhAC`n zy3Jnp(ks(HyPZ);lgVO{P60sF=8UUhG2^xhf$m5xWd1Wc!OCpoZ{lfpGdtB>%tKV) zeQO>%J4?rG9vtyh*mi^6)C0^HX*1A!M(gxe-c0AD%XJO^f6>ZsHEXDP!jA=<(K>;7 z8o0)}7p)P&K+6W!LDq7}O-U)*BtlpQ2gsJ(b?MBidgjUv-8LbGC;gO>(vTT9{M0~) zY#Y{Z^$LjYpa_W5V_;2#Heki}mLvb4NhAO_75$p7l627lNb`Gjyp|B>@E{`LcY)X7 zg_9E$x^=6yV+?%qNT;XX<%OUtS@7n+wY$Vh*YOq~&gdQLWHjZ+Y;KLrq8f1^Wen65 zS&P0t`<+yk=I;dhV-=ctIlk~iC>%;WY_9G9 z48y+b?B8m7T~j#|cMu;Fo$z%z9RJ&B9uCN9F`QR-TjwE41(corWfQR#Jyd0)Qp~;T zO&-Za$)kG7_pzNmmTe)1{g30u?eC^dhohE>7(gb5(4I)ikzVI~*9`vfVz2)v83!s? zyN{rym{S*4h3nP4jCBX2M_d=0@{7(-_W3CVyX7`sYn&GF0p=i>tIug2t7ey8!K?8WiyC)V|Azkyg&OYf zdyCS;sK6rP@ZkI}X^_lIS}(cidfVhIIubmWxi1*eQ;b5Z{RC)iw7vn**yz~5a zSEm*)b7)-J_GoQ7_09}03%aK8!6*Us#R8(t59+&3acwzGVPo8@48yWm}6n}*a=jh^PzX+k$GECY(Ry=cA^X5iDTCOaD_Tj%Q#^~DG7#hy^GTXex`JBNkDs1 z@=1o20Z7P~Ddmz%sdCQFp)7i3A$ka8!{_?`{%mJ=(dq8)&ZgVjI;&`or}K*agS`c% zyfZt*9GN+BcnF!_PUZ5dP3qg(E{e-H7IP(f))c9So0nxF9#~tmC%n>OSN;4is$p3d z5q*ZtW4y-jsk17M`f}HA_`a}nAN%6Z@_U0C6>=n+Z1nm$f+ZWnF75<``}HKbYVK48 z2i-#UrI=j&ID)BDZtupfI%{g$Mk#*|4Wa3m zVF$9xmK*G-mY^Vh4+=RvC)*wj_)DP>kg8t*B=ub414N2>1D*50#b((Vh%(QR5`F(T zqrJOme~*Dud#o^hmqMXZ1y8E_5nsIZhRg7kL|RlN zBYxBkEj=fv>l+6IsBPcGzgFY&*Hu-1Uy&V07^YteOK~)dx_Km1KGDvMJT+o-Ee$z$ zR^_}HVdVLwR&G`hiGsO$sESe?SY*4l-xa3}G0uyMD>v@D*{jX>ceKC(+1eHzl2-cw zXuca4Mp)&*4MnBM*bv6mS1s0KW9^WbAY1AmFtjb1gi*wn8A8l~Spe@0iHHcFHq!!> zjwdsyBMKtKGDPhOm{}`Ddq{!!5vcZ`*fHGSvSG*U*>-RL&}A-RDz-H73jO5mvh= zDM}Pb3EgtGW%~wFZYW0SZJG!&S>Kv&>U~TNeM%B`RQ;Gm@2K{42$*xd*?SmxqEzVs z*pE{@WIlX$vgWiTEk;8HKsvZKHRhN^Z+0C;<>WuOJCljknLn9s&1OKj9{UzpCA!&1 zN}!O2Fdv%#dgvT~!8v|`p6~A=9a3Sb$EsSUGInjy@Xgb*v@|O9JUo`4iwXs0;A+CI zDjv?Oba5qDU)H2^W3IX=0!yYnVQ-&B zO|_9ISE|jU`iTtP3m-dypqVs#>aAoIw}O->vz#%2wEL*_rBoR;hKG%LDXNU{@O6tS z3wj!~jyo!O$9Yx?LdpGgp^KceV~wRMWhSc96-EW!hR|)Rz#vRQJEn?eRicm=PZ)vmsKGJ>{bJ4oUkc}ZGxZ7L*l@U1yv4P2n=iV4 zB;{jkGxTJA*F@88+78g_bwO%$bIo|5=;fLzmft;LKk1 zTlYOvtD7?N5x*z1^3)^2sr|qcZ3eg(xEtrL$$End|Os@m*yjijSaS-!+Au%HVacV+R zKpJ>5)H<}UNH*yvv{5fo(4kwm#=^((1fOAh`TGn87>l>`#LkXy4tqCGjo4rgzD^?s zatLC&`{}oEI1LhI(pP{eOsx~diwqH+2r}+cvW>vZ0ToitgG&stl3+*+WW7Pv7{&feFwoxa?{Wyk^}X&y9W@k zu^vz)y$NuXcKa`Qml!np*?BKr0|jSVO?Ob-!9X)Q{u6kqh6wbXsm1-(^EbR6SzpJS zSltrHWLNBPo0-`y6nT^P?VOwx{vziCQF{OgGbu*1oj`(ve)2y}p6$7h{U5Sye~&#s zN1HD&eS|G4`3FbotRG$#Kda&D9DcDYj=T)9GoU|Q9zI{qeUcFaDZaz!MLNls6$zsD1#AO}Y z6;s8-zkk0yymN_t86jbq{EW1C zg#oJk?V&t}`8g#G1%*$yWjv?iL8yDUVHN#26($im@#7;!NC~+}G;b@E@g&MZxb5!e z9X~f}QU`<1u-s6>)X@bUDhlvy2RZ=mG5?k2`36GBAxBLq3%(z{=c+s#fh#uZ zqRA0f0+J`M_&8*o=kaS_fzQSatWAs~QeV}0H$;rq!S4z-T3O`r~ zD&uc~w2I;JxWG0r*f4u#A(uGb39NmHj8)6kG1f19Ahv-g^CfIGh9=W;!*QAW@0OiE zm{waZw7@fyZ)r~I^b~Ln7FCldQ}brG05T6Jlb2rm6rJe9cHi~s{l1TAkHe?FBQDSW z^Uv+=n7S$W~6d33n22OxujaSco(5Xgl;FA zu^6;YkQCcQpRscL5u(|W`k<9X(+S3WN01U z+LItpRr%{N2)(ykKu9@mn6)is1?=JLbvt*oO@KN1VjOVtYrI<`Lv8q@bS9wdddj;r zpo`-vM*R^{T*c1Ncsbf)S5N?* z!qRc@Ugg2nyH~$_nah35pUxXL$)sa@5 z^z>u@ZsmVdlm1o{bw5-*i0k(2;yi?c4b)6^<=4SU(NB){@~V&}$w8DwvqGi^DHYGL zBWh8A{ZRQa1@@bSu$3cn$D+o*_2}4nwzK~u2dlfsU+HydFAzvs=+1O~yg(Qm$z6hk ziliKfw)z%uOSHS4BWJl?!eRSj#ERh|iLVM>J(l1%lMm9gme4iT+zL%%+P)d;7JP=S zkj9KlN0tXcAOufw@Zyf7URM$q2|_vYu`~5Hz#(I0SeQ&82idN7-{j-WL9Sq?{TpRT7tG1%2woq6SrnEY;X)X;vDNqp_xhZ_BLLSl7KhmYJ8O)+s|X zvAJUI*^CAs$=Tpy_|15^qcH;IEi zP+Q`!_Vl+obuJngG0BD^QpH#3?(b#gw-GOh-S4dfmC|t6YkfLV?5Zh>;}I_DnU06Z zRX-i6#r#Jre?gw|oiYO7(s<9yBfC~H+~_cV&azS{4C}Yhr~G(49WLdxn{~z>$M~l; z_;luxf~I^cuUX!2DFQXZDL1_Q)*D9@>Vf|A%^A+-@94lz50PW&l(lC$m>G4QDX(gO z<>Mt{1uflA83*s8moqge8l&6(vvCOW0!2f6r5}-p=192!{fs2hDxCHb5KOuXzbExC zcb=f>=oq}vw_!#e&+nlsU+(5%cW>8`OB>B*i-o=_i1wiUX`HdHG1(Til|?%3mr!fC zs=KSznOi;phqdqAZQy@l8IA~R(bntKKG>fx_Ct?8EZ~>LGe1KblV%qtEP-r^KOWi0PaR^z)Hr?4r z@64$g+c7A=N)On4;Uzu;R8Vn|i5^ybd>Y3u{>GqZPGpjB`X_*!0H^UBCX_Xu(^35{;!wBBI9|{)sLYZH8q}YzUS<0)V_VzYacK6&7R0) zQ8crL-r$HmZL8kB|QtZ6YOOmv= zd+^lptzrMlB?S@%*$ZT6Pt2(XIx&1`Hqw$-I=q6GOy+g;n8v|5bvg1?1Xi0+) ztO%F!KOy<|8lNBX-nY;b(*s~MO5M}*BOINWRh>cJeEf3(M%q> zx5%aBC9+eL)wzUBu|)N->#q^RdPxYCXDXuLzEz7B(W%PRb=8l4yt2TX{D88ddT{=c zh2o12(?zNPpv%Pa!Z=Y%#3^=zX^264Z{dv9XDH510M35p8l3gi$%(UQw{~|UV6Sn0 zg(U0;T^SDK^h96fob zPd^r4K5foxlfA;pP)ulsn~#%fGXd zecH6rxc`1>nD|-D+TmiKqA(JP-{4qH7L6_;CTLU05gVjf8o@dkAkooQI$@kse7#od z%cB8Zir!s_e{xMGgt?RX5Gi)l^8;5TJPQ+$OOU~>EC{9Yi)10e4=6R{8S5Hr}r|o4Yvax?Y#rP zb?-bm7vRy=hX!gX=c4M?&Q74Q^Yimt=r^#}{?}mNe_c1+iEg;p^SnR1@j~X3oKCWd zhM1>{;#Ek2g1bmORKwt?yGo9xVLj$5gsgJ)|3~vJUlW4;{?n5TEOTCyo3}r?#h9D#6OXbI1{ygrm5Ra z&aR&IHEvx+B_>dED(CpKNUM8D;jNG-iJBc(=c-K|`H? z5s?^db^IkH9ZtFh4$YAXH$yOVc#D$Nxcc3UFE5G|4XHqGe@}6NPth}O6w))Ft#8t; zo80-Rv(+sdT(glJu-Z*rnl*6U`J4RKImP*9F0fqCf=rH3U_K9Iu)ev!8~ZdcFDU!T zKdRSc?);wWq<~NrJ2_wcnwek5y&}4t2^a3K>O>C5y=S#O|l#mv{aW@;{ zWib##=Fi$4Ywrkwnq`qOqD)jX_dByRJL2zA=AGN1#osDbg=RD5 zBuW>cI3J;kySvmdrpO1{GoxFt>BTw72iX#}F@@8op5#z0d_`Y}xQpy?mW&E5YP^FT z4Y7s3BX=bm)!IBK0(^Sxz64zdYU+M&m034`SFH8jRjxwH{LFK<1zBL0N@QA6tSCFH zyKycWk3&^%DQE}`+MIpy)=No3XkLBvN>WAZDn}!vAE)YPDPy?}iZ)e0x%%>_n|!v) zZbcgmG{qeOqxB}@S6C3uBBoq!hdzu<>Z z1J*866j}8+yh4zHpcx`Kg4Xx;-Bn$g8IKCM;%B6uml{z*=W}naD+BIsrO1cNGLPHT zUO)i1w>cbr^B#Z6yvLv6m+#0&d_e!=9}68ze?X)&f>izTCfG$qG>L$gpKJ9Qfr|f; z4c3v}khAE->WQ4Y+D4jCZt0o6%GD^(G?;8nGUbMNWLcW>SHiMet>Zb9C`-a&u`y#@jV*r4R$K=)?fpMl(Iw`omlm=j zE(jEOsmbFqU0P3VcL;RUKIqMMO?g<%4{i*U(RBxZt25b1r9)mprgVa-dUPk)Errgt z=-~(+X*LS)nthdib;QF-&z}7Xd-l~%yGd?eW=gGXQ0SnHjBi!|(`oAs7Hn9cCoK}aUL954z$B`}jHX;{ zoMOlC;?X7qiT1=+qIl^mr7MOVisC`AMyc(n@`lrd_JhNIRP`YB#si~3J9{jCZ}(I3 zr7r+6vdP`Sp2~p@Q)YE2t{$IsOs?76E3tA# zKa&?#c%%wuCF}P@wX#t5t7)uEf0Tq&3b6zE#->b_hQJ^AAx}OrQKcNrJ%^16Jk3Qn zhAU`D0FsvRj{avf`Up}Mj4P2v5l%jicdFbX1JhgE%Jd5WAn6P}yPf|$H$3nvI@2>5 zzXJRxgJt3*-?I2es-o~+=(()TRp=L`i5iP0UW>3* zLNzL`v4#?gjunw|)N~)~I4IQcTHEAMrpP9``>C!>QvCH5pV&0!RgDAMC(n-+#9n@c z`h!V1GZBE{OwxXt!Nxx={y(77@s4Jex5k4<-lv~LD$_2G$tFlrN84QX&>5~Q^kH`a=BM~HrN{n+fk44PvMt;7oPmhEC2Pi9MH@P;Y?w42Lh)mM+vSi5WuMg{6 z#tZVqwGUJ*W+;4-*QN@wQn|7P*?w^TBa7YOgJdlD<93?T*%(j;=VP(pKxA8|E&xhw zx~-N-scW8V7@JeOZYHBWJ*9 zfn+xO@JIxI1`wOHK)(-D6%wTzOWAIHP6=Ql<=RE8RSN@X^$6E(a*)|rah<&8bX)nL zy9QNA2=leLCnJ?Zdw;_nSb4J8?jIabL2++;{Ra>H^2{?ngm)g;uvXPXuE&C2XpF>u zZ#5H!JHx3eY1>eEPa7LTG#zx1`^65nj^JyYN`Z7|Wlvw!Kb8BLtbCyjH*_@O*123n z3{|f!Ymxg<{+d<7GGQ0X5l|WvUHAM|2{(u|>cJ(KxdsJk@#u>|wYILGhc&J_py=ju z&vV!1mpq-~;8%-#+Shc;OowXCTCG<$x0St`Nxm^84QZWqmcn{|6`!92<9UnwW=yjgFyb9uFCIq4M#gOr5Nu(P^@XPR`94|9I z?f0|bruRe8RjqHU>s#8l()^=L#8{!+t2`nByX>P5-ve5ccy34KIGp=dttV5q*2&e%Vc;4mcPPzCCI zXESu(wkP0Un0fo6IY&R%=m1|)JV}ceGUTi;if}g+MmRrlh0zR!OULu;Ldar&s|Amy zNbDO$kl(L+Z^Ie1#zkyG@uX?};*y6cJ~7olfr5W<{^7ms$s}HmYso!!4~+(y~6$ z3FUR7-S?xhri!@J*F#qm05VjkQ;cDbENJ8MaDb`LY(k`n3h zD!JQ=J~zd-qQ3Fy>^$Gj(iN@;N3qvYCtIt)7H^`jI;Y2s7M6liX?H5I6)525QQORm z-Tj1C=(|g&|011!p|bovqN_htRjb_AdtZ#q$!wKj2es`x13eOw4Mkt_g=Qp_rVL(S zQd{k-O!1MU>F?c;yOdyVTY}0=nEM%PucgQ>TP;hpVk3%@A$qOOlXA(b|D*m17g^L@ zmM-bZfKqPn9-!v#TL@(5_F3DMrVwh7*3PVw)bfnX^pFsE?}^}wx8WB5K)v1soqpHK zAC>$1QB%m-;7CLSA;(&?^G-YvQX?OasoBtCX(wYyy|SwBMdOOqnLYgH-J)QH9yaPq=@(xe&<`aG{pi1ZJA zt=0ps)M~$Vk_t}swtx`v_IK_dbamId`6!94?xrbX`ga9(aoT*0**Uq_+a9GnA+Z2@ z+<@f>;c#e)JWoA#L4y$WzPiTK?tX+|Cjc-sz?buXv%TGZTA^c=X_QnAq_zgqY{*Xl z7+jZ8UvcGnofkJ4E2EE7I+7&$CxhvFQQN(@`sTtD(E=UPekOZ>Jknkz!+n0)zaqo` zoq1BnFs=95DEsX=!QvTrxRPlFJ?r{10Rtz?CpuvlJ8_cJ1;}%Lfnm~N5?cIZD z;?zr}BGzvk<6FSjC!R<}Jhz8-+nfwDaJ1Dr_pA+3-$wOXAAkWsN|a!@h&VHs9%c(i zY5B)iq?`oQIauy{Us+O?2=z=29NzFalC5AnCUrf9=D(XGbopGdh{{oqxFMpDiXKRe zha|Sj>`Ze#n$7s09 zgt$faiV6uNyuoh1$8f{Y6}^C&L#8RY&#r`#wes~wvV#fpwaO%I4k{3Z9rDJ-_l~Fh z>ljFPr}u0+na4>&j0UIjPze?dH~pO82I@|V-QM}wKbCj>?^oU=7W)=;sedW_6Erf8 zS@@`kA*zJdVUviUU?^;WNgAXjmg5vTnGRSQ9w4d3fu-`GOa!si3`?Z@hhqjD-)tvtFDBsIYB!E~$OKK&Xz#fHG0eNQsrid;7Ghx? z&EQ*$)u_}#`_`%RZ*8vc?M-K*D1~Pe6~T*VXlO3@U~MZ+$!N;n($5w)E0_2NDmkW~ zHXy2{{ski@qKbc||1ZA4MAv6}o!TFY4}fDS3Ya!nHpYsZj@!U$i8cCnp9>c}`%HT{ zV^Y*F2a*dSuw(WJs4y?*FNTVSEviLR43oF|)Fk;;68S1)!(_aMuFrbLQG4`)cbV%5 z>C9i7_qzqv(a7j+`pKT^2#PDB)uwgp=GJz4HhU`*cAdviz{nJ?nAe-C?WfD6EBLG9SPL`K#Cgpif?gqbU9g zlIKOTlx2HR(K-L0gSyAV__@!3bN>`sbbi51X$g)x2rq=rkOd_76;>AgUBpQtRF`$4Q@_@yy0d@RAmtkV16mr$Y0#OE;cWsjO zcKIk<+XLQ&!4QMi9be70u~fbsoqB=loXNCFrVgKy$)HaY>Zk|sZ(D7<&+Y)QkHUL1 zhX8&pbJG?w6#x#LR`aTP-<=?)Y4slrfp6mnUi6 zh3WnxO!w!+ci*$}r&j)l_=ZJviz5-CJ;{K-;!0FiQ2ydqcu`>zgvqOmH{#cbKLt_4kBb0(NL}0xTBxdy!Y9>!uuDs>`3>=YwIFVA zQr^HXVT{Y~=P8g$N`it-;dHgJkZ=WADXWPkPW_2$glLV(LOLP>^dePa^)eS;K|*UM zWv<+pq`L5wP`?Wj4R3Y3w~kBDz~gXd5@*;<-qXr0mMISU`iBGcMR4)iygH?LFm-y- z2`~pfa7L9;85#isFt$6NyT)k6S`>d%tl`G-GN98zE<})q{&B35w>SHVd6Z+oyDmxK zz#Zat6qHEjsnh=LK0ZJo`jM^F!GrhXkGWMU__{L7@pz-AvRO3#1#j7Vc6VQJ8d_>L zgr~EY^3dT8_H+Q=|Oe8+gmYtd-KKaZm~JH3%TzZ#oU@^csh zEh&r0YSjnq&SQUgCYWII=EXz>_zgQ2$2L5apUNka1r6+Z%WTX2EO(1Wan2gMp#M56?f3&Fsc}HVeqD z?gTQsLzX0$iUs$&c%t2U_UW@TP=ET-VpDJt%DGLFdV(dJpj+Lu3%r^3=TK>Yv4qC> zT;hWoGA9B_k?b8_mUcO8H1IuW4=l%+v}bD)MBxyh4J+Z^45iYCfU(3aKvD0TH3SCh z*{8$7cEd!t{&hO}r)|`uvq&J$xp!C-HdN7EyiEd3%se=x5rmRf(kt{Nq@e%y2kC`S(WXp7 z9%eeb?akXKCyv=G2R#skQWf(9?VaHOdQPA<=w#Qy-88kfdz0r|lE&6&bf5Q; z=exLi{u;E)FgcT7^e)Z?+dRohrc&}-Z!pwwokDm1z6~{LW(O|b+?bQjK5Rfi`@z2CT)|go(_TglwOeo3$4ClvmVgxh zObSSgz!G@upDKDLiX0%WY749*G8S3_4bg~?ayON5Q^0)i+?K!;W7KLIa(5ki6pB@COj;8+R3HOrT-0zK4`k7FY)F`ew}+%GNP{OYU4@S$ z)E~Ee3z!@O*P{RBiGB4PO2e&)Q9d+EsbgEAU;XjJhsyL{tU)UtS&E zA4Ok&4CIbe5H`qTE-!!h-xHpI-v>>}K!3-*K2E_vV->0oS#KIP{b80n4j(4y>CTA{ zqu9qO2-~`fA+QK)5+&+8cDMV4A`C2paoXxyZpcvDnRbGtH%Jx+z%bMM%Cf$O7@7q_84=pI)q!IgA^aC8 zTDm@s94J2q62)_$@|*=)+Gr8Wn8YWPW*cZ0w-Y8YnxL@+L#IWbcTCbyAeiiPr@ywk zm4!Pk_%wCJ%jYx*R^7Tyj{qKMHvT(o!uAffBTl>8BqoI}!~w8P7pV3Bst`6=6S~Wb zIS|23Sx*eE+A#}a_$etgHiDTI!_WQUJ5$M&*MzUdJSBo6Fvb=p56U6Ebt|h1R|m?_ z1XS*lsl-w(?5l!RkrBR6oUkJ|{Yx?<&#DXkN*3r_mlo*S|E#V?13z#ILbi~P+ZVcD zl{u%0BSTwpVVy72yxe6aH^M=Q|EUwR&|M``4J+vccUc;^sGN@nPEbIP!iZ~+qp)5$ z=JNN?7Ke_4BbNb*3hoeQ!(3j&7lOaB-%dB4VdwcbzomE&7C<^JCz!k>$=o|W5}ZpB zC-9q^9`MCw4X~R*G-I5k$dz?+8L`G!1-u4+FhE_1MdN?O&cvT2`+8+~oo0ZEWr%a< zX>{v=BNNZbidTn{3W=>l5Y@r4VYZY6lK9+o5%{R3e2#-0@(+&n6Y*u4$s^N z!fcgGM?(%Q{+@xgl0fRr?TLi#-nyL?RVGI z1j(^!g<9MA!#;43$yh$}YTP&Guyji>gmB8i`+(2MCfGC#td6!f+0(DVoEdxEJCs%> z)hE$9d-G8i#|+)h0pK2%(&mAFe^z|XY7Ztbq&q8@;?4i8T7(d~Dtf*_#5samPuCwv zP;7vn&gxafIgRXdMo*#=77ehZ9MP}W(qC}~uReFTMvI4bUQ(2Nh+4ErQ7nGrOT<_4 zirl)-5Iu;7$jg_xlHz)>UeOjGiuA?NGhCo`k;wxN9OZh0|0oIm7=HM1>sf{v?qY@I z&44;Q%`DO2_0!F9_jrr(JdC`izE!NHmUwe>kDO_Emub!_tBm^Ayc4dnzCgPv6udc zYl2B;zC8a3BIe#2Qu1hYyD>{Vj{-BYbtP+&m>??BvA}Tv$Vajv&*SfL`xfUX^0jR6gXvI2XCz zPtp%wQuS*pQViA z0QNWusnQYtP9K7yiI7G!9V2Dy_^6-T=xSxJx}Sm)?X~0M5RzNc?VO#t%bCg*DHZ7A znTeT$zA$C{2KQ1ui_zG5^-`_Fhl0iwRBm4Om~~%L`Qhc4ZEvIC7C|Pg7#DUb1^nEW zra1((lOjwW0q1M4ZwEA2`#`xr|BO>V*8LbWTo#1PHkoAeC?bp9uMQtD*>SKH3KZ(P zQ-OsN?a5)Y)H9h}4 z!!!nCwcD3paHvD4pK?0vw7Shys4^njSRkKa{{Td^JssZj9lIA7T_xrDeuCfi;l{cu z7el9KI`C9!ot|kWK*!Af%dDW+ti0JIl>Z{pVv(NO*5go}dzG9-kNKmB&gFwbgF-Dd zKp|pBiclQdDI{TX-@)WK93sLyjn+3N4)+S~^^^SL5SsGhcM0_PH}Z0s z+L-Bbssg|V>DLQbcQ>nvQD0QWAER+ii0E{0WFHeWier%0k~|TwFRFwcc(+$<>JX%f zZAY4@ci=Tlx7StncJnqqQi&DxhfvkSZ8weq@Sc-9dD5WIRZwLdI}?*P)>aLFP6xcH z5GKRY(zdOeM7a6Y*v;?7M94CjtGhYsSemZ%l5)?458pEH2WS?}tl2OzB*VX4`Yb0V zKi<{{{rM|jCX4(-(bdt2m6XMtmQ75BSXIoz3zviQLh+<_^Ma_`r4S~q6Y9I{aY8R` zHS*O!`KC~JRabDLIG z(AK$%e=r;`4vcU;u+q2JIWi-KHOD&~VjQrhD1;e}OvVdTm(J7&zZ}n0KdvfooNQsm zBqZn-^NziA^24r}t5hkbIRNBTEt6#Nbh@d!Ak;-Ix8Z>eGR9Bt*{+jM_lqv#=2AXfA z@hrDa=8nFO^I)c7vCU2%#-s?v_6mu*tj^#$BvAnrq#KB$g1z@1g7F)FWY`p_tV*tHz(RlQX-I0tO_jGeRB`BC= zG;}o772v{5J4sGR*4kS1r09)w=xiCj<~0~OZ|K3(+oC|)`~A22e*fyqHgxD&-6(G{A^7W8{>#E&C3q`oqeg@a?-VjRh(gCw zuNuza)rBoIeU^B><`!c|!ZmoIa@uv-6V_VtjErO|nC_JdCd^Zq5A)3P(q-=O+ATQ8 zi4D`18>HJI_jmE-Z)X(q?fT|Z8Uz<_*;woc(dkkVphq)Z=!nW0IHRXOXXekSm=fO-tQxcKz7m(mbYkkE_?-%;`k}}6E=c7-gqkO{-(ePLFz_tFV5k1|~ zKmd7Fp;T-`(E|O5zngdh&rmSM*TeuNJJrVu?pgFms9S#Z(tb@NKhh%z|A#iWcgbkr z6b>8Bxt@Ho)4cz@PV8ySH#!TtihXUVN}9_ece)GdgYAr`h@y`+*xysw{KkDZ+uLtx zdso-i>imh?0d71vkdSr=nZV9`gtRksQl6~-IWvL+=DsEPGdh$x5Ux>%U5vLEax5{5 zU9R5Si_-y2dq66`iQ7P*@C$-<2SggY4Z{T3YyZ~vTa5l!-n-d(qBD?F1YNezz53vY z^*ksegl^*)#W&GPH}*S*8`FEIC++sx`C{)DF^B%%{@5?Tb~2}ZVT#c6HpjkKkHfdB zYW-6yKOSi>VpJ#-gTS#T^R)D%XkW%4^b6gqix{!1Qk*{0JjH7Whr}Y}7R3^fFG+$Zh2r$3^e`&B+sUY|@=xBb3UT4)j?tAx|x`!A~}WSJ3_n3BEr z?TmcVqL8eA0+ET1nNIJiXFSz<;{5c~3hSf({oLI!Ns7ga6ErOgnLF!-!5Y_q4cGdr z-ta45Bw2?7?{BPsd8~$oq3+e*ekvS19Ns!A1yyl<45`2-I$gtpz4`nuitDkI#4?8f z!YB`g^N9E4r0`n5wnaxrz&1J;;l~K<@YP;9$4;jdsD?x?%Lh<#z`LN!P7{8edlRSia}h=3-$R=Y&2D zilc!uXV%@b+x>=O4wTZ>r1Ef$5vMF^R-j+0uE7AINcRp&rryCo9L_*4o$n{MA)O%< zWv{EZG4+si!vo>K%HqS-zrlvqDYdjf!r&n?!c7tU=i14HNZ@E~>M62~6g|YzZ7fk+38LtTS%}jyWpSI~4 z|A)6ax6ii~)MpHc&Q)poBxP^04>yi>_f3izsACNMf4a=pe3G~Mb>fLq+dMDA-h^*- z!K)#{hOnoR{lXa~d0jdby%0G=%#gI04LU!!E1@KNa_wD2s6C!2Au0y+Hz;a9?rQW( z9xgs?CH8|$9Ea=hi??Mhyw;T^WEFxe6XfAXuX-m=U~v;kW^B@(K(XXVbE10DA7Cs? zrKyV4x2r+7>lEqCp$~1G8*DDSy#VbdC_|WV!yr=tSB>tD`R_*?XuKJ5-nf+A_PciX zJT268W8qPc^Q9Mbodl|E;al!Z>HO9-8jG(nu}ZBo+)DBq1`WAtjpgu4p(PFhFy}+K z&}NU(M)q8jTALH44OZ8D9ZdNHvGg)lSSVp`@?jaeO#ldk&eLtD0mZQEBlFh!L#~gH z;)~56;zEAq!l)lXY+vgx1Vl{5`ba0G_O<^7j*0uQ?YrQo;Wm^?Ud8DRhr4RwcjOIz znZNK!_IQ4y8it=}^hGv0*EkXND#nJCw8tCy2e`g@rPWs-%_LCClKJ`x_-7O zjY4H$Qn|L6Czsv}FGW?jq{1GJGn)In+JDGRqFf%;p_R8j3A>4V%6%^XSb^eD6LF}~ zq^GUC-&MD{lg_GG1Eg6WQ{kIh-xPz006XoI6Yd2|L~&#nQP2bjtnjHwcNB;rkH(); z&^XU?WfxXFd>jN+8VppFau_{NJH%l5FJ2z%s$8i%l2|gXLL!L(Caupv7{ujX#-RXf zgTkc~U}3s(eAL6eboD96mcsJ1X_dW+nwZYNpRb|tNYYvk!>~3{jZfi@CNXe|+R{Vm zYYmR5T=He%mLRw_zRgAP-kA=ia6w#A0_c&t7b;PUwAvjda!jgWUn*Z*wxcn0-z2C* znDQ^I{B3$ATPmJcmH1wBd%vIe@#jmd5!tO`EH#7@5p}d-RfYY6{@kLaC5y5;VVuEAvZBK9gT%NsSV@EHYGCMt+f-Dhx`$(J!=Wi-YG zU4_vUL%b)E05*yEc6;|*(DO`k`%&zIVuSYT%OxF+h@I7As-(NBrYKH3L1sHj<@l4f zAw`;;an7FN0Z!u!=S-2?_vZy^h{Of74;|j=e0FcJ8$uRsphRw6nRVwvzR+y32^^%f zTy-*SBwIIO7=|UNuT*-dyg0KN>_ov}I~k;jbm(hM%-8z{Uh3CmqX>RjX*@hsoxo@* zvF*3t=R?hQGR0N{-r~up63<9ui%EtryjSA7h5|O6}&%z3)^`dZ3NWR2EmU+v-><&k5cE44c_2LGrC`TYG{X&4qLW81w~K=lY|iX zF38Iub$zyzGgs@hNMSnMd9^#6ZX{WO9*j`yb^ZPx6;0mp0m@K0wgjtg;Gd-A zs=ZCq^Jr)j)G#R_x@S|&YD)tId7T6sgh9h>@R-ieDj;Ps333S2=EBYv2UpezQD?=`?{ZIF4t8LaKj?5 zy<{5}G(&N%KA1yuG=Bjf%;1-AF!3)w=kL`AQ>$P}uQOhfAyynU>*PPN##O9+aTG$n z`}0ELLSGNpIaT3{T$KkJ1;ND#^Mp5|BAS0=J{X&FZQ&RO#j2|6etyDOGyzZf1cgfq zqkTipu9$3*o`jG|6ti9a2FxW1rb^LF7NwULb9Id^Rjxa;)#091<)@Ag5lEw%15hi+ zi3i5J+G{~ng7}RM?Xi58zT)(lm{f`g68>~TRLX>SvL#61w##~ivSg1hS`0`EOjq;nXLDwomU!nb?g;Rt3cB|bU&Uuism+)8Smw3v6 z81G)sW&C&Cs2EHRQYPoJZd@W9-BS!5=oUtrf;gyz1Y|KE*~izmUOTAjJ}<;t=9xKy z!zK^;x5cdcD^H3@-eK$}{ZZ7y5;Ca1WlBYRlE^wmSk9v&lE0tEd93c;bfW|FtxVK)GaD*d$H5o_c2sibO&qa_)Dge zKh$k~1yf_>0)`Uc$eTnoyj!okC2yLhhPX{!qS3@Y8klaz2snk&pu168hRF{IHrUi{ z`L2H;KAGT$-@5V#R{prX4A2XNShjW7GL?i3(bFkIL7OOn!XWvhCXY+qVwR@ns@k_% z@C%n!_w;qG>)@86D8WbLonG6LI-27o!$%W;G;da%goL|G=qo0qaZougfh?3~g`A}XNq;{tQoTW` zW$q|Ub;|3u!^DM8D_!Qo=Hl*icBIf2mfH>`xZIQ9!Dk4_ktj8t(WG~{{X}$6n4&d4 z^Nz-64cwAI2ZA4oZil8*4wPJ$y0h^Y1s3xT0qen#vaX|&xN094XCdWJc?bTHp``80 zIHcLtf+IXigHS6ZK`jRO9OI|63K!2aR#E(efN9V`ytlpcaCp%hL9?p@P?Oye)KX&ZSKRMP5X^n zWtBUvgP@h{DtrU2xYS<{*d|)vIQ4;4&AYc0yKp(sm%=+r)+4wz8>1h$C%I-Tk-&84 zjZ{(Rn)Nd}()X8%_r<6-Ai24FpR? zbw7*VJhySRuf$bf|Kz@GBo#nb#U}3g<>4oasBt>n-CW!Nkb%Cl*f;(4Mm`sJrSpNX zOt&|)@*p9M?}0THUx_`2mqq6RXTv665Fa1-=P@s6~|2d%ZgyO{6evkANNYwXUIY2#lDIgjP}zLozmd`3qcC1CBx z$lwyBjDnBFS!$64o287cq&m(^O>CI2*rX7*{DBcqE()J{q};6hk6@)}FfJ?)0~6yg zDlFD5RwqHJ`xpGgqg0#6F=??vgAylK^|gEtH!VKvd13s*_M`(0TcWNx4!?XQ$Tq2^ zL82jA?bFkNYRu>u?Q1W+2o~TdI5iqZ*<)+V3M?gwNx-~rXx$UOObn6w*DZ7Q5lnFu zjloOMHGwNcybO_&niSXcR*y?j8*|gOVV0pmrP7!KiT#$;2QV5{Pr-A|?E*h}rzBcd zrN#ObRZJ;HXtlrCKME_?hB0nFop>g%&BRqR`~~cMn89E(Hjzj?uX3O7;x2cINN?kY zE)B^)x~t~T)@@?-PGmzlukM7wQ+HVA{@}|1t`e*K-S{rP?n|*v^rSlL_HFPFcz7&S z>)hBcHQ~lt*k@G+Nu=k)_7P6}jdaTyg5Y=+hH`%Q@Y$lw&i+}^&`UN8d_YIwABK|r z{iQyOTNA^C$T+3eR$tw}OalLr-r;vLY=b3NmGw73vg$D7j;r!(bDK1c!T&~y;f#N&Z@>=%d9OiNVo8#mXLBsx6gaziDrmsgrp{Ie`2IyhFC&P zS*MT_U3(^Pi&;0?8%m{|u%zrO#W&ipzDscjEfe=eNj4aj2N|8<1>9BI=Z1N1`u3po z2lBZ@p0>*%f%fWKEPn~=xwW;n@f!Wzxf72=Osb-w_1VRXb~jXE0L3iym$k~$Bk^8tHQTFHC>AAmAeC)~{4c}A>7QIs#E!^d){P3~pns`xVGE#Axnh6q~y<+Jw zQ&eQGDmt^+PqsD+t!YIr@L$YsRbKtnpVZpXqSzMa4+qS#*B2d%v2wFdP&ANF7Lj>) z`FY5ty#|Z5`o}yUdZXLh5RkTKf((R1IO~h0m35gUBmU- zzos^k!DBk{P9~W$;o%oRoiwNn&-BOkR{M9{#4kSQ81$>LqE6t# zQ=Rh*GshuW8cfQ}arIIgC-RAB7qi(BUOHee|4Hd(Tc}OD)Iy4@>&c+mp#Vm6;j8zt~m6@LP~Qd#dt2tR`rR0R?T#XVR4z#)|79q{jzTgvlyL zk;AZ5X!^8eI5#0%Ebit{pT%rw+$d>1r8^;7I24pQo?JrT+2W%6IYo|H9+CDm+oW8g{cVNEnaGh^D%vLc)3Tlp;iF zH9Ct6hRBUxs=6kxDJ&;|%fGn5#f7b^UU~2c>Iuh0-7wNYgUU0pe5EvQQLCiFH%U_D zf<%~F?~7{lzWIP6h6Eb#hs*Qavw-m_&@r~6lUnaW{~Q=-p!=<~zV7xy{q@i5E#fUl zrdy}C{n9=^q5OF;;GYu6M?vAIWPRH0=bocD_7=M9sUyacpAyPbNjpzJ9SMKtS+8F2 zy}^4*Seyh~!Xr^v-t{4z#^0!g<2Z0Coic0(E+pUN)ih<29yAUH)md5QeF7A%a*n+o z{|*0}R|o8feu)-K$%aoxW$~~S-gpBRmn9BMIfpc3Q*l%=73V!XgBOXxl$!M+))UkS zVYz;8@|EB<_ci|`7*kf5$fC5T3sGxUpyU(rO*K3W&0zRdvwMDe<$$J21>9$?{0Gp4 zpDMn6A#+1(ItrtpI2y$=HMXfbTIHI;V+AQfSIF-6Nz zC0wMiAxl?gdev9uMfEL|V^#zAi5qUu2d<{eyws1oUH-Xj&rXQwAU5a~mM<{NWG9_s zW}^4s2@)Kv>KQe%+g#Mn(GB*)ur!rQ8wm0?gR-TH40g4>fEzR**ik$71+H7-l;2WR zgAsKuUSy3SSU5Rh!8<$BF%lL@YaXBAf1`b%-YN@s z%{bdqGqH+){uTcD8)kT%t=xr6z6_cCo|PXlsi#^xwDyB8H8WKRgbTt#vp7%>J-ZXx zXJ^6*{>?*qrN&t?gt~H95PVR%L&xloj}*pqf}KGjB`xXvo4u$k1;;A zW<1imv6}%;;ksr5L{_|U=ym33%#%6C6s}SMg=n_mDihC*ykIfMFm%g(&Yp=;+j8e| znN)Hd@~ogAV-*iFUzo1l{+u*gg1A+24}DJ~h9$wqBa4V}7eFLM>%J9V5DFX3Xd29H zLEj2SoX>80$ztIFx5r1V&NE(BHl8lt7H&GbUB+iczZw8Uu=ILNX45rUy|eS_EQ_H> zD@W|zKT?|&dzT#g7vi%YkT3l!r9$WNoN3Hc5YHxu9(7P1@TGyt?uexu1M&=i?#vp0 z3O6*#_R6?nvSPv5$Xv&$RVT=8%M0&4jJAmeTY6?!2FNw+Ss{!5h0ha|0`%r??iX3G zuOdtyxromDOj!_g4pP;-8=esJQv`nkV8h+$wZ|{f94HzC1fQDj1R+W_gaJEktd{jopf2-5)Qny1BQl{#J z02?@)h)HmpqPa9vhCYjFg3*xu5o zvbUE5-GTYfN@0M`mukkk&sivInV4mzZ@YgV_j2U!f?Hds3|WTVXbs3HW_nrVA)}|? z0s01G6Y!4tlRyEfygZbER`>G{n~kZFn4d1h2IfmP;ZtdTUYc*RZB|mY)fZ0c_Q{KK}{7IcEy z!dQO75ZI!uvce=DDP^cd)hzAn`Gczb3JbVAoiOg3NFfH3nwgQ9pPkCp4S&txJ?0 z(wjv2m`gG0Qf8&fY}i>_o$Ul8pa_c26Zc}TmyOG^Z9}BjngwA3TXrUT49k_?3cU?t zRUGoB#-LIs8K@YaD`*_;M>r_mG`7*s0bXNtAs|?y^Fb=rUvh#lFV{iAKD{`DoVM4l zcLvZUeQlR1mP|J9bsN%&{?&aSEruTqLFp}$h`7xNblNA!1*7l3&8qD5FT3d-43bg= z&OrADm){Jr#DSf*K3d3c-`e>0j^fJB{0+X#@kvP-bhKXisQ6U`nuT{+$l?g5H*aS4 z(rD$J{;RVNUW9aI^2N77^nYCD=pQxOk3}m=k9QQD3CR>tO z0pY|&Vb%Onm2JJEeyo1cgjhCzHXkq}H$Hg19U!*hBo@;#TXY+%I~vB@?RJlDL@i`s z2@NB=ILOQiP0oNs58R18iW>*UB>Cec_M$yU)9uyvVz2#`0TyI_+wB+F@m#-f1-8yyHZHohTQFXmJs=D0#Awz+ewcP z`v_$hH>wTP+jerEG4<H6uXddn}m4#}&zB=qs5mwKKmpoO&kIHt9V!OsUJXuO4;;-TT z+$$Sc%WvM@P5fZQ{4{e4%TO{Qt(ynyEnVc*x?eqrn#8aV&v&`bjsac1F80DP`k$9l z4Il}lkFGQPM&=iFAX9=vu5_%$Xmty)3U+{}r^sHsxW19$QP^1Zf(A@Qtz%1HB$cHG zuv1=(M=(1aA#NB|0bIci&HmoJ12$M@6q9tYggmp8o6+?=8!KsQJm_}mNp8UnIXGX;NFnuMqt<^oPf2rT? zcg7ggH;$kUOvJ-pM8~%z36ZKDkW3Qbv}OUzd>VnRufT<9v(xmXr>xl_V|4La8Ve)= z51l&c0$#Q5!O zA85W1;0{`EHW+<+v&l1c5n6aQqR5Al$B*zen~GwAo*{Sz_@#i6P`%?DPaAwb_8JQ<67Y_7hB zX|+DYr)*zY)4m?jx_NB62y+W#yTRW6WAVnOTE651zESVlckt&5Uxh{L?n3IKB(zHs z@#3ms9z+ZG=@6ZrMx#XEH0%+x>0+FhpP~ti9+b7@h=uCWf?>Wwd+Zo}S8Qf(6Rs+o zN<9{hSz+SKK}CZr+7=#O-sn-aXSrSR0mA3r8)JPZ;{s@6Pr@3+B1xp%=g<SW|^&6XQngg==~3UQI-6>TbnC78UxEoYZ-Yq*LUxsKIsmNzSbHpB8O7eN!?-3ZIXxLzH(BN*-8piL-=p zu(u5pERp-kQf51*>-cPhT>-8uF7FwluzI9?o9;nYxWekK_3ST*<)A#Edch)YLmrgg zu^s#2#?0t#?MXFf&U&kLbPzvl!!Fb`35aBA5SDC|A~lvrbs77J)S+mxT2S7YAoe*g zmnOdqS4kz&Yd#gHQngNs0aBObO<(u_5_T^@n(t{{*!#V|Z};18_uKdG>F$~Cp6Q^alZsCbFu zB~==Yl~`piCLk2bO^HM+mD+s1&;Q>&a~4RZ&zX7qegC)j_uRhE^~Xl0`pebAz$PKt z=p%(C<~Ax+=}+&FgkB7%%jEPk+)s+cgP=CiLf%8B0939D6pd5`sBwjPF>I>`lpAYw z)v6kdU%*2vyv@`df0Zt{Kfmy=>8ciRRruqf$SB%}@ZwPBMm z%@uFuyzoapZ9gK^P;dGF*ujPjh;eePCuBbnHyLvz4H49aEfC zHx-F7{5>%2S4kbnSF~4j4L57E2RZ!wpDZ+;L6+2l^{&TcQB8>^3_n907PbOEy0`El zBbcz*i{8YA)8znjqf(T~R6K30Nde+uF@*@s)=jL7VzWcYVLG>2yT#5I#PM`xV>|lG zOKV$>fM62SH&YMB2a}BsRv@`HhvXDFgH^nM_c{%`Qf7>%$HPP(CW99>Zxt|yraYCG z!YCLds?R1st_N>=T1f(oiABUlC}=q<4<>lLBy)wW1K#9}z8m}X&5@@E!>ePpMJ|Nb zdMhduby)dh7eLnyYYQLVO(G&NZ!%EiX8zDlA|H#_4$sc?o@daAn+iT*$9{H`_c$B^ zrEu{<2DXRPzE34ijgyuvs{nF}7_sc18%w?y-u{RDr?dLvorT>JQSU-uFv_%E%esUgTeEp^F*L^gkXWnG?^6C(Wp*7K*HZ zpjBcYW1XSmSYg?;1GS0=QKBht!BMW<-+eE2=nEOi%xsTtxKjXxcZMhZl$3`-jTp#d zqy){`4p;k@4LSfgHTR@Woj0hvu_@}5GIE1SgbE$#JNl59YoWu!N`ZaF18spUfh(@h z7l*OodY`+~eXh%m!_1m+k2S+cX3NE=+xmZg#=d%6bnWem?EN8=C#$ZqWti|92Ez~M z7mRwtSy$=uN|_~#mfS=+2$eExbgMU_#qdut8qNw(i><$MVxnCWu6fwGEcY+5z`w4aI`z?8q1owYx<97oMZIKMH{g2S0N znZR^RKQ9)nOhBakUbS?c{)fsPb~YwSu?eEEhuD-SGo{5SFxria(x-m~!Mkt8U;T9( z*(SaViCxEpM&y}ajNxV}R7ijOjysrvf^*W!h|xOVfhY3VxCvAc?5pzf=qj2x1{l_j zAXt=4NF$niNy5!U)F3x-tNK)e*1uZRDLha_*W~6+~h98aC8W^*(m$m>Lm)Z zY<|m^F_rC6o7g2xRG!2|!(d7LJEFNvSVF|(30`g{UYrFoP;gtiOY0Cv?0hHS+ zMRM7v7uT(S`PO0EgmGLHZ{j?f7el_9+Hn^-2L`GR_y(IKXrV?&W0w3SMqsRda}ZRb zW~=>2mM>wvVNbhymRA6+FVYX~%>+jH!1@6!wjH_RKp>Q)gLO6blCy#!c8I;P9Mw=E zK%J+-VFv9{gHTuu+HSV<=v~_b7n&IgCJx}Bu2Brp%D9wz3=R`k_5rjYeYY$SvqF2} zT7l;k#h0Afgk+XY=E^wCZwRBZ`gSzsFm14tDIyUBVKRHC2T_lA?vsKpAgBSE9*QcY zLw!JrvHCV3Ex#x6wmSmK<~1!2zTV@@{W(+|rLR$zrFCvL7@;C%XFOs;1uk-E*k^A^ z|H*+^$xpzD^XfzTriJfjU4JsxHO49+E$rckE3mD?2Yu?@(nI*G$%Ro_!v^f7DzZ^h z0cnoCJQ{jr8LJ@)!=zf|wAn4H*r!p4Th3@I21-S>JXhr((TSUwtl%glbM{_!7bK4O^>?IQuRNn0Z8~kwN2Q;#x6VP z5t~HG$Y-QJEQ}Omlc8OhF%}C_vi1z7k3hrd3IK1C3LYHeqijTn)lL%Nifzw zwDab{IM!CzhPYf##?<>BF#D$pbbI=27)5sJ(&6yr=Ae@)zgi=*RY-VwusRdP$H;Cl@fQpnKF)K2;-Qq|*iS|Ws{Lo;sD4^p@ zOL!R|rfv8ZVKT0alPdJmXsgo^Rt^g{?CX-xWg#vVVI7bjAhU@jD?v{N&|+(EBbI?n9O4TzVnT;4lhy7zQZ&-X#38cH1l_7 zfrfoUD09=KaLu$}Zfl-qcmAchls%DwfVypezRpJhp(`MY+57zu#8++XU&4pJ?e)u?R`|rYsNG^wvjw`IN ziS(tGM2(9bqbpg-#!hZWTh+__TUNBuk)>xFBkK4lPAn3x&NW6kC#_yr*RoZn0}9Ad z(YVe-6owo=>iDghQlAvvlSYMy;h&2{=Mf4dT%0rk=iJC4yr8S2>c)BSdVU|~5#v;o zvK)IZ8j<2RmX#grbxv-MM$4RL3l8$*O^!Qf*REl~ z6|)K1cZ1)Rlc@Mr%}4W9I?A3I_*X0kOLkV*)zlggk7vz})g_!Aj)Yp))@CUj={&^^ z^kGJwi^jlgwBumu+iBiXqy80q3cpn8R{U^n-X2~-lwJoc&YkeN%XdE(Jtd^rGp~U6 z;o~pjc&9nRFlXn zTSd1jX`?(c-bZb_s)z38mcV#d{h!L&)$Q81^XC`-7xQ+{Rr!6hPQ$-xrpZq%{Nlp@ z^USl3%?%%BGJ5#03Gjs3%C@JUrWiRIH3r;IaV^g9PT_~daQp}oMmTCu&(hC%eR7)5 z66|pmE)kiDd#>=kHRBEQCorD-#{p@=MOd;zJMOc6QA}EYMY)GtpFDLt&)ybFbO zmu^{w@n_kLH_O5q${GtK?gkZSaUB6Cn;|p)_Nnx~oUK zIZPv`2w%z#;vVA>rWeCQ0sIML?AYBE5t0V;3Ps3L#ocoK*c1Lis z&|s2!j1s629n2&hRtv8ms#?M_%c zgjfmmD*li(x%V>bZQZ>3WQ5_$$K#esL& zaBX!0Mk)E>u#I|41_febfic%2a=Q?^5l)z1;%`G=oM+?FP2{uV3>hZH5*d0s-aLX& zrl|udfpzK4HPS=7dsLR>1xuE|mnDef$?0M-Hof#L*%f-+y{7&?vysI+GE@4dJwg6w zJU-P0^!ruaT%y_ygvLruloO{s?^=hI!Ukszi-vnE*odE_B8$N_O=G6Y$qgNO+6KoT zc3$Jc;L1|IxV3@APhF{WvQN~%hnaItH^^-wC@%K=g(Y&r`gw{2$9u&COI=x#N%dgS z_e~>z6u&FI;hOJF$}3(gqbE{@z+I4;?IPn8O($|M)r!XU0gP9X!0GH&;+^Cg~oVj8>U%_v2=J>T#FwTP8Y<&!1_OMILS~43zC32 zm5z2X#YT9ZY?yrL5S{6=VOD^M@)#78kZupKnaDh7k>IGD)GYoaP5Y13=)We{^Z5(E52pQ7BJ+P$P3+IN`nRlmqXCN>!YfgQ#TTf5R&`#b zy@rXM<6$n=_9;%f^1+nhNMqv=T-z{Ig-Ll&`Bl_Xk|(d~s^O_Z3$E!!TY-JC>0JkG zY3(RPoWN6iN)U4t?RLY1@eNZWbq3V*yt_BwF*2tJTPzr(YqsgkRbu!559%*SXWKZ+kC~-=ptVc z1*Pf5If3tSZO_o_T))0%3fh8b{9If8||v!k@MW%a5Cf_4A$E zEgz$O_yz0wn<7iV0E1+Y&hxXVxMGb4y0$p>G(*hrS+QASK~!&;&e6sF*e1~7%;5zp z!hl#YZ%5aL9l?r3oxFR=c_+=eZQ;hnb|6A2Ylmj8r&{rnhvIxZzUA{{aWWUUxZ-#$ zD+d;Fis&>RVo6Vq#pb?PCaG+BfM*G+=4|4dhtDU^w+`pm^S_TMW)WnvFLKU>%;`mD zmy$~P5AB?CMW{Cu`7_4E(9amG|F!ln59(zID>?y%J1=e}H9mNEl2;b1{`cH2v~88a|Gl7zC6;H-aCX z?uT)GJcXWtV|VW|62Uu&cyz_a=mEXM5_7bwT5rH0q?=k5jTMVdVWYoOSG54vd1F<}Gm?&c}8 zk7{qE-Z#;iF|Q>!q_;88$|O2$)@nwgSru+e0&XnTz9`~kylTHYQk}WxBt*UA z@L?KQp9=*ZCknUe3XMf_bg_Buo7WhX%WfVLSvPaf-14OC88j5>A-(5M;taIj#g*Ka zV3W}RdQnC~UXfyt(-uk_r5Z?|E5t_SyYN3q=kZBRS&dx2=-d|r+5o>i4S&Qh!$M+Z zuC}&w1=cbPk-L?qabV8Q(^4{4r_Oquia`gI!(fd{*Tnw5C-dy_*DDA71ihF{f>QzHavmta3vkf`iqes(`i4R9BD{~_TS4L|D5@9I&!TaA&{l8uQ&w;6r8N%Ve42S=i{o^uy>(}eU z_}%&DG2{6P`MC_`HAbBJ$k!$F`BpiIN~?^8f2oS+)~rj759uH|}*VGv|KEAQ}0+ux}ceb;Wt_m!sxyavx zrP228`kGXVU`mX8ceMQ8&t&H3?|8fChG#;T(ZZX}!us2_Z^IWXe7TyX-(&yaAG)MW zm4G+A*plO{md~ou{?-*i0_+0huwm$MsldH|wb<37P(E}~icP4a%6PREa9i8QxkHQz z!aDP~E*?9eTH`dsX+S`xFZXY->lg3r3BC<7zGXH`QMV2vt;r%oz!o3ecf`hU9u+;X z_uilP_wI(t z#fqY9#YMY!Z>L>mb94K}B{0nxb%zd#lAJveb0ak5LJ#A4Q7JBoxJe<{@#`i22yI8| zFcX(K+;-<~Z+wjM@f13v-DSLjD<*@7h?fzHF4136456om^3vQB_oz2n2cjsw*&Plu z_TkzH67-7359P1_k-X#Mh0o$Wq=xp7n5j|Hr~EK>Hh)|Gq6p&}fk`0o8Ex}PsPojD zsMCTA?}imx(uWVEiHh)!_CaXwC&F95CoJB$ut`8~G&FCxrdmOV0SWHvf^~s#idh@^t?!@krhR`gdPe|H>&j9Z8ho`{G`U6cnV zSR9G2Dw$%3B57^m9L{NkGE=deo#+d*RThOP`+P`kJEOwCt&{2Umy~{km${9P;8X5s z7_Fi$F52cwjvqnIl?-<^&lb}VK5hKb9G%k1Q}-)QbI)Sh`a+jnjKjiXS1Km_b*W<> zKV!GwlUCkjTWl@WeKA0UVaFXw>jxVO;BD(*!ccSW8}7JvZP3k(+V7k$pCC;<$jCf8 zvzcpa@%Iw#jt96nCP!3)LqgSl_dG31?o$yxJRHQ)AMfowh};5 z(!HM9edTk#xSq&f!scHd*Up>%Q)_Dn>I7^(d9>jRN%P?yTBkcaynbxh*v*^6?g^gp zh5W&s{qDOxw$jQ(x6OP}VHBMcZZ8EkJU&*5YwsF?ZMjV7h>gj)S)c@rvuS4z1BJPmkK%KTaojUL};3<_A;BcC0B7*F4#eg*Sspqh0LB66s zBr%&~h!)!0D8MSp-@8_NDPu4V4DYM4BjBD#F-wJIhtnI7o!za?oda!)c4szDU~S31fZUeW$)~e2ZK3uSv{&8Az79RQrM~+SyZ^t*L)}xU zT$Z5J_H*B>zDRvnqH=Ovg-9j8mkne@Ch9#4s00;=03-il%Adb`uh)e zOjroq$%eWJJyemJ7{Gx+&L~S#x}BGeY^#(CII2skdv>SWeRzL5TVur4L6~}E9$yM= zlPFRArS6Bfw4%KgCw#628LXPZ;mvH4YqbUgbq?6%@j2aj{$e5_i@mSLiS?m`JWf_2 z(Nhasp+stz%c8@A?~%D~Bl~*F>vOWkHqN1=*CI;I7epZOYN=eTaJ+H)AP{-y%GV z$t|G+VTZ!fwrlGEI!pyCsT~gI8RCf#s#=;3THUtki5BDauZ=|nk&^3BQ0*S8Yjcfu zp(=ek9ItXs*+}0kbLffBME(#&!{&UggSK|>V&Ti0T`pstkYIy7X<43`E1Xg##X&x; z6rUmxE762-suV>5RLCbhTH-H!(!gLZ!rVzl#bSnz-YD8RvK5e11k6txm<-*2b>e;d z>b#r)RXJ3vS`fsUudXa>zc?6X4}g&w@wE7Sw!IDibT=Ty7#bPs8c6|oSR1NY*@}PR z26ggO5mhMuW(ZU0DSC3}p8ZYltHhel=hLXy*?dWO&iF%WAH`BiH!&>2^(Nhy>=*%@ z1o#*chJ@BX>H5XVYPPyZ!ED~(G1jTw?(9PlDP=1*pg39f+~nsxVPi;eV# z7y)tJf97HH6xA@2?!**J3FkwxLmiRnpTjt*h9-Qa!_M^g|5G~b{=yeFvX`>QHzvMg z<)1*Ek&sHFm!SBq#>5ppLY|PVet83V8ik%r;KlErDZAxNjE5WdsFnM-MHbaHGiA1T zTr|XE1@GBCe05+JY{fK$Yvx+c*HusG&QwW|#svFGR(pb4315R>@M&frk9y{^uUwlg zcCH;vrzIK;ywq_$ z`|LC4)+eXLC@V*pk|ro)+5|k^!cSupvhaRFw)`}=bXI`2b<;k_(%+*M109+FVn`jB8IbZic{)|U!Ywx59 zeUPZTCxJ^6%TJP_Gk9nQdh8iI<$4A7-9lStzyIkT$#X;tCY)ZbL41$i1NATB1HPL< zd~xf1MY*oe4!{$#)NED3`$>0if6WE}*%kzQ5V!vFTYER*Ue>nXZRhWOIYcmoh+2E5> zKjN~6pmask-9iMm9+%)hx%f{Nj_}@k*?2LY|E7dp+?pDq}q)PqDhDqB-Vh~XB;%|1ZbmYy}bDWYKtcRfVvU&8mTaol494oZ>3w zZ){yyVk1?rC@jOXd3eJL?(PKl3Lq;WNYV&zz7W*T^%?YxzS21FToT`~RZ6SG0dNm@ z2KrB2_p4lyH@&ztU$wi0L@Il!OCs66IBeX8ctz=w;#Z_H-Arhd5RY4Y=jv==pYHqj z4-Xii<--Fr+75(L+$^0bVrfQq>5ZUx_&)JAj*t5jb#a~Utyf=VSo_y+^z9!z66d_G zXZe2@PkY&3i0{!s_0g++P%F?)aeN9uM>z)FZB$WfaygCKs~W)5B6Fozt^PIv zY&g39MWj&dl2*+ISKg~_aa;0HwU_ie%ZpGvWQ)XZdhs>e`-IN~M}gtgbfiX*nEDs| zMAWWHw@G?uD48wFArr~ahr%0UJ;}3#whTa*l2i2ZV%jaT8uy z0+Rx7E{lj(Jrhb36oDDJHW8R{_ebX9u`9K{QLSm@~$&;cz8(Y_JuV> zx$HmF@85sqIgQ&p?jEF~Wbs^KLokP=qrh9Du95_t#lhhz&3=t8p;Xj;hhYJX1N#`- z(e}`=cfrK|yWSaU+9RXCFE+XdJN^{Cm|o#iv9phgj{az?BazIqlQX!JI z_mjqC*wou* zOYFMIVU3h8Sw-sv_L`_n5gVUfd}4uWPJ3i`wE9lF!jl<|fWC6oLUz<`^llqYq10w` zptm|mJ(bN09#@Q1>2{CO^ZVA9?-HqG)^t!DKk4^gN*)FfN;#3`RF+2@BkuC_gEg^C z6~@7}+6AP-ti;Gcz$yZeVTPBo)9~0egdh{hu*B-8u?bhqE-77jb zZWxYWy}I|$&!dC1X!LrA`@Gmm*_3}SLi?WDTl=G`6TZvbsXwOnCm6@*S7fhv!*<9H zY1e%7r01(;krFt4dQ!GO3{&Mn!EI76%t;-Fhg>PghdpvsURA!`i|riU+#?Vp=EGgE zVHn0wogGJlZ7QqN#4hSl@TZ?qL9r{|tE;!q>Wr}8SzYOQeH8|Mdj4PG0eG3{r?!MU zguallmD4iNxV<|5n_Fr=q!E~eC0d(Xnd6IUU}as-JgseKc?#Tc5j{$05`z_c zO?$G~Uu-<-W@{8-MO8+r%w)>RY7FiTK^apluQQJsZ+r66%i+y~gU)C_tSN^2)Xet3 zOAo%2eQb~^f;KZci$%hh$0!{3E9MNUzC_&K4&$+Zp?>Q(HjG%Xop<^0@CIj&R;X^;!lv-jKvcP>WGmV|dINeOk*F3tPx z+d;5Jb6?bXDG+SJ>1u!h|ld?Y`|o7#$nCGFEMVzGV@IaYYJ;e69am?3om{0U+`A{`-QhHd?afeOqT_1 zLx{ygrDd}aHSdpfMVv04TpE81Uq$c@SCt1xm|VcpHZe|zw`+Xyf%r|HEkQxba;g;E z7gYM6k=565mI$GbJEp;Qj&6EbMmF_K&EP(+L9jQwEO0N(a_?+xT*Ft*Tj)Bloj7z_X8aMP}ml%62kAp7G@|eOArM z{sk2Z5A7@>Iw5RVGS)CtzGi8esE;PDns3?^)7jvr76a=wh{qC^=kM6&c!sR0><@Hm z*)KxK?pbXB%H@6VM;8D_u{%03^QE(gv67FSgUqin+8W@D4pMUVzA&m9vh@8VGz2Hm zQEBnhOowBg6i&W=;1}td__o+ua0hnYpo0G_Io;llhn1Y4zIjWjZYl9kz@@*Zpq{f8 z5$(R$a_{V5-Nk`ZBmRY@@7xV>Z{18SC7{2e#(@ODH(aUly0nVzL&rAx9$4Gn!hOE# zKY=S=uUVFj_9obTn0#%$Jn{~_Qc`?YTbM?Nf6LZ(20|s9TJ>|FNhaIjDlJF;8V&6O z(>uH_%ELL+O-Ml+1#6Atl52Cpi7;~a1;No|gObHffHvC}hcy8e)Q~vB`rRF+y3#ew zFJf9usyKQ<*J$U@$QKchk!oRRDE3QLNAwA-t@8NB5pn@u{iRss{_yw+esU2ZpB27D znyF9-nA3^l{B2a+0)N~Sd1ML2+%qrW=9_Zkdq=cVrig3U)j~)np(Go?#T2Tm@g46p zy6Ad4OZ}a8a%*%^W73iD%0-W2va}XBKT#%6BTd#nh8~qmw$2)H@lMk~f?UtcBhAwQ z>$+0x<1pu@_N@&JMX%wOjk@sp#}{JSdZ{Ydy{54vO&z0+d6#$9%hyf(H+W)*Vpa8S zTVPQ~o)5SyMe~j-ZJ8#OuQDnD^JuN$N0jR98HX+!W@}#zulpkAa+IC2I)B>L>OarD>**9jz%D-aB$ z#CGzbR#t=xm1Hd%goviujb=RFE%n7Vtjl5loLJij)U37I%NIwD25C0(gbHDGOO?fM zaS8x>_AG>LaU1z?XjXcNYW(rWi)n1kGaGzK98_`LP{%(ld0aFvbNjL#-%gTJz-uUC zret7Vf|59=9kr>TY#xyufJ_1bSzKJ(ltZIrR>e%gzy5OiZITe`_g?`1qx;fHtL!~+ zBkUZ%!gb;u>$lpb=_$u~_VO0AOk8D{sR4gB>TcJ7A-qk*Ac$oRK2ql#iqJ^bK^|{! zKS|ZW?K_z;&>wDZD~Y0vclP>&NSc)FY<|}*cT-eEAnmuJg3gs=l7{#0M~b_5&d{wp zUXgs40FK$&wG$+>vol&WOQp}|{M5q#p#JEs3-4pmzbkZWF%QyI+BAe}ga=$IVzLoH zPk6scJk%mLm?v*F3tqx=@a8Jn74fLB7B6w zJ+|1rq=~(Yn0EirQF>c)U|5@ z2F|hZErX?#?kku*25OjU?*0Z4tllgDELBTfVbarIzD9KA^@r>0lbdp}QmNOEd`Ejm zL}>&HzyjIF?dRC2m&|beW0%@3CZE(?nx<`xU4n3x!fw_wny%SNnONcew)CnsXhZ>3 zVy4>VzfdGrWnhFA(O(qb%vCo+lUBMyl}5N4lhuH;cuS3dd8i23`R`mv)ubx@Z9{CW zote!gZ-#8eCmz~!SSHyjXLcqXFWJhLbnjVHV2n8OprWc^E;QXx#cqq1&gWH=S5D$| z+X;7BTG?6Hz+piRoo%xlL~`OtC~)9VxmR_fjM%By=|y;r7VY(v4a;16LbqVr#3ef8 zWnoo;X?LXYvNs5HvHeHH6_vl3PSbOj$r2Om16x^9$l01#(Rt8MZ)?ZbBz^q}#OMYt zF*t+zfb3f}#9_J;ElE9qgeu`Pm33=tB$L#YNBTK2%fF-g`a445)K&)JHMXQ7b)z#w z=nN~5iad#Kdos+@KlSQtmI*~sa!62qpWyZOi$aX;g<7JvE?(&9;84C!FBrnd%LQ5@ zy66u>*w#a(W;QN1?T^(KFf3#deK+6U+%^L|TVAA}aB)o|vbAJN7>vo}H^PoOuE23s zJXBNaeH+bKJ=WV>ftD4fkrYZ7Vq|2&1*LM^!qc!7^x}`FnFLA5^=0eQfh#-?<;k@Wsnyp6N*_G+@!|KstxEq|y zKow}tzJgJ{ChuJ5gYiU@aTt%u0cE&kk2ub&fI#RJ1GSjpVVxt&FMo#SkmL>20V&bh zj(AjqW*Qh%RS9Y{$W(}`!;0_!jMztVKd&r&h3q)0lqO6~Y|uB`5+v93^frd3)EpOw zK*g3(cf;cIrxaeO6PdcQN|y#G5>`h!95r21tTY20N;S3@uKQ4t`Dyi{e=!9FmBs$k`Kn$|ZG+PlWN$Nzs z^#j+q;NgRNXoAgRcA1l5N_h_LOmfF_EzL?6 z$Yo#O?JwyO|C?3(mdy2e|{BsZs{VMEHs#vw)^gb!%D*e$F={=DVa8p{^RYlJv+ zXjsEKn%up@wzQwsIV2I4CGM$J@|X2ZnixJUR*0B;m5sc@4mr4xr+qEvh2MI2E02O&^z>p^~U`NUFy}Iz#O)`2xL@o6dQ_-@8mMX+`}pUY6;mytjy1vc2*9WL77C>Ut4u=&YtMe%ktPJp)#^%;cSXn)s{u*L3DO*401VWkqbmkzu5@18F*B;onZ*Ki+SBvD#)rb; zY*_htx>PJP18ao{%I>vI(k)bOCRzWL{XOEI0f-5(QkAyGB5IwLz3lYUpBt&e#n|EW z3xp|nw>weV<=U%0SvZ)H*TTIm zg|7mXt;MDb8qnKtj6`n*-otKzUBX9RUBc&$$FFvtgI%s3V31os34=8V;i6R#PtJd2 zvZyK}E}jr%SMZnpj@nc&GkItNL;~nM4I|_F`k*OULM8;HMM3*$Ky&x*onb%28HM4v zw%$RyRLQUaZ28*C=TZ~NjQKz$o{FGqWRD$Ik%gTt4Y~U+SaDDRPI1uTe5Lnx2XxU| zLalPES^Il*fFv2CATWbd_^ZVDce%U}A-LxW>{gB6U}}vN5<}VGQ5Form649^=@JuU z)TiRHHHam=i~|5^<3J0tx#(?0=80B|+mBcD7{%9uW=5EakFhZv@9g%~_}u&CPl%iT zBfiqRScY$~pI+Gpq(qG?AGQhN6n%(qeAou1HNyTBP4YWrfKW9Fv=ll*hbOk9CFqHU zaA-*RY(F`7wS2nLNzF;ow5&}N=C@)^ZL=$wQ+}f9H7@2=4U-OT}FJ6-I{6c+nEhaEc z`1$xnS&DE2Vj+B!u_4T*36i)uE@?#5h-1dQB0JP4_TG#qd~(h!j?A_yVt7)L?sBNy z3@!3uGX)@QA4=L%M3KkvKtczok% z3#Hiz9`U5>2&E847 zb{NT?Ug?WWmI>|X*Joy*5*OQurEexaG?cOEO$a|9H$~;nE9~#+ibNF;rVL%aqG+i)#=WFqNZ7A=na!}(N<%F`oK@A1NhAwOug7smKzt~k|lM8sP7>;xt ziUaLX*0ao~Tzzx$N99DA!{<297rpQL98;w^OJ+lfJBw2!$fhM2>l;m@+>_2vv_K?v zx-{Kb0Yio(HEA3kgEsurG%(E+R5yLolpK>`0B^(NVz3f@gZ8~&*Lh2xA030J&IOw z1r9^yVzHQltIAI-)KWGtHrsvGO7r-rbV1Gv$5o{T5RwD^miX#+ejCM^$cGJY{t9pM z+|iySoY@rjyKeDZQ}q$fd3ye%YMX4OVL=u@J((WaQblT$MYi8sRlp!+y~z>XzuWJo zHg~=D5g?~NM}*+>07SbP&u7^P*W05SZYax&ke%+AP#WpyqGhNX`JUE)sFKu#-JK6` zrkaokk%?mQA9fiOA@$&rmGL?zHU7Ex-{2kwV*ha8RvN19&`U#2cX2k|f#uj2qyzx5 z2sXWaC(Q)$66D@_2thmDn{tsd0j>@CBvry=5J$mQ8Ka*MiNT+nL()BgUYA^VEe?zmu%+ zWO=SE$`^F*fe~K@>G%TM(R0^eshFy>`#m3!4eZ?0JPnoox5KMPb+Q&2nKkdTE^0l_Df3&?N=QvxM zemS0@lj$?lM8rq5(SvzdkvcP}c#xb?)NJ-HcOY*GN5n`^7e9zShPzw4$yT9toP0su zq-^2BAT*~CeT%%2d7la6g*O+Ux}rimvvj*tGAm5C^sTPO?$Y3v1RrMK z%gN})bHMT8!!;IS1f)eeeAiR<(@Z#++@Re|O?GpFtZrN_10*Rb?Ry^{NNDRZW|_%P zx|11NH?~WiuQS>Te%qs4|Alz%o}KPLs7m^`tCIf5(XXXpu^_FAH?TqzRAGVhUicx1 zy!fzT!*I(howCqPy+&KnL9Gb`#Cr=L$I<(j5|rcP(PoetN*u0E`Zy#u02Zr;r0GXs0@R+kp! z<#EMQSD?)GvE0T$ZCYZ9al~MFI#7KG?pW+RDSu6$V^mZ0DLe;|VOgeBct|Md496+t zyrz>;kx2v#N2jf5cQ5&;?1&(SKri`5do{ANH+oBPHc@m0j?ENA;1znKa`El*r|HZ~ zCv6lZ1mFGEHYkZjw`+O272;r&ML)St)0+=7w-n)2qdrtfc8z(a_@eIc+a0lh z|55Gc`NG$T0{ss9?uYd06|xIgRgU}8{R`Pj4ZblJP(C_l;@UM%XKAuz5^_RRVPZSH z!RSI}y0Wo(K`~b0go9d*SZ-qMGDay^GUG9Edog?_r4(zsswXSJ>BHu3{>7t>+B~j1 zxvyfG9BQ;*iwRsPyzT6||C5W)%FeTP2C`M8imJqfIe{#p0_AK-pm|1L=8YqzN4mIs z_8-6vKsA=g?&50FS!D}O5#U}lc zG5S%M_cDEnW1^Vp>((>lA%o4(Trf95V|rI*E{%+M!bbQoR?t(^opYD*OCW3FU)^`b z>BKtWaN<<_sT$GC#gR;b5a4DC2gpQt+9OWBD6Acv;4XU8!H@V8pyRBs#Xz7%cXDib zjwq2;2@<}?flMi8dmTq|+p%-Lu-Lff5K$V~0(IgDdEZ#l=wVNW!G&w#ntZW{nj?Xj zsDhzj3u$IhQgK(yH|)##zX_-Q!-c<~zPOz7bpM{obo{kv%m6RyuDkG;_vN>~Tzd6wb*cC^z*X8y}2;-iS2zPqCn zgw>ppGMPWeY>szL?PK=Tu?R0)ie-XISv7sM>hbJmH}q#}0v-4gP~)zFR>y}t%CRKC zY@EDZXW?@{`R^9~_`+Wi&nawO-x#O+TE19%~XG2BFdh4{YQF*|s-W)wL z`9W8%Qs6LoZ$1TQ!tJ=6%(5;RB4N$>sx2HiX6wU#<}D<(9hn|!&G{n~fudfiEOTO+ zj?Su0ADl)pNF5Hp2b~fYAX39szT;^o1rb)M$KlTITaPVz@1x%Ym#Cb+b&KwacQH^~ z$Lqib)9E$!Kbnb!x|FP_ek6E;;fOrXAYQ#W<5KO%1fh#FDhab zYGgmUqS7T+F7)fIhE!;Q1W(#9z(pzWma$uMhFTo7T)DQ?zGUqtB2)w__OH9NjQw3i zj&~~9U{PZ|{W3KNQ3y|LC{*H=TezjA^)*&Hka9d_Fni;j$-9MwI9f8okqJ~u&lG|( zu~$;Dw4`b-yBCWAW}XqfCGwMOqPwmAC~a_b-Cj5R{PE=GEt($|;i$kHsg5Tvej7cy zKbgMx*i&>L++ze-<=*lw{d3AEmzD%`-jcEq@B+K}33E*P`g)h_WbXMUcD%$BXp?`G z0ua;g5o3PLSxv+!rA5M5AJY~l3Q?Fa>1GPG_-t4AB_ z-&At9;dxhTLNyW1=cw|q^X)s^<`vUo-J8Sgim)fgIN>LmQBRATt;b!!>vPI8|&`N9^ zjo%>|$5ZW&M~WN_U^j}XRy(fd`5%uh#~*yCN>E$mUUy#&(a;Q6%Q_q`Wv6Y$LumuI z>}zY2n~F%pkyd6uVw9A+u$}=BZ-;nooovn1ADsYcq~njGRsY~x5M>HgxJEreQ-*t< zYzfG-v8Ekn)n0k@2Ebsou0IM+;n6KE4{nK6D4rr?uXa0M_NCqK<2UIMWn{Ft_V3<~ zNu&2OYwD+Uo9)^0@@s45te3?}T-Ue8nl-_}KMiMEOH1;wllAfX@M`W<7Phf}nOb(K zB&=oWg+`Irxu0SIf4q8N@0zzEBI7Y^`m+)q<#Za)x#A5Ktbd~3uqls;Uyt?=mUp%vK1em$_{91` z?%Y&t2Lxohx5@VMt2|CO7$oLXkSS$8a6?A&WY(K)&nRhyuyRD{hqOPCnoZ%oCF{B` z=Kqt{^=msTbd2c}aP1xMvax-DmPee*k@S zl)V{mPaTJktn34`8UhD*HcZ7V%`l$qQj`82AG#lG%Fhg&kAAflVhrlBE4 zjMz~tV7sjz0?U$aLa~~ZubDu%!9b$)52A|!oAJAv(COa6zKI5wpAc0 zE|TsyVA^wvCaDp>k2lhIyR((Vm94;5=D5sF^9^wo+d3OfW~;A_4SFq-rMRnbURvamdgn%ZFIbE$=214l11~5fTxq?Wwi`(!W~Q@Ii9mEKX3BS3udk~R3(L3 ze}u>n!KuZ+B5Rh}dY^jZpSdgzqda4yi&G_u{2G~(XeM73;@l*rdD z-JpIi&EcKgu%YYsWr|x$w0#Xtr9$4=n+KeQn(BG6t_*9}hHc&b<<&I~)F#(@Wi9(l zI517nhMcUdY;8FCk*9-`;{y^8oBeUeS-GeHB%W}wBIDT!Ar@Y)H6?sYwpfFsf?UDn zFQpf5-|-NLC3BluQz)>{ppmZFx#4K8_^JEwP2KVN7ioxx8}OJ%<{c9iqGqDjz=+S| z6#MA1+t@xlHuo~!_{rgfOP8j4c$5>RPRk~3w*KSagKbc!37A7Ox!h@}8=*@^|Gin^ zf7uM3Z)-3@n+*?|BA5}ICO3AR=ti^Jmz^Q`t$A$&vPdaXwYs*YSP^XNdE<9Uv5TkF zbP3`mPHUtm< z?H4+Aes4pCgyB=1WJR^h_z@&%yv?$P#q5y+XX2v}sxEp- zj6|6-G9?$YL40i|mvgti?cmS~k4NTq$3(1eZPi5jY;!8Y$c>4e4@3wNI!7iLbYD)= zC+4mHv3Qky81Zie;GnHx_Q;D3PSh$s8n ztI?In9qpOqm39&rEJ&=4gzB94`Uw}2sotxpt|R1oUs}7n4%SSlT3NkqAQIXHMMX(+ zE)y@ad2BYOQG+pEnF8+cK9OaQh02q)5pXFyxMA+X&+6q^TzJd#lk{u#vPvV%b_uC# z$%A0xc+^kph-7W!*rRHRiN6}UmI`xvxukW{r4|cWN<>hu2;-`aL~UPuz2}R*;2xeO z?CjelL);xsR_G5=9q4+EddGM}%MB7hWfWKM73-u9jbK?#h(lt{RW!*2Klf(l%(#jf z%S%Q;QG!ZOSEbBAhMb(hTYvlwcBxX_+M9m{mD0O)Yf-Bf@UpVGzO}o&vScX4rhD7_ z6h?F&?{INRL)+TnW6)!B{q*!cyB875j#0ts%gb=f3TtY&igsb5UzcgtmWVs9@43WM9m4!=B(?TDj28J~EbFWKzjdxK(*!H)!0f&lM zynzEg#jbthd{Y2iDv#nMdXU?2yta`{B2CDmu<;{t+5NILYzw28atz3Eq75y9-62J3 zek|_{Jf#VV20lpKE8TLvm4k%ax{JrdgGB% zoKW@r=v3MQ&+r48TGVDNQ&r)0%TiI`L7V61zy$+=wU0WN+B<6Hk|W~!HyqKNc@^fq z!ltf7pM)XGrz{lvrzVqa=sS5rl&YNzDs?T2Jxx9v#E2C7Uxmzd@|xZJ=*!+MQ-4)F z?Zx>>vBmJWSXUyQbqVxOETANgBPn8!;*n)ttOlkS@31ZgNRww$I;+i-%&q3*zd#+C z_I>L(&=!JuaNk*K75m+jQ#IS&rI(T`P9OVBAp-9P)RgHw<}GpgR66zu|{1qXm>YC;vot#WsOT1J>SFj>kHRU0k~7-r_%zoFy*Th)P2 z&2snyk^Sh=`l-md1#NyVycY_V@Lg=T_1QkIMGqJ%87}`I5gebOyT9mznkLx#jk!iH z+C&pe6EwJ}40O(DbVB1?Py+QV7k?D!KtZEh;311YGhm+j&3@6zI^}x>OOOWSD(1_0kc}GI;cIQSKI@O>>x@;|EW)Z@ zpk#7K&i1Ee#6Bj9_Du`FOEmr;q9ea7#ZncxAwm_qAvhJsxs<6Z`%GR=(IpisXruck zWZWKx^h8xRd1Q)=J~?j5+LZdGS|t!SYCm%vBhzUStM>_i>awESkuYW>kKttr^rx~w zHT+xx29MwYDxRDt%g^^Lq=}et1|Jz5Ag&KSnec?<*&UmaMR%D*Xvp%J{psiwffER{ z&2MSwODHCn5RQ+|N3&?aeX`@Qu6~i&Zh)(T9irK2}XxF^oY1h4QP5G-4<(7Jo{$9`kPKHfD9L;Y%+& ztNZlAAvdm*%%%tj}8wh38snG$7LJq=>u9-`57Vc_63rMp680vgzR9ty4UdHj!V-XW0&2*K zBkUkeae5)H03rZ>Ca#DL-iPV!7u>3QUA=7_B9jwP$;OLoP*lx~S&v!pcRfFS*@A=k0z=4o)- zWR86LEHq!#Yn1(EU1ol33XuMD`!tX%hBkTe6vRVSXJ^?Dx}ppeC+dcQ8E&Kh`u&@m z*$G44izYd0Sf$X11J5$e-gR=AD(5C}&&8=Yuvo<+XIO;8Xf$b_Rqa6N8VMB&Q4}L+ zZ_S3ox4-U+!(hOe+rFy71G`_R`rG^v&yY}%Pd+pd=5pok&P(vqI0eNYr6g<_Je#e) zM-3xyc#uNsC@64lbn{eQ*}9ru8NW3t1ljOZY-IPr;ShyK#tW}B_`LCpk82{~e-Rtq z#@jEYB^!sA4i42UVpYsU_R^_Snzof8R0GgZf_IEyPhTv{?5((Qh0|MkZBHxOwKn=H zmT^V9UnLk=Cv5$LRG8MEyXvKgq4i+S4jq8QJ#+&Y`U@v$q&YUX=>XHYYY8bLEN$$WK5jg zK$!Qpp)xX>MM`Xv6(_2We)Ogk4%+q+UdDD^}k@h zhnu>u-l3BI4~Du?ePtv=tw>iT(rX%wwJ(Ib9a;4AG$MEz>BzBF3hkgqB_lHb=~tJ_ zRx%TTEXf=>yU7UW4cBIZ8-rYEI>P>aqtSkW6A)K&ONTZ6xwjj`6fbD?qw7bTVn)VI z?=J2R?QApezKcLY!&c5l6YHyF)FOSP5zZ>y%Q~w);qrv2B0}X*MZX#z1XgLM5#~Y; z3yl^lQ$=k<184poJ{i$_X?YQ1x?}2N7Z>%%zxmd!a&Z3o>iRNZj&0T_*SkZ*HmKR} z8rw-lloF-UTDFt_c={uK*+tKBJGdN>nquUg6h7{scG;9X(B|Eiv2uE&Qt4K6Jm7G#gdu8L*y3j`GX%m7bnE2$_5O{+ zZr{#T@&jdHmA!Pk-!6F+sN^X)%}(;N;}k z-YPb=iTTs|X7QR{?RpWb?u5V3o(+penA1`jd_*y5#4#}T9-P%5X9Af(| z$^gMzC32}fG)N(~AN?w%-XR1#Gg}&ypDRUaBs7O3iXEO;8jJ!yEZ!=uQ8x*PG*`t^ zEn_qf5T)@aD{XClVn3!IbM%jdRe|tXl5fIYlGpi-gr$@O{<5z{bi#anD{@D>SVU2> zt&J@{GLehtu8ezZGgvl!d!zrfm;z%(Pgv0&ED-%NgtAG|F|98I>>c4(PEp<8=>ok_K^hxUOs-Z7@8}o9F1U=& z8!cw*;Le^sk7WIBCcK#24pn{>L|B_|?cBIEt8HPD0rt>w1IL9C6z3#di2El>4}v|# zCDKBeJXY1(B^+P8vZ+?)Uy0MaODD?bF8s+$ln_*Y(TI8I*pP8E>>z8E-$SU-8f`-` zI)+)t4}OXvp8BLI>^`;+d#L_v`0JO-rU~1W1-f$0+~hI}%YLcIvxl4JZHP=h8 zP?>+fnN&Vhx4EV63B8aSm{^+F69gjwL3W?BaGQMq0_;B+u6HN1-rH#%g*p6viEM1V zb$qa&ogf2LD2LSh=&RZZV=xxt6tLHoRtXt>}xrDklSNoPL6Q%8Z*hca8{1Y7vM}=bF*C%jveU zpBODq!KVSu1Y6nK6y_Z4`N*NNVrc}4QT56~;R3E7Q?7lQ&%X9`DlL^x!u&LBqP6JR z>uqFnvKXPrd<>8w>3G4WJM5Hzdv|>`;cfc-u@CpI4TrqC_agLA$OVn>RuMjaQys=uIFjYJmDrjq0s5LYNmZfrJbo2;F0O^Ch zCfXM^hkTl7-v-BCpNXC3WcbD-dAwOqJSOG)k&HfHVGTe0Jbal-!_UVNf8kfv0yQ^@ znn&1BA;GxeW>Fj6-T6w8d5MUdfK6itj?Y*GByT4$B!Jjz6lXgyHU>Y0BQBz8f=n-ayoK`@qg!qsk6fM2Wg_s^59t+zXUmp!# zOO&2Ej$3(yp>={kd^jrpqcWL1FXFHMmm%@TVe;ZWrL&d#Impoo?gr1vrVNt9Ghjt( zkm~tCZxd4YCH>bx1axHF<4CTpK{aoCJqd-qRQsJCGVwO2m{|0pP9ddlr+IK+(`{ZtJVjIGK5? z=wtPceNX#ot7qMs&IPfrx-3+PePfrwX1 zp%wnn--#hI%0{s?x+13ISEz$eAwFg)+BbpR8vjxEe}g`F*!k)g&I#z|mdN(Cq&I15 z!;Yl8j*o0UWkdrJ?RD?1z;@((T_KiZChB*fNNRh!0a|1(zWt7b`BdF}HCdgC`)1=t zvok0ZE3I75T1Nhrp+;xh%T7dMj_`vG<=YBck_R@<#XJveHyYZKO;b;RzGIQjcA!z` z!G!Gj%T$)IT=Z6AY2Awms#;_^2^3ZxPI)s*D$S07en!9uh!uY8>iov$b~arJz!7Ry zA7K2Gz-!|AB1j`u`pdSsOtTR&0CCZD!|cR=#b5YM3tzYJAL~7>h`?p#S0j=ogCUa% z*)6pjsy9lyY=R!;l2trVuDpLjM-m^R4qGK%oKW-~#*R=Ag()h0(43y$>?W`$$LF3o zx$!)jrjx4@&-$RQ8@_Ar8Fs7qLBWmh9%Mv$I&5}~-P%y@V$ebgy~-{C)&R66C$0S* z>&zDD(2Fd3m8l#kxwdBenJtll!xIvmdYD~J?ou?}w8*+(o=`NG2c}C9 zGX!Qf`6mZ87UOvgan^dCxrxAVn5xZ3MeP)ba2xpXFVghBm(-^fk8_q{8QJ}=nbSrU zTOMhRD0>k_%(ZNoXMbNDpSvXi@@3KbHi5xMtEq?=qX-RQaT}*4P}hAwx(q24Z9N7y zMQ5k0(ipjfFJkY*FRq-vc>gHY)y0+9lDe!+xAOzosK2W)qr8TM1w;XY?^FSfX14fM zhGutXM01@~Ae!`fos+1#9C~1$LuX)+Us#!(;_fUve^225uyb38zhmDq{Cq7;UTsVM(pk^k^-`47wDjK8CFN_NG(BsdUI zaQvAsSwve+v-9o4)*i__ge2>O~Y)bY~Es7!9WV^v1;!bFJ$rp{A&={72vd>|O zdX&rizY$(iQLY+AQhLSZo@0))^PgUbBu6BAotsh4(H4+A^_}dRcYyV17$P49PB6b> zZJn`Bp-{k8AVh_oX$d3v*o%7xyW|E6#R*GeY>^vt!-vp+~%!YJe{)fQkU~qv6d)Gha`u+L(XTC4d1N1XPz0=#< z$-pa zKZmDQ7p}`pykEy~b`rb@#4I_FmI%=rHlq#Vi591|HRj=+##EIa!ZMhp_$RQXnCzrb zO4*#|GPy+9q*%bkb3MOqHJ@HGP*Y~KePx=k(A6ofP`^IYHW-##yZ9#g0L1X6le_J9 zKg0{gPJn~oPb7@14#bd`(5gyc9l*2ercqSwZ1-quPl#iCciP=cGYPz6zJTeh+q51tcCMxfk#X-SJ$7j$^OaEJ{Vo5hVKU{He+L=IRU z$Fn{Yc`#Kv0Zq7aq>){-o9j~mHkiaKY)aUC(7Cp2ssX|;EpG(Ac$D|sqDCky(T?ax z{`Yi+DOFdvv}i+2R!Hbn-1}`yINeoZOr^0fE-R`@A-btIftonw@DQGiyFDH!L6$*E ziFGaON%-HZlFScftpZk8Xw;VyD^tn-`83lg(RR75CDb5*9DCHe$y zViXgA2E8wr#56mDnn&9JNj-`5QExcnlQ{3HCK)EW^VyZ4H)6yRm3*)?kHr!)cq2-e|Sf>`ayqJ22OI{h4)pK&ApRV#|r#~bI zf#gz185)V-aD*jkp{pSw?9zm1%;SDiOaP$`~$A zpFT|`B)SiF6p3S;jm;c)b~YLg`PH`+NO5ZyZ)ML($}6$>-w?VZv*>E{0&8Q3rsF)R zxU7BXXc`A+Lnv1ku1iuTeLa|W`7MAhQHT-=sKtBZY(_UulN(4I|Biz!b~~kl4Q|o% z6#mFe<6q<-{cSeqGZ#Kb9OM(1agZyCPSOMe*jEc@gsd(7+UovikhbBV;iE*>Q80|- z=nRNxf}(zFM_jjVQ4`j}OD>$-mF{X-vVpTvY4p)$(aLjdLA8~(3XhZ$*}nM3)%jf& zWl080nD~|{Q%+=bbIZzipFC0T(BD7QbZKGvtn>-00fgFWz{00a z#BnxfvxLUzfH{>^K@O5`pZ6+t2~ntW^hys7rsGKCvNX^(-HV;oX~J@L2A%v>++hk_ zf4G|JGoZu1QON0PTCDwwHSA27R$R>ico4av>0oQ$;q;bRPWM8Q!?ZJ)zC=G|jLQtu zqO2nVJM2CWsDdv9Vr6x^%*xY- zz72LM4YcV*^s9htO)&{gNB^H_*1>N1TwpAW(2mKDacR(Ofuo0=KdrSN-)A4tnj9LH zYzy&wE4xeL-oECmyMoVltcef3M~Bn^Y(;3Nw^P4x|E`V1wD}5~(8J4}uYur1Ma8?N zDpASRTshU~G8>w%ChJh{I(9RJ-uHu>~ zHx{hy9;>V~izh|&*A+szP!8-4PWW2+K*)C7eVl@7GHxJ-r^|#e?TkKH(OA8-bbRev zz^p0mRiS2(`dSKnbo)gQI!&XtXlrj2w_f-w?bmF@?kE3G`&s`D@vn4XejTj?ME7z<+4nIC=X4lk7S6DQv0qGlBmn^$Sh=*lh6TdJm z&qu{v9^uQRR0_t?1&F=hf(m+|F&Rx4-5*vO9&-SKQHs__Kx=tLj#0DcRB!2``QirB z?24C}FYIM^=`AtF+HVGfcY>!7mk`C1l~uuS)li+oZ1OQwJ{q3`%s9R!R&Y}$HU%}< zpsYntKLbUO41C_f4Kuf*nFIQ;jQPfHJDp($1}W~%sP|qKivU6yn?M!&SZMWU+3hB& zM}{0rtz9>nCe@Zf(VgYJZ5CmB=Vi0Ln5$v`5e3uV%qCcJwJbm<;DqxGcyf!CB!MA7iV z8$iSJF0DI02PmJZ0BrfNnb5WMy|P|h{6rUQ&>{#t*xIw>0I#jqd@VY0uybu`BV*}7 zJwDmXLZgIqc@<~$w~|bl2cZp)Vhc#@JIp85m!D=JwgvIUNXuKzv|?{D1(hOU08Fa@ z_XNj5M9yXI#WoF-FmvK~bfo^FGg>^kW%9H+I0>MB*ly3mrEgL>C11XHtq)yJmid#N z&NnjlQ;SO%-0gEh&FWq5UUz#)q&K=oN!kAtESayK?CenrZb0L}4gKN9TnDXiFx;ZR zR}j9lwk#`>BIvkF6v4R7m0ivwT}0`RHG7*x^ix@3XmP|arEsNklQvK_zDP!|AQqjY2!#bt%yI+Zzy$}9I_wbPqJzKB$ zIq&co_3YVEEO1qC3#}2a_r{4c4i7P!mUpZz?BDzQd*xDoyy`gYrNa*z-f$I8ep+Pw<8$TL72MD}&eIJ$B+7h7u*exV#v=tT{t>$!p%3KHcGa?b_;{>CAg7j z83>IE590>x7#r=f0H2l9_D1Ns|AyDc7M&h3bjQaJ?zstkm8c+n+Dprqmy@u)TNEw^ z=w?O?zTxi)f)_V8((^BBR3EMS&IB|~*qM2;&JXw{e!z3)-h5&f4}>rs4%x~2%sMyZ zfT9l))Ip0FBzl_$NbNdWBYldr@Ira>r8oRS=ePAFO`eM>W`vL7`1FWWU9mX>FN+zY z1sdC6yGoVdrH6lv!c6eQX2O_*cGJ);(pK6QCy|?gOvi_gxrS=6E1?o+jPGC$#cKbK zrfEtXZF$^L#40LLj3^m2jNZe0uhbtwdn_JHdSg%R?a!&b-7$IWSz9l@_DP)KB{L0QSCa-2 zKI$H=y}Em^T*l@nwt=sWdt(1_PUmQrsX*6@<~DW^L)gqUVnRy$=XyEmN+r$I$P-?} zlROs=%#F0jp{&U7mtpYeJb|jUIY?+Q8r(FG+VmGe8t@mrJaBxZdy#J?>da`7k^MFO zM~@PBE*VXX$tIpJGpyJqdd5WY01u<_xBH8hs4BdvIZeoj7odogHfdk*W-QD`hURlG zGkq+E)dX)BNI1e zlfGY!D>@E(o?wuANl6{5I-dGkyP*W9&$Xk##z4DV7#@l zrJN7%QiAd`rV%bm$V#lwr+Ab{(QL}kvngKye|kRz>gyl#Mp=ZAFHQwYau~c7f8iqa zx@qvg2!U&W)6C!ZeuDmT8YYqWs?aLHp=|{1x~Ezm*vi4UalD9;vt^;bH*bC)=eC?ze@`<%0`e-AJySs6XCNKh3JxCH8YEo;m+Rt z;KYnBraIa}B)&M@jHod#mTdG)CppLduBv6nX2Q)L)=yf{&&EI=vC@;f+*eS!s}jr2#W{CDvTPIkQ6^bv6aR z6t5vZ=E7)rs9ryKxr%vdi29g~npwJXg52PYk;1j%*k^nHhldnVn)I(}Y>KU5g44Gi zEsttxrAK6YJ=0(3i7naKR=#PP>6Bh@W&z^w*xVMYm;!;mi*!DXE!<9S3W1SeIEQe8XD)x(A3HVAgW5!C1F@^ z`G^k=T2EQdywWw&;@%fm*H|6b^c9H%%?aS=CD|(DBV-Q~H|0jgd;TL?Vt>S%$vBd6 z+dE1QTrplST+NCv!C8+XSfs4p@v`m1X9 zOXqqNa^5m*;mlGIg=I8mDk49q*W0+KqMDA=@Ilz3j;Jy)%vvE6CX3MuU&lvk+@0TC zKaBpEPpcltJEgFiKlKEsJ*lv8*>`Mh9Y%#{W<$T@WAv-QWuEr#Jv=-h+r9IfI&U|Z zlwDl!y-H7pSTY$=B>{LP1q0YI|9^_dqA{SC3EfNvw))co5kq^_3#uH5QE+ieMZsXy z#yo4}9d;BP5%!TuQ81ccriK)0gb;9jw#$re-h@s|pv7D9St6axlkfMQ5sFpO`M(?>$I!0*~f3eIb56ds*#KZe~%jDo03vGDl{{ z7ks#cV7~2Sv$nYjkRo~##cNVQQC3Ox5!4PZKM)`NEIc&(fZi$l|D(-6F6vMyGa@yu zv0LeskTlN8BMUaDnid6hI%%eHnkzKZRE2|t0m{Xx6bu${ZDg*0Re4ByO$?R#H94ha z^O|M5-!9+u*_FrBv=NT{wuL2Qv*{s}&#tcmmA#=pg8zqu#J&edyqK^@xM94BdirUj z#60Jf<@Gh~SrOU!g`KwLL>XU_b3AOlhhvIATVkZp=QDQUqp9f-yoPs@u?nA&P-*`N zbtW}nrhejSm)N2adgBfA0A%K*Yf?q<7OE<03}7SG=dD5iH1!@j^#$80O7A~q-UR9m zk4{V-=e%N}#6kHwr)TU@3Xj}AkYMrwYzkfVRia5!A4%&<5K&txGw=ac!z>PXQg}Wp zhK^Alvb21~ON?epOozM}WoeC*Wcg_rv9_|bB=;gB*%7yDH~p{J9+cS+=~nyrtTwG| z8cMYlfoR@Ra&dTOU`zDDlrIxKKy}2csS>j`-J>|IQy1K+t9(t1s9i6*qC;L^+iTlB za`mbgDud^O)k~9Gc}W}|FR3$;_^>H5pPf7NOI@J5$8WfO$6k1T2HR!QA_fsgTst62ANe)tgkSZ0~691W)}_JauV5>GN~n45_VZ$08$!>1@Q#Zm4yUH5lG0 zKbqx2POQ=;fa?{+2C?&QbItRrRRnm^G+i-4*}mldx)rl64Vb>!N6J@Q&03h|R|jQv zLyvu?HYuUI%f?ezuD1y`_rJqLrf?38FDahKsbOW1JXu^OPbiA~sa+esOqf@}CYs5- zc(b;G1PYYo_$$e`=;=!b0RN3O_B^do--O|8?ThsBf|_vwQT(3emEWGIS+tITso>zZ z5MP8Ds%T40O*agsA>p2u zPhR&0=pCFlz6?^pf(ipa9L^^k(1if@iWVskwAh}+Q$7Ru-X`*eNv>^&Q+H~BgB zCec+d@`S!rUg(FySsizPdSaO{P%}^uAI!Yw4jK$=MIX^R0z8M7FWwMhe`t%-qD;zB za^!@PN>;G?Ii1kL!H(&|%`u}nA$qJFvI3^Mw2-%psl!1RvjbhMesYQ*ucOL-0CgyW z^>qu&g!Ws!4w?A+z|o5@5a z0{~8*3rv&&MZVOT|6uI!9lI#b+cN29clVm86dSl>o)RtPEPk0Cd`V0#N>qUya4*(v z%@-LR6Rj07A}TbXdZk_1&?jL-pF8(%J)0e(__+KCBZW+*B09U3yimflkU5&FNNwzl9{6VSC!|2p?SvY0R>w1OKQ9tnW_nUj%_ESf;UfDA^#5@6CNp9Za|qx46yHGEzq>N-!bDsLl=v zKyGw@USH;l>RY_<{TPqk$!JoXrdXOLQSiX(oqHaW>BjQ%{_btRrbM6nABSsYIVnc1 zS#E*J1F&KnJp}ZQz60L9L}#R<7^Za2x;pD$n)^Etfw%Fq-)DdFe;b`s<2XWbB+~7diuB0>V~Tq68k76R(U{xg*bUTQlzZ z)=dIP52S*zw^ft!ka9dYQ+UnonSUsegKM-ljr-rNXWBYt4>jR4@)+sBv<$%i9UWJz zq78Zrn~S^S0~o-5OGSKBY=t6NH`HH0KHA;Z_Pff|VKc``g@+>P^y)8727B+~-wxN) zP`Ut#7!9|lh&V8hlAFFZ*wXcZZ%3QExJv6M*h$IFAx~U*FEUtrQ6Y+ZFo-*TvSUU= z@UnO!btn)BRkpQVfTkfJtS`rFNi4o;uGTNIITw)SSIJ4e&*r8dZoW+b9QHs@)}@fT zxi+yw$wNfv)AWh1x5FbL<=Cr6+0eAm8>i-MToEUT$4nU%1Gq%nuin|4qW{AO_$$MH zA6Ka~XXxc@^4PBlOwgR;C@7y%%pw0B5a=&2CF)8TONKmkFdvtO{H3BO@J8>coz3aa zcq$A@)%1r~vMb9Yr0i4oBS+c4P}LP(OQ7fbiq)MY=vCJr%SGZCI1SmKr_4IpY062? zZ~low>tKtiM37)`2db6;&ByGU8=4q)*nQY(5L^;j zr&0JDmz{cui(0Q87{=qR)K%KS&JCM2_N)I!$0&rWW4)grhw_sP&$%j+Orv4078}*= zqsg&lki73E!JJOycZGZFDj!P(O`b@%sYRj57Eq)&+%`Kk1%`=a<|n)R_^Rme-1!ai zefJ(^+~3@J%9Fxy>4rEyN?M#jAlVn_##h#(wYGjLzVW!@F#xd@9^$m|_bYKyN+i)C z)=nZc#zW(!365o}d|KcEkz2KVtQ`kFAlwuH8>YYLO*Fx^6H17eD;?FpellL#-7Br%oQ;PBz2;pXK(z2Eh%WBd!yU z@JNh(G$qAMX_&Nu1#$b=HcrmOZRuf9W#dD{48y@G2g`yCXKIN)To+Pw=`V(oof^Rj ze;!`__w4%q`nlg>AMj6go^cUxCnO8UG$sfPQ*^H^MaM3PxtsT!SKHCDc%n87Hrh6L zsIgx$VD`6njFz^LaM@06bDe>RWeb_G`oQ|A8aCDO?~WU5&JAtWu&R2en8^*-=SQQu zuRp-s#W}Gl)&Zv%gmcNLnJS_%#&h#q41~8+595fVgJ=Zv9zz?X%jjhfb1LDk@r-U6 zZ|(0JAAx_y-lcqS0B+r}i`y=5*zj)VPeq@6L>w0=D4&V6K*E{(!$NKtJQ808&Y0_N z$evMpAn(l3kn0^Ue88Wj!_6ECOTq}V8O)h+#uQiuZA|1C2goO6QJu@tyP124`DsBM z9S7Q{dnMBsuNGXe^L3GyJ!AAKCu6Gi*4Fyx4iF)ZmY(i=fqy)!b0I)~vax>s^uk>* z=-9k{mNhBTF*Q;RCdH9jT3D@>6e3e2*7?^}nLZJJ9qU#8XE4Xzx$ARJi@#n{!yOl8 zrgF+Rjn;^l{IDvvy=Y}M^h+^XW>qyV^rwyoGtMCKJGwu7FnjR`Pq~u!l7YF_E4VrA z`%+8itjDIV>sO_nT#0(3opN`NIqE@bxVJHkpE!I1N^AVu~fQEbfxN zk0X@eD@dYBS5Q6RW$VVxrPIUOx|_$)ft@g@7EV>#Xi{(E)Qv9wCbr=mK zu>ae`oH1gW*q6;(o3}f$7)gM1|Ni1rcd&{PX7kCtnF*fHWJYT{`P$$NN9y??J95qv z7UwI=iD@g9QJ7B+ z#kj1X-88!>yO(FnI(F+!)?>Em((y69jc+=pDIdw*{;tifJMkQ88U+g;_sO;R)!~i) z=tKn;#gs`9E2~c{VjiqyVv0d@sv88~{NmxYOr1y?oX?@-5jQC14sYQm(X2AbN`TWJ z{w78B9mz;ZzZEoHfqGQgU^_iQI?b1u5jvqIH6{xis_v$#^5xC|v23WYZ)DZtCw*M(euX5?a76qdcDjuHz&+&{1$hq7MCixVOt`{N z_$bz|(CM#faq(dEbV^_3^*8m3F$USO!oVHx zTE7*HBbxv8n)SRm69qS>9zMy1s=)U)HqJ6nhmA|TElA@p#f*H!0xd}kg#aihS`*DX zJ^xBngy!(PO`{aIrwU3bLYe*;oaNenw6(eL6%JIc_TZtIPvp(akZzZn>T>8UUt9!4 zwC07gpWgY&{0(RG)EHAl?tPu_IhyR7k+a~QMluyyM$jL>5>79FviPhLSk61(iGdG* z07#{H7N@C-%)TUX{hsEvY*b>kXv|hB1f3Y4p5T7tJZw2Ep~#O{uPo6GDoTvM zwAszeOojR1V$=RU&Z>ItC>NwDvhuq9H@*;jC)_fN^B;uW%9<3Zi9xkM@v-wUVX?4R{r>1-?$3Lv zU@l$yms{=ONT(~#64hrTv!NKl+IS=$OP_fc>oOw>`bhOz=In^Om%ok9r@2hKmpxK| zGs*Dd;*%Bgl_|hjqFA`VYkmP4I~o+1_b@6V(2007CNmY-F|7#zab*x;z6bQDJah|s zEgwrwT<;i#{rOMOeM8OAfJ>e@P~u>llFJ$$;iE`uw6ak0ftx5q{~Meprn&xoTQ9=_SSX+Oie_YcW$jwm%g z4ejBYDuLMA1sz5UJs;%cBMFdnXt37GrhJc;R3-jq*Jgx^M=%Lb$GNVtxU#tp_T&w? zHn$5iY&a>VlfxXBPf!uI%D?)dqLnEvy)G@cxm!B9IGDS+x;Hg>lNw!+;Yo>- zP$Hk>9+fv5d)0K-ztx-liMeI{wqI{={r@)OtO}km6B0J(8lxmPk*K^dr>mJTjoc_% zguS9NMS{ZKoH1xuExS|4H${gFu-$!~AQ$Al*rA%Kon^XHB=&hq4q+eU)efdYKqBBH^|+pM=|X8%;%dr)?Lcv5~PSAaHiTufhNW0aOQoN`vw8GFr}U z3$E}B@Tu3#y{RVI{^Z>MI`hF&xfoN^^;pQM&CFalCG;&WE8EqKWkW)X$If|Bk2)@` zKNiE{5f=?VMLpH!TnTH&QFFl;d$~lSf!MyBhw0lU*#PL?rcB+_y}R+w!b+_oq1fBO z-gKM!;9|u1f=vbc^{+;bBdaOHW&fMguqdz0xa%6MO8|S`E{q{#qxhb!|Ion}^P_gYVcz6%hcgLmYqOq{!rM9|#^Wl*Ep?(@;#=KRLRGTqSYfExc+QzS-P@GwOL_d|H%->Dqd=gtI1r|S_ z-{KpaZ@XO>pCq5;em()E%Rk=%|j!ZTSiEMScLAyhP)A&*m{9~MNxO?&+}pPt!V zhXmu^+3CVK)77Aw95JzD@0Pz{9#8$*jIiL(FMcys!sBL|QF;jMZhk!{3^if_H#3=S z!oc7*pHfL)RUE0DuEw4B+xa~ieR+LmncpJ|rWoq+MP=&4Kg=zWV6J+HZ%F)sp(fDV zg|{ymlQs5|gT8)rto{K9FW-JjZ&{44uQ>z>4_Bb@!p`6j)~Bv2_g(rN_R$w%f2(br z&NlsCv6Wnb{y3{0l}`px_8JiEyGVL3!yB^eGt}-%Gx$)Su4l&_> zQxPFxi}&ms_qr(oS|RFSC)B*m-tlcM=4Ggo!wr|rRMD9{$>qgyFAAx-Yf(%2g!-Xy zUJP^<&DLdjXJxtJui}|}3ZS&MBsKMzPsK0|^zz!zqleLbKMvtVuIHYamxn(&8;+li zi(@&-D3e46z2{U4rJ$ZbP5GT$9<>p;5FVZjoH$UU_%B-#f;5A)cjClwfK`K7oD7o4 zI6X;zZgQG|dY{iC(h)8gePfzKO>jMlfArw-4h$&-;eIE@1k%xY?u^S=}U-qlzB4RU&asCic94E)~V0?3B-m@*4>V4CJ(DVA*}I4 z-N_SdHLDw#abzz0SQRC)=-U6~;(Ydu^P4=qRI`y>R2hzUrs`=e$+6XYk5A3hnDobo zgim1zGk`1XyEs5|6=_Uk%nWOwN?)>_BSXSHeSsy&h>#QHg=q@x=%MpXIXBnEcbP@e zA1zIK9|c0BHp;Qypr$}U)QQvl5>H9rYSJjo4$Bp*kpZIpRcb0h!p7vQX^Zj3&gmJ9 zQ`H_03IK3%W~?BS8--|>`dZMmt=kv#;y|@;?6{!wD{|&=46rr0IDOAnwM!($o-VF1 z_=DT{b}*XSL*pL%)>O(!(l_@&87kD>EvR;J`(Tu=6`dx!O;+!iZBXHhd{AX<#tSFc zVSnr4=S&VvyS~tsPcO+6tj&88H_>0MU+Gl!<>#9A_`B_SFKZXFml_JaXQn5RK&Nrq z2#c)i@W+svXT;=Tl)TY+gxaa)8{wt`1soJ+jCFKSV$V9>pL5l48IExhEmdq=%-F7% zFf~6>WgXJ)sMZ5p>|1om8UC{bp%Gr7kL88eF)hQ>Gh=hwnWhe6&{LCL z2lL0z`Z8l)J_k*Qi;-T`q`O{vR^@}KeV8OV$s~EdMy42X%=o3@W?2M(b!}c=qCEJ$ ziYM)#e5723MRp~jUrNJQS9bPyb~iKHl%2(`@z|%+lYS;+fH6!c2mS+KC3aSI;Q}_w zcUtAE|FRt5Gp49~flh%xYJm%t{(7Mwf zF;oT8cXlycSZ;I}t~e?|CR=H6r9X7sm1CX=@lq@Wt9L1!5nl^$m6eUT?07a#`%Giu z)B3YdC=aW6xz29KJl=57#w_ga{ETf;Ovs`AvqW zcn>e|YF2EF^H-W`btmN|ylx7F#!{v-d=>}*@x(#)I#1TO7&JU~a*bYrb~_1-M5XoC z&lXk&uZThBZ)av~?}KCaz{qlnojt5|20-iTS5HhfC5#J_g$ijz25*l}!)s&j7QX*<~<)J;2nMTJ9e@ z5bQ!4#$U_-k44mn5ss{-*iy?*q#;Wc<9DT5ZiSYF_m2j;g4STsndYxQ3u{Xwo}FCd zxC;wB=Sa47TZc?*B60qKf$gS6#icdYg^!WCi8M2e`uKF-?8=`}NAr((Y|pEK_`JD~ z%zX=9{ofm>M&-0p&Ny%#6J53Ezmz@8)2=YH*t0owb&`uPr+AsUq~|ERywU9Dm9h(a z$0Uav8#6X;j){$Wq*O8If11@D&#W#NamK<XnkU4gC2y~VP*)UJzn z*X%BkyQr(yt8lGT85S(dzRHZPNtfAno}KcxFS(EfP36VHmq%44klhJiaxgTDbR z+&nbN&TZ_b6!f`FWJyOqlHx;=ph3T8oN?-0BC#BmD8b^7a+B$&%KtOgpWqAfo$-SB z)W;%zd_6A`>CUsovGrU8({K99S~7x{+a+@4DVc7>VUP#1R&h73gCS)52jDvnC3^ZO z#W>9C){*NKuFqekgk0&B^rk|;9OnlE01&}n{*^C*DezQE-L$u+ett0en2#Op?4(^- z1=>W43Ai)qrFDZ41!)wfq;iy_(5C8*uNm7Un4vi13Am&S%X13Q6VUkDevd}B%rFy1 zQ?(ID*ESkvU;2!c#YYLWq?9O-KrmzfVlzDCgeU3_r)p4t0Vc8n5&8JsADsK6bKfss z!L#^*O1n%ReU^IafZJy78+R1fWvpF(u-yIP8QSeZO9t$UFFIyr##<|DuGz6x*sAk6 z@9sWn#d9@o!$hs(qZfLQ&MJo$1>Gje=Ei(t2?h2g1;xBIy(JJz&aHb2g3`*U;~T`- zmp^%d$?reRX%72@ZoLgsZqA9({NWGPfr<`99ERk1?#>FTVtyiR;Q23G;k4W$o13+8 z$OA=+jLM;kL1f8YP<2l7EBuuY2SZkizPQ9Xd$8*^gE9nWDJ|As580~_IJcAD?hLy2@``dZKORsyqg@;HmZ4`uJOPx#$)f8Iv4 z#<5K+HgnmSEtd8by+ALB9iDAkj3!KGze3>fj!LuQ6#VE1BR_m}+1yb4kDa{Vlx3ND zm#Q;;T;bBLSwF?qR~+rFIx3u4Ky`B~|0BV6x7o|FkBhEn_8=FZ-Ff)e-9P-wa*cx8 z42EAxJ7kQv*Q-mf;L}G*aSqpHDi}UQ9qvtcD%?l}4Gdfuyi&2eW8m_Ea<;bngM%=? zt5TXZHJ$cU9}iWL6iv~y)<+yr0lo&0Ma-cc8&|N2iNiQ$=@uBh33K$=$O?uq%yPYC zN~64R8r)hlSXdH{$C5jX%5$nU8MZ2{PZWOB{xGoC(75AK- zU%sw)|FVm7CZ)#C9~DnGHtu-8@l50N8RK2@Pz!3FaqU?66M=~D;S(xu;>q5PgHZgR zztsi9?~bTEFTn_N$Jlc&aCZdCy@t8lf19V1YdbmNU%RR9Teyc7ca{FHZ@2!+Dc(=Rv&DKA7>4X*Vvzftz!0GZ|!5Cal7_m6-_mLdpv&tGYnmnf-k;wDjV!lm?*|n2+V-`9oxE*=v{d<6-v-c zqri7SP#Q>jYGWYEU!M2*H}PyZ1JT+E&1Q>#T`mUvYQg~TsD!Uph-9E=|LfL!BeKZj zl<GG5R($5B-Dgr#!bQP9wj`IWphAsd9331Cn~j5%7j7%MyM1JC z#u3gXY2BuJasrag?K`dsNCUn~66!AQIj;%FW6b_aHW-0t`#(k1fS99dPOEY>CR(ps zF|6=gxdQw-4R{&s#?44Dgq6A7DFI{t6)g1@^c{rB1>8b!1F4z!6i;dRe4)DT(AcRK zZ;>NuKaDZG8;*HdcMeP3blmS>%5YF~Nk$mcCw;S+VnfIr=v@F9o!d_@vXg!r#z@gH z%rPdig`c?y_j;|L1Y^%!xPa~QlFMJL4P+q(fDj4&41~%z zrN8M5HNCz1CO4o4ka6~50$tf5AHA?DrI=WhCfT(-)_-_L4A_{6u)QrrUnD#k_;+aajw4D;y;qa}f zP+Pm?BekmT9PaMhBGp!GrzCG@dghX9SEMl#NcA&ECcArdgOAJ@T9`XEL+1Y`BTK5J z&smT^Jonuu*L|Y55c_d2%DaY8mFtX?@k>&SVNARlGg87+1v?!W5dmpA>r&L)=^87p zFW&8>p_3i#j@xlF7MG0j;*w0}-R^zArfaAUxi}9FC*z6z_e+e_go8+N5=y-8g( zcGVNsJGmCtIXQ8qXA)wC0S+Lx(W&tb`j?8Yc}O`bI`pFn3Fu`UNSyHNMgho%2*jp2 zst0)0gu9xeHLwX0&~YZA;aEi-K6a({!eR;E7*yqIKu&HBW@5e>%4Gpm`~iDStshUC`Ats9K?sPQ`FPwW>@{5~E{cTNsd4ntVmfHs3|44G3X=XSCQNf6Tm zL4z*!r{pO?tcT;+hy`=ke%jo%e>AtIGyAuwP5Kjaf3LURyViSE`Awa64zC1KYmQDj z0H|~9RQOv&qBuNm$_za5viT=Opm^=!gEAVkL9L39&d2BcoZ{#p9`!2WfK!`P6ssoV z=CE$7J%dp)P{#!utYfOAxXlUAXFcd-C8Fa>6>-$P>GFEI>|EaXMbUhne{4-8tKn397<`At#l(e>#Uk)(?* zOh8t1m2R9Z@c0wFnoI&+e2)b?eY0-5%qv`{PQV1oM=&DW1wblJh{})9+=c{+XBmUh z=q8qN`LqXs)N!#(=Z+S%L-3y|%itDN_fr2ug6)JBxX7(}FUHLXL%}Pd2-`}0DN5jG zrQN~Jrvb}?iJ|%hLHY7;Fm8$^i(wnv%}Guccc3mYR;#IaU?@HiNlj@=EZpFHSIvYn z7XKGNvtNBOmg0Q!Ec}n(sgFlPZq(Z()~OA2Lodf`4iOVRd7!vc__-^t95U5#KHC zj|-=!Xn5vm3m8vOH#onp&OstlDqx9-d5pzYL zH@~g_<~MWlU-bQ$0_oUtSH21%Gspjvn9358WKQIpgB=@GO3Ow! ziwy=FH>VbYLqvw3VYYN@-10Ps1J7o{M*r;GKhYtVnK!SauYS+mcg%fHo>9s~>X9^I zq-kPaV^ckrrdkq+J*=`2Z#UG~A$bT1xmvSkQ)*4wUDk$Y=RA5?I;KLYvi^CNPRsTE zHP`5#a-&ZEkax--fhjQ;DW&L{Y{j?=9u36G9)u)_8Mv0Fw@_ph|ST9uYW_B zYczcR)wub_U}CmNPq*b;P_V)?%uh57b&X~^xt35p14E@MZQ^6ar79nhG4}*)@Hg)> z=i;U0%N2to+OrrXs~v*6$=dD4EGN|<6Omhk^$tf{YEDR(a%`EV2(nLGFgvGzlgbIy zJ8uhf55E8J^{M@hxi9SazJ&}EIAy`>GcbRqfAiqGsJi=8sPzcMQ&bOC{FEq!(4X<# zbE)=AQ?FZ2?PX7LHa>yJcHOtN>S8{~93{{neD3EQEL=Z}yJ3`9JPAwfJfzXiE;4<8 z1Q%2L#%ZA85Xq0=VbePqbLxykKR;TwhBjq0BJA;&-qwM=rTE;FbWzvhCd4@!@;`fX z2cP;6`mg>fx$p1_(!AEQX=k^L99}hHpuxT8F+&ZCpaIHpYdk*ts`nqh?#`W*_35QXvQsWZU|OhuWL`7$9U-Y6h;ATEh?A z*~wSx&(%dsZAdlqSCgV46=~<#n!@NU0_4}T4M{UE4}Z|C+LhHI3Vo@yW?ky7yG`EZx1A>HEFm{Rj65aa;)u=s$dbscK(_XntafDrL)} zFDRl@4V#hYYCYWc{sEm88@r|U@E6n`F3VznEEMqA8y-Thm)?%~h;!!|)?>@KPd{Bc zrIF~OYud-c%l;f-Gsi zdH#nnavO{MhNO2z9@$2m`mC*!Ot(p_ zvvni?DKsebCJ(*AnEq1_Fi*YszJU4C4<6yn=svnvD&u}>#MA^NieTu|ZQN?F(5x)K z7`Rh8Jo_T?H5%~Zyeok5F|9@>pIR~!8LOBi?eQ1ClZZF>y1#I82I>jlu>kXn`~D@G z1*PM|lw7{{g*@*^uLg=zqLjey_R?aeIKv(n7q8nhiMrrD29$dhJ*;aaNyaZ2tmup2 z8rIxafdb~|#9L|1qBtahLYmK!?~k}}Hi1Cu6GUMDeWO%XR1wDryS6j3ena0%ii&(_pI$<)6gQ=h0UVc$?%?Qz)#>B>WmS+F=T?Xli6*yxCn&kaTUylCV|nG2jA@2U>^tj z>zh{k2|y0akT9v;#Uw(&XsQrBK}%bN?{`s2Ql_kO*KtdQ&M~|Wq9Cl zvTj0z^ti{%KY%Of1Rq3ThI7m6>;G*%-?!MH^c^$1(Fq9=@etzM7n)N^gQ%yO!nz6u zo{+1YksoFtyOYBCo?(7C7ZoN<%aC~DC5&zSe)F(rLQ-^laQ~hbIfmr?;zMWW2DStP z8BJDYv1na9lV#47y~n&EOdN;-sZk zGt*mS1j>x#Mr0NVGbfNxW<}xqimH_1n-dmqnX0)#;c&g!0av-^geqxIe06kaQ=-rCr|Hrd!*MoO|P0c+t+V$*omNGwDzBSX>clq07TTgkKn zi~W5RRVv97E(JF*^X~s+2SA)$OyNtO*rOZ~5qBNx*k*qx_6 z^`t};tIMw>5jwnCeKz32)GI>uKDS|%7-m_G+ z?rw?B!l8MgD~smK3)3e<0u;gN^Q(VRozRc!yemup=w1l0<3YyYlscN>qSNh!bu%T^ zO^Cm^^kzeDE7i;@jMWQyqMaGJQc-0;UZ$j8LV{9J9|r{n!R8cc!z2RP47W1f&X|(P z!gLD&IAJb;k_zyktXPVM^2C=VcES1{Mel=ywW;1(l*`iGuxfl;TFE%9Gp?3e>s5G< zGRl>~-%kGc`t`&i_?Vj-Q$2rvJz?lP6Hc$UJJWDke~;vN(ZT{$K{-TyI8$A?7A1EJ_jbXU`I(dz zQ34E5jx?9EN;tlCE_n!eE1f{{6QFvR3auYe~FA)hXuku9~J@r2(q8C9)ROoPgeV6IOg<)AHFi%m_(7aYg;zZ;Vbu%c!mt z(8bHTYAA%S7O}3DFC^S()NI6SUN-XkwXA#Bu;ZAQdSE%rwJ-jzxSC+d^ly)QzwXhi z)DD>NLv0u8mqIulnJ}tRe@hs$I6gi1WWI1nvZCS0Ndf7xL;9vhgX8Ozlrk7{l4hLc z!TW{mDc2-Dd&{G@p#m?QDKXsQ&7b88{ckk-b;|$;vA)SWn_K#!Q^g>GL?ICk3CBFsV0VEqXS3Kykya6{x%$ zQo_SbB{vkP=0K{^$KAybH?hacpQUgN$_z;^2X;9v{Or%jK;*CX$ z)2>Q!yS13p9fQ~3;FAR{lgU%J-T6~b6Rx;x&pqdhJb2)P)nzMCydflvuGR584@y??yaKim!ca_f$}T)us0ct~nw zp&~W*<@wOm^-WcMfM>uAs_ifc4|pQJpsBhUus^3qVr}mA_RRjF=25lh-=1t*0R5hD z0e z!k;YMIOkcA#NNe)p1hQQX@%iGnMHKt+4D0>ZPtwb%2xn@Zqsc!Iv_Rgf{tV(My89V zQh_=X3F(7bSc;<-3^Pufyb(HGm%sSG_**y3N&LLIZ!bDssW7x@Ox;0Ou%}kraWC?c ze$A+~{G{+Baf!#@DJy@D5Vih1w29bteOC2bjQvC9B=t*c%ltG*%cDQKHQlG!(t8Ou z^d0;CTbKTw5)NOazxevq)j}%N^_!KY<7@CR5%f-4VvRTT#4{-4gVQNrDakzEGylm` zN{fZ$oOk&IS?0*1_^YiLf<|F_bm%)lRpZU^cw2fFZ5bgpgb=dFrzchqAf0C}skS2k zTsGM`75-oE{RcTTJ{L2S2G0Hq7>QXoWdQz?c#;~6SIKJ$eP98Sbd&LpubAu#_isma zS2!}Zd^C4Q@8mz0X?nBx38|xKo`E>eKMZ+n#-;=eeO>EQ?gD zam=cbo}LSHsMw&OE3bc@DqomyI@YC5d~bTNruwU245-PL^u}M$jOk9!2FxC9gdPZJ zi(vo{1vZ4t94!4Z&%Pq=k}6Fn(S|E4*H0(?t>;~Xg5|VFE@EW36G+ZwCTG|LMM#95 zr^Gx#X_BdEMn@LxJbq&?H>L}To``m3!v~KtGAT1y29`VlTuD=Oald!^PPE(DH|jwS zCFafMEi7f0glP48e2KoDyFV+w`Kh_zH1}si!IK`?GB8Ss0qf6$=)|D>?Iui3y_Mc< z@y@J`nfep%5V@w)8mWtp$*L!5-ilBVHCpukWTq|SZpX=PeB+NZnQtMGXi3Vk-OKsK zANPb)t`~?*Qs9lV-8Wf~mh z9j2j0kuC~7gK@YfeE)PtETt7I6^%)?^M-&N^WH<}U}Y#sCM}>LpkMHXAG&=jF@xmh z`atct%TlHENP!7lQ;tVIO3AF8s6cAJhAsH+gg1%L;oK3t`e)Q8-Bg$K`nlg0I(H)G zL3axBYMdv zo!euMY#bB?_K*4?goBJnth@Aikn90b$L0hNOpJlw_tQ9$9aOy+y8F9oRJ>`N_2D#pxS-ScwS$p_Ho5s*$KLNZinN`;^9#qh1 z@br9kDMtp3W*>Y~qp3ZciTP8fo|zd@KM;dB4)Lfmc%8GY0Ap$R)zOI2K@1TpcxuC) zO%_Qi(MbWj^c+dMWenb;26m{RCDMbH(pw1Ja*Q-HA?3e$2C%`%*+a zxy>L6R;jgUx^mX-o{5SZk1dd4UzQFCm=;BTL>7VfpTP)&{p@Q*!`Z<+2~JK0ztj;|dbogilRZ=H~#ffqj3k;>ZF(gpVb}6qmHdVpOa56XnNwPw3Xx%DPl`1SkhQ@hn$_RqtutJQ* z-8BV3n$;DKgEmLK{oQZxj~+M*)q!^jYnZLQJ$WOwSfP6Yh3VjLMWzG(Ge%sI%uY-; z)T&m^ax#CWjztYFDwQ2d@x(GLt*BXGzvxxuQLext8GP2YV;SbSCZpX~>`Cb`PvgPq zS?>-l=vzq>`i>^HtrF1jCTcG%7={;j)Blv(Hr=;M7Jr#6eu--FZpc{Glv*T`1FiV-A{oQR!N>f5%ePJ}dg5j8`ejF;$B4526@cI{wYYf1iO)QIKk6RB~WXzPXlg3sxkO zv+t=N2ao{p)1d)lP31YB4fB7FANN6h7q}Hs%Uc_*+!x}KPQMP`#K!Y4mVU6W#3dAR zSX}IyDrG9(cmV$d9_ex65x}KXiT|(*i7BpMk0py6@kqHp@H%e7z32K*Kjn6wzBPFE zm7>Iqu2SQC`}XM8Q}||Z>lTg>jbC2i!6=$+_ZXZW+dJJGo}Kju$A`gQ@WABI$R_Z- zgB+TuZLpv3k}v{_B9lcc7>Lc`T$tBvEbfptoEk*Kw}`BMa_;BF)vp#+e_JQ3MVIle zVO&j&9{Y0L;I~le@x;QyXCs&qX_Tt7DAUWZK+8atY;yb&?8-|_ZoFOjB|hT)dx{=f zHtC!8cB_C`gxlX#^oJVaQaHKt18zl;qboSgw9Uoi+Z>%PWUC=tAI4^V5zQ}}o%3U{hM!N;L)dr%mF0pxX zz8Nsb9uuvU%;m8UzBbENx>I!{rs<@oRPw$9)ABB%IPEbp3jUT&%9`gAuIQP$=jTsLuE}`@We$zq~)0H`0y}}r-bglbR6wF9_!)Y zi&H=DI_;0bqi#sRU{SWzaHz$_Y=A~=fz)7A9 zYIDcOWrPAB=Ea|kzP2WoW!1Y**BI0lH4)d#z#F$sNel5445d~u7^q4>^0K$DT7YMz z(Nx8PDoz&~?(Gdujhhi`V(0XO{!z$N&UJ*EXMvQu;()bANElt2Zik+kx)D4NyOL1D z_r;gl+R0uW#$SFtj=Q1Z^MX!!B{f@WeN$)czG$k`FY_Yf%k%5P()rD!Bm?J<4zHP9 zk)Yi$pvBFn#$tDhfbP@|bjg8@jm;Qwpp1XGJUctFR>p~2JLURg-=%6Fv>6$P;){mV zwFBdq?7;XDy*Jx*UgqC)^+3(p2r)vvREUI3$k2G8IT=?@UW^m*ETn=Hkyo?hV^3UR zN5?xg=#MT?OygZFRSNZS0Z?bPD#2J6D!BcxSc?X)U9{8aJ?A$U`!{b6`|o9cW7@e7 ziLev}PDaG6|IBmfNF2RSEh0&>gdPyO;q_rkak%A!@AU62Pa@(dky_S)JgQ4nWUm+A zEcTR1AO?i!l%x}l1L5+N8TA5V~d*Th(OB25QI=ZtJk zna9b--GL4CQ6$4tRKuBQQHe10mcUoT6*aMrtx^!6z!j$^L1MWRf{oNRd{S-0PueE& z+}xM*6#vqdc2w*X8QbZE=b|LCLA<+FFBkoppT`KqZruCQh0bg*&PsdwHS!eA+7Z(w z+A*yT3~KmTN;@dn-&;&RyX1cq3I5v_MX*qS8rB45Y~xUZowbFL$iq`@XuAty@08V@ z>CeHs4gyAK)Kps~&^kD9_P~a_r7cj%bXP_(g{DSpK4aJ+KS0oDI*=28@aQm!69q*W zAb03L8QBQaqYF0Ga|Z#*WPZih60}<=j$SV`iR|m4=1e3ak0vEz;%v@pYF2gsY-dgx z`g{kY%&AEXr>ey`TbNbA1D|6gn$83=yd(FMlFkX<%ov(=>K6Hv*HjCVn%3y99d0s# zorr#>yEb*X+a;6iEx#ZFCB)R09P*#TA^(A@-#-&w9RX{$vKS(ov#|!H z9by-SiMMV~SV$hpjM{j^8~&bQonaJz>5O2hVfb-)qBL}4woj7===kYMOS@vTsIFF8 z`p*(v-g64vvs6YPm|p$$6%xYu?_^v}G^rFJf6)XxQ^GPN39cSfyWkPYssxKIur}H| zAmq1fPleA$Iys#!4#?GI1-LwFTayIR_b6>(b4ld{T;a##B5{gBT?{puZlX})w(+(t zi{`FvEZw;2s!!cY$G*AvNUum_K^_!XK#9`7Hn;<&$13>(02newjpO5eaX|yZ^e0!A zz^BZz1ioPg^0YL8ltM|M0#_&jjHWQZ%>0i zUOWo1Jn8NsH&KrOmqGSx#qG{?;zKze{*9kprX%##UuFjQ;$>N$81v5Bzf`iLBAUW} z@bIsxRz%IjXz8p<`XxrovzF~m8VgHj8k}cDwY7=&p4!o&)zBy>#SjN8K5J%X1ZIn? z+Ux(}y&YnSrYTKA--t0^$;2_fXbNo+H__sfmIj}?)*RfQ$gRZxx1s3yII@HYah{Q< zIKCsTCOzX#U4&?S=QiW76x%<{==e(sw01-?@0%RO$IPJlWiuUlFcA4~oc1cZnG}ZiWC=XF%1e4d*t+9KSgC-{}UtGxs%f-&a(= zTNvDBWv`nElgX%K&J{{u^16t4OljrmnwwMyrhdT-5{yZZF9>LelayX`eRnl=xlODS z@ViuJ1Yit0W$U0_r};x2U)@VD^M}7!mrHV4TEDNMbRBjH(=5jR6wbN>jvf(Fj zP)2m%oP;hAK~X5F$o2br3e+6UC(W4b$HBqVzJ%|Gl{=%&a~mtnuuGG1%KAm_bhUBd z2OuIin0jWjw?Fm&nmzPC$|2kp&wSC`?{8Gj)1|39dgXE7O+F5-qLxclf@4~H6ta`P zhmAG}4221W{WQnSs}S80XgLe@OIXbp#04{2w)Ut8IS)g*$oa*0Ufw1!8Ll*5hqGxa zj0~b6eJi`c8Yea94pUC9-JDws&j!yI@U4Rp* z7Mi+x9rL&@t{dcZ=`48N{YO<77uV}g?(T>*@-&fw=JEvleW54vTsu%DwlS?e)Je+K zl$sZ)TF)r15ycdliuS7rwG841)t?2-p~75|HgjTS<_?YwOQ8GAJYZw}+nVl`;rCGD z&KAFHr<=sos5CEmjz|-fhF5ZOLLd6LYB8V#hNEX_0IZK;K0+^SOkZ>JrUC2y>!&+g z$H$vc1ZRQ+9GkrsJax#AE+%hG_C?30rGeLc=W+|-My?sG>`brp|2g+RoA&zQ+9o^0 zT!;|%Zn^WU>Ue~$Lp)~giiVxsc>IXc1n03w;w`6yTp??9FgzwpUVsy3x|xHI z4@U+9MqI=au|#?LAnd&xH%+ffz~J9%RBoq=0_DDt4-0@!nPZi%2v#AbWVO8Q)fLTf z*`}CEJV&mknEv}+f+kknwFtU1`NCFUrAfo0V630lmRV;PdR(8Aljw%ygTPBl9n3#* z`cNhYpSqv^^ion~$Z3v7&$5ukWuqR3y$5}*e^{l{oh!j2`~!fhs-3i=F55xqW+NKQQ+vqd$uV$vzM>acK!%8!i$Rh$x{oYTxtg%vFkg z3z5s2tqVAaOVkoj;R8Gq%bK%uq|&f@CzAV^+!5iKBUD=9!AvVuz2qOn%zOJB$-Q;? z0u)mh=`r@cEMX$bNEI$U6I43R5yF8fYrUpDo_nyn@o_CCRNc;>gb5JS-u70|3a0Fv z!A>4fA2OP-sHh8X7_4oX$tviHO*Bk_P1L#jT0%D7+FTs2-}K;1F`yn+`zi&4R;$EA z9;O=R__*ZKgP%aU=SA6)=+mjHyngTC;QVIjCi|XzKhWrPFJ?%uE(cI43>c+YbTykYI z)E6oP0z_~gFJvzVf*cP@=Z@)-ya!nb&(z?We*bIx!#8-ECg%l2Qo|3qNranf1tjLk z!gBYA--rCEgjf{^QP}f0Zp098Yys0fYjn$^~4NUP5n&Z{63m`+#i2s{>XqY zy(z;!osLeojgPmznJcy0zra(PZsp3JV@YC6#53k07_yq#W-P1R+oA$gY?eT2Xt!+1 z=+38pfsFq6+*?$heX+fBfBuT94KZ)jYV;^=ef7j6YsRj`RYkj&PxJzXGc?Oj4P5CI zaj5wSO-W@C^huNFDA>z5NKGlw*M(A)n9o=Mk$qAJ9p>^lXBM>lrmdZ`RXtd~REQkO zh(cRX*{MJoqE27;U-K&J)UsOwYjQ~z2CDLur%Xi9>pzs2HD}$x#mpRLrUkX0wJNq% zVXKGbQU56$J^Yg$kb&rYN_nr8zLx0hePWZBsYVIT9Mtds9ZaMK$6&67Obeqcz>^AR z^$q!I_v{)2JwX{z zG7gn*aLwaDjpcF@2q&On_I5bRL%S~(L+XHpA#$TrL6Rkz1wM@D*5xgK30AzW>-h83 zvi;t=j^Rwe#&Te_NCzzs)bt@;W+j7!xW$ZYgo*sXH zFIJb4RBc26RL|V!n?%s)fSsKT5@aI-22g~sRq1;~@z(tVwT@~HOH{JpD1t{{o}ZFs zLn{*q_Y~DF%$uP%mVZ%j#-+n4x!72?D-N3b(1f75JsmqxsWB9sDr^{S~F|rR~HUtj)S~*?V2vIJP7D!24$J zz@GC2#;dm1WM(p@G8jEj=x>F}P;;GHs`{FPJx>9v$fcX^7KOFEy$7h9&k`2zkFyH6 zYPdH)^{>RaKc?^c+jP+V_)I&5Nzgw(#V^t9A-avo<1B^;QAt(@&qBwY6AQ1yPbKbU z6`WpGsijg9Ox^7)v#aG&*dbQjVTqi>CPBRXrD&aB>g`}7yWycLhEd5-ux7ij$M|$( zmj|5!N$ULKI}Z;S2D%*axK{f1neK9c60J)9Qx6E45u|*v%Bv--3aN;)<>-tDZ&V*e zx-;Djo#+arQ|03AvJ>i{n&?9VI^GEAeCgyQ(Q5G zl^Pq7tavD!;+5fFk(ka5E_j<#F@OusXm}QM^3kiJXdXN`yN08(CP1)Y=wx)G(fqOw z5KnF^a6=Bnbu*)3XxiEfJ5%<;}j>myp2A!jw$5106*uHa>JL_&T?;&6_67>=4;u~L;%Ji$zE?O{IarL2^=X%;{WmhilYVKJqntb9|-W#))d^DXvza*J~`{NDLQ2w+w zr4PJ28rv=4gYo|GZs2kLjw&sCOVQnz#d?{P3sp^Zmk+0FiZ$S|F`cQU%5eVd!tx11 znB|Qyqn1(cVfF3QwZ*3TR5e$*E!I^DDhGOrn`DUJmeS=Cy}*nEe&`Xq_0#mxs@jY9 z+YISMt@@(Q)^$vJebmFb@`k4M`4tX8O!v|f{v!xg5J!yZ|2E7y8Acz2>N2v4lm`w zyTm1c166~jtKloy7Be7w39KTm;(Rz6)~JjoPNEnx?zI#`0(AnK)(WC+$lp7qtfaYl zk_i4(c8hrMq4-yW<2Xx7OhX6lC|;ZCQgaSBHrLXB4a1@Jz;N^zA4&0n^MfyP7m!uk+_d2&NlqVv^(vpMa98%0zqGWrzW*jx zO42}nVM*##tq~wY5wYR6*0}YKk1EZkj4SyTNj+(lI6M&$?!}JLIg+NUHacNN<5l*t zTcy&~uh2!wnvT_d|DqisKWb9*g*fJGRI2`9*|U;rq~Dz>6ATiYbGJ$-w?j|4w;X+t_Eyvb-yiotkTE>$IX#cf>}6jgH- z)ztlz0sS74x!Kx*2a;E|8W|;G!X|gj0Z~S|vcgN?`$p^t7T(FYzm?7Bb`HgI2rqDD z1W=-HGArU|EpCR}?r4$ey;j&`j8y+v@5XnTuCNI|pnm8v5h@K-;}wpM)rif;E36rm zaGQ-ZloNycuMg#t=K6;;V3f>GMbMwaQ~*p|LZiFYMz-ns1+qB*&e%=q)Iif=5=tTN zHr{^qt9(trtbg%4AxpXY(a!ckCebsOsR-~l^^_Qru2y!@i5|_={zQ%1)qK6ZNpcP7#yLtGq%2O&S-SW+>I4>XdOAq^vRs zF*`!#8nrGoXI@<}oKzQxM#u$Nm^ei=1U?J0QB;2!-kY;3u6nWp_dDatrc90?WBbg4 zJUY_CFGheqF%1lixP@v}dS#N%aBzOZ)=z>CVgUTEUH75}|3HH7+`hd_Pb}JDkOqNg zomZcr0v~ZukpEnw)$=xx$asG*u0!lGSE~PxPqTd4^b{D?-uq`)W2#ja9u&``|0h6z?DeWcPz$k6M zlU9!?tp;#Q)e=m2{mzra9IljlY6uk|X)`5dQ-Q+40C-$o*uZ~S` zuy<-|k)B(AV`7%XLOu}nv2RsvQ94eE)2idb-S~dL5y+*A8Drotc}AsU$($$-JviEv zms*}~9UTg6$j@lJy}kH6DXOnl(?}`=URxVu)kPKMYVfw?JUCB`N#)Uc^lM%siRK zLJdX<6D9DtcwhMt5(p7PTa4;KcrGldNAp6oZ0QJ)cU730%amxY967s>SC`KzgkJBa zc4q!tVO|=_JhvRPqXru;o0#K|nlTUz&DTx-<4vZ! z$J#l-_d2g)_$CaerWRF+wJXPLrNgIS^3nNOJ{Yo%j3^2Q$2$%p<O@PH>kzNY}P%BSS-07L)Dq zbyK2lRz?_QY$o(S7hC)T^YPv__ob?DKU%Q`84ih>>~r?-DgfHKvJ)&yGZ{rVDxw*n zhIMsvFHGoEfTUPrkg^SqtrST9m>HMxFum+bf$l#*`C^WjPNT}HjW;^ZILjwq&2u@w z_`W#=IWl-Wqa2c5OhGvB(AQ;Ul4l$lZ4(*NyuMAaYH>DESL>AtElR)8A$5`}I*4#4 zqJj#zshoK_q5lVJGL=kr<*}n4SftEXksgyN%V4T>`b>O3%4C{obhSoUj}d;z0wJSEKiC_k8+x?#6#B8E zYyDfbY0WoOzdfVA!|g;zeet&bk7%A9`xTd$c6U|1cptu&1%JtL{u?zSpQxJaZ-J5i z*v#W-G%b{p7AC^JQ&-qS(*4r8ot%7jq2;f=8%@xu5xRm7Ah=kld61NcH}iW`O&OF6 z=lJn!TZDqX*&uOu7Ki*QHSy_+OUl%^$HomYUrJdn{_GYQJQklwc_0eJltcRJhw6Gz zhVgh9sUyq;t2cg%SFer7IwifnQfq#Ja3Z{s*b64>N?tAZuG`FE?+@djhd42^LjE{m zn(J`}rAwoF`#W3x_c0{%*}hQ+7^Zj|rU*!|=n}Z&8wZRN zbOj2g%I3|aj(XeQi@sU7?(p0eto<$%BPfmb!O9#b1FEE(9Lw=hAYqR4Vu5s|$_z+T z1t#hRf5i;jzpIXW-v*w~5tV+6Ej+x|bp3}S7neOVdiVWQ1VFU$-iCbn?W6D*nV3*a66zkCoRy}QHc<$MjX{YqP?cK2=7Qr(W9-(YC zdQd-#436uZun9Fj)QciL!tBdvCG`12IDHi1fs`uuH(ps)9pyc3=WMksr zfg#RtEXPqU$E>x?b#%`zF+M-1jiTy8?ZI){H)y-H^8}K0duZlo~C2(Qp;kcj) zqRf#me5eM7*1W`2)eSrxyuxjPE+Q%Wu0?;P$!t^nHe3RzFD=eztVSFp-I5tJF|bqY z=gfutNi|L%n)_b7z~2;EG`Es`7wNG>5&oj&f95QP8LGmDrl^?`(<-w;F*Iu$3HlUJ zBWP!xg+c0!EWyBDoxXSpH1XJObmu(O$u=__RXXuq+H8FBtRBMr$s)jLMj0hcV3gL1 z;*(ZTl7^ndCD3ECSRRVUy4$XRh=(-?59D<4siEPN1f?j<2w#|N zZ|1@3k_8i@v1rWlE8|ZN7En+o7YAaU80<{UH{7h6TSybOS94x@;sy&&Cx zjVm3g(L0u`wxV{*I(+S+gyv+9xB+a9s0TKAzA?G|-s>P!C5B0BY3WmetG|c#Mb=~- z6hY{2T3!f51Qp!)U}}z|ogJM0!Za@AyYlfS5>@`Sw27N@xI2hA30gtyZA=n zd2&kU_K!Rd8Cokrj!!uFXhV9F#yI8nb3EMuZEeS!0MJQvRR0;H*^Rrpr?PFZw7!wH z?+EX3ykV7F%HLBIz*qI}VABfuqN1R&JYKtNca3<}4G!=~S7Q8wBYxpe&;3K%{g&AX zzq9&2ng;jCi$oRObw1uhS~|1{>Ah=0nagCo2m#L})mU^v zNplD;M5WGk!h>A*#U9YPD&D-EqZ?L{)4ESC7RfpB3aIrvy^Ak8Il<{vdn*5`3_Kl$ zz0ILa0Yx}ix_dXHD-x8gubo~yzsYA9oL}d%-`rFbhSJd4>~RWinao6geZ##& zgOoi57*;B*&U)~+0r(!r6ion1zyzv8(tHav;FpAzK{Ud7OT+CNjUSI9i&c%bL7C{_ z!40Y?s6bVtj_w;rbSSr3?21L#moIM7MK^Db2fyBJIX>AEM+21=BnN_mBjjv=MR0{+ z7sBOefW$wHk9$l$7Mx9|_((xyhM}aXFNwY(2RKYHw1eRn?O^z^xf8ha?<@oXo$JvT zHc&m}LJgKZ{E;6f+R>3{rN(}*#8du=8R{Ui+hC_w1C9l{ z7ZgEP^N0hAbDZVBPcQ&pY1d{HFu*H?OboNsWJEqP!M)150x3a){^nHPdn75i$^2c) ze&6JZM1%r%W^-#ZLpG|yJ6Iod5$t3)B*-A9Z#3Ohs3bkDAw&J#p!aqQB9lF3{FDEt z0`P~PR)2yV<^gjpU1$7R4D?Y1OGtY>8X5sTf+&ID zm08?FrsE2Peo^xI?-RbEfgZcwDV>l8klCf0Qb_vSwZai+`SeOkbUcA=+L=ByhUp2t zaK#mj{^a6oR#sB=nGI=!zHWI!XI}8y{ys|57A((!PB|~qBcKfgoJt6db*&+@92Swb0OOdnfz#ERgqrr zWvY87Ap4u5t_pi@0?In=mK>Z+fVs&`;<~B^3?mG2~^rS#LWaN^|Y`IeW5Am;Vin8DVRZ_ z)m<&ThwFw#sp_;JT)&Am{DFhoyQZ3VaC*e$=R_i7-dlbvB$HShX3Gvb?#-Rf-8LulOHGNb z&h6%-O(mKikktp{NNWTdr6Qi0C6N~m0b&~1jSw+X-xXEeo1ES0oykZ&VN*geT7oM< zC)|G!7HO%<;(*``VX&g>ONiVGFq4pM7i+QRgNNU39u>{Z`={_BeYEH3IZMmoIVkx5 zGj=E7w(fUb*!P;(+H383p3a`m+56mc&pmfI)4fUVy~#~NKtd7|laPm)K*At_P{I&o zQo%<7D>7KbRz(qN6)Zjl+bZ%@simlZAX=^3KCKie2&jF0YOS_SKi}W`u6@o0c^=Qc z_nfuYdZ+dOe}D6|i&O9J&a_RD@rGbJJ3HuQmtH)ORTTZNgF&Lb$ba7Y1O*0ad3u9~ zJ9~?hgPp|>Y7rl{9Tse7X7LEcicE>Uy{1LDH%^?|e(%?jP(V)eA~TyW2an;psNU z^oDpFKx{nNNAihG^)|G^qCF&-p?qvBBB9U3fCS3sV0YVNM~N8jHsxcL4>gca{VVdR z{}#W|7w{_oaTOBeL8!N3)cFTJW=D%pXUFS>LxO{RQ1ogu>#XSi67KvR1T;yTO(??0 z`LJn2qkgcWoylxy$lnlO;f!XuX*3Q;Gw!agUoI%jreOpg%kxCm)N}s2u2BV1r2ol4qQ%@dca0p1-H&SH zN+M*+p3sn!6iOkQtE9j}X3a;y2sih<>nrOsk+5LE8$<{8C3A&}q478$Mw4;8@;S-e z!m=hD*Q`ChDtVUNOM0%%(rBE-TUyfHn1%aULKTRAtQwgbBWs2{L_88`)FShd_zpxU zO?R-jOOL_8(seq9Pvn`|Fo|WfDVo%sBmgO}-A}xm!O8hq%Ep*a=~wxb{wDvy`*f2^ zj?^E5u%DW19E~5KHV}kbkd-x2wmftd#;6!AwHL?!rd=Q#wTpag@O+8m^p+7sF zRx25NHm#4D{xQrWLz#{?l{X?wsDv%HgbFh6%UIH^9oa7Oa-VGI;ladrE<}VKtsbj& z8+Fc3hr_jHQ7uR#Fit_zhXu^ujaZ^_Vs!g=cDDC=H?Ai$YV89x3WGI}6sqdb92a-` zW?z#mqiC9zz*jNrJ)4KBd|d_tDMCGn@)6vIQ!ts_l$?WdkcbE!UC>71#_te9O5VC{ zqDsb(MV5uTJk6eE$#S$WrfHe7l1zdftYnZ(I(KS@mZsbMs^tzHuO88WDu++)zDlst zo84PzSalfrwy_oe)FjMnI!X1quhp;C$C)X2_=%raF**?xl+m`JNvVt+XM)e&jURE+Ju*xSFfyGXwU49cRZ4?p^1fOD!P4105 z%z;cD4lk@rdz*x7b(dCq8RA-xYcDO58};R33-yOdT)y~9nJy@9an)FiXcsYQW9b|n z*h<@k96O@ggEb_7bV8L#mqp4ib%eLchg^%Jr$+|6lUhDha65c`K!i83Xc9vj?U?vR z_jH7et?7$Kc*ojEUe;{-ZSk_i5Q3FgwK8@!?M~?1bW?qW0NM+D=G_O{FJ%CgGh&f% z-xm9Tv(8AZX1D+JGoH!ir#EjJogmE4N9B>ZM1Th@`mU3K}>$J;Ag+9|TQ%d3}aVNYg)KXEk82Uu?jNdLzYuet& zRnRGNHd4>|tNLR64V@!z%MJcCS)CtW`15m4g^QFkEFMbO;j&Di;~XQ2p7Jnk#io`D zWZNOm_&XPu1eGK~YOFg; z?ZDuA^d4DJi@FgyNc4cw6N-&K>Ay7R-F!bylHc3Acoa5PzLtdY*ViLKRG{#Pxmu~c z)82m>17&CDZJ!okMd?02C*gRqo5O$$0sbXfngKO-`1b`^0T;g*nWu z@)Eb=GEpHt9j?54oxsgpX?BjfQ3{*_w>5%`QM@=Z+ElzSGMdR9_1B*x85L=ZvcZL? zC&X5@MUlp*5XHsW#lyDm;on+Vs|xG)<0OBrG@*8iZj!Pufc3>)4p7s1L-=gfoga1TRVFk|fDs4Abr(5p|MDbBTi2ckN@Yz9 z_NmqQS|41`cu$tNdd8;z0N~1(c}yWMaFpR07oG=Cf{wSV0a8Z>0#w76Z`NNw0V{cA zv>riV(rj$VqQpKtNS}`J;87$(ao6ZLzfwBRD!%cah0k309qNm}6(6BR6A>jO zMrUzh#n%-+QcNL8DhZQR+H|7I9&XhEIcH}Wq+K@Ps@=>L3P;6j%2%F`?R`M@py3Hk z&FSN!2WBCQUL)(P;VIh6#R|FbnWS_&*(RUQ3~8l zbi%PT;j!uKnlx>u^aiStdYlbVBqhlN#Jf zvQpB@C6}J)|2$kY<}X4M8&&NmV?fLogG%_7QYSqeiiWbSD}GDTioY&3+A=R+205gg zV`4H}dba$Eo-LoT@b$VqG=4dfB^zj8n(eC1#OoXQ1QOvC<$5{0fA6wnQ!o;Z`eArZ zcC(JoG}7kiGNKEN4ScYVD^xl)mkvj9@Tkq-Xi(zS`J<9~&XW!b|wb@chxrrspmPzZ_0D8n6GviC{Sx!TkVJJ&X5KJ&8K-(V)(p{Tw= zRPqV)6W^ONO2RenTgSfIdmC0!9-*KmJi|>N_ugI<&{#4HhrJ z+IM;MG+v(R6eUVC(giaV6M!k4kT^T2v?dPBz7}-gG8!(SfY#%$z}uq^d)s(OkGoqT z9&dn?W1=OEEFRpkIPWiu^Zul`-}TA{`+7aT{tHMd?o!*c%}*C3*o*4I7nb1%PGtH8 zL|zt$$Xg)Qn(YwbCw~K8+a0s~a!vz{$5KY&jitqn=Q`PRfy3tVBv(PSVNxatyg6M`B<(Efk>sOwD0x@LeKxZcN><{eitGO|cJY9uN!fNEzp!fWm<^t&y zH5sR*ow1>jboMTZW68!x?v3j~8r{lH=yRJR!pn}Wb3%9l2FLIhb^0c`VgkGXNmGN%q$dL>j3)gUC>D2n z=bm7;Nr#Ko7Wsz3_)L~jccA&4&Mm(?tR>YmIG1A_!k%Z`$L2ylG;O~khny5%S}tMQ zYy701CLryv4_`~5xsI$8Zc~>rdE82%q1>r^`}WSBWZP?pw{N=`UOG9iMAu?lp5#S7 z$Q)jE=M&vvO698V_ivJ<~v4C;^STlIH?$UrY!nk}r}@XMX^ z%i*Y09AGIHmd_hFfMx_KCq zPf52%`O3ZWllQi1S#emGNX!*qjlv?OISS#|SpngHntf7&lE?u@kMj&VO7Cl{UNB`m z>d_L_+z#e*f(&vjl-?!7I{PL?7@ z>=}~W?BU&wt8(Q-a`FTm5>zEQwVIW`#32FZgyvK!kPVltL@CnMik!ZN2)Na~Z!vF@ zrQ18asnDjQKw6>QxG}hGHZ5T}kkt_TPOj|*dr)A_llB%hHuRpammzl=m`3D7n`Mx+ zqlbZSwl0eX*hmTb8e^d8jh6Q3Y=+>p^t0Csa{#jn-=y+lzC)idWa}9pVi3zbT9aZQ(vQ;HFiX$cho*oh_On=+8 zyu2*5rZG3r^Yuxp8k-FB`EE?W17DED;|Qg$)zJMNguFjod)e1Zx7MvgW^H&bO)0q`-5t!6 zFeDh>Xflji*QMG1AVlMa%o+4f7BnI6Mh2)7#5yl z1us*I2&O`RnkxR;Tw}z~N=(|XquErvGG%!IpwxTKlyl*@6jGj{KV~#;A0<@P>AVH< z77e^ge;W6Lg4K6D^>h+zp1ITSy_H-E;ADBBef~w;**!QCL1p(bEg~VOd;Qxu8n5;8 zbhJe9@nke%7&Sm;Qc&%?$+p6uU=Q~p=LJ&SoddFe>&fo;?399-qleGHT0fmNaS%tl zFjK>gd!1blFF74g`{Hq5vo~ac#23P3r26T-!Cp+Jndv&SP|j?vdx~hntK)xAmWm^V zO&dHq(3E8ZExA56DSMRtm!6%!#Gn0BIvV|1**SlC;g^E9+T1HespKOLv;{|7fUwhK z>qVb(U~T>*M%IY0d7=*Ot60m0Q(F)=aC@w$O`|)3GiFA7wlLA9AnvbL$#aZ6(A?#L z>omp!#nDCcmZSK_^I1&C-00PE@-YP74}H`fFV8RjOkxVka_o?rC%&g-Snw`nh*bDd zTKUJzBzC}Pv?Eqka>mR8Q+n|H&e;v`2^t?AW`-^^>@Wh*CMxhrr3Yq`-i+ZoX>b)r z;$1b!nJVT?!H*=*cK2f6W0k|sdEz1zww+{pk#t|x>Axm$^pK#B8zqFZUkckwvW23r zb#{6`5r`0h4Zrm!e^|IIEvfpbu{!vq9TUmwzA0OT9QceS6uw(23l2+xyur`* zrAC%YOwr59z1R}E%#YWyl650PhJw-UPy7?}Vg4>V^xZt<-!1y`C>JE`Nak)UQt4y> zQLgiXM)NAFRw;L&;Z?wSE`{Js*?Fxa>wG(n zQ4vJml$Ru`P;Q2TVmAien21Eo(27N1(K=EQR+?tx{C<||&$T=-tgYSq?6m(gho*$>+(5*$fTe7MDN-focBRLA?>XJCr8MGwT!D&;-4f$LznPV+SN*I9Ea09ND%bOXn> zpMtC7aDY8epRBt&wJ{U!KNdp%tSl6f6#e!rf`^(Mr$jH&nAO$WHp{!6V=6Zo3Wh#VmuH@HuQbnxoQ&YY8dOl%W{6IqT|jj|;`O zfsqR*frcr6ag1Wbc$?=Mjf+%#8D9yRQPW+J;vc?BYxvl&UbO?N-ng06+3Fcdyz*g#h^M`dce>ZuIoaN44dln@g1!8{&w%7TXF7Iy9>OfN{y)c0PZHI<=ijIqGX&@>Huq-&fG zkhUteMgGrr>2f(5nywRpmd+pgHbqk>j7-*&kHRxQ>TJ`wsG#iG*vP$a3HO_|4NEH) zDMV9Ep10NU2~QjGmgD4NF7{qrlhcD(0E!G;H1(cykxZnKYH>v$^eEu%4eTs!9a6@T z@8F8ib&wcB@APCHFCBJ9f0z==M?}Yf+?84J*XS(iS?kOA4ycXMLWU-T6wFeArFc^_ zBLpr0k9BKc+J9%dEsbwMbi6yUTA~<7ko%i(VPP}X(s`?C5-mwY{JL&IW8jw3B|7oz zUlYInan<2Z%k6!i-d5kU@DGF4LP^VksnXP%6kn36ekYo*fXSaTjGURR%olaa1$=A zOE)pFx%96ZuOGy-I93Fqh|%PF4)42pcfzUYtzb5as-1Bo8jLGCX*X8n5hR#AqZD+FQa@{6D?$$k5G|SHsLy2&y z5{r*{L$8Zp)$8JX;WfHpzpZ5VAJpF{=nD`UyW>1etq}5n=nKEZw8-b+tK~ioe!SD9 zN;tKAZ{-tAYt~XH>natAYR_ugSX?&dN%`{PXHFTR2u8#2;(-A(3=_*7LBC7?W}z$y zMH+4V^InMMkA_PvE%7#JX`Y-CtLU%2J^IhJYjiou#G@qi$-y?(I4Tqr9NHIK+@Gwk zLduf)-u)-f&+TY(5u~MdPEM|$28r=3OW2oX{=h~jeP_^>6#*sLQ4Fj56)|3PD@z2u zLZ@w9%R^OMOE-gw=(Y@=k)oFV^Y+VqQcY6beo=>xdpalS%dJWYcUh8$j>WLz5BZY& z*Pt8?3{5M-d@!lb=qK!e8PjnRTN*^@6-A2isH%F z)T|K*{4Pp0@LbNzxIbq)-P0BYx0+Vfl`9yZ@IQm0|K8;BH_7DseJYv%ey3BqUup2Q zb=kEru)xSh`a9vyCMDQ5QQX2@8bsxo1lzao%C>14QVCM02RD~z4KnO+P#2)NLIbyQ z_C|2$u5tW=PIE5ooHxm)4a;j(L!T8C>oVoQf$f4|^Gt4+tGFVYx-R(d{Y3ZgeTTFA ziF($Wb~nT{Oq-H=&YGZ&FYBsqD|Oy3Wt_X#$kDCQQGJ}onuFg`89-)@;w9F-s5@RA zvRcU_DHJcQOI)Yphp|NVlzrL#VohFUekAlp6vo@?jxjJZ;Zf+>{`*%KtaN=W6(eTU}y#Gsh-;i(rHu2m) z%;WP{WMbo)WwEpdMzC4Vm566}e0ZxRnTS$rBl3xF}+& zw?;VPys2AJ(T*$5q1$K!xnu|@VmQ(}n&jNha?kMd7V0l|eC}3~Y7t?Rnl`7Cu-M1b z_T8sB@zC_)`o2U|}Ih zDo_?LZ8n?xx_%myJbyQ=JJ@P%k9fBMt{`=BU$f`JTsURa%y9Btg5mF#A9hc!lJ4A~ zJvwV(SD}$S0HB5}wkyUw+{(#~Uh9(vnsW!J&+1_sptm&e>#UzjLjM9bgZ@7pAcMEU zCny;5W81r|8K6qO0Htk_Bt1~(e}1a70tivJwAbb?!K+M&xpu_-J|ywWMFT*5F;OW> zr(cV}?H*^sHyrj(!ryxR6RsCrYcqZqMwGTSO4D*f6+Q!21`jn=m*-}Chd!DC-&k|- z=vgFTGQb!u{oWHCnsIBA2HpOD8G8o`JX|NG)Xk?|9T*s@GGbTp z0h&JMh_HQX54`5_6{3xLf1;02JChC87~;fr1>PKHKwT3DlopmGPg*c}LbiC2GH85v zu%tDYvWw9P6`9;nU49bgp$|!Uk@Iq>M*V+Nd$zjp`3qmM@J*&1{qMyegBg&K$KBuy z6N{2?m8Xx1VS11JF8KwVS`d|zP!{w9C@UV;Ajkg0P}@QrN0p#S{ujSOP1bM5j5Lr8X}UzpSQu4qm6^P5;AscGy-pbk@# zEV>fsP``6@G)hiox)orXA}~ieWV}RQsUplzP1ub#=A> z6L0vNNb>LEC;HKae|&}3R@OFL5f%X^%;kP-K~vWX%;9iYV`g*vuv|Qs0NN(yGz~gk z>b#sj)mJA09_$nPFLH_G4O2f;T%RF8#SL>8B@Ymp%e(8HPGchZm7{Vlm@72d(320M z0yHkE$7FxeRI6SH8S*gYruAhW-utv$PXj|ro15&Y^;L+Zv4LQkJNBM`UPhAjJ~V*V zK+U|psv4x<{fvZvF|DjJImEGp-PBx8zXiicPYLY}{*=!F(rcWA_x07V`TGpEKG!N|Eak(4Bz45PcxGOL#r~UIbg<;R zPzkP|xzwFIbp>t-TCUSR^ z@aKkax+9kD`1VLA)~&=gHy_^1<#L-=hSxJyQF-prP=FWh$-#Vs^$O%DUWv21t3Vt? zbYkfqop8nJ2!lV=3g znO|pw%V_-0L@zO3*isFcV0B;ZMPlW;x0LuZ5@Xmk*@ZV$UuykSUkbiRRwE_tep*PO zrJaPf*CNC{uDAF4pQQLtGYPyIFk&0wUWP>K3$|pe7J%_N5#lO-Rh+S663q$TQh}IO z?`cKWktFz@5Mbw)H!Md*Qd{IC!0kja8g0AV+|Mut1aQNAU56SuZZ*?=g z!e2yXL8#%B`PG(Q6hCT|!@LZyD}jn{H5*PCUTtO$_)RJB1~{Ct!6FzgB6{t@f3aLvI+d@WN_3$=@q~u=V3@Bt!PESShaISW&o=@)};8Qw^oz!cIq#iWA08mu1RUUDv1ArpD^(oU7rR$Y~s= zXbc>}7WJ^}cD|<5e<9CELRV|OXuJCd9*(_{W{Dak32MF(>f-EnDTiT^(zvRJNjwr1 z5&`HuIAQ_8d@;HR8A{3XOjH)AOIPpw+8^X2t}lcLU7zGZn*OVCNrW@|LnZK(3H4Yl z@4NX28ct0qfzV1f!&4o)cy#SaV>&zI8|93wb*w z?#^&?3xQYTp5ujEc<28hFXK%*Z+?gF2g%L&pBFv>zuQ3aNV?}$#B|UBN5!5Rpq88S zCG0$s9sID&nsgpq#23`+kA*AT_M-3|pL*usNVjm8pjJXf^-BZFR59jK#C%<~#Cv>L zyj68U_IIUU%-si0_h3G9)$mzQo}b}PXdu_|PnvNx51iZPI*lS7>dDuMoM^S|BAst- zGiFm4X3^Hx_xIvP$4z6d-oGahVtR-`HIS3nD_{pShkMuVohAt(|D~7RZ1&uNzTwdp zthkNotb9&W<>zNzit{zt&f_~&BtF8Tzekl;Xou2h4zaXY^fVRTiQ^1r_vZ_lPwO{@#S&%8L&fb| z=O+9f1?O4Mtu+utqaW6kuN2+4Yb=Xf4{xKJ(d6PXqmBhdJ5M};sgG_wmB)DI>9GoK zIz9U?a|&n*G>SB*p%Y`=x9J9BG0tDCx|3@rxc>)okAA*mB5>z!!=L$g0=?RP{IqRC z-y*dU`_R!a%VM*I<))f7x+n%ql`W(N!=rkMNFwtCDd8dJdT^>+5zm?pBo3s0wYhuA0o|a%iH?q%mhQT#-Yr z6mP`6ojkm@1b*k1%L6<>5$S!Ev+`XpFMfy^gbQYuUC=!=nEO6Y(NQnnMTEDkaX&(>xY{8l+c(%LDO>0Q?OAaVokX-)Y+fvyzp z33eTW)xnN4N%+36B@Ljn-%<}18j}?)2)9N8Py$3YzY+8)4){SleC01A_R@NBxcTXB zRZRWxc!ykw$U-F9 ze~ZY;vUCYr5TeUaH5nYeIX>Ca2cxLch&_ zsD@|Lgzn#t(i%?~1qV?CM)^T2P0NDePLz%K!=fk`+2nI%0doxwTUI>^sQ_^Lwd9lL zy6ay@YWJ@l>!YFkWqtMVfXRiK8~-a?B-0l#R(Ci&ND>i2ACE->n0LO=CIy|? zdbjt=E9tg*=f&4yVz?T9G%z3KU$dQm#BA$NHxcgJo9QU6yxKyEwK(Kv8`^F~@YdX% zD4Lxw4CSs}Ah8{9)+)ZX6Bki*PHPnKzBfVe>@qWo|CbTU>*93n1eWOR1!*xou#9V4%FYF^;T!tycF zp_H`!j;JL5w{vuFN)Nv?w!WHCHMF`#PUqtr6AjOkGObije!{0dox=rI07 zZ6LSTJu&JP!mDW&_Y$;!F5#%u)>cKG1C^b(cw=X$)wOg_N)PdzZ*Kq4qi0lG3=+kZgvnKZ#49< zar+lMMBJ3j$botPO6Y{sx0Dt+Qcjf8tz69wy)&;D0DwmR)IW2}rNlt4*h;jylzI5z zhoax6y)UQRU{mvg&XJY1+{xIAJWm1*zSUpLXOq2ar#Li6@}}BE@wce%@4j}FxLrBJ z(os$xn3!ti@VlzWv5=Q3CIDj<<1kp&KmzeCyv@ln^u{7^}GRE`v5`Kf}=ruhYT!sk_hl z{GE6)1}*|l+=0^4=4L5&QMwGO)TuL`zWB-I+;@gI6bt#jqRXAPrpk$*$lU^PM(m1) z&C7fHhSiy{A#b6~ha3$cvxUB%4gXfH^_qTFnWXc%3t!3i_7k#G|FN3v#L`;QeFT;B ztIf*R{yWg}a1NL3VbGE-x0ljd&56r=6>qgXp}lOAhRFRkdhjCQT=?0EI~uqer&;(; z3Is40n1UqQ#l2M5;XQ#$tcF6gUkbO)Rp=(|32qrhCud_>O|jBhfi@2}f9K*y(U1w8 zF@l&eXiHgxWrs15cYlMJ%^wcstXjm;=;-j6Iyu-CW{BTIpkdJY^4M`$04;Rzj@WF3 zJL|sx((YaqgA*oY2>wpyFsTN>P8f8R{fwKqMyxw}0!hDkJB*;;%LpiDqHA=n$;nO_ z%TvWCEP71k5Ov_*>Tm|)4BUB9d#BS;Z*uM-A&C6`a*(`ri(Z}%Hm9dZz`+t~HRx2I zhIV#I8BRjAe%)I)AI?l9i`Dz`OY+T*51xINK>unYOk)5*iitc z>J5XKT1-D4k!+qR{=AsO6!^XZ0MOIpeZH2%AY1w7^c=Q!(liTqD?He|RTW zu&*NFi1b@rrm1-~IizCf|5T2-)Mx&J`plm(jqqIy9~4#l1F{VNpU$xOTqD>@AElp0 zNL{%lSa(4RGZLB__d?nT0Bs}n1Cz*psBvh68|<+~fABbZ5GGopFNn=g1LT$^(yW_H zxd_x%mC16K1BRGuPIHyB931|eD~0v?JwJ5txuIBolzKCVx>Dn=X>%Cwd-}S~qZgio zhq`&@dp~G2SontJgr!NeW$coKh0P_S4#XXR7uX!Z~A)eKJ zNK;icVDs=CaP9Rjjbe#ntI!}u8@O|BL~0|O7*H6F#1|llt3k`Z-Yb5k%q{{9P<3hX z8Tgx=o;*t`0D8g<VwjjBHEXD3B+nLQx4)``G)Wyx_X!W~%1(cqFMe`@&pUZG z)!3jnI79m=Wia@(GiL7P%_rgm`NFNe-S{qhOY$Z4^3sW6Ghao5uI0b7 zls!#!iNvJ0>TyCCt%GMyY(6WEz7-r{?E2rA;Akk;8KDxgr&Jx!-%?gXK)&h4j}x$| zvSUuz5Z&s!S_V)N!Y}g)$qJp|qJ_NrES!|iy_;f{jCALPphtqcGCsgT4nS8-i;6b8 zSc-M0DGXyy&lSc{5RZA$|02bmgT}bl1tQ~>>p%azh~V~Cbi2${r0*hDcbuUF%I$>H z8TzO39-EWqeAk5R`uaHl_L6`p?Rm5{7FE^7$m~AK*)&@GyJ7-m1^o&9Eto6}4+i04q#CcMdpzcY zpwW)S^lw(G+dYe=N@YHkr%KCtqwi=P@si389(1%&!U0g38UUfzlafkj@JN z{ML~n;pkM8G!c#%%)SL_e<-;c@37&xx`F~6*MA%*wrB6pr>Cy9$76i!?OlqpTU@_L zTMg<4K}`C}coo{vElSdgi9wbTKLa%s(7j_T#*5c)P-)mfJkP`f$Ml=t=tKJJxMCB( zTC@2+Lw)cclGBovEPAy{zHDfkL`11!Jr5J{YDsdt=$0rPT@Yo>@?GoPZ9)=7=8YK7 z+B(a+`MczBt-tG1Cm+}wKMf;GL*1x~tt>4u?2x88hc{g)Kjb}fr^RXO$UkxWsVrDW z`PRyaq3vre&NQ9aAbKH5D{Dxw^hYAg>o2r(P2uFMZQCaB017;i{FyfuxdIyz- z^HLT&Z9=b^j9OcgAL-@Y9ioBT$B=F7OUe(V16A*VDG3e9wl>koE@^lv0ruYR`<@N3R;1k#_-hS%jM06h~u=kXck?$Oh8#JD{8I37TZB5HF zEA8LVFW$)>{Qc^7Ud0u6vb0EfYxB68jJ&E%#M#pwl=X1vuN)Lj!B4rh+ik1uM8u_2 zv@|+bAnq59x_%f&>u#=4w+1T>d}^1o>vL~$ZMx6G6Fz!&J{QF+0K;&3aPRyX%k95BP~i`x*;&{y3ZnGJ55*Ajw+^exSWk14eUN+v^qBc12_%tblV=6a;N&c9gw4R1i zppO!Wh8g#^xqOuXUQ10^Ai+)WhWKgUlDM6OTs6S zAthlS@D*fH^oP6qQ&~>Q!F=vnDC|tmt{?IfPUMIEEB1b}XaAFh?`tOFJ>r~KJFTm5 zHa%;6#Z*VlRx>*uNxesueMO_?<{#1{9}9<-ZPM`Pgy`&EPTXRrHM{DUfGD>l6ue@o zgA0FUcD^~qNo4B$ahhPl_eUZ3M+x8Ml!KqE?#IhD$mq+Tz4v@4G``rAd=cet#7hJ$<1 z#cAi!M(JYqy{;FTFq~*vOG%@lAUFvI+>`uEaW)1HnQQ_JSb6eQ;bL%hjd_B8 zW5acauYWnhc(xmJ-R}d#9s$^0o_Q|o@XVdAdi?Sg^p38v#y!=<>`aeJs_4nwv<)*ZN>;$j7O5%IG!w(O#gW@{qLyV`)2h}f2Nh`SJpwp^s^^|Kaapsdv^I71^OkT zuFhC3|1NQUHW%k~0~_Af+6Pk672L}H=fn_rCTRr}1sPHyC&aj~QsoDaF@@XDJ{=lY z^|iIpx%ot_MBll;b|R#YpU-x;ZKtnpy(M&}s0iPutM@t=XP6;}V#K<%APdhnCZwbD z$a-RC4u|E6!OgWlr!`HsgiCpiGFy=wkS@#3>w=%Ux~|qk<_Cx^#^1|p1Agy{0~r8{ zbEv0RVX~LvVXZpjtO+}aDU6|17|8>~@_@mWX>ZYRh3rns=REA~CxN^7HFizmpKrqt zsmC>SUtTMH4{Fntc2Qpid@xZ_sOtB2-YfMkDB4# zdsGk4yXduK-(;yj4EMJ=cjbK4w$s2-XfcGwHf+fE)%?E|_ICCG0=J*GZ|?Aj`N+R# z3v;1nmm}(1`Ot{_0)UUR{ly&IrC}8@7U$zy*?q+*$|Ak@o$KqNluS^kpRJ^_Hoq=P z8uGRMOWon;^={IK@(M#(>7>C#lsLwMYQaR&h=a9vFGpdPL#|qgIPYC&=F!CsCLFx{ zq$qL}JNq?GdpqSI*Oz%;d64PsI4={r)~;n-9l~V!d4SV1 z{qKhpK}j1lThp=J9*+hohbn!~o%*|s#qQwvEYb@7YL3wzyzvcCzBv9WQekB+E=gSQ z)Xg2(mG>H*WcqQ**KSf);cBW-!lOpw{Pdw{`%F1p&>fOxowAUn*0G?gu>r4GA^l8PDys#zt=1AP4}#t$b;8 z6}ZbU&I^z7Z*G&{`M5a%z4P&7v$^e_?irlG3EKD#Uxp4em$juq3Ol9ID%wkkkApQ$ z@6szHhS!J_Gc36KM$4=NaGbpcYg*%BX0Gfms&k_ssDa2vFVjU-wP7(^lj#|o)%BFg zQE+H70>z!q0W~KDY0zsQNiZEhW9)ZCj`F14Tk$LTsDCp6>UF;}A#k#5C>1^~?QZ|t zshDDEIiwTYf*Y(6KB*S=<-&ZTi-6czp`K?C`{7#dzy3wHc)@+}qVj6FDjr9n(XXmY zvi6aPnm#`2xC$}6{^+w^EcU4+Cnqn`j}y2F{&#kg^^Z%jp#-;{mh=v$s`Ao0W+qu% z2g2A_M|553U%}wI*u_5++jLLOxht(m`KO%U_!e|s0?|UQToO6euIKRgHnA;}J$;}lid;1R*>Ky6Zjfk>!4h8*7P=B3BZ^!<8Y5$3!B6bWz`w2zEox zrGT4&pb~;?d@@{I0V_4JUR%#NuC+D<$e|pde<}y)C-k2E2A!_L6`M{6kNDJZtKndq zr3AfNoetcJH9azu<7{f}r{YM>g&Y`Z7u1#b401|Jw)iR0co85uG6xlaB5Dg|jRM~s zEYg$!U&;7lClj+0pFM%dS=@2@3w`qd$(4_oE(Ez0y z3skfY21!VhZ^4a^MRf1*Pr)TIE2H>EB5P8NV-3WKwYRF0D-*3~M`4_UCzS#tkI^1U zsJVB?;7)z>f)li3bEmVE6ua-r>dQ8r*5otKDUFEXy}Bk7g+Ar6u_Iv$UboyQI(aZ3 z<<7sJ(wlnBAV2?sbGLhb=7VwX^N>YyOw%$uR-fU7$sO{AQj1@wcb;U0PODTu^cbdW3-U`S*ZkL%y!ON?famJBf@I=ydB!%3`&S3z-j43+B_gza=` z6gYZtSq+)XG?CWu^(c-7 z*}yCma(?d|`pszijm1Fo3^Y)WW5Z7vH5bN(ux&lFQBI$$gSB1hbx%*a-Rsx0qlvOE z@e`8mi__iRn(IK0G5df*5M^z5HwiFmD8fMt0}2#1v{-p&n3}P$#P9?l=gd?j1VOaG z@V%rqrqN4Ez9a&#DV>PZ+E$sdD)CW_a@_s0sr07Qk_$+s=*zXbXNfh5zP};;Kha-jXlCy^nv<+Z`lZ;v$@lg+K28hHVgHogF@1{F=V;nOmoJ_3 zw6}1RUiuH@)O?B_GG7q$m3GcH$j=w09{nI+}ys+@bnzCsf zYdxZ^v{EErza{sqMJeL*imFjze-|?)PH+)K?^b_dTEUiqotE&i!0rj!X)ZfO^}oYx{yW>*(hv*Ob zbE%B$%jSsSC6iQt*Ei6v5mbM25y_U_>;Enp6Cs_5j{(oIJrX~RzZzN?d9D~=SMHKw z0AkN<)5F&uC&gZn125=aYwC-CS-;JnSUA#A|AC$(-?H!@L%f9xM+Hr=_48`QvQaIY z^noUGG@Do^PE^>f?W@ce+tF@!LBFi~B9~y@elYHxN}zik4vHq+jD&!ZqL%#YJxAs` z_b)!cb6bj@huhG;2$|n{LQxCL<046$BRQMHW2?lWha+e)VC%wolP;Y$y`hvEmvgl5 z=>GGs;j-<$^b+uH6oaymVWa6-U>Df6mVY~QPfWb^+0F(RV&|fGk+~OPQP?TXHE~*d z&|ju~GXH0O-Qw66x1eeC|2VoWFA}A1aCneJ8<)U@l0OstO{j+WwmD(m?w+4}iujS- zT-Q0s5=z*3nI0fG007szLrSv}GcG^0wxPFkGo$_$xg_6EJJ^(DS+gu>%c>f3YrHF^ z)ICmc#e}j;4tAE!$l*nHWj~bqWuIKq1?L}y(45eyc7=im2)U$TSYlfrOH7uH^3ZPn z^#%Cz)sxUGliZTQv%qEK8upz^ulT+&qOuM$REzT!rN)j+lXy!rS?YYVoJwtAY-!qP zV?9*Cs7``(-BA=T;m=Bg+BT$SXP>{d_lm8+NmBAGY0`ENRs006yuVJccJe@h`}pAFF)$qJ-jTp@O!8 zB%4!vfdaO8Z}Gzlo6@msD`?_Zd@h93@KgDuyhGgQkpHqmW}n! z!M?1j%W zN?ou-;hkv^>@$%ZBN9lD_MWe%V%mv;kO zMu^1?%o`A=z7o5mEn4xG9^7KS0eR;^j&4@IF4Nreq4keFg|=eOxJ{D+_3+;Jh;%S8 zr30`OuysV9R0TN$5eQvY?6PoX%oz2O<$9I3LcgG&%ZZ zN8{R+ly&hnQqu4Z>uHx+?qBGISE{EoO(^ohJ#ZWubm!O0ie~Oqhx8~S3=(@4+r>%t zbVyQu4Efl6Wb3{DaBC^!Wx~J=vEmlA$=)_C7%3VCPY|UrYcgE@OgM?fqrpnNi2b2- z8ITy<^~7Y}^ez@|7T(J0%-BRBkvLrW1U9UOyHluD(s=d|OxfFDlFD0li#aoN#L<{~ zO%I7?)ZekD{l2W6h(Y<1eHkQE7{@Yf@tS;47d$YW9XA_(5-Lb+(*xyl%f$ z*0LQ#_9_O$x3ZCu-XzbiemJ}PDT6{~oNI?W{eje8dvD_C>hk7B5>rZMMN>e&v+uWJ zv0TgI?#Ji^@WyS9)W2myR-`?kUVhkD^wSt(yX1pfy{0@B4bQ1i+@_cfErJ z8B{YFjt=ZxXw0A#FC*;k-Va!%UX(pqgQ-#j&Rma+XMB1VvJ$YQF>;lvo;RL4 zbz({!P9^?wf#HL^5>B9x;0)VOT6;eJ3xC4CU56sr8Sd>pbt`@cNh#x3-W)DV3O@Vn zfy^1F&ahGY^bEcHr~NF72Dg??BKFd)qRF)+kfq$J#;#fNh9Zgp3hMkwwf^m@+k!^? zJLT$C7+v`-8*KyKGzr>y&;I-0^{%!x@MztTY=npRzT0=eeN^^P<)Xf6q~V($?ina= z257`7YGItDWj@uNaQ7Wqb?g%aq7pnlYqCqC7g6o6L@0QK(FcyiGS(l3m(VQ8ggYoB zZea~Wc!c2Y#bx&Q^76-omPee)Frbw|G&cN|Z`461d5n%v1cwRsxaaD#-r=6QGCQ9X zG}l5*d`I}US7N%ckz{DwD_mNjnStf0z0$#OSw_FZL3YI&$AZJnM)RSyk^$?oo)o{W-7kq&lIQ0!fF6X^hn`wesgb&KAOFlgUG z>84|lQiMvBwchyjMy#^ljM}kT6&Isr`jJ_U`YHH}8|{ z{lzkMTA9<(S5`5!({5UHiHGra+N9*JMp?)&MTqw5;_@*ulwWF>8tFpMi(XNeNX#iW zaHU+ih&K#4bdCV4(^!s;LUOf%PWjB0m9w-#lF-OA85@)wwZ?jCp(y-@FW!0~w4_P_ zJ1;pM+Ww>+q9dZlL$(Fv*2GEoj2yAjTN?+g)T6BZ*=hg5-o5~nG)23TYgoGO+NKEM z>MF!Xw<0F}A`&^Az{4}O{# z$hcE)vAnp7Kp~7qM^qXk5+3LsKZYnrSB(=7yX0-2Ej?>{FcF#Wyp480;rGt7?jtLX z*R%J+@#$usB=wiNozM2~xk#eYp<-s@8rBo9V`Ac%Z>RJA@SWaNfNOv68ni_{?sra) z$%e23`8xm##-1HC%3A6TPa}`CxC#3Li3~=o34J4MW9v!;%9XJHZG&7>R zV;fZ_qe>yxW{{i(b8Q#PMZ#uaF;I&V(eItOF*b>(K&Ulc9IvmfrB9*<8xC)Jrz{4N zDVjx+JNl-u4k7agOuM_w_xAaZ^O}ZtH^R5!*o6}0->{7L}QdQ7yn`JCMU1p_~@YK&q=n4g=cXF(HdaiC%X$RHq zzEnZG^z-p$6e~Ckm+hMXkW+2rVi2u4pmT6|Q}O$JQBnU0Q9i*{HRTFJeYYR%ELp#Mbftoz9n9 zrZ7zTX<<}U!GtJPAJc&jkOu)1vZ9Rpj$vv3=hly^LtH80h?UfNqio}yUD}9LrQK*w z@M>+)1{pf|ksM`;fMj!+96oV;ylQw=pC$`=pxHmZwzI99EAfno_ivA8dk5xy_J^F( z)(BN7n!Mhfs4k&Wdk(xlH3#WXYi(!Ky}gai!6bOR$2Ry$8Ag{2_e~Xl|06usDrVs@ zI7Ovb+J6?3(8~ylnC8WXDt43g4BRq6vEgu0T)eg~?5cR(&p&7H;LwNcmaq%)W$x7s zk%`JdN|Rb@8#g{HCSrt_5r%{Q{nTEV%RCe)iE@%SiZb2vB+##MZ$y}k{wj&2G2ikN zH_>O{bC)}}^UN~=^WKrHZKxl?Qg>i(6z;WpKSeDEhmN!-4ze!e!IOQ$5KW9k8%B{O z=#_5p_vi-C>4Wg8g|_0+5fu5t?Z~Y9z81rxRYS5`8Lqa#PEU~*Z1m{LP#INfw?Z#; zTiI6Sz{pBv{kB7}etdd)@x==%TH?6bn{k=~*JNr;Xf0f2SKwvKSUlD|?46#QAP!Jz zLaY63++|7CedEEdrNHLFpy@F|8{pwvtkx5Q(SL{0cH^H08sOQ~6(bIEza}=OJU-jw zkjdow_1W-wsy%@rOuyW@8H}fI^ALkauSgxlfQ^5^Dq@$iEoBUFDb-pY>r?bk^eM_5 z>W?gZW3XlkV_>wAf|hdAR49a)1#Z^D-}1@k>TSWRGT|?4;hT)uwvCHJeSUTxI!=gs z?ip&JTGF+4r_}A5Ic$$U57i*OCWg}1XdIh@qKz?onNOLtDZNk_{k@$hnzklhl_&U_GYl~0-XOioWFs0^LNNu_~z`+Yqjcb*6r8% z@Cu+0l1OloHSmK$G%U0+HS7Y{fPKVqYt6GIbySYauG;rzf2%}zGdqnsid{6hGC8Q& zNr>p;@~d#ds2#pW%F80$mFSQ-X1F98CTH9Dx8YJ;Di(^OldUt!XQkiY-`IR6)(rd9 z4qjZ$GSmRg^e2~F%0R1%kbkGo6j7-pDlyJ9gk*%s89-20fAr2w~JqMjZ5Kr|-)sIXM)QAL$@1Azp3RL)&97nx89&&e`P$7N>`a znz}0k$K?}sE(8G5lDB&)S8O^xfHj>Gx|4UVZb++_yE)lE+&kbRRYJh;Z!%|wjd!~H zN2DM(Sl+Wor^hQRdQNn|B;>Kax|U{i`1a z4B|ODKh@V#f--hwRY(23J5OzF#R!RW7EMST$z0owb?zST#lhReZg%u}`6W5pXL$c7 zi<5qCyV6z%+w!-yW?_ekS)BR0XE_-eSweENT|%0E)(_}&?xTHpaQToZDZpnp{M-xJ zzy7J)Q%Enlv>i9G?;9@Ti|?mH=X+LHkL8JkQT2uSyuK=Wu zkgRY{YklZGd1$(QPos0y4zAwsp4fJ5Z>Ze5#p&@U{*@`te|6!Bg|{sHHk|{$a^d$j ztM}YdhXv$2KI)Pfk76vETA8fDbBa+O=Nu4yev!p4-hqGMCUfpF57Za?C=fqlAGM%4 zEf{~0EjhpV*@|qG3fJ4&x&8D}QX~@YD_dZFq=UfEDj+`ED224ZTJt=EZ09g^spY_@o$HV6z?DXDl3qKX(@cwSb?JiGy z=O>hL(0z0{3_ z`cpd7r`W0Jk2~$iJaSt1V&v{<;Wct5evJS38ZGY`THc4)#U*_oTjMMZo)LW3I`go5 zy%R2ezkSiDE3JvKBGJ^#hCw&+{+7}E#|c^V_@o+M(tOm)h@Enu)LYrphYx=1*3NUH zNr;|L0NKiKS=HML+!k->8pdB|nmGq8@6lzV8fnGd5zzPLL-v-XKYb=zFOM9DaM*J> zo>X^*iK;8IzoHf&++(VCYBy#_wOAT{K&)-`8ErKI(Tp*oZ@8u&)+DGA=LK&eCDV za}QGAzOuH+l+t{J?A>S2{33hirVfs8=Y{&RhEl>oYymDZ}Mo<(vE0`i5Hqe+G8Zr5Q{K?lhCzEH2&e}tus0h64~CZ z{{6Ra;bdL0vA8ML*NHqlnPB-C4}Gk@xgHm1=`GK0%OzX6*O)a~ zuJg*z)pEwH1U&`ycnyhIRDO0^CYa1sUGsav&sgwQf>J{g+26*lx%W&+?}n+(6m?5XtV^5Dw7^2-tcFAyCZE3VX3Z= zEpa=ZU^X43khaJnfa!F9#Q$mFl@53qmCadMIykVvwlm_&&UjqzM73M%qSvHI!o&lqZ+wY$eEq$H2mjUbO%)4O)+jn2st15ifL_3M-2 z!-OIG%Xc$zk5NMTrvHkAdR8WP;xtjJY4??1{;%a}{0M#OGxVSST{1QPL@VuePb^A= z6+9A|6b8KD`z7>kJ=v8_Pg)syA5Ax`G}`Zj^7iGudcVPm5u#jwBcC2Ot=%3Y+fZ~m zN;f)!@|t=P9buk8>41>GpYJmADThV{dT_*TM<4-7MKAVSi={ zcW8TQ^^Dt+x|S^)8aX$_4xPrhut7@02f591KrHnM@&XhgnA! zrB1=Ylh4BTO2^`vUD55-31xbSi0RZ*6^J zvok$8+1rzw(Hk5J1~OUt$Mg)Ui8iTwdQ@W}cRL0&$mn?;5K&16Yg^`(@V5ap>$I`0RCWFD)+2Y};YEeiDrY$^{Mx5@X8nXK`2A|HQGBy;i2CxP z!l$K5Bi;B%GKZ;#%Fb;h%}Fm?7E;>@1+H4|xX||1j<$MAuH_0`OXuIVpv#$WWEk3J zFR`e&@)H=>G?v5LK2O%Au~&sb;h^^LV_OYRIBSym}YpuK;xcrDbAi6=<1yO$1D zpz$#K+TR38ptPZtp+`N-^Lc}}Iw$)UlQ z-BYfrJsRlNGUoq6=JKXI@ZQdl(-uYsgUf@1zPf_R;@O!rfR2VlpAvqM`pu2E_pt}8 z`*4dR**>qQwdKwhZ`wrP*K2xD{hX-UCR^t@liNPPU-~7w?BU!oD~l?J=WU|Yy(VvC zTfbo3*Pcc}&oW71EgJ9sZ{wzQm7IXBzcRatDV34P;r zFZFsazC~yyaZv`c=-zB~vLokx8E(R%mzUozD&%4JGhok!MK*Ui?7M1}#07knweF?q zFPu7(bhTfg*4pia4A|Byspv#kL$jf#=<3h$8N8Kk^hNk)c@0u_Ivni;)mFIKrFf(L z*pMtgE5ClOHYZFq95v@OTh;Wg!z4phbM2-`GDnpOU_Z*9ZMg5NcPE#z$rs;8p(dFy zA}zb)&(UM3Z{!P^i5`aiW7d>54GK*O8hS)r3~EXdT*ka~ho}00ND>qO{Pv02^Rbm| z*Uj~azC$%!21@Si#eq?8@YZO=5=fdi`JAVm;aLF3xPI!|A@AnLlK%2SK?{q?up-L$SQmldD+@V%3c1p ztOeeMSIOy%Is0O|>8WaD)2F*+xEEV{rZ-6ZU2^6$jr94&_1&$LY*Kf+d~&+C&!8L2 zU~;MM*%>|F_9hDc^hVnBP%)))a@uudA$7!pH~?(~F9aSIeZ!$95On&7M=>*OzwCqV z>9xV~E~U3GQ7Dv>{_=^PGw?FksNa7+su^Tx3}DiOPrB33O`+Uybjaa^7~_Tj4KdCB z(|jG&HnQ>ok1p{xJSg|Io5yVz2co~1n~aLaAC&ykUqFLD%{Tpd3m;Qy^ldG7ysGrI zVaXQB2HDMaPhz4KpKNv3@VQcDYzq2h{MmI_xIlncJNd|)Ar%i5)=uWA>}0G#S*4G> z8Ia+lW)r_h#LhB=xXc9i9i^;ydLlx2T}sE}b*NmBj=WLd6Bonas13Tac`@vK;o{^N zk4)%;QoFY&37ir^x1Vmu$5bs!DS`1!1BfX9ctoMaSHn#Qf7{LX_L9VaHW^)bDZi4j z5rC7Jr_m9xuHIs0k;v4x2b8zFo%Zj&~W2dMY z4~ruT*xBFSPPz<-H8xctPq{epL3E}!NGidab$+@V$;e98my`kt!|94<6FY-N zy?7EdP5Xz$!+6=y^=d}P=*odumTX0=dw-5Uet3jfddyFMXR4XIavVmDA!Jt=Cs-pE z+UxvQ+%$VN-o!W!ld$2s7kYDJb8lxfc+i!*Ync6m&S)258B4PS6EWa*GNd3)G$&{K zd}$zAE_Om%SN0w@-VV3D$L^^+iX#@_w!A+{jJ9~ zX(F5Uvi7f}Ys0l&=4!v^rTeUsTs>RwCsG((AR)4~5+SnTLB@M__Kk@fG6ihNROle9 zWf=|>Tk=$2#=e&Id6UgHU8K5jh-9$B_?(Qx^~U}48}P8RySJYPkm{08PMI6jIhrH0 zZnDTXu$ggSJ(H|@^ovPnb-K3|i#1hB;BkJIT$a(jba&s7SP~*+|F0Ur*}a_(Y?C!T zrYI@XGdX%FsjCnrcF!u&4B#P5I5gB0BQ2PCg%B_&t1Q-_>wg3n@#Ov$qYCJfh%N zX*Lb7t;Ltpb=KzegtOYRBKrBJHM{VL=`tnk-CXTy^Ph7L9AuaC@0D?w->!J>4>8X= zGn=z2dnZ;RnC9i)%Y&U+LFe_VJ@wW=o=39A$W63%qa#XKk)Jw zOvZAvVj3bsHU&k$Y>LiwyL$Iae-MkY#+6DJjSB)u%6O)SlW#>;79BT8f&jfHRA_Dt z>XOc`1-;j}ud8F{3hYv;4p@W!)MFujv$G+#3R&ie3+LBXM|*0?jZ1Hy4qsIp*?nZ% zFox2yK0aH%5g&aGC+J?kZY^mad?C{=^SXOS&k}LOZtt$Y{C5()r_w8?4?wsxP3JTS z-`P%|6cl0Q!h?HH=%vIjL+4z6X>YIB`{XyxCJ&78nDR^Gv_d#k9R#?xnJZ$AtJjlk z*1yFEkeF{eMUHjHXu>U6ZsyBJG7tuzfvux-WxROgwgf$HRY5Kro$XbB(U~yeZSG*@ zX^>pxYogoUQ0vQ&nB>iIW`3;k*Zp(x$USoMeeCvcT=-VCGk@V#oOAnOV*_5`ZpleF z%Vv~9646!$qUe`p&(B0X8#Tmgb+S)=BW!NQ{HJQn1XS z>kVWW_qqqy zb4u03pC<(rd{hg#p^(HT>M_^hp zT82_E`q!f~#Tk)WeQn~mXOXKd|NTGk-@k75_GhwIzEMu!_swx208zB&TZAODb;XRE z4B1xxWq0jfNx(=!1Qs%GO;fMt>9Wbkd*IOEqFg!!om`rHZ252^dHxS8c*KWWCUB8w zC`Vn><)$EXscm}8%M2b$6gCJ!{oTD3nZTAxsh!YYxp|}vsKS`_4%7aX&0poX zRO@hMTlx;J8N?iyC~h89dE4b^FBrCF<8GMo(pW-Vwku!jvhqCQbaGp|E$cdz?QHXT zDL>}^4VSfZ#{2m?s_tZwZ}IpTa|X=UK&%b!3|C%{P4`nvwjp931|5U7ww`SZCJDjv z-5tmo`FT7#`tlu7*z((F2aB0z6G+GGSwyJKE$>Ycp!c%Nt>@<9oC7?jE-M0Vok(_a zJA0oCH(tPyw%1#^L*o(jvhI-#dH0&D)x|@K3nZZj)bbn=0mXPm0Gc8VAlKZ6s^DQK(ZnOk~VaI3R~YbW%@tC`ia*PX!!ZYRrD$AW|t5j`({ zB;{DQpZ$I4k;|h!z~+(Uo#P`Gt%KRQHh*KI##1iSr*$U@bAYT}nAqm9n?^6uTBQ@EMQcLY`2n4BjBpZV!8d??n2j*dI4# zLdA)wq@FPxMxP8)@4`AwE-6QB0?)NY)$4UnIIN_)M60AE06B!El!$a<05F%8-#F9v zReb}iac__tt7<6zIeYjJTHY*X|3Pu*Z!?)UHdZ583o$KlY$FV`9zPq^;K-qsIh0hv zyKJ7ax9$cYdY|DH>3e05udJ;nbz@1d?Cf|h+_wCNgJMXf#1}XMizZH&8&_+hIgpuI z!3_~pQc0$m5~VNR+voRYJnIiN+*p&3X-zGKUYR?aNQWFX5r}L#SENuaP;0+vp)DLZ>N zt_Lc_^R_JQ-ZRe)dQU$cefxFEDA+ze;bL=Vhjey#cje6zJpQF_WGAy@lXVW_Ktw8k z+=-pd^`*N4*6~8xytGB?1_DIdsfz_|vSKzAUfW@2If7YT#*iqhi#%NMp`ju)@luN9 zk51AZ+=ZmCaeh7jJns4YeUI*<{FLi#uwSD~yw>!BKTUT0VAUsO^j5441)y_DBG^}693B0;gLsEf2Y|CZ%VQShokTDlWd z=gwTP}heYMUyPfN;LCgFOZJP|)ok(HYahy0dH?mf&2YdAJ=+mRow*`(V6j2~f}}Mz?O+ zWvm8u7avMaRbV5~M<`s!AzT<^8jrusBUi*S+yIJ6Rj1;llvMg>x=k*xFdCPZIN7lX zVQL%)lF@+vjgd;QLw~tR^+_1Af4H@gP{w|uka55%lkCr4(3ZlKmsKtW#FwsVB&0f^ ziB6K?F*~35`GsHRMcrArfyaC?ulIMztBs8Q0d;hO!N1EjL%cn3RQDS zaScJEvOeY?qR)hp&gYFOsr)ynmiwBH8i1CrF<#eIih~Tg#2C5n?6n<7^wg9b)$6@4 zhC?{PhUgV@0ypa)8OUfbg^kZF*i)rjRL}15N3DDXv z1%sX9CbjvI8<>%!u%@_hqH;tVa!4VqQGD^Ct!OFDhsi={Ts`4KnAP3qt~Cj27*ul} zc;(=-YKFyZK(Wx%ShkM^zT7jS>W5d-d`{Sxg@<|QrD$b$2=G|(jPx|vB5)+!-DT6q zj9iiQjXu-0Gab9ry_p~q{Fh_!#5y-Ak8L8t$W_oqcTeXev>f5yp=ffe;xt=pz0aF0 zZc#>A6=b0_6Wq?d3r&mMbWYH8J|3$5s1tTEj^0qa>-2jcWX+htFqm;d(kwuEczIcj zWzu5`yOdglWP?t62@)w5^B1U3WNofV9MTXv-6XWHk6tz0+893PEIti@$JIO$o}_HW zDct&m(C`?e!@<1lozl4{gY)e@ix$Uq|MXb4r+Z1&9jrm<`kVTyNL+TetALnzlyR5) z?{H>X96HY8!pbN9mxX^};_KX}_E?q6sSEzXgE#hL(`JJNGPB zMtT4htdK#0SK$rY@s_!Nev5D_)tC{LAJ-igV8WGxNhrS9sp4u!2Z*KWcpY>6r4D5{ zuXiHmyg0jJX3g0i&G`Xl>EoWEed*mOXhgJY%7&=KiU9wGy?sW;kb}>D}=@=5uL#n8gu)`D`L!{NLne>385qvnsbXj6p%qdKc+A~{x z-D~50eBm|yPh$gdO($$|7CReL!OU=>Y&eg0_7)e|6j#tgl;OIxuMf|#^X+mVu)t_$ z?%p+Vk=YdQIa7Fz`fncIwEGq)?X868ls-NXtLU9aGy*=~HT!L}t6mQ08uFW@ymItD zUzidMyI5{-kp3FU&e11%eYRALX*iR|f%QrAfy&wJ_&9Sa-Ep?cwJKF8z1MngjoOwf zi#P}9V77ua^czLRz(jj_y!iK;8oXIM&;6%Z zZ11SL%8&8he9yvPBsKpLd+y&nhSPxbBG_ovbLnny0x+B2j^J#B9j+6wl=1|0Rcd*k zHeT5>RI$p&qRO}Ou@P~FIoC~3vOp4!T`*`Xp<1uc>IQW{Q@Yu>;Jwi_XH=9?pbe@E zq78;U*A?$%b~c=|N%HWZb3c@?@*5L(zAm+JX%>Uoab?%CmDjqvryg7y#o8*|;8J_L zDUD2v87A^_!d(f8ookf?h@5>)=E3#!WJyok6WIYxECMQDx_-k}WGK#X-%PWvNafja z#9x{$7|t%KtH1WV$r@EldV$ZBc?DwJzh5|=rILx65r(Uqcl%j?yhDf*yE-P8fW+gt z1uCvXvV#)0z~@S+8k$g3p-f^p9{B=H1Zp!BD{oK>jKE=^V2CIM$P?Ky6597YaWS_Z z&3a3+6}pDsBu7CytwSWIBop?PaAXQ(Tp_+_iHZ1}ME1-n_a2WLNUsVzjGuCtmCmj3 z`n$0n24p-dlh!*pIYZg~@r(3D?vMDRx{Jvx?QQI-rs5bAMi)@f=1Zg>&=-~$w%T06 zCHb_^>Y?>kH50#E##k~7|1^33KX%R*7BI0!XohK(AZ|r)0NwIPnqnMDZ3iB(iMVea z7Hwdz(ey#Ly_hpY10;Vr7%XjPKOh_C7W+^DZ;Ajh@gr@Uxcd#Edvf+VVMeF(FC&x>XybmPk+-2ak$ z57RU6{#|H#&GO1RW|U1;4Y<3*Sxk|j6{fO|F_Hcylj)OdvX)}BL{*f>i~GLu|7YyZ zqio&Ny0F)N_ulW`HP7Rjt4>v&;huBvJ>wmEqG#wyXnMTe2qG>KL7-95ZUmumK%iS7 z0!kLHBreU0MjTjb9AXkp)^Z?VOk$!U(%m%1l^Bz(W!B0c|{TdrsA^ zcfWh@-!pxm`S8e1w9*@l!-_BM?C(&WQH*qwdD}Y`!$Nw$95jb+B?fj(gviPfOR=zU zO$CP_%4qn8on7oL@iAy#!MJ!ZHG&jw3bw_(u!;2nxJjaMZT&*n*sQS?>(d6C8yxE` zuN$r-m0E?oDUL~?D%i1NofIbZ*(mIV`PGHhO&twB8$fJ;7&&^M`-=B1TU`@i)96j} zA&wLF!Ro__9UZY7EeAywBt=FP$k68AEAR}B4L`6*HkNqdkqW%5&G6DCr*0A)-VU!- z8f3c3WTm#@0&qgJE9;9XjS{~CyReF=(l+1W`8-R)!#;5>HOQ%lClKz;v`FG|!X_X0 z0lXzqzf?RJz2KXIUBk^wmyO(x;3YuiS35gdFRH(Gm^qb<=Yn)A8c)qnxGu-`Pwhl` zQB}$eD`V3~9iK%;@?AKq`@&|$L*cLNCJsgswa3zriZi>Cz0>ga$FPi}U0I2KP~+NI z+hg$J_3Of9o1*eGUYlZhV|e0oP{#wi9iHs-6JvEEJ`f^dEy+^G zPuEcJtqwc)nO|K~nF>Q}Y_GDZM` z;uVai?_v$5Lfj*yCEB9WsVR{^0QwQYOL^Vo9HQEF#_Ve=vNDKRU_N8qS6k~|n$fi* zoIe~L9lNgvt>ii&ZSB!jB$5QEx`UL>W#Wry#qGh;t*;X<7;D9$gJd|ojWszG?ylg- z_`*f(t^t*B0EWrQjHb+${^l(8a-%FbkWZf&xHX<$Pbsa!hh>vAB+Ou_#3eTGiK#E` zDvBhQso2y7ngHjRfBApd$NAr>9eJ}pjz8-=JcB2q)2kF9d!x^aS9_*F!21fghZVjxna7a zo$c(eanuF|wcb)Q&}o$k!gQ!Yhfq#H+Iyq2q9djmzB^KttqtXV zhJ`Z8W@IRs$pvp@CPbB(onZM?D43P^mSn?s_ZSY!9T3WTnlcg1Lmoi&8~P2-DsJLf z;MFF$&)oUN;nv#1QgZL=+ufEjkEJp$6x(~%h0V8mb7I1piK@}dUD6e#TQafoX72P? zesS)f=%mkd$>`itoFN5@Q7=8#E&@gYwaJSGCs)9M`VF6a>hQQ}!0-+3lrbxW$M67) zofQJCn2MHkWpiX5f<5-#LPjPBxv=?9bs;0SlW61bSYFUS=&5T-0s^CA9Tv}k1 z6#H29euw7FeQxgO#Zs=Z5wG-C!rLg$tT&T5T2i+&uQZ>j0Dm^9c(>ihDt`16jCA&~ z@}%=0>s#*JMcj?dSLJ)JV=d$k+4NTF>KV*GbJzEeALycW_R$Xc?Cbn}?a}f6Em>8- zJvja* zG9AbfE=cpACk@)mZ9F@Nlc-Z>B3w7$`Jb8Ud>0n|?fuyVq(y3d-EE>IdNXoL#iyme z?>;F}Eo;zS+ta^vM*yTcT9?#Oh2k-?%u>$Pj}J~C{Lt>6Xe-uB#s{Nyc^wQ3V>Ab* zfX{2il@-2|zaKmwBjB-kkXqL>@4*-~8gpYKF!0AS2P&GsN%SrZJbCM@9pvfF4aG7lqpRw4 z_3INMSYCHK6+r8%WZaxkdva_p3NzD+Px*VXS-ie^#r&e`-U_$u%N@5i09q?0(~HY* z_>uwXrvIj^%Ny&vLI)Uk+47zUIg>0>k~81MxBm*?J~Yw!Th&$t0d+ol`u}r0IoMf9 z{p<)kt5Qc^hZpm8Z@b3Z;?&NbcxHdAvoo(_=J-@lsnci)pw1{3;+*`LL&r+88OG45 z@bi9os}Kc6ytuf&cByh0qsf9=)+mHb=)|_{eu~St#?6UJ?*Xr7M~ff-!K_mpYBGbd zH0ngPW~s4xCcXe`6O{-He8}y`E9;P?JJN?T4Pw;Jd~{IV?lD3*etvmD+Ar>bnRsH` zqV1!+PZe#$(K|^T<+1SLj}C?9RejN_s3mhKs&8(w+mg}!Sehsf)X4d7$*=!wGZ|L( zSA4VTiaLLNNp%$9B?*5S6mX(dSOW%R=TE*mgxwM7Vb9s6Nu{nes*ecv{ z>U^tqo&Is`Ub14iGh6nv<^g?R?&~^zodSGER8^qi;V|PV<>22O9{tVFt`j>m)o1FY z?KDWScF9c{>sPb(PdHaN)nJ6=+CV6Zq-lpf7yutjwb+DjK%;Rhc9uyN$# zox3q{H!*72|Bh3IUE71q-;IsC>dYjcNJs&I(cCd!{ik>}RkUBPayt4M>y%=4a=LTM z-1+w2876oX)~xe$HokgZ`$D?;OiMWJT4GRh^D=+$j7fWN{2d4T(TJOydg$~$og6n- zJ~LsLE~Zdng<0dqP>WwdD<=^Uo*I6i&xu1$591rzen+iN%nuF7z+7-0VHVd|IlYt= zfrf$T{Dt2lDNgcL*e#n+EDa_~jj*MUt|kz|raS zZEusSJCR+VUtYe(uq0g~6+c?!b9rJ7X;H5{RB!V+@!6l9dxLI*(#GdYWTFQ0<)rQo zN+;jDUrmsCus33LXor(bb5}j#=sJCzE8}%?@bmt2!bG5j^A0#;`j;~( zKA1z^&M&G2;dv^yayA-9mz&=yaGCRy+-B+YXApXBYeq|mV_0;^QPZVNdNf|yRvU#S z`0+-j0{mD!xpC`e;K%Wih>oga=2k@vkvl^mj(+JRDF=!ja3X$m@wH$1%-p|#$3JR1 z&X073$8D>+|W#nhRS)qEwfFWHfK8UEqOj$f>AYj9pI*=ZFb3XGE- zfWz~VKf-faE-eN7=DhzA1WvYv3Dz8y?>F}M7pI{DM{Tc)tcaSyHw)%X*CI(m=(pq!Ui zB|$xqc&kodIa@g?X{!WrRr4Syvmhhquv2aJby=SlmN0zf53)9-X6r~7j_PtsuFZN3 z23vF}+E6JZUwh;55cJ1FBAn3E?^V!~V*j8akC>3g$7d`cA`6+(gBg!Zl3MwU~k9MQ(y6V)EeeIyfCNoLxhzSYwia0OvtBG0CK6w>6OIZJ-_03daQ%c$- z*0K}Bv8Ubs=qSOLn>RLAG?$`QJgpP>DMQv0>>UqYP)djepw@)c{xjK|OveZvr^-Gz)(|LPl zOlkru!*-(uNr36D8~OZ+0r5pzy*i(r`@Bi8n|gI#C#&=AbDs=7dvxloOWu+djN0ux zjl0NM{k$Do1hUmvE(09u(oR~t%CGaZ>*yCDCb$0SU`LmR?7fnr+wb5PP+0yZXg>B} z@InPvO;bg}%k!o>X!N&q7CH8|4W&`jjpTZ2vav*T}q;vdRCg%jGj-W47(e>YTeiT^Y_-(wek>Eny;Ag>E%Rahojrzp-&?u z$|oPge4m5){(If3zZoL=iN5kXhuVoiedE}3lHCTG;Jh5A-$W2fv|NB172^~sO}eUw zjR}GvQ>td7Z$rPwNv`cA9YzNhL5q-2$mX$E5$so+#vUmC$o7uN18AtoT0h))yuD-h z1-H=FNcqsxnv3dvr9cKz|whz`V@6>P`*OnyWOOF{1JU{ zR&aHC^5=y~eEj9rAe}^N3Y!BZK99WL)ZoCDN57ydG2~O~{(@Q-2P4950RS8$eccY; zNl;@PRai95527h~J3T72;|wQ`9ZhMf7{9iBg;8_u>ZWN>25Pi8gMISv=dxJ|s48^VD@-Z8Uzrj^nE(Rynk#%gwb=G4F78~{32@pR>=0x%&cUQ z@-Vd=9o0G^RK1_o*AD)E7ru-T`suWdaL$rf7@B$dlD4Gq!<9hZ_fMuG@lvIO397M$->Jv}5R1hXHX(lV~e_3f*Z_l_8y1fN8hdo6I-Sy^)J zQi7SMbO8bML+M;wY5}Usvvb8PkMXL=(Z*g_R#UCk);Bm;|shsO4xb& z-*Ke{OWJteYI=n5B+t6AA3rht;^50>m(kw48*TsK`CTP`P>Cc=CbU-ZD33G|K^?>g zSC7G~R5y4{Nrg8TP!)j@K~gyrH%EGU0My18YF~p8WXvpUGao``eXyB|h42x_&5g^; zGH0Sa>x+x50lSY67wKqWc@S%`{Bmv}eD(ehHqFTqSfxxe+buF+01nnMAC|#uq?&$q z6i``WhS%Vve*q`Gi>LaB$#dc`6(ZET9J)B;zIvqQSD6y$$9N`wHxV`z_H#+pG_oQ} zA4&J~tUe^8S;|631d+BUX`WEx+vaKL=O5R_0S-~ilJ{;;iSPGclp2&C7C1?dYv__b zVBu*oJc@Jv!iAM3bwC-lJQ+)0&|WGdT)kub+-P;0kU=6U!MRJ#+RbM|L_?{V@OHW^ zY7)OtD-H^VPg3HvzfFXz>YVzV4!bQH8*w}oKPx{~kQdo<`>d$z;%8UdfZK9%kqy3` zvaA1&OulyRtzwSfGWRE*^w9Z^A-BTuMTAvTv30ZT8+9mViE_jdb{x?ysN zW?PU|D6*Z=m*~dYqM3QVGlLs?x@E3;a!*`vrjut`=b2!iH@2^AZaHAuGbQuLynu@7Z-5@u3=s zq&heM#3c?Y_qMP=yT)B+fKwO|1O3(@0-;qs50bQ3t_)3=5PFsD_90@3GZJ$AFm+EQ zwp!WW_KqCFjnhS)F%qs9_B4UOA5Hs=kK$!VMi6ALN0D-8{UAGg?P3lQ2j5o_0PO;o75(K-ytf*|-{3oqH`U9hoU9c+^gQwCexay2T-rtWlG4HvUW=GJ!)jIjPDR zg!sgyYH9iARr#*oN%~ZTIhvcI)M!axpmL1GV0;+I%^S6-f?^SBO#y(8IvknHnS(%V zILzBKa%lAU<#%4Z6c%B=7n-l6^i|7@$In*WsYXu-Rg@>?W>fC%+Xu}l_ZF;Py0E7( zGs!h;JrZ=vTj1FSgI(=)_CwPD7TL{Dl-7`fhC(IADD1cCg#Wb??0+!|4++xpX>33~(rC0^l^eciwU*n=noZD+zH$Fm_y~^hl6W|rZq`)0JSa~srVd@F8qd}d07zDy=>Jb;om^`lfU@zN0PlrU5>a= zvij~LD3T~tvKI?7^l3qHAK8m>Z!>>Z&HjnV!ne(RxAU(VbdIWID>e4cHWHPiP1rBT zSjeVg@cFIi9mHf7s3WEsiAs7g*v(T{zM2f@P2?9bkl$FnWApNaJ_dfwB5A6$ImP7x z3<=%dd*MYJFr#njM}n2f9zNA11AyP)t5u!^Y#SHd!B$)^Ji)JSM4|Z_8L-y@^)a~|>_O9}+BSg0y z^$f|NOJDgKt`8_>_VP~%hSMV*$&glWOsDCJlp*i0sp&f3GNeZMSi8FCpN_8chlA*l z4J!86+M1-M!-`|q+yf_a{>JaCqg%3xB{JlY!{0*O@5hV8sv@p`=!uWPq(z~b{*dUo z>PKW43%irB<&_&YOwYnT-=4cE#LJAAP@N3K=Lc0%K0TV;RV8Z>y$}y%+HzT&6gjGc z%n&XSr_t#8HO3e+Lifq={ccyW@^UBMBUXOAz^Rl?%a0%e&#c8In4%{Bok@u2MY;7RCbv0r z4BT)QZLNE~_vW3~G9qTYJa{m)&SG*8A90iD6BD2{A`f0t0U#T687g1f#Cy2-^>^-K z^~Vo)wh{@E%6Er#b9J+DbVZ1@1N`alS*Wroa9Qr7hNKc?c0^RA@kIiVlz)2_BIw|IpGVz?1u~Q9 z!Q6XQxzs#GoQLo3-;0%>>|Du+ZeP%L9B*IPx_++x>|$y;vKaL8)Xp67?m6{@Uu_q< z=*+KU7JdkfZOrVExfBgvRObw9CyOcd2S`u2(+0R$tT0?#(8061p+=w1T3eY;*S7=9 z1vgfg+S7XvoIe$rQUDtj)MjmLW#^_TfEJ)7dA)g!LdX-M^yYPiL6F8Fwmt)n*Ha|) z#xsyEw5ztL5KElYIUV&;LGZLDqPmtiIdap$LRXV zcdK5ghti>4&{dJH4TUNc8dK4Apw8-uqp>Kj^8maAqMq{w9Ob9v;Roi%J6p?4^ZdXZ z567nwbbn(%SsA)OVj=D)J2_E`JGykqzToB66$L1}DY+m9!xxs-!sFuAbe;=|Y}5jhv9X6o;$zw;(l^L z0l%aOCHZvoX<7!FRU+sG)2(RmQ*f6I!EWXwv1!#MJsiBu4`asNdwcWEZ*H2?vFz0WCkKmAAI*x(%*O( zX_O5mZ|4(^ZmW1%f_j<97!c!vs*GSTcy@o=@m4*Pe2P}G!NcR@v}a6cHb>`98>!ga zM)ey0LiUn9Z$=jlj;eyaB+mzfZ>Jy`fU8Fq9XX_EL?q#mjCc2Uws<_Wo%Fm1W6s_x zKkoZx{WfD195QM@8mnWr{^{w>+h{pBv5de1vK6m}a-v&prW{dslV@i+^i0*sZu?8* z=oiV+3f=bAV#hzy+xCh;gz>R{oly)#*JFb+@ms00zHFpB?VL9<v2wIO)8 zGCv{#nW&H~rlwP&IoVII(`;|IO{B)gQ_ov_FPAuRc(8wAC@heGVzYj{K2PAy|5-?W z$GrTGkHxh@49qS46MP`1!OjPoZEcL$X^s-3=A``^yRUAhES;38Bh-@%V0kx8-~`pC z^z_4voY)dsoMQbVzE|c-rF9R8CvRJsZW^LyR;;=4DSgY}9dG%{ zZ7)20_R#NdUq!z0rPE+@_G;X2YHo$b(Nsp~ZFvw)gBm5r=il-v3tjR zG-qvoXd^3gnY_FT8(E#i4UhPs{|ugcOg6tuwmfmeuDqxY_fY|57@GXtkJ9YyS){R_ zqk(jNKZ>J|0QdFHG@@H29(a-%AOY)(6wikX&l$Gdr^1j=L%knV4;48AL$$!H>>DrlHm7QCRFt?CjlP|pn6WoEPt8TF#}>ll6hSM>Rk zStV!@XN!DA!4+I!uzJZt77uqnoTdk{^kTWIU7U!*`{L#+y70XD>cuK#t%65*=MQMP zp!}6=9TtY|E~6%)nAyKu+av=of`EuBzffk_KCjDUDLrSgS*f}Eyx82&$d3IHUD8ja z0^^sBaw=Wbts{=wgDevA4!S!nT#?v8(I?QsMX^{rib{Am0K4Dyx~mEhTzRJD`fDrJ zRz1?^5XBRcR4I_xdhojrE{U3?LuRnESJm@4F+~Gnn{oAUb85aI0t3Y}>n_YX+}&3Y z2Dd3;L?ucE=o<;{RI5aDWq)5+z&%bo?L)O>ey49YtV7Feh>l)D^(Z^KSzb_LV`6-R zZ;dYV3i@;19);S&r30QQq#*}lHt6o2j?6@Ipb822#2X}JMf?me8MH@73RAb9C1HZP zNpxeB7pOThHNSjvdh?d62RF1=>+Cc+-AgHBun|7-SZfAubA^@mscdoIPQTsYul~>K z_g*yDw~O#3vmD2&^G7=x0eM}#?GUX{Q}F!0@BwLx>O;Vgcor`&ivN4oAJk>hg0+9D z;s~cFe}e+{K~zkezu^O=x6XVC-|gJqQWKMKa{$^TmRkF%EneTu%@j*{VO^E_WyC-@ufw}bp$;?bs~RzK6{=l&Nl z?#vwcYF#itKKG}dAaU`u43Vf=PU+O3$sWvz1IOi83{Q9Z+}(UrI53kXs~Il%oIGaP zs_y>izI@N!ihxz6$g4{UB8%wTqsJ#D#pTR(gz`-6adh%WmsfUxDxXJ(0UR>d#xk~a@)(6*xQgkJB5$Dk#6NnK3O6~DL0cB#^ z+gls#)T%a&s?bVBK>$J`Ky>Hw^64e#9!JeY>)+)O8gVp!`E~Y$Ck1%(L`f!yLjc+J z;Z#QnfmEl|GURP_OWxCOVC|-D&PtK z;Eoh~WFGxz&070ewL9;ZYx=YtW5rgZ1CO2nhB#caq=VDG|L9>SfQVF*SLGf7hY_tJ zWscU@Ibuc6)v=f8x<|oBRLIvC6TBjA|IA$VW0_RWR&Zn!!)yqURU{7R8D6qdnJI56 zQH?-#CT3A~2S!_3ThgWv{AEYpqQ&Ui{aD4-uazP1D?65k--i|s#?YWOQCC%wM2_mz zBbd0T>!Uh{$ERyAa)@gq!**r7j%3@#LNpu%vRs|9xA;Pv*im4WziXpk!*8&{UsGVeWB+Bs< zveylY;`F4i)2{T9Og%aUUpmSr=Tt*sU`9{fy{9$^#ObBeHIc+Nmb6Pcc?YwKfZTM( zCSLCJzg{|*tO~Ogwup6S{)3MReBM&ldMV{6DMq>bihbm z#7ann^M&5B#l#+3nhw38>Z=D@io<@xc;c%8mn!$|va`p(3dt)I<5N^icl&xew0${w}W)A?*NXaBJygNT<5LI}a{=Qr)PO zK+hsHH31HH^y(mFtgymu);da@q*aHz z<%F}!OcS_SS80p!k5g@S_9_D@(`DjY4xSB$Nw5oo8TN4X@Oql0D*af!&x*qIlc~32Q(07j6X3RUCCbWD@H#{YWoqqj0zV8 z2(${h1k^k~>WH?2bZ=EV^rW#!Ap@;8kMjSx^9F~3}%1c{TcUowGZr935e(B^dtSdGgZ+2 z{*0vOV$Wx!E4}c=Nmru#@r;(w$j9N%X2yQzgaVmZxhzKFU@%MDq|ijtU7lMrJYt=W zPdSQd-dD_TMqL;0G>>f3UcAIgXK%0Q@WsQUAyV#?aPrsPTP{bF5BW?|pxWIIO$F*{ zDU089+uNg}Q6non_JY{T6+7EddttKw>;#Dya^WWV=WQC z5HNT&^dTfYXdy8{NxR67@DZM%(z^Tvja#Y?@uX9d~YHHIZjG z5zvSWi7U4E_l+t}N=G@hTD~lDqB}VkF^3sgJQ$vcPZ{FljP>14n@Rw4WOCq?l7ReRRY%QRPDmngGCdeVOmJ zcO0hKPg_J(Gg90LV*%Q`kr1!#W!FwlNT%GOaGRt;^CG&CNa+00zi+TJMwki>r2-zG2$_wbnsN}M??=S$aaw?v}^6D`@EdP&zPg}mYO*I z10CvpY@A{V%w*>9PYzM$aco(UH8NFl6sy*YQsOxg!f463F$rDAPWHs^f(b?Z^Wt|V zd}RZlcqka4_fbT~srF7zPyQMnb#ACgvV~s;gFCm|p?tCMroTXg^^NqM-rHD@$H`O4 z2#Rrb;{<|5rb<^Kx+?mgE)^AkAz!5s`sT<=OpR8RKR*d`7nExf5E-;*G2criJ3w%qq!@5 zm|x(-{FWz}w+pEtQ`Z<@A-MacE+Y>ycAa)T?Dir*I>W#L$-T6OgoxX90fDz2Z}__t zW{tGS96l%^_uyD%_7r6;!v`H5T|7uY^UDLc6&NH?%>VD~9 zPgRl&WQ}4ep?2^(C^iXT7FY5xalasfd4Doo!_h&4D2k=IbKber8B})EZ%@N;uaLHoF_ydZfonCYKa{kd8DWh&w zIq7He*g|vJB&0i5{@7RIclOx%TU=B?g0>WSSlim$$-KqEooA8Z#fQ6_3(8*Xl=XWn zA_n%(8Z4*uRAno~f-Hx{B(pX=Rwm+RtcgGb2$S=GSj*qBI zp{!x^xIF&(rVE#mJ>zi`hf52Ksj-#dYTwUzq*%;* z$RiQ&SE>1r#PsEZHSLkV;y$+fdq^LkyS@$+aY9tN3SUv{a*2s1+-s^YNg28%<6QxI zlQg#pQKA(oW*^ul5;JY=@A4w>Ei%2nvU=y{U5`EDF9F-y>(dC)c}rUMdk!$lcGd?G z6Mqv^sKgfA<^yR@b0afo>5LTg#4>qD5O%5XxWQrAfRr>JQvm|rzcFknXqMlKg;gvB zqKiieOcUrZI(`BaT$e^!cgxE{1~^|jjV-TeWp?i43#VDNo&IGq8N_Y}(uE$XiGn}QVpOE?0 z^8M=g@*huzUv;`Ui6f=BmZdn$8>dq%qq!#JMz1NT1NA7yN-QaA!0yp6%P5zaVULmr z&=Py;<71xVw|}Br-kIb~M`JJNk&xojs%*MI?a@TV|IvajWEttPhK6MA<&*lYLR5L5g zi&s6>clsGQqJPAOKUA0Z6}r{FUOmxIMzg55MhT>8(|zT`9)OuCu6U3VsT1_%`^Ppg_J!A zFcTW|$a)fnvYD{433Z@sH-#+cO_?{%8#&y~>RRFzT45Yy*dzN?M6RgXmG&P0pY#2%2DLZID;<0z(VV1!zo@NIqV3 z>B|0|GRxt0A7N*E8-m+d+xgh8e;2a(ZTxl|kQL@OB|p>p2>58Y@G=}u2Q0iV&4`NA zlu`iyptnDJeF(EXOw=T{E%Y6$C;B}3{~7b3-X{b2m*)PfP&Uh`%NmC=9S!e0XP~)r zxhQ88C{HPr@PC>OBk1*ulcIbA))CxpZ$_RC+QrG6)lQrqdZPQ|BG1d++T7NEZstPl z(9=B^bk`Q;p@({%FG~BLNU)NXjpWNa%qLfi`&0kCg$rUZwIHuZSq#@#Qw}6a>93TQqKCf<$#rU?vj%D82#G6_8aqM}RL&y5DCTmzlRlUO?`>C>Yi0wy zVBMzUS}&5P%uGxoL60%58(}uz&1^>?2as{{7s^JX2H{vVXnAnpED=(2D;dY&H_Dd< z(L9yX-@~gZ<21Px99~rLF4dv*LyXI_Xc_K#V^O+bv?3RZM<50lUFG=)aQ$&SmJwSS zm^J(qf5DS(9GgB-^&wNe#@#d#fHPHcVh*c%{R>Y7LCvJ*kKkXZJ zKPl81j(0Zk10AKPNPHA4j8&AVu$qeg2>tO5ydn-=-bp|aE8!*2OKg_cFxmXFSQu)q zSz6Zu2#p+L0@+$xryahJXefsh1wZ#fVB(C4RQv~$)>)PC$&9<|-Te4mTti0#%;AW|W!XTiQYPFv z>NVy0DSU*MquEtVWwVn48#1W6O1rB{5?71DHP5dui@E0EO!N}8rJvMDm2DT#&+_x@ z$I&Sd`y$BNBD}FZ5U5EJq#lgn@Hz$5l|WWg*te=UN+)|FdadxnA~PR1Pl0TR$?;p# zIuL~tSLmHMrAg&;}#%iZ*wwd_eEIZcZmvQvtae{ZB633 z75RedaYaYLGZhgaA0D709{KH#YsqrhCkmy$dg1p_4dD*&xcZE&v*>;2X9_<&dZI0g z;X?T0s(V>c>MI&U<{;nqXtUE8CqEiq$e+;Af2geFL}`M$Jr87{DCCh72~BAg>Klky z5^xI()mR@2MbQdoGSqasv5_w4)-2idXf}i2)Xj$y)-~%Zs;Fs>uIbC2HPlv!f72mj zEd2;x-d4K3i`{%E`2k|MEC$a@)KiA*h7(xEdO#s(^W7DnOTfSgF=wf`5R?)dTwHj6 zOoXvGNlJK4Sr^E~``1#km;s+AvMYUZC*ja#v3%j}q+^?Ru}<_y3T0O}-u9(UQ$4QWI++j6pOX3CS1LX7J{fIlBD4uQ zE3uv0=DMIw*x!LYV_W0=GAf;t z;O@7UPv&iX;C;i3tbX#LA9{tqTfuxP2Q-RT-;VcdYPc7!Znq92rtfx1UhV%Tua{8h z6Lj|9C<;XYoh&IV@k~QO=b?E#fq4SxM9EK&0@46q;yn|%Zs|l(?Qpm7BdQb)XZqfg z-Kf*?4@2?0nWCMq8MXboEk9uNt=fmp8V}nur@uQJN{F0*p(ThNuVA z`E+8y==0N0vZPLv$WAjjlzhv9W|#mJm>sU<3Gv4p8^T4909vGk+@tGaguuW=!=NV( zhYvtFBQMfZ7&qU>)v6;CEYwkw_G}e|vO}O(253eS$seZpVC=U36eYiOaamQ#Q9H-8 z&q!~dh(cCOnH}`HJVk+pdwCOrR_PirjDen~b$!xlv%RM(YiDs;?L8M!J-lH`sfbT= zR>h6yt&eYy!sTl0wzpq;o#&eUoqVL}-zy+6+mJ$>v<<*#QfaFzzQmB=(XkI_X1%xDF7scKct}g&10xe` zNEwA+6<38%aMy#!#-;d|u0A=P%%m2hyb1@tTC*2ldV!~rpjSOQ`E8FLZ)Hm!fUm9z zCL#ya_g*6ULND99I^3Oa{n^@8HSI8(=9=S~PEToVc<%(Gh(QGWXHMs6_>-v6l>@8u zG?$9n)qiB`TAP|S)h$LN$jQ5sX6@=oPfyn$vFNn0vtGUl^)t7JN62${I8?-ec`=7n zl2}x-48z}&3W!m=Yup*iWm*!ABtCfDC=nekgj2C|vvgHd3)E1mmn@GOnoE!!6)zAl z{0g5jb)>~UtM8Zj>EYJhJGdiV&#?o1*5+CN-?SwGWCip&7%>GE;7wAeYkUrR>+*E7K8qLZ zPWk@1pPu_~dRq`L4<(T7ylYpa?IpQfIaG{j*O;M5b=eQ7jz`}SJgqC;9m=eP1v2;O zl^H!cp#i7~EK8ff8A0Uhr^${gj++6z3ciH}^Rvs2r+>_rr z7`Ie>H#`)5s9^JZyQ*g3a6!(y#^l?t!BwVu)Lt=GdO^AjZ*oK{@`3+WJ}~{+&zVE; z3A=ZKC8|T4oTF}6B_jurZz~Rk0RX)E^zg&`3f@%Dp!|Af#M+oNoZn3Kkcyw+acX?qk_%fYaUfF-VS);x1cLuJ!!s56 z91ee*-zWDpTICaDJ;)`?-*(m>sJu6@Ur3y9Gp|%~Wi9Bojokt}DXdgXlZ9qoj657< zO^@2`Rbf+=d-pM#l#J08inU0Xz8PG- z)(oy44MYQ?R0##pInKW2WR4y18{#UHFzZ94@|l_#>1h0m68xgobp4eh6 z0@ng8o&Fg@BFrc!&8o{yg`DIN#U)IE?$IJ1{W`ubVC)B;TyP#*jM5~ zMo{2uEY-LPz-Y@%a8e$^C(s1zqOFItWNN4h`$VN^96@33J9nPFGb;|7^*1ENkOl{z zcXF+jQ>~;^XG2!t#QzIkNPqIjX7gx669V0yqGx$|&;l`4jz>PD&r!Kwu>~$9jF>Ov zDDh3yh>;-ko}aIXXOv0Ap5>tp@@PM1E6A@*kk|YorlRg$h~d@r{Y26=2He?(TeVRl zY!s=HGBEMtVYc5kYvU_d7t)BHVTV{iB5F)IU;?Z0R&6n(ZpV{&8X+;mLju_F*6y@O z7zcBEd;CmBSRFigQX??43QM9aHGbnpmZ4Rkspc}hJF-c#MENLmU|kG|VQ6)$jTbM5 z4d)lW1xwmu0|=;GS&>TiFUz$S7|MrP*fk3}qMjU7-qDuPo$f)Cd+R%~WMU1^&-DK* z=cWdA`oEIH-SVlYJ7eP?T;=Egf?U#)nY8bp`zm!l-=?ni&&~byUtvu;)@>C(Gx8OC4 z9g0=D2tk>GCv9g>O;qdSK)*Zw6#12#yTx%d37GOM&xjoisNicFqIl&pg{d;$7@U3U ziLE*eZ&*TE@nlO+_?FicVe64S6s()CA2P8eE{M@;BFZW~7l+@Q@S)hkk>OE>1$n{D z)=RZ#iv42lGk(h2g~N-$eA4{UuggCyLbSvgabwdG^w7uaqlAMyGp=7q2hDl13VMQo z6rZ^^3$t-2pH_guqg;dGUDpO&&=DA6lxdx*JzRo?T*}q)xdeJFj?Tz9Mcw67h>oe7 zTYSr#gEqTX#KWteP*dUC%mcxuQ}@cWwbo9fUz+>ns^$GsNZ}7W)i=`#H_ILUkiV)o zf>9vw{qDw|WBR!9lTc3u6sU>E^}O&{xU6{3w>5bWw;bY^Xd6JIm_iL%IF3R&@i+rB zb2rZHLLVM{$}qTW=8+b-`I{O13>#%L-~FXj3us_YHBLi?ummVQGIkmO*H}iDY1oli zFS*kLtb3PSGAsm?3?_$=H1K$5cWHH9ohg8~E(JqU7m&M-R^4I=r6!at8Sf zyE#6PN|l<}FIQn?23^r5P7ritl35I;CM)_mVpg;vuJVRehEXahCBcur_a+1mg7A<( z&_KJeTP$X>U$A0@FUB}dhQj+wkW^XIvi+5K#4~s&Z@qAkm?J)X_PKzA;|NImb-9vN z=|+-0S#1}n1mwr^|^UHYVAIz<(LHhmrz<)@u)!*-R3zdP|iiy;Q z1R(e^3a40!3h9f^j!Gj$&&*aUy3$qAMu(F;C9&rGfQM>i)1!wE!Z-y9VtsmFGug~s zw~$ZuGr-e0Zf$5R$Qm2bfz)r3^}QksSpeBO=u`79R}e)I#--Hq4;TeL)2v)sr+QSIj-g% zH2WB8Iy|s|X!z*C(q=qa`*v$~tL=VCM;J0Bdx4Mch%KZNl?q9z%Qr%@V$uv#aN}_I zwO(*(>BYO3y$AZj4IjTb`G^=N5XGy+f>DVY41!TpaZWcSDKTyClAUXuF0nC14$5RU z(%A(%jy>18fKYhsCB~|Hd*<}PomWnq=I|IObq-`pu?(lVz2H;DV8Y;<>!DpY#Dj)~Sxj-Eij2`Dmz$}<% z{ODnNstE1M>b1kBxi6rQfK(9X+G=81$eRI2iGi0#(u}Xzo7WFG;@f^YB;Vh)6(RF* z0#8%*yu7@*ky+@fBU*Wi`AZk~^ay%y9?Al!_!nBF4P(w+cJBzu@dxb^jR)Fz!r#a*3F$1{}gW&HQP~fqTEVG*2X=u}n3zyLOb|_g{G_)%>f~3n5)(vz%jn>b@I)7YE`&?DgmXeq7j>vN zY|(KGm{L9qOXG=&qt~6NB`?~wT+g0ZuRT*esfcL(f6g-b-lg5k=Vo4@S1PYYw11Do znZn-%kdRc$Vn{ZqFH;4_$$&uUd9jantgMmE*?GTuUXCybg)`y|&2k~YPZw{AYu3?4k+H+WV-4IZq5 znx$DyWEQ4*Q`j(}kgxReiG-U`wwg@Vs!mPWN%0RSoJ1rqDfKo0EVq0xc{6FJ4{9Z& zdr&a0^Gj-kzsudBzeGou)~tOTHSc%_#0Eqe95h|XrWaPrZIa&h(S5eKZRzsRewELP ziI35HCS9P`At#R;)=-Im~cQ3xHQh2e^I!?C`iCh`)#VuFfU zJr&EI_@Voi7YqKOS6me%=$8*46|3dOPgWHA{t36aJ{sy*8L@h6KM@2OK|?S}X(e)4 zW?_2$cwrh4qn#=HO%4)o(r#!1-EyOs0J$h8V$Q7DnrQ-)Kl@u`R+WRW7Y^o+0vkcL zf^+CWyHOt*IVkg6w2(b~M8@SAdtq}zmp z-xynKF#yGc0ZhMPO%Z?Eigs9LjjLmf6!RF=W?~{4F^l3u^koWh1J3YJ8s>d^Hjcxf zOgttzNLw(^)4hQ0GO%%Nf+_Rqb13KW{CUW`+1z$Ct+9%O;Z3THHOt0ZBQuq4XP~Z< z6F@v6WFh|9K;2RCotJS8W#lsJ?U$<0@v(UB9~aI2xx!0Tvs0Y+L`jv=L-1I;K0<<3 zP#D+L5=xfNS0EB@>bu%8OV@8#Dy|1rSgA}W?sKzCip>t=yJO`3&iD~G`gIsFhAc9W z-kuq5s$X{c?FsUB%@ON zQPP)QAT64K+q77_dzE?^SM;--nAlJ3C2y_PF%eCLhUAJE*>9 z7`qj1>&CLgH87rVo%obojHPa3s;4WJ4LqnMveIx1-Myy;S^k1k{vMvg=3inm=X+_m z@0s{T|AVAdtrhlp;*C+n=Gu-@<;>>SjqJw@aD=Rv&7ri#vnpx2}uk!bth5$bSss z%D`OC`>t2Chsrxjw;}@^al% zVS}%Al0b^ccx%)e-+E|r3=g_GQtrh7jhe&Mb|I6$27}YgLO}&=bF#Colr-T1xSpPE z1%r&N9JMM3lBEFPGK}Mp^%M}MmlF6#M$TbIEHX{eVeW~A7M7?h2_O-wl!?0O`1Wm2 zF`;?WKt=m-1Sn-TaRBXeHlg_vzNuBg(PRrl<{gNNS4u7FVFCK%U&x+t+SpM>P`OhS zsm}^r<--H|8Q&l0@VC47Wa-9DdMZtp!>gCM0n4lUA?Qo{f>Mn`shRqdHyL~M@QPedV9 zw}s7PQ0Hq7-DlyrkJd1Jn!&0N;Fd>%dSWTcHL=V4sIO<5Zc~{v0 zs=LOOfoSMjEAqe5gxk#oP{t^Q<71tj|~(WSTe)U3p?SO;hu%QW)NVD zs++!((W;7BtCGGLl+sA#nwi8-8lbtn?y)C7Hdt4QI8dtPO{Dr|^flpzrEAydIqreH z%pntfOceqN^EbE(so5AWJVyi4jf*#L-n-YNqb8^dP|F0DcuPhYf>C&2oF*tdfG5KP znYsSinyYn9-{T9g{9lFTXGlI|kI08k+l8NtA|2K$5{9h#B`|-VgHMA!O0?<`>UK<1 zSiJPj>4}I`zWfw5lCOGl>?WFq)cH+l?(0Fuw}i<$HtMy}7vc>{?Fp2sm{=cFIQi~2 z`v{WNjR$B7EiF%GX_NR|gX29eqH;GoW&ONXolV2ZL2Bj&HHj=mL7O0?D)&u0W7qXP zxY=lPZF2()I9i&DLf~(4=hU)bocTr2L}&b9c-#!GoZP@L&)&&aXxu1eMb)it#`9Ag z@2!b&>6zG)rNTYz9j^H*l*WIP$#2d#2M4Vw&5#ON=7`EEGbO%{a( z+}(M@o0{hI7&0H~DC2x*yX(l-Zd!?=zwTqvMvi43KTY-0|I4|5sowt4+=o<0{;-Ow z|5#Mw=g)Ym5@#J>m0veAIgn3r0S1X3!x=1(N5TTpGXX+*ZhW#%ar8#)(LMU6PokFf zted9{hfz&LEB~hU>WPtzg)Ge#^BKkBh3aQ~7xsKQ%@&2zHR*Y8=e1D1vl*}b)beVM zT77H=j8YeInrQDDHH5v;0|DCY5+olEPrUOq{)7btLhq{6Bq^;@QNfD%zCH-40FT5M@=g+S9aD-p0nSS(OCfGb zio8V%DWAk%EJ`Cd|KjD*sumB!s!5-77>>RtZ<0?ko$h3%OVeCB@ByrvXtxQ6J3LH% z`O-BX%$37S*$XoNKA*~Y09~&=Bh z*2)dl9534}@qKfDdG5b1uIv?6T)5Id@^WF1z@=ie`ZpjcHfvVI_vm5qA#I0W!j<^6 zt_cy!8{`7E@O<3Boqp(X?F;d}dd67qTpI+_#duciE>M8s8BTGwHfMdCNAPB}_ zn8emaCfT~%#xw`J51)}BQA~3gMoKm4{NC1vbR&8b}%-9 zvgLPpx77?V5`Xv%eE*MZ^!bjy_q1r)aX_(0r=vOs2$>!n9ZovX6Ht$(5WWnlC|N%) zB3w0lTAql!#Y#urCXR=_9`s;u9ci!10-g&n)C=Z z4)+bN9$dVzu>p`fIQb0nybsGz5y?O}07!!Mirz^fStcfWg6Z(l8T07@sKFgs>_Qu` zYTWp!I1CfZB6huX{W?x~{6HOYjS-k;MTf**m4YNSm-$$O=6VKP`pz2)GQXW0l)5t( zD1lgk1YR4Clyi&PY`+n>GExY|{KvA#6X4I`RqTUw>dfZ%b{I+OHYm%Zow~#`u1?g| zwT5w}P8rAE@QR5~O{VYrK+`Q*ne~zV6>D`jIS-kh;*9TD6+d;Z)0A77U#Ut*Kqae(>3td|qv*&4 zNCBRj`jWbH?#d1T%-5@K5OZg>2obVcN0}M}lqy)Vv~)AYI{+;)-&kGQ7+g1;v0Let zx#{{!Fk81uO1d{4>0ydz)EV`&C2ZarKFb7ACvXf2H`kujr_l`g(VN3GN$(n-^)3e= zcfXn;(5%$*l0bC0C+2N+bx)L3@F(p;OeXW?6Ex#D4NZ)~1krcuk7T{aFY)!BM3H7$ z-ijg>Q}i_?4lY&)jH|(HQ+uaAQ#I!MCbKdA?y_nPEMElFJ#XRM4@y{}I#b5`Q)CdIq5;v5|#xqD`JYsBU(ys)!BY4>-u z{+q6EHSNkOoiJWo-`-jfC7RF}G|j^53pp_wpI*^Al(-`qtum#kW#wthtVEbb-t<$7 zN|bhFIcK)^(HhoZcWZRp%&AsVSVYt=Xq6C%y>c^kB`exl3|8G25m*)Z0VePZ$}P6n zunh=Am*A+=C=6{z@$GF!@EO>gC zfA+5+=v!iu-(vFd_m~pbRSLif1&RKuT=c!Nl=*)=^XI16v z(-7w4fiAn5?hPzpBd+|Vi$cJKcMX7p;oQN7j1SZ6ID=ld3k;PEjRB(71ewMm5SWI zOs+bsY&MGeAcKtH7}_i-`A~pGprzoqp3<}piW+j066DJFLXazKw-v*-crK*|Od+

9B>ilV&Vjg4b(n?-slADKPo_hAo1mP9yw8>I`dxPJU> zmB&vPW}!;{#Dp4BKMN9fvl19n>ml1dSjk*f&C=)b)z8c=(o4UMpZ2%a4$w={F-3hS zqk}9Nfs(bLVJXzdBR)a~{dNfwj#+(kc+@>F6m|ppre_x(+`}N3SReVna8$l?S9}^) z>-1Xqt(%Awj`cPkJ@&|9fuMTHl|es7Dc5!N16@qqZ929J@7G;f%y8~sW5&{Yq}OoA zMh|?le~}c64;H|5cuadaUmj3)+zhW}46EV|6ejr)!sdgt!tjyN39*!pXTpk7jfJmY zGvq2Ir`&2~Q8KwwD=FHt0XJPxH~Bdjc~Qme%XHSasht0$xY8e+`!9>b zqP4;q6jN~ke{<8to#bIIGr_jHinmwaTn-dCFs>J$UFn4<85DhrdgM-9@hr-E2J_%nq&G)KX z_-`QYz+QO~gZaS@H+MYJ^_B51ljjA+<8RNWftl`FTJPeLnd{RJVKjFy#RwSj4*k=m zSIWuHC_bKHxMhrzOjUwL4C{3w5=U<&JxayUqryu*rD5h3_^X*B#mENB!N zbI8LKVKBqrlMIqeiB$!m{WG5^IIEs;tj#ut0lBY-F0uDEBt5{Y;+IQzzp9eL$}v)+ zRUJOw=0u(@XSA68HRaa}W9!Vg0AGDp7I zCev1~^kngncw-{aF&o5fvuLlruB zKkIw(qigBels^ECV)dixZzlk)aDGe|aU99G4JHb(|vWw?Ga;!6knhu4p(Z{umx+K1jMxSBWZBQTkj-}}Y#|DQJz;%j90zH{!+;J$y+`+1##>O3>M=%sZHg9wYam(+urM5*yVb8?U)4GN>?`qgXU!wM*H9y6U%^=LoRNPs-?_-pHw zOdr|gJKD@auLU3y3p^6uF%bn~@{!V~ln>|I?ur)_b&cnBzT!^(4jb8NlQ=DpcwzAo z=Fe#eg+xQz?dnO8K@G-wO_bY#Xy)8rXs^06=`kqI|CybS##aY6v*IXt zFX}_!AQsFit?s+l%wm|>o?~g3HRo*KTCiODAf#7v0~Ic-tNcDol51^>Up{kL6%-n= zHrE9_96D0V>n;@RX?E|MJl`#838G9%OyvNp+hwTAi4S{L5i`6-t$KINt6I;njEWsL zU0AFgeHnIuNG*EHhY~rsXq`@bnN`dmsu?GMfw8H>FTtA1pJ7RA+WW>qSjqnh^@fcU zv4tdzd>N~}zHLwnMi%o33`?`ku=xN> zjCTxJxbBw|qn=DEnr`o*zXgTEc`NU*;^MXW3||(dMe~m}vrc|@zyA1zRCL`uww%W8 z60UCzb5I7sw_2E$%5rcvRoehl|^o(&xa#KK>h$VHmHP{_EyhGsben^T2Q6lTnZh{S_5hSa(nSb6+%hD=im8r4_d{I=9g-a6Yjp2p}vn`ZQE zw66Q|rBWr<&Eh}!m7nLc{7+`^XR73%!r6V*PECPhT)Rru;+E*XsH>C7VaG$0lZian zj3peI%c!;>LO+yxEA1O;C{_b4cd^_o0+_I_XW+q7yq#ZCr4t!GSE_c#ozbB^e({EGJuP}f;`xxr7OYyX8DEr`86TBwWZ`?95r=!N#unO(vCio zAbJfIO5TNAiytUBLgV>fobEiZWji{J=RT-xv*Mk!b5Qc)#1;mo?qWG3h>fJm2;yhu z)O7_#NaW?4w{vQ1`^tFo?A?lyG^68dC6nF_He*k{S8ppKme`ST$T2VgjSJ}Ct5+~L zvA9y{e1P)(-szSOCK+~p_DXL983q0_!c+Vp5}o-Aq-bS1%o{7trxPsqp8SrKP1h8A zkRge+<~4m-`R;FgHX2#~hkULSJ0ReBhE-oA1#0suc0=YVaV|o=kr_D z?EGE&x$}9--gaCStO$vQ-%8)%lzh$NCuQJqAGQgo?6qKr1&U){woK9!JiTmn=fU`i zS|s#H?EB56H`#k*>iBNDBkS!de57M5uResKig#g3yyMn z_)}45jzYjj=T8=&WvZ7nAjV|ltt=2Q@#m7zy+KYXgjS4$V`*Xk&9|4$(B&ww{!^v? z3L(OMmBmOEmaYmKDw!cbA^eGJWrMlAaD=9imkO6kl5@V>*kHvdEw_ zn`HZpXQi=#(nSM2gILt}x5LSG3?Pq1A4zFX4B6xqvA43g8Tgp@pUR!Zx5U9(ynHEd zJq5aJD>UI{X-dK}Im!nka+UCGUdkQg=}@i3V9I(cRLRw%qlus#Xm~sVyq;dD2&p62_m9@t$9W z978^YvL;W+XC?|fTkq}IOH};@vy@swC3(Eh7gEtepMSWki^_DQNoA)KrSFo{8H`(@ zQ--N|C>oX`4mS~6>2G2eR^)@8@CN9W97VkYvX<%?ddi={F+0%J!TcOMkY2-&SBJz8 z={o%fa5D_j2S-aAMyIm=!2n?@BGGB)N8zI4GZIm}-PgO22zs{D%ZX*R1rlJALKu&f zIy?as52Dujbd{0B&6?qZRg(KI%%Z$6lh{}UFV?wxGZ0=c*}ZxZbi!nC4XYoj2Qn*k$nHv+Fq5o@Kmd>LvwM zO`NJYQtgJj#HsV-gWm3-v1zD8H`Nr&H6#TR26xZP|tS`GLT{U{l2 zUPti{oLHtwd6zuH;k(I$?2^wF=6lzBxNfzIYc0D<%XOO{F3)HCGl>d{9<}huM195Q z#J_%a?j0s{eBAD)|H1^G|MMINcEB~BR(;oV-s7I(s`9hr%Mcge_6=efi4KiUj`X z1*PZ80Gh{L7V3$@cGXh~`%lCgO5{-$De_HcGo_KUWVFloNED(?>A!)90#>rY$w=}$XX(4U;;b82jX-fcocgv?jb5N=d@Bzx&eVgtVYe>QltY zw$zy10lnm@-iySOU(h4^%SQXpKS-dh)(@EM05wa50?m~NjXvHyD$qhQSbO7!S{@m;Ocd(y1wYy=>`6?dJRr z6GZ+>SB2kAi=~R9go3Q&Sk>T<%%Sc925#`{a9AnS6MP$v!gYbgv!qjTaiB+dozXu( z+YpE4`5j;9`St7ynE4eDah9>l)5EOp)5XW4Y=8CGvF`2WrSwDocx<$uErew9v0VI+ zyLZ4cM~7M_LMh-_UKSZuI*(nJGg;a-*!B97tTZLD_{uWH7qYL`l*vJRMWz&!%3)bp zg|#!u)jGoCrWu>A0`;5LaqJ<;Z7A7!QhWN<{7 zC>`qo$P0J*tBJZ*BnCUF>sW+I{~wt2k*L7O=Ki#(*5^8n$l#({6yc0p5*mnV^JuBR z>dx-Ii@7~bjYh{<#T>QF2=90Xj#S><*;04w-2Eu3&R$ki_avTHy@0H{IU)%X*Xw&i z=M7?9S}!k@?~FK)L+WN_`>v8YBf^Fm^BCMv6TxvZD-0o zicj0@B_kb#pBNU6;-9DjT0+xL>T+T+bHwT2HsaiLIhJzzy5W}m6p~?JQLKc{V%%4S zRrwVZVX0sK^wl@LxiN$!K-lFOs;nj;2AU$KCz8T$gM+aO^*L$i zAbVt(hID*86n_;58L6MaY2Jn^>(!K=R0Tt9_euxGR28rZ8hS@upw(uF_%n^yEoKtMuUGs*OzwAeWX- zB@_9s^RH&C=GSgsiHekrU_G4Ll}vg|k(utrp0?F}u%cI=opY7<`joByP~Z|X6{XQ$ z3FFWLyQU`E?JX#%RVcp3z#?V!MP1VVO!xNA4elnVgPy7up`i?oS1?C$$Tj5VPO{ zT}#Gz%?}UpKcQzq^4>;40CE}Un|bNl7-m`^X|EJ?x0hU0jd7%;YD>C0rq@H4AFRB< zk5$g=pLPAbJng=nhbst%iIV0Jyr^_II6FT zD|H(#dvKbEDOQ%;2f6DFzNVfgH3;T4R-h1|apF2G>J$JwFZgbzN=O@Y1v!0)|S=f?o+13JHWl3Oc z%V6UT1=&Qh@e-RQ6kx(qF{=Y1K(UpD|85-KS6gfBW~h{b=U;B|xDAhKhV^fIBToX=Kc#N14aK@fvQOH#TZr&)|VFe|8_- zZSPMC@7_F`ms3b+!M39)h15D^0!czkZ_46UNJ^iU6fF-g;YzD@8?esf!%uQ+Y@Bc< zmhRhuGV@yZETKwOFU880%-qtcEu*RH^{ETrT2eheREd*N#uREGkSBVb zE5}~YI?9A6a)*rxWSq7nKRg7Bg_FQb=g=_vmM_|QUv7VeUmZ^|-+C*%HRBdgdK}WX zlE4(4B&p^rA0F{&u3wFur=NmU5ODKkr0``#yyk75N}P6m_`IE+}g@75MNTwBBXxf1rmD6D!S_vW%wp-ibPF7sU|NP$)( z1ukDSCHo#`Jnx;CQqBS>B`9a@4_cey=5nzzwXCqR4-G^5!OV$~%AVY~2(<%K7{1(0 z!}oRVl}~HnEU$c>#{CB|?qNu7l-kBcI|kBEm(U?frRdY8h4j3@2^UvL8r^~Dc!#Fp zlQFpBW(v|8;^?6pY%@L(P_yh>c)imagHC6!3|8@Es$>GUD(&Hr05z!;%m?0$9>X!* z61{WCN^z+j;78DS3A;3NFD(!g%B?f7{!$Ui{_bwts}f^MOe5IaWsF_qw%2evArm!&QegfVf=KqwmMbN-XbQd<5IZNg2E^UwoPS z;a;l2otv!K#l_}&Pq93h(A9c^&bF#C$LDT)w{MqW-=&p#2&Pil5IPR__Fde04ozXK z5nbOUGBGSW)qg=v^Mb6{NAy|zJ)XtSw$@rl#RI;Vu?wY|0Ms8RxQDsQgPKt>R#Fb( zszyjWi>K@SnU{i-W*kc0`oX#J9*SSVE3jM|zf4$y{<@08k>F;_f(Jyd2$3^jecWYk8Qc4&ebdLi zmgw0@<&?Ns5qoC=7$Yg|@k;!c+(_m_@;Fi#VH7J}v1Ve#Xmakwtm@8u zZ8}1lh>WtZY8qciCM5>6J(Sb*`LaWjCCR8K2zgN!BdD4bq+Z&Em9;z4%+qP2#bh|Z zJ)pH{n%e})L#@PQXpNu#%l!2B>fHWO^KO4!PUEL!_#kdru?(Jdu401vqYHW8VwzZJB(ytJa#vQs8F?S*GJ)i!Am~I>^ zxKFY_?3kAUh#FN47X4!Cp5`>=Rz@(Y zHYwN0Rp-i)_Z=S@YGI2aehtwPTzx=%_||AOC9BGPgT}4nB~1dwkLvZlxn%V)4B)I~ zhesq~Yin_7r1eONa98H9S>X{bBhgi7GFg2Zc9C^X93#v5z9;O#a??Snnvrtojm%aT|kpNORb@WQ#hxr8%HYF&aCAGan+msmp~C#fY*kyhca zmM?7Y6Gwy1tR`j|qD`V>R^DExTe>PRO5%H`!WiyXbdCVG12X$Y`tz!O|q2<-L zzT9q~pEGh6Jnin}(+X+`qO8_2KUa<*@J7X{%P{5SxOeAXg~p|_;t!ep|7Y!*{5O27 zNC6=9;3kb0z<- z9jJ*CVGhsCi^9WxFWt7`<1gWpOh>4VL<6F@vsi^P7l@Np|DAu&JfeJtw_H5Q{JHsG z$^OMPtY6x^w*=fL)7dBd`7Csz>(%m`#jXGc1>v#0itX*~wCp7zu|)61uL#Qn$H1r_ zq9~OY?A7lKRAXL}c7|(os$2aeo;hP(3k!KX@!u6ZMjO`eYagG8h?8q(ETrNvleQYx zN~n;WxnxCzt=s!bj`qwLw7)C%DJ=;Z@}YXyy>%6ym#BeJa)%~}VVI@WV<|Zep-HzW zp4%D=T!*7Km?nOh%(vSS8Fa4wX8s|$O!>Hd_n9MU%1<_zW4pv;#G5HOg3Npaq=G{Q#Y`2r^x!D0o)8!mf&?erxQjtu2yc!rAJ?# zz~4u#gyXzGb2ZFQQeB1SyQ+w%tD`2 z*|aTI#fh@j$zJDS(Z!yPKw!|C{o-!bc=CB1uS@2N7xg%HCNedfm+LEfPkN8+)Fn&3 zzK;)o*XlmjAZkBB!K4u;AK~>SH&eg1e#H~7^j+#(GuLe<488KH=jGFVuR6GhxXnZ< z18S!4+S_x?yxN@|S_m~tM4bA9c+#|K$|?~D$EpHDCP-pSk!RIDJ55tpXq0pZ&*w|l zHTeYyp{Kylf#hl*BEuWw>y*NtuvmA?YBjOAzB46xoRCz7l9qS$hw4fD__1p5jl=*% zhs{Yq0iYp(I{l4ncxpZqv@-oc&AhqeZPR6W=Ik&38XB?prDZ6LP@45P$KT4t`ATQ$q=U*Ywa%|2ID=>PIqf*LT51X0U1AJb8 zR3t4w7jo6_JUxk{4g|(8(OG5*Wt=dlZfVhQbF-$09FHhQqgg5ig-(}0sY2%H*y)Z8 ztziZ4j0#qS*+%l#HsVCkhCazNx+5P2+0@7N31Rx!djX^>2&=j5)g;NiSrINsm2EwaqA`epSve-py|W?LJ+sOUr;yY0aRx&;iX=5KlQ^Om7C3rMF5xLbS^n{) zB`sJ74UtCHq(6#J85cps)-3;tCW)I+zpW;zo2hB)gDyVfEPeUZy_!W%WNuy?^bD#J zHsENkjY*nGcRt+SF6&J(dw^D*Q?yTO@XYd#)Z?OIL=O(tubL}ewT=&Un5I^Xd*_s$ zt&A?(R}vYcK`P3~<5wk4NiTpIb>qHT06J^f+t{|_&u&;T%@ruwpfkQjLkLx@#_1Pl zEZWW8;zD&`=CFIKFzH@gWYVN#0zi?N#s4$8#nGuTz))A?%N9w-FHf8Jmq~l0kt~YA zMWHHmqr4&w9PX{%J(@1R-6BR}&LKYa*0t)Hpe0d)CMjo!>wMOh<_-?r)YrdivIb<3w#sOJU5l z)s2ls!V!;#J2UK0CSo@-paUyKo;Cb%pOe(LmSHPvt7pQsOQqW;F&DS{C{CQ=dB-|suGUGS~R2^!M=yB3{nlc81Le-6k~%#d2tzhakAO~?s2;7 z(<&U}WrbzDHo%GlswI0u(bPO5KK;5x_U*$X(mNr7EMImF_oYk%W-x6Q%w~XrBP!=p zbxtN%Hq?8Is#dpmSJ#RgYGiWj@Q}M5BiJ5((e$iUO^(}x<^6pw^kf3Zc&AUu1oR$r zHyo3*GX4fPFs2>lK|$1FA3CG%^0E=XEp)Ny>&w(1S2?m; z#5`M{RKrb0>>ejR9v`tQF?x+yx7O_9X zKp{p3dSuKf|41BCCabl++^R56)JUtc*w*VQSOt3m!JITU^POMZ;*qIO?CwJOH|$?% zzuPBdT$>W~;U_%a+K%kvXlE?gTv@q(op+roCHjineSLYwO|gpIYVV#xVACDe^i2XZ zH?Q9)foR%as#`Z%x(o~@~*gspq4Z=yYyfzr#V73tbt`Ag=Q{nXs)+-+M+-_I+r zxw^q$@G2h9kn=kE=>SP<&73t964bEfPn>^W^f;^IN0MBmXvX?cV;@V>GrwlP@`9oh z(}6`UNJky3`h88Niw|)Yl>3-txt8(J{6MO{v#}v36SuC@-oDu1>nM-UG`RUqpt=Ev z?biD_0u+I=8taMm$)gwVBt?vl_U$DuQey9SaxG5MdZ9G{Uh$qKF?(yPlOXG@ulIji zZ%uX_*v=?yY-Hp$H-T!Ba33B#KNMRI#;$wjJ`E=y#YJupzm3;o|7esIB!GUEy(BR_ zpWd}=RU9M1qhgH#$2l8HT%2eZFV`EReR#rvn>$7KJc1$oBn;u1xeu7F@tcdr)jb&= zc7i$0=D2C2n4m;T{SuZx^mo$E#TTq$s+@75jfNw?pLq^5{li0fJ&i+*P@8&w=iWY_ zES)^QKvwux8|$sfiBnQRa_45Jy|vq7wbQg+`F=RMT37`k=F28HS>N10(3X=*+p2YP zY>5eRF)8yyx2|{2br5cD9_$tC)qX2ki&r1;)5$vy3F=ZLkyIgNBpy&vRlER04h&PF z0IQD%_wNx(C+qOKTYxTiBTJ^2ojW>QygoE2ND?CkV#IeDwua&@ zHupOo`{%W1mLo07qft0v)}qUuWY~6EqRo=|%0Y*VLxbk0sF}P)^7VF$%D?O@tVxB_ zQK^~seePZ5(nT-TLRKGtt~~vdy#cq?xofqPnfIN19gM3k4YOrZXAn0BH&|JYcb6FN z%JF2}*1qE0d2Fyfsn3AmEXl9SG{!NE8>GgqU_??P609vjn12TLy$5VaqSh`GXmrf* z$DDimqlJpA+XATd^^B;@yGPcGWQm?_(b^I@aeV_EgbnS{i_2E>ju$pIuN<$g!8&~8 z+1b9Tgm!=3iY0?>T!EcFn4BOgZ5afkx^^ZEbVJsbbS|o)ShutChRpS1m3*5PAN`DM z{9}2`$=n?n^Eas-{+=Qqg*IXCNuMx;;c@sAIgw&ELV;p0YO0`S6woE<8l8o7k*AV0 zDb%fB;ME0ctHr6vkAyh_dIC?>4fs|&eiLN~2H6505uC^(b5*`w*7w%r0Ip+avo-rk~$mWiL4 zz6*(kRcr}x%(4|U1cU5t@9hPxaX={_&4N;fXh7`t1rkl-r>9B`N6| zjhEL1qH<8l@0Q{Sr%rmZ{ z2quXS=gpgYKAL|IYT}jRTJUVf_8u~Zoz4b0&E51jB*J8oy7%EG+31&9)c~Zny}GO^ zsvk_xV|0sTwr^bZNG-Qojn2yFWS^t`Z7+J6?z2ShnpV1V3$OhvyDooX?q&4^$^K-E z6cK9%J&_Y$Lrs_vJ!}w?M^ip1QFKk##udmO%kpdufOw+WI!1QacSY}BIG%;g(GK6BCjWnM)n*LyK&!QdQ z+HaYl!Ek?nFK!y5Iyj-RCX_AmtfbTQLSmzAGhG|ho)>fu4#X=CS0Zopwd1TxneQ(f zJlapnx?5#T3bt@%XP%PehifG$Qcb+pR(0BHe}GTPAuFlcIbeg#|sA{=&vd|;E&Ao zbRqL>?AJMRN7E928MyF8B)#xOA#`zfP}7^#&SQvL{Wkbl(G1Zfg;VfWu3g@Z2WrL( zFL+Pkg6M&VPa5CHF~Lj+)PMiz`~uy|a#D9p=l(ALP~Lz5_wTDfN`sek+E|r22&#wy zh`o(aJa#3Gri$F{clM4PtC=IwkYtk*aCB*xNDADh)BPesDxYHTa$ahBE7Kz$_64v1^9iZeROh;7h|epsoHn0Qxqdz z-kmpea?#G(%RTMhy0n+{Q;c8xH}wABn0sE$+sDd`+dozBJAHIfQ!U*Ob&Cu+t~+rG zGceZT;9&1Wb0+t7IdP$0>~>^5-MxqzDkHkKhQcrwsZin!N&?5iJ5V>(8ufd^2uT~1 z>bIge@{z?JlsaP?{$l3&A!>t)!yp2HAVFXx8F8>0+Vtxvum5 z;kI(Xs}Tc6vty^+Gi9uIwsTRoCX4JrCy+YcPL%%o*1~m=Daq2K{2_ack_9$Wl$+uqCViOv`ls2dxOo@5NvM@$C(k4 zE=*J|Tbq%9sHbi^^ z+GhXcl&N5Z61|ZeMb&1?_T-w}sq1K3xnJu7yiBzGEP z9E#UeuAT5%j8Y4C1EvvlYNJsTg%z6mZwyku8H?0-Q~b2ph{maiEecP;#0|+kuV37- zQ*=b5Pl91R4Cm#Yk3P7zoYH&U8#Yoct;DlVE8+ewO9~%oFTCUAN~;5{A)X5h2C`IF zCQkP3@JNE#WNpoF=c>1}H@)O-oG=v6Nz>_G@PJj0DPheG#~r&i{eV~Gg5oaH>ZS)q zX(-AiwOT@|7d4pj;|=d(3c@05gFbgb5rC=8d$Jv;JwOAOPb&b*@?KiQAAkySA-n3X z*$Nll-Zh_)UeT^ftJF?^=c)CTt{HI(6~)vF9{00nxm}&Oot82X>j?N9Jj1@ZIG(_% ztcWVMR$C3oviRy>+po3DOTS)F!`}~e_=n9D|CnjiD7rX=jQZA4QafVxeEdRXVp&rg znH+x{L!^%Er>-yJT&}c4h@#``g@KequAbL6TB0D5GwP$_tahnft>}X~Q9}C!elP06 z6^gp3FIFoH&O^D=*C~sp2=~%){EqG2O_()NWzW&VKry1(-;)PcoN+D?Qjyd-&m?;p zHHVu0qpki6X*d={(dG%F%!F9QBW!Uj#woecJg5d2s2Z&ApB8iLws4 z2w_ArxtQv`BgGoyz*^B-l!6dY9GM}`-2JgPtQCPWdjVK(p;2F zx1wtTQ)sn*Lrg7XxKO}$?s)t{1fLiif>*x2Fqi5$P9_r zPh*fJibrq`r%J5^;vhWT(7A{J)Af3U7Q9?FsD_i3McERS{JDaLWMCT*Q<*}_#lk6h zLX@bNC=TK~-t|RS&!q%?ii^V51yG5>lFqUtgW1d7VznvtdtX9MPn-zbL+zHkKmU^9zDxp&(Xd zisg)>ghL@^PpJq5MaCWX^iZR9>nO?}n$c~2YGd66Qb?h1tS2s9-|EQD6qj5%j6u-B zup;oovRkdMlX7Lz$%Crl&_96!RD_%9`1~HtfXCvdwIBGEC)J{-MT|sc`F1AttAWe} z1Bj7iPcWqrG!qF9u2cqO-h1%jt7l;s_}pUk@vdlI_BY)Tgn4m$FTt%3Tf{4}O^H*y zK#ZDdk*a%df4|L9U=jywhJKoR*J*fT8E^b+yz%Ao;6G9K=|l=s;?eL1vZp%xBB)x! z8xhZ6LjW83k zlE%VZVWRrJ3h#v{ABIIr6}qc2MLrMn^unIGY~z%;yFB&Z#K?w~2y)iMMfFhwl9S=2 zxa=b-ZauLp>uHe&7BIoR?m{{YqRe?;kUg9v#tT_e#d-*uEoFIk-HhSJEm$ zM7`Ll3;7HnikgK4NWEtMaE4^%&&Gy3*jAmZlnPg7UXA;rOyvC!4q>NM1ylnt(d$)e zM!kgQz!G6M>0XhkLe)`%&w>!R#@zx735!w|Kd;YseOZ{%XDhr-gGau87!4A_Iqgj* z*RQueaCR1_(I%s%_SaEhV3cw7xt6fALX;iu^sN{K?yU%eJ}Tie>|Ci|7N}L$wQT9k zOi=<@B}b&p#CiIP)k;cPL@R~G7xsOD&X~Fl%$-ae6OWLZ@UJdFVcSX4JI`xIOo?ui3rD2;o z+?`Tj<(h@3iZ65CD5iL@B@2TmeRSd{j6J)pqPt49xOcASL&XbdsdG+elK zWWhF`gGV{&A4%Y;#7JdLF0YqB;GxYHb5^5?f90i^@i?thdJIzgv^-Vc%r&3}RT$q; zNRno8l^bh_X+Qxs?)452NBzH!qj>|k7T-aZYb!jP3_zp433Hcs$?e5X89nxDAJlA-|asl5|4JezrGq(jF`F$oKJ=D$k z?j`~%{WIZ-OMQe1>gXd>e~|Qz1sjxOt<>r={zk#Ef*esQsSK^atkYNT+)XlA7645w zOZ$I@^RKl974aJ8<^KdC`LQbZ2NcZ>?t5V&B0azWZ!JVvrLh{RZSY5Twhh&OT zFhZL1{T-uo?F_d-oQ)hSHnMemqt!W@c%_mXUw@s`0W0&$;|VV#SmA+OGYIG$cStPD@IcT7|E9`~{zH?u^4wAH{hFt_zpa7I2WtY}ifv z2ByRqNq|Qns`uD6logP`bhCi`9{BG%QGM-x*0QVk!0&#yzmI1E=L_o}D$0wZRcc*k z+o}auVT^Rnx~dL$i7cPb*kb?OJP0^RkuDE4F{~)Y^17{UH2QWz!DPF5L{E^JP3PH~ zLBrC;DH%whv8hZXnF1v{9%LrQ?rZ-CEB!x;+a9Q0dlwYvlk{R8pU-q5vsu*Cw45$? zxxi?%Qm8_mqNCJQmh<)x1e%m`{1Uj;$6U99(Xr)X3D-CPXgzs>1)27v$fU)R7w|;% zthXU^bA^j<+Hq{SFSTo}bxW7B;f?_u?qBSVhKENs<^}&;A^l=$j%;fWA-pOMTKmz4 zky=X0h6+!rHxw19oqxy_Ay{G}(+cNxZ^Rf;8DKF_qxbUsJyTwz%UW*=Fd99Q)Qk&j z(Dt9ug{@&>PfrnHsHP-+vslEuo(_P@V;5*|3RnzUxlgM(!2jzb6+Pj_JcFJ%_OQA zD`$H?Jwdf%IttaOjH8yGIy6!zULSLB!vj_-_PP8k5|#{E`6$)M7|@+Df@Bd;){20!n~V?X5=BXCf*iKpw}P8|X3`uB-`L6iBVD zuwc)n9Y%{nah3C-tP;79?UK5Y?4}kKbpupZx1m1s;~`RRteZyCekT`uK^2I3GW%}m`A8Yi5bzU%zzUMSjU102EDt5$zz$P zJ{7a5Z&A6=5rnuCWqziqDZ|Xww#>;Zj6;N9aP(Gylm`#RWSy*)=11b9SbzRv&%o_< zx9d5@F|Aca#VQZ`^X6h8FZ#YK3ZtiZDSm^S?PEnco)6%Eg{Jv7Z;ZAFoztmHQnu!M zl$beQgGxmAXYC-@o{gkkQ>E7KPPDvWvB82I$v$2CFX-CI+znp9OKMJkYfbTcrP%Wc zAE0&tUgrRi!x!mE?qd-$v_qCcs9FXStCY9Vph()(trb}|tFUoaOX>x!^TO!pi?`pp zv&EsB9}z;P>A_RCZzJl)hSTLL?1PUerGEb~VN7JDb5o@tGAYIzS6}SwI$J<_>lx>y z8q_d}9`nV;v4n<382U-iY&w1Ij}ZHu0osys=dYa_%a*g!P>ea9l*+_(yrlB zN_mzCPxv3lEZu!|XrFnVti`^q8x-kCi>Sq%CHGJiWsd4~ic(UjsLI;qD45{PJrBU( zA`vrhi}xQ*Sb!zJjf@rQ1>Qid5(hJJH2^*R{IjXA9EW^UjaYl{V(a{bM6I(IemYx@ zQedTl3$Nns8>RMn5nk{x&O+)b9YOXZ>~X!apik5Mfiul0h#d4_a-5VUizT{i?OF5O zKE9I4Zmbac-xX0QjFaj`dL$9{i#myKnL8cf$!K(DYa8|?H}2Ci+K9j2{yrZM%;f+3 zo2vmUqRoY2d`QqUo9a{T#LDj3fF?Mpm*LilU{fv8Nfz3D275}wdS7qu&+?c5Zn19< z*|*fh-0t(IwGef5cT_nkWBQ~|p z%oCTK5Cu!NA~Bc6-=3|V@cI%L@4R-sgw;axU1<~JWGCC(d%F;!)MPu7nL4cY1uh9! zqYVvVvr&Sev5CBZ;!5f$4=Hzcha*gYwNH+f3rIn-HQAsFI_hj^XTZ{uvyQjQHOx*8 zN#X}iou9t+6!Z|o$QuvY8};&(t$$;i%n-2Ht|&q$PMKMuK%s5yfduTC>9l`0=I~6E z7Si*33PD9|pzFe979b1c?N|_FjTgZeKneP~*D)C*Y})OtpIX}nJy?~o2mrQ{{P4N{ zh<{|_-&8H))9Cp-ATdk`o<^QH^l{tsGK8HGq@X%+ z7)8R5A2)<`Rf1RO8G*|~ve!K76;-GPwKy#`2R!`7wT-&TvA!y_iDG8MD}q^aGaB#B9el$naXyBAb# zXRFseJtb;aTxx%(r|ZIM73j7X1)6)7sU-EK^gF>g_(Oz%6qQ83|Asz-_m!2_nw{M$ z@mlLBq;PNJ4^oXL48stSKE}$8N=#xPSiYF14;#UZ)@}q4)<%^5iIIF!;Hbd;Bh_Au z6o=5lE$Dabi{pNt4g1?{*iC-tOLOnA1^&}DC2J%0p9$icFgDbygV;K5D-l2)hefXI z^JmEFIS)!xsbkeW2J|LIzQo}A3QKW8v2;YRhKwH;@%5sMhY#Ly^VXhni&1gawJ=T3 zc;1%Bg1mg?J*9LaWRq}GSy9rncO~>q+*%qJPXZz3dnGsOVO^TgP2Wz|BRB_H0?V1T zWGYg%xfTCIxg`G*EsS(--4@jiOBDw9ggit5X}tZN*f%2>kcy?EqSv?J8iO^JB+7hu zcdGX)VlBl(oFQEHd=$YOUg*5^d}Y~#gaK0fgaif}HfS+z*=mm5zV?W$K;b`!(-uRg zo!5RrT=&y+CxuRLocl5nLgQ_0mWcZaZzJwNWU9s+JRKLajtbHmopX1{Xj38q5kfsn z?jq!hXci2WiexfNC03EU1PIe2S9zHntINE4`%WU?G1cY^wYE3j^4Y8v&6A`B?mU39 zn@Tk}Qds8T+V|J!Hte`Gf0JkK+bdG!SxJ{<&te87w>w`(=f=7ei26YZZX<6k)pgv( zE_XDMTC83#_(ere6*}0_uD}8vgw#gK(QX;%Hw3wA^7;(RcpMQ3wAxGmT`DcA(@Ew2 zEi>P9xz4pthuprx!)xy!Ts7Z!Q$1Ari6R>h_!z&=seg^Gq9?q1?i;^8Iq28>^*K=r zcncMZuQ4-Pf%I&?c+B|a$f+}tatKvhp}Zhh;F+6#RnWl2(sCA$Bfn0-{_3%2RSaaN zfe!IZdfGeKTg*z|HD!d4|ff2h4b2d<);5 zrhZ63lSDquo(|+-Bz(?{Egn5Op2u?aJ6E)!bgGl1wY4OZmSmMg);!IdLg!RRWqf@J zv_NEh#co&Xme&ppPQ{chy2+ERs8?GRopsw6By(Abvn32%y*p&TZ=OyaTli%8Wq$^$ zQ+xgV5jSOm2KzejDKsC;wXmL9xyvhI8qf6mXQxSW+uCdkE8n>+-|EtT|BC+mn{!7H z$Gi3&efNy&B|L75g`Pk~9C<{L-s5My&f9NjUXQZij5O3YQl*^wGGYwWT1?=K!+ z`ugX!^wF*b+zOmR7ruLXj;_A_PNL_7z2ogW37(}nB8fWn2$JC0yaHsdTF7b#jYzI49#@B72g#piY7%q!sC3Q|OW7lA=%TzmGMC>J zx;6fN5wX+)dtG9&GH3x=xS^$t#PcQo%X_@t9ZYMA1?wv$+uujB?MPxF+04Q3)g)u^ zizJH8rjDGX@zpuSAaq+|8EPa-X3pVQM+W%{0_hON)oB2iTO;15IDVNbq@uGk9Yicc z+wI&6>GbF?fqO$b;4(<02U{lI_(lsyByMF5o~fW76t&iE{SdYaa!e0!R@%cY>3~2R z^DY>jpg2J8+TKLmmwFBy#$P1iTQ5XNH+QPR<|~N`q$#lykC2aXg-`#_8tnLuJi+&? z0{*j4`hqnSA)N)34?Qnq>n1QRA{WozVNVN*;$uXFV%cWajlz9S@)jq=$4G=%`}oE7 zA#3sb8($uch0L9m+TIFe ze|oxX=c%(0$x&&+lGX`a`cO0Iw4!+r+$-`UC-P?MPE{E!4H}ah{XH2V+Y~@Hu%nRga-laS&*^%!~2S z#a<(dWn3f}od!JS6bWkRv^92I3XByL4uZ$1A`gnAG5V>>FfoQ&!N~g{tQo=uwvM7# zg5sV^{URTLeL4iZ9nfyfiO4pElKr z7t?PuK$?0L;P97AhN?=2YS_OzRT(%qIIuppQ_<#%6iW+Y(EVf(`wS3xd{YF%3akS;By;xxXP zU22i|ku7sz7e-<|w7z57(N^KeL{sXkkGtXMJ zg}?H7$xEgzNXBeEa0HWb4>R-md$%|k3SpCc)?<`C2z+Kos zk?=r>E;5b3Uw&zZ5^X~()$l?MWkg%dDg%8+Q5OY^a`jqwG-z&OgT9#$CH#$X3euRr zUBL&tst=#O>+}@J3&`!JGG}l1XlrA8lT)<;wQ)L|HOSj;Jii<9=WU}JZ0&)Cjbb2w zj05Un8{nQgjw}G|rJNH%pGz|`9WCgh2}&8Us30*@&@^y&)gS)LLF^f5CF{ zF)jGjV%9{jz%^n7?2Mp(R5IS@je;O$&9p}(gbSERhn19>D~sV$guGf{VV!}j+s2wf zK_7=4Dbh^8v(hLKN;H};$+-zqLDgjs%cyOErRhp*F&<)aFh_!T)j3w&^OZ7)Sy1c20a&L++^^9fC4eQ9$wptiLL z8HX~Nv>*l?_EzWoTC2J)A=&BvSSpkqd7La&g4*C*FRU+^`bd0AGT}x zx8zKU*sbFv@fepO`Aen0OawLyxAk0$_FApodL?=BjcP4Qa61JBU z%lSn1>$988j%@S31N<*K{lH4}$G8@Gdz}_i=^M~N11a+ z86`Z}Q-APF>JNTu?r`p0XYRA6vwwUhUm4_3(2;oIPOVmwEbJEVwD!I0Gb>(tF}Kqb zX9~>~cys$|KqLyg0c7&aX^wtorn3sWXy55KkLQ)baAz|vzv6E*Uk-&=UYTgK+upy@ zst%xyI|mXaOVw78yY}sePv_LHPREqT)$307{B+wWXzJzgAjxQ$qy`}OqT ze=yQsRr`krhp9LV?1hpCO3A9~89L1vjQ;%8#EgEv1dhh7LhiRw*jzBxAf&>5r5M~q zBEL!eKr0d{d+Na+#*3@F>*ajAb5nNkAF+dPD)YoY07ncz2jnXTrS^=XoO0NHbrG4) zPjOMg%Q>!cWTmmH9tj&GIg|8B?Huuz&dZ^@NMUh*lZH>YJ?Gil+3`IOffPiT#3i2O z=9wE6Kv4Q{Wo6K3$RISsq^01k)kIrzYkRA;t;Z~F;_b~$YiAZ!C9_uATDw2t`{HEI zk`oPxg#C2iW)cSN?pRCNS(&d6w%Xa9T(MIj^L1|H_d=Xm!3mpirzIotm6YS_zW33sVMfz`(86qOmR< z#_sA;+aQw6z-2#Mf86_Jt`7FU6gP6lgC;rr>TPeK80-^ear!Ho!#V$4dG(-%Dnc4K zZ;*=7-rg}%*!t@ej&d*DiXQBoKJQb?t=3cb{H}fRzyKR*L9ox+sbmPE#z=!Ps+ys-kJ7z9UAHk3r%Wz<=k_mSeTKfe9Mo=k6GUlG}}sc%IBO3 zw1bKp&jm^gm6NbqQ6VL87G*&zBLBmreWT}v^J(b^tq7pNqO{D$7tTxi`dzJsU1FJ$ z$l125+Z(GKc5cDi+M*$=`g!7dR6o4IRbLX6BX1N4E23c6J2UHykP7tsYVk6DIY1(G zH#cTmmwO8MZi?$_N;}Pz!Xc?jtZ+mug@LH?P3ITx-1be}XPC3~Oo|LUZ|f>M?9bnz z*UUCvYF}^n)6djiRm2rMZv{>NHJaX`wLV|I>6=X3_?2}y;^usrFL9GYp+q6R4x+T*QmTuGa9UrvG!dGCG$b&u_?9Qn||e~R3NO`FM4L) z@nlVxR%s>`v}R_=QjenHy{U~h^^Wv$FqDfqNGmr7yG@$`Ud`n-dVxc^)CJS=7fP}2~ zaaZeD(IUqPW-+p1ePe~VZf}l3{HCC67gpXnQCbSlzBD5A-V{iqdUp;xWja*(xd z%p)KR{4V-1+VP^uVrkGtreb+Q!IJ5~0aJ8n7=ee7c@9Z(d{4i>2_&ZfMxB$>D7b3r z(P#;zMzQIkGnPSGRh^($>}UkYJU@n_YM*rbTidpbtLDbul6BZx9_ZVC7q67 zZ>mCd1aua-KCSA5=rlMzH}R1w@;P^IvOX`6A+y(ra(n(QTrGW6fvp{Aug}W2s-4ZY z@%3fyiKYXpuoMN@qR##0t@jqUWNjm^fWfNw;%BK->h9hAf*VXy<*YkuY=4fg^mpd= zO67C$OvBCblh}}=fgW8R_kG^!>rc2wJL^K0a?;)^N^y>{Eu7a9XHthnkCi8E+H8*5 zizb)tt&xz6-^JOCc`fQDI^)VDNL4kuxv-HVRBaUN-CEm-(%7|1Xgm)V?6yA^E$0Mz zfp22`y=QAP?&+RfluC(}>A49NX=j0oEiWB#3Vg&D(N8{XdG+ip&MLv9zHZ+FMIg4C z70-GsDFNL`g={h(9qTV%!OBVAmx{l;)eUOu>NP#9Oc$$_&IB3~40U#vouTn^JEQrG z=e&8#p?Bv_)mQ#w^_8ze5I%~#zkSBv8&L%~wW&Mt4?j^m;ZszZnH3cAs@l5eoHP0j zE)a`^R*CdyrlclBq2pr(L^5XTr~K`WtjISW9lGCn)P9ss3TBsA(%eIX-+=t^0rV`0o|moaEHg&_ zoKEfnU2kmXO5N>~(~T`of8r{^8fJ?%J38Wy4R{+~o30}XKZG`Wt9Rpi9O{lD2f@tz z!riALE@_r~c)?$(K3D6vGV}TCsu=9W9zIgpqJYc@qS*P=as7-s*S|NnY>U&&to=vK zxBBg&MPYqsU!N_$EEH+Dx28&t)bD3M)4tVlQURnU%|%;@sBKBEJ+@8;P3nyxL0WYpG4fLY+-w z1iq-ZRP7IneGxUxEz7l1M{J#GDh4uIk<4h(v_`-QrbRQAI2~nHK~2)K7ZtJ`p`%WM zyjLc~?d=}yC%T&-Z)~itY;C4=mNP(w?H|~uloIp<1}CHtypf!K`(%GdhW$+r%+aO(4Qx7)PwwoO^fqPV6iX6IUc$I48XRswZsgjeu+6SA5eY%jFYo4* zDi?Rzk1S@HgMb7P&58|1byFRyfE#ZtuPWAGN{?My9mOs0WgqtTrLuh*_evQ~B-72U zu5cEj1<9s%i^ET$nUX-C(~tX|Nw`c+PpEq=vCw5KWAc$@_p#F6zK0*&4x~@689sH^Vvp;tOZT}(5eh3|UO5Xd+ z=)cknT_3qa4;h=tJbAYwU4`;dUWkAP{O&wvs8(9%m*n!~j2j+{Z7f&qbRk+C?YyL1 zRRHv9rMvkal#K31tCNo6a8XxId3^79zjbu1hi_T`%>H3(WwbVE?^px%t{b%`Pj>-&bpRf9Lt zNa~IkuTf^qy3Kr3k3#$n-=!;=zPuPdeeE}4>pX~1Lfu*&p zrD~Og4aWNiChJta^^L7f-j-jfX_eQ+1LQ9yA|=PzGvD(6GIRbf>7aNw8=q*SRCyH5 z0_e;6Vbh$TzZy$Yf;~^cMH{|u&NU}r+y17yIPa+smcq&|pis12stz4%TYsszE{#kf zX(93SzmFm3v5V9?tCDAWv)w(UQ{fU|U)iohc>eGhnAfT%llYVLPj9fjmEn?$iyNC< zNv*Dl)Gr1=W+&hbIABYe(&Qi_BcpxSD!^c{MTvayIB!8w%vZ35wLQYM&eNQ-0$CRluuVnx@9Jc@nE zrJjrqzc#4WfaFwROz7(MR+b3=Tb5SF?Ojlp5_nm%lIEl- z(%U3ptTa*V><)V4&mCK`SiAr#1=}yL&M4Qpt|zd!ItnWU4NH*7ZipOPx}&3}M4w5% zVFg7zQoTGCEYP}n%mNMJXc@UZ?sdNqL|~(Mm?v)uKF5ntDrJUbdJ0p3Z}h}`is=@X z?rE(+ZeR@pJ|lwZywf7a1u5f&TfoUUanJg6ZBX)m{rJ-7`d0ptI*$!mlyjAI-!=24 zNm!%dY5{Y!!6F+o;!)!glt<`?9tj-_sUIiC@@Q7c8%cfmsD2}St_=FiMNSglXYL;t zJd#LK`FP)C^7}1s;&vNUw1`1 zlQSn_;Q!W^99nf{BA1p-X=hC7*m?xW<>iHR@T^7U@2z(@-v0EeX#^oBE(Ay= zg_fg&8`s2W)LQ;Bv%XBYF1?qH0*rIUA1LlXRf({ir??C2Z(;FLlY+!omGdDm>2JQ972SXOI?amG_)%gr;b(fA`W?> z7X20bjs}x+v(L(?qPh?!l2cDGa-m2S(&xYRtLuoTd^TcD_!NG^1o1V#W_u@nY|c`F z0Lu+~DOqCU{~W;DvUx)WoJe`Z;mLpqvjK)g%ORVz<2B36UE4rNg8XOEN*b*?o7>tV z;h(F&(E>5=^m1oOLl%_zCU;Fqp|?_lD^YhmS@ep!`b)8MoDt4!pdELrjf+8Ixqd|`*UYHY@e2YDKS!QZ`L;=X0;QY z%vABBjUp|ksU{#2gcJzmu$u*fwT)A6Qhbp--QOUF;Q-izXehraOrYeceh;EPp&T2W z)KH3f$oH+RtS6TYOhFnQ_`zQMu@ZNAhh5>$YD}R1cK9R$h9E2eu5Cll zJ&;LAiGY@9(JGDr1J5%9Vphs(JbzWhnd`lY-^_q4>0Vx1U6_Yy%R|^r6hJ%vi)JC0 zP^6IcLe9MNrKGxlaOLQbfSMLuP$Zc;Y2*u-0+^#WKdsm?@_7zJ zlEdu1_S)QkQg3t$t^SR3pMVjSu0XOx@(4;JrNHFK83~Mtg+Tm^y2m-cED;g$uAiMr zu_wx9!T>c`lz;jOwM4^tUG2dnGR6pD6i?;#wL?+}k9mGnvK;H~Y{p<8?xhq%^=9=5#1uLpYd|RRHhlF31w14+hK=WQ<+R_MOaOVJl*Ae3{y^xN`JoZPVe4B3%m z&F`WMn}Gr4l=I>y$|?lH<@v$!_iG_>@Wrw8pE}IidYr+@N0+L;ni?+kaQYdWM~xoA zl+2VS)2?bDX-f_RE1x;1^xB|1ImwcN@nT=H2ZXAoKCI4`8Mb?LxV<^(98aKevMwK; zpU-w0lH$B9j9yNJ#`IlR#=>8t6opx(B?}OmDFO;neuIYqKM;iKY^{OnJu?(DZ5K2i zN)C+)pj;Q|yYa$!iCaqcdK({Sc}2&Js813(%(uoX(&W}o4Z63Y3pwY{JRcj)rMz==%G8OV z$L$+Q?wa7=Q`AQ7p-+0nepav8-9)hbM3#so{ZWkB1R%o(Ih@YBL93;3=eE0 zLggpWcgRz#FAw4|k{YV1_V@C(=C#4*Y9;t+x;3qv%^vGLSFhRNl6afNBK=xW?4L2) zam;v_%eCHmnqyr4l)pF^%HC1Kx%=bTP|3h9zM>;i2k&_VG;K*I0ZDV38e)0i>2_{c z`#UX-j86Bv7v;p+?c|GAX-2|$i^ITXJ%(d_f`PROm0wmw0u}bqRGjYDgm~NACbPO_qfV2#2=_lqK`L@_n0g*G$&n!us1O^vxiZo(T!5XTfg$iv$$6+aDI2=rVY zBg~}pars(9W167xI*Mv75yB5B?QuE-dneQl{*n%wWmVtrQ z22VTZY4sLVN}79dKHY*=xoSef1?H3X7MBq9UBgkDrGsVg*P-oBx_g!!nBaneV*IRr zOSUAYFY&;y%OV^aA_CZ10$_0lVTUR$WS@j}BIuqih1nGA!cZA^^QqiQG>P#!MyN_B zx5lE4l)Pn@UoV1Yeuui3* z@3wh|zo1U*Y4rUr)eb+{&^OczT}`gtBB&*jiztN>0)@KnG8M{2B9kbOfvm+b@5@gd zl8i$FRyA&BXpJ=*kuC;P0O56B9sQ82G+yPU7|+~FI(VAP7On3xzf-+dO3-vkC#z*6 zfwdiJ3|ZQh`jSCxIc;u>V()6%XHKsi{*V$|ll3PLt4?as$&fopl(Qs z|7kt9yW`8e-D(H*drP-6>7dtJZr{Rg+)p~dYz1{>=_UOcIRA5VZ=3rwwFEnP#0*8^ z-#GhvN^vM(;&zm)qjIOt!9-hv8D8MaWQuVpK~IClk`*W}&1KAA+^frX#|+mOEuUGK zAjGbJWBw|Bd$cJs6n`xD`N-nn{;RHJGbWsme*9i z%k>mzx5t*_7j^2H5|jQ2(Fpou=$w-`_@8gjArq!*ccKNl{ly(!l^KMPOzfJpA1+k8 zl_59oz$f=KPz2?RURlm2%(!~h4jbNw5&R;IAiDi!HvC(7Sl{@8 z7j5$7U4;Me(K@=I8zm47p-+DodgXmvz4F+*>Kbm(#WM(v%bOd*J`u5a#q+JA+v^N> zZNI~1m*`KEPJKB2J*6a1vk{V8ukDJ>v6^g@l8?4(!2;9D}6A3-H4*r0l7Co)##h6ggjt!2v(TDGMJ})pz0} zWT8~uicf;M#XIW`-x3DwR%%au1Wi?SEi0u6@JrR5vinP8J{Nn@o`2&N`;Rtv0(AS+ zS~amxNlw4Dj?>Zm%UxbEbjq9e_Y6sWnbFqvhLuJqrR}xbzvGtm$walAPlUGp*Zv)B z;IG+PcS~-mo<8%~a-+}Wym-^0lpjP1=`^xMKi8!3?}kQ2wxcYf)9V#=ZV$aVv#Wvr?5J@&#;)Y1s;0qjWB9w@1ZtzhiNYSES#%y4EsI8i9xmP=`5- z6ah*gI!Q)br(GIGfN;xMv!&NmiCCG-%I(t2Xp9!+stFMq&9WDF)-Kk8t=m=qJ9YJN zdPBReB^L=cyVv<>Ko>TBWld??NWnM-)2f~~8J*>(E51uN2nRPSq$E7+o&9REI1V|{`8uzbXy$4ta zR(vh(;Ila6FFf1tyqjJzVQ)MI^l{hv58xS#3iTAnbc!GT3;giEtxNo^vWQ<=a#P<| zV|~xH9DJe0#5o69D4=Zl4SJKdc<0ubAYL-J5z}6y^NZ^CgdcA$;^^i0qbA(NR`JbD zLgdQVJ4MSYf3@|#I4>-Lv`^S?6?YG(pB{{@yVvrY3{SNoUZo^c_hU9MD@PqhHka=j z@6@WM61(cH#_CZP7T0v^WSv-lqGet+8%;PK2Dn$`zz_QLd@_T~q7p30J|*d)pVOFzHA>rUU5U12sG z+@nXhg7jlZ#3a|o8TX(#x7~gC-M2{4 z>Zin(^peqOK%?jYem5VTUntx&zcKc8UyS@O#K>P|ztnFdlYeCHPpd9Y?O3XhY9J#@H3wJ- zy4l~n-)Py8CAGmtH5XyMR|FI_n%{*I{w08_W%=>LVx3V3FiT)drFj^l5DM5dL-X^I zu2n#fCj?haK4YRh>*lC;5AaZ3N&fxZP1#`%ZiwGb5UDqzt{=BVUTAs@laDu@Ds;V+N9Qbvx@5|BgJU2uX zh-KuC3$xV0sZe^<`#AQ6bcGc^c ztM~=&yBi?yUi&R@KBGWJQ``p{>n*gwuZ)VEJuqR;E|LkK?4R<Yt z;mwidM5P>#g}+LWBINC%Ztm_fk9+Z{w#rP#UMKif`oQ0s^EP{IJD1xpjiet9cTF2v zc)%JIz?0t5LJWX(>~uE2;dE(H|CsX+x*7##RG?+dXbh^3L#%XYa!e8M+T&<|hE!w? z<$uI+_&`t|2NC*whP!!air!nFOEYwL_vd$Q$;t2;C9$0sWg=Bs(JR!BY(~dA5IK$1 zznHJP#q;d;mzEzs^bXkqtR!!+?^E@!NgQ^zxqr)6J0~mz2&hK69hhg?=GTs9hf<3@ zP>b?&?ET-JTaY>U?fms0lmGcEYO|wN3QI&wpFbeAg;yAZ;s!Kop0+T&$&)je49QUS zat1s`%5JI?mG60o-r)*dtoQtAmz76OGuPRiWAO}uxYPPIIJHU*iStR4(|IU$=qD&sq(Bf&MA(5AlmmXj) zaq!MIy9BUXI1}Swq}r$j#EV z>)woKawdu$v>0|in`>#r(fAzdz}M|Bw9m0VyGr>ilzifjobk`AlNr-GsjB_qGSRnq z_J#)lWebnRA~cqxfNem#B&8^l;zZzu^{q2uU+bv0Qu0`r&{fc zd;RKVThJKQ;c?=gUaxn{r~76l-08A4J7UD2v-fI2l|XFGhvvRR1!9c=Ht}3h0U;8C zl&y8>ffmIoggk!YM8=OmSNDhw_pMU@#<&!x}#E!o07k5Xhx|tq7tn$wlYz zM(A8j%hbcdXzAJct#ie=q71LRC4@#|ZeJ-fyDcJ%;U%G?jKn5VH?FB5NY#2KXloX% z+AkemaeDj4q8v}Iu-yjX9e27{_V>(0>Q>J$EEx3_wTBUI|ZQ|K<9 z;QA3w=l~VbYCq@2LW5|GjdjFlXE0N>kl>JMTL~tUMm9>{hq7iK^!q8-pI>LisFH*k zz0DWjkXn?Z{Xwq~btrN&!)7R~NFIzXt`>x3LzxaLo9LzoEA*R8RLL9OmIVX2fZX3dzYbTs za-6U+F!>tHp5}NP=MF$%=;Vb+TzQNT}N&nl*R@29x zWRc;zP!&}&PX^J7`HzG~$|LiyQ@LbL@URtC@H*m$b;34SqVPe%8|ZEq2`kiILcGetgb7qBZ{0AX)b3I9rCubJ#T0sEa$&5BlGf-NH@%FkhM1V*LC9IwQY5~x^x@%% zRJ(MtVw&bm8S?t8EIdD=qVpBRivC^A)!WsVM>64Yx3fW#_~Os(X(-%EA+&a`O{=T% z2h`zRhw{lCq+Rl(?yfYsG7jzwB7}_u6h4_n$y9{0*dei0Cv8cqZIMy zBG8=|*ZQGxHVpgyaKkbnni-s^_KQ#8!WoUC!FImi3;D!+YYu?J$GQ{0*3_%dh)`>6xh8*TT=NeE1BDu!QXb)ypivFWJi%R_z#N&t8*Nam|Fl*< z55q6TwFu`lXjB1~p^pWB%scaT`X-$9I;~Z(YtQDRWDtM25Ibu^g;pH!nCnMfpnL#x)ETO9E)fdlNU-43Zx)zE;rUs;qVM&&Fj?ETjH1<-6>N<~?o zkw>a-mKEEWLCg711VC%iKB=?+lgOWLNi5Z~eL1U|IOA560mb~*f=xu0zSP!(_@TTp z+^#8<91bjeZdLDkhbtiIaPLkGqv-|aoW#pvT&m>3@DvVF8+l9Yqj+e1|3MfD;!!=L zcz)1%C!8DxX+m*^H*#K|(feS3r5d2%5vOd(|H_7J>d4COqp#GB^<5%^KVN)?;^)_5 z9U?`#qr{7*$eBNWRG&TxE^n!y3SSh;71Gz9LwKOPDE7eRTw`+HPr)_@nW$Su<0gD9 zrXwtK(d04fK%~qkg|LOqF2^9{6?M*9;QDn-((`e?i6ZQXoI2C$9+e>TvdYPpeH+sr zW+gD**`Gr0>Hm>Rr|f1?gqh^KjssMN=O}ld?~%_WflRS%e~@s>^)VXN=Ol!ce#~r& z_Etbog~$dZ`8SsHA4Bz68>~Yk+~C)#E$?(*!5@Qb*VI+HNO<7Jbz}A!`_AAr5de$t z$c$BUQ8O>zEi??8scM*EfKiX~?XW}s;w}I&+^Sl!d<}8*iLc99OwJ2to0gZ9Npu!s za_#^m4E@1VYagHuQ^Bl;0AvLft%g~hE{VZo4sRUbjem|eo|}7%>6!17XZkcB;}6XJ zsfIV4xgV6jpcg^`JW>#bOLuWS1JV`y_%?;I(Hzr&mgQ{??pUt}t9gkGKjLR3>S(Um ztCLW1C-W(O@^04&Q(dA}mnJ1QkpRLoQ;+Znlqxvt$G3LjI&I1Q>iD>CjDkHNkee9( z6!`n^j@-e(q*In)Xv!J>xof%=Sv08FP)zh}_t(}|GA6%!8-5k`5|Zbt^YiNM{#z?k zW763muT5nESF*$t1o)|x7S$nzJ@$EIjBu~hL=>GL=Zzo_NhQM6yGD`2N!%W_=`;fZ zcKe4%G}OT^JwFn5^v=#kUjQwOFL~0IC<`%LqX!hegs_PO@u8=;N{iJE^<(-M&rE_rE#x292=ea;*A%4V(@X$3L#p;`Ib(k2Vd-JCL0huFd zVCTQIbe|59Mp|M7-pV0JenJoInmi?5G2GU>r3_Y5(buVN-7;lJe%gEoUc=@$k42Ua z3?GR1yoUVpKyIzVbC@B;$B=Kjxh=6^>`m4BJj^0D7MDS0VkIqDwlaV?TBEK`CztYs z0U7;W9g!WYw)>BGDoIdsbU*CH^MqT(>;0KhNBXf+aQWC1L>8T_#z9)`(I2!Q@DI=Z_{=gyVoM)L z3NsT2MnH@BMFa!)+-}w0VGh42_PnT0Nfr7uWG)mcbWQYWq*Oc#`cm+c@D=KTB z?(Gd0s<*0c?;B%x%$d-R-oNEVZiyM|wbnbef4D2}^>gxG*~Rx6=)#|w`yZf+i7M`w zQj*Ahth|JAjB*5MEUikwD3acPNRF^ulyvSs4;C1 z>SrGm;s=(F0f~ch@u*?RtWKISN*FA!EbO;gE>x?9q9BTj2sknQ)SM9t9VvfOzDQUz z$ci_W@SbttkO$_?1d#PI^hFS=9B6S7?z3weR-6OrUN4ZJD*LJVdh45cvsO&pL(+l1 z=~0fzF0UM?yeCM9{-IJ5_`QJ0d}Pf#tEJP@#0Kh#zaQlx>JX{0{kS4nWUKwt{-1_j ze8BpMRKni5uIspW-XGPWH70w%6L)51psC2IU{cM3xgqPrK;OI%5O@?E;pl9XSR~3y zMKo2Xq~G$>63k$|l`n4LIvX>z*7h=Wqu)1KGw#THeOXr+SZ>m*-W;!`WRC}7EPhq* z2El{hYmU@7IF$GJ`BLZbS?0;TSGCf|3PSxObAK$_ChSotI#UOw$Fdahqdo*7P6k$( z83{yA_M&z<5Si9-i6|A%xJDjN!Z+&8nW06CKuvBxEa{yhcHHQ!TgO*3wG$_*hiy`PY4<`Z!o&-q$Sz-XKSm&7iqOl#T`*b8iMws zkz9h{lXqf`RuSdSi~EP{M7wo1X}3Plgq&EH0yZ}DJgyn6Lazka5Q<<8?VNOwtYy3X ziCj;iV&0M)>vY$%j}}g56)qccMQn2Q#PoOa9<>9gNM2%Ter2(`#uZuHVA=G`mvLae z*1F7YwUMqi$jeEjL8L8%bDQO%QQq(4#G)eGv%Spx`0N^{9!vsKOTM(P#c6gpJRY?? z(J6x_=KMRQgZHj(r|&Lk)}NT!nt%(%D1^+RT(JZ=W0v+VZ$zBfTx;IQXZ3cMyZrXkLiEXJC8=Ht=G)JWMoVEJY;WJpnO`<96!9oHaK+D ztN{IFo;Zebw~{|d%x)tf5jHU3JVB>OFLX&l!EtVEcljJy7@^B%d3rXILEqXz%I&Q* zLdrxfw!T{Hqx1C%7z04fu=v|>BZbZ|%;K+V*2ylj0$~~aPEIFP>rI$T9t`HPt=T1T)eQx>jEufSiVfb%e5~Yl zH$Ca@h4Heji~L*Q1S5uOwcia(A4r;x6wD>) z9i(wP_*qL$Zw7A+%qIPrx&K8?)oq<&Z_^p}Lv#N%FXhs2jV1{%0XRJhU5n>Iy%c7l z3PQv@W*+j=D4w_=#cp5-Tvb<2guIs!M2(l`rO_dj3Fb<(dNDuE0?mtiW#vb?phB$^ ztOw2tOC~pyrs>?6?poGM0*0^bUtfHD#YtoZ$F6>R%UEa&$Pb;c1Kc7z#y4qOVCR#U zzyQv(y3gz5AH?}{q#Cb6kJLIQ#nHY-^4jgse`nl>>3M3b5p8Al>c%?B9Syg4hZ{x) zsV^teSFX?%h6i-p+mP&xZam=f_Il6hWg8g=M1{=X$p9eUf)=n$Ojam^=yaI+TKR8x zl~`1)BSbk?FP%ARh}v2#vksCqb=&iAax>`eBOw~{BTx^{@gl_&#uUy<$8gVww|xU4 zvFlMx@YY4HcakkTTlqSKOZA?PeB<49fiCj0V5Ip!-WaNh{+YS|z0}(!e*KUL_M3Sc zKlX&CiC*AOpr0}clnh-i!Utp@tvu_e4pBFeO3`F~lXO}7o*U1h)-Q#xeuZ|qXcQ0j zDm(oyYjrMavs5?OP*b(R3mXPM$!8Xpnt|##u--aX8hhi1gi)n-J~SE;b-KnN&-Jxl z9FiF7cJJ7^1>*KtF;&VUNtQfBUy*9RRC=|q$&e>D-Pw+k+S*i$xjvM3Dm!e~%`NEL z+d_VyZ;z$SjO1zCYNXGs+OsKOd{Zf>h1cLEGJbp@(!q2ADiPF>!v(V)Q$4W?RR^c1 zjXTAJZ*{YZWZsP{yxG=@tQBD$PUDw)E=s`%3x88tpO)|w*00By@LF4ngBU1oErgo~ zn|J6gR$!`3esOf2v!jckmF%I;?F!bKHM>40Ab;OxGd2Iy1DhL3u4N3Z=`eDpWW90_iEU;q7IzO+@DI&vP{)2I#n)C3uYjA4`z z6vqU>sypV20+>~6hI<<5G&YG@@w%cYN)2xr8B^3s%_X_`tl)?C!7cwUVRr&%`JUE= zz0O|eoZ9!jyQ{jZy6=8(cURwipL@Bp&oB@`24s{$M^FR=Mo|`V6d6#|j7Ih?E-Y#k zg@~xEN{ma?U=s60eN4n<7$m4DKAC*J@Be?Q`_6!N-P>K~od0%y@AiGyU*m?mJ?=U8 zsXOJ?&Fc!mH`w^>l!`m2b}Di6h0DvUWY;*#&L%&Ad=XOnMv_9C%qy0l;#GI*TNn*j z6b2HnM4?@S)C@Yl& z8MWWHU19#kp*Ta$iXpKIe~f5PrBy&Cw<2yh{<0x58+vBO3DyZm-?-j;0wf9QxlEhI zs~H|+`$6_4>36?~?#WDYu`sC)B{k^`@r$lJsGDOW@R4{e!4-=;S zKOZ<|VBm2XV_R-FC7yvKj8S2=Uf9@3BT6($M? z<0Kn*kGBy*)PUdynS}O{>X0x>z`xB-M8PAoFk1+mz*h`U;Ek8H$8B)FR zbg%oAX?CKU%g+V}cZa|e!%@V>!9qNg=dw;|YU1-E5WqWC5DmrDMLW1KQ?uM#SxoJY zkiK*r)0Ykge5vGzHxoaiGx zGlGf#zqwz8gcr;d_{xgE{n>kYrZEZ4=CDnR7S*wdJT1b-6h*C>2ZK}29>XO$0@P^g zO-*7hW(vdhN?@si`-EuDADC{vq!p*70TmH(y_cD$9lxq}372iu*7Xy6@ zou0)&{hpe5SinLqP~^1oWI7W6q!tpCAKJh^feG@|efxM~I+)OcV@OrAO)bhdy*gls zi`cg&o{mU`y~X&a0(Tos&7kvUi8~7)vlsx19rb(om>}PfAr_U*ge&2i3g-!%VSwJ3 zCM5?QbFANp!4Hn?M46D>U~O%2d2M@=5{1kA1~cmvREee+WMy~z;1G?SqVPXO)Sbbm zPJswSjyXB;5C9dtwx~Q=tbcnKi^iMM?vuo!;I+gf!zU9?a=J8+FE5*{qLOlIx%=H?9kfFM{v+!x zzJbP1ZYi-Ptr>{aeOavr%|eX`n@N*NR8e{MKb9$4gbuQa z%;(>YywCzo_gLp{=*7ktB4B~qRUX*APZ=jH4DJS*+vU}(SPoztjtWSlAT=&`RyJMT zqk6YzgLqYnp* z#u3jVGI%MS!&il57T=)PDDX+)U|gtKL`IM|v5E4bj?@nRQ?-MSK{j9Van`EXsNJ$K zQjcJbqVRiJGh}Z>zW7Q>(IHPrbl8ar#s;ArpX7+sQBG%S8dY?`SYff-3F@An-~?C0 zJ;(LyjCopX zaQ6m}YE%L<751oAR$yqphOo;*OjZB!%+%<^TR3JBOi3IbRtloQPJtE5iac=&0wgTI z)^A60gbT(?yN|wyfTnyUoP9|((0s<=#3TjVaouc5{EEs_yd9L?9Y|Hd!;%C`D-SV1 z{&+zyp4e48HF&cmBIveof1t7!HOU9sYQ@M4l_)7X9Gk=PVRKmihAPwRxaAM1Gx{Iw zX!N5p1TD5f_2`@cmgAy+`j5)FZbuiLHUn-#>2@kyF+$kPFXdUQA@P#fUO^W41sQ0Mnd z7B7(;6H&5I-CglILT9Z}DnZ>l zi7(HyQ{+MyB{m1q@_2gJ-Bry;l%I1jGJR*f70+yB-m0X)sP~1*7=`euY7+?#&Iw4< z;3i@{wH-=~7;jNS*F`E|i4|qH({WXtnwl9;D_EHvse$NDO2{vD*@TI~zdz34c=}sX zIB6B{d*Fdy_g!MnoQlbH#c%$M?|48lok7Qbby&=Pd`n`3zaS4eu^-=C=KdR=`!XK-W@bz8%TzWCktF|RL{_*Z`jmcNU`X~rstf1}4`lnYh z&v<@Wi2`qFi8|<*Kw~hQt&3B$8mj==YKTpVxS)v z5B{+2-ekd9BQ*jdLa>;DGEpEYLZoBpE#)TN!DoaS#0cq5RLC2avVKt&tB3Gq`V zVIAZd7_-+&fGpeanIuYFqkUpphKd)GEMPbYbd-VFdkkkhp026am~8;MCjd;#I5koK zg_JmmxdmjWip~E{wbS3CGvOGQ;lq6`4rGm7r*zldDjBA53l!76t1hd`?)giAmqWia zUOIH2T5a*Z!<~HyX9&*u8fIgqnUi^woaJsYWe{QNsi;?NMN(&gxT;|>u}epM%xumC zLgs7DE0YrnkU*b4Ck8rLeXj=vg_J`LVJm)sppvqyD0$w!D|KWoGZRaJ15WM2x`>Js!CnyhVG`e0c8X*v{$PuHEw9 zQd6Q+Q}ZqM&--z;SN|Bd#!@0RlXX@s6!d<-xNSl}O@^I)&E{nV#ad1bFQucW)E540 z&Tm@&V)25BaBMNY6i3Vd6=aICqvXo>zhGd^<;!-cRJ?ih{ zSrl95X|QdD4?dkGqJ*MFx?dKK;CZP~>I1<6?@5vSJ9F#7H6ggZnmwJ}gYGp2fK`9V zPmD^K9AAsYRA6^0WJ+G8b9NQ2GzSuZG>XbTbk!YIk3ZzjX6vzDBU03qEVo|M(q7$=GqHn6e^y+SzH) z74xur8%sT$xUOdW->B%g4@bU9CjQHLl7E~Z`6D#wKPc^4x(?N6At-!Q?qsRO#^a0U z*TyLE*bJ4?lf&dTnhAOL9DsF$zKRdAN6=mqeUDbf!!572GH~ATZO(~D+M>R@kgj}# zk5`s6=Q96N@5i}O%ZK0Iz?O0RJ%TQR?~ymU#XBF*AyN7yuH#*oi!8Hv7B?e;FDBvFpvP568(X4fT>FyiDIvyME8 z1ALh+zA>z8Q&vJrO`|Kec$8|)7K$ls-`wE2EM_zjzUjXZv#1?`J`yT7I|62~>D;{j z6p^g(a(uz1TfBmyp#{-ey@B`xPeLst*3b-l7G7V9iD0;K8h5 zuX5yM>doF{ITfY$Q!)A?@vPqACfy6SCDawG;mFQ&H3;Edo==`{=@Bh>2_E+zF|<&3 zZX4!;>aMFb{h787IWxRJO;7!o=~?(Acn-d6^vgCbq1MjAEclB~3?&=og^+ilIvZSi zZ`Z?4{iLN0WkkXWnzoaF`{s^Onf zqNVlH{Iq4#E>-P8%TYPKojc?~&wq#QldZ0PkG}XM2!~S^AJDGY-PRpEnO~Y_$08NP z3Ap!Ox$piPWrY%H&bWo;rM>;^Q|wnuix8JL*2NAp8|Cbje}RQ7XS+JqaLrllT#o0_ zL+D%SIWX!ZP@wl?^1E; z)!MmmZ>ra_{e*eolwRNg@>7LdDxZ1_1DcES^H%I~3f&S~KQ!{U*MA1bYO2Zxi@vHT zyI@$XX|Ms;L3Nz|trRu7TcY-|GrjK1c`(rm6%(L~$gKRK=^GwO$i??^dws%Gq_;Zr ziJhj`{{Pf#-_*9>GN<83Rj#%^=@#k<9JK5dquFp%!SjMucL(nW3l^W4Ob)q+J&NSH zMw_QWYJINZ9q%<7uncrF3Ie}8+w{-rx$w!RkH3)8t~pOykNW7{Pv124F|a6 zopW)Kvc|-r;6cowU=Iy!Bx=a(QmA_8j;C zU-Zx7u79X==EHY+tcEGw(p4w8+44#$Gwc&ncGp0{TbN`kNXjS0iuL<&M6o%S;%eS3 z)~m>EDXPTfFZ@w%hl_xHj;-I%&SQ9IJv54Oc|1OA&2$Atm~b3;5e)eiT-bX=qj`n| zW>4E+)2DU%zcOrc7Nzn>z2A^Y=}F$aTAn}JjRvQiPhs1#|h|+B$O)@R!&Ajw_uv5Sb0bvd=fku z?*ofV;_s!n3eD;AMRQiM(|ed5O@hEU`DU&izN)V_KnJfsUAj{A7v%zy}odM-ouVV=`OqMmfw+AB6v=Q0CfmblL?@V zGCv^Eqi{Wi$_45_dJE4+Fvcu#yzG;k3LkhMnOSm9wuVcqk3Q;{Ab>c=-KVNm_-%>V z*)-$9#O&DHXn@P3y9&2Q2 zr}HLt!|H^C>%L;7F&QJ%f+_k;xgVTxoNhFI${ZbTEZs^)x~V*Pr~7{XYx!72F~(Pz zIh-SEH0sC^XWMOWhl_F3#+trYz6T`9S&`tEpZ7(iB%A{tD)$BUJgNLi&_^5`56~TN z5)aY7!UMyT6dWd;C(F*W`}OW5L7t$wpCI1R{FTeQdo~-J92_3(ou1`={Gah@J%gxy z!RtA(Km3%K4Qu4p@u7XRhkePMScmap{>~cDcdr$u%_}hne7;Ce{{jqf!%p1-VX2@+>bsE%{Dx)1a{&d9RX0OeqjyH%HoT;!*e@dYoRp2Q?z(^P$Vx0N16A@>v>{wiUh$mYFapwkG6_sYlq z5i1ie$!PYd&HK*!eax0_2jLl{v;hi2Jifjo&=|t0($zwopoyvr5t^Grp*h(JSmO5P zR%*a%qh`0_H<|1XRumy0K`Q@n~)4?K6 z4MCh!uZecaTqv`JG%%3K9&3Op_0I80S^ROjD?CXqG59o0CST`!WfvEjR$DAi3=Fa= z>)8ixeSOo^)zmGDV8W;F>5=mFi35#1oSwVbD2h3FBYN4AKV5qHt+Kj_2R)eZx_D5l zmof*)Dg^O`n zJ%Z2k2s(Vj>>jPT%!N33njo6?x*zYHH<8SSZ9T<3{CoC;bg#lRygMBUw@8{%5^R3u zOJjAZU1&|`Z3??+e}j|;iB<1 zpbe$ze$N^4f*x4nYb)wWfov2%dfvJ5U{WdFM;`VduPtULt6VFJktS9<=QkMP!EE+q ze{4QG=&duOI#`(W zfF`F`m8~qWC78T3*&dmW%$0IT=a!%YKPV<9VOo4G*y*Gb(bUc(4#+O|(dAIao@ka9 zB1s1PziVcal=N!nMA1&bZwjEsUBRn_*0miuHFzaAxzh&WRe24D3ubKqaiGTa9O)5_ zAV|q2-@b__{j_M(duy-Tuhd`s0}#jGv{O{;jYU`8i!Q<_o5LW4Fkg#TqjT|}Lz}_W z@N<}|s^(PKRR+02>BqRxc_j!9K)8*48!O+$+t1Uj(Xg0bp6f^o=0>C^!sDh8Os>sU z(|Ul1DdYO9tV4;*>}>zGB`%34IjJD=x6*f^-(a{dSXn+su$R2ZV6v`Mj*3;+lJQ{` zGiGMh)rB42ba0TcG(PG=8i=lRAiI<({I9yG?xS+SY8;V8l#_DCp!1{a_ULxW@N76S zC)+ur|H2e0T(#8HGPUdA(C@w^uPab5tg4TVc4XTpD#(5Q*TVwGSJcpQ*lDcI&Bf)F zwZ$b5vV1trY*I2~yGo&UY@kwQl2OTEZU2O5LGk@Z4ZIxmaI-B(cJ0#yx{e-K&En7K zH4|>A_`&l1@(knt_?CIPdKG(1Vx`MGPn(Nn-Kb{I31n^gKU=muifsuu|NrW7_U-Dw z2}XgnZTOyf8*-+D`I|ywhJEtZVBD#CnDnatZ86MGuD!^4>P0YPGZ{~_4 ze0=^3c)LAIC7&W`!$+^HfWjx$k62E56kw^~O^C8VubKz&%kf#5HO9QTc7R1NbK}kB zH~B+1aQ6br`Mk+$2US$00e80hI5$jK=+;v=rv@+-TjJUVKwoH4j97X;sN6-)PQNjo z&1#UUiWMYd-?3TZ;?*ONl(ZqXb|lzV--rW@(#a$QlFt-IH!LqFFa-u)$yjDE@sjHP z82=^3HWJ<_=Gcc14`YoLcn@-29CGRK>Ir7Un^a-lw!is^@d$EIgZ@MPRHTr znCVNqP@knh1?El9E>(KJ4wUsZDik;u`tfub^VaQuZge4EM_hqUiXYmXi8XSKFmyaE z^1=gy0TMV1#KlXlZ0}Yv4#uN1Jk3O@0Pk@etI4gnO$y*;-hcPiJXl0CSu;2x zVFEcY4-j3RF;qami-X|$FK)oD(b_qwH+R|J`U;vl+IOko!fnuE)^kyVXD;{{7V#JSPP<49LbOk+|=^m7& zd$<}aj_2kYDusaka(U-+13ef}_{G)t8$gQU>C*%e2Pg3e zF$jAqt6v>h9R3{h+1!3iP0n1131_phL#CaZ7Pw71$gK-^NpG@_VNvoJL!8DtMxnoO za$Jd_sC_)iGQa|h*x6Tf&EM-T86c0dR6V9+LovWqQHG?Xb(oIENiw8FZ8TcZHMC^R zeB7+Cd{$P^sa0hhM#JISRd3TE?{0tqebT+1y(mCm!aOS|8|nm%z49ok+%WNy8liu# zXZY`lmR(bw_;lOl`2{+Nzg<-JZ<>MpPYc~j<=~p)D%@M0Ik(Sg)9hXs-R6f1t;Ex5 zIL48VZnSTFXvjcbFFuA`B5UR^YBHb~h(c^&WpAJN3k9rkDl>v%cV|{Tiq1D##Y` z_hXwoeSO7)flWgB;A-EyN9IloW}&il45CH*(it5+*)oWkvbuOp<{irH>~Hs8xS@;V zd9a_3nzU-roDh<81HM%^%tet7`hFmmcxjx@}_vKMng` z)m;PoCJ7e9aDe^9lT#8G%}n$Z_b@C#iQDzN`vgHTfRdoiXkXC`%2swLD4Wg4fxV%f znms!OEV3X7=LGUQ)Jz=@4RdqGG|cl`N27OqB5{18-Pd0!A{l@VhwYaNfBSm ztHg8vf{f?CDx45C8IsdtVXr7Ngr3=21V4YcQ-&PB#Mm}mQq0&?NnS9@`F3>)of*$x z`qS}(!(pl@K1?SRCM*!13xa6pbjNpd!>yD8gz<`vja~Du3Oad!+_7Q)8um(FPQ#xr znUBuzX$okNNOO^hLUe7!=c&}4eDU&HN{a}t9uVEcVTNt`JvXdumBb7z{t*mg?d>8=W zrpH(4XqkpY`MuTa?JUb(4adt1D#IMszrn{zTft;NK7v;TaD@r%w#r7E)tD}6YELT? znVIPQc~-k3i+@RBFz)1(b-QQTGMogA4!c91{-AHnAcr4l?RVbf>6POPisb?W4?coy z=|l2U@Ke>3e|5I^IxoAI@K_>iysMrmjTK^LI=cNg1qESYzq)Q>$8r^^>9mhKn0mwQ zO&iDG>(R+%LB|XheWflbN|$HO^LmJc(yWpAML`Kcm;NYz)xk&qiTUIIP~GL1n;ZXa zdgXseh136`7V{TcY=DihZG86%@|Q(!AVF!d79y$~F@z70X!IwhX|yo*Y2FHJH4sI&}*QX-@pixH_u31NzE&&5*s!l)v%{F9lDna(c6Qh`+Ow ze6X+HcCX~tQ(%XYmY1dcE&FCoYcNbD5i6{lbJU)6Qw+c>u1$o^6q}#l!%~`Q-6yKk zC@`M~3F0D+Dg5j8G`*4+a`L$n=MImqRlk{s>^!Jyl&Gk3>FJNrGPj;?C^o;_`_#xx z5K4dj%$zdZ2cN?mz0t`vSHrS+1LxrAbTeTJ|9K4ph=k%&kOnJ56CO#jEc!OFuy8Z& z%U>EMK#lo4QC+70MQ$^=^LP>*#W4%|xiHY2C{<;Qti%&}!-$)aCmP4wq4`79Z1=!GEMH?dRh%az?N@9cNT8$ThMLZw5s!Tkvi*Z*2>q~5 zg});<`wMfw4Av}{<_#xc8h=x7X91^8(3Hlynfzz8X<7f)C(kgEyjwh!x)40>{J2w( zH6@|Z+OwwJs9m3)-gc!%5f(cO#OBRpdh>2OYQ&93F5OuEDBDycpXTCcPA`^i>;o|f z!#1oA0Gx@`xoN|#e!=9k4LwUde4{vWMi(?+qK>`YoPPHt`!Rgc@@jVLq*inSCq{m7 zV3x67e|B(QsTuZ-Cq7tya&=Yia%GL9CYQ<{i-5&HN^rayA84Tk_?3P|6SYHl+ML{E zHq1uLEsVi75Rr?Biwz&Z%_a~C==MH&e;=|=@d&D>EFm+-K7FzPwR9K;J&vWZlGM=^B! z_dmd_LN1x*z>?l^6;bbLSCH9xnjJ5*R~g#Il~005ds@d;F=bdZa)@r3Cp#B_->6tm@j&^)#6pa7tKmI!s!u` z=3gvaGDLn{1PxNSK%QLoG4BLF;8|CSqMu#Q>lxR#?33;)-?4k8oPfBg7K*rWQMavtTu(%!e{_j1 zi8=8l6uG@KV&VUk9l4EW6JOicNHblo*Xe#Mo8(J*tTH|h8Vonouf$(>C7&dJsOGM^ zZ9Q-vtv5ccr|R~8w`&lyFUiZ?A^F7mMQn)lQU{Ttj#&`@nnn3(ef~|P8H<#GXm~CR zGgAFpjGQeIQoXgAH}gZA&qhv$$J+__4cj*?-Tq!S==8iU++eJcYrf^uvG22P9@6^y zvH=yIj~PY~IsiK?7(VJrt!*HIso@sgQY3Qf4V|)?onauz#OT-4lPIODrzz6*ivf@s zFKvT_?Lvq@V8@N2V3MLQXJ$qNs-mX=L1J21c6v$E>_&=nQXb{9*>sd?*w*Mz|4gcd zd%@;feR#xmJe9&Kv(G56Y@w-%*=|(!xBex2_HN8w5zGIhwW7&zHgb9vT$qI<#nBU4 zKFXnf%^QsYw^T9US=rJrS?K73T6W7>1LM%B2+)#%Hxr9`n)iw(xyhaOD)dyN7;=mw z9B}%fEtO9O?JFVCff8;=e%n3_;x5Jgi==?H4DBweNr^to^qSKWpPRk$f2zB`orTB zkKTk}@xaDbYJj%|3gmjk!}O=I@g1Y!k_*TK!@APEOwwF;?#$eRf26N(MJ}e@Zy9M2 z(b~7=NM1x`laP(HFl4Mm!`WzgAsbe|7CTjMp$2&nUGyHp)=Ok)sB!!JkNMI@DunHa z{k{Dsc!|LzTRQ=-)6L-B_-qtcY6g?qj}VL|#t2v)09Ki@@7~+BE92FxgoZ8=3rnHv z2yA% zhi0$ZT@zD@fX` zR2b93l#>Iq7UZjyx)piIg(51>j~@gFmf*BxL7a@LI{(82`oMO-viG}#SGU$|tgT%L zHutcjJiNVy<9Numi=Yo zTGe9X-9hh#%SSr5Rx8W!-Qmbm7B)JYWMji#vLe=&74t#dOS?}=u4*k#iej>;W=ND5 zCCydSzj^3oBGx(XvnZ~SAc2?xkqP!KrL%t+Y|jF0Z)fLrlKozX$D%0Gr3du7SYJqg z-DAgGu%3j--(>1&+`DqPyd+g8XvkBTF0VDMJc|ozBuSJ2!(b`fhN8zIdi*o=ScN(N zWawelq63QEt$t-)qY4TS`Zvg}e#gHwMpVh|b801uAUTI(^oupF*?f+eNlqeUp;Jq= z$j+=-)|IKD&_6_R_59pJwI-HvThKP2|4af&7(D|e{QcVM<|;fS&u$i(MUGhwiU4}- z=q88>$H>6Spi3yFtq2W`rGctJpHGtWiGyHm#x|OaO@`l4JLrz_K$s2rC#_1B4}WvG z<&84CzqhHnWNWwlYc9!8hDgUJZ+uN6?9%6LuJ^97!GjbwGR4^g4drl)Ru8@aK1=Z+ z?QM%!B*}I&33h70oUg2@uL7Ae7&eQ^w@Jsb)9rcb0Xb=8I3{~{H#y{8o1L3TX-_)| zui^5lZ#`j_>>nQYXRT!2H!g(O=x3! zvKcJ4lSV-nLDT}}drv&UD4nZc&Va_H>HH_ivm5OYYD2h2{Q8D?aV=X$CNddj&Li&~ zPK^TF*Z>5@au&t)7qUt4cxk$7PXf2>ug<}2Bl!0}!oN!}+h^*_E^l#0uz=WjV>7c} zOWoEa&k)$mtBh(zAgR7G^T~anb|jNV2&v=ZB|Z~M#sAS)X+HUAB(( zq}yC2Ur~N7?hDw_tAA}hLfaTSnQD<9b*O>dagjVp%V{r9?F|Ej#(D|7EQbBIQ7Mu!FC6)!Nc#PPg&(Qv`-=mq5kmfs3z%oKa^Kr_KH8l$!myDRe-YCSQ7M(EFSJ5TYa={5NV zC@`=r$yhs9p#RC0c~zn{mDePO&T0A7%K9k8%&S$nG=3^7(U{v*7lhold;G+x_PDzu zqf2C74@BrCtyYU`GL`MapuqJFphh`iBJ{T7D2OcME;RACdGg_MG++Vb}?11e5C$j&*+-oWa zKBt*bc1g6VS^awm!+sLxHbEbf!2``3rzgdLG)~xnCiwe_4g}E>!D!Yimp0a5t5ip8=G5aN zz`}9ub}yL*<6mV0smcW5!VZDAqyF;s={RB1{?aN}Zt%>`PGUZnulVadob+%SJ)X){ z0Hr#j4a)s*2!u`Q6`Io*;f|VMiFBpyRXd%; zwX9PU6wl|_uT?W%$+Z$of3E@R_umn9s%z zap+{+sGJocsCh1XNty#NBT!6f##p633r`LX4#Y)!M<$rs!c}RwfaG{>EiGG^n4qY6 zVCDyq%bZxnHFoQNXSbf8duM}88)BDALE?tm=-JXco<}(XSg7=w&_sACOw{yq#^yBY zD%$PzeOIrIB}vvL^UNbqm6>(bZJ{NO&F`%oL|zyQW_@12)l&_+AE0<6|9*v-zJAwmT)tZ3Y23BnsE*$HTLbiDBZHi`sW!cUF3 z8cZMpvS^1nIv{@7=%fD`cKab#JA1)4@ymObfL!?T^{DO^Ocl4+8boSNtxf$9E-5XC zae$lBD+ksx)*5czseew(u3MM0IuE^@U z$=enZAyNclqR8|xJV1u#?Zcqcad-EjhoXG@{l{+F zZ?)6EbyII)Z+=%<>Co;6>0<2IDuXKko{_g0@ZDo9P^R&e)ZU%nw(wc;C^Rg1r&O1NlfZ7X>OsKHsbvqB zrf?+WDoS}@jY*((!?L%&Wn&||5bBgOK@~blV}!M`dYhYrU_hF~I&^;f;gK*RKhq?t zsr`_-rTET7=@29yuq9-H2ECIb8+>;<@6;Y<5V&yB52F;$)1%9i^3M3d2Lv&!(49NR z_ybAf%NcDj=x^95fP_&r8qlyeoQaVM4+3uscW(mWy~#7r!~zdB0h$wQRMArL^!i8t zqb{=_*5B|2I?t?OGY~mq*{W|}xwR?rDQ4W=_!n91c7ZNDOI9RndY6+O(XujcB<@6e zMq9ueOM_x{(w+0a9Ainzr%naa4i?5~nN9rA{85fr09IlGN|1TcCew%w4?lS67?iWm zbRTmJ785BB<14vBAqjEpt`0y#=jydREYZ19Y?U8{nejZ*%2g>vWCAD%az9B=w!9-FnyC{67~^YYKZGM$A$ z=GZk%oSc`cTnvX_$-uDt{=Gvi&)6A=Q3Huo^^j|M7tF}CSjTt`1`c613H0vUrklJc zRTJashv;+Qemvbh*x2M?2+h&XQZICkk;apirKYaAZxEzfM#gab^fQRiTRu9teA#Bg z3vlOs`t)JGJiSR?K~q{!C`nH}7#!}K1%ts}ewn)RecsHUAiR^Yz4~J3`es{w80PvZ zwUIaG-qU8P+GVW8u8j&rR+>75tg)pHh1!iay((p{tf7=p0yXz6{;9ELp;@C?PW|H4 zR-sos`qrO6Fqw>6#BK>E>5lbMA3qMLsaD&!7!BFlp7`V4d3(90!(G9t)tJ-{#r|b3LB~ zxuI}lg+YCDaX(@%?oYr*zfLCd+i0_*B*Kb1;OdzoLrN%L2m>1wvxm-+fU52Z;Ty_m z(XTLd^cfy$SjJeu9FBU83tD6@X%odL&jnN6D{4(W(1nFc>Ci>t@*fETvW_ZR4iD`o zZ<8Rj+<`Sg`jKWG%p9zI=XMmyBR2(`F#pzi<_pDc$3`D$PNVw>r+|Sqg?QHOMAi8m zG>(7TTiDdtli9{*mpVx_nXc+&2%*#w;F(>k-!$GB$Gra`D<0HfQf(q2!^``-;t{+9 zS7q5;K9Lc_8=$1Is`$S7MhJ_@iLcnk@(FkL9j05G5S#ssG};H{GWy30z77Ew5E(A< z88{c21Kub^DG-5_SgPlqLt7~BHTr2|eY&s`eK@$#hbw0Ny)v^^2v|}}G7%;4c4llE z)RYfrzNZgaoJ?KFjF%87j)6C41XRR=@~tCU@YmU=;9Ip#1T)M6P^Bvy7}n^@FDH%2 z$S^ZZy}q)ywdq3Iu|#eJXBJn)Akxigni?tYz-$?C9F>+BLbv;syZhtnTCl5Vw(UrF zwYAXF1fLQG9Wu)84~{}BH+s!1GaO>P(Bwm23P>a^$z8GuNGM^%0zIHKdv|aDK*w}{ zduPKyTL{s;?)QYddnVX|Df?PydV{McY!pr53z*2`f;cV+BFbiGD{+bWCmtuNfe$YM z`AW#f3dcg1qs)Q`w_R97nY#Wc`BG& zN;ID|rVk{k4~M*x6h*@j7X+?QbLdyUw3_oN^GoYcf&pjY31oE;Osr}NWXXM7S-n358jW) zot|A-0Xn5%n^hTS7^kq{i!S9L1qDL4m5NaAXu7u-{J~XjrgRgvy|kQ>)Z~1i+%5_> z2`0ec+g-mei0J|1CrVhyWdz8Ht|wQNV0XsVd>pKvSmxrC8>H!i84%)jIz;L3(5gSz z`{*y3n_aBPrWvs-st zYu?()P$x2pniZaD6m3F>xTE!Q)b2*8W;bgEtj!r*=*Yi4Kep2*?l$>b&p{#(;CJ@m z^u?D&^5@Ot;B5$#7(}IW?Rl~lp9G;(H5dg7xX@lDawO0^k@xKHtFlvjXl%j~pEMD2 z%hf1IdN{(_Xh;KE;lu8mqacOJzRP06E-$_eX{KF9BjWhQ7fC(=Oe^lm$-x0>8eP7+ zxgD2DFfDAQl_9wsFXu(!RpM~!hg5vGb8>93yW`)gd8?E$J6BO`et|hXFk*qssMjO?OxJG2DWG~+qb8aHL@{FwL}U- zsK%7}yQn^so=Vr&N3R1hE%9d9>GU4z-F2v9MjIF-CfI1l{}E58>~p%dd?k_h{;C~{ z?7?7=yGSUABY8Pib`gY^$aYeb!4H`k70BKBt!yLLN_1e`d`B2OmH2Wr_CA6Ef;9zO z8<=@n$g9)+#P#Gz6TTl$AEj(nL~ZW;KC8FCC&>#_XrD53%ucH;rOt8vevnF5URgwV zMFx1>T`*s8slQKk53k?Pt0qU#r)s{`$7M)W>Rkr|0fIDU^(HU9D2LD;>Df~%y8&|X z_lh=~}L?seUYORFO$_r#>?P#|Wr=msV!s_~+@6=W{hpMyO zyAK=0-w+v@a(HSa+CYMrt%!Xbk-l|%yV9PxK4>vpVzUX|_4ELX4VaA-f#7dW0T9N2 zQ9P1<%GMhF2f#FF#U>!%dQ@Qs#j7>)!7ehQ-YFXnFio=%<(0tqpnGz(m8SA{*f)w$ zic?Sj%s}crCH6k`#&G!Pqokv9V}T!vvaV}C3NSMNL<2J-IMGz5xC!_M_Z;kJ6vS@& zjfYpR1gW^A+^pQGu`SdGatTH#$f~I9);f~2v2l)>WC zUU>`MZ`eH$wotnuG-OT&l8S5A9QwZZ6P6S{<;F+^FJ z0m);*$aJ$NBsFdAc4g~@2x z06D9q%g^5df9JO&A_e=iA8_2ZAj(+4A{^lvmgSoHi1$GIMyg(?`7Ru|R`Y$s;h}0z zT+A&>ls}zwnfRYMJWzq?gWyGVs|r} z^yHO4qQCwp=H4ul_d%36eJcB?(=esJTXM-gT)z4oKY9axJ#}3v++~|3#M75N(-JrXXzwX2NOISzVE4=}pt&7%L=P zB)ee=Eu|qA8PXwY0pW9{KTrlq)jwZIS)8CUc{I}j`v*%PPKtO2z2n1*dAxPm_%PPP zzTiK~%@L53uv62`L@|33O7s$)x4ErmPRdP>j(=d;ssip8c1|{=4zdjD|jHkB>1Y;pz!%Z5@ddhX12ql9ZLq+9Gz&F zOO{6_{ZDIDIzqi*wx-91Pdy#fIe0^Ia`I)%3q{v~e8exyM})55F+=!FQ%gDP8+2b3 zjZ;>1%A#*>w3s8bD%ut)N)iimc$rN6bJ=XO0h5uhcFuihSr)Iz`nn`W_yaSzg`2st zv#80&dk$mV`i^v;>!Yjrekx1#TUb2;$Ed>{h^49DYC_A*4*VeA%F?Om+7|=L$H>ic zG3GH3O0VOjsZ{;qgQJPwJb|zbnr)LFHZ6Iz0HEFs9yDNHsl1Ql*Hh_uj6;S2`4WpfKw`Mr8y+5^5$!&R za=mt~0kzV}(quS?(7HBne5m9cVaHECS%iHN9A01Ln{u^NXaAqzlE17={?q6FkT@nA zC)$)0Ig91rHuaq*v&1(Lr1=r)(n41IUZ6xHiVg~xDZdYCP@&owaxwgnILb^|8#`8) zYmRSRwuYv4hbAUM{K>oXOIAM^>=gm<@Cxx{o}@b=+!nFPAfZf*MT#E2>vqf7s8YTqEVVY0o@mj~|Nu)$|*W=Bw^*sLuXB znc#kH?$?NwRIdawq?EZ?T+3=98!{EGh+2lml(Ys^Hb0GcAzbs*_yy&uFL#C^akWPk z3Bv~4k+Oy(%Jvos-2_+MrQnQyq2RNf?+K}(E&F>QpEP~4E8=m=!GpF#xV0@`9JGYv ztXIsW1vhZ@Ocv7BQbh;zql3fiH-u^I zjJ12PvzKk021|#Ru3c5oH!*ID<;-*A8@0C7u>p(5U&Lx3*t0NOjP>T9e;&N)4d3Yg zYQ7fsOSf))^q2W@KV(itrk@wK0V^wp+@PAx3*DJD4+)cYi6dscTT?lUG&`XAwK0=3 zXj59WaR!`gH^&6|Qg|6dU6$O0(}>sL z^fcar2UBm8)R~Y#YyS3jhZ0ujv zBW`X7ZwA(6h)g;N@~bz`8(kUsiR6h`Wm*&Q5H@MxCJD-Mgz-WVI``Ct%6c{#(3x#R zb84`?^fwS3e63G*hiQ@m$;N*fuxtPv2^(b2Z1|rBp#z7VPv1>iCM`qBbR-%=AzBX` zU*!0*TJjx*Ew5fm2kzi)O1ol37Qdf6z=rzWwv_Ih^J6m;8x&8Dxf;wLUkPC3xQ||X z5!oHgiyvIO7UoaR1$IGqPb4Z6!xS;I&3s{o`}@ zo22<}y{O-sH5YEmiUl?{)enT^&Xza)G|L_R6Wn-rSsAJfU<)v?deLMN3|DZDBeyD! z?5vq-stjqWV@)0<4s?O@uO_C_O-mzO-%k-h-Ru(yQXz85MPd5V=+el#%xq*Jl z{u*kQ+%;Cp8xfTdxOKNf`-`FhN0QI2O>Y)uo2%uJkJo{@#QC?=+liH8=0nL$i;=nj z7~Jw0wy>%o+aEIJPda!8`8a-EwLt@E9jN#?C!!JiBm5Q(i?5rl*S{dEf_rXfDDe? z8Sxkmxw?GqnlMOjk0asM0g_5gdQa}`*)I#s8Sd?;H+H+9Ju#yoi6ZzTpWyqlh$FX1 zWy(-U=h!B37$m*djclQgB(2*re2qr9^LS=o8ko7*-P+60 zvqUDdsT!%Z!Ak1z28e19>&bDy^M&cXR}(PqT&=>&GHB-iL}lqKG*n{;=DQ;lzp#?Y zMT%<~|L)#?z@<2SxFIEXoi|rOFbR#D4OoyxB_|k)XJK=CrIksr12CLx3G3eAaF7z~ z^ayp|{(ug=_xApVper0Aoy6IKO^wor+*J61ij}pwqL)6Udn}HB3M&3U(He zjU*PCI1R>}ZHJ8TF+^k1f7fm#M0pDc>GA(0`K% zN!FrwUyX7qA6AAk(*u>$eZ2vfiFVOri(DQuV)DpHgQeH?!HLcM#TF>aOY7DNKZk6bRar1T*dJ{Q;u8ze_hZQ3ShwSGCF8lMlUi zO5M|&{JF&`CEyeIBM32i)2-8MJZ4T6;uj6=kRv@WHzlZi$f#Z5qIs4qCqoPL{>YM^zCY!mD1Z(_Ebp z@!!-x-*P}cN#P38->UQdD-=_**SHfNprp4YJ@LJuyxX)-(CFDJk-La&hSzR=cQZgi z3PF25XQln8)}RxVp3RXB#EWwoQ7^CzJ+%@H=C2*}CII2i)(4+jU4 zz3f#~;a|pUU?2I!1HOAFS#mWivIgnDq>fdsXsnA-Zm!C{;emt04BmN_J0B&vu=qFJ zIOEci1#n*lwWbjy2+GfJ34xqZ>Gp8*=*|=QM}^6eR(OItjXq#(bGT8- z0ntfs`K@|tHIpw0g7Pfy_nx?*u;P@#6)nV3XV;-?yh(ddJK$_$+pdnEIEB{T9k}yUJ_C=2xp#@GeyB8dGccp*(F{?HBWY|Cs;gv3dc3%* z_Kqto)v68>UN57v{WvI2e0`2H z<4ySt2_?%2RTasj6yTM_d^rA)SobyPNi=r2@M#$4zWeg2)+;-UE2EOxQ*e&YTsj_7 zl(T6zOP8JuXBHx)?eSUvZ3x4m0l#9Lg>A<7Rhh(9%!}b!pUjy<&{VGw0Avo9D#vjG zPc?qOFQLYj3TtS%Brf-FO*OoqXYw-5@VkqK7bHmlhqKtgV=~=@RVo8W@}KG4xmBKI zwM3LApgfSpuTkY8Qz_-TUPCdh6d~-#$npij%JsQ(`n#@PV+DH~%QEG0$ONUOXSakQ z$CHIsTbiY{t#^g$PO#HA9Zh>X`+MWPgK_7xclY$qtsCbtuQj!zGOE*R=0MO9LN;E# z&DYkYC|+4xBDv)H1@1PSGD;^~AX?^Q>b@PZ5vCvOz#;OCr8*#@MDhedCxgk+@$~q3 zypoF7Yo{I={p@6e0xEEgJVu&6U1;~I8c z8ZW?!5}oN2iFw4?$k0=Xg&QwjuG;yxjs~{I7Uuj>N)zYXC~?Dv$IPNRh>9WbeC8$t z&MEro(u4v4f|s}&3d^?0{k^@x{G}t+7nA*vLu?y=bOS}*PSL_7iScAwjd+lW=ue)0 z3MNYI=v9bo4H8wZhaMBNnEyTN_<17Le>(D@-f)xhYNaA-sZnpZb~97Evh1x+$}V0d z2w7LZgg9sMJwk@lGbIf9)cL2kb3}AwD^u|qL&*qE5z7flOXYVr@b~FS{vM)q#nzgu z&oo^L&UfQb?S|;mOQDd^2CoWz>}iy`0!U%Js1(Qgj)&?a$ElDMzND;@O;6ZrVbf%9 z%uDV}HxA%H4v~ENWV+b-eftNH=Z4vc+Gmy+1V(irOI1J!_%sS8MSr@-@q72ps4pM? z(=H>JDZw#9J&lK`NKicE?TV(rtV;A2C4;kx>zFL1(=48bsTnTM9%rwoZk!>r4EvWa z_lF0Ew{H7ppYrI#*a;9GY}`=X+#Q}?^QtOZdWMQ5x z39H&92hE3bQ~ihkPOkQ$xyR?87YF^rbKl&cqo9}bd+^Y4Nlb~~tN{!`MFP(6pl4AT z>}l*yz)iqaNZ7!h$8I`KSi7Y4ZqjfDxGIF|GIu4^*m%p<@CZ_0)Ude9_gAZNcVX9l zJ#3U<%P=zH4|2*8MjS;dZQr&dsGrPxWK<>h(()q-gYx*ONB}wE1rr{Sr2pehoJ|H% zM$Yb&iGq_+`&x+F5tc^IlYSc79y+r}I&V*cBHrf0k0o}#C#*df?Hbw+bfMa15LV0L zkz41M2Yb->@LZhRq%y&=Q+&*)yq$Xw#T%MR53nUJpv? z_jgStO1!T(|I|~kPj~o|0}Z;6oQOZUBIfoH{^ZkhpKXf&w>9)6sTXiJ>sp)GZiOnu z(^3N{Cj=C^LNpaEtx_#~+JsYCFt%(vr<}LyI6~d3h1W%bN|NQ6kr2)eVI#b_Vn)+h zsbLuA+0LJzt7*w1Es}cmQLrjjTPeY$09f>t{L{X zmh3|2F|0ggDe_6$M~~g=^&Wo2JQw#l;q`hParpFAQw3*q<#7+wWi*EwWonFRBdHD5PpDQwpN6)xO#VFsY}+zIVijj1Eugfsv{XYBO8ZtJ*rwt9 zp6pYuhymOYANc!MA??{+fo+R({*2Zfs&fcqinWaQw)>MUc_S{#aAd1VOdnWk60N@Y z2y#>OL@sdviXpG{VI;wR!faVUksSC3+dPyG!Q?`OCei~EecWagGx}xF-9Kn1Ccd(i zY2e}u!(XGUV7#@dT3ZF$U~^--K|k}AxtJ>%&n5w~_?u$eEALN-RuOQR5=oc@jF(Q% z*mL=ljB#SQy^C!Yl@0WUCs&b<;VKl5+Rc6rGTn_pKkhlKE~cRYw%`*IV?&X)9{Nwxhok{sbi!`Rf;6lV%&p`;jV zKe5i~q(Jd9yLHjLbwS&l`720mLs-VVfve|#&5$dGF?$CQ4UJbx{UQ>6w?Nq0_rm)2 z9Z$*Ot7ds$e?KFb>5W;MLkn=xe=6 z^g{UY5Ah8aBPyw{43U zpeH7VPtq-X)6wwVp8*j(`;`4Y`5=d~lrBOp*$A>qRpf1(YB2V@ru1zjK|KHD6ZxLQ zm%+5O_H$$7WAydL{y!%D{%wBZQxH|nbZFu{p<_jD8euB!8bxZ!LotM?wpfh`jb%le z+k$pYqCcqEVTmdfWNKcdjoa(|$Z{386scX#g(K$qr9GmFOL?p5R`PBUwz#6y1YXPG zH*eq8{HZQf0iw|~x(Gu(6*K6RQV1TqT-EZ@zU{$!-S=tIRjMdxdMo_QSJCYi*V)== z#*H#pSSXmZW-?m(Q^c!KNoZC?NX*sd-in6th58G`$c&a{?bZ+xIG2*0Om@)YJAAM= zN_9ep1m7ftc@||uVGgApXe8f74=mw1!xO(e*aH~I}^(cdk*^B zhCbnACyAG+Ku2$vNDo_gS*;OjBY(UgF)L5T5M>9Tl~rz3xZ3VN>zP&=ust44aIWEg zzVxKx1^v0rkNzS*=da5%zc}|LbHArNO;|T>qBv}WdczXY+C{>%VLN1@nbFa3N$41o zHn90#xqY&*@>V0gxlkF~0#Gf{D`s?op_+i<`8OOMi167&WVy4FYC^&Bt&PQrTG_~u zhSScv`n61MP0fzw*xNR~M!~La(ZAp@Ws2G7cx|)42$+Nln|w`?7aA5EwwSJYbUAK# z=WQBf6hQ*#61>j@oe}f|>Y~^qUP|BGCrz9}!0&b;K|{zbwwbe|gu`IZg_ZS1aI06{ zX9|QDz%S>fHCU!5b-ztx@Nl3sv1+ol27`i`w=!B^NvwS!9{3UQz@ISL_~`YuR^l@j z7>K!f9yx1^FB(nR4m7a(+o4Z8eJ47wh9*P;^M4jQClnZNUaR(SMiGlll}WzPu`~Ng zTj$0Xw7mV2=mxKu}mcqD8f(9lFJ@!wCZ-d!>9N!LBASqPv+x#JCN5twsO-=VV zMal?H+|*fwzzT;%HL<+fB{-v{?hrh*KMM&Q5t22!Hq`c}kNhU$(-7otOXppJ&RQsD z_1!Lq;H|V4MccR>?JYEP>(9y|GCj$3z!U+OasB;C2!$0%U`srp{0?Q@(`3BJhQAg~ zO-TvX#NTmG6W~*P^L6{$%Q&7kGBft5?bwfl$}K^4TD4-aM?ksA+?%;WKGJ;nqdx3j zzCtoNH{HQOxh>pav14_ooRoAR_6{!dg$bYFD>w5%v=uQ-uITmezX6J4v_uUD93zFX zul62^nBKULCU*Npa>}|Zq)Whxm?|K~H=I~4x3;ScR+Y9k$H$@)Ke_%5Q^4u8KzImT~Waw zMGHgof;pU%>93J91#xHrJ9*hnA;kibSGP_7j-y;q%U}Q+9_cOx@B&iUPWEPC9In^d zlbU6Y4E7ROP}Zq~rU{~BNZgR`0tz5;Wo10fU@!Hq9GTwa*~-fdUKNYz+vh=~sp>)o zX#D@mtNrNQee!DWv%k#uwNws0Q7W`5D%4V=6QZ4tBBMn(f|#`@Na@SS2bcksqMONY z&94d^Du1>PjXqCMcgwrCE?m{wt*5|U8GaH+whcGOqv3ig4B|bx)#3RaC;4yG zY!EYe`pIw)w}$I=`__U1mAFxZHeDi_jsqMmMy42#&|(y%*EJ_36*krCn0kh**AiEB z1HI>%JFP-E#!YBz+?Zl()4iThS3%APZ(z8xEhJ+VK_9|JKMxoEgr55QO|g8RNX7Th zWL-3|y3%4+kIzaeS6VvU(GUP1G!;QbI^n_`ngnV)t*nhMhGi=3XxE@HO`Bq^tR8kL zfHh1p5{+M6a4!=iWKn0;#qPDsTWu}&tq-lO?}3E&eF7E-nSPso-p=@8_Dh6bLPM_% zrg(m3Gi8-s5vgS3Y-gb3VBPWK=Svyun<5-FFI z>{d+~gdF2gZYcTRmvPCa0IwKBmCwu^f0$?1T^%ou$Uj?5DU2Ra*}$v_T)2tWszg}c zed(~9naNUSBlC?2t$nptCJ3kkGajyJqWYSFlzQ^(i6;wWdNOg1?%?Famzo*uuy?*S zKi5~$JH*eW=$1O`#PsMH{8j(Fx>lhfDel;ShEwcOG%^k9rfB~vSFamX1eMCuJ zOdR6KTsn(8mqW@y|0}n5pla%(yReiDK4a=?scDEbHuUb$z1}<633~3lI9WA!bU67M zcgdLA?q~YH_e}vDNJ1s?R!R0`Fgm{zj=S}!`u2TLDhT56av&M3%`3_* z+}LE5v)j9p9E1BGB-S2L^paVU;Az_+P0H<77v$unSL|TYGdE)>!`$>h4(a%xWyk-P znan$=`%a$E9|&z{n;=oLwm@oxlKh1lp`u7s5jh5+j6g_M?>xq+=O^ULPZDauYQ9e+ z$CY#|Id-B;T^R3*Y(a>X;{M?fWgPR#?=&fv&mPHhDuorZk* zp?X7sCK%xa*G@dy*~p5diC@elvdMV6Wt95INMvlYd;iMR{2Ftud{+uljx#<7C%nI? zruD>Dk(MoaAyRAe(YWiq&oZ|k{GrW6o4pmAny{U}6U)lnByBwrTb8fimFb9^+WE$+ z3r!DgZ<1jSl`++=yjF(UZIG~uQ5pW~)oUjAEt2KM?~TR~jxso4J!*CT^xANkj8)7z zm3semTNgo62*XZNx{nK-q=GPD&)+H{^?LU0!4~Bpw>#Y5LX#F(h)@>?0zzh#i(RC1v=Ac=?`Q}|2&V^^Z#?m)9 z|AN`>F~|4HafQBqusbl=Pxw)jrP6ds6Bbuh%Dm|TLhOPMf;(d|K5JS%M}iynT_{@n zTO=yYwZ>6K0izNE7*D{1#sIy|-&%QHWYH0pnnAi580#4*Wf9w{XkC@m!1Cpzb|~6Z zBskrk^S0wz&R87h4!#!|g-xf54MTGYVjV{dQU@zbB4H`%_0~`u1eQUiDWXra!wIIE zAM3C6@2kuEIg(9P^Vr)mb!K>WCQ62JGZK-+hs$Xjp4o6#TiPE#|3bo2gHK@8wFiSH zNdZLQ0&Lk&g%S4BsA=ur57doS@y>G{i zw;{%8jOd4G3qP|K!aJqABhIowcS_s1;Dzpvx@g&^QQouSr!v7?E_Casf=KwxolGyg z9cMSfUov*U;+k+nR7CqF^r&{albus2NNReAiE8zi6cv+o^(8~jH#n;{DUOo*B1_$0 zS^d3-DTWIM-%hU!d{cd&&WYf)u&kx$PtA_TlhgzyC(IV?R#s z!esgFB>8e&ZDGa3y#?V5<^il5i$@QYGJ#)q`Zn}2-n~aPFC_R%4XX$bxE0TWe(%+c z@iW>fWm^I(B4`Z)Z);#ua@jO6J#E-n)}`jWC5df{NMya~fB7+0OuuvPFNsgaHWzAY zeWjGJqyi3v$|o@e%}?`Xgxzu}XmxSu9a{fv`6UKJP`9M_<$+;y7%s;?(@s z{BoBS%8s`|?1mdMh_tLnLS^?r@;W&MPp1-v>7pPP6%#mE?b@U~+<`gJ7hY>qP%o~=`3HaB=0N^lFPq!Z0wE(!72iQFIeeHP zU6d9xo-w79{e!q`zDIBTen*L(Ch)>k_&O>1<2b;6Nw4X3OAtWafiM6@i+-^LaEoy$ zJ{}wc?d+ZbXh8>!=k6VB*w=#+bP~`WZ`Rpw=#8bOB+~^@=V7{k!EgVc`R$L{U*B%l+Y)OOK1l6kv07kXJKZGV zxTGkHM_jOBt76HmhBJ@v+6bSw=-_qgqKw3MPwe7Kv@Ga`2qlSJ?5NI$f|-0eo#L>b zlLti`4enM2mG1e?ozCcG^cw5HF@5zj)3K4wbOo6Q4`(L>_JStqd|mY+Z^H$Xsa8|I zbzGwq%~DTf*q`ObLI{iZy6>EBWk7)W!@mP~o(@OPy*Lz#$vG{yxVgeN3E?%bnMqUg&sw8|hYbIz_g4^=giv%Sup!ek1= z8YOhW5K&gm6@7fS?!a|hK5GpK<$;e%!{v{gX=0$JtO^_9@jn3A{w;5Toi?FywxfC3Igh*30PIQTI=y*~qAADy6${4cE<2 zjqhawp;-0Wsg z!V)YJtTAG9eo@cmU$bw?RegKEO-1$(irBL}p{aF^;3hiDIp4-gjmc@$hc_=cid{;G zm!`O2qT+|J;#tEwE``9i)wwv0Khh4sugqE-%DK3pL})RR+ufsCUI#yqsh^MIq{`4H z02Nlc^>qo9MwKI+_1R#kQNRRp+yuElEC$1FcK`yMqlzR7erRY=N@W8`d%cHD# zVvLm3t*pK)cFo2c2V#v^*Fx*8&xzSitgjss8LAay{+)k2Re){5~Sm)=K84clb2O4XvLFo7aJVg zJZ#lQK?yX=fGX6r+OZB6S2G}fF#J!zNyq1)O58A<78gbKgR4~+nw;&5{iv3f9+rF1G(3p6xK$O%sK7Aw)G$}-yu003)p>KLgKPeJU~5#O2zK-s zx7rNF?M?d0qndxCX&IEV$D95>jOs(zr}MCE!jUSWd>_gVXV^8pd;bHzF%NwtAKZJF zhzh5xKT*`Le!#?;>;jNycT5uaYx(BJy-GekP-1}7+T^G0*&w+(vT{(V^zVv=h@M%w zw?t-=_}<-Z^2F=%#2?0CH`GP`W;v)PGJT%zkHNEBfhtP~Q~vZoKGs5|2i?0gcfh>yxH`n)l0E>UK!Ih$eo zpJI#n`dcaT2L6Yaj%DdCXM8b_BH2KifBrI^Wb+|vE4>lj9Yfiu2f!t7lW%feJN0zo zm()U~n9{*yTY1ihn(`}rqUyz@h$usBDh@Pi_dqP8v9%Z-anc54Qm1dawi`w^k zgX61AqjU9mwE5(+%C-s-mIHYfmb9%5(jtpNkU<7%q_a6`VH7~p$ZQ!uH zJ}=~YR_xUd_{deZTlQ@jWYlJ!z-4#d(02r*_D}P zIS?aGb4Vg`!fc^|p5wsbsB$JhTvGYII7Olj)RVDzj?W(5_EIpV15v=?toLY;O}CgV z=YQT_)QQd@1(+;|xRyo?nyZ{0-c_lRrU0}1nwSayZMymwGqic$m`wmI`HKz7q@iL! zy5h~Y1Vi}sl`D&Z%f3j;9&oM5iFmo!p?PM8c#xEHQ#{z4-VgxHarxA?r``ESZ?Zgt z=bkY@ITP)pu{h$Jl4hwxP@p+do{cYu9>z8MyDarOjMJZg{G3uEG%pf_RIZt3S@>oZ zzWE4WI$^P5is6PaYF^l;wNLKVjoE4 z>~?7fm&`t$1>PIQ>#B`*-1|x9wG+APhlS(9c3%b?*3t79En5>y6;Nsu8|?5 zG0z!Xaf52TFTm?oiI{>bhlW17^D7E=pzIgoxyvI`=0?`LjgbaCVA^`+#1qBG4+=$y zA~`vCdyef&_VpSrZ1Db-_$4qlJbL~)F7W*2!+C+9n>X>_C)p@saB`K=abakdO4PM+ z0cMj>FEBfP;!dK!-NB2!@tP*|RXBF~(f=TC^;hiIbVm=^XU=`D%vD>F8)7yd5Bl+f zL!5|mD0u6<3;}pcnjzCL1UYUk#^wk*J4L?bxyT6AYu9oF)S5?3dsII`3Gs+}E?)%4V+YKV&a?4gGcI02<= zqwXee#lb0i9#hb${7}By#2UyD#;_k-qa5&0L-AsVWJsbpnktq5s+70IMB^;qmevn+38fi3lhv@)a9?ZSzL3(TBgXNG#Y}un4Og@$M75DU+RFZB^1|lk z!UNfZjo=$Q*Za*oyM*5~r`UV4PSPonAOpn(Q7$nP;;jjb32J4)+Z(j{J7T!-IS$w` z-dr!>V7OuVKZZy1fIm{Nzkik!l;CoQKWUDu@DPg(klTXDJ>1vswBiio4k=fTj zr#|~9?Xi47$G=PT^v}@*iJn$HSb|rqtyM%aa@PoWFkn--!+gx z$ws`^#dmz7D6XrG2Cu#$b8x9F#wx&gUOP^2aB>`%BFf9A(7{4b0e1GK?6{DDoK>1w zhT;YL3W)}p7%`4JA;+?zHu2v;k=ts)f3tXLqd6+m(G;!l0P1IE3%0hy0=3yzF$uKa z&_0FUSfjWicBMsu!wQ?QFnFSJF0l%^B1)GfnOTcs$A#}vCb571~#6q`ZW z+&cT4Bcp)VIbxd|sTgCTegE-gvFGS?amy@@Qht_XDbAy8d9dK1O4q_IBVfJz*rTNM z=!$N=)B$$(GOK~ucYFInk!s0)o1q*T=Yk6qY^M%e`ZVQ=);e6I`7x?vd*4V94Df`J zZ@k#f+g(+s0c{dDn08XoYWmfpt%W+hn>SrrBizb{AqS$kpdEH*WLDoFZb|kfq5p~4 z9km8iNV|y!rwod|;b=H2MhEnfujv~`7QQI&Qsvvw*o1JK9bvYcSs&vUUMy4RVsAHM zddW3a5IYK#V&LqMf~0 zsQgX+>A}*uD|OfUHdYqR8Nc9?n&|9-*on8$8j@i&7_;q=Y9;lJ(#CY2IyvjfLgA@4 zNQ}=FAycPX4R#y>ErM4UlKHtiq(sIeiAKG__g26?U2(;0NF|0qn7LL{ah5VJ@+Tgp z(csEaWmmjiG%cygONom{uXW7uO=GTB_u;l>qY4deZXXHfFrjJ_oo{NOHR4o^?WnkHCcG2xA}+OZYA z7pNBb_JirO&t;iLTHB=!mEq=PJ1ohU`E{|C>kDr%#rz8wzI@?NH$D;Gk6wrv?Z8hb zT#~?Ao4bq9p-Y%aS7`3H=8nkD|BbUjK>=PI6iG90QW%!=02YM`cq@6Ab!JG+{CV4X5J?B9XdQiAlKBu4T~Okz`0)?R1miHztm)I(KdPyaKV z741XMy4!$-uA;VsCssHgZaqP$g=bNj=oriuzRZHc(cvKd>beXyJbht?TgytbNz3=<(YV$PGNIa>Rc85GzBA6t!*3ULR_HX zA#q_gmQc>jc_m8Y4?dm?j3}C2iAm|Jb7Rs)V~=zSMdwm?m%8TH>>W_>Vn6kd2KO@sp&+t>5uRPppIk;X?j@AaPi8CO+Gk_ z+=@9e(Q;Y)t|QvROelYH{bKgn<&++u_K$fS;oxzOclprt8A0L|;1N`<=xcv?`ErWB z2cxs=*oMez42z1P1QF>cs_}j42+!Ydttj8rCm5>auW~Scg?{ie0l-?>gvp?}a~bf)f}mN*_UiGUuHx+Gz;IJ~}VM!(_2>T6(MSF#eV=S;>cKajjFu5ilb$Y339CmB74vD$F)Y^GNUb#Ick7T9y>MK_2*;lG;cUE1$| z+B?a84EyLw(xm^?Ya;LfOd}Of2rT7q!26$si1E!^4U z`r2YP^`h43`xJ`Qp&?P|WsnZG62_e^9~U)EAtJfIA%gjpdxx{6fN@gtJa8h}>MT#t zD@O;1z+`ZIkc^<-8#mK+Od#U3R{8f%>3C`olAAIWs277L5ibI! zzj(0Ec|6(J5UhaU@v;c%V7$9KzD{aIH_QNPRHi#*&fPL_AMWLy@mX|TYvQoMWBeSG zYv=hMaX?i_uDmEEBjU?QT7Q4~+Uh_&#xPdbGxd-+VnHXsC3fhqi-)Z(Ts1rTeKI%y zfKI3%*2CeiFZ@ps)J^n7r`o+2CGh<=*9*WXX= z?LgO%P<@Wc#}0`Ts$|JHmT2`9j7Z2w_)3y?oLR@*=Ee|=ox^GOLAqB%Q|T3@eEfU3 z3`j-o{ZaA7732O=984};X1j?=tgfvQ?5k_D8ys5E1Q$6tY~hSyQt7Lu>S%cRctuw% zyPT|$D-$U}1yOv_%MizyAUnZ`Oz1HWn4ih?UH~Ug^ng^Mf?Ufy0NNtZ{aAAHb=pb$ z;jTit`7$db%-L~;=|Om@CFQ?mwviyINf=uRlIVa231HVhunn-6jdeEh80h~iM``(! z?EO8%$xF4>vXoJ~H0nS81cwD5m}Ky{+~p|^6f5hV&zZBG^VW^L_fL53V2{}}>Bn?W z`zt;^x-jr2=ZKZf{Y3!^<`NX6&P=1BS`87{L1tPFmhL@U(zHK*BdbaRkTUk@B^zR} z{{p^_c)>oSCLw;`yt28{^uY)Z39qWMjTd@C^e~d2hMq+BNh@y@5+8yNGbvfrvuaO_yJcxoVg&<$Ct zm#;pms7Fdlw|XzasLTgc3L2)#;zV( z=NA}rU|?cF+#vRijG#ST8i`S*JI_IOTqj|ft#pUJvh#^wVaNWBg;g0~-@#`2 z`;k~EAJrrT^3$T8T`;0}PvN4l5O(3GOAhTm40G{w=c(R_@8RQ8UfYMI+y+)*DUY-Z zZha9h>T=~V3;#*$T98Q`|E>#m^_q3^d??^2v7J|i&O|+kg(QqZ^5z7`#jOtET zA_lZpOHOsxC8IZ)I)2Y^973OieRtSN{&lT%RajVSa@*9NyLiRilH4f~4G zUj3x)3yYPqv1;5lec`p)CZjjwKE~sU;%SY+2fxBD`oGvkciBb1+l1V|41*6Mv%B{T zfC!yeT^2~Qfghxr7sTRiPiaxP*6A*RYm}c7PffRK0PRjbcgdK^uvo|Cka%9AZ{Q~G@@QtRuv?tTtz4|bcEH-g_79Y%59>-2Q)e3EGT~Q{qCYT_D&=&N zo?jG*C5BVY`!O?{O+}{>AiW%s#-YY&w$Lk*d^8RcKb^6D00_I1lDya7F_Dx(zNDTE zZBi%Xv}0Wz$M4zSuY^|7fsypL=rUSb#De7u^EYM5wT-equ5R(Kq`Ray36N)Tht#t` zR3XBxB%8=ETCoAdT(r$r^%T9G_8t|e|D2m^1?T0)^5D9tgNtEa;ii+x?ykyl8d0JY zEG$*1v&G{>DMI7Dy-`})C-%sQOOrK&f;p(KUk5n1A8{s=stS&?Pb0X~Y(+4dcUA|r z6glgQ%G1{>4mlbD*Q4jd$b##PO5IDU^De zT;$b;d6yaDVlAFj4>pIGLb;s%eZ`kDV9)AcWOiV0^O~_7TN`WfePKp>%VUtEW#RW4 z09;!ijhHl~U-mp6C3=TdA!d{pvrd$<@y4$t&y`ItDG6NssT){rvcnJ3P=^U0K>D`b z%s1O`Ir&IJJtUt}>F^^5M}sSW{oqg{+@SY5iXMmE`+X3`Ra`6nHKFI>nkP}RHZYIx z^_(=~4vJrr^vpllUtE<{GX8B;pE#dh8VBu#x(ICvnVS{A2 zFB0|1*M&;{rKKbJni%A&oT%X$zzK-Ry^7)#j{_UU%i+#eCNR;=?pI>T@FnxM1Wbu* z`O_2m)Bg{7`7+P%*Wh2@B5wSHtiPZw$~XeyVThZT6;gzvd*L@HL02)EiXM}3_W{M5 zK~2Qn1BcCT2>+iZPEaVz@g48UiDkfd)>?u};hMVvqZiNYI#%+5q_)a`%Zar9xChD{ zsHDnZyp*}{!xjN`Si4!aPi3w!KTBz=2nFM!J#QZW^*x>YLJmf_f0ajgiHS(E#+)J! zY41s_=a*NQj_A;u(IGbT?4y+MRNGO398w`>&PH5w?iJ|bM+b5od%ZU;Zp0@+2mh_+ z3dNU$XFBxmt*;+Q53c+cZA*b1g4R;L?aw-+)Tq#9 zbpt{H2L~85?nbV1eM3)Ts22oR8zRTHF5@7^JC`=b}RBdU;bX~x0KD<(_uIy-;_U)-c` z#^o{WUC*;r2WHj*-}FrzQVmTSG}*vu!Q#LKzEd=XE`)c?XzSluP3e`x37*}Q!9L}? zUgo?0*ZAhA=}!Ma-BiDsT^bwoUL}c#*7z9|&%x2O!?+gn6HTo^gYWsl3WKL+N65{+ zhzFxFSwIex3+rp?F72Y^Ieb^ZBPm$eY<81mhg`26esAxdtDis0JQJ|Z)rzST(Jl5K zmqzKQbMEQ7u9d6Q&iW?OaxywRT3Xy`zNqndJDy_-mio)smw+(ZT31e%C3SQ-$+as` zd-ZZ9Xl8xITKk{2De_@3#IXNqOW~dY$7n4*KVugnGC#>Vmsn`SRl&bl@wEPT)^vl6 zOI;F3nWXe%5>*h~%3G0)s?p%ukq#Zb-rEKF6Tf0Oe`($p9g{BC8*g7f&$fYCnjp5E zFQBzAk(!S9QQ4V7(`Wm#^ z9&ed;ZR6!5>b!1@^IxIY{zM<9anTN6i}SYEysL6a;bL!Ghw;)?{o9rkumOB1Qt zcoY9@J!Ahy`NTgT2mJ<}UjB|QTaXrnJ;2x)7ensmwmQEEJuCYD0D?a3ii)tiyWx~`Rl`*wMSfD-l3nf9dM9jB!rxK32i2i^NCRBqV@Em`QZdvH;ZjW z(JmXcKi&yMnIQ*JfM9aZ7$iC!C20QuMsXnp%&TF3WaNG0Vno_>qnUGO(L%WH+Ha@cdzk&BBaXFVhMpNa za-;BlMuR7nDtg6-{maLU9#0v+1>c>=UtYQ|CuCCr1qEPa#&SkyEWa1$^5G)e+@-d* z*H(5#7uIjx(kYDLoB;1+ZKELhm@pvqkOZ+hI!yK-59goat)z`d6v72WtAG{zw$;EQ zr3|*1Tp(|a-yAc4l|Hhv#|}wvw|}6w+f(BCpU3z1esz-#gGI)O$_UDCa6`QpBtSs< z)xwnIW1SaQX&?$jjyXAVYQWZ*5?@AG+ueDlSP5{SpWlr%#pJ@jT&7ORZM-O$7CXG} z&`){ZoYk0;%N93L?b`-fYqk+!$59$efU_Pz=2xe|2io;|s9 zz^)uh?_AOBFZtzznIQMH|D0;ujKzr`jL+z!!{bYgzy$R~%p{T0?$kbL5J1OYUX!b? z7;|ND_#$p*JqvnzcW3u6r>Geo!WK8z_tvnNrPae@#aI&qxQDtR^X_f-zdNMCQ_RTY){qg+`m~SizApY!{?0T}?QK=Wtx6deH($Vu)Fv=N`C?*XZIes3FiH+BM zWvw)}uuv$3O-35_|EQ+Mv8gh@@+?oTLZGQ9YoEX{5Wz ztpC0HhtrHx!HGANa?orA0nvbx2?8Jkgeu#PWQ630YPvvrAT6qdjP@Wd^Z4Uq@%nqb z4a24Bi?1i6SaNHcm6>da53x25_@jm=*X*0}g)-=TkkqacRC>_lU=vmy^x`KA69P2~0Lx(}6Ks%j*olT>X`uuz+KOrNDTl;Yc%dE&Hp6Rdwk1&Q7g zd=#>BURXi>0+LRrE))U+lerdx)u+}i4LB-J*i`HWnK^$c1-1beJbm^krt0|`-*WNh zmnvEGu@aHe^wQ1%KTcj0u{q3G9wq>2rP~6flKUo3fl<;g(*P_*IexF%XS7N?QqAn* z_D))76th{Y5`mp-mABa+?D3&S`y4EOZRhJ8Ozk6HoT1Db?@q@6f-M{?0xtRZAX}x60dk zrwEduZWJvSnA`x~{_X6i>aC7*$up!nZQj;=Cqp&*lc#}be0qu}3FKr4RmWeqjxM2_ zY!~}~_F0ZJ@PD~K!^Tz<$eYM3{x}c7Pw}N+GmGMPE&OqI)XztoK=O`-l(i242wC4&lyUmSMV=|LsaZ9IGKwifGPlW3P_i(Q3`C`rwyag1Ue_wZObp}>hr*GO9D)M z2X3~@bbB?D)_`r&yQa<#{S7A2i96YV1;$*UVihE7g3^BvACgZzdBGa`z z3QiXH|0r1jxZ%e7TIwBD+KbBtLTb|(T(i}EDlVDoM91-`KlWIE$*Aw>?6K*_@AKek zm=>-ZIjn{$$~fsZT3ppfBFCjB<5+7ZU9>rd-50Bh+KgA>t&$I=mn3-CpWQWc9?X=; zeab*n14Gw>v$aqBx_YL+EOLA**WfKr?W{PUK`@7TnL z;#q;)P8nACOT6DemVb)7`L{q8-G->EjO9dqb5cZCgWLV$RIdBL7?*(f>cGsLEk$j8 zcQ^e57h*07*KlGoO(jK3QcRQ0-bcBkhNv5`OzB^#Y)z4sxnOy)~R0UYm2FE+^Nn!0}1n4B}MG1gIU@ypPh zl*!Quuhjsh%B1l?U2coiSgzC*Z%Epv@VY)1P5M)Xe+rsh#r#GmCq5CEv7NFQ@ridV ziD^^a*%q;+vTxo*edKN@;Wrj${NcaOpYvCWC*6dVmlnQAKH|r^zEJl{6rpKH(MI)g zWD;3cx(HlEMUDI@ttj(5#X2W7$20f|XRE^lknlAa!#}_R|Eao%GM;d=2MSRK!Gaj1 z&Ba$~X-%_g5Od!=MPQP$HwgW}l@lGsd;3o%R>hYLT1&JnwXqqnx(Sc&G_)K~c4l(sD`fHdQ_8 zDtYC`P7_pax>P9NQcjr3g#~8-mm?c`%CLetT;`6?I}TM`ra-*SGP{50JFsnBnd{2# z=JZA1-cxDkxFKQ^sbRRmB7=rm+{72P8`BS+di}F&95Xf_;g$eH*izJBhp=L;{OEc6 zfPZ_X2K#Cp%le8eA+gj-51!Q=(!NZ`*Y8&E?*rpLpEeJf$%#TQ1%z%jlzDFXvH6tPW0q&Z#5t%Agz*lQ6-zz{?PQFkFKk=v%ZKt;?gC&rB;bW*G+TGRY^a4JTkZcF5? zz1n9p^>0bDg4uaHJ}@nucXe5ww;2RK6L+1M zs>U-U`UbTX>zCAogzM{g`{Gi%`YpW%tKewkNwMmy%U)V=JRoM?_L^))>BdYmt|~Oa z9^m)dnPUdVgj|`9_Krxc^VnJVoX=<>gYP=f$V;D+y5ssIRDp}=J379)iyc*MRm9qO|A<;e z`_nDJZoto!oM)yL{&W037oftCfE+jRY&uiVQrgvEGs&DL`SDCgChzc!Qz`i#M*Dl6|n@%S$*s| z!wn!#$b#m*xgA58W;7GaZ2HnvbXGc~Qs2iVAf=5AK+2{gR%93`5C!Il%btUG=nb%_}q2|V`0TjDsz z7F~bpv*FT)nJ<3DZ0(dZYwI!Rs5dJNKO%2&FgeD~5~s42KHF*F!Hwm)U?Z+^1|G$0 zJl^8C=wHVo4IQ9YQ=5BJHAO18Hnc=yPLzcQro*Qdc#Kc30~Iuu$Jn*(l=2klP#;kF zWP1Nuk~Qfoot>B5m6_a?Uz5A?;|nj!n|r^>F5jx(=8rA>n*`9}OzOhFQGa&ACXhD7 z#m68ALaG`oAI!0GFMKMTty~38%V#;ISlO6R^AXJCuNJ~`K?iFp;NZE!uIZLrl;&24 zi+%-q;YSY7Q3bJLr*T>(x^^BRn*$u^l7VCsv61GTp($1jv=1-|f)AfPyf6IF6PJVG z{`vPTBq!EN5*K!;6kw$gyE4F215D=ulEhyXoO2aUNyx2@h}p|m_@q@BQdacFN}Q7} z8%hNs;cZjxFMJ5wpT4>g3681x6=JD#DoSZk;hIK_t4=$lB6)+J4O7^v2v{$f$2gDu zAl;9-+8_PV-TesSM1`eECI6F9lqFL@1AA{L(}gUjzI(l^yRroGk1}u&+QR2M5*g^>9q-+#0!_Og$Qr>ZhS4a7JVcBP20!6tja(=b3uO3&)R>1eu(Lk;Xb5Ran|?@D+x`(^F3sfuG!D z4=*%0w;z(2obexn*bfmh{m~nT6I>$y%MaW%!|3C9=p7!hFJU>f8n>nps$DMxf(MQm z*4UU^+VIpX%(X>)&+kKs@qa!Oj0jBAWHb_nld#e+>^DYWj?TqwTD2|y^1L(S2 zmv`6@SyypuMO3cBjpF9r?J@a3p_+NPk@TUh9ZE47g&^a4b>{0yQ-Fl6^_BJE%LMxJ%xoJ%cCxy-y=Rc} z64M_>GRU55OW#u$D`l!6LICvf)N6 z2P`UZ@L>j)h@Xd+GLx}dDgf8k<&1*IG;%hx>3&sw<)?N3`Xg+~ zs+w+QLYtI(zvD}hv7zQO0#}nr&@O5cv!Od=Ck8~tQg$3z$SB%&DSIdwdD&>`YTc_z zU6;C6YM&G5;xrytNXT{k69!zYt7&a@;gZna?n%rhQMG&y6LF>xo@vs=v#WkCqwLo-jpNWzsuAkDwbYyTf@?qE zkrk!d$$d;{UVAET2#kc4;MU5qU7Y!n7(lon(=t9QD7}BL+z@ZDc{E*JT#d|}EL{D> zFD(4;`h4A!G4&NZqyIB|^H-z!cc|&gVraXr6h*FjCU!G7TQ*@vt->iOsWA_Eq4hLk5KBu<-w@oBbs?h`~8<(PMbwvqkQ$|R{zRb}#kUd-I*pYQk1 zPT0N)X}IL#t`aWaOa3V%g~~9X7dyK@;*UldEl^mzL9+?SVRPi)VmDXy1vNR}Ej#`f zg4rt>1`d0W5snfPdjS(M4U$cIUTBI8EKwGDR2b>Ny7vgW8pn&c3J43Kb3D6;X6%8m zdqJAJ1h#d?_@Scb7NrheR0gYKOE1h5m(!dWmHD8CF;7q%^WRBa@J-hu!M!lYOv5>{H?ot42GH{mU#*^L&bnK5-W_< zBdI;5_Y4jW<7suXH;`U5qP3Ox`Ygd`fMB}FhEf_aVpprGFakQQaRnl2Pnc)63kIlY z93vloNlt(_;ABi-f(-fH?f$jW(3VBH!zr5*m{}VEt8eaZD_XbOb{m`8_G#k1LOrZ6 z3vO}7%_dvLNY5fFT)f6gI-gqU-ne&|Xk48A*>lgw_UMma$V zlYU>}yZcF5sEv=pNAqOt0t8?NjiGFz=WZ2%g@47&@X_AAz@xn?-bHgtjaUwNAet+1 z8PLU#7bCS@7$yrcQ2+zl2PhZ0%tinGDXb8fZ2{94=k<8CMILq4IsdC}+`ML6T1QHc z3`b0IYxBzS8i6S6Sn=upF^&hHmr`Pp836q|`ns?pHME-ao~tpmi6QVnET&EK`o@aD zK@_B@M$zoxWp_t^xy2|>)d?WA9O0PXmJU}EQgf}9RNjPJ zZSLCW4QYe56ak$$!LRU}{0x2Wb!rfQ2TlJ&3;)R@RT(%>xwZfx?*33eR4*E4P!poZ z!8;aS0=@983M)0QM*--5`SXITLQg|Vho@YswJrdr2;|m}5z{0$!wzG==AtE;-5o~n z6%--TO`COE5;{=o81JjXOs$mlBeGPYv1B%-7ve9gp_L`ZTL-HL?-1i-lWy}f4bN{_ zHdz-p!=%QlfgLCXH?||&L4z~}dBp6xzRjyoDMw$H^VGlp#1lB$?=vlm3fy(>$D1)}tOR&e&r-UhL zAAj%3Cw_V1AIZvz-uD4<%D?#_#}nC3TL+AiQ!Qhs41oeqk#Vl|`Nf-EAgCBjNy8LV zG|exlb4Ulwd8o2Gy^s^GWPD6Z&|!Vl{R*r(54?k(IiA}s+_Vxgoca)vz}3Nvz1lIp zC;~~EzwnT6d-|Crwq>>}|F6oJiJGmL3WNRqs8uMvDlv}#e|x)kEPtiC-8gC0CGWC6!f5QJ##H>!sPW1c8_T65k#(Yd7F`kthlHw->3CVBvT{K;v?W!OR_p%$!6rlVC|;a z-YgbqJa(f!1kVAa=hx*qH-srM(Q?bU0Jw&GCx<6|5HF?Qw^2!kOc) z>C^8zX>DtUPriY3^L?@mvIjGJ%_TjK$9(Cf-r@_d>pXquHNGVd65ShMZ@O@Xr~Pku z+U)K6F%=Xx^=#hOo%r^Em1DZs-2_r1{%8 z`Ep8rdEmJ7d)pK)8v%XquCLXwO3uIQ>8Dee!EHdRSIr2VWRLc;(WEdZV}i4N$FuE~ zBUZ@oUeiW}%n_B=m3qy`4(=_=Dm7VfO%Grmi)3XsFNLJ8B^{_$M1zwU{vvJ!JZU)V zul#L%WoL&V^W+PzToD!+&yGy>VSsYs)#w)I9J?J+-5cD<3G~g$RP6JzxPtMvl{MLB%-z+I8l^IlA_pVi~GZO zB`!RZ$Yx&RTAC%>oS7_^>PWvZ#BFFSxb&2y+`ZL3JVx%4ha}{E54WY?l=sg$zG9U% z4Z~lj=B|C5-2Ur)(dohdjZpq)VE&&5<9m-fq6oB+7S)> zok&leC5AfBkZXFPhs{n1{A&YzXS`g*GA}23r^#Ticj+i?Ve|z=9h^yYk`kx&BWLsW zR^pzgC$hLA_NjPsbr6$xN8XvwP>?CItO*=;zPX`+84Y0Y8VV#lhvALiPJ_U@WNIwS zvKR`o>TH&v2yA3rb%$Lq|x%W&M8Mssi??cuXgu06BG^?Zg%>+AGGl<;?wEwl5gEbe-`!o4TYm8xthO#RVWbmf+MASAZk{?3QD_fjj1p!KK45#5vG0Tt{kA31rTJ%tl*eyzKn*Unp`x2kKJky$aQ?jB zT%T=9+W#P@u5<$k?KlzjbSJzI-6Og~bs%b5pQ9qo6ZrLZD|YEVt2jtS);T4`OPZs#uUKs9wT6}O@xfo$WrImEpkZx?x-Po7!e zN*?~CjP79kB3rIw`0+}4qnZh~1_?hEaK@#Jni}<|!~{Ligsln@;bwL`vmy-Fn~KTa zj49H{(jbxzO`awHCG_vF9Y?!xCD-H9*@|B37shB*Jc$CRwx@)hCBx^LHVRN?2XK%g zwR~|(h_dq>uQV>a$2~Y7zp2e!NuG|zFkH}ON>vd04=Dz+T>6k1HUZ8kCl#fH>^6Jfm^l*eZ%dGi=PTWuLjyY!~vAys6H5 zwg0UtlHkU5n##TCKgu&X5k__{rYlOA{(`}`-eq}=i3lV0Hk%H2RsY~)8TZ4<=1~F+ z@u^u4N79`vo>nt4y9E8W=lP*`eQ1S7Z}3k7`YTJb=mm@VdVCzm{VDY?M|9t>Uif;s zHs2=C>*rKEB~uh+0>=VrLtE#RNp?-()S&2)z%n~vcd{FtRZDAtJmLAS@LPD_xD-wJ zI%R7?eQYiMro?sp0-}LnpkBRTa(f%cXLo?bB@I>9M^V$7%#^96-ZswWtUuCVx{*0A8UKyF@iTy? zUZ#JEbkT6`%tA<;)y)3zv^0e(UiL+zTQJE;m@%&ZZ37B>&(ID0JhoXcWmDAev8;JZ zH+Xye1-dcCQF--B6kAI~{^ux(Z*iZb51uS9>6U}(GxP?J)f>t7((Efewr2|?w%5O9 z_pj@%d_$LyuV45t^}zfkc@vc*5s2xM4jC6oB+YN*@G`#Z3g}g%Zj zIU#i6A_#iGpF1{4 zyq1Rgqja}Pof+=01ALqpYI?%XgsS5VQi|qj%*-7AF(E|HMYq)ujuJo zfeyzf=gx7Ea28hu#kiXSkyef(QWTWuctoi}qc>{2v`*+ieuv?I2g9$&K|jRP{->&s z>o3ZOXc&IA_?`f9P#LgZ6bd04_`=$%_zY9UD)VVsJ*~BP3GR3|yB}MkJL}HrIf?CT z*K!IyfL>4lEZZzBxwHU>OCYQBZ3aIVo!zAhpz9o$aV^#oy(^qy(T_+#(Q>l;{xWJZD; zz+=Rs!(f$jY*7hNTtF_7YKuYd>e_0ObugNvRmJp^(fYCq&oCACf0SaihvxQPr!Jpd zli*WUj+51WeaW_ZS4w9yxX3~}WkjKE){%q|2t+aU=Q z`M5uNmOhnKit%Xnp)|l)OCx>VOPGBag0PoNfa!RL%CSfvmBrdryz zrFqPRDmdV9Vg{VeDURU({_Nfz@qz3TV*5=Upi$(>qZ;QP z9q&E&!dvcB{S5E@o~NH-%Zm;v?AqGhzZN?NM*Z2{! zGQUJ3SKKgz(dXTNZf)?~v+Kk4{ryww0=bXy2QCr^1P0Z=E^NpJbt}`j^sl^?4x{1L znWuxbQj|w;JUqlBG&X{?5}^@`DPI@%(Orm z-k4vC^jIP&h1%hcr4RNblO)KrK z%_-Ih%X^0_{Y%GM?p(idEp_$$o+HUlmyQv|=h1%MV%Wa}q!=dkPzx!Ff)6opT!t>0 zIKE2-cC_LC2X}YLdsdPu%Zh`cAbP2@17CWo#~&$FPvfWF3pku@vi=^I1k3o*at};W zab1#;>SIJa8G4io1V=+0;tTj)Q45+hFzqGsw4ERG6qXvbTX{8K2EYQ zYY)k~O7uZ`V|K_uc4O2kAKJLqD0&WEnK1A_<%qK2k+>unaW@i)xqc3_RRkJ`#l!L% zIG*TabP;E8E;8f$yNcT(|fpll6OnkM=%*F3i= zBv+AX)Z#!rUN3k(IR#2A|9o zflJg(N#ebmQ$wzB@$nAEnIz7%I)j(=M1&h?NrWr5krN`1XZ??CXJ>?8t9z9{#rr2! zuXs9E>Do~T%)OwHxKJ8A#rZcKNf_0I%BBzv(%(14^5nAOo?aG+kag9v!NWgDHGxUH{j-_soT*H&EPT5DQy(Q8epdIXf6#l| z+-eNQ3Qu4KMfs`ClJ?j^oGjDq9KXdaQQR3K3-pf5ChE=}Pi(x>d2$6u#Pgd^n<^f? z;)H@xY(5G5*!=yLLG#IMKAWUa-rU1pHk6;&(-qEZr*!V&*1eB1Pr5k5J)8e7cfUO^ z+pY|XY?!D=BvvwSx(5rZC|AktImd9N?o;>92D>}H$iXM{ARg|>$F@~{gZO2Bnl^9U zH6lfca*g8{x{W780{8T*BQSlo7I|Ry~&MWsp}ZHci77ymltSX zh8KUO?n4mdJ4yJ@wj*`~I!rZ9gDcNOX_2N|4Jhb3Fva{7D%2g-F3m+*EC3CkUZ-}* zHwXYrL}*=*?a8lA z*&a}qPq;6ORvs8T@U%z&ASTch=IpF7N`TkdXbd8VaEqv(7LJLy6 zEf77PGbawi>^&dumeaAxId27z58&B;uXs!wmUdeoLZ^-+3jcfDV=#kPfduRKN3xI* zoWEW=JrBRWY}m0!rUw%OXcW{9kB|2JlC_vFEp0C;7fP!=6&?F@;nzA@S(I`p1!(GV z70v?mVEY}oBpr7+e*AVc0ueV~eC$@Qd5YoJ$ToRfY`Y43Wv?XNV4=V8>0(|#DCYH; zs8^SfmoKna3MBB>O7N6YPER^jwIpC$28&b6Q^t6{^t(?_>?x@mJvl+8#xz(0|F9=J zeRg2@NCsYr6RH~aP2v>c5clxIudU?qJuJj_<_%rCe(w9;x+&JuTcTrZCpl&OhM>Is zQobV+$5oUsGw5oZeuD4rGgUbynw;lLs%xybjO`ZD=!~?YuLnls{EwvF*UlHuOaJ4i z_wN4YU%WoOIRA<&Sb*GQ5czuaSBso7u$}D-(DV36`9&wEwxLC_Z=z%FBt^z<(ly?y zB+Kt`AI%MYSSr`AyuCjj1RNe-zwQdL+hiUC`H>g?E4_2FvV40lc?SBXCuhdx#Oa;j zwl{CICEMQGPMCi5=8TrLTD%rnr(O9?zsyH;%WRkTWu2}V;1H)tGg(WdWC{F`B3U|G zPctwcELAvv7hDX_&t|!sgYLGY(^Y7`ssYD$@PW|`7==kVyK-XJngjmW4JD&{sb&i_ z*EYWP>Q%y-8Wio<$oH%s%Qp)p^K5fA-QOGcF5B#Bs}K*ypK;#h%eY04Yj1k(Y7*se zJL;FexhlsB4smOlMh9zgFYoWAC9#Cdq@$fDtNZbrJDcnil@kn%$>5#9%iApAxRU)b zR3%-V!cWMvpqKw03LJ6R|5 zRVq!ifv}KAsm=M_p3Cc8_f?DPx?j7bvvO18_>8zv!#eDx&8=h8-0cpGAna3Hs$G$S z05YFj@*C(7drCp$M=s^qsEK;eWWXluC7?#PgwM%h2BU0qEF5|}J|I?ioU7mB${cCR z;>xc^LnM2pbIE8}<*ka3$<~%kCPypI2iyFKW7bFIyNPi-%{(L@|XBZ<5iN*nu3AB5H^8^HYAM(4|P-64hITG44K(#r)|KJi|90dW{Fcu^xp#lLzs525NS-9}B?z4$yaPm3n7R-^ zI+U+F_Uvhdk9NlK#?YmS?&unZ;kx7%1(0K2y8hzYhOTC8nn-bB6FfdHA71mePj>n5 zepzkR>cZPpF#o3yxNk)onzh(@#C9xJ7s!L}_S3B(bbF&zzU-unIZaCEEoCw^d4wv( zc^){^#_clASgY6V*docDpI}FsQcwCwN}SvxO@i=g1QpYpPa@snRC!ChqI6}}#@LiW z5^6^?41bcz*n4j#NaD3I8w634L6)MBd|tWJu~(8^V+`dcJBsIbdmsqXD;NgCf7Fa1fZa$o@mL;TiVazwTzV4Y9hpW`z)KuBbiYpI10-DN! z3{V1&JSuhOB;kg&0$v^MC`jqru`X~^Ig!+ka@J%y=>Z4bVBYT$xa5bV~$KVzX*Iao1OqbSI zO-GQyjUgpgF;yDcAO29*Uh_>R3y4GarQ?#=_SBgDF&Xce!{``c1|yF8Z+L0&495ed zMZ0t~O-JBs#qQ6qEBbdI-2UJw`5cqso05@86!5#@GNXm#PyD|Nzi2|$B5C})bjJJv zn9Z{7axvi1S+0iG!q+WMDysy4S>8udT+>&)KIzu4*4)XRwVHFH`GqE4j%$(01whY7 z4}pGuaZ+O*9w2>wa2dM~fREWlQ3_f9inV6F@Eu-RTudvU5hoDWdvBJsRLlZNQZin( z7(#xLtb#jm+)IgTnPU>BV0w+mM8L;fmz4FCM`&kv^jq+EMj)poLb7KGknD}dnWobE z)A@OiawU^iww6KWsDwNQ-YxgPGyAO4KKk!)=8Td=OIqYgGM!#T3_-&As85svyJCr% zNs2`vOusO~WpyJ?7A$LJ?dXWUpe*#{B!UK&(;?TBgtMl^XzWhD4b?qjrcZ@q?nVs| zi@J2=$;e4w)#q?X=^{tw^MDV z1_fmG5i*8|!32tx;?`x3LeFoq*8+n1UhABbIuW$8quQS(UoOtSW03^4B{G~zfCPQV zgU4D)lwTBTKBn}P2+s@#y?2o@- z1b2}ryU!8(;vd7=%$v77FkyyzvPtd{#mG*HFfZoj+FIC&JY z*lLe%*`pt~N0$~pRs8N-7rrYrVo`SiTfECAjgW~PF9tXN<&N}*wpDDuQp>X4#uIi) zV{Cr07hkMx7@}%u@*9MY6S16D_^P6-uF$w-b0|IFm9;Bdea?S@9c6qk!W=W0@}-hP z6`Ld3RSGLL7l{>ONu`Hnw407g{_r4L$Yj9aqg)Q5DfjN@@StF}gp^GfL6QJ|v^alN zEKDwz#zzwa2c?(ON|Z!rs5N)N#&Yk(jgoBEpZ&*)AJ7L)-6H>J2clUDX|7(f;*m-^ zZSnu(EnD_GZ8`v<5+pEq>-OzmP~HzL8Y>`r3OOkQ1b+T|gvlbs zkj1gtMrCiG(3-t&v8Pfq9ylBx9@-f21N|Yi>$=t2sBu{O`3SX%V|jdZ$&=ED*Lv&Q zvFl9HoutuO;`o!1p&4jNxHtyk1XZ|Q`u+D1J-*-aTI@}>x${D#;+bU6ddi&ykoNbS zwBL+#wog*&f68GSTS?u{&3yCi$`)`7{_Ra$)Hd?1n$wJ5VktEY52XAl?L(G&H1Bg?S7ISlLi9*6>7r&qrHhS-~hst7+ zqaL3>E98+~w4pL_UAFCf2aVRm=TaCxUSIi(_K&>_!)UJ`)FH%k2TYF1m{diwOWlI^ zOr{T^lTx?I==c(&hGTT`;E=w-5is7;PMXrLl2bIqmPq>(*-XdJxb7V~_1@M%>vuXM z^ku_HE1tecTCvAQs~g!cnY;df%4ht^g+slb-?H$B%?rQ_=UW23=4`Dhwr*FY*iPt0 z8nwVw+dM6FRWYb+07tZa^P4Cn=S?Arq524!nwpvI*2vV@-uEpn>F1_%P5Q}VK9_~e zXSdc=?u**4m_!KkJO*ay8tqs7FRh5pSl3YY4=EKk-~+}D>{?1j-iY9^vljc?nmbX$ z)e?wNC8uk8Ji@ACu5bcA%_}_6BSbD>_94YS)Od25NmHZ!zS`B^pX&30CK=HFSzNw+ zC2HlBOY!ff&Cc=h@Ev$@dfG@Em#EHbU|-ul$5*r8POt6l4s^sjpq(Bw2+cf*+Y>^AwZV6^9mMg%YLx*iKyUm{5ho^HuBB=iJ~s} z(H)}h-rh-xw~8iK+SHs<^CamU+U4YbvXRu?Dvw}CC4^tv#W%4_6PptOORO*o1*sKs z^bO9C%7dRVqK*_~VmW(a7j7wOmyOMGKeqZt{Za$7G0?*odq^84jjK+uBGO(=@tlr$;d-|FF z?9PWh6gQm&yX1k;NBUy!l@ooGRK8MIELvac{}Qdh2>K6B&(}G9Zm5_ zPXb0Sf4dT-7!+5pCeU*23Y**=X0x+1L9PD1!I#DFZHDMQSqp|EuW-xKU9fkFZBp?W zGAYPFS1m$ZlHsmjUc5|WPvz~>LQJM%lk~+BqQ#XMT#i)~Ufr-Yjb8$Ux8K?)(TQ*l!UbDRdv~ap^}& z0s0rWq-XWn$QI=#O~7I)4i68^3gx(e&2CRC3#8Bx-iEuK66&PNC>A z)`-t2rCHAXeW})9lnq?DQf`|xZQ>9sjjuHvgTiBH%kG!fDiM~S*HLoyU8p}iq;#T~ z0xQ-_?^1gI$Y$A%o)aC_U%mbZ`~se~_rzr(KoS{vI*ozjkcb&Z2tl7*oCHmM|1JAo zKLa5>&8~e1AgP8%G+y5dZ0zmp`1L=)uQM~@Hje$_h5xKc(x&f3K8`0Bc2k&kqIcPm zh~Nhd=3Bqg{SnB|q{frSh2{6ehB)RgauI^F%ZJLICya}`BPRPL?%$&8-1%E1CXZtY z#)v6K{cS62yhVwPrhSb~5_hXHT5GZ`2I-UAd;0iFSl5wmtD9R|m$pqSMZ`W;0bmg= z&~Q^*XcpM}E?=Sh@QEy>N^)?SnbI&K$ zSb6F-VT-fLikXDHr(c5+d?74t3gxIt|1cqZIis*75cF3vs+{9QngC}ue!O^bL^Shn zrwr6nr)xqI4K7^{p023Y+oiM3ws&>-h@6$({t}iz>f;3=WcWFSR&^aHJJkCf`i(+wGl&>++lm? za)w_%LdqB;rPvnZ?L2yIYueNS5@4PGt?;IFpDWdzmpDP#_%p3IlOyQ~*-shW#J|3m z>D3mUmm~#-oNMuv(2YSs{(oBijC$X!C3{ReZm+2kqMhc{k#k*eetn%xTo>ixZPO)7 z+aBDK*W_=y;&>%ZuaT4;q$r!n$CIhY^cta;$*sp+_vX#mJMteg@qx~i&>6^(?)Wm_ z_;lUv!83_k;t(|8ci^NR()bie3UU~-n~ zN)LE)`C{*cvcXCFIVtkn?>q>Ne36*#QUK5aXl{5q32htaom2XQ3yEx5MJ98&FGmc0 zzx>;FDj%km6o_O?B$LQ)%9LCAa_J^3n@c2fj2!;ZiKEjhP72K^LV1tJg$mKuc37aQ;T_h_fNvvYC2Yl`g2HChb@!EsBz z*}@sMtfjIbD-*_MrxZ!LXLL?v>g2L`kTiM@hYj4>mjns9B1;OO=~YHUtQ81+8PUG| z{iEZ}BT0vGu~VmU>)Gt&BtriDgxh!~g%8GKFln)F&YmlnC~AMt7Ovxw6!0DvU;P{M2sDR&Ae5PM9~LXz_1vW>;s2`u*-50gtF!x04pu zG%cdJ{PoeSU1hJsO>yuk8EVz*i8;5z)o+?+=>cRf#v# zmBEKnio_Bu2j82{Z&<#uB$Ob4w*Udta@+yZEz&z8WpqN=rzc1_+7>P8FRe)w!zQFn z9vmf>LDkKa9_|Wtz9NdeG(ts@6x!2pco=WT0bIQIYQ-C;pBg`#mYRF3ub>R2ynkiH z$4i$&G5b6AF~YAr<3S>OwQkx%n(Womw|e{x@eolChL=IWArAkFXcX|u2*|I7V@sHi zZ$5gJ`|a-~t%wSe(f~g9+c26mlI1l)hM@-QzH@$GdMrrxI(F1$xgq~pZpbPOJkP`Q zRZYuA;$p-_j{6~3h>pWX-)bqnwb`SC)raBtDYXohTh&kq`-t6KCh}hPdI9F5Dbo&U z?7vA1dO?tu`xOsqU@Bla5W9h}Tr}rIlt&r3Na)?3v~KyOk-nJXk3c-hWQHuH=3GzbUhc6xoUVI$8x&VsD@An=Msu;Xv?cF*0!cP zA73U2P(5E_I6gRtC$_)3&yR=+Li6C4OHR>WKu3K-olQ7UYUOeerJW4U#g#EJ7e$(jrW!f zJGau=SBz@NK`I@QR|G3{5<*wr4ZWC^ffKHZ4AmTvse|8tm7bmuP3+aVCz%J!3fow5 zZLqClt7%o=ljxOkfGDfGydH(8(ePE6p^YxQ<1dswx>8jDAua5V4I$)vT#+6g>bs4W zab_i^-@hSxvTt4HH9VjYWigu8U?(meev*_^` z7aG(gtAryq-LbThkxu&7@Q)>~07uG6NIujd{_s!P;Lq_r|2cVs@jf^H+!FnxpVuzU z=Eo#T-#f2&%KE;WkIzeKx4EP8$4oCpV6P-e&fj@t!xw?$OsT?cK5Ni&%lr4dbrN)W zi9xtXrR|`6_=%3b!mi+ZxcWhpG%)e`mmM;2n?T3yVya-S&ByRycSOth2$ z4RamoEYQ=aY(s)m-biESyh!~f-HuY`1>c7aI~<%`)v}m7WMeg*tJ82fjvQNEI7Jq* zx3;#2ACT@J<#aM-+f9>Dl?V|GA??8tYfK`P&Ktd@%```LGwCAXBO}-+}o95zF3c!YLe8q338PGx&muH(>ytPu`uqKb= zYIX3O+huKVueXIAL7NUAfI1$YpZEKxC!&J7Zl9eN0^`@AT)rsJuu?cMo5oMp_`&}r ze)4V|`u;F(^4G#oSk1_cY<{`|)c94rfl1IAi&~*(RDhyfar*MjF$Wm^<$pnAmSK#I zU?%(C&JV1d62qggLiZ@|dUqI9xN|co%2!b5bz&&N!+D@%+yvI6sVn7G!l82Ij}a2G z7Sk1iim4nSZ4J^b%HAU>VrvK;Wo}m@OICk2PD}^i@T>Kd|Ddv9X>G&)Du9f}rWVHg ziDELoPC3w*QA57i_&X?*NScmn^MHu8X2X^6-zc*~RrNA$#WRd1(qAAtkoY?Frc8+G z=H{&@L;AAlF`%<+>BmP;aVL`&xZYOjx}sND$Y@EWRH-^P!RwM43r% zMEMf@#ud|6NUi0rj}qG+-3=mB`dq!J9l-$ z{%3f};zsSy4*eCW6QN>%rCG7iENQI}b00XYg@DSg^h#bhCF=AzonHchcv9tWq(2hb zRh~YLmGbg~XoYtq>a@HrGbh#u9Do!KPeL3XQa2LLq~vc6rz}wPTZ^}DXJ@P>?BIvp zfNJX|te?T-Pk1I~WNeFrLj)P^XeVA_U`FSYw;ZP161z6WP|h2ye~~7}?zD6xAs`7v zPo{mcAKwx9_4R;wTt&*V!pG= zr60*)7sr`9Cw<3|!aQ8t7;*@xH&CiEN8Y$F_KeP7L~cyF|~r;ZC%>l?>YU zXLyN$uhrVh`bPTgyI9C{aUMM%z#`5!o{NFkyK&*}4j8^h7@%d(EsMd8Zrx&$TtA&| z8b3oD;(fBJ9osrHYao;|B@ zOkQ5}Biamb^$prF8xy-Sq;8<=XPyt$hvQuyqcqXs2#vl~iYoN7&s;#rqI$uM<@Nqk z`~UBhum5E{;2X$~nuOfgc2VvTZ~p@*6!S0YT{LfhLE$_cfDIZG@%}Cr61P=@OY4i> zw)r+3?KrfNpXt&(7p1Kf`{)o>t>)tP4dn}gtfS6*NC1_B+U0N0gN5^|M)0`vqdctX zrNJnpQ+~}n4lwAw<>b_A4lc=swB(!#stDD^VWz`Nm&61FUw66F^oh&oyW5-xuY{{8 zOd{M#@k^I7+ZK9?R78&W4aJu;!=xst8f|TUjvb2@m1E}9_!?u>w4?_dI0}zx>oc)+ zbWA80s>WixAf{_pVgp9AyTHoR$QRS2H#|IwqXKowBYaO719aHAzMvlGp2zP_?|)6K zA9fVpM2g5+LQnhV~I<`#X_jG_1hxy5gqhU(Ws z`d?kb@9~PoNc`v&b}E?>0*#NF-iVnTXbZR@FG4>iO+)O_qxFp|bP`-PENU!5kp4S0Y1Um$Ik8kdLwMTSyo6IjpaqQ)w){Q;u086Uwd$7Ehrbs-4 zHacZwlz(NH-IOe?9aNalpRNKD@@BfISYuQ64wtm#0T~@8TrZo{RzA)Ygd~ul1;tNh zm}xe;)I~wPKKEI&p49AaZb}QCrEXIE;p7DK5KC^Ah~9=}gVhxT+UZ2Xc%e~A!O4FP(Hv;*VL&grVqYh@w*@HlLbr?ta!4o=G1OO;S~;ZE(B=^OL0sOqyW#7 zayslCUm9-jsXJFLB;ye^WKDsbSVIE(Tq&}rqSu|Ph(nO1am0I`c!Po#SW8cM|El%$ zN5Z3!#+VuEE$NnVWej`oIX(i0P&V0LvR#~vrhu8h4^o^?}btQ~xJeIH`O8=5 z)SWbx&4pVT+0c;MSeS`1@7^? zx*ns6#|8RAP^DLcONK#?W?RBN%rKS>F&7dV1=s&HEDbJ>*47R42>+Z+Ozl2Wk=DQ0 zROi)un&^sotDZ|HgY%-HM6JopWGH@z$J2jr%%kIraU~g+?Cf{>@+l%d`%Q zqkF_PM+%|Hk07My8GHN*jvuaj{XFBoen0Y8GtLZEWgXnF-iF!ZU?@|zBt8Qp(A{sCa=V;zdwypk z(OZscjL<{Cl8|B^y$cf*7X!cZZ&+DB5y)GrehW#W6qbz&dDCEu<&9Zm=_r=Q+jf2b zGPJ`QG?w-DGxa8IiTI9w#0r>DJavBlZ4vg&p|SQ7V-#5oi6w12++c z6JlcS#EZPT@zKkdp@Awq!%jSf%#8pqT6iM%bTLgM;DOLnhLv9wZmKdk#Kwk9BZpS< zSN+|4n#!i*qSysT@~Ho!?_|tN@aH)ArVLR3P;!DTq*ZrNX296|_p z_`6HbVokz$iGGh1v0rl`0i84@ccU~6?pB;Zk0$^wMn#yPo#i{9U)Nhny92dzw81dz zSJKNMQm*0)D{Qu3t=WxNOyBsBOs{WV`2K|-X8Zpw9pZnbcdhq$&?ur9dRJg5SSd=Q zDqKWO0OGp$+rS>+VU!gxuz zD%}av1qGYLeL|s1$mCBHI+z^oKYnYuazn|hD07@Q>9574ST<72AC;wgUqKhYv!n(p z+FtA)^@mt}f)nG(r;aC#18gj3Cp)LVul{~EIk|H`LhmM(0I|(SaCue%H|Xar z&V*EOTusF^kKpwT6l0)9WEX4PJ#d}g(sn{L)G2vaD@$;^a@(CWDin4t)3m?ATeZJK zkr+(OJg1{_!kG*fVee@Mvri{|UDS@ZukGacBIvkdBU=f9c)yoY!`&9kheS)_g6Y3v z*Pao_bOh1E@`TYAh6+Ueaj`MEK{xPvBhHcJ7qPN&kVF)-8pHk$Es}OAi)D{#gdX(N zv7WxxI?qGNew%L`?w>}}R774@%R+sXE`7DUy2I(|iLIIPI@^5mS{@*2T++|vaGlT( z{-K(LZ;-?Fy&Y!gDu@DeKrJJyecVa;06jk~JtIfh8cs`+EM8hHw^>PI zbKn`i9vR4o>O_LkldCS>#g^{hOZf%_j5^Ev> z{J~?lq&))}O+e;wrpw@ok?g(4qpqhrj&K5EBgXXBO$JCHA42pG_xOn-pDi|KdT=Q# z%UfZqARgI?Np>x~hz3aTm-C(k9new*Hu<4sIYt{vbe91mAt1saW+zeaGbNCFT%bH= zhSOX9t5>9Wrt{G13ZjeBa_M*?WtrMN%g6H_eL7vj8|B*`rUT?q1SJwclZQlgBpR^j zvympZU?4Nud#i_3NS+<;_p)zqu@QcrjqrPQ&it_M+27YZ=p|pR^j_nPWNi`B+tKgx zQ#^@pG;1yoD_lk#C7y{S-4qHOk|WR4#wy$i-^o?qoh9=1f=d2Gs$`LjEVJ(Wha6zSNJIT}j6kccl=fa$oEadW zMHzjyF_%G4lakrN_r=nZE`_(H!d&(_*_q8_a~!9TJIE4yNpVUxIev3BtkLd|Ks(F3 zR(?gSr2m*UtUjPcMkfDc=(D=Mscw^>rG!}oB6c7lOD)|-{7;@yuteijkLkF?;o*zP zEz(Tb+Mu|ZOD4nrNJ$Z$v-yR`^`-QJa(#9alc@nz=Z;9Gg*Ns^+CTjBp8KdkU zLfBHCAT zv-s$+hUsMEtN2Q&@1<-3r=YtSKM4^3e2nA-{%}3sTij6Cmn@M??tRa0I<6z*!lV3+ zSC-yNKb($lBwAeluNGJREY;KBf;)VFi^ii;WA|tn4Ze}7h*yX}nEGin-D{cK;ThOL zFcHcH6|w*Po~t-C|Go+lyB#FFkMGp!{&N1wq;ww;D8k>tUEr$lu^Xeo|D`S!&OAy` z=FEoE<|+N1Sg}f{gQGZQXucGKmCCRkr%Q8ONtcyDM~Eg`MICZPyi%eS7=$bhszUNA zFc^EuL}h7Mlgv`Kztc0qTHC=kFDl0}+d0?_1S1zR6%n%plhJOnde912CV(f?-IT=d zp(!%89d~saMw-t)q*6T7l9J*n3t*g$9`zs zlnZvGgOYPTJUU9kDPm8)iuw~2MGt3XW*q>+g=DLF{>ieZnQn8FTO#>P!z|zVZrg|1T{wi%E*lGxh1F9k>&4cg+S*uuUq0d2OCZI>F1=%mB(`n5wxTseCB z?Zf^ba3Re2V1JE-HbqNcZM|86WVj@C+Gkn%!Nhm(>mm2c>QR1HRO!R>Z(nSzQ2+4z z6|ix|=39f-dLxSxQCW;MEluaFGwT#yS`5@t^Q$qn?TN9oo38XotSRiZwub9{?eYqZ z8ZLRqz?>klDC*Ox9{wL2wZl@12|sdD(7?HLC8}2C8IZ!#s$e}AHS=?Ado%MwAlWey!QAZlg&^38+PMg(#P)ib~GvYH61d@>X=enU5i;9&gyqDd}KSHjCVR)Y@7aa8N)42 z6)75HOY!G8glj1!6#xjNzhQIDvW#bIQXFQB`x?C`XOqp9{YwEKpPy-CGyAOmaKBod z#DkS)=sP=!kYLs6fgL0>X5e;vb3EJ^#f|6LOm`~l@XgQMmKl2G`WbC72(Y~U3vEpl}+uX)@eSE5}$*;7R$S1GRXZIL2qu~)6zc)YQ(y-gy@*dA|4lJf|_ zkzTcS{JPxT9Z-pRdF|9GgKJ8JtM7NOe;QbaKT$g?(N>k4OH^c2ocA z)iUekP~q7QABd3S>s4%E`f5h1s=v`xXKQO?E1Tl0osSA}Rch3m#SM=pB|NoR5lw?3 zNisAwXEI6`w{{)Uo@X+;MujX)?}=akb98u(IeE(&B>EWUgQ5m5}3 zcj-?}lBX+!6}P}p-8>?-*f=fb@#wlYWH-O--DF(e`&Rh|oOjh2^^G*T%)mMo|yp0ITL!rH~Luo0fRw_CM-e+l&4v+0-E)2{IjbFA9^*FzA+?LZ?T=hmD^DpFkus*V z@(SR8wzSDaASJEsVBrQH{=eYiAE*h0S>1cIn#e4Beo{%Pwb()KGmK!BpUpUKDo3qk z0PG;k-;9}Yb6IyH%_T#MbhPbWh6!~qyXc{NNlc6ee9wA!A(r!t&r3_C((`x#hNl;> z+rK!$QS@f22FDn)kf)AJ@_Yv8XTFuSQAZ-L6weWO6%kIp2bbif(mk(Ut(H$X#x^s3 z&^v!jV5R>K>}a+;wvx@j`YE)F^5J&a54zK3z&_eje4Js^8lu>1D->V1yK*&0o(LX? zwP;2p(*#*1k@BId6%Fs_%82@o587@5H%y-4l5E4l;5~i;i*rE}*XBSOl+7}D&^KXG zH}bE2C}AyD*LLU831p=T{(pqsd6cbtS{L@(^R8jT`u!S z=ktAjd)GPlLa*HFzPD=ccfaqu-)H(hGXgY5p2ZJtM?jD(r^j-MKhHfJJavZ zUgszo!UxD&;vh~#)*ZPCw6JO5QgiOs=c~BK9-R>v& z5ke3S_C58`8Su9TrKsNvMi0ScCFd>YVS$0oY7h3GWCoSMMZmYMU^{;n&LkkEM zF`aI2T)*V^pI%cWZXj-&MLbFij272ag`b>z)G_!7l_?@hC`QASVGaj1oG5XP`_IGz z+#xDLdA%j&62ZzuZ0R6-Wyr>kUix3+Grmz5(06(M^Z6n#zHlwmZKF*hC=Kt|K$l@f zNK=~|Ntua6SzMKIfrV{6Zq!e#!S?(Vv9ohJ%;v*X)m=S$!V}RdLi+EIEo7F8=r?sg z)d1<)Y;AghXwydVjz){?2A+A`F$XaaYn#tS<~M$*cPOY5Hty7D(ajA7PRXvCqD;2v zGljS`^v-V9YdTp+qgFa;{|=?xGnOQaGc|RP242()ruc!+y*szPsmo8h*RpX}3`c*s zyQkvYLuVlL?7lz%VvPNR!X!gYtn8HCijwBN>EPmmjCIe?voK?L^NcNag*0Pp*sI>z z%pd*K!mpskvbxCE&+Kti<{nA2u#Hz$yQyB9$5WcFno%ffXc%VB(=0c=$k3uYkIIy% zz4BLy!vkk-pKF(B+AC-I&W;JA`C7`qJy<3=+9B;OuaP>zkDM=}K>hd!k1JmrbZs~N z!~Cjhbx+8ndL{HGF6*`try~(jJB&4&u5Ap|L@Ja|m_#*dO|bvkWKEOP^KZ*J_|yDc zZE&Nz9_@n%qh|X*DkER>2Xlxv|7>i!K?wvb< z6qlFQr`fE#cyUgL!A0W)H?YaN+H`evCudQM# zDR;JkUCw%e9LFpe3?t^i%&@DPmK6Xg2;*dS{-EP|7F7wPc5eu(NiHSlCBZb^-{0B{ zKEl!hVUwNhqZ9tgb3W5MI@%{^z1{8OlzzqCV&L*kc;wrw8?b+OI=;M(Hg|8Uf1hSb zze3{aiYYaY(}-uvrSrz5(_71*{(l$#y`7k+>W6DWKy=HMt^quGVoy>njVg?OG}H~Ab;kA^5dFEx`XJl&Bc?F%C*tBe;98?KSC^gH3*EEsF9hcbR;l(#6zEG$sq3O7y z(JHYV;rs^~@2q}BUm#tVfruK1WEw&u8Gxvj15E3$-#%Rx(UgXX9A%`R@;3zwsoKng z%U)r%CXQU6ERM`>O%blXzs~o#PH$7&xu~>~JzfU)Q2h#UI~cs?rM{tA!emgFks?#Q zsMK159;wmjZ&{-iP`tSKy4Md_4-$utY#WtVL|Z4f+F&kAp4b>)WNl3}7VM?#O-ss} zZ9|u`0B%ONf&SzFsQ>t{sr^2bdH%q{AB$wgEY#eMW&o%y4l=PKKbiH1YEgikks1jw z3s#nP^YBBoNSh-fVUNNHq3kR4Up~{=p;@5<1EOFvvlBv=KayXb0t4SD$Vh5Ju5RZy z@kC=iJ&95OC7g>!w9R1fA}P#xsquQ2IfAt&ho(e8)Cu{dxPqo21$FvAWEBfrO@`Pf z1}fPNO{V&~0u!PWCBa-QyO~Y?tH?1+rDC?H1+;&7%*a^J)MKCwA0THUnR;0J8aaFl z(7u7muHR6xg5D%c_H41gX*Y=FcKG{T47oG7d2`S?K0dpNxWNy(DoacLnKHOW2(8x1 z+>S7IFD|+r1D2M~&-stOiE5kOEh0=uuA}8I+l%x9YxVY;PFBJd!AdPjrHwA15U7+H z+6HEaRwW@QFdLYfBT4A1DfbG?^#nm&JVA0Lg=O-d5HHnnmlwY$(~~8QR5mkTjF@Vk z&DE))rzvgpz0>>GCfDbY_dE9u3Ftd;Hlk75@DId_X%sC$A^BoZ;|8Wy+>>o6o{#?} zWAF3C!I*1fY>C^pHX6Y0$LYDH;k({L02I?XER2*CefR9zQO~|63ty4E~6TZ z>aV&|m9wd=gbXw!NKI7|%PUnWgzzRG%umGHdFj#1xKlsiNk$)XY(j)iN+lq()z0aS z9@t$06TsW53~@R;qI6O_Aghf+-ae=GYo}AOloVYkZbXp@Kem?P7VL{Z=+m&gk1bo9 zDtH`SxqoP{qbB*ki^`FsBnq<)G9FMOx5n7)$PDjH-|mIZdsDt{P!e(JkEY_0VWbog zZLz`04ENJrj5PjA;=&(>|4rBF%H@^w%e;P@lQ&t_=t24<^aRQlGdbPYcjqeHIecZ~ z_GYn}sr`808>$hH8O)>UJk(N@#D?AT9P{QD5r`bkwOx~lV3E0k6Mm0#l}h!3=;Y7G zpV-8P=yR3=Ecs;?sR_ZnRxzQ=iWvO9e9ipBLkxHC?yIfR|Cmmr7Jjc`=$2Rt>k2vs zm(_u$UL#uK*D-d#p2zAWYC}dqo>hWcXVuRrhRQ<>mQIbI%8|h7MfqPMB0Rxzruq7h zqqqTM4$Za!o^-C<-Pyz`&dqUC!IHoLr7gDq;)6)ii_cNpO3ycfRf(P`5|ir`nOnz4 zVy@u!Rj;fJ@7&Edyu7utp=v=XfR=@6c^>K^GCSFf9rCsR>0eN5{4**wTjyGZV1ST$ z4)&D8Un1rSj`Ve)0Rmps(@kt<7Rf2ONNn6;UPYKI%Ozr5lx`zcLzlT{H4h*AOw+4* z^A+)loT=@XtKfrkXGO-N4_@A;{nmkskj2m;U>podv6+9zIr3O2HC9gJ8fVp`K0Xf7 zt5HRiM)jLATrZ?9L=~f_sQ_fuxpspvX>c=EP??+P(B|euX}E=FYz#0+Nh~H(mZ21rD>I64R$1$~|ps1QB$$6@t?dY4$EClunXJ-X|0F zc1t8GC^@nkS@y0OWi&n{Oiu2#T`)is$XgbD4R_ZRfsb6f*aALIcvW4YOrVD z?&@FSGymkm+hETRH3XB8n~I|*pL204s4*)`YN4bEP?7jb`OP8AOhfL@H6!oZfof@= za^fP^O=dHony4fA6A1IlfORnsZusHyp-kF_RRDDf1JYsd-l8f4NN<0eyi_;?T+zfS zjFV{Ha@BqT5JWVY_I&$J|3Zq5z%H%)AOlHI5GW`{g>5QzJByo)qE1vy(qbJVb9VfZ zWP7DMo4CjDlfMIhj5pOm_J-PdU=s8Bco+ zxXk0CDP&R#J+|?e*~Y(Z7xYKW#F=?|4QfQBYISIXEfg;ONM%-@$07AsUMZ2A$!w$L zJig7FBa7vM)Nq8)Ox0HeNUE`{g{hh@hy|T#-(Z`+MC5!&JPZjgsVt54^q3NU&J=R{iJcXhqx&evve`PsNxXMvG(%m4Xz0ZsHCiClom;`n z8Egqu6{MtvXQ1aZdW!SulTUf{37<7?sncEjm7akC^c~RG+fv1gZW*OJ*xo!nlg7{k zSfO88 zRM~cS)VxFZNqB4J{8p6hy<1BH*j%7QyqE%khRh?g(;`Jy%{lDx4S&h(fdA1f@h@v~ z2=7Fz&V>$63E4{KP9vG1qc<}frXidwW%w{zr8(m9Ydz`;r-Wjn?|Jt#3t}wwm41Cn z5QnkJ7e4xw9R8s1gjx#9{WDqKQ`-m<7!P3kbj)G$R2;>m@H}x}HvMqGBMH@Jy`jvX zMr6LU+=!B77Os*1Q!$=xq58RoC6BRaXc)gEDt0D@sxSv}R(jb+*V)=m5UBTeT|ge2 zcJ`W9Q3Z!E(dN-nR6MgD12{-M!C>*FmtwpJy?0=@=nkD^3DhsMu&FiNSnEB=+X69z z;pQ_XhNUQ&-&kB8BOPRtVM3h5(Dl0KXX#GFTW2@qzl3hoZ!M>%lOK{f$^XfGz`v>| z>rBk~y{gt`G3TOdP*HwTF2pm;&y~T1q>vuvb{;pJ8xBB_#GL)i`2cu&wat9B<8PIN zlNSRu9~D)@F!f6D(&fcpq$sC`Z3&cgMQc?rw zLl8xe7K#s*GW86H!X^fZtQr(y>+JMnG~-~vWlhT`G7w?)Q(M`>i<9~^^Jqww^!fa9 z?1<-9*Q~nfiVHf0K9!zQ!!Fu+_VZB_<)U!KtxLy(#lNOPZ5p}e zd^8~p)x}6(?M+@rJTLyqLZUW?z>m9whb&G^qX&>lTZ|(#)4fpjOxQf6QFlKm$x~Qk zhoT8}6ye=P45uiwyYjWGYbF5Eoupy-BrTkVWH$=*Bz3&d8kFTX$-`$xo=ZZo@Fv}9B zV{!?MMgXh(EvgogwgijZ|rLl);U#)Ty-l8h+mfqzqI3@lE|E5u4nO)6Ck%0i%DB16{-zTj$vOAl~cYnoZe20Dp(5+g2Z=P z3?Yd%gw)C^pkfTeUWzdjifwHfd;8zs>F?;Ir(iQ~K|DyAB@I}Sgv`J8gy(We_et1! zFZqc~^%IPHea^N8Jn>bTFAN|OJAM|=jZ;s>GXa`5n8`mZajsQ6nG!ST)+plW`gkU? z*#dT|(MaNGKXqZz*zso6Hb#F~`?xq-j#A+fcWd*pq;amQ7K*YSCRVRt71# zyno3r`Dy!UKU({8B1ol0BbKue%?PbRvH4?dK*%GG-b68>Y!BS=(WtGHo zv=csx$*ppb(bM|&GllD(5crkkt!P5%`$NVpc>(}wVkHWLCM$`F8e$^-Wc-=R_=K>{ zS>sEr?aFj-a?&C=X2=KWDQT<9BSW%kzg==6iUM@RboyUuMn(1*6}1z^OMEFhm_kI& z5W8|w8*9nU3Zw?ymcy$yWUC$JxX2d%}eTvca<8}{ux-~I#P z52b1p0*|DhU`G~GWMZHkfFOB-6Qlmpl#L9u%@+~yN`gkKj^G~Hkl-;_x^we9Z=T)A z_C$LRagGQx?qB4&Gpapt*ni1?`FrB9U!=wpwryMCAI;=B1V2NxMr7p06(OWoXS4{# zMPauiX!UjsY^&X$9T7(Ip{wQ=FZ=UJ)F_tx-uqzj@o6o zmY7ysuHnPX<@5|>L6Rnn69?evwv=8}izPQyVE4O^Pf}jR z84(mnZBS;E^ESjQYE)y)bZ~^ z9R%?Yp28>m&V-PY_{?tGxf#$%3~38JtVE7YChg$F2+Zj)+k@9s2)R*pkfG~*(QEM`p4mpFcx~18ENJjV_=EX9ABTyk!c0- zGuwPB7xyN$F3irwD>-DhIIUfb&iPdw(k^h}RI^;TJNZt17{pT6j3(@7mIMoI|5z;@ z>uVI;9+;(8wDp}0R~7K*tG*}AmRAgSO)0-*`7N+a@B@Aye>qwL-gDPW z)d(S1Hj|2<;DBl9H=Y>oJQr%#G{vcKT7AA+I@B-$BY+G&tub49G7M#>nsw8 z99eIRfsqq(>5snj+BJ&c%K-vG$G4BHZj+{1?B2#A3B-oQC#NhuTeaBT^B00UO>jbs zb%_C~!CF*TF;Ldv4d9?B64D)?oqA45R4y;=G!HCuF}Cc1{?}$ezs;h)K9$XxMjF8x5X|*XZu50qk#`P+`$V*}ssY)M(6b zIGg2|!B)!RO&&Wt_pLe?HyXPnpQF{>M;B`LmT7Dv2-zqcc1_Dk%_HQwI)7k)#V z13%*uiXi=hMV6q2D&$T?ke+^d7Eb-*^GGzT)JtiIm>dElD%UeeA?4266J{nh_)tsd{lE+%PV3K6_H zxLC2oK~M`G@PruM%{7r34kB-TbRpB1zIu`5{vYl1-sm*dcV_1b>Va!kmS)(mhv`EY zX}q0TeTr8A_I>m5POl5IzaO?Au6nSL2;+wK)PC|*_wMCN4&7F3LD|a|cD~A)2N}{C zvbf_6Z61#$kB~LCV;mjKe^17dTJ!%zhER3L2#k$c*|ll(ZoG()@8945>P1S8P7f$&KP{e-r!P&t2OeT|0e17B^f zfnMa8P~qxLrN%lYQ!ki`rL#kZyUUL zAcj@+Mwu6R@1D0hcW!shIO#3kVtmXLQQEe$r{bTFI3m+6cXiu#jyKCI|AvK+E&O+L z?cW4Bu7c*w((#1^X8w4QE~efOnze{cz#^Y;mLrMal2RzK0l(7W@jT$WqIi+8ir@-q zw#oya5|V9em+wr+>b6U!PRux;-*eNdY;sX9LBSX^w73J)V;xdO&de( zu|djEXKT-A-r{vFqA{wY4@Ka`ZxTKWs2JT-`Rn|d-Z;=y#Do?*rQ822fJK|?v_q8Z1T*riiwgG zzbAm6@y_F=yX=7JYLpT>KbxT;=}w(Yj8*JsR2oAOSUfG$cB~?~-@nFNqU!0l3c!ay z)YS21-QCLKd1XiJ8m#OJ+ak?r3&~_EI13TAxKOLBON{T|it+tT`yt*5u|-BJCke%ZH$98ao0S<}OBn1d=A3#oiZ301QE1Zd1YCb4Z25WQ&+XS6G0OkNAt;Qx}!Q@GTk`r z+G&efNYfG#ZvPB>7shm(%?hwt1(~@lD%hzU6hsF$`Wx-qaNdLlt1@qD#k&*R>jIAy z579K%u5t842r|PZIqt6dyp)`LSTV>gdd0m2G9+anJGa}FsmcvmWgX2j)o)4y#ILgM93KiO>ZuQ?8SJRK z#jc&zajL_sn?l9rD)|_4a?K~1Qdab5n!A)vuoq)Fv|pA(`w4S;Z=2ZhwuLV-xAnWl z9l{|61w8fGT(J1`W)zImnG6N-4CBTcQ6Pf#&d1Hf37c30r5Om+R#6 z08tbdm*KA&E7B^X8S90^nz!;Qy%LksMpgZqjFa;@>nDn~b}#tm@*$+tvkQ(x??uty z+bnSug?dTF&$>~1o%_6V%GyJxXx_G?GMs&mT86|19aUxiSx7#w(QSd3K`>RrlvLiD=&u) zwzbsCs7cIZzi=R);Y(rwH^S(!KJlVP;Ex;b_a5?3bQAJSQY#<|MK$$CcX^%oM!>9Z z`}zJcTpPu*92vFJ$5aocWIFqJmf__^6nV-(HCZH%46s%u0%&ISUvj(vA z2X_)pq|cnfY&(gcl^>Z-Ab(vZ>N3@=r6?!!K>3VLhWH?@Z)Ai4wh^+FImk#O!1OQ; z?%n@J%90LSOh0YTz<_p_julXGXj2VJdkscbcH1qqj{zN%sZ(dCOP{9&+G&Q@y9bJ^ z#xEEGj`i&^S3o05ieoUId$&TztToAD-bDC6QLnI57;je(#y|k&*1dQl_wJ-14%@}Y z-P+n%Rg**P>;PTKFv|XN;$6uPe@cG%r|6$=UiceVm}O=>9wo2DBiW$@Le^$*LWie* z^G-rxGrvXa*W)5PI_~DzIo>UH3fJH+|4#E<%>W&idMhpCWlZD*Phy}I0nN)fe#RT~ zqJdd{v5a6r=7$%L{=BDTwHMGKPjIL)Dhp*1NRVkI;Ue8vrp(o-6Utin=q4)?0xE3O zdqs(he0pxw!|KE$Pe@m!^Xx|a9HVRU{Dw}w`Wp}TE1Z$VfO+^;UuW@Giq{fL%PIAZ z@?YteQTmrM+(3O+L(RP(hgEs1fhDJI`RI5wdR|$YG@4sa(8A=j+zkb?A|xLU6}ARv zoOmF+%{z%x!hjljEM0n6;%Kk?^1KW{YXDrR|1d9P4I({)%aM?}1`IyzrYLnKlvFIH`~* z^lp?Z&$3YKX;eYOu<+<`3gny z1j!W7&T-8Aa#y*`tKyL2-ph+0Ufs}2UE{oV_Y_?~_r?c!=KCej1eJLZLEwk_^3;qj zi&4*3Rd0xC;R~gc)B zw}dt(tG=<>dnyhYKv^TNEv3lBEXTyYf?@uhTCYu$HQ#Dd%D1x#apP)*AwghP%7(dN*F+Vhx9HdDFJ`*ytV) zK|qYc828l3`4yn^PliiXouHax)5(3^Y5)Af8x|PY?$}?taf3FEm(D9okhgmDMhh$a z=hQ%?^7HrDnf51CD*ZTHRP+mX=H^3 zo^c9Lvb(8w&e)t~`R~p6(<*kUemcO=;6M^%YJ`q7lnJZQ8%G@-A_%bggZH25_wU~I zRm7nd2Rpl54y{|-gOIh`zh)|r$OTh^`D9Cn7NB+}yM}TMho_}<`n~IH0W^6{m4#tO zy}#tVDC~1L-JKylcp30z=*9=QwzsDr>e)96$6j8)!F>_+S{@6gGj>TA4F{9ORL#kr zkN&K9cYkqf>+j>ing-%7gmg#()wJt-&qU(-weXVL#5jSiyT2J?=lLvcYNaqebg_3J z&&~*mB}Q8ghsv15Q6~Ck{~atcF@@qKn&jiUXMbwu35Do0>b_VCfP|tB>2GKvpp<0@ zNkhk?;>;Inf7P)$OZCt+ZE{(*DNItq(uetT=2JVa6=Jw(nBcTUW9kHD=w5AjyiMeVRAg5`rv8bS<<=19Zbho@`I5q%?O zS;(ObQlA6MAeCcHB&mleF|)|6nb)D=tj8Sd6g6Tsu(Kw>X_YtCYYN!9-QetSwQnRL z?CNOloAEx}5tYCNkEZN@AjLRS6FK4kIz0BXjmJW^>IOl|mC&FHk0-E1|68_K=p@z#AZ02n73J77MB}%yfpDcS{16B2~Dl6@Ohv{ah$2G^J4)Mf!yv(2_B~y zeKb0~5j;x1JC}-zGZ94ETm${}_}yCj>9PdosFv>NPfr7SDwSggEReD;VGpMs7LXw{zRKZYNl5zbIoS3#`6caEE)9qTor^X%sR_d}mvI z-~Yw7O;v?`@xoWY%)f2nJJjRGx&??-;BKTI8DlQaYIvY#ty~{t62ZewqvS( z_Uho8QU3VR!=`9rDa$=CgXP6$sM=8IsIKDX;^L>d?eVJ=+Qls2kkjVpmGR=H+j35< z_E#3587_k^6^w9%0!htHS6Q^ZV*y(KXqA-CIPxwY z9)x5LnAHCS$6_9}WAu_3TgL5XR_XG}cdoCC?_?_VEMchZ7d0_Tm*|8)KdHo zZ8r|v*>@lIbCjim>-qU=2fF+`CtlKP(_jAyx2Fm|oCK)gRI+p9)Ssz`2=P-ifiVY% zdzRH1?cybL@AlWfI}t~Qc62RYI?=(Ql!4d$a|3D;3?H8tYq>5FK7cYQ1Hg) zc;oV>Rk;&}Ij!33t5TUn(2aO*T+(C_gSpqtsZ4*xo9r0<5Wf2Qwq-H~F?t7isigb{ zaR)p#>(ju|Wf>wWC#B%As(Ca2@luRy7r^*MGV!*dYP>pH$qV_+BO`K$y8ovhVIaZHs}M8`4f$7n(h#4RpLKGrsuIu7yB|K-ccM&e<`wy*SrId@ z-KFtU5PZD$Wi@~-AdofdimO!D2M{66$oP>3&J2sLiCV0-0Jp0_Ptt`;0pK;f<@x9R zHtw(LqAX7@;)XgjciJMzRgTgpJJ4A+%|9E$1uCw-~E#isc0w{g7HAs|2qdPSuC zQOt4?0<%4#T=4;sj&+Msn$4ARL}MK&(SA3#`oFe#s?$GBt`FWy-@=D!SZpbZv@8%}y*AFh>rCknJ=&3;F zB&-7tCIrljgMsS7A>c&x(Q{L2m{AWVLuUVExBp_6H}ac3 zaeOt}x@6c0KGjfqY;xNu)SOXUM(;P9E)XN=uf&Ek4kC=IdcmuXaW7n?Y_ssLAYDx; z*uobF6?YzVetU}Irbf`Du{xT^qC~AdBl|>?P7`hH?d&)v4w*0It5BFCi?Zk9C?)8|{u zf&|=2^=>BZ}k2MwwLfzcyrH`iTkD> zet6*r7yj9dLyIA2rma!794}-qwhQ^geiEaS9Idx#W*?ivn=8MjvMy=B3Of1(4Hv!~ zQc?3yL|x@4RWwa!hQAu4m$sVcOKPRUqtPpZ2|nAx4dfx(y~*tcCKWV?73eUBz|tTgkve~}9}FUgiiX3H4#B9)Bu>2mZ6B%76nuoa zg_-G3!f(ZUK+ysA%dn{QUvzJtVU5(342K_ITRU+EFwCTg5Kg-*IJPQ4iH_N$WQsWW z6NjbW*;5d5a=n)T{&RSiS~tKrRud_)N{_22=h2Nn(OY~NEf;@wlRFq8qvh~E^X+-- zl1wSr%KEm}16*a|+R;JUJ^RaV#FxVF@lBIM(0Jr>%My${oz?f~Xi4e0MlMMnm!zY| zlO?@ke)BLGj`#~I1=isUwFQEx9Yx6L{$0!Xo$R9Awwqo8Gi3r9T-?=}pV=^D3x%aerJZudF#Ef zAwOe^%N+K?>6S5M%JlYb?~8n`hy$D&pF@1~wYh$9LFWU#*YZ{|_vmKa+LW*)5bd8t zLwGi1k)EdIl+)$%lm6+=eEP!e`k+ z{I7(#}t9!DpIC!)!Uk9>%>qUXFZ6eTS!nLpxIU^pMA z6~lwUe=){Sl8V3Dz&5txN|eRU)tx^VZ_$q^*o&O9-AvAV@qJ56Y4okm77xEOI5C{e zyiC1iJIVt+Jn@5_O@3)ij)%VU4yDZ-gF{9XR(UNe=~LGHFiko@1+V1Rbw(^LZrC^R z>@!m}9IMVp#c7=}^BO6Isyg4?%H0v&i`J3r_m3Zer4+4&9^n{QR4STE6nd_hD*UCj z^bxi(_|e4zS>2=SVx!R|78velq)mRIu59sKn`S`LXmoI*n6-O)v-exE0S%R89o2?S z`vcSOv{dR07k<|7L+h-t;zD@AYx~=NjoQkd=yng@ylq;U{d%Xf-S$e4)7- zJ5|hb<%2X{!ers1a0((KaI0Zyf7S0TE*JH8f#qJ9_hPgVTcN``WwA_o4Im)?XsN}r ztC$g2*VXwn+y!d!V$S7~jSebi&PVEmUfYi5obh(E?ZxiJ$@p@n?dIK+XEp3>R2uR&GUZnH6D6*!~%2%*J3Q>V^tdYFXOkq_H0tYOy~{eFNtB)zdMh_ag{jJYcExK zWZR<<8w`k3aV9p}wZSlDu?jrspU|_{yLWqB1JD&nV?3mdM~YD_KQd!5Ez*hTN(|kI zk4*je?CGk-fx<1f)is!7jV*p;b?rC`aVbk@yPQrn3YnqloESO+HeBam1(YeANn6RD zMJuKX0da!G(NgAjIyjTHl`4=b5w>KggX-LH8_X1LbV___wHp=_>Gqs{%t_%_79rX( zE>9TTC;Yek6Y*iE7|V1->?TtgGSwc5+9Xz>uEOU_aGX0XOLzQ!?z!0aQaoi9ioV&2 zGcorm_wZ$s8QpT%zB(L{_)N*l7F&>ns9w-cdO@d$Stso}Ya8Z&Ph!e5EMnetzbudO zZ`5@CZF6frq7w8w7QTl}{CP6*pE?_z*UT(>F;N)psVMJk1x(?$rrZh?hLQ90FboyN zi=&#>!=6sj)~c4N^`=7}FvCqX=UA7R`6~1NGbfA--@q%)9WGDrse779P{{-7$PI#= z4sJ3*G#@_Nu1REh>4kV)kxHj?WV=jL@{fg$a;t7SLQt@F_mP9H;@fqpChspa?`%Gn zHfJowo=8*6{K1X7M1n2em0nbq-2rC+1>Vyu9(bvD%^7`c z1>N0-nhJ7TEpm1lrp+)-YkE&`VG=Nzh&t$B-nxEc$E`6XsKA|jvVXHyUx3-`x-^ce{wk{7#PF8=!A5q{{DOujnFay5bnFg>J2zzJpPsQOgQYP}!Y*Dcw-X%*yn)yqy+suemw{E?5`GMRj zk|fU(Tiolt87Men&pE#9a-I7Jo1UlVPw}NXW8>@wY*7z2sIPlMkJWHMm8x$6OgPv4 zC%(K{7Fkz9IgXCjt=F22%|Lh?_VaW+IF1H$or(6zx%IP$!+5C0XI$7FjmPy2w&|i@ zTKGG>iua4P{K57N+<4^GPx-8DS^g-2%y+$zRq}U}ytbuqF2|0eFHSPX*aInTRKx1? z*|Qj0k8ozO=V|r!;OczQI{BmzK73TV>v5V^F1`};Xc%KHYIXLO#K7L3IzE!OwXw6U zmRGgps_=-`LKEK(l<4%24*_*dTRS1~irMLRJTVn2fX@awzU(cUv!J0swp&fuFicEQ ztgYX_L;c672nhDB-Gr(-UxkV7b;e`Ce9n4$7Dmm~?jGS!A{+si1~$tNhu3d1R>n#D zHT}n<(f%_zR;mC7*H}JHWP@iR76IK2-faC%hU#Ez5=_^Gu*ruHmP~->=p2at6S?58 zMNK6Ag}ZV_KMzyASw+N`%xG3nhprEDz9Q5tL=~cVip8fzmj<^0kXgh%dbE)`M8nbz zfjejHND)kXGbV^2JlTR5z@MMG_R}=W)xOrcFP7EgRaKN=ifX7SV;aB4v-2QS1!TXE zypTuFlOMncs7ERef}t7qWqZ+=-VD(iW;d{I>YgNB_F}uB3d(i*5nV`pe`o9BoarV* zF3C;oo?qz1-0J=g7mCOwazVCErqkt>q?M*70ZInf=XHJ@>TDOMSYL-*N5l(#wkN73 z=peJo6d;UuXr1(_Dx~VZ5!zM}6CJ9AA<1y6QS!#$34Ewv@WS3c<VoXS*JLtZNa+hb&)Vv!jS;dc1*C5bh ze+f2AyGB5y@1&+AW+}DQ#YdJr5Uy=<4}j^qoILgk=Wri^WE_cvLSGzQ_fH) zm{BPg^)Y1r(9VwRCnim^aYxik;4M#$|7PZl{%L|^np;Yq-Pus;RB58G9<8%D5ak#i zq=q>x8>E~TYO3We+5O>xDKAqTKRvmT0v$;vH5N{vGizFox9Os` zqBCtW^B`4fjB&;!7#W+aZw)WpF;k~3UZ#vW7US@S)|X7lViB+VEYxwQzZCbU+BB+u zZ@BQRSs6cTMoN0$KX2j7MJ{Wy>fd8jP0y+XK<_at#<7GN-mi5W+ zP(r+c8oa5{C9(y5c!hZ7r%7*2)>Dur1k0)TBUhwxl`pw|>We^?b~Y!Kj@PxODyKy$ zb3i&b&OAD?;^iHMPG%GhdXI%$GT{5!AZyk2Ou%^gfwY|LR-{I|dAfr-w^Tm%2YB8A zwCU{&!=2;LLWU2s4$CHX#_wwaEj-fhM7KOeHRzw6C2^NzZ-fVl4i7WbixX43+{9$z$&MJ*_o=5owJe12ME8od<`oJMz?g!|l;TL`w}&Js7sfu2Q5egVclXyc zaL5R+u=(9LDlH18+&McumV}`DLOJ}=n;h;R$w)YN3}L@_0F1QVy4i;L#iWc=;PIC# zRpGK>O1;k04K$+?$$l1Ev!0^2v3lP0$5{O}-Wb(zH}%{|+cRTAsG1*jAVg!9hT*TH zW3~Ais58BrLMasjV3r$6nOA(OjF9Yf-ib4)+PlnvaA6W2OQ{{XO5B{VvQ;6cKnkwNCm zqg*2OnldPY$r}w!6^>o>Nc+9Jz$Z@W>>s2g$T7rn5xkLCnmqSh;NV>M_GakwI*_DA zCtyg*ftv63-x1nQErmmMgxKDmYA}X^l(D74DbRn^GiU&%6yk!J*TSf@0l7pUk@`LL zywasErwniSTE1?usBb+MqQxQ@Islt#OfWV%*9b6T^qCQjSx0P&mK`)+$i<)+K?c%xSnLNDs*vXAmIc9+mDY*;{ zrruHjrk~Cuja5|5XT&K)c~Ny0!Gft78xhq6Z}=sN4M35{iL|KA5SLkfsM0!yc$4S6 zxVsw{hM=fDqB(_BwKH$ux<#zOP3D%6#%r@+a!Qv^?Hm=Q|C}lRXYJ0NQFzI)vca9| z6Yup84>IkSAzex*DME&a#3rH$GW^eDfV(Q1LaM7`L^0;{Esp9}QT)bsA_a7c?aWM1 zAe+UEY3ob!k|g7}MJ7B{@7%Z^cn21kvLb3^8uhW%i!EiC?l**38r-aaM+S-ahy5-TR5HoCGfY~JAish!oZKQ>WQ-wf=M=z4$ zqzeHB^1qVbgFFf?R0@U;!5q7LPFgOda}T>}5^kx7|3~O|-!!VXtCjf(pRzU$Tv4w! zJ`=E-EQJPF{{EFt6&Z*>*-%tGk{H`vl!#nLET1;UVUAGJA^A+vs&wF`oue{ z)5qn!XwnTLLN&TF5y+uf>!`D+1OZVKdvkc?hrw{2l*aVd_*tM@??r537bG*R#7S{) z>^BW^Q?wKNCEiPWSCVcS({#Hpl(!r;n{-+E7J4^f0!f#Ta`K=58 zwH!cVkdZo(mYIai2$08FsiD5Q+ZwX=Zo5h=4sMR=Q`&eK*QV~XxZ=T|W`71cSQL>1oY9niQ!XUj z9Zk6@{^7xQdmYOIXfP;< zz2nvZ~s6YFqz{yC4G5V3hNvaZL^z?Ay zOq?P<>`P?)%i!@pvG8ZZC-XMgHr#U_Xb4F|v=*QU$^4DP^-I#4#V7tkJiLYp5;199t zTA&-PqCY}9KXaytusR6kO=O@sLe}~3vtzKroOJb8RCpPInNe=PW3VfoKeeeQX^+u- z;!Hc_{WK|2x_)Da$Or*u6q4l;RD*H>(z9cnR>3De7g=>o_qDIlKU!|FN76BL)xS2@ zVcIN-%g`l}eoQgc0}@MM(pUe@<}hc{!_bDnQ}sf_s=sor>Gf*_E194;&JQObQ59sZ zPQQ#gPW0Kooz#`tSL&Wi*dMKPuSLx`c2NV{+bL;FR?X(_&VCics@_ScDpNsXC)kVN z%_Ov_i=(L(=?c1G?W3VsHsGfxr27KJFdSR;q1*;>4JXMkyw1z6Eqryun>EgQC9b!a z)pO+iXY_=80crnQ7X62sw3j{b+)31ox+S_zlAEzW*rvRTxHH}T@XFW+j#nJSXF|>= zw5~(vVKGbta2NlS*2tR|(HKv8+m#Xupi4@iSm!scuY=O7{^5GaN+ozqXM>yS{P?*U z3c9%+uUF9O@#C=l@k#2PWlNXUYpSW5B&6iA637r(YuDoQRAtJZy|}x5DaFNA0>|TE zXGGWenRiej(f8xyy$6(PHpoEXUy+c$B?l4x1Xj}S5sC?kq(F;-60}qzLAjGiC5>Vt zxH8i3k}jy`#?6?_qRKl+p?ly}kba{#SUoZxB4(dgedha&hN>m7j4^aB!Pz#_xYJF@ zP1tVK7uJ*R4cZHVM+-;j`wR5>iu}#jspR{;3x9Fpe<&I^9M(+x>w*BPS;zCObu$P+ znEkuv{#0}&h@i=94yvEXJ9;HJMrF6s(GaLaz0OcLJmHxq^v}DMmwUCW7isI=<^s+k zUOL)FrRcBJ#pUZrXAdIdK)u^n4YCCSAs1@ZE@U2bfCgxamXqbM zOfPAivn1d=bJ2QmFR^YTfx=e&cHrgs?PvXjbIBWgL*Rc$j+4v@*DbhDKm z85yL)#2xZ0#jjCXljXtcx{Qcf9OI*dHFIkXhFCS#+SPs4B*?d~Pg95j-}DEEltM!D zT_IGQ&48&X!LLCW(LrOqv~<$TUO~)pU$|+c;MrK*@XZbO;GePw*C76{;In_n!jH5G z3r$pa9+wiJ)(LQFe$nbjyTOxws>>(ZBd?j-fqhtP9WQs##D5;xuEXD|Qox zXu@8GA@qL|oqNh5c$L0*^a^%~dDxzF*i2viUI7pOXr}oC1bSqA>9WwowzqbgrWsE} z&%oHGD)F}{&p2~@Vo2-O9lqJ;e;#|$y(@lYp0F?op&b!MWHrlIHVU`d+o2d?{773z zrVVF?aBuziB%Q|s06AZ3qb5fOut=DJ!RYRro4^RuM1$4IDda$R>F_T_li(bfl0{0Q zHa@^bk-P-nzLYIc&F2PXqdX;M$4<1&)a8?di0W7+-m!4H%{qh0F-SxGsCpi(C?*w{ zh_M*+BNUQgGHH5`MjcZ4Y?vr}r}HM}QDW;n=EQr7;1}`59s1-SvKMFg;-luY{LZ;2 z(aI`GDF(?;F$NvNlPD&sKzgA8B&FSvIv}susPWPh=n%EyL$L+T4g_N6MW<`VCujF= ze(G}0=H1y}{(v;=fN)y<#LT1y6vT+D@6dK>fb@N9tK;7K>gmmz4;ytY`f~SP>`ASO zUwN%Cot#p4vYjysf@7pR39V>&+P~mi0Jgu>VL|cz&YgSSj^cj@Rd489ro(dSUeKAh zVN+nQx3@bO9~`B&lGS3T0nN4P?luq@t%N<|FLZCCVZ4O|<;P!OG&*oHNobbwxNEcy zXd%{naOfg}MYTa;v;gV zh-AnJcGdjhXlP~JyGaX<+^b@^*KK;Zt&Ce z$l=0WQ(C?rw*1`-f7DLN|LG~5LFi|TKMOq&;5NjiR6%IW@)YHwN+QuMV7Ie9BW|_z zl~+*>^Hphi7U#0nT-JanG|x|zQ~q0}X!A%!{tjbA{lq~LrFgXia^X^Qb5!rapRFm; zs{y`WWzBt>GR^bfjh3 z)3Fi*hDI@O=g>gF?zNLX737e&r@LgBaLsDA{@|tV=eGx~cz|hpy-89`6RHaqh)Ao+ zg8#x0s(+``=bw!}!VXbt&zRuC8U#e>ySSO#w51YKiTjFe%^P!fIFBLAVo_QohNJfm z_rN?=Y%}&TCb++2g@&72OV22QpeV2)x0`G*sjfKC)aatV^ogru4dP>n3%)YJ0 z3HL$8#uO6Hp%5zw#q$yik#Y6fYn+@TbKR+&ln*|reBYuvhkqd|^>Zq!K5RzAx7e!v zeG7j^-NQe?Ul*a!HtZ1qQBfyj4AV+nJkUH3y!SL0h0ZC+jq-57oP}bbXdZuhKmS!w z?x%6nOb=D*M3pbK33Rj39P>*@2{!gj2qgCtJ}#v-cc)LIz^dpsl}Qz8kV8ody~g3Db&SKo|iR;Q6xs%2OD~FCKIOI55&=PY&Z18Bw7el z4|`<$ae@kg8p2!ShdhZi1>OQonS{lqH{v`{MKmR$1Hq9y!^}jb8{%KAZ0}{v3XaH` zWtLYBMaOU9sO~LiH}F0!+5JD}miBVBgt?OzEDaW-x(BE5M4czAlJr7=Cy9GxvVXZf zY;5>wWm{0$$p>p6GC*wEStRzkKN;R#T362LIWPx9_g74I(Kz9TyXSrh_+h)jA2;Aq zQe3fe;VrC(;iB83EnR-F7^rtYKwT_bF|m6Ckwim-kCM~)d7Ss&>UaKD-K~G2P3XsS zMzDmybB`E*?Cd^3x-i;q8NF?w#|xLCasl3lFsH_jw8FFqTUa;DF!zw-ONWI@Jt-IW zN91)1Vn-%1Eq!+JH(Z65|rh5|!oU7c<=MinZp< z;+4d4Tbv~ptk87TISgU%nX${+>OA?pUoZSWoe6VKy*TVCmU;?)7gL2l@ZTIc)nEB| zOOMZas&p;Bt^d}Q@}ciu=+WsiPZ?bhPCy!nC`CD(^ni@=nxX~HZ>GyAfD;)Mt;mt1 zo@XdC6;WMWyx88pU|Skyg?4-0(;G6=yGsX0;Ee$MYmE(4B(}D?^uest6A_B;u?J7p=HP&rsQCT0WkrT(3!jyANQ5zCY6(?LFHt;@N>^Cy}nit zWoZN*WzSQL;Rem_f$9J04>toC^mn;5dwIv1X-s-Eyr#dAR?U=|&TAtc!{sEAfy{tO zvI>vgV=sSBCE91Jj>!y=j~62Qafqysa-RPd3+7~Pf^dF=@k+NP;7Kif_(h-#MMY zNlQBRuHR&Lde@FSr>DLCb!#$MLQiBeSxX(lqItip+_h`n%UdGqAtn$8zUZ;MZkZ^~4)vjK!V}a^S36Y#Z*U z+IIH>(9ft^4AQsSHY&Hvj#GZ>>XF?&c80gfj3P=bGchu2v1N`HyB9(Ki%E>(S05NI zRV_d%E2RpKb>YpZtcHkowOqv9%_h<3ld~9eQ*|+UInmr9#D%E;Fy~Jl zU7b7%st##x;ZrI9*vD686IwBO4p;U#&-OQdb(2laecRe5&)fs0K!oWAtF{QMSYl$L zzVHVqG|aHG7^!gv7J|!SJIoS;(9Nzf7A1OX(0z$P^>Riy8-!a;c{H1$uS9-irkVUJ zeX(qEZ`U*qDr}@W8|}-_bOo?u?QuLudL#?qJFAzsfhRdCA%4nawRd^*_|TiNNf?L$ zi&inDSO^O#Hzr?bWD<96IpubMyCIGkFEFq?xoEGH6lAEi1&24prI}8*=v&r(r!b(` zJ3MI34#_xBj&u&YD;kQ2L{A{K_{K>-_Y{7{P#YH`7!g0mJ*&@r4xbtp!Iv;MbUR+9 z(+5uuZX}CmE-p5Azjk`bTrKZvBIp{UOqE8Ud!t+2isZo;SK?bPEu5=O|HnMZiFro1 z<*UA8;oIP_KPJBU(`8LV_R2>>HK|sw;;=ANAXj)RWBbIYYuQ}_5?;j=Gd?OX{y1u_ ztf`Mg<2-6yKZ{LVTsF_K&CaS;;|C8@SK}`wj9jHTJx*>3r|;!{Gu-UY7<&M zY5bO0&_BMw^%B?{Q(uG66~~@{qZwHr%+*h;fmOV{?qko?KR3?kk&7`YtKz`Ttx@Ov z92HK_($U;~)4gW}l#pE6Qs?G{`QSy0rObIV;1fxfR!+HyEN7;84qi}rh6kv+-T}4{ zFA{Ld%vf-GqVCqB<|n4}9y`asq?h<8lWNAvh7x0R26r9huERh5G#ubJC+Q402P04( zOG>k)cftE*%Wda&x~7uBu&0;Kk{>eG(Y^?tq{h>tD& z=jMdWw`t&_j4Cfad8lwGT8R0aL$)d@2^}-yW0p4y6BVh?7}22oXgA|(sL*tQwqz>I zRt!4l5Fc`ESoX@$HY0geZ~C<3$h_vnGp55n9~+I=18j+US2i$C^lb%4+uKW13=$J? z?76NiZQ9SSxpE|^#PGc1ttkibJhE&ki=cZFkjq=_q|f(s zDU(75*VIzjS2cjDX~rmmi?a+DM1TKNY$OcHDy^6TGX7~Bo;=ZC|iqtqnF=gI@O6*>dJ7rg407amnT5-_}%25%!)k}L*1h#Zb5dRf-RX8H?uws-sVFg9c_*8Mi9ddD4MOo2aK5hFGh~kbN^rvn_7`93+s2c zN@0Xg(P8gU#wD^_lie6E%0#tHbR2(5*fO78UBks#Y&?E(I9GEr^S$Br9-&Gq5O-Nj zc<*jPNSNGR-$q$VHS^ma(S^ysWMp+g_eAmdcNOAdj*Q^dX~O|a_qwxja@;7@Lu z;PJkN-)L6Rw~J`}kQ)AfRoog)_b8YtYOsF7c6r#P@4Q!x z;ki+Zti7-sma5Zv39cK?LT=%`hsA)8UQA1PQ<$!fXB($IZsD~TatDqLmsW@@{ApT^ zyNO(Q+lOLWuQ)v?Xg_s^i&>FyG_;TY**wwA)C*j(3e0%Wj`)b>+#*gB4TsPSi6AZ$G&R2nQ$_AY~!}KCiXIr}f zkluk6>ItctvKQQiqR++N^aZfZU`$uYP2Qt|yTM;4==yl_O>vd3X^sw?Kxc0dR-IG%bkh+htF;VNS zSCN}+KTF>G9I})JucS$(+tAsJ!%6oYc_0wuTCufb`rd>laKF40TE1_-(X~(i^M!vd zdi(B$52|AQUeyu*WZ_etYxos`OS7fNBpmu^_YoE`-)%d;V+lV9UfeMp9nqy;eiFm* z*Coc}l}7hHnl*2Q3kCM@6;5qhHeq0@H=e?2<3X-sg~LOlm<^p8YEB2s3M zOAK)--GZq%BKui(FOsNM1|)P}s;3^Rs|=8Jy^G#peJWa?Dz4N%Wc-4GZvE>g=Qjmr z;szuy;cRC&mQzEuxIjyaW+%%R*{q@1%nOuM{l|pRMPyrO*@&w@DE1Oa4*a--r^gg&suTDQV>97H*2 zFL#?>6pM^1gHL)37oYz3eDA+udi7_uX$II`-A6HF*fE?;w>Oo!8_o|)1xw)8#*uT* z3*QHjUQIO&$A+Qbow#|lj$sjUOJWRx>8f8a$l1AD?tbB~^Q378ruOvA9rmwXyA(d_ z-JCLE=0Ad1c?P4wulLvohlkm~BF>Rj)Jb5%ot9>VY&{IhFsDpnGC6r&45vro`HNLh zYr{8>(wv-t9o3A_JcGVx@QZwcpVDFd3A+ORc*Pu=Tq%x@0n5)!fFqdAnCwJcBeRbl zwkTLEW6W7#kcSZS*R+HOl+WZWiIh=B?a9#v?eovH?n8F5<*(<+Jxw%^=Y61cUB`dj zf{fRwvwHvxfFz^E8)xCj^P3lESquU*UBAJzx6w446=G?62KswA=jTf|mX_9{pU0+l z^q^L8otkVd?UA6Vou>j(^gh*mptfc8*B5@q|A~rqJI~Vqd6=w(Kl`1})8V4hR-%Te za1Cm9Sk=biYkZEL1&I8mlPEm;PvBct(kAP>PMvO-eC9lgV= z6{}5tFW|=a)6g34F2l%TVY{zCzv%`Il)nfqH|6vGjaX9Zo`3hk9|uj5voR|kjUp|Y~a6Vv$6d-QIfhoTR-$LKFIHR2gt5)6AHGX z=Vv>my_^1zWPImBCRXYMTU%P*ic5Dz@`t|Inq=RcVEF7rMkV94dhrL^swqLKs z-{SWsya_bTUNl^2gyF&H#@^!+|?bR;TDiqO?M)lDjQOQKg6dgU#s zjxVGdeV5^o<48^7%Y(x-=mQ1V>2*GdmV>vUXzC(4T;r-+KPHR+LY>J29rj6^=rCokB%h!2Rj%-b;xCduc?N={8=E#M#IC?~dem)Y(Ip^! zQ$}THchEaLTwby-uasK|)8F>eHnqL=fDPdoxx#AeJ5E{-hQX zmV>~Ry12#ibh;yZOelZeV~k?CLRRz1r(P$!|EzkGKFdC+FI46FyJo#fk4DxMTr~$H z{mkJ-u2W)Mq<{E?>~qGrB!}dhGA=IJ4Nqh|V5AlUJfVEUh)u>3dY}(BsyPf?LGhkBxVEChNj({(%8^xYH z0C_vuHIST9fA0$qd>mTf#_ls;hX)rIfd^^fvI*VC`Y*#v9`SGpe2+2$fp>D#RhQOm zDotKdx39*B-c~jmrmhWoUR}0tthc!R0fCIQtRRdZ6QyhmpnI+k-rnGZHpUZF>{}DK z$B8yt(#0G_+<;mf+ALKC!V(X%je61*aY^>F53nZ}o__tGsXEg~3vY(VzfN@Z_r!B7 zBd6Lcu3H|kXV)4>Na!pO*2FmSmIs^kctrFGwMx>SqF0C+HCsKs0VAPnv%R2n_CX<7 zNZs;LfzRQPZzf_&vt%Ro;ze}=B{PZ;=+ZZEcocGQ$p?MY9KAzJzBWS&lQbDxt!M8^ zum8c2_)v(lE2k2AV)Az#W59Oz24R=Gp>c0e@y59yC87PVcwO8%CL&)4Yv`$E;ge@fLS8byIcQ9^eu9hg5o zu@EHB5m~%@Civs8raNl_F%M_%n|NcU2kTUM-c2*2mCPP1SkPt`)jGXIz;@BAHB4gN zv7jNW|J0?Z^M@q7OmQja@W=P8uJS#F^;+Ud)@oT>j%r&zEE{K7JNF@&efj#p`Z>m@ zC)&YHRbd1IZd}Ov+pf8WzPuG$?Ai59jpZj&uR4zHb-iEZH#zTACde7P*Nzc>ZfQvc8$u*{~CSe3Bbv!h>kWt;T*w!c8 zLSa$Et|e_wJGh>re@uYVz90{ye|V-+?%*f^CCp$MWg_H;46SdiV}zB-8>rfm!Y!g| z_L@#&b@DRO!<1N@9Ad+FW+x@2yVT<^KTp5@J^J-sdUrphL+Gm){t)~6qfc`HY7NnP zJNmKI;cl|7Rp=e5193y>hq19yyASi1Pw| zJLj#l1?iR?%cUifINR3elFmF6;@`Ttr3N~kA{p?wNZWb>ngxuwkL}voI?&sf;(WzT zl4|IgoLY8+RJe{Qo=g*5URk+kpgy+gKQq-<@RCAJx(#IMz3!SV^dwxT;U0+7={$PS z=AYBNNqbZ`Qg8phXaxFOc{h%0#(0i@3%q6Knrfw)&l8v`aMnLG%T!vRa3OqAHNf~L_gC2QDK-Oh@4KyoIeL~ zoK0q3d%)k!l1)BaCJJ4q}cT76FB1EuV-w;>H@A*6*1!n_jbo$GuzWdZ@i-Q$Cm z-4tLa_Pe+z;)c*|9u0*A0J!~NNu=g5^=6xBHNa%zubs^a$^hnhABkH<;n@)fqm!()}1DlIt#IHf4 z#sPRBfVV0|Vh)Nu2yR81BF?2fY6u^$iI&J&8U{;2cr(t4($4c1SSx`7@0C9lUMpUC z5Hm5eF^zfVcU1^)ZX+C@_T;D7h$tuJJo@azLupm>TsAtQ z7EbzC&u)^(>Q`i+eGtDXD2&yh2TcE{Kt|6D5wI9Ps9pLdcc3%LR?ghZ+VtMtG_@s4 ztlYO=>)Wiye;f7>k7)J9Z7}g#3Y?%p4wRrBB%QquU1f1W;}eD8>4ofmK!RQIccH?; zsw$jk2Ol&zQM@?KOigDf&cchuEmwNwiBCQc{?^q}ZR9ri3wR|QjHlhhZ{Iu26ISFx zlU~0W;GWKFPe1FC5Ke$;WOD{KVU;OWj}mYb)^m_BAUz#R490Pfww=St5>Sk!MKLqu zz24EWKpYZzS&?G*+fUE@x~0jrMQEbbBt!?@vvZVmyH9!j>F?BulDTf@QW%Uje6&IY_lqbGkcGQgEy<^DUDLO zr0&AL-L3ypKK&N%n4!yN1)}MjE=fSq!>`attV_j8LX^3BC=fXF7s4Gyu`tlgkAH9} zY3902=;nrstn~buknT(6aj^1c`*~hp2M+swzW2&<2J%GRcQ>_FBrDTaK?pP1FwyP) zNFJjYMXw|y?GNz9-FwV*?|ouu^fa8eao02N?s4JKTW)c2{LatL^8?SAkvQycc~fFo zg9EXs!%zQ5J)3{cUYch`qdr;BqE!rx(x1v7sH^mAvmm_Znp*h9WfK8 z_%;Qi%OW?`+IA(+kI}ji@roeTzdgDr;BVO3y?z5>vGVEh^%KcMynXZ9+IrgIh_xZU z2802idLhq&6RepLW_flR3R23Ih0y6$*!U=q()*n*KZT-Omi+VpWRDi{dZuCZb#8hp zaj-mP>d0^1!Ru3E=Jke;^Q^v!Y#AueuJUWV<+DbeCJr&38av-zzI_W(lpYXIZ_|Oj zEFMHcX#|TuP2>mwPaOMscI>Cwv9~PzhML#cY?SA4akjJTS#Eo>;jL!K@^GqXCvIZY zLLNJIe2^X!f94042`FiihI}x9Hzz4w=8di0?bZ?LDxP`sT6}PLreN~H7ccZC6{r-m z>8+iu!Vvjs2Sq|Mz0rI4 zdLF(oYSk!23l%oWK_OsR5(DMR2*gIk}H!96E~685dsG5 zc=xRyJD@vd9s^kUj-?Tl$}3kyYWh(amrzBn+|7_XGyyF=`%CqE|FdWRfLGDDe3tm# zs`zMZb)5gw!k57XvuB9Qy*_)K)ck0;J>&B{&Kcr&aM}6raA@K*byTG!o(Mx664LM; zTU#l9H09&^4Nh41<_)alDfsQYM=km$AeBG&ACYejMB4qgcYJ4#c@`!}4hYqRhX?PY z%ZHUYv1m8R3y0_LlLR;k(AW7cWC#U_oZQ4JVh(M{GK9~YsBR8`qgh~SIM~2! z1|x^m3!8-Q3Ic$fN-PvX1k!PugUxUO5MmVwg?Y>EO zPwLf;#=RIiFQCCvN96iuyZkem?w>bl?`2htzqdFc;((wiGnz5Ng& z6`6%09u5&jsLiJcR7`NpZ)B@j=oPfPaP}sJWvI>LDqvnD4uPGiu7uE!KKt=Y(f+BA zk)mNM5s8ZLnSK4e9G=&KtypT~B>|tl zN?7_>T7^oGNd7Ic|CuKc{({C*$-{ml+`dZ+2kn2B95 zaXtG4HydUM%}dN;_@hq!T#<{)d>TT8OG4Ny1d)ovZ&0p>Bxa2Jx=Shbz-+zc>H3!B zL#2yCPm+;R0oy62dj~5L3K3vpH0YhwdN@q_Y&OlPMb>03#Z4%|&q4@k|M6&nH8?FL zQKQbwff#|RRtI|S+hkGy>0mjtI_%Nf{AzD550iupB~?L%t_hE&GkR!7M^x*>%5oYH#Xa`GLjG~$@E(xbl>7K1#IfWJva3S6S*?7B^ig57>&)& zW6pPZ2Da@dQMaQ?E#jq zLo-3JkT*XmXsd^u2VFmNDGU`0f@H3t%Av%@sna;4=G}PrX{n3iO@6r{$fBKti+t6( z`33PS!_@)+{R_(``8cL0qR;yesK`IRuwoSrOqG^><^KgoX>> zt`5-eDNK&CWT_;tfYRpOBnzvhDIIR=l7MM~7n!%0+-+u|_y$H@#^w+UQ&*%QYW{5j zXOjtt8)ovYlkp(1Y@dL=Y(HqxDOdPTxhGz=ohxr~*YJQCTk{casDu8$(Do(XSvQ-i zh{{ta_U~wkSdp9UqN1mNhxT(^en>}AB(ILoU#zwpFNGqL77+R>wOC`2Ugk|WP3G*k z!n!EWVC?n3=rt67`s(U|>h30vkfSfDjA zqKM(npd&CyuYA<7P$c*m#fD^bB1{36epaulH zjPMQJH$VD@g!#&d#cuo()WS(+K|v7NlX3ce4q>QaH8HK6+%^Xu{laA3!pVgTq3v+y zHXQwx!qMks7b@!;Rd=qEy6us9%2kx>o%~)YgpjS3@*;Vq60&EM<*7oHWUik~sr*a%RQ)cM89s&+&VL1>t)wcxHeOl+}*D7=E^cj6pp@$dY}TvebO z@rR>JE9+L*khVDObY4c(;7CbPT)U4x1G%58ntLoE48|6|7MV^8V2faWLo|j<@X{H&49o$cZSm1 zj7mZnh7|*0?ykfZCeJZi6xC}wL(vT0air2zv=oC#b5p{??l5)wM0PY#%_ySl0z`|? zBgVYGnnrV|GHc(cHyGp`DH6!Xl;Iy1eTAg48cEA2MLfMLmF3k!(54L7Xx0K=f5o)inPYw7eu% z*ZiW$sjObpuMgQ-@+;=$ynW^~<}#6S@|X1LRJw}-EoOF~KnFrGM60q;_Ec3fcY?^_ z38c(Qbmp%Uop!Q)PRf$m#N*NOoY)DMc0q`|jzt>1@5%P}`tFRy4U`d8+_I&~*WZ<* zzbaJMS5|mUU`2R_7rWO1dWVn)t~o{Dc@n4lYE5$twB92#7Afh8P$L z4Ag8!0o4@WsxNsHrJJ?aVV8m3RkeyW(98>7T8YCch#>P9!bP$%fW&d|@~23Zii~`ynMIx1 zG%d-<%fvY_eUB#szfEq>b#VyU70N}l&k1=VT~~+y{+SxXH`u)}j%}#kWo>>I@FZZB zXpD?2klNXKO{ylUp@X~KA3wFT1HpL(dgyb&>dGs38H*cR$kH2pZ%|s}s9%{_rXZl7 zB~oD8Mcz**B7e&}^eo)2AutRmatc64-xdRw$%1@?@$u$n@B>jY@5Y{4sue&lKbam< zA}?GBgV!Hq(yXNKAz^w*;*N%kn}$5(Txx1YpCrIG*2m598A`slCBR_j>%#iln%I^e zRw+4@CDfT>;P08cpt=p$8IuujRh*n}II>V+b7L~v zyHwe_Eo+0AP&9VrRq!A)5$M6e+X{bU7-z_KwxAO;!-mj+-n+~AB#06oik(%J3yd;h z@yO*%qB#SpRi=W)*W30-3InB@_+6l4Tftr=Jn*m0BrybnVmIXB`>_bcn`{@s?{8{p z;(!hKqUvqujdTb^={v~42&XoKmC!O8=R6AkT%mW5F?t_<>=OJG;9uPjN25Nm*$OxqHqNq%4~|Z^ttNc3~8qQpYdBr_gM?+of}!M zavsoYME)$S8MAP4YzoaH1u7k3U;pUv=um=*332sWo+7V+Bg*b&l|(rX`qz(U$CuTl z@D*jF%riy^;y9dNPZ*3=Bq-zGch6HvV_MQ9B$Q%`vtlC2$Am=HD4-Do83KnHe54E^ z5|&{R=?_RSj{$^6@n@wb;~%A`Up3?V&_MBU2xpy`9-3^+)Z^EerS@Ri*J7$&vwV)T!DPL<@~Pe)Nef zdhpa+vtxXs^E{hr)JV?yiBa68wIZAqI`|J+!eR@LZT()B@DyVI=;EUIW%5j!9m0^E z=L|*-ZftC`RXnHNZKb$0sLBx{(%*XGi6^!dn@jZ>_(fnd{8;oyK8)kBZcm8;nedap zzEJiMdpK?W;BRUU#~gYgp}by3h^ajBV4jXJ{NG zjZih2i#rn`E3-Kp*+TyCMRSNUQP3F}!zns$F}^wlb?MkJM{K8DteqzY5j{J#xrl1G zt#{IA%x%6x58$r*7z3WGyH8&;a zJb5NYo>}JdUC@D#jW+`cKtPpN0%7t5gdBOXOZ@PFju{dqzZdzhUlLz<3QfPOS+}u$ z5?bwCQ(`)$RQ0OAIvqSHAdnYJ7}3z95?Fy*uY~Y^%3V2be;|8Up`&R?)@^76pyXQU%VJNHoE~SGc6jCGV>(s4?Y#4 zq%dJac;omurfcw>nvUtCBRECnQLxBhhHyL@=1hOty_+z<_}C+1vZEsdhQ%6GM>4lJ z*3y8NRk$g&PRPE}b9Q7o%ko;<4ExHC6>BJ1Ge8aYxM7cCGF%B356m(DmuUI(s?Wc} zgrEDY+^);Di`FGTRD!1n*u$QJE}AJIh-?*5pEN3tyYitfe3ZAEfjc>$)#6-V<*LNK zJwNk(HV|@_%%6SAfKE?O6K53Hx?u%}2cmC~hpM@8ECiD*BV*9lqk*h}b+FcPkr-1j zvY38Z2yeVJx^jgYK04~%O#@eEQV1pzfSg=0L29+frUEi2oW!#X& za>qSr(5CrD*Hz+riy1C7KQ>TD)|Ya{`fp5O-`I9H&wFdbWI>UH zR1V2ty=bXR=|ANup!R62oD^EBwILJriEN532z^I0b0TwA1lX$M!DeVX3iz!zEUBx^ zryKJQlBP$25|=0w_ksM&s}}ZEt{x@lK%V3?1;R5&4kFDObPbD^D+abO=YeF0Da~}nN=l2I zv*VlKW^iv%PWrfKb;F4La(&4b!-cogk~~92?n6%+Cx{t9S7aZ*SRqD)vJN~34<#HE zRm?FL>wS+Iv@p@hdHsX+m@Uzw0+0bmtspDZoA+Vi*H-rCm2sjb-r^}9&ioq*F?)NyYJ3x4(NMeVH9lKVo85s|Z z_oFNCsH^+i>gry5j;yt;Ys_Ikw^nWPso=nr#?yB~Nut$+_zv;&=V8JJp-=lvmzB0e zu?Sf1Pxzzi6kH@c(1_d&+qj`5_Ri_EnN6Jt%IN42It@j1;%O{c7dq4lXX2(|ox&`V zM6qqjX`X22?T-fLTY8A0h1pDOlPo11XSh9$NSgZn7fb6Vg;Mi#=sI0n>Hxsu@Vl!2 zEv~IkNZX*tMA3dAJBFrL?aK{vMl6Bi_BH~Nu*aUv0mFBPvUZB6n!4;vk6mGDj4%+e zn>AsHPDJB+DFbEW)@H&A9O`n^Q(yA3Xx)eDyPukR7@ZO-eDypJ{67NWahI&2iyy+1 z3|O}SCqgq01m>xioZid1t+)b`jlKmm| z6j51K=A83=tix(^(jPEpEJWur_D8ddgrXt7~z(A|&zTgu3aRxOz%s zvYXQWENM_>)D)vea2<0DR#zETT$Zv*^&3t01|W$cm^n%O8|IOLoQ^|xE7;5EdYKWs|K$>qz6@~HBt38XBIE4W|)=l*`Y5RUU$mX`8Z zcstrx$cK52%GtKUUanlr#9Vy=EP$kzDBe&C2NhOO`%9g{lOX$u?fP%ou76|Z>db?7 zW_+oRa>zP8r+#E7w5Ld+ANsItw=!B6E*HCHvLpMaHUf*$l#2p}3x~L`V8jVz=pWV#06> z-yM@n@ofsqQ+AR8U<^xnSy!Ru`r~JT`^Z+kjL`)R7>F4KzsKteHDTs(ertVBqQ&tC zMJ)bp9GQg$tCus|AdXY@z{7Y;Ph0jI&$_TBUEdgMR}l&p3;i|o=<^z^D1Ao$EbL+L zGPh#z28k&fT1nixLVknGq5mUtEWgBe*`7JjpZ>{iBl$guEOIh@n6RNtOxkGC`wil8 z4Q?yMF8!F}4g#zp;^Rnke`vN+ZlPP9Zrpf+-CHrEHd-sXpo#c2X7r(r4Q=P779AAg z*I3NQGi#LcnV-D=`t_9N^&hwuRu@iMx_m{If>(C7wzf9brIgGEF>@*j=zbYa_X#q; zvJxz#m!eT+#1T`vH0>_;;zMs{@(Ki|P9ctK4_L2?3;R>RKXCnc#p@CUJUZ5+7E>HJ zc;t~iurfQjar63c_#9-ayh^l6QtO#Z*pl96BJ6;W$ZN{!U7^HPFetY5;1V17Cf%9+ zHt*E&`298&S3g_Rn+bZy%?x$Uy0Q9%u}qexM!nh9HHVrxjPRB)=2!HMghnnS(xon^ z9!kuuuIQ`DVLMZOqyzd~GF5t7bF0f2FMH4KxC}SeD}i^fU7Me~qBFgB$(q2+JPGFJU}Lra)&x(Zot-6(j!C6t zsG}#}>%E5(PTOP>nNTya##k$G`42kCn3$MBaf!U|S8s$pR2C|pEjP9n6^2+m-;|z+ zOr}IA7iTmJS*VF-ld+DJ>ES<07EKKTeJwLP;pOB@-~?OVZKAVJL3I^oRD(t&+IZG@ zF-(UAAlRD0Jwx-qzHDB^FPK*M39|U#H$R7UgGh~zL@0D4u}ycX4wqwZC4tk?yDQPnxgC&WJ{glp zIr0t)i+ieC9dHE(X(8n2tuCud_fSNA;E}=(o5)xIo~qq+2w^S*!)Zx)iKp&7tYd2v z_e=-s4Xz!Ggnf)RFi=l>dU+cD$jPnJ<5R$*?fmpQV2oG$oFITOL>RzD~aqBp8 zIr}(?SnWw{xr#H5X4d6ren)=hYi8b{C*{w}u6B_Lvfac#iaByvl-Vq-ZL)|a>2Qv? z3i9fMP>ap>3jIn<34Rs8)8!qTdAU#^tkNpc#F#rS>LOLeg)!ecBcXltAZ6aiIOx9O z`qUd%!mrq~@X5rXgiOZn=uC@gCa=Vc@Dv4mZ=Ni#nYfxTcnU%{)}MNcCZlPoOf;ie zGpKMQE$y-=^!djaftK?MXu8|YME5(CQv%TiGS z!Ifm9=GmCeHoES$WRqOBY;;@j+|bsA3(0CF&)VDGP2BO4Fsk)M-UBAAhRM>4PA?*Y z0|R;!f-L2j@Qb@NSxGOT2ehp9$9_ri94v^NvKgemMVa}%e=YcOk-q;;9@wL$L)!k_ zvrq@|?#&^(`?7H~4KuU?jlzCZpva)orMEM-}lQl=w<0FnGNQ8OiNw+jNK4q~2hxkl@&{FEO? zQ<2UnA0_`vffBIEh#acKKnMDXvu!R-@)A0zpYd5pC?}C3JcfZ!;3ODVgQZ40(X%8{Br|4g81ep&UUd-5e?WW21tDk`R{ zL9cqF=!O`Ot&p`E8;LwJN0Xc&YT1j}p^KAk=k=mlBizGkrzQTH6t{^5ja|Yx&YQD` zLHO*r8Wja=}6N#*wh~-o;D7ywk@v zHxqt2hNg!5Y4T7J{B;HBL||JGCecOI(lSbf`FXwG+pF{=%W+DAb%_YU2t-2D%->XW zQTt$Dlj+~s$@G8J{J;00 z_~*x?YbTn?L5e7tj zo8s?$^u{2i2woNfcdpb_O*!aZaop5(`_CgyvPPaK+lyReeF2>ENaKoT#P3@4GZ+<| z6rhl|Sn0oAgD7k!&y@*AC?4FXe?^7Wh6>q;_+W6er!3td5I%)KTSaA3q;7rWaQGey z5FwRaxq4>!nkJz@OTM3i=nX&PS@YaT>uBfVl|)s@bh_#dhS*D1zBf8L3VkkLnjgq? z&d#n?uK2t9x-YE_$lAYTgGYngbUBxPd@D0AAoB8u&@LIMD1vtTv~y&AVR2Ck3cJ$@ zuI8V(c(lp(Oc{-nOUdQ3&k&n}tQoNp7X$0CkwA?^7+Vj9C{K-n2JGjb@%*b^kHblb zy(}ZbLJKaqJo2oNJuDEVO-|iDwYw3ko0qSyl}Cx8j;GnR4A&pZ-}9fo=jD}_C7g+d z20<${?!^dn)2m&6qa$P?Zjm&^E{V^-a|U!mpVKJsaEPDs%})I?1%g}#>C0tA`LF=( zn*%$dCvwwVL0&=5;j}MHNdC!SsYkM*^3{XXi$_gqCE*yG<>MdE*2CqeNt{dCil_0F zN7vJ2&|f%4z}^MX7kEgs&c78@0D;H_yKV?H_}p{59|$%KQ%9#(z=SGv-dHeJrdlos zvu_E}vKAqCV1R-|NhWETm?oXL{t34SblQ?o5-tubq@MulGCm`PD4HRVV16PwosL}7 z{|pz9`@$k4$ia}?(Pl#aS$p%!Htz3IXS>CA02pO$+1(z_<%&6 zvu*=#wPQ}s-e-a;@-wpOVS!M(cu9Av0YaLK&~nXK2xX6%=OZ>VSif;A@z&w(2TCua z%;kN34P+#*0jNC#oU%`T) z&*Y(t7Y$V#JsXoF)zM+^R2k$;$70f;uCWp&TP@=U!l*x zMn~XhX8u%RJZ&ClDPyYd*-qUfChdZ4Dc1tVCkJ`8)5Hd?(7oh6D)_7-LLL3$y|d9e z9BDpRO>7R~VvJQ)UrOPBcib*E_#d9nv^b9_kjFPodu?KC6N>~9%O-Z+bV@M#b8Cs8 zc+|YkasOkxd;XYH<7jihW@_-(6Z2zyk##k3@v``2X#ovLCfoSI7(M<{78ElHSOQl$ z7&!1E$&c>ekSdJ;dP|y15H7xsDghDu0I?a|r1xfZ(cHd0?rmDK+P`{*I>07bs(5rQ zfHV4x6HJ>p$zUKuDpN>jtjHXCsO`Z5qJ*oW&DwM54AVeTgZEqd5PnHd?M3r{UYz-~ zEfS@dn?!lyr);Ovm?-3j1X7fU6sV;>3y>p+4Lu`CL2%FcxDhiIc1>}U#xldF!st{v zWQy7MCBwWr6~#)10S9C~`_$~Lwr7n#D}!01u@eeSgYe+S&fa8fr47E^*izok^6f7Fu{|T9Im^s zB#>*Xk32Md4y#n+l0s3aZm~^@U)WAdi<_9FMw|#0XATXM3er2huWf8fuyte?$iJ`) zo@E&Z+9jhn&X_Z?tN# z9AG7u4K+J~ZRT28R8wHZGVPF5#Wy0hGliNT*uS_(a570n+&k7v|B^(s@sRPFCVCS* zW)Bhg4Yt=-=lYkf%=MS&MMG?)xv;jLLP%_L<0-bV_(IHUlC+$-2g5fl-K?(33$4;}POTQl7~tX}{<4zIA4ND3 zhuGj5#hA0pNu`U7xs^OSt9LD%CWPM^aEfECxavQs{%qOaqj_}`>T_xR-be}{V}BR< zYEV5s)ziLHD*XEM8N{Y0mu}B;N;j{hG<#IU?}Eds`=nR!XO?7mv(?U~M(^LM(fb=S zSIi*$`l9q-=%l&iZ@ZHxwCd=Ev<;taIzgiRNMVX%j(1v@%6S}XyK7cy5*h-RWu0&~ zJKWIMd%d8|zKW0*LXSax&g=hiiML9see9s|RT!u4E+6=*`9(2*K}6GgJQ1s-2oKQo z;|VQ40KBzr2qSQazdhXU|DH(`qF&uUU-X;f@lFStG^%E=1 zgM->wJbqFCxqGl}EFQ^r>ZxSM&VGx(XK|c>gla;e?STFuD;w$3;qF3zHR0|ZF8dt_*D4hJwlv3>7pRQm{iha zbZ3gTEz;cO%Oa|!e-SIB>wN6(Y95p@X+rH8=A^A7xIAWOi$G6leNXC3=F1a1XRY#@ z>+_8*PfovwJnw9qsclZGhB8_asd^9I?)M&gsMot4n;6O(ZKyRQ^&l~`l_`0Ii1Sp^ z6TD~dCXeJqq=?i6q&1VS>`Rh769*^Sk^PEh+-`2}Sd9X+)Tq?{yIM8ywm!9_IE+0f z%5q~;6aC)TWv7d?<)()FqL@JBV%AuyZga$&+?)7?mw}SvYUVVX0ae}IaJYXdDbZj& z&9CXrq^S@*Em4CMH&F;t69;efx6BwGgDWZ82775-cgpxu29OK6J4S>@1VHA*{Y(-g zV-7OEGi76JcGPdq{3G_+Q!}qOlkg+DhX2Y`yEj{^^LzxCS-q_uDbU_3$?StEXb1SA z8dNBBhy@pN)8MEdewxng?m8%ntHL(kE^&AGxwyA*=W#I%7ICbf1nf5ROVbbmhx_Jk z+)Z1*r)AzuzAMKFL=%&tSiZ-zoh5-OM_J3rQjSaf4_V{&>o*@5kB(1P2hT-BJ#!R3 z5M?8fbcD}XS>U{u8fG4|Iwrlugfb7$)u@6NC6O@4J4w@;s^5*F+L2|zb>X1VHxzdz zH#OR@O@o1k52KG0nC^`pe%QbJw{P2bJaZDNhhX7x`(GT%kLOMh_nnhSpzXMUin zk4>n*b})DWowL-Q`3DvZ!r>O+q^xm_QRp3->w>cEGjGgp_z!NClb7pc79` zysL?J{gRgx3qLG9lh5Yd-imqP!`0guNNF!LFD%4AICN0s5vY2Y1!`Oo zi@jf)5m@dWT#KNjOhh^RYTRfKy`sh7S$C0VME&nDh`FP+lg3VFOZc))GJ*zFBA#?|Zb6#fTe9jUzHt_w z;slO_lvtERa$=uf=BcF^4s9ucG)x2!XcXWMGW;(bgyV)oQ!9c84s`)nWO;5fCV8LC zk#Y8Ex_r{&0TcV#8o%VOzB%X7;pwqNhk(5_>m|AD)LRS~_dzRR z^r#xJ!n&bp;$4oiQ@rhJ`8&3%UXm;O{LFu+>ij$g8_tM^N7AzLib62}3L#K$`bM~@ z-bCGEwP_J#tr%!|d546+VMT0%jhGDuAqW_zYJc1d@w6mN-1ePm$UTSWlKz`h<(fDs zU~?~Y=WSQIFLZb8&xC)!d!3h?iDCsL_GhJ2Dq&Lb>ebbx*wUP5AANyNev76Nwh zteBNTB_8@{v@T>COh(_M>Ujn1j824?ns*lZ-WaaE9nzZ-p~=`-Nbp`!cQldGud<*h z`B*$+Y0Mni{K5EH>_C}pgq{1TuOsWIsb1DVw()RnjrTFj`A7aIkUrd#Tq>sUVPT<^ zV4-yCer{j6#OZL$((v(Y9n5YWA6@5rU_kM@l*Icow;Y}`#%FO1M#8Q#^ZHEaMjIBw z&q*6Q{(X)GPNkBZky{)lq(QUYSqeZ&VFmq^r~zJK4A8|8BLb;qSX)~-uw!KR-~T(i zQ~$bp=r^hB`kcPopPq7DM>(X8JyRpQ!Y1t}&Se9uP`5D~X5z90P^92nHiyX?d~wKD zKF0{k0w}*Xl~&ep80|c+oKL%6SwlH9_R2~1iWalg#doG3&q;z}Q&7a~RmWGnTa~&U zh=o1xoPNRdA?AUN3&QayK@g01#408RCPvH&a65VG z`*=gxDMQRxtp^`TUmHnG}Z3Hz5V_?brznY}%M4%X4^sBItT~Ae&QB5h5;ZHeWisqDM13Vvqlv@3gDl z_XF^)Jg3SL1kuov^P53bN&lAVTK>YZ`!e)UOlJ}wzLvPi%oUxGeN7f zW+UCpGh^(WF{;f^xa=Nq{r@DI{)>VjR!6Kx50N6!l<*PFMIL3wK5v^K1wh`N7!e&a z8mw6x(7XLGOO^k0_3|s9oON5JIb|ex*>u2#$5Z;blZM?*jfwOPUP)!P$Lt|sj12}SebV3Dg? z^+BGEGH6x?CgF&WnHq1daEQiijRDvu{UD$|NuSYolPo3JQ8O-*;LK=;@nlaDOI#(N z9u1_LA44P3S983Hpte(7_%;2(`+a({ynN@>-~F4%s#2Bz%^rP_?nrT&ZW=WNsp!(X z5#Pt*%O+f6=Uk6WL&*wtD^z0xR}XRaQ~hHTIDSoCz#BxRKg{a=;hDcW^?V{^_2@lM z8lYAGO&>m6_>^f`lxyTDv!?#88gKbV)at0W6-iC!f04TLl$%h8%HrSWS)`b_W!|9W zSI0$Sww$Yu@`j7#(@KGln~CFTN2Ed5(%7`qAXks;>8ab>5aWN3F_S1USsRQ_Xl3eG zQ$L9xjGpy>-Xi!LzZ;q}B*0=2|ADIB0=Go-72UW`EJd0{7G1&64o^QCfA~&tOLPUT zgqUe>x>!r;)meuB)X@;s4XTE0mFBK*RP*JlvbM2F;nhllGSL$G z$bNALwjuqHoHP^QP_acwikzL~hC#}d#Y)E|<{bl#&&`dFBda;!pg!ib0RvhEBjpla zJ($*q7F>jpo>gdMjHGfGKOA9*GrTcu+E}M0u$r|eH*E%ZL=yp#WZs@RiNyEx^WAMkoMo3Qqxic ziJ5d|p{xtH)?4_f+kz7@71*kCv&%a3d`yHZpbb#qb&3VtG3Cr+lx;S-2P#Rl!7|ok zZ3oujXJJd2F=PHTgKOw+37{AXwvOmSpF|HCa@Ih@%ED}r7S#X`#tQ=IH zyA*@TC($a#5~cWYaLt~atKueKm-g&;U3wD9!15Jz-Hz0~Mm zv-o^%$#-D9F34bp{E>QkX?IMQ`aj`PQf>9N6xx@>c^=#ZV? ztwY$HnP%#ZitXo`x!JnCW>o~}T>HN^3cE(YOtv<9%hjH)$)B9_VtA}8q|mf66+IQ_ zU~Y;gqday+}Wa@DQB!XBza^GwDcw>l; z^OU=_{P@bCI-3BjiGs=cma$;kZ_haEQFX!Kc)?UN=-U3o?wL)qEBS;Rd=BMwWw=Zj9l zOk?#hUsezE3nIFoG@1NARwwm;POY18Q!`Z1Ge$`JY3@s2*({?aAW-ihAU(s{E$+(l zM=!L{OyYF~8c{^ChxxyU@TzQMtx#Af3NKDHu5A+<>ZNun3|d7};bDGc~(=lJCG+5YIA9*luT+Rth>yysGja-n_rY5%f(iuFEAOIESY$$KwI=9bSv z>W4k6SeQhM%a+G0w3{cr35Xb*%}{UEc#uQT2XDDH{yuqGeSOFxq?1r zVf?mWOrr7}PDGL{SYVXCImrU~bmIq^y77^d%MBaij?ZJOXwv`+$qhwYC%cNWNls z{4dO`%PuCH@KGpsK3!`(X)O<7m(Hs#-s{}r3Xw3T63**fstOn0jjGDesgK=lM?s~s zciid^C8E`mDiFp`%L<<;R};^~^U(YzuE~rC1k6pXuzg%Rp3z|Q z1eVM$qT88ltk!XTTww{8u74Em|PN>(G0 z-DP#Jb%hXF-P6$>POGz0qhL(JHPQ@0XOvP!7sej=-OOTK(0-Sxu8aA5(l+gV5z1bCS#T-gJ;%O_7;FU=XiZdMNT~@8T`0pNjmQtU^%!$JEg z7i>_#$t!&qGaP-Tqf^q`xlQq!oaZGMn>?5q#F#MFPQQP6)W0gal|Y6sF9rhul$-hI z`Z2?7Z+HG$)K*#Jm?i_5+{5U}r!szu#~xr}_g~txs~8N1*R2fj%^ALwN$y$QAth?o zDd%W;UwYM5#Me}gB%J2#HEg!clb+0679;tmtd(2cr2cQ2`9h10dF(MaHnD-=MqHwb zkCBMTV=J<6RBlNnLK%+fEE;}PBsI!}`Rmm%Ow3?oM>Wa);mY8nDh>We!X7sa3p4z#<^M$xx?p?jS z2o^k))bJ`&ui?Dw>ym)I1EK0UdE1uy@d=;#a7Y5h*`euTOl>SP!_;-Y3X9|U#89Il zbWktxabmGfNF3RIIBhxvd9Zwis1Eja{XSfwcCcS4Lb_wHh^&4jdStk(j)co61-iLq z1vTnED)l`X%|AHMS;f6WReP+d7kUo)g}-8?JdFWTtVHf(BViw!1>}1G!&SyL`zL%V z#UR=O?BD`mN#18y-Oz8dT%WXS?T5rsex}(P#B}O@6kU-*IY4c$=ZRbo;!)p377K712q^Whk$EoD?}(vF>8 zyslPk>7Faf-(9jPiMlMTxO4g!(A=zGz!<;PzvF-UPvWJSWWYkp2*&*7ZL#;Y-mU#h zo>=edwJ3R?+S*j&Wdp?K=024izg%R6b0C_*#EnT8HwixuH;lg-WoYr{hTVG$0{iHN zDRsZC(m3RB$qmpH3CV;L#-&YGmJ@eV*c5})y{H>q9DlRhB;JUr9F?LY%J@(Fl=6T# z;n2a+f&FFG_6Ask~L;ud3cPtn<){!n2n$jQ(lrYX3GB+u8y6WCFb##l_UCv<^Ez2^x3 zcw^^^<&YP4h7%5~2rSkYSOg!;(a}CYL&)*?ofK2D)6pgYmHeB0AS&7ds5sRMwniZ+ z+)BEXcJv-r!dIu!hv6~hdqO9?ki=<~!P?`NXJ9A7A z{R4XFx(?k}&pd0U;79MD$Wxwgry&Y8R%&reBgM%SzAm!wv{>(Dk=%1j1Q+^ojVhvH*fS zeGcb(-+(C_n^c+fQ{NW0qeqe}1QO4a+}I)24nmYu|2mR&bbVs&(yzaI$t&nWY+|Nn zML{j3#)KM)lq&Dc>i|t>2Gw!G&#+l4#RLm)RCh6)H6LWeRimxK^e)}MZ3{zH$+2=L zeIa5IeT0sF6?BpVwspjDv$GJ*i%0!UJEz1HY`lb4OhN z>qYjzRhK~3G*Kj*bPg#lxClEWzCSe$<8DMJOr@3XIses6tdpeWrc*uwFNF@ByK(O5 zIwodG;34Qx%+%Gmxm>ue`5OlXPf=mNE9uJ|iBT#7_n-C0=AjuR`4X?yw_n>J3r7;D zM4^fXk&8s51M|a#BLZ^iQq06hAEte>S7=?CVnSfIr29o_HI``{NFaQ93YUTO*fL{<2w5RB++I>bZ1c@RfAo|1f-7O@ z0^~?xd)c2uN`)$6QN?O@FYaRU7?c=8BjsQR^9j_{3;A>4j7B{pe zxDWxxMoiPR9SaqwiD9sjffx7yTJg9=g5Uy0k==D&%9c;MLtlKk^u=LKrF@5I$dnu6 ziX>v%NJ6qJ;#wvr(wE;-w4BoPjOaF!o_YNo@XtL+!d?NoZ~(-QMB}+>=SZXJPAhdq5kpuE;7T|RH#h+mi=o17<(e>HgA4n^nM}XHo>fS}Eoj|GXx{Di|n_JZavazl> zI931eV@}4}Ov-++hzp9kaqGeUQo{c4tjSx7o1BJ4n37@d(h6k^5b+E=4@G|+gq>dRn)dam<(7 zG7;j>&ipU92QwfWTdzf)Vp!&8H|Y;?Tfn@C#Q2E0i8tzv!ldpu zY!Q#yTZw-)ZBg78w#l22r~An%%3}4tH`9+%kh7D|ZG)F~8vv-&iOot$?x#iV$_LL4 z*88^@MG9si6ekN#Q2_JVGj2y+x(DoHi8At}eoQqKv#B&>>hW*981MHB>Bma9PX!bo4>m^qS zvLtdqTzrr8<#OnJj{ymkmF#NJ;w5L~+lYgc8tvbqw|f zC-f{EB!rKEXGmQ}mdGD^#hXRRyji)vBz5pcfC*>#%}>1_Ac)r*&t^g z99wVxlpK@#*#|uNL2t>1L!z&=qxSmoetRphNq%j#V_V6JVOLp8tL}7jI~+Ni{#XSu zgTe92@{X_yY9xNf%!wr(S|ZIuOHvcuPiUG;Ci#6rPs5Q zERCDVu=*yrGY`!?0lR*3ie0UY1!2`b#%T#R zl}&W_>`nnr2;Div3Eqyk5~7QR6lUqL=D2j<`LO?D2q(&^T2>lIQ)mesrY8V%#t?gX z{3SekuKvQU9eOpUZU%Q_v~xCd&al}Rc$U7Z>t!M9XklwEP{2j5XPX>f+}-%hYbTk6 zOqfY9^866LDP<(adCTLY!b=7-sxv z7^Ffopt;xxxX0?s2SHatfWtLzoig5HBAY`onNo+wLKFLTev=25TAAk|*9XLi|FTI9 z-2~2{0!%5(InH;D%Q)=x;dB#Lhd9^_tqbG|MbJ=D1X9LKpB#tBswE#XVTh&`iw&0H(=3zPc6Q31Lf<{qYcFte~vU|ezpL9I5R$q}V*q2D>KL9Q^=kHiL9 z>}kTD+ttODRax<`6Vy`{o9?a6%(5H<3DOqo!T!{xdfX@^DNS2>ylj(h0v!wawZ}Iy zZ>Rsjt(eOw$48%qc^7Rl>+kJttY5XE6c-`<4t&CwVyL?=$bQ#tJ~qjTZVu)drVTvA zRYE|ya=@!zUdgVdX0q^r)EHZU2Fm!On_C)-CW$osu%a&|X4MPDd$t}==K#h9O(9n7 zDU)9YmfpAs4#7>qoQ%A|2D9_xmOj6}8m+_z5c1_Z83o_-!C zU80s{vJE)~1d@*ws9Dgln=jqSQUeD(0CCiS7-Wrgd;)`pw)#OZyyEUQHs_a81eyv8?F3#NX91E40E{8C zWu9@ox!x88MD=Z~RzhM?{ky&wg`EXG-Z5$`ol78;?(cmqVrJ)cZRJQ?jOdzqY$nwh z2f&b&V|6EZO+4L_ql&zwwkre4X1l#Be|Kip7S{Kg8Tu`v1wS_PKLnG|$(*yND;(hCU>tcKjh%_wB3%gw6^-dvhbC`)`{@Ve=M6?dSW=jy5<{T z5hu)oUfR({y4Eb0#Q{Dc{8Q_Zs6bTyLR4WQ$k9sF?6!zT#?B#X;6+YCuT$w?rjrIr zZ&*>_g9->^Z6(QKP`U{`VGEagAXc+;Qqtw<8kkH|_s1A9kmU2eR&Ve=%#wwJ2_R6h zDR3;COfbY;^+`Y{5alHN%wVFMTc68W4ji8sHPW>Gf!t33plJ+@acoc`8r#Uc_>)lts*BVy7pLj)v z12c~V**$ar4_RWwdET=X|uTySmYg@!gJZpV(gGuhp>+9vH^;mA->JtfR zIt+VJ;uMq;9x!%v-M1c)oETLKl;ymHH`D2ai8;l**+&yV^SNVu%|{JaJ;Tgw5e6ot z2Ns>>PEtoAO~R1s{5`TOZ|YPYcD@1I)B`obsO+d?cGUmPj=E~%&xp)({i*IN_90}n`YHpnfp1~wDZQ*3mgRj@ejyz&QesS zL{;=FXNOo_w5!=oVQC-u4+YG9qTb%Bf8Q4`|CS3Z=pcq=e4eC0wBBh>3;Ypl9!Ft54(JC@XiCuDW&He&U*Hm+XX+h^mfY{DqM|IQmjIjz$gfY(|KpvLM)E5bO7 zy0l**B@&B)z6Ssi`-}e60)wbw`Pl@|Yo-9JOYofKEmR=$N8=dOW+XCB0KZhzG4xQl z14hIy+<&l6UzP~FTTi@og|U?O(7}!>Ygk7cMrMfCNO$kpnhRb=h93=Iz$F3G0ju5) zmJAib@)=f>lq{n^ZFzoT=9SShsK#kI-dD-NcYB93~7IPcCivG6e z(zi{n4br|sFCM|UUpHrH(NyI(RhIU1cBlN^bG?X^31LSWO2IeM0+PIfC%AukCp(gh z?oms6AcAAEwAds*VGBGo!~#R%K`%BP+qf~u-yf1s=)NLf)2L{(pY8>)9PVbi`i{nv zQ;uw=)5~y8g7^3biC4TG2yvwzF|sCKZbm;e>wh?8(NV!|OU}WgPuIAImDC+XLDbR7 zIy*~fVPvT_TVL3jG6dzA0z#}Llpgi=TqwM@NeTD29?D(K&mJD8r>i8RH@I~x7LG|qasNhp z7xd*J@|NrI8l|HBiW_x#?;g{#(Ri1sOQF`09zlV0Z$^<~`Sj~8`3(I@Ju|8YbFXkc z_EfnuzP@kiHe9)xhOxERW(7=`g3+Wb%SfH8II60j+1#_{5d158^ygFn9Lm!?WzNla z%=}2RyFxMgk1~TaQBT2@v*@E%2PKm%LgEmtZ9*v1T_b$yiSy-xgYb)5?|S=a#QI$s?B?f5HGf>24Rh!wHYCtzk`%*bT0!-vb$ z+`pI^*LylVFy4!eyr3_nIJfGTGYV^3zRcb9y}4#Qxxs3D zvukkZi|nm!^~<+y2mTYLAtf$_908r80unaQEJktLaXPkgVo(0Yu6(SBm&w8dm}vTYRF#XTD0g!wSq+b8TJJrUmLJpm^a zQ{gU}BPgR!YGGkrSSC%Li%Z*Ev%-Fr=N&C5Weqo7zfOJKP6aXLXUupqi609aZdIE& z9c#Cu(hoCvL)qcj>zKW?V`)0ec04A%-=rBnpFuG-9*mzOT=4#$@+XP{1c!__-D zpU7$giJ&HS&OT@^+NEen>KWA3F6dpbzMWT|w%ufn8-n~=PrN`*GV zxa|jbb_B_wjV0dRP1`K#5RU;~D*y)lDE&*x& z+QzzgHR=$;2Nt#vXM0DiI*)DBQ0nX4aqq24<|t^Tw6gFx7JM!H8IJaL*Ve9FE$rXe zjM02}fE*{sy(EMaa(^1s6Z&Lsbhn7i@CdOCjjEGXmkjmw_894!KC{DKATe{esNV|f zk9uDd2-Q1&omUuLcT-wBVJ?$wl;STu7)wY?kIL76s%7Oy!kWpoENt#lUWq}354Et6DBdyPBrA5P2dSrW9(R<5_j&>r7SsOV~ARcIrwbs zC{fAq%B?dq6J>mK&I{p#(qd>H zVjg$zjGM9wgM=;8h+ap;^o9ql^XNsq5mw0&`S@egGN@8?K{6N1u{#HTJzN&Rtj~2Q zBSUizXSvxrbNft^FBRwLtghl;*KL`+<3Gqj9_zyL6qpjYCDE6?3o>*(eWI)QV?Oy; z>c#`DhmNUC+gy_SbnM)GjEW_T2J%>yxrj<ItsTzkVRs=j z_$wWS+18e3pU!64VA9yY(Ok=I!BtOBsj&wT0K>JLdj7(6{@v@p&cB4W9T{WJJ&jXm zCY|lr;eck(JWRJh`(^@b{`9yTSF z=s8z-&rhyeY?!&y=e*mNSYzY+L#4sjad-H=vMQ&&=cv{pY_1n?KXM>^oitX(veCK$ zQ3V;-MKxo|q%bL50R}RWqA|^KM4u@>NGlO=SX{cw)L^0vo>cF-kovX?oT|1|_^1Fk zYb!&?%!2|VlM8rN@o)dBt5>YW+T>+^W5rWJAWtdbAjIhkuf!4*>V*l?2+gMu*Q9@( z&)v~fuQoMI2;Zte013Skx)5-(JtTnw=!OSVe(4{BRE>mkBe=o+CNmDKZ-`lhbFhu^ zm)UdR((l1)VJp0yTbW&9F3AR6y=p-yjlHq4yE|4a8nhHF8A!WVHwgUy5D`i4FV&(N zFr2t zT7{9}68wiZs&_d&Q!hckDep|#;Z9*yY1yf2mA&qMt&JhcTl;vJE!a3^`i`TWrz?3V zX6+O##>#C3=Q@`Fr#7EpvQziv3T~@3EOU%Z+&TS=gAvs?%)as7ofW*46+k9h&}_)b z*b<^x| zC5$PBT|Nzu_}^o7Z`SWb7dq&rywZvTIX@Jt;($Na7VST3iMpf z$ken@r93Kuc9msDo>#z09v}dhLIpKkLIA>;1GNy8pLpib;1{(IO2CxR#A1M`n1Yju z!EnN8@WvY_SbAyYu{(jh|$E~P)utG&;=iTx9KvCOvZ#?K5Og0up>BQxWZiGY9f6`w z?IOHi@0KpyIxC6?uIfAjR?fV$xx&g$E;}Y$_@JG#L$vAnB>}@ydh)&Behaj=_(W?~ z=mK8nXUT2jbGH_jEv~y{0A4OqR}1HP+X40O(?6-T*wB=@l$1Z5OpNlrrRCjNHQ2!5 zIsarnt+pdTqEVl8#!!nPhUUFDCGv>Sh#MpMMleZyDht?SnK6KJv)Pbvc&N z0}logp^Dh0;CQ@Mfk#2G`MC!y5wxsW!hj8z`8P>k#~<(>mQoCuUNfaEFx%8MY_6rmQrIJtc$H@b(|o#+DcInw~Rl(xDTrNiLScI_f3!q4F4$*FU!xr~8`I!}S?+_Y%KN z9<*T|-f7%|{}OmTK4~ljrtsU8>B7wTB#f8Z!Q$1t5|ETC$P0SR9Ur#!sY)!h&ha{Z z4k)+A`w8AUOJ`2Pz&fH_pyE-dX}Ee;)?zVTE99B9>vXL_oz`xFQ8yO<&dM4f zN;!m(i?~auD&nObOpabiep^E%F-S^MpG z-*Z-6B^ZgvM&nKMy4~->RVTonz7A7j7@ym`aD9Gxy#~#N<;#NlPG%#8cA)M?@VL=~z=yrcgSOu*|vllMx zU!+knRH}~nCaD2Xk#_s`t-;{+5H`(FOpHXT*fdON%hs(GUS?qipyLkUCK8v#~ z!~R7!;WcrXFN(uF%_97!ng7;Yg#S$}=KnqC90pt!YSe$xHT_{_Q6XFk1VhIHhC;Za zXIIP|BQ8{rN6|2<;xzcH^Hq(=NJx(=jIx}*?3ZGITq>`&in8)#aw5SyOxDg>&4(@- zI8|cS+CRcs!P7fAF^0mK=i!>*U$iVKIJV|EI=F#qIQE?F!nnuZ#p?6mvic}#B6I$T z9gBaK==+sEeN@qLgfU?-rSTxgAJ$o#zOENOs7QZ5YDBPeAS(xWIeKw$#9wu;K&N^l zF(CNE110%d*7y6pH@=b5xgvR5ds*0OS$1BcpGZH%WD=l#f*R1{tzi#rY*LqBGA1e1 zPISY)y#Pqu7B&Vn;T;K7Xykk^IAvTT(3aMdRI12{CfXP)cX`ov;Yy6OLN?jht-ufa z&9)bjPps!30+h6TB0o+Y=4Da)#Je#qW)95D)wpaxE8jWTJFpf#Rh+3)pf9-bI5Sd_ z=nfga*{bWt*Zct*Ctv4I1Cupm406YtuUg8{_`nC~56DVWTV;}nPC^lO3W(>-&0Mi> z@1MwKT%UPt<~{PO|B+cwKV;(j-|M(L4C*KF)@j-B0Mio+{Z?6Lb8z-%J6}!*ER=>&-I2EE};JK%9Z{@=+^IFxf+-m zJofO?;zm}~46@!XBOE5Pdl!tkTiZsX;4HP?(|5q7^~+;f_$NoJ5Ci|>W3_cF?<`Ux zVxl4#F@)d~@x+AyCrJFZE|4hPjjt0(2jCwzVnN#7Nf-}%(2ZBoK@5PTWY$0Y34Pe zHQ!YgasP>mxPK5X!vr0Kb!|#$Xu9I0Edy9r8sS?jw$C@$3eJ`D-Lpo z@x;F>LEo&ysPvQLGyIk0S2*%mw9kKn*Zxc*HoR48yXo4F#p4B}k8y;7W9r+EjuC;2XeWs=H9SI z0_d?p2fgQGf#Fh#eVlG4nZXiVcM%%|e69*&aSiISP*>O#c&@*m+K@|X%jd)}6aD1U zX4WvgP1B&vD}FY!u5d5N8~jyc$FIN<{^$Q@z+)HBM!3);njD3Vgn^8))jVhDHUGn@ zF2*eFkKY>nRGb`DpBMmvaVmvNM3Zl#Z^PsT*MqpD5d`$#Sn#Vi3mkAcQ^3D`|sz9>rxv*vx8-(qSC*hQE zRA&JCwQ(j*jwd1FIIMJX8fGk3WLV}?ShGCxyh&;2t(1kggT8veG=6M0qH8uF4oi0K z`qWHptedO3v67;*N20)L7;ryY*uxZKMOPI{*a1bJPe~4+K$zM?*9sb`-%T60-#m7N zG1gtHUJmO$v$-d&wmN@wJ@M#;lqFrgx+w03`h&?+7nPA*xyBYS$Vg2~Own}f1}H!jQ7%fr_jgd#lX%lY`m z!J)IU2XaWif9+~~?a76Uf-^4dsZ@}Nf90Sk>cQ+PXB&I!YZyGsC*o%(#G3IA0NYb9 zts|DOwlql)zuY`Atw@?T?PH6m_ z5=5~e-E$lFO;StA6kjn0&iX2sIW$Um&;v&%gy8<<=>~PYwW->32UQc2v`i}f>#_>AAn1yE_F6&!;>*;>B*Z9tohvH+{FvR$B_&hf(-E#$c(Nh z9EN_y^VS(Zrc6x?u8m&(w^gzlikEv<@pJW=JR$+~tC+!;!H`nu06Mo>ke7)(E{t2# zl;tLL$?9^~(>$4cG>n`k21*=(-{H-~@xw8o91iQJ8gjO+*qDX;| zer{oKFC{K?3?!xP#+)U*6OQv+3$OE|ca*YZ7>Mo3!DOpdf_8!Bo1U&0Jni8V z37YuFu!c}N;S-|3FTp4wRImSz)=;LeHF+6YROy%GnjPgN#CiY$J@Ij&_nbNB#F47E ze0*Pp8HZvryT*2fd}iPV^R81PQppq$`M zHs;?~WAk=%8UC`o^cQ>m#!c+QP^bZ1GbIZ$L$%ambs*&!Wu#5H7nutZGu0(B-@4EymVW2gwf`5S;1&v0vS+u*{c$nM-_o;M`bKbDa`_!d6+d@M$9^e*hJ zt*mKH1kUU^3=_JA2eh23#&@A>2R6N!?vQ;Zy-AIyVFZqPFGaiNPHG-Rm4?;2MhFCW z*%rF0VJk;Gd#jV7o=5|YMX-qvwmq{quPWJnsqxDGMV3wCL8(SHLBM(46PF4~x~-7{ ze;QU6$muQD9H*onH|_6xot(^mHUo757=s8FI&rnuTVQ?SM?VaGUWPQnIdI7^b} z64C7f5J6w!!|$3KKAn;<#!Om$@osPMT%cH!zR!EQo`O5d?53QvKiW*GP_jQvoWyn` zP0o-6Ky0BTeR$g1d*JTO*V**@Go~MXrAHKS7azI6t2x2Juq?SSwCEsSd)OMQ zhV#oGzr&fYV*7AT051Gk^F?yl)E=&e?y?37C6hs_KDK61kfD;62vmN><1qqC@|-p& zZfL!uv@I4!?!%qNrU2U8cZJ|9%n-(}UdK3fF>UhZz58&ge1Yy;#NnR`WUx2a$=eQS zUt>RI0~)-txxUxG@xa33=0^M#D7w0Q@P^lC!c2G@L&VSD7A00IodC%>Ex?%slz zW+#Snrs2bP@W~35Qso=TygSAzGW^?BxcS%-&gULShp96nQl0e>sUDCZypwcfFCy?WT=97<{#!ba}qM2A7?S2_;;J*{@Tl_qzV06da8;dzFXiknww6 zG`SHEi;dyArjSXvw+8eM*OTYOh24}wA81v++3l)`IkD73d4hjfGb`W4o=w;1pH@Bc zH)nneKf=1sfhjvAwnH*K&2j|RVK@1qbNp&XN#n+I0|l<(teCjnFJUo;1+(B_D>ZKg zxnW2=SpP~yHDK?csg(kHTlq(L)E_&sK>R-KmuigZ-{;0go$Q<~JNqYGpIW*5;P%ex zi{_7wk`(A&f*ph1R9YG!mYwNBKOVLw>{XT4kZ-&USZoc6DZ65k!?t*W+`VIzS(F#w z?;jrY2d_?s3SVaL%HaJMFFuN2lwtO79H-)ElGOfaUd0hNZ`3=;_&4ZqXOoxB&$g2j z7kpn()rl#7cEUV7YEu;3>|Dn5JIbcWjLc*z1jb~6sv~sJe>k|6IOg2r#(gBHnJE4^ z>3@*~Y@#k}g?9(DnYo7UCr#jDrX6gk8(y%3Jhv%!T!9K07B@0MyVNx~`6x3!M~j;( z*wfOE%~L@)T7N1D|_Z)A#4C zb6$;FU_|(=S5rDNnYo}h^tbeeE}G@?0p09BsmkfMgPWzQFHjB0N>Tk z)t$EDxU=il_~RRzFL+*g(rwOO#Z;*k>Is0w8A}ng^Yc8H6M$eE z)BvL!;XiFalzwssjxVcsR-I7{L>p>11)7EXhXR0@P4#q2RD~h*{}Tx)&vAvrpwh4* zewFiKttkG%6YFbkE(q!d9ON+KmJt;-!YTF-PcNw5yO0`22eX0*WSaHIuZ`uDq|1F> z9T795QHiCt4k8ruo!;~0%63h?A&)Q?cmfp@IoE%we&FZKwthza{GXrsDKU$GRW>V1 zhsY00;M3RmBOHSE)1R)a?*C)#PJnb@^SZG2yT5Pu+k3ygopbt}(|u0&y?5?@wz>Dt zeqmr1kO7)*MxE|fL6_!0(PSnAtT_%Lm z81MN7y^{^+jHOZ7Wmk3KvZ%_ZUBLD{WEH%})s|#a5YKg+f#$cS%yezBvEg&>v=n-j zwp`4=UL*{(cmlro&QyMk&C8msz19`QPiR$m_<9UN~-=bDXwUs$wKPe&zei>Q*HhWI_q$UrH* zD-yu#3yo+mflKqs2-3Mo<{RO}QF<=HxF~#!JF5wqv3xjof1xyyR^`V;-mL4RrrE{72 zq%MRua!D6qcLlfiT%(?{o`w53-?fLy9dfNnlCQh_@DI~mI85rGeBSCpa&|pm9_sh6 zB#_GQ33ac;V_DC*-9xf)a5@p2pSLaDD-#L zmnr>*4=sD+^dwg$ia0|d6jegDs4}3iteuzeC>z9RelqFN!tvzyTdB?DCb#i;$k1_c zy5064uiVVE#pzQ4#U^6VW4SI*KQQrIwTLzkpp=pz9mFCc$o1avN#J4w(N_W8P}NEr zafJvIe32T&ZgMD_e&aJ;7p@GR!Bqn)v_w~c+o%)a(Xs+US}GL`E_2;=t>&*?soa~i z^t1}kJnP8yyU+WTIeU{L5+*$3SM%VqatFKNrtug=sh^Ap3GIeGkDlaSHKWza#gRnd zBzJ}IqW5MJ0p7ffuSx2#359X#x>uP zG_FbXcOG8o1)ty%S}Oe7=G1rH2?Lo67O7M$@kzS}aQTZLKC{9^GO7?oHj-#V&VDOyNg1}Ys_n0695oh##uIol=$^$dLiPuf1>hRfy#+XWfOwPo6=kvRYU+K z8;4F#TTg}{g+E@9wlf2OpKq(wBun8l}UrS5?or~qPrrW||I46dEFY0obUUXqMEz_)> zn``B_N|kX&(+tRhB9Q&?60s0G?a@@HXZL|L`uK+W)r=lw9-GXm}PM79gja1EYJ|o&aAgcCYYUFSA|59yz9La<_7lk@>L#+y}ilwO$lQv&3k8u%E2NT(<#m*ty6=HBli36N;-a& zkhqXi_9Ozg8aP?N-gW+gAh*aRa+$WBvV^g?zbMH|j@tvHFi(Dv*|ov`C`Of2#z*FK zq$K52Lmy5m{?3b*SPVwy6IC`I00t>O{qfE4Rd!U=AQmLb@yi}o+#kI;8WZN41_q8! zr-uX$0!baSDsTw97%*%;jLV{fswkPP?8!0sm-NxMti01aN2Zk~{gU6xRKNbF0+w6=qh4(JqrEUC?p9pO#BdJkyn9Q5BZ_ z3*>=5B!+b^|G+%m5r?gxH*}?0bst`}hR8{SB)A2UrI~cB(bLvLb(U2j^1TO#60UGN zULF4vQ5x^>5o2~DK1Es>Jv76pB_BUI?DIZ~YT1l`;2+j&kpor^5!7RTfAc0X+KYhm9 z_tPNQq0w2DBop|C(^eQaX1u>21loS{Z=-;A3Udzs^=XynRDu_P+F#|HBSZR`yrg&yGM3ALjvED1w{%f8d^qzkf zt~gs`Ght2>W5Bqw)Kl6-Z9s{B&TObK0kzkErW~H<7j#bmC=E0lp61y7MVRL7iHv$y zO7ghB)DN9gG%?h4Uw7PO`YE=??)5uot7A=nfk^2s$;=zH#vTV!PQ?SFl6J0Ee2^{* zE78rsa`gQ`0$>z~ywSSaeaEIrO(8Tf*K~UWNB={SVjAqDgj4&2o6&CRxCt&{-&3^? zE*9c#v8YIR>-3Eg!+^{>D`%D*2K1Y*NnyLaH|D)K76$Lm*=b(k0yNR^=*arGu<+PH z+Wq^6CN6_3NfL23fH8T(H``Ayht$pg@8tRax^ktantc;*>%Z<9z8U}(^eUVhF`WOm z?cu5g$HGkg22FI%QUwB&7%-iSJ~MfjhDyLLE_?2KGTn9BZ@FY4JeRH@SY=|nM#qZx zecpUtE`HDygeV1fA7J)nAVn!HNTw7el~?ZB*z*#m@j5id9BN8C5eSWTQNrM1#%xIM zehG?Ktj|@uXhs1j#cNpvIQc&*&@Yz z$H~-ZRM}h*3)c>VL;(zuBz32qOu|n1_4XGp_SOol$@K?ZSHsjIYx(J2JoTXb!9*%| zzMY4R04-Apvg_fs2S-58E0B!7X@6q$V)`>PPeAT-T?A^j_=m#&h>hVO>9yp2Z}ya{ zd8GOL@R(3>H_nA4lS6NZA~`=Mvr~wS)$We{4+MU|m2q%%X%a^jA9W^|h`@@puUG}Y zEo03!kQV!kFv;-r0$7vl%kKmHin#{f`8lhm zaFO?ce07y53o6XJsR4LyV94-7N_AELaXtU3E8PeA#)Jd?V)ys%Lav;%P^asr`&|Cb zJ>yZPWhc6uTfTyw6Aj}|$&Lz=OLTevAQv01|+o zWis4dq&K*@8DP_I>5ge$gaWednBa7F%mCxCx2OFNRCG&+TIHss`I_;gc5!n}pb06Y zx2cXOc)tLMd-DBgB_G!A|M>(eqNcxqM)=XBVSae!YM>gwnH$E~PO3}q{W2n`OFXjp ze6d?~^-$I8eS2ZHya35GhJd72^oO@V)IXeB)DnJW>l9bKijhgSlFwf4|K$Gr~xuq33cr1&qqD!{KLCtWiu`v?Gv_WO^!wn{%`DgiAI) z1BC|vnq7FN!SF<~$YA_ITq1cKloGcaF*`yVvUH<^9E~(~94u;jC4REC7vq9x99PR8 z9^E7TQT`A5$b98K&+eaH`3rIrKDzSry_MdzaC@3EA8D`@-sw*`DY>3jh7BNv_I%zN z8{(~P*sV|Q9!L#yR3R=WFG-|P$i4H|FmWIH&`u9ryF3_$>eu(i1z}K?6ugH$v+`WN z$fM91K7RioP0902;OLPG+{8p~7qN3zvokv#%B=PfQX`tQEDq)!n3oHoIzIo69P!xa zbu^b@4(R+T3v1EvfBw7q!FabYp8ntkV%g5hm`t|-TTES;(`Rg9M)vleczn=%%~R>d z319Lb9FkZa{zeglymx!tT{@`&4J_%xJE_n(K2KdH;O2|V8ysg5+ z>;3m7lg`kqqsnoR37m!rvGh2u151=L7{^%wXEE34J6EqY_nGtZBKYW)BhD|1#gw19 zPsJ)Zg@$4y)*ph<@!q(U?2EW_qOw#bW?~(=4=vk~MhaVEbnMq8dM44sf=8dR5=jZx zUCNC>^LC>N;`aq zUNsrtBBw*;797R$t5fNnHXK)fp*6j;f0Z2gnU!6d(wXkrcS(qknDqD;c}YIr?9gUn z7Np=FV9O|kxCYjyaYM4d=_3jK6&Qgu1P0^FkO_{PzqmKdBXQ94T|$r!+xtEaZLl+A z7U*MJav|vy-E2UYZUnJk2j4H^NIRqAUGf!(A4Ck_-W$ z+_{?{~CtaB(!jrTMME1-sIZk)t6>h?GF-O={?6+vwdvL zVeqxHXK3Yx2a*4%)lGc9Q(c}BgdQ4P<*qv(dx|38`<>z0|=Ys@^jiuP$-Vtfvv)QY24k{4dA(m zgMC}-&e{2Wa6VQ2n;snh5uw67%S5yg9|!1yxPKWLejW)HcI0&5ts;aHE3AJzhjkvW z;2g{c(pZ1!E6A&e+7S)FhJ>DT|H;NhR5J9k}H{TwB)2SrWXca zN<9Js47B)KvDc~4MY0W&ub6BH6%PD#%s=|krgVvf6y6fQM>+)zXuH+Ax!6~%#+ro` z46m1d1q11114NQ@a!cxlFx+A{T8MIufjRH<)$6(~O{eEkk26b=;u4D-2!+(dAt&#` z84>M*AAW@`nB{|k zFRi}j8jz%7Wwv-`*Dy~ScpgErX=GgQ7FSjHvK0VsgfOe9xieW=6=O`a-!Jm`_<+_8 zgF!PfTjU^Zi897XS@}mX6*TF69m|LXKif(?Y104t2vG|YMxm*W;wOomC`i}q^a|zb zXN#ntIeUT2i7r`zMwvE90!>`!3;(Bl;RmugpU@}scaQ`Byflo#$guhAFUg=gsYu<+TXEgWyCO7x8J z=;#P5P79v2c%Us|z7xH}aq=XWR`2N;0~j>YOUV8$5i(4O=cNAzu!D`$oBcjtltg7N zp|#hj3SrSsXP+I?px#6txqt_cDS<-b@8KGXaue?F`SIiFaH>5p9xzgIl8QPslm9r` zA^~F27kEP_P9WhlO**N1z#LPZEQ&{qs_58IRA??LTC_L8p-&6$H#b+;(?68or66X6>kgeHiTaWMh6^i^AUU>{kD+6oj302(dWZ z8y~cE!-X_R#+*?XquUquWVpR0^T#9TN}>$f#WMrp^!Blu;{M$`bKja}9uP8tH)ldL zyh2pQjn`PS>mUEObi}_-a=zCjo~&7!AdP;q9;HF0&>&L8loKDFopL`lq1l9v1*)2d zxOXe{^}v$iDoCIHhk@wHQufRx!AD}%PrHDHyg2{b^{we(du?N@OcRl*TepLZ(eUgv zrn0;xur&B;B*H$ONG42R007V?zF9bpMgmlC8q6NMy;#JpwLVV^pEO-d+u6*X<7;}K znHEVsX{b#?ywcerns>&LVXVe`&$K2$o6-c3c@jNnak?qb2?^<0gF|kr{@{8@+$1d?1&Scs06BXrtIAZ(h z{3iAUX0uSsfgcXT_8v_ai5IYAv@F70a*_*{C7i7}uS<3*Phqkccw?#A*6{9warBG( z-^a4k2AC42^Mx9w-p1Lj;pp+l()@Cs9wH9c!6lm@E{||6%p@Ej0g9XcNyae!+L*DVYYeYO z`mS!SW$;MooqH}7c6#SzXl}UcVDN4B9tTaVE-A%8juXzSroI|=Awm^Mwky`42<9f+ zc5Q8Ar#K$r>ZwxDYTB$}$TBq+wP*Vu|2JYHKcyG`8`MN3_dKaAB#Y%O_p#Mpj4d%h zTT`1P$cvGb-Co;S2b3j~860K~bzR#Y+;1EvBRaD3&FHD!Yaz7BI9lTUdqru>TpG8j zJ3qMl6D!Paos?OWrKU$%g=NTE39xytEI0!BdK?p@!P}!f_paryxI81<@LCEXW{~Ff zy}gC7lcN*eMMrSU(!sfr3`>=rVVRGPetiAs_N8_NE%^y$Ovc%)qBaJr*! zBb&%_m}!&5-O(bVPXvb0Y&h9^LvNseP~O6){3#h6ZoB3ajg)iE zF)-e|?NKjoCz1xGIHRON(S&I7)92+3ZIa#phUNCGJkHOdt^S!u_w{lQvAFC;si;0& z5=G-@p{^#nv+3PVIJh#Jvt3<1o{gE*MmxCM=|`#3J#v1x(cBl0Y;?8N$;Bt*M(Zv7 zQ>wt-Z@6(PUd)W8p=~6bB?v+>TuWQe4O#%@iDi(QcD)t7xZDgY=2EmGt9zBwpaC4F zD_la98$kIjk8b=Ggo2C4K@=zIcx{qE$lhKGg$(CPHih+%!H}5_J^i)KdZpgT!lo1Ykvd<2^wo=Q6efK?9UKy=bOJ)?b|huud^_GWwgmM97%lAlfQ zByVi0{_NM;DR)-hh_>G&KeFi~A-IJ#kFPenale58`QF*T7PZ??r5oV45o`Io!eY3! zbF!5n)3)5DO8twC-&|AK=oYN2E9Kg+qHv~nm#21K_lo~0jNXl!6utX#^Oe$i$k`DbSjic@oC3p$38jm0ve|jwyd+t`G4vrN}B_v?B?(uv0R)N!7vF zXhN#BqyjV9uWD0GX^b~jd-L7V#^g}5g#EoinwSvz_|jy!rNpp*Vj=;i%?f2|a06?O zjx&2k{6nn*$R`-qyGerg&TmC}q=BBi!}V?c-@MK0^x5b_Be^jjTlp2b`g5{lK5ONR z4? z3Kfs+P$0&LoQq*N*?EIAZ)n&^9&kBKY^t{>OpKtR3lQR|IOz3no;mLEbLq3GNB917 zN)?xiuctF)ZtwTW?_Var&vE-V%8mM-(0Os$TI_;AG4kj?ZR4oM*#n%pwA6A)FAt{r zzFKmJxc?(1H>|ZiZX{ijJBr$ayMM7_AI7&L+>OnIr?OK<&MlIWV=afr_pTkMfC;tF zl95cnUbQj*?IqiW`KzBmUXOM{$`9o=TOm7Yv)0#Av_s#T_jWZP9ULD1rLX}m=#3~2 z3A^{CP@Tv#PYvJRu5k|i>G?aQNwINs5V-3g{9!xOeCFfZGV~vc>1^N)27Qy$ESn~$ zrLzb?hY^!7wSD9?<=lIZrt8wIsAs+`L0$W|gLZ$FzxDZ**R8yj4)({Fe7czP^`0PA zbXHrJblaT3~&qD(6bE!JK}o|iPYV-7=c2@-@{W0zdgs|)yf6}`Sv2fGx_OIi(g zZX5Z%G$1Ons7t)tl}tDqoO?%JhEP)lo0ufXVXVm4HaxzFmIkGj$6kbCMbk>Irx zZSXu0Ig*@#d~V%8bCiY%sC4gc62!E4n7*NeY#1{MzWpX-cH<_I8V4fYLg*#~m^DNJ zTPJ9!6O;a}vwr`v+k@VrZp?gzYul-s3)QlVLY6DTl^s6Af2FV7gO$%PE&Rvr>Uj-! zw= zU&|JX=OO0t_>Tbex3NHlZ$;bZjv1WlgJJb;R&gOic3_!HR zi8?q-Bu0HnhWI%m#FuM)t*`8F{+kw3HKLGFYFE;uz+miIN*$9rv(6~VxR2Up(i8to z)yn#OYb{lX23h`ATZs#EEe?hTW2d~pwYe+!!IatRF0e%)^X*){W}gRFuYQ-)1SK&S znxNApl>6kj_`7Z-Uw=B-eRFScdNYw$!kOm2x?!j!G*Roc!7DC2>7U(l-V={SdYB?? zIp(`NDVB}8y*j0$Vyxa(?y#0>!FPkVV!NY zaix=S`uHSzw2v+$+0G=RF@^CWe4wLrcL12C&^LA7g#rVoR^=aw-%)f^(tP~QTN~3P zi?=2~gDV>B-?~MG@xR&ah#x=1r24zWqm#ds{*lOOb6dfjtyT75_mM?!n}o7?Ri%Rs zL^Q@e7G9!J34V}=wk9#G&2?SdQnp551`cssBwIDxC5hc36JFalN?=f2?<%fupGov2 z^2a|S!Ne1}LGSng5E(^jJ3(J?d6Q7Z>$Qo?ypcTVmEL!T{^`+FzewoqYRQfb^hUc{ z5=4nlKOi+K4imc&)aWfzRv#S_42-%Ukb<9JgPsOFyfT7fL-|6#M)&#~WbbG5lZMXk zFSV$~Q?tn>ce#jcM@(SyH#{9JcA9VdwY9~s{cm}6<9u(+x_KUnK>5OHxzwe~-8lIt zAoTMV8jEUud9MJi;@!TTL%jtrgNQd1~0e< z=iuZ$?*pdK`1IiJ)V0$e*Y0_^jR&6S*f>%TBWT7R!#wOR$AKL9f|n=YeeR#$P#_Qd z^GypxkW2vcHR0(azLH<%EBP5b{mWK9q$BO$TFPoPb{^a|DmIsM+8Nb?sWFYc=KZ3?+r^;g6ZlnLt%H{gXl%dkQEa~qFKW1_ z3L2L3W(kKsaCnf`1lhHnMf@FVXh+$>7gj6G0Z9S!HACosjznb3nZJGZ7o|8=YynVcokB1 zd6(Ue9nbgAvxd44kG?(n0xnbWkT~uZ*H5BP(D^;A%{;wHL5Vt`bAikChfgQt0C=+7 z9z;Y`{dibhe|v)>xNtFQy{Hjw@QI>|?JK~7IpsaZ+ixwSjbh;XBT>#MkkL7SnI&jk zfeXju7L%?2*ex;qB>DsgB;Am_<@vo@k`q`D=B7@`)(b#{u@eN!aUS1_P zY+!-tqO2#;cPzm{G{W$XB{g@Ef=9$g46b%PsaatTEjuL&KorWLiDn6z4VPdc^^0Or zm%wx`%g}RjynGFP1jf$RY=GIO*Qz~Eso>)mA!OYD;vA1G>8|cto_6{XGp53gcf`qr zO6X=uezsA)-u;b@7wr?dGB`Mvk*{QgacvgK;QIC6M)F$IyU?!4yN4B9flLDtU9L&`nzKk0uObo%4U(fWoNQ7Wh6U$QCV zA@5l-6BAe3kH8pie#pyU4_YMzvE1Oswvk>X)3_zlEY`Wn)*8&7QCz6ZY;`lKtZT;m z>D@`8xbCYsDQ0BEllo!(13La^siFGAD?j>BN2s7$Hq$PDA`M~bu5QG7$-Bc_;u+6g zbzzLfeuap~oN<*(k?jg&DN?uDmmRT#o{;~AqQHg^5Fk*}qX5uKXPyAroHI>> zklUORW+A5Rti7!%3+XMCDtao$;Hdvy+De;e+@DDf!ZiRa%t9KFdSt$akgUuBUkw)z zyn!HAf3p2NSj#X7dvi1z9_Xp_FZ9&;`}}KfPDoF+#U zgs`{K^{w4_+_vUdukA|a;@Su`re~Q^RBfB;E~Prk=6L*wC1^^T$`OV(1LDDBDERaA!AVLhEZ&F46whmt>pN z(XE~tL8fiKWN}CLHy?k(=LA7Q+O#_!cUL<tO4~k%it-cQ3J3f4 zIaHclzV_>qXBQf5#w5JCJCQYzpRPQyo$R|@FPDKM-ndS4XtNxu>zq^SuC?Xo4$dY! zKE_04SS5{Ij5GBZt%F#5zEW5UnC%hE6uFnvJC1YFF7;Q|_50b#Xuh z2!)*FkGe@Y;N2S+Y~ueXm`DB3-#2oTa_R#NL6V7s$E1pfkzdCYz+MOuUeey)j@g<4 zi9kyk1O313(Z@$5bG&W4WQCl?g9E|`AHukCujzD0Td(ks>4c1sDmzo>j?*Pu(IA%? zD(RF1m$qeghP$P*JG1HYxT4`+(d!WR9$qYgCvP@9Fkv{p;mo2P>G=q60M1!78s603 zOka@nNkIvim37%z-`QSG*qCIpdTGjD!6j3UJ!q_)wbdpeU1S)Y;zrFH|9kQ^uIQWe z!IiINldK#x*7Jx1Hwc1{W_8{vabNNRv+;4HP#nVzzYVVUVym>{3&{nkBvS`B&T4g! z?39c90deDb;W=Wv<3&9H+&R{lxpg@rd{RK41e0TEbB{-E3XML9n94JJccit#d8WnY zTK}`n*@lemG|u=!xn(erDV4(kwr&@DgKO8V*xl!E-lWft($FZw;MyS=-IwW$N!qLcm_i{?~j^BeRUc(+b*f9etYCfcGM%C^U+QJP}~i0&WM zPCnQ_0Ea+`6T*RZJ_0VkB|_l;Fe5t4UR2m~cxXHiB8uTf>UCb`OLq60SunY1yMGg? z#kIa~b&Ud_(W1O~S(o8rTlY441-`?g_~M;UMPS1#hgU35oL6r|waJ~=(-e0OV{=>|9wTmq+qga67V zj8|{ow6)XIv*D&dE>F|v=?&=4(;u1N%qEQ2&ZgUj)o4)oRi+5CBqRwNPsq!eKl|r+ zr#lU1ufe@|MDsu3+j>C+`&t50jFdGQo-v3LpD-vUHV!LC9I@BGeJY+ociUMADTaCA zJ5OiN+YGe7%X9HXreFM^{r<_zxl(n&+Jm-^{xHooHzNnAS5mz^zg(V3Ff)2dmi zFi>hrIk7r9)*MsOh=P=0r%NV|Wb?D!*#s%-1Gg+rly9Q5M!>d@u%i1VZZBv}odk8k zdv`x9XK18QhTRc%oT-s#w__Gqh4Zr#J}EMf^I^;CrD|U~0a}u#hz-br(s?>wExL}9 zW)QNgNc(f+atICCkkMx>j#BFsQQ%wq9^N90*9VDdz)W&kPa>p*5~cD@CpW|)2I-Jy zM7Z`(&e9&_W%-L*{$e~~DCOmfb~`6hdix}m0thnF3{rAzok@$;MMD)4WV3jlOehjy z#7?gC-W|@yR>4}rEo`({DAZ0zXT*uP;{IM#uz~(R7-(^vtH%tr(R`}!e1Gt)wON(; zAO&T7D9?gd%pG2vXo_XP&HOj~A~wzc$)@?A#g@NOHPQd{8*Q4ZEwDRw?Y!80OxJsM zG^$CkmQ(1p_MdO8Aw?qR*=ci%58ODBmZK&R>xjnZwY%Y9M zL&XF;%&{r8q(707n&#vx7wm#EW-G_N6nUQui6eyD_j=DjRVsHf@d+KHZ;1o8Nmwx{ zJhqmjHIb7;1C|+=v*}xToX0693Uia^52o5DrJ~KI;W}52d1Z&QU?}W|KpT#f3kB4y zW}1g~6umFzYXR0|Yl~_i1R3YlT*9TiH_4d^o6GfFqJQQ|p*jC$qalg7dSL(JLXIR_ z!QB}26r|kpFs(|FK}w40B5U%z{+(L)_pf|l<*Qb{UEi9Trz4JGH)@8%L+)QB|8#PT zLcsQpv#Kl3&9Sw&wlqk&n?|DdYWMATr$H>y!|Q#PFjyVx%Y-(&TKDB>rNj#wk=kTX>S~JMlO_JX>TtKTC`^;{jT5r=$mMZR+sxYGDPFm=QCKE-+GCP}1tp zCcXly5(GVskd`6b@$p4IQYHj8F~yB-oDKJivJuvZGkP0>i353aRZ=2GE99mZguAPY zVQ>xJp0?V+7<7?{R(i8 zWWvc>+|PwNw7GqB>9DO&kT!9zLC*1aUAy`2|4f7m^>8Y$9>?D0zYLk`ZmSmc+I6YE z#DDfN_LS05jKzY_UInfh zrSeR-M1hl6qu$%u)Sy%n0NEU+`G0q!XZLjZ_c)KAm2jQzB-vw3bwmnr&*EQmvzY#! zdXFoj@?WOE-1n~hV&oe>VT-zrC&w_4juliPtnbRU0fBG~U$N}>7dE+}C8ki$_y62K zVPD}R)M+0iDzs!LQI4JD)8dD@V<*9KS@P16QJy0@qZxHz?$D}th%+m;P$vpC0ag1o zQr9)ymbsUIT)=-_AjbpPFGa6Nk_IpSHen(DLl$t>-ALyF*3xLkL>ExkBX0XX9}MZ% zj3x=E(N|Ec2r0wW7p!m$1TNKUj->8<$@*3V9~LP{#FeAkhX-8+Ubeb_MVceSSMmN} zb`wE^36GH+cI3^5)3JF$nBg^R$-Z&*aKugFhQ;2TqmWhO*@OB#&*;Cj)tj3;yOY^r z21uZgr1#7==0do%y0dfHgPXG0ds^(SZat<&EpM^2nUc~Q+;B zINa5(DV7_@@QbET6|eG@FNq$D1a8;37OJ z^|UE{FGW=DH3zu)dugh$s&O=Bi$Io8INVJQ((cFqy?lbdrhfa1S#_UbBI38|D*un* z5_f?+FoC(^DTSRge?_s5SrrH+d%a)@GB!IM0RWDOOrA(L4K}kiwlwqqhYMAshlJC4=Qyy*Y*7)i3sPPAU=8SRt?s7zlOKf>Lte9 z|4)DpL8aY)cFyHriC8&vv75{l z23hp=NRqw9{IQI`a)(ty_Dd^HMXbet*zyPMX_rRC>*UT_a7 zt-%u=>|dimZ^Z=X!!lq)c0%gP%n}_u7jIa!>G6%Em$^|C0{rv%!1m*_>sKlHi8}dz z)R75?=p$`MQt?*|G1WWj)6v6>uI?PRMaj(5^=&H%lfkOKmi<^XT7E4*G* zdxG|BLLjCc;+B`LgeCZv0yf}tIX_LpE^XO}bjNlz0d<5w1O2jSI{^O4$wXdtTsZu5 z={F*$i-&wLIoRdyW*UYuS#OIy6~)|7haHtGmo6XN~REOo26dX3*PiIJG@@bre-)HDyyUF0^^$hn={XKGKQp@CXTJHEo5 z!?5sm64iCWm83;sb4j$z2s09v9~6WGKQN6=>M6bE_TZVO)VYQ8D0Lhb(dtsh6}3*w z3_*rUIiSgAJ|Z8>Lku7p3-?2F}e zjI!$DkUwZ*H2d3-VSg_=!5hBTcD&&?2Sl-hx&kf|@Dt$rS$ZHk4j7y`wER;Mq78v% z>cZ@qAz({TI=|gH46!9qMqImOu28;wyt}|yWz5k6HrnXz;=E1W`<^o9Gv-iiD^6-1 z3h*QK013O>bWqx3lV#Ac_~-N)TK}rbdDU(Bf<5US9!DVW?TLL>UODa~JK-H+di6*QcI&s>qaexWE_T$iYGqi5X>o_AW|F>_JarxqFrvq^tG2EK&6(9Q<@=#1c1DFpkid9c=EBKJz zC#8QwpIV%9t}Fw6NET27GI%-5F&?FNfTba2tC#$2eY$!52K-9>i+CPyzUZ*ytFgf| zi`fwP2;){Zqw#~5iPs1Hvzwdp4+nGxk~#4JQLVBoM)bpvt^8l&xi8gB;va53S?zH6 zRtaAl{0LjT2ndwgmL!ed^~U<0aSKQK|G-aFuprF^VvYJ$U2PKX;ju8-*i+?of=Coh z+^W1N8DE%;pi(*y&RcKH!XKsXQT$0X3~pZuzemJz%L}~c>K!XwS{wgG+we7RX50*? z+1rH@t1PM)_edJ|j8#2NyQY#iu3zUYx5VqD6x9cTYX(7Lr;YEu>ow9{> zaBz>~nby}^DQF6XTn{n2D-}VChaw2 z>|uNoA~D?^?e1}OongUlET8n(=zl-0FT*?WypMFcUt?9{2;Z=;;3$lxdPbcGP?4!V zEe!e7Pshueq#HLDm`}T!UPqR{z5z1ey8j@-BQ|quAx6m+$(c-aGw8}pz-EV(!I+Sw~(JldK z_?V_|sSHfI8jk5h^*~8e66l_AZX{3`LpxpDDPGE1W*eEIiMW2J8LZ>29WGgCN{oHp*eWr=9#ocZld9vKB?co^Bnq^-KC8HB+TXL=zhmn(v05wtz(v$8=W!%26stv zP4vD~HA#9FMx&t;Xa&KA?R1((bic70gI}o{gFEEy2Uot?9QKcvzc(^4KTAJ;{?>u) z!luLBL*X0DG@zXa55ZUIe@RUs7MGnbot@|qAY*^+`1?W7K3#E%p~_XWWgiYvb!J6cE7;Ljgu3niP8dxD$+MWuwad9Q6edYRfc#Bh>LX=K4zfIp~@-Tan zoVai}xF8?d5}-NiyJ9fMjlTWpm6)oV%Kvq0XOL=Q|6NhqV)*W><;n+`j_HP-}GSa)}KEle(& zT@^D;`RsmKj>X?zc}zXai!1M1`8+$8b~5)3u@)OtF63y{|&RB0JR66XUXC&8QfpgayQ(Hlu7ad;lZloij7XqzrYFHyT#u^dm6^_NCI2`OQfDB z8zwFkCR}{Ly&K6rW7zg92>3_q$J3bw5r@$KF_#bx;U}#~-cPFXu%fe{co}O1OX%&xb=8n{^p$JEEFgaUL z;wT=zm=JpO#>0mKyc34DthymZZ=7PV=eIM7lku=SmpB1n{DsfQCp;CK_;oetM|!!u zMql%9)6@Lt9^qzTK!J{*upq)MzemOLZ^6putK1URt}YDFQXDJ28Ol6hkYZ#`p%9kb z^;d_x=0eV83qr6K9qu&exp-j&Tnbn&mIo=E{l>U>Ao_^i(1Gld$zqS~26w+xL8Q*^ ztV&DU^=7f0x8t1^_0*Dq@+DG~6#CNcqD>9bQz%Z2!Lxx%XdfJ7Vs30ClD+!WGwBzU zQ8Ny<{ZsvVc7#d%x=;;Tw;YiL_Gz9IqbCPakI07_#V zO-r+lzA5d^m+i=iOK!V%Xn0Y80#Vs=$0Tg(hyq-I+vMnl1Ism7Mg|j=Ky~F@+tH1F{HaV*iWuXw9zOh`p3`&Gk#>Kvh(`Ek&9a#q#EpO z3|^X>G{C11Q7k~+2$`|m7CNZWT6Q+27pJ*x?-mGQXS!!n(bhL^UZ0p+Zhuv16$@h& zI^G@rC=neT;+-r+hC+6o6s=S~Ew#ApMBRld97n$U67IAa$?Xg^NfjHg?;pJJIuX1p z;GY2Of2)w2LnR|A+yV$5Zl`zWby*rYHio&{C?``wovd zJUp18q8Kf}r&opt81A2W2xEWJYNmg1%wlef<^jt~a9f+XP+(IWe(9! zi*`62JsUT)sSfc%@4Qa0sT-}>kbhBzlZLx4g^mjD`0IFZdOGMoc5WIQuupdu`{R0) z*)##-*`@z^g9rM}BE(-M7MF>-|Gf0b69_JpLQp))yd@FH71;1D`6_s70k{He{wk;k zbUDRAK65J6w|0K_{1QQ5U@tcyrtIgyb#UAKzL1)k%hrWEozmB$Bo8g+LUr@d>^t`U ztJrRo%1MxQt+|>=ff(s8H!|mEK=GEqd`lH&+5rHTxD%8$U%$ zj7?y{F9NqQjf(D8;?;T!q<|=xV5*bpZ9Udl-&c=I(`c!952hZnCwlo#PMm zC<&dKDMjHCsSlsOnbe0_SqgZh5DuPtaEPtRV~=}RCi(DwBsP=YzE{*|D>+?+$7)Jg zLmXj-n@oMUje78r=!j8dSYg9cbA1UB_>1N-xOU|{s=;9U9ngip8`mlf=h@QiFqA#K z5%TZ~VWo1M%bKpm9P0zbnvNDA%7^x%1;o^e7LYmFuhar61%?*DcZ6`HIZ7kyeM1!~1;!!J7q*`YW*zs=79vZ;nP(uF2nOc5M$5GV(jKDI3N`_|YP9+Gt zjwoGk4!L;qY_c_4jj1+%9CH*TO5ddC^9F`ld!(S5zPWl;q5dRo_$D8AFnxmjMz5OS zxPBA@%_7t3#Gf?fB;9*_ZMK-{dvRNr84i!bZH)Isk0PFSRN%Ri+g|XbGeql(*3`2! zgZ|^U6yDK}7W-bf@JS@~bx9cMm-q|%s(#d@=MU2r{;~N^&C8QLK8Wyd!C>m+k~=cH zgSkuBadtf3z-EASsicx=e4JDE3cLYyAXrH;Z7_J34H2E8^E6)S5kaSO_m+iK0hh+r5^YDOY z8so!3l`u!@Dr`HTttBI4O;Z)^PP`BADL5H_szeLl%{81_3{`F*r4;lQy$|J09M0&8 z_ZczjG>Dt!3C*Zun$L_+2xE>?AOarGDg8K)PtHeA_f^y%|K(HD>zED`ca$TdVEE6v zc5n{Qn-MzWPky<#diQReUip4{o2Q`>sQaNEJak>&!@tBc|918MeRAb@$-DVR8LfXr zwtVK}{^g~Ho2?CKFrgr#D)mZ2$6hLb(jxy>$^*uGaKAtWDEX~fRzXdeEM!4T&S~b9 zexHTr(nEz2anSmecB_`FiGLK*PI>rEebO{wz%x6qvFPHpp@f#yNL#30+buTT)PZp3 z(90vS!7{-dn@=03#hRBo_;+t?;#j0)B}<>2#DUp+-B_Yc@9Nbf?H@SJNxi6iww_Ly zoIGyD>>{bD=S19^7#jT6fUcR~NK)^UmUk$t0%ptqc#4_Pb4P;*!osYdJ-eBE-Hzs& zi!4-N-Hv`iC{{(U!*}096K;HGk)7^9V5coYqozJ>C2;e#t}+duHPy zhslwanY`ExwE5a%ZzPCEuE}dGkoaV&6+{OOmWv1)nD0x}uL?4sVajKX zDHbPe8bcWHBl>VL^gzFTcyNBL7r7rDHzFY*Up_&RR|`;AYz3ZZWAwg+{i2p~x--lbnh$K355ly0t^VrG$VOZ{s zn?B%lm52>!_W7y}c4rvDi9e4)hiDw_g8Kz}c3GG$^M_g@zi4QLD$QGH3A09p4ky#y zC)EHrGFRAc?*~yMn#e_y|DW;a2obHa8l8%~P_4KtTMpT5ZppIC(}<;Fx(HNRL)>v* zG@M*-52AuD;{UPZn6Ns=L`yDRdit~lLN8= zgB0~5TM)Il*8)@J*8l0YD4d>^&?ij(%q|v1Wb(%rVa@Og*;{FF8|5xO}-(2~vDtZ1s z{rqD+YCE)rlNJ&Kp)M(22b<#X`v(rF*ehs7RWHRu5>u3-=7Eci7ZM75b7XAHa+HuK zE)x0)0krJ6aQ{2|HIA>{fU57_+{U4ZJO+)+rTp%OIlBmimR|qn&;00Umoa~Vdeb zIiTT(V=V5fXdo$g z%9PI4G~;;EDB+3gCz&~3Gt9dN1d6={;cyKVC61zzho|Qj@tp%curcKD$EXYa1K^Fi z@|E>fj9AQ9-<=#7fV;8}oap)K6G(DPC%i}>HiRRR!Ed;#<1{H&EkL6h>@MDyH*#0b zZ46O)JIw(>~#5~}exqr(!p?zlf@Sdx!e4cZyL z%d6u#yf+be^8aJ5NOiHEoKHzTi-qe6J+bqNtgHq@f@g^nHJ^k*M6Pp~Gqv4YmXCF1 z-J~vb@|+CxaK6>d^-^>aQgeow^uVrKu4r{Jio(I1$Y)S#tsVi%xn2@m1#K!ay)EFG zC_Z;ht5+JVyhINDw3 zG2WsOz(iJjR}N}45b(B!e)q$K^iMKPlACI|^ncWY-Y*G3@T)mYtBB3NVrMDlnPFpF zWPjO3S5cF=9ky0$&SdP!-G1sSGJ)uQ$fPK(~6 zJlNOa%7vQAe?;1^+1Jlm`H`X(navSu!FF|>stxO?rQXJEKM_)y5BWasyjnM#p}rF%U(Knp1*hZldx8c6Xk69dn3uj*@hdR zM*O8Va%V?f!$g5}H7XE5r&{u$|JK! z(G`e!+?Tr``h+b-tM}D2{_M*Cg8wZ<0lukqAZr}Z$Tdyw8UC06;~}9o%Fp*@%QHsm2M#)iX!JHGl>T-}%{ji6-=0NJd+-(!BDw&> zV*EjCO5zOHuuRY$Zm%Le86<=L6|JVERO{}jwf=Z=z|R>f*;jdOEN$z&`qlYl zb-|&uq}3fMK#KEuXcbh)`8e0;IVYE_@5Wj$TFXCj8&a)Xmz~uH2?WW{e)KEzw-Sn|Fvnwm$I#+*9fd7y*9<6 z+gm%`gk3S_S8Q-f^s{O05|_%tBYR9}p0tKifkP!^){aNThL-T(+GRw1aqddN!Wo=- zn%vYS83r)Wjr|KV5G1P|C*p=*VUO(mc)0q`=v#bP(%_X*(SxyY8GV!V^0dOr=SQQ6 zK|7DI_&>6fB8Awrh+)U3pPU`iCZb_N(b{ZXXHQE?s%4I<{iXJbs6@vYb5-_Mzkse6 zj$YS#GMX$`bT&HImN}MW62dXn@PpNF%Z=w6x7#}pf#SJj{J^IdfCj-t3Jh<_#>Q4Y zU0p4QIAunTS>XZap1g&ch0*g`#BrhMKsFof_&<-$H;==+94(*lD)*uw3TsoIN%+dO zLGP+JdhN0J)?#rD&7YIc|CoFZ&3~?GR6q6*8O3{l10%OBwk`~ygT+#hT#TC$)qUPr z`Mrl^UveRPxfIW(Yu5I6w&AJ$zJDj4a8Rraq7o5>uqFs1VS*chn>WYH!@L;{J`}Bq zM_{=A=~R+TSJ$L%OZp6zabtTjJvmAm19DI1DC$USjEW7EezZ~Q5ehtyTTI!Kl+)f& zGQ2}i1Xj%sBlJfvbE;wzQd98;RX(Ew<*K<_ctSb(P+aysv{y9+Mr&fQYu^q5(r6-h zr~zCVTFtMI&F;i`W@NC7d67-!0x8y9pI22!#I?*-?46A^8=ap?;;EoU6kFNW0UozT z;%}do&~GNxdGmM~0X@W51+tPd! z*+8@xmr2|%Zrt2)8O4A()6rj-1Sp0uIr?=(ss>gGUcC)lOjR3Kk&Hluw5=(*&Jf86 zWP%hqjMBZQ$e&{QH=@k&Y12)>d0Lkv73>NOy$u7Tr5^cSxt z`r7|lK%(z!6T)?wD_g(2aV570d z!SA3CWJ=cB%hhDFg_b-?Oeq=c?`rQV z?0;)}hZBae6^f?zrLxHX-Alj1!Rpbp|D8hWNZxeGkTq6ddX_TA^$ljj5DKuFVftD2 zw_ez!ri~M~46gv3sC{X6LTY~nR&8s;^L-|KnO%>l!O|%xT!=OwVPg)G0x^lz)m;`t zls~qIo5V>ueL2j>nD}~;urMOUJR_fGeh{BtoJqY2Fs6SZx#97&NpYXJ9C8OfA#Xu& zdX7G1vw4)j)ojzTIgh`jmizCOocKI3&3~}+Pl6oc!3H)-(eZ;z#?fdQ-7Xyu5&4gx zCR`%~{wmPK8L`y*8)LW+CP9z$0i!TREMf4N{!&Dp-y|HN%I7x||OAT^= zktfRKa_?evF0@}olDRL;#nUYs^-eo$*=gOMZM!iYUYG|+7{zhWZmx3>r=uU3@mK*s zN~$Fg(*(nXZ4W?+=cHp(e_e-02AK3FJ5HBRdYXOH^I>%$u}$$8{$US*0Jq{Jq6%1i zriVR)QDP;2=iWP#;iq+uYby=2KaxN_CRk8yBju&|n&X>tq_jFFo635W4I-_GZGf|V z1xO^#UG5-0R6SeO!r^-ni##oE2?SC#qbfe1JuCyS71zK5pw}ZaG9DM7G_s~?Z09wMA_9SKcW%W}GW#+Hn(2|7MQv@NdwGUY95p=!% zIEaDKnqe`?v>UT-5?359^uJBi+t3;_nrSQZ^?m*Bp-;&TW;57jFVUQxX0iP*QI@Tm zooCRXO}>3QPJb%3fFB}oV0;#;!-22>O7VzmxcV*Qqd5p(1F85%CbJI^eF^9%*BUf8 zT$`q6WSUC1BQ;5bY{Dmt%YppqMSTdax9rPHj)&zb&=y0r0nu2KSoVtHmiE-2GH8W}+ZM^u6Ig z)Qss%**Ub{-&k)&8YZ96I2P7W+kHnTgb+!Tpq_OX4vUV&{32tXw5qjZT*8W|>CWQ` z#mS{rJd(_~39nTG8AgUeZnBVQW-kX5A^DMNaj7=petUb7XPBm)LJHxFid%=nlhnT9 z!59Tzn&Eka>2@+6u&%-EYhptuIzT7W!%qCHV{`tFl|ZAK%$4HM73VWQj5 zjN?`n&ZtUU(c9|($Gu(N0c<+SAkp4~a`H7m&r;B4@I6q5B^ZZSuGZXXRWA@#R&wI^ z_M_w{>&UGpJEH{VD0ZVB9qkId#b2tEk9gX5to&8o!{xhWLxT}oQrSc$x5ClvYiFo8 zDfq0GA7s|M(4~feQjym$A8-VHx+fRZY<3>b6ULN zX&*ISNN&Hlgz{2NYj;|L+1HSm&wxIl^=nD!V7zYgeq4pVGW>ELEBd`;o|h}Xg`vL5 ztfSi=aiJXXzA^Cw2N9!+2racZtRl|W%#xzp_b(C_NY|hAaM-2B+pidH*(D=(;hRlP zaq>6!iH>q{i6$IOa8cs8bp2O;oJ}Ol;1#NIx%JaqVMoVD`};?yHt%E?6LQ(%wOxi? zoJR8BB4o>*hY?Dt=g*z=u_--vi~-fx2#P?l^^rQr*5g+lgkLF=gZ3r(g5n0ghq@t_=!i#{Wa!{GVU!n~ zmtmB_TXN+{X4qXCm}&o_9>eVbGtjT@M4s%T2qC0UK)suAZVBurnUhZMqUG(X#%$-4 zF;o79vlMt^Uxh`3_uM<}5`aQ~N~oedByIGh$LM4-y+_VE z5Y$rIq@3d#e`VOPHz2B$e~B2=+iW%&{B{S7199w@aOOZ~oWxM+9Nws&eIkqA2Zm~e zk1P300_j*m?^gk}G$e>epu|E7G>|#Dp)i%Mu2mmpk^vTRfk7w#H4J)sD0`N&n{<+3 zo4V`uwbt~WF?}fDu9+hv>O8DN6ovF2^GP)F=(#BPklMn)WSdbx`s0h-GmZoCAI!wn z6Q_*bJzY6eXZK6xcUkbieqiO#n+@=bChtaLEf|Lj!iPUvfH5`Z!DGv|lu?jBiq9ux zdlDN6PIEv$@6?di2)U@ODY1#w-Yu|)r3;_L^a=2DHOO@#zg3z;xUh>NPQ~n045~%a zJumT{2fTaliKP11V=8HPYp!@7M6}e|xvbC7%iX-nUQ;YC$-T_F50}55eD8f`;uPtK zF?((0LhAg7X@dw%YV;yIU}xVBGNc`yX)RGukpO(!6)6KTxB1|Wb?hlK9-f`un)|W+_rW8-jegi`+E)UUrGaQSOaM=#) z#<6IK{MnuBH$kn}d-_R@2(L%)N#czcWk_~Rvj%YEN)QK52ZTeA1) zymTZ`X@-Bt+Oha?p$wSzm)C){$4&jL~UYvgco@?C)y|+Q^7?`Jb zD7><)GAGdR(##$RyRhe4s=#m5T1%bA7b(w6y6xKftr+M=9}TWt>pume4mdqa2G`TC zS>G~VM~+uo7^&^(UAr-uNqh)54qwWxHMtZAz_gx{>?O*mwI;K`^i8WR{!TCAIAkfs*uRj<7zC=x=ZEyzbeNkY4t3T6 z9pd7HD7geQ+emIY)!rD$<>@NywElW{{Z9uZbG<@eAZeZ8*h`_k*VL7bag(fmleyKtPUn*S`<2b(eOx_GfMrIxSyFC~c9_u95?j zaV5A-IyEO(q_sFC&*nPyZ!Wa_+o|{OJ<|)d=i;49*KZ|FLQa=T4@IgyRAskCveYBr z{hsJCwr$X-Y}1@0jx+AXL^eFjX7W0&rhO82M=MBJ*Crye;?5jj=tq)~6w~RR2p(T; z639-<;f=FD2Or_z?jajE)B;FbvspU#rz}=$^{0H?SB#~fWw`)UQbz$p2MM4mK}o;F zUF)2)cVeuG#Z^K?vZy`%Vkg6BQgS6=Bp|UN2x;ld0OF_y{%m%5su}{@n~K@Wtyrsei0j-V-Ou`EDf`X}SDiwTM1} z+EtDKv`KM___bToN@Jg;X(UcY@%j`GABVgv;IAa5x5qnUaU*`~<+Svai3G=rnx%~s z4GFB?%6s)c`%|*G-qf@!xCO}q|9C=iij=^~K|A`6Z##Dib2s@xp-Q6a;uJj?e+7zw z5LXe!PqfG$dn+$U9@CClX!)&BNV&;7LoDLt$Me zct_9?QT2YMHP*|A_B&CRw{}Fm=iRgRo)7N-t(1(&={-0IOZT$b$i-s#)pMg32Qj-V zrJ%olm})R%csX;jKNRP6rpRz`a>E&M5~YgEFSEbX?|tYi`~3&^!MWc*y?!3tJoWg7 z@`h)=H4S0n7>VgA5Ax4hw(+qZsje62kGdKwk-$xq{?Yc9*b5MunUtKez8OaUilzBC zO~U@YR>sTPRP#V1yROqQvMlwlceay6=WR1Eop}HL{`2`$79s6rWiKd zn7$*=*2D)Qq~Y0!mNcst!B!HnIr`I4FJru^q^Bj6@jn>eKCkgY6b)^{5XIW+#VtZl zq|d$`32F_DsF5Ka^4#FNrH9DplbC`Ujk+4nr$!=1CT6z}4*W9i&$ZgNyw>-+`ksHL zzUMZpo{dt;S5_zDBg;g3NmdNRO2ibFE^69Omamg4Q4IGMwH+a{$N@60qp&Pvo%Rzu zJF@Q;Bu~?2F~GTTV=>s5Jsi^xIQHJ5K82P;U%^e1j={g7R#)|asy|FmJ>KA$2b>|y zDL(ve{7NOq@bP`ZHx~E@b$NdexwO?HMnpznz+IW>8hWgP3gf z-b>{Dhw0dr;0PwKLV=jcRi+)C`6}F4H7J zu0Oba*6-hXtp62Qt1|pV6gRhG{4#&z+LT`ldvL=(mr~N-*b*m_jN6~BPd(?vUh)`pK3?8g*P?1OP2R7(j(0^T}8d}=xzwjX0KWUM-zk_Am z^n225l}u$IT{Y6>v{CN5c7&xGWvCf=xrR1(gJYzv6{UR31?>H@wYjUW=jX`Nxm=%c zcIEj|wepkN=AzR2JgnYNeUo)7R=G5KI&zK#T#|N^9bN9Y%hi=)kcI5Cf(^hQJiI~- zjG4wb5=CLgp`Y%lF&MBEQGwmHRRh)|A(H67r6}BsLt_9XQQNVHha~?Zs@m~!($z9N zV$$DOg=0BT;+bj-4rS!6FSIMzdKV9#FkHwA5oc&{-X|#Vp>_RfHJs6KnEErw668&XL z3|se8vgYT>nsu{5-eLMx^VxI@a&AFi3JHt36qz^i5lNj@FE_~LzR)W2Y3clyvn_Rj zH)LN|OvOmYV;?T|hZ9Pu)}*v2&k8ju;ZAL)7glC9+LDsQWV0Vp+AK2oRu7E#o|s5< zd=*{x^t~{3C4I%|w|dQvX>5l_lm6ZYX4v2POsK;i5{p}#eqENnoFTE~tkLG?6OTtZ z!*lY<#H35ZeXZ~4EMA1)6wWi`5~xZ3lH7Z=PYy3 zGX?!SI~1er&~Gh4er>B00LR1B!CJbfr3u8b#R~q%-07rE1LqQ+mbg@-hgWFVW=l23 zoCR+;Db~7_Mt}J5FbP!hXQ(uE&*?nb5)-0E-BZF;`b1+@8Jd)(mZoDJ)kTR`6YeC@ zbnZ7?;R{c$L~UI&(1#gNjZ8MT#=AT~`t47n1D)J-z?$xs2PSfDZA^Zc=F~qubyw=S z5Yc>Xdw~_H>aV^OEOXRRIV>WiiFn3yY{W3@UMTnEhQ|GTKYP26KM_Vgng8dUXS9G^ z$cy|8J~AAgT#Z(qLDO5pVWZg|r<$H;vW#h++L$S19Ozm7@Aa(yt1Dli{^3X4{!~ff z{+(LAaOCo{H&_>A?j#^J3;T(6>8Ca^@(#?!tgt03y(_^^a1tPk9pvEGmj77?_t1sqvV&s-A_cPJ2pEhT$ci=Nj{^>tMDDkH8N~;n+aP>Gu_?U zD*ffE9tFRsN5Qp~Cr$E;1nHb=Wggh8T3nl@9L<`ep%_cqn0t56_$2(%QR(GBmwNIi z)RMp9**loQ-nhChaD{*qMMeSp@>U6v?bALk<_7aki@R7i~c7+$>UQPGggEcDB+!7;#4JCS~mV*2Xs2lEEkb z`wJ`oJ-z!)>aKr}eZh;0^M?mmwLAMwYBsRuLx0B~XBRq#lz>V0s}>d8X%fMQm3LSh zTAK%zfA4eA;ST{ctxYuqgwhw$L=ZZ%@+SdD@m|VL#1GqtWE^2}|hHOz2g~76`$I5xlUcyfyg%anHpzfx1tQ-LuQhgU2Te z&iYF**|S?IKdtUH`WPaRT~_4A#_Hc>w==o0>nu248!m%4V+_#G0lfnNf-j-J7!*{A z)wx(ZiW^Sv+zI90c~)O1^Tud+auPXp-MViZI~uily$Uh9`Gy1V*RC+ReSB;-O8 z0tkf5L<``vs0p8NN?DK?oZW=}1bP6+Phe5UV^11ehJS1OHi zW+}R?yLg>a`F9`M7&SN&A@oiu9#(d}S%`VnPMvUYeZEzLKXt^d4u6S4l17b^%11EV zM?Id8HPpEcE+ui(6lqD(t5bZE3SgIzw}qCS>8SE?r;xENH?vhmwvs zs=Z5m?1u&|RZ&(TUTUr=+B9l3vNlh*tLtbaX=JUPQkQfKAzS*V)nM{p&D(K{ZJ-VU{fs(>V_ilLJ%4byniSb`)ZM^quPrT z%Xv~PJWr#rIBQw?gs_iaDswU4boc3poZI$JDr+HT8CXn~_*Q_NyMu!$sKcY+i0Nu~ z&m+Mhh(aj?>I0huiyX_qm(P7xFi#EKDD!oi<=7Q$#pp{6`c@()95^yvC$Hw_hN;2zBP-S>9y)Is^(0WJ4rV4?Mn&{L zpVtd*qZ+78-!Pk#<>obBx%9r_4^^_9(y zo$cM-bP@IkkC2F?E9od^w6CQ7$gcMCUbCuc;>by|w&39jG4cYZZ8Jo$BJ&jHEWi+M z`)}cAzXZ3;L28i$KoA!0*tb@{_JzNwHc+j?hT(N zOA!q zi@knPU+vqLKC+<9u9L^PInbQ?t#f`Y8c1p6ubgL5q^TQ!mAxSn1%mo(XSb^*E;&L( z!gQZ4Dam@CEs6fSXgaB6uXrNV`2l)6TO=GP9#y^sWbj2|6QXRL>~7MhLv<TQ{s1N@0LI|6b&**U@UbWA4$GMw_aa=nsD( zszwu>;ewN!4}K}XCQFZb6lC&&8;?kk4s~P_*?pPFbV(aefColbPX#6d%bhK4ZWU4f zS0~yW?c1Jh{*5$lf$vA(N#aIYwDaj?j@23wX=*be_vp$oE9A?pjLFbCob`9$Q`b%G zeZ2`!WT;ktENGDm#D$t_W;kdmAuC!f=;$v$b;Q3XMTkiV9ZEEb@k_(1&%H4B{itLb z1Z_6iIjC_d{p(lN@Ja9n_?((OUxuTqo1IeXOR9SU2uSOEae~^x!Txl(mFgvdwOORd z=YNCK9v_V)pUs-#<<39-r7uaP?2YpS)9VQ4*^RAjFriA8&CP=khbX(dM@L(}A(a&; zV}0Ym(0a>29yojWyZ2=KV5g%W^$Z^<%z{hiaQ_IxY*pYrzIvKug$O%3YD;eE<2p8; zV3*%wKBDtYb45;}nNkO!j;C!ftH-}fm z?!0*2!m;{R&bU$N=4tkK(jEp`9d2tQm7OC8jvw9+9paq;ZaDPA>!;3GZSS?~h9jjH zQyGETo0G|Vqot&Ur^CI>K>^Q1aW_pxWrY-gksYHTf6&cfN=Ozv6)#O1_hS8V#YD&Lerg)D7)y zYxhvlO*(Xw7)%B|D0gsm*JlSfxrnAt!JpL zxRYI{m*BdhzxB1*E0Vt6VYf{MGl5a16g_nHB>mXj{yCI5Yk70ZGi7k$RkQtvdG6B#UB zp{IV0o_ZxjwNGbV=_%*F$hDb8s{3$a(eaQM>r>Ta2yQf>H4?ae=Gox z7c2ppB-Y*zxLC28QjV?7YI+@gs9LFfV zbd%YUnX44gpl9L{J!Ux#XjReRWOZnvv9VtE9}oKH=i|ZS4j6kPp`#y+zG|N_A4rc3 zHsmc~DlCOFbx+oupFD_3u^>6Adj8w|kM0=$>$JAF_YRJ&_Mz7X#|L^R2uX}EhfE_l zsmxzG?044J5pwVb?R0R)>f0}g>?(L3#V0)dFp&~sFG=c2IybP8VqDVop_QcFz ziQkWY_dhTFtEHb^dd1RbE`57WznxivgL`Kc{grsFfrJ-#l_t>VAI zll7V);gJo00TMJ&?@2tJebBg->)hb8+w`3x&oh(Zvr3@NE$oCM1 zBtl>jQiZ8g#17Kc)u=Iovbi={pBRzLaG#vN*vL>mn5}=yhR}nz(hV0tBxV7-%1W8} zwWs|TVL*$am{hVE#=-{%nkm6Bgk9U(Y6fmi0g087~#x3e9I+uBMSrYbMc zjc6xxXP51wxgl%KON_839?CD8tVHVMOCzUAT&u)BU=_g=40?a}O@0I2Lw)LaeFd!+ zyP_}Hm?kNz5>ZO|y94dQ6?CcyJm=qvPH3~JsYSN0X{}syX-v96v58wpn-UHLj_x9B z3y__;I?J6s`bSRAbWL!sROy+Hv460cb~fXBfZ;JD>MiowJ(R%w#tm1!+}NwcFTKH+ zg%+s76o_wtSuUgV!0Y*&$i=@_aWS_D!`W>rSCQuX4x;m#*LWhpa5Cq_1A3BzJaA#M z({8=D)0=Xp9r<|pYPpMRe87|MPdH<)9adq3RR6LO5cO4eW!A>>O6Cn&9}^u6QYU`| z*sl9+nD2Ey*srqfZ@6bUo^LnKT96n^?({CDg1F?Ey9uVvAV-c!!h#qPvwBIb@XTwQ zoZRQ-B0xz)KoP&@`2BnF$2PYQ^|6C9x9~1sSKN(r)nOz7=Oitu*<_=| zZ;82lv+?S5FC#T?V@koxWS%}g;ovI281JQ5I~G0QZ}436yXY_TKWV?&f9G`ItzZnA zBtvHz5sn!w=F_0XetAs&UHww-Q)fZSf;YufMO%e5hEkU_DuOridbkP4clUkV z6mnA`H(~FyiCF`baBqEUI8iv@BvJ^dy2FEO^VLn5)$C{o=rpn>emO9<^WH%(>noi3 zC+pw|)Ym0gkCb^u<*5O#YB!Y*#Op9IqF7y_N%Giwmwt&R^9Jsa8A^br!r-}12K_d? z(3u;15T4lB*xfUPNwRNaJG1gO*O+i0BL#Y1tVrVcyS<~xk9kQ>^)E9_M;ZUZLCj_` zS%FMcVH*3R&2>W_@+EuItxBgB-Ts|jF2BguzmB!}FuKKLLxL}jPT^INht95qC`F6R zNTJutCh>6{v-7u!ycLQeT3i59RXWXc8KqjWe#EIToybhoBw|ISJzYpm^w>RT?5CEp z1378nFe7X2+*9yNjQZ91V%laDGdV-o)vWO>{ahDe)Ev(8TJP<$(xPID_6Ve%ocXRUupbK*hn5K2+QE`&NdE@ahso+>0 zT^SC~zr-62Rux!qxCSJ=|G26}Z@BRe4=73D=1unXl_`;ks>={1c&2!aYpx)YBi3J) z6DD}*yuP|!{=k1CTR&^7-djw*;t!PV=qU%}-$Je2IwUI695U*qo|NV>WWjMpuo6c)mSiGR?8M=Uf8Bp4@|YKxB$+DoXw(H_=?FOt zX{O6W!9p$9mM1?P7ICo`OsvyGV^J(;eRz5UE|XG})Ke;Z35dUZC6>Jx(TB6qw!=-m zDN1$SKpQm~T^l|LDwZ{SE5R}bkxc3?3RG+uS9}kJG?`n&VuYut19z363`6!z+L@EF zlP=DgFTD(M_UA*v)T8c}YUBk(-XcBi#F4DDri(JX^s@5zR-B2Z$XwV|T~R9X(<#i5 z#vhk1-+ctkHI0;|Bbz(uy_$0Ew%Hk9-W%s8)NbjqYvZ@^;f$e4FHXX;uSZv}zUW_vSFbKzu`l|)`XXsi0$L;*qaSH4WVwNEJZ~o-*KaXmdH2Gl zB#h`anjlk=Gqi8@Vl^x<%+k7eljVu8QdHhQp9E_n^Qm5OFRyiB-+>R^{6CfQ+`n(k}p8t6Jsc6FVzeFO@OGX}BKDg6<0}(pLt6 z4N??+GUor(fOIz*oreL9sx-`U@Wa@RQRY5HU+C##B{EiSqC+^DwdKPru@QhmRoF15 zLsKr}YpFzu&y&VBK7r45@OodwF-XMDOirbgl67aC(+5m>XW&TK#%H4uj-+jKUi1AU zCl_VCyIZyA!3Tc}KKM)OT%Qv`e^Zn9!pN<2y4K4qs0gXE7Z;S{nAX53-{|THYLeO! zadeCp@K8e&ySVL=z?UT6y(BR15Z`%&4sJ?UNTc#Mu4beSPtRy5g;`O6k3Ev9x@5~Y zNSr48^{WFm({I>+G8H%deRC_)?*l>H?tQh(R_Cmn%SNi248SSDNHx2Cl42wE3QAd* zlNGdp!Mv&;!3X2f<4+iNAYwx##@qRi$EP=S1B&i6M@u?|Z0Ioh{bR%G=z_uF%c3U$ zQ_EkPk8~iS5g(Yj5d_`Jre#53;4cC8#=1;K5o0x8s&^=YTrc_jH{|mlz-m8LJ>XZg zyhTgHEd(wO&RHlD0U<+iA;V;`(Zse{ezke_?W)`f1&6(Mc|J4%Bxf0yO<72SQ^ zcGg`d)&Y>G&_!gBm^2JKx~iopc%axiLVEzxamHfa==fG0RM~4sGbfmA4Sk;d;?C-ul zl(?b5_rTO%Erb;#)6@g?2F_hgWeSa69fpb%lstC^nU6sB-edLH@6#EpA#)$iw|{^r z@m%K1=3k)AseJ4|RXe_^;_{iL*Dk$3w0R0I@9lCJ9cvDEq9!DECO(YRAMH7+x0)n5T1XK~yy@A+7XrBc>ipX2HXw~SE zbwR;#Qp4m6?d|C>9E@J6tXVsQ%M>gt!h9b-US3VA$iBv|_>DIs$E1)X1L;uM)D@(j z9A};mwZ;aD9M=2CT9mPH=05d4Dykdos-BB?N(5C7ImNSExpsV@OK_}5X*j+U(Wv^W zwZP${nS$OpD@nWFJX7{hA@)b$NuQZBy0OvCt21DCTq$U;4p^N%5^(FkZ#ZbJ?~mZzfZqEuO$yBA%6T@(l@8(A0k^6+JZ z-Gs&*ux4sLL`SKHfnU?#iGjw(Qg7gG)4O~@Ma5(%{vaPf``x_o>*Fg|j>aQFZN}X) z0E6k{nouAU>NVv-dXw+mKV(x5_Lqm-(^`*~+$$xAOJ}Ol3bh@N`x`qjkHp)0aS}&l z17zrbCqr8@9baU7 zYW)Au25&pObMt{?DB4gAQ_j+O(X^Uh=(>vM8q6CXZ*ky_Iw(?BD3YUBE0)P4)qd@f zuBIUzQh(G%F1Z)K-HQzW5sq=xu%tp{^LBw z_1ZYvXB5VEA&T|H##=i)jCkgD)up}Q?xNtt(0~+1qlkog+TipCk2DQhQVE|dVS8zA z8&wzokN9x69`eg%bZzUVXfczAQiJXeh+Of*$+i44!V=4qi<4s?%ABnPF4HX)STN>< z6_0w;s^T52CNdpOK{?Pkf!o!qM#~iCcGE%V|HN!7@Wlf)bpP5+zBe|HA#z|3%ca}i z2}DUwXL3Z_xu~SFi3I8D)R&cXC|4=0IC)}#yt15%f>%1FcPU$;<;!{y{9B6~lyUM$ z)wh3Cg%!S2VW>=FhS@kmlu{BJ$BNHP5zdZ?G=l-a?bCJ?actwY1s3cXAs;;Ovy;eB z=PaCZ(mY$H#zSi+!`p;RV5gQ|ZHwwCDzXEO2 zYbV~8fi&cvbt`bEzbs%&{54VQ_-k@izq0gpeYEfAYkzp@`*fHUiWQF<-8x%T=e%DU zZDE~Ipd>6qW-9WHEY)MR7%IP(*$Rf7!pHP0i?6$eyq1y7e49INgsdD5vgs}EL@DNR z9!aYS_Ows3kiIH85*98#hnHNmCrdY9O8B=gr4vG3T|6ZO5Ea8$wv7RZwb7U{kFPC+ zmf0Ob_sA3(iR5MIg=_o|S^){gH!@s6T);|7cpa;rGakHzC1K;A(|38yrEr&TTcpZ{ z+e~Rol|jdzpDEjfm$X#b`adLN8QSDCs>Os}BW5;#u+jr8Ax$h#?BlS)w6Y}X;3dzx zxcA~`dXP;tozKao&*vW*n4~lDWr}k0Ed&7@Z=l$z{^17;e24dp<<=taeTcWViV*^In3z5oo+|L_ z4_>#umBi+nrGMOwKYaVPx^oW4D3P^5!jRM|Rzup2HD;9qn)Mq8g738%44Y7F+O<+P zfYQ{+!o5XB8Af=Zy>^{@rFhC z{!P~Q=>81o3(zGm0TQ!a8L*p4OvBlc zX-I?dv0i9+p!KwDLOz6**%hax-{5!H;9n4>yvBCxc()77Ho5$@Nm@XYI$^R}0;M4@ z5_eDVB8~YA>|NjqI#u2%SI3(req#O3m`3)V_TomV`_ka=ec(nYgq?>6648UVmG-IU&%gFJ;?LFo6 z4%;^j(lBIUG)6j=(dfD5srg5>BVsoERBgRO-9fqv*0(YcDRuhN)boQw%caK4xBiQ% zBI+D$+kEL?6oeP@oR{Yh(Uhn`2X2xHt7#^m58@nOKZ}!^VWi0l9;m5Rh?=R6v#n41 z|3#R4Sn!$L&o|lp9`qz94GHel9qbVv+$p-dIcWBx)#U6<_ClV}!%uz-Vgj{VWQ@oc zYItpgqMV4l6wM+;1u^FJoq$C6JXQM93(E^liG!Cn#n|1VL&GAKEeMHkoCkkNlM+`^ z)QvA8`RVZ$Ju?SD<;_DCYl#UR^F;I}A|nig{_A3uB0tewj@EpQWz{*xesUPel*>&n zW^2sY;hf?S!R6c#N;0Gj^bKYa4mNBSNne}vPO2%gp)EyUDKF9dHkj|aZPh{ij1KdS zE$F{YjwVs58)u7U@l?60r%N2~%)QCW_gL7WWxNS&awGWR>&mw0WT z=27C>WOl`Tq7qW7P8d zemA@U0nyuIA!QXFo!@eGxt=?+!(oP7#R)hrDk6+Dk)a4jT`~h+Dptr+g6>WiU$>MI z4ml`t5~((=!uP9n&Y2c@BK99Dij4D+a`~*7NcjpXtndn`PnRdfJK9{8U4&z5Y(6_x zhpaH@A^JLikeXMC)WM&L_bND@(9X2BhFw;xzhTS8;nlDeflk79^$<5`NSePre8;3Y zc)m(H?d0#!T({V8{?;I)8P~<+K~rfZi9V6X=GJxHdkn4@dwx2(cA8WO5bx{^!ktQs zP4D6(rx;3LBgF+j2QcpXYgr5(-#}t{bA$F8PIR;OZ{FZIGc1$&aZ)TI*n`l0pmyoE z)h_+Q(nCvcZq?(LntE@M7L4PH0(XnXWg`8(C!#DTSD7mcRkh!KQ9Lc%i>8=+=CDJ& zpS(1n5p$Fcc{?Gujs|aBGD-b%@sVTWpY^4J;hj*k)H|bO~}sCUspR?{elI4b+bfKI~o0_;A34lA$nk#Uo-Sa!YdMl8bK={2ci@ z19RKaeKe887w+ms8tKdgK&@@Ar`aa1tWH0lje|7Z-nq=>{hImEzf!rpcQ5^Pc{iZ} zL5ZAR`ZrELnj1`4kKU(-n@8ESbDg@EN4&a1%g`k5QZ&3UscJUdme6?%kJRr%$onCq zNNF*`^Fxs?iI1RX-J1q4Txju&Z{m$cN;kL0AXKv{rT%>7%~N$q$Hx+&aSghrZ^)du)(%i)BP01;aV1D|D zNgP~tQQm19E^li}Oi8dUrjCCzQ}ru6nQl)9uTN1fzRAR6Oy%8APxXGd*aOL%p9K;uUcKP6{~;rqJz=s?16MF<3`F`{4-oT zOmBKP-ZPY-L08QB)caBog0^-7?gVQh- zm1Y|_fLvR;I(8$99hym~gj$kV=Eb^~u@Of!q;`NODbAXZ;Sytg-I-0NR3NumZl?86 z(nagx%KD38j{zIZAR(3*pl|O+TS#UccQgsT8l)qiZn&|!op@}X30MsBVEhrcG8&G) zAEl2%PBnP7QNccNkY_g@&zDV2_Wd&F)}--#6?+|6hqcVx7>a3OM>5`ORZpQxZYwuN zGMI?@>TdM-7)Jbm%Ps%R(kU$B)x7Sv*mZCj{WKrBOe`730tFL9q-pUdwak?UKQB8Q z`r?zQW&9DiF+;&nKab>+;+POS`I-(sY-+>n%7>3ZXv|RPV>y4{bN(QxC~X`)i&cDO zCrPlK)xac3@$2yT3RxW-?F~QmPz6O*wK>%I%9$BPiO>B1c#Q8@^4Qu;{rZvwKKWSvFZL0Y$P{StzFr;9s6ZloNkpp#mu*REspLE-7jy{=@8O#h|81++)9P~;CpGFHtp7lV$+MntZ2#O#%vZ$n=V zBZvnsQbiOVKW`dztMp%K&gof!^&IL|`=itnkkh1;<&+bv{!97(Gjl4i-*-lJAr--=qx>2a6H8EI(_?j?u^C2THk zlb?#Wh@e;hYz@+i-|mo=FlPInErm{k?c7*d+cLF`54gEG8$Yuttt<+G)i@mWXw&`` zKHzkEe5e@4g0k^+{nbp8$Z}*0M;uwsAqR-=+#K1}sK=B`y_R&8DY(iCpn%Jt5`E^X zjkHkMm|DKy8bW0I4^Y#Xp&FI^E5~ z{@mQm(pAV0aA$MAJ!MH!pDKityifr?7``Yul6i(Hay$^Y`7#7g+RNUA6q&azv%Yp;Y?W+Nk1gSp+vFQTL%1WYg~Mm-sGw0Ue1Q< zy0@Eg+W*W?C$yva+F<`AC1(w#Qv^}%1*1t|It>J~B!Ey~lZ_8ALehuFS{c@x>5I{e z*Ubt4r}kaHR2|fN%>`$xB3jM3WD#!X&1TxSEJmGX0})&nmo>+0Y+W#OLf3E%{S=oZ zLKd3x+{dmPxGb}vKzSsr5T`{!+X9g7$XnD@AlI#1@NOO1Wv5RF`3WJml{e6W$GpIl(*i5 zkD~Zs<0=r1fM`qW#h3rdwNH{~*Nl9yF?{Tamw)!eMwaIWQ}zlG|`L{ey9^jwd>k>HX5Y$Qm=;p7yXXkfg}J|ii6vl z0)#k$rXMRdF?|FMJOs^}L%6;&$$-hS=IMZwCs8tb?!KZ?kh+ByawOyN;M)OMv;Yn& zoFjc9L6v-BI>SnfwZ0%XjOeQ|)pBM-ZD+`8Dd!lf_Gsw+j6f&dpk(!2osTT50boZB-1Nvt}=PDt;RH~f@XyGmLkl^}>%y+a! z{y3to7&&yn7Ui;5sG53YRE_Lv?H1TYs9gMV`R2|3x?Z{!NJ$NyONfKS+PH*i9bYoJgJ+oJM&(l zao>8Fmi9wa9kdvduk71FUZ3sZ<*}Hp1z=+<3^Olz`i48Gx(nW!!tS=koyt-adRS)&Dvbcr%Cv0uRe<4XD_gybg zel6Qy9P@ml{#BtQ2W2|GdNvx~xIP_8ZjcFnl0ka#hw$-?vL0W#dO{LYNH7_jcSfxV z0BRvI#TYBf%s+#LWqimqCwnWE6x;SL4-I=?W`ThR zgqL~n$)ucIqw{APtNdK1JS)iobS>VMWR*9!o6q zo9d80CX)FBH1l6>l#VrKN{dVcjE!9gSRFmG7u^a%>aqajFVB^%xxT6L5Z|Q{X!lC% zNM6^rK{nNU>-+|;DT+qBmm|j4TNr9jps$zSKj2`IF1UN~!HKLXOIR)lJe)dpC;<}4 z=FYasW$}pVIcv(z9=N`GpxTerSPZS4#OZR4{71w_rzc>;^{uL_)rY6}g(Qk##?PS# zd={WQ| zFE6b;uF}zY2>n7E)M>?M=N_z|hDqLyUzeY7MXfH*13?K&>~R9aU7psB^c=WRAH6mt&DOx#e2cT@FFG^` z99dX1KYctASrQW}aO_=GHXu47Qo+Qit*&H;!Z>zLN>F|}D6h$F;+Boo@p-D|IZ9lz zO^apMA0Goe=nb;u{nG2X-1~4$@O?8{X`9R8S2dzlx_yfTEBpN^UL=O{bU+~-HQB@b zOtykht-V1S&46PRcx;jO(nI+kfwW=%GGqW%&__P;cyRrCUX1H?#fuYOoAE>d=&3eT z-`}JO_kml-`OkQ>ns5K4d#YMg`j)CiQCj9_J+ExhgU>5lw5RPseYpRGzIaH-!^`w^ zzWJV|j}2Zh$%WsZe5%zahF3Zl4VkKLDb7BZD{Qpe7^j0wq9AUi@~xO5+Tx-`b)_!6 zVxfqhXX!H_s$P(Yu(Jwx-M4$=@13nEs<6#y(^BvFXYBkT5u+9yk?-#yMvrDb_tD`z zJL%0gCfA?Bv5G(Bl*gYXPaun5s(Ix>4sv(_0pDeGaVCM!6d=deXWN}^@!k)cDSv~SDdybQDp?3Opt*7 zDSE`nobdF@ihRHHMu2o*V*SQoaOJ9S?%H?g0#AL~=!1z6O`$966)el=jj^A>zKqOU}El^ zd`D5gg^CMG#RwFk6Hez<*Lv~JJ3Y_{8ol4#K4il?`E$P-H1c?J;8I}OjJsR4CfpRJb2l8=_1jvBbhoi@nML0U*48RL}``MQD;P&2b>25&_2RnnL z`lGvnZJlxI!`~x&!J-IaNH$%&vM(m@#a+^!3Hukh2SXXKEQz7yk^&#DTe^rY8ewKn z-huwoHF8bk-oY+cvbS4<1lP_V6e*C!2g$D@x7p2j>XU@&W{n-edIFcssOtQ59z*_QAwuwQPK-%Y`gOPZ6#4CWdOy>mFG=t9u$a3SKQx)9e=ce`l}5B3 z&A3kT05fzSG#B;M2s<2wPg<`hy)}7a=J`+!o6G?-PR|~stKFbr!G0zN(*>v=g_-PP zdgS^1W8>ev&J(04fXmA&=*n+2f9jj#9RxmQInt@BuThYxclJE`rr7>a}5por=;t z7UGB6xGeZj*%EiC63c}>h(poBi(-%bRk|V#LCtmauX|iZd~Qb%MIZ4p8sEVT!n_~x z=4yz^i}O+SoHSp?Tky#s+9_y6Bf=L~&Qt>@r=DuqJ4lIYVl>5+I8N`q6IOCE>Ybt- z`SY9u?B8H7{L?baufBFYIjr;ZzC8zCwLG08h80m2q!()5z|)(3%6m6!Gh5Y#RHd6(79LnX;vw(Ms>^=QxjCMrm{4<^n!S!dAHT7*L|Sy%lJm8 zrp}{p-0b4ZVb<}%>C%4x%bcns5A}z=7peA8P(~$#(M`IJjRE!~dhGX4uc6HF`t{yU zcFv(MJPom7K>8#TuaiFGKQe7l(NH|b=_%JzOv5*2%;K+oA@aiD5-=bMPDq_S9iOT; zJQEwI>Olo?GA^bJ`Yl_vB}(v7_B>9}i4u#2!1SYM8NO`q2yO*yzjvoM;i&!$v_~ZPivq5MG?bUR$Mj3<^Mpit8xf16$@(waCT=MZ ziW_TnGdq@@Wj3o|=j49kH>I&!bTX>_QK|JjF;(wtOg#Fl;heND?_~M<)t)~(Epx-b z+oE%6kSKsib{?r&FhPk*jf5?P8q64-f@i`Fjqz}!h$ie;tW*S#!NNA5;Aqk+u|!=! za-WLnx;3bk#-(2bQ;FW6j5n8WJxGv-*H3Oh5}eW*TKLY&Xj9fjXFOPwlJG}C?TDf^ z-SMD<+U7O6$t0G00?#U1^O_`=2O0SNtx?e?!%T;pGq{xtmPeUi8EKSGuEsUPUF}db z^~LPH`3JDp&h}$jc>{yO64;~WAS~Z`Gs*SsOf|r3Y8lR$B*T&t6JR5K*5UY(K+2Gj zRi7Q~k^Zg0l_T&(s;wqem9HdGaQ(-0b7zX^=r8&PO2^IL2uq{7@tZ_txV&m;6@GDvYtSD6AN z@PT7bFvPjnj*G5$q`U8F6AThBq&9g}qi&;X?2i{r#=FHsAn5x`9xnC8J@gn0HLH>& zLdQWD?^{ZsmMBB0cf#|`mRSHl>XKcU9@(V(^-183P+%hPqd1fVD%U+Ww~C0lLSVWI zb=XM*pdM;IWiTII4hCN#xUDv%oi0i~?os%Vlg(V%_o3S5Toa{j*oFPb{!4CB>JvtmAV%=2J zxVR?qmX6anMEUyKac3Noj3irQ?}d2upTnG2ZAs%XyJtHqkR(>T+bVO;FST!cH@t@z&u-NX%l7y+o0q7Yr|aH$ zDMQeUS)#z)_XSQ$`PFK0!#S0As8m!lIzLHLoxWrMpZ|7pi4Gxsjw`9NM-b43xPdFP z48{U?NYj_2rySOiVHR*i@C}-Nay=d?tkRqub2UV#;D1&{Q5xzSo^og!-Ee0=laO%M zn#FU8O4qCl@2~A}RS{}ErVfMgDC~al0oW9H=ei1ZQLL^<tA#k*ynEKR9_D7M7cH9-ZN zIE%oy05L9fB+b_tX8c_0t_Pa~UYJWH)>B_aW`KwTWGJ5pUoOaME zmW=zzOm1xVz>^YFFB;$sY483w`M3#2I2ktQsLy#&0nf5%3x!fMGM>ETrPHULL@?ov zz^`hmELg-+DH5rjigAxe3KsmQ*&mv|h^! z{gp=X*qq30PCPWDPjd9=gT$y3>gSnM(1#*uRNBD9<%9U6(?MK~{e||}4OghSMeZsk zxJSj@q28)#spyH{6A54F2}EznlyBJHrPq~8FKefS7p-Wb2KU0Y<}0dNd7Sfy#zx^d z#8u?9^DDizPoXH1?raXW`(&AI!Z*}>>K6u+o99M3818I*E0NsTdQ;SZTE|$C27_ms z<#q-JI^%et2|eS0QUh!2vy+`&{-eLK2YeI=l~Be1+W4a_XhT9{vTowXWE?NG|4E3W z^GT-@v>RkaYs`jk^QqK(`v6|%_V{A3oT*AP!pe}6bYWMVWIa<@1c1_(!O)gj2BSV+ z39*TKP11d;S_Wg2W{YcolkND}(tPOv?LS+O@1K(O>MTgjKS(*H*dbI!NOX?@*(;*@ z3zS&|^0?pdO8dbHO^8djyWf+?Ud*_yUf*bo65bddu}^bO-QmW4aq{GZ2;FGAv=InKj1UP$Rao|J#aX})?5f!BSmPFmJcT5B zm3XW*;LIkg{`IpP3=Y$hj1w>5^g88xOh!31BAMz<;wI$2D=VMFK@lkiQWL9?`3b9q zgqzE|nerKEj$aY7YQ7MH2O6=mgA)m-P(!pix{V>IdmnZ@JfRDyegBIW6ymc0nIE8l zm(IXeItzol@VLdfj1Ik!ud%hYdctyYu9BbU|0HzbX%FAzqp*6k9|J@s)_xI8tV4@V z(@OzcGwmTrfFN#ofDPxv&8wQFEDhVIT71U}qYNJa5D^<|(<|^ew$j$BRm1Cpe#-V@v8?Qcs7k+Ptj}Yz=#yNQ0w%T~j&+k5M0u0XjYs zwD2<;8#NZ})JdF``UICDP&qZpzlH(dzrNB|%iN2d#s4N=l8-KCgN4|tGIV}yFWXX9KP9>#;T&d3U76O_27 zPB&0SARi^8mU__}C}ZhY<+t71TyLch{DuAlCTKC%k3S{Z%~MF+D@q=X?>_B4sP``q z`bX(-9Ktr>8*0w{-0)MzL|GA~a&t8KXnr-&h}XRP%|6dCn>d*};|F}THa5ses$hQ8 z6Tao1xa2q3g%{}r{)3mZD~paX1?+ruc)0+Jd4cv=c(0V ziwWXTCM?zW0=&L3BFPR+oEv=4qHf3CJ^u{C;Ei!ph3dQqxb6G}cMUIDK+a7}ja5FO2U)kU!@nEn26<;>^>Fh^P ztuXwsbc{`@h)Nh!IUUWvg2KOC8Jaxu7R zbK)3vqIHqE34TiLc1~ALwH`yt8!_VO)>2eno~WRn_Ivs+2oxQjKdM0{_yGevi4eO@ zh?OKo{v9_XpL@DX0ZQ#{{Tfg0M=J{C1^I@%(o(*C{IRr*L~`WlGwCwL9;uU^47F){ z#8spDnKZ+|R6C1=ESP{M+g>ynJXF5D*}7AWx>4$bZ#dqYDk7lt`bzuUl*(kUw+fm@ z6`gHRt3XC-oBD4;N4X~o+cJu4q2bBZ*!6rc4*GQPsvw~&+k2@%@C5F;$^Aczlg2{2#3E7scd1BWsu#@kJ*aZK@(4>p+{#4bM$t&QW`TligQynN=9{g6gJ=@8otO>v zJN63y0)2X7GE_2+U(-CZ>VXO6nnpymkg1jKmKPQhkQ`4GL9?hQMW99LA}EQApvHtp z!rGPh{r%$LF2%Noojaa%QyCvxXZ|-_*UkQG(MEj zOS|{@Na>N*wK67P0a6ohRj{Jqc_VE}&VgbE%v&GKkymt>T)>;OqqJ1y{DGE;WK3gU zC4D2ZtT*6L%!kBqD9%z$Zp@;CHs^?aQ!_A~&OeK~q;cnJ9=Q358XxW@)K@U`OkOgX zuWwvAzUtmVZhHME9v8$D$I0zS)fgc0(@#^zw^&P~2Z%b$FXS>~V7;QTotuOHwd*3Z z;WZ;LAwkJmY3md_5dQsIP~S$I?k~zThS{B7CRJNacNJn0+ZOk`po`dfaS_8v_d?_$yvQ0(C>}u6=zwM$Z>6X-19iI4 z4u1uo4vO65JvRy6DViwsi!KEXovbICQCKMIyBA;LtQCnkNi}$gh#FZ{lViP`B}$sc zJ!d5hLhS4^u`UXvrgrZ-(#toc!dgEBdzDrpll%+TL;6d#o zIGhe@vo05fZ!ZC!?KQQAU~S80xR#Ngth_#~m-XX#4bT_MOhED8=*HPF&Ub&sAnLSS z&JrpH^39tlJYjbPbCX+t!qa%{=-OGO%t-#`wpM;?343=TIQCg>JgY8r&EUHA;a^Z` zrL%lz_>;aR2s@C`NIhDT()RSJEZh;t#CKE~y`<(~(|oIs^UPmcJGK>*Zh50?h#JKZn74#HWRIMqOMXh2OHfNUM2=nNiRg9eUaMpM(#&jrkAetmcptaI z7SZ=b^~PHnsP(d5s+vM?5dkL2&nJ{6<`eAaBi9`}&T9M;vwrT?;l4jj9Eq7)Q0}b3 zxDE-Kvx-9-(;VPNWg|QrI;B`v4rCf4@vD^@iq8ym*BfiR0L%{c(pPp%-6@TdrfHX| zZc+$3AvhFe1Brkn!ZrRIV^ti%id5p~b=nuZDI4LWtw$#a}ZsF{;TDQQ+ZLP&v z%d4IQygC0?Z!d)OKk?HylS9p?XKP}lKsfZ-*azlF>gCbF%wLllRk_r=#>LLpw)*8& zUR$uD^c%$$e=LQOP;H-Co3;FUrYMW^zkqo(kWy6Y7jI-^#7*Xjui!)Q67*mV{>E-F zX;I)0+Vp7YI(Ca$vjKpsNRDX9sRGz+4Pbz2%(a@|^KW24|G+-o_bmM-oK|==NiX&x z^=KJ7?lJxu!-PQ!cy8rLvH1;H_Dft5S7R@~`Q^MgEid(8@oxCSk0)}U=&11LxOB+# zBfz{RWpg*LEvqB)>yYR6&QIUH_zO$$`&e@Sla2OiK+YH5E;ld979qXrbGj!eUM=r^RG*`6zoJ zpu%Fg?4%y1;Av&!$MY<;fu*nFt&{9opFHt|N~f47!5f!FdMV)@{K;@9wK9E^mnoaf z6^VO}4g5wILO85%k77#h+g(-TC41R>)vIzZbuMcwhg$Xoa~wy__wYW#vTej)Z|zv0 z*VXHqEWA|`-Ob);xf|(U_-AmS|CuNGh306#<6g&nl7lUVYLp7V%S$XNFH#{&5=l>o zDg0WRg{v4Y2m_>jI_l*j^h0gehQ5qS^h@D}b#1(iMUdASw&Jq9|3!PD`!(g|69k63 z(ZPP-yHrrz?m=~)1MS5-j)M54ip_s}+e!I4$VeLpJ&A8tXlwg$XCJLKj8PP0wf^Wl zvw%bVXEUJPO0u?)HKU6AUxJ$|4Vh9%{VpvH85F4IYTrvkGH+0zc$dq60Go--)vAxS zZQ+3a@(Lr;a9oZ~nC$T<$aep+M=TCXS^EBNlFD4luaci~WrBJ)p%-4^VO7|@{zEB+ zm5zRdb_9)Mph2FVCUJ<4M71c#ny%pP>_|oksW&sZ@Zoc?*3$Furg&Qy5`7%QM(2mYZlEzSj zT9Xh~{%>av>_ehR$&wlXWWf-dTUpU!8S&b689sO|vu-?W3S+nhfnK?dF84j6F_5FkEo&^n3P4v$wlT>^I-yFN!Bxn6oyt-!RY*t{`GGaDZacKPS(D?6F zEcz-q!#BW%f-^+s+Ij`@8!?R&*r|omA)VE)=(NfhXoJB1t&%dHLZJ!^QZJC>R(*+* zRe$OFxVY(i$GjlX_kyC3Ol4Kt8*Q2*GIGE zlV*jiEdkD}DO_3*D#8^D<7iD4NZ85`h+qqt5omKg6CCu&sY4OTnkPa0 zG8GGZ%=(`PD$E{+a4mj#a4@G_fR>})=ldM;5y7=#hxusYh@>4!yW8SPp5oPO58n>o z93P(FTE4;1@TzC8e5KOw>|66iN4+<^E_q3fn0zU>ip`WC)AYq2jk&>YZDQ11=;dI* z7@3zhJ~AHFNq{)GIyuRFTK#{;L)-9--_nOO%wg*rN7xMO)~(^;y1g1;K&#< zi({V3kjE$tE=9`+HA4`%3d!LUi8ZQ1Ld1#{@Z?U?R^50lmxbXdofs^&vx#%v+oLZu zD)pB5*Bcb)+^0lvO*3iX^7n6S$r=wFG{kX@;}*Y=v^{EUKDSRYNF^e3L!UaGVagJ+ z%ozz-kKRit4PpLhJuOpE;-eSs_m-b{LVgNJZ>zVgwz_y=qVJChw>|?dz%kfU?IJVe zop=<%rQ+ELX&8;c(E)m|ZIf=b27Lp#)YGwG-he7&7uPxua}s){9a+)z zd?EHI86sc_YvA%=(>R50G%jinb-(X+C`hAe^v11vQ429z9w17g<*RbvTivZ1YJyAd zw=mu>cY0oCvR>`BpHMaT;dC-4(Sr-nL0nMwS%Hcw<&>L{k=gu=NCFTBGwsr0Bnly^ zCC3~v9u3(g9&K#7R`$5`D<;gyBUm}buP}uYn+RsIjy&*Iq&_+(G>lt9@lX<<9$sM5 zV(ZLdP7z&Hno@>&j_d^7GfW>-+pL$*5vwfF zuHVR5O{U<&sD|0~2{EQkLYHW&i`lyPx^u}Da9kYg0C;9K`WzIXI;$xx?YHTlzbD^$ zq<7MT)As zn$n1_!J@f;%$pF$P5t_0l~rNK7iu9d#nHgkrWo&2LZ!&uE$sj0iDu#_IM%O>@yhS= zLu9V?s7Bum?IEUw@D>ZVy*=)qZh#h$LRU8rF~b!$x22QgQ#!Nt?X82X`d~f0)*^ zJ{cyBSsYHz&Qe_q42%OkymG|-z#;4B-kT<&#Hf$qg7|#TPm`F$lG>~*(TQ8VwPwfJ5w!iXr zwgbS@Dhw!Wyp>Y6p4kW~NnjJAsbjp}Ljin7`t9k4+3feRe3=BPa$$M&$(~AG9B;}y z(Mc2FrrfMufGmU}T?qglG*0OMtpzLmpfwW^bSDtimiagdxgcmNIwyw*smH>AYjW6| zc;Vw>m8&L)y=&>O6&FOfo2${Sggc{ynfx{rH;(7dewaX26OuGf1JFqB%PmaA*?tQL zEb#Gr4n%${N3--rUKh~Aoi58S<36w{F#}D*f5JSYTXBP;Xnqb5Nko&c(!!FR)WncN z_O-{SygyG_n3tVHikkeFS~XqrQcs&Z*YS)q=Y941&pzv_^Yi7&wVG{n^)zQqzOLJh z+`F4LkCm*_7HM>&j)=Lz*C~|D+9~RrX{lL9GVH?C`SepE@^NP~Ni0rfnz&UuVuRUW zY933!&y^ftr+{pbczC5gbY2PFFxY%A+Hp*m?fMBHub4LpFx{{kfdVjiG*99QqV9_- zl^c$07E(>^W#7aUnS~TsLR0tInOAuUaK|hpYJ>k^YFYAU8)A;%7IQo*X8i!&{uh^i z(u|#^3y{Q5m?8Pkj?#7PAz!0?krk0+@yjeLhKiI%RMFYhccRowL6k8FXT(A5rUa1v zx@^G|Q6%-4dxp_`0@pt8j(0S9#bS6zu4uc?Tj%|9@9ffUV$@_UT*vH4 z+fg&L4L;))h@X3NE+=axfyZS?b|kO(n)o~?YMRWz9V_wjVzQF3K6Ce@Z)lOpPAbHe zeT$I{w_~OB)G5p1u`1~hLJObzALJ1ahblGxmUGnTkzNo}C1iA&q!en5ubl9rWPWBl zOEWlYn@M_Lwo|rneUi=Ze~`EF*B5pv%*DAV&XP*ukzQbeWKE2P4VxnNUCiT=M8iU( zLe#A#ho3Z-Tik(@>9MNXE2hP7bV+XDj+eX{H>3Vq%%zPW+(XUE7A3^WC+h05AtuH3 z7e6webJbD>9mng+p=wI8<E2M}8tzh^GnkzR{>;2X#1fjM zBAKU_oSbEsESYlXPf`VqmPU!_LRxX*faG^lA!aaI zE#-z$x_aU@M-L}gt}0oeXsmv{vabCDhi-3er~uvnlrT`%b}RqDK%5DbvxLu&dz{+V3c|FZN)m%ef7L#DO;N_ZmU!5N4mU=cQyFSCPa z_eH&o3f4K#gML`8XqeInE&p+WCgs8v zN%-3kS+7m_o7cDSw;)+>$y-*{7_}$()tU7x7@*33aj0O%PRA7H=8aatAMsYKQTJY{ zUE=dxKl7P;*RPg~&B1B_U54HYUGfdF2c8GFv9qylf%7nLtoZy7xtV$T%hbwx+7CZP zG)pzFT*scaw#La~n``rYkwFjWwX{cxi|4^P7C1Bh_J< z1o-Zy|2CXO&ht}TvdGAY zUzO+Lj`*_uS~{vUT;93)UhTI_-s$vBX`8$#FkOu1#mADgj|&8R@-;K<+dmTO2Q}Ch z00u5kr+0GtC=79z#p``>3cG;s$QT!jKkEhzp#RMzMWsU4oeGxMX)a-E?=DStIp-uf z7EzS}+XB@CjNKO9jo}_2S3~rRs=Oai;r{_Trpxd(6M zL`+YecU5sLxFBkw=oX))>q!goL&CFL1%!o0i0Z18oaCueI7zpZ8j3=2W&3HY;VQi1 zr}M;J$F*^X4!L)e`%O`lS`3jpeu7&0+S$Zx(l|QPNnuVDfRh?tPuW)p0-(1!6)DsD z*Lwge#md72T;_HCOxyHid{?xF)A6>I%Vr6AxXIzJ%g(K8JPal!Yv{4f?V(Ma3F45f~UznzBWz@R9Dk7srAMi>VJB?*0jW8>)si+ zn;!G($>;Hgp;mz zj1UHCsU(zl2Rv2_;$pmtU2s&fTi$&yZygR~iHfPid&&58?snts)+SIrCqI&<#EGf| z4K~J*Sk4U6(lBY9QI2!4tB50nh^Eds{8TJv!r!Kfz({Ta-DOk}Y@X)a#jW%HwMgM~ z^5~{6;yk%rN@VokB-UOrnw|Ax>f#r&JlOuQzz!|nWH%BIS#H!bJEA{1 zdo;|Xl&Uwpb<5lNz}HU`&i6l^i<4H?@!Wm}c?KUb6HM3FhnaCF{2X7sifJJU-e5!C zoR`LPGo6ha!`|%u?!Q+r{_{E!zs4?(?^KEWv4wZLQ2IC`0hg2xf}eLzYA6^V_1wQr z=YLX9{%;bdAo%rovscA2#X;Pj1-V-c)ozj7$nD{lO8>aC2hctJNCojm)hKr>X2md6 zOO#%P=QylT+e?$=S}c37-u&CfQ@eRE#H2=DIPy7Tlhvmw2w>tf7JXw48^q0opV0bo za7cNg2r+E72?xtTF1e7EW0VQuBxKTB;wA}>s~(~E90rSmpm6Ai-f1#$NE#D3=zWe3 z;|%2tjoJ*$l$BO4NTq=pct$5^cCt?+S-`i2iD@buS=kD2ktDDBwpchD4xxga7s`r` z!%bOyE5I9r)KhFSTWOQy4*^GX$QR*Hn_O^v%xl`<;b61j0qVubYtw!_EIeY3Jf5V)X+e>#%-uPVg z&+n=Yt!RQ!T~a5DUON2}7AS&Mb1FV7c(!QUJwZ(%dVY%EutKrXeyH5m=Qi)g#<3`z zT#N}?JQe-o`g(A|K6TqgBgyy1=d7W&TU%#mz4`v`Nv1%XEoz1(>N{a@?D+Ut?ZD%Y z>d=|5ZrZ63X4ry$a4`KgdI$&`tR!kA^ZGKdy7vX*S?iUO`M3f#m--cNnpeqt;C7g( z2Qbso$tihFxWqKJw4o&J;sc0X;lla2xZCtPNk`me26^|k7!jCO47RzKN7t-d1jkeE|{*F5;u=uPZ6 zB1@Bzwd)&Zo^efSjlmb~MacK|Bl4;=vY7#(l6)TBKhfFMN&1>mrSlD{hCiBK6v08H z(xf*Zv;x|}gAb{4Q}DCDetfjCt})StkF#O@2hTUM?R{nbpd}TFYHn9q0Iu|8uYV^) zR)()u+ma#wHwkRO-p8#WRxq+M_>cYFw+l0)=E@uT0FYk@Cug zvh-sj-u-obhyMd#;`OBZi&X-AD})YDge;DlxvwJPX35u$D^y{up6tAnTn<8$b3&WI z1uWr_^E=tg(;V04aiaf)2()UNxd{24#CLMtv0rTiM&z2|6%V#7QrBP(Q{*0Ny^SSYA)_Jot5=dfPBNd|1TDP*`O(Gi8g{P?{`D0C_hq zpRBDVBMm9YcoaUygL=~bS2kglMfj#dOa39wftKw>T~iDTMG<9P^?@zgqz>}aGzYc_ z7c7FDI3*oxmADtox}PgrOj1u`rmP0b?@jAJ-HeF0j=o3ES=k0YNnV7ujO_5 zi1#6ErQifLH_o2NM1PsX1}imYL`0xWIO4B^X$Iho%E%aXiXBkmfJA|O)tnT`biFxU zS!N5@=h*MW<6}mw6@pp%twyqE|6%X?^@BZ~rPp|osW9-;8WI+*!?iszreZLjd|+dP zW4bPiMMZH#^g7>1z4|6q2drhzn5sl3dZe`xinb<7B-M&6FTXaQdM2;TQ{Y+)p!qNI z{)|ufXC;GC1jjr{Rt8s?&I5$;#PZ&s$oEY}CGZAzOa~^j1S@8{OpEWC{~y1~JUdKE z!vSvlx4|p@*%kxLExsu;WN0)irF43vwTS2CjhQ#8A|ozK|4mix_((n)zM7f&`yXH> zKW`WOBTFw4X_Ug~uC+-&}U zjIFgmQF6Vj$A$n>EM#|nz|+y-iW}BfPxU`S-mwHm$cS#WN0awS<_M>8SsEBLe}zpX z6cS-UOyUcw1yLrjKF{!W;L7k(+KCZL36(Via9C9eYYZ`d)M$&jqhYdP3^xebr98t` zlt$$sMcKaWd!ya#k=ropm_$&p$5(fJ(Xr*}@p@NYJeVr!g-ZmtKD3gBbylQ-~5Fxf11PFG-XneFqQr9Zy(xA9Ui z6cmbyy99U5fJ56NUQ|-^Lb$cL&<_sqd+``M)$sTVXca=bO$;W^>x|;%)UbFyEx5r@ zk5?mCYG*s3WoJJHmQ9`cBslV3Ix;(QF3gsq7HK-43lzt`Mm4^FX>iAvV{@``fsmPB z5&IKRA9eJ1SzzSQwBibBkj!sK$J(A!pVM1RQegA=K!`=3WagK|3l;BWvQpw#?Yf)N zJa^Jf+52+xtcl-TmmF|r@K9fwqA^^j$T+{$U*;#Qs#BBuW7+zD&%LP~nM^BR@;oA; zPgOmkp7-iYOJ%1@@ZzEN=U8l&j$mBvfw?}-^ulndMc*JJf&j)rV!Q-LW+t`Q!c|n( z^V5VxJHxH_c&mLa^kP9=Xd}B{mG~#GbKb9{<#^c1Y8r|TH7%xO9MT06GlyYlLV`sxRnr?~VYZ?ZC8d5eVxcCPs zbLUCVH&73+T@(*Als~RbxDq#n@%(?@urqg}qr}Sf+U5hbSln%kJuA3Y(%_Eu!e-J~ z!Y(HJ$*p|=c&ZYldi6qVDRv~pStAgtBsInFKN` zorEe#K3M+TgZ*hL(mV_Fz+POZkyQa0YNQAP)#wtDxWq8x@OGY)%Q5!yfS+>8V9F7; zp<#4_E8{&sf?PJft<}hlQG1S%OWl=ewe&kk!S2N0tbY_JFFRYr!Fw$SLE9m zY@2OXUI>>Pq~|{sEmyC_wx=+YGbR@< z!hiY8DaSuAm@ezp8~v2`NZ)=evbvpGi=q-nt+=WuCq)H%RmNAUd)u=|>o@F1{d{{c zzijENb$NU@Y^LhBvoHp|&T$#85ZqQUg=(Zf8Yro8_NI%;ivMzD0Zs!7+yOLygv_6mlJYO8kgeVkoTUUJ*TE>S*ZwJ0=}@;)Z>eBSYI!wc0 z=a=mDk^blcIoOt@bk<|R^jJ8437h4LEJyNs5aln=8 zJH-Ss3@b`?Gzyx7Y)l8AX!XZ6dX+9>A2TD2N{}qXUtA?!tg}@N5zr0ix-%Wd-pS}Q zz{-swOG&zC(GdG)s?p#zzPCtzs?9jFP7i%{Uw*Oy?!jS>!40Nsr#C=8lGOcYpYzC* zkBbjKFA$BP-=iPNSIOowZ#K}6>H@Q&Ja^@4Tq&w^s-%JszK@^&wY_X}KKQ$Iqkeyz z8WZ}2e8mV)HSe00DfXgScqi4AToF9N<)>WWVyFCBCg$l%Ave)l)Fm!lq*%NeMyC6J&dWzQk zvyOSZJS5h#`I+_?i1`ET;UJY5-6lBTJ%Pv2w%Z6PHz+7IefVfP;~%Z_mU`>k!!yHw zh<<3D$PTO4YK1r?bdY}Mz=61VWN1w|m)~WI0uVDzbMK&4M^OLdQhZr@Mbg7IZ7H-c zsu42zw2)vc%nZ=%zvwZNGP4e8{9jYGssHwVKNh_N>kB7oF%#<2;RWweTw9sANHNW3 zSt2slQ(|_w7qR(6mz7w(v<|dwcuIWS5>Q3y2vi34jv>^ckF7PPfbb z6$a^2Rv~iBjx(Znn;K#1p6j)y6}l>%FtL~kALdSX!-286Uf48MLBTJm!NGD>gA)hJ z4PJm2U)E^)9Cu!yEm%2Ar6bqRpvNi-cD9b6d8YcVoN)9s8Vkx*o@n|>0{W!}&mo0n zXqwUz=?M6fE7DZfpC7^EGdvf0txuvkSR`aoJM|DK)r6?&9t?)QSzi88!+I2q(?wTf zV1Y+$9g67}5LzBGgzB>9hG$S{E6Z_g{lI zOs!O@J@`;2F^_h)hCdlTOEaT4Q&AIO1PhfWIyv@TanQuX*kSQd<{$nud4@*|A^t-u zD894RPegx&yv>1%E3=UBXsEbISmo)aM;NZUy5q8#BAO;1^jVY%r+J|*T6mWm=Pr3% z6=$(gsjYN5x>FbA*KO+~w70GtR{KPa8}r#Nug2wW-*|vpnznsi=%atBP@8Z#FWNM; zWatyrQ%LJrs0wm`2rr_RWZ29uGBQ)5(?AgQW(fm)cAr9m1h7gHCZnsddejrtY%+T2 zc7J~D8lLjCeb%G2L@&cfU+d|FtpKB7uHH`9vr&rdcklQxGABx#+5*H_5(B^i2s^zq zvZ5L$5+ve$MMGFy?P63Rv8hhkgPcdIDP-7_0JYvJJArYAVRKZ+X zs^m)(E^_R>YkSdseAOm06kECPf@{N4n7OOsy4N)QXZgHNFuSox74IS~=wwxgK#a&B zDQhltB4o-x?P?&t{Rhq|E~b$Bu>UC)+;j&^v%6=z5~s>b(^hI6vSVC*%)yi3!4b`Z zyp+o8Fe(@{<2A$1O1A<&rbgM`dDeyj_25AC#-B;wy;V?eLsmGb|D}I+*Ve#;NX$Ue zJqisKo<8+}Pu@Fwf(kK9>&97qpW*PWOpXe_%;Tt7LNWtXmCz%sFdpyXn87W;l`Vtr zC@n_`4IuK{7jgfozFq>{lraOlMI~eJmjR-ht6BEJ+&md+uDmy%vHXU=k7?3e?Z4~< z`;FQO_N?h0KeqG}=J^Cq3T;GY7$LSM3&dL}jxj3gj{;}|6{2MrrcwtLT}6NFWK?_< zR1Dm1*}39{ju&&Ua^4pVl6zpAV$V`8?YHo#yFBl`?&L$2=k6mm4vUlKx4dzlZ0~e0 z(kr&SELgvL@f|J%0y&|`cFn=GTp)=ewHO#6)8&I{>P1M&W~MGUbJOKdG91t8Lofpw z;lDtGiRjZhP26_^{}FM91@?j?{lK%LMAkM|GQXKk(voe+nvH{Andui9G0n@J_TC?R zD4jAJUW-BE*9p$43ys*GUSv(TX_pKb0j&T2SWl`9J9?W$2Z`%5G#D4Ne<``}6W2)M zJxU{$(udbDlhPbt1)uy#K3f*VW|cRGOP`Y_g;cOoXTxxod~Z^(;F2m9*<8;&!9*jg zYm@9;q4yvcYP-qIRBiyv{7yw1H{F|M;@-#G`ktl#sp+tm(hPaWO#xxYQeQXDCucNFh`yU={Ui^=xh~Y{R^TPp ziMH`XUK*BmRlRzlr(#oal>0OmZ^Iwczjrq`tTzfDhp}P{8NhIBJ(3IRiG_6JoxCC+ z=$@(UDm`KT{Nwz@@KMWZ>|cs{6tVu|kT?JfI+y^=sFD&}!;IhQLo2d@CLu*{J< zJxn_99~SOD>^*z>K&mcOzaJc|Z5S;kSu+~EQomZbZ>|577g~c<<;1vW+WXA;3d0Po zT=y^)B>x2(56jc9F_t^TAVVX>>lU11q<~+mpC4x1%nCf8o#Mpjh>lWIC`-nG}y zj50fnuO!)vAvN$)Y=)Wm`0E?D;aBpvDS=wuG76@@@)o=Ff=cib#Bmod9?b7vz+RHg zTi?iB^WiOkFz$iMmG{ z{Hh;uqwqoaq8P^AIuI*7l)HDvH0*b_+Z?j8fyH&rug7J-$Cj5 zt8nN8fI;U#7&9>t-iKR6Ov9VYcG{{EHg3!YtHI!Ga|^7PB6O5iArG1YCLkPNjJu5e z1cm{yC(9caUt~iHdx#6O@RIa9SJZ&1Goc)N(A23hQji4WI|gsY0x#IJHR)~0nPk=b z3l?p?9G{@k*4B$K8@&{^S-XDPzsY9PuY>u6KzhQU=*E=^DZ8^bWQu)^Mx52-CESym8c9kgH}K z+Xrcwh7VI82NRbs-?5Q-n7Fac1kMjM}WX#p_K>cuv+QoD8?86B90*VF!#YTdh zkbwbG&ZCLH-!o%c*Gn-0CB@Du;}F_oGD*|iMdq0EZ>JlmsDJx*EZxBs{;$GDFPPjk zOJ5<{*R30IMBc#%;7u-9kPNq&ND<4+Fwuq(WZ!af*P>If!dPCWKl_^cJH4KniXZGr zgu6}~uFlst#ehBm1`C+sXE>L(wK~ohovbK}^0kaxMEbtcTPTSeV8`8e(6&l+{qO!> z3Vlt)#{9OwC49)Iw5gJ61-Cqq5pPO))5v1%4j(WDd^k#h?M$7dNxw7G`GIg5fu$cF zvKM7JNse!-?%@Aackp-B!Je6Go^3u~O+(#R6J1<#j)}r7YS7A>A$8D!@KzjqymBk5 z2dy)-wphm>bcUbeGEc{7>d;U_27@t-66e;KDh@M7{K4O25s6t)yK3j=?jJ{oZ>?$hquxZk0=Gqph$Iv(q0o zN>|0+rkT-J5ydQii7S$Xw{Fqx7*J+t_vm;qenQ$DcZRMf*AY%kKSt^BdEn@0E5b~5 zZ~2CMrLRdOFu}56-zEgaBwY|iNUa@Td8tBCn_|=IF$32L7ma z=6SCPmqrJ1L8}8VdT5B@4QLYyBz{VD3SZRRCRo>y)4&2{{=6R}aR;fjE-H?G2%g}P zL&<@Wg(tbD13@B$60rnDrzQ6ypwJGBpwJXn`ut@*oyXNp^TfVc7^%Jajp~Q9RuKR{ zG#ZDKba{w|j@{Q2!b|o_zjx!b-@kD)$~-ZK!?~|Vy{mC3B!kJ)2L-A)FOfIG7|}#2 zLMgMLD9a1L2u^3b$Ml1=#8Cn%pa2KLZDmOZ6y_vgP>5Y>?h71~9%=kvrkOwiRHBDd zNRJV-7y@&@17Kmu zW%yZ`j**?|zLu}x#K>b`cYReK4rj|#S>om*=o|@HR++03&hjOw2TqDcWd-25YgbU4 ztf}{TqnaLj!{0p3DFzjf`fY_p}6`fSw?xzh<|fREos#$#_VK$%U)w_Q?Jp zzrg?Xx8%dzp=*7HqzraDHtD1ef9RbC!RXJ0T~kkd0?oJtTqvufFepmytxvqVY#$m> z=Fd*v248Js#2g5WmA&m%b@qu<>_J#==L|(g*P60iCoSuwJmVwTF!fkDvav5HgJ|yf zDQbI}=AvBvCyYS0)8I!BQp|wNX#k)Qi@f;v>e~*lWT5u8xXKAkWyA{6jugF`WCAs6 z7h#myig~!br}2dRHJLMUh;yYy9@@9>IdY0tk#4e*1zM1jBhqj$tC)?8%#UL&PC$>!RS zDIJuNLdPdZS>RcM=@N(jeNP9@u5bJ9N(xqNFf-TT>u=)6WAVdu1xzNxcUJEIS%kc^!@;VJ|8|oKfPRm8veT4*t9um5l-c z5}gvMncTePFCsnms}lXR`#-p=bwkScJ!WQd?b}Jg(Cg%Csr5iOkyeH`;rlc>R@mz8 zo^Ebe_5uTRY5q4lRY=>R1B|7ErHe~sjP1Ks>D&-{nR zJ&|9fzQhNG09yQ}i9k@1?6kd;aEqDrt8tXKfFwY=Fnb6q2Q^t6q1j$H@d;uTun9C; zu&*R!VC0>W)`4P9DN$Oy=7~ThLhlTU3ZQ8KRx+@>9rb=)@N-3|3kmo<8s>4QR^!-` z93DzgK6J5_nu}yRF>B`2W@UACZSDR=Vm>A=8g5EJdL}x#lg#mc?`;u!wAwhZFosu^ zWTUJkTk2_N!938CAHAyI# zBK80Py@G%E2hyC5mnwEc68m%!#j1$~(&`kgx@K%nC+D}~A)H`lfHf6&z5ZF=w750p6QImO>trd*sb!Z^ zT5{lQ`o#}$@AC2zUGPNx%0GhRefGf@S9hTA>Ee+E-b>**Mt0x^shv6KHN4e9CB`~f z!5rE5+N4i}yPCjj7|Rh(aH7l9i6wKvvodz3RSEVNMt4CpIPLTZjK2jc1ch#3PqtI>(%l5ICCi zL`fw>lKrJ5Q4FO5QvKws>8N+qdg|IhjBa7P7M28#{5LzZQvGQDDtq&NB|-m-neWqw z;-3~ft!f8p` zN3DwQ-Pt1CsI}%gR$dBZl4fU91bzv*GCF!~;3yk#C01yJMUe=@peTJ@07cka`D`+t zmzGZ>RJlY(H&dcLT3I_)ff0WM0QJVN+f#Scf9w`8r!$m@pCpOcG`5RXBw7u{hS`d< z_X54GRc%(feC`{MRWR=62SFJb<-atQ}29V>CuD-}{bKQE%avMD9S9)IA%@C0>w=J-v2RT} zVDv}{F0*&YFYA5v6FO0RKRo_%8DhWKFc~%Ol9;B9RsqLO`zq8#42HZ4!C=y{Owchs zCm%;03z(9@<+_atvy*xW>C0o`Fy?Nc>8yHyz&kfgMs$S@DodjS-r2d>gR6SbwuXxJ znunOLfJ4ir#jVye;6<{B%_98$iKQ?=I} z5A@hE-Rl9bV#`^M)?;}k--k%Klt;I%;_;`muJQ8d zyY(kbsgSipx@2cu4`-xWvf17?y`U^;C`}K8RkTZMgr!Ardp1wyDSI0&!;NuHIhLUCQHupGTGfN{)t64ZcTGbw=mK~Ut( zK(v$Tc>!;E=aLe0ep3%!>ZCb;(f8#lagndSdFvDl7;SFTzD;ZT{p+WPM;Jts7^WQc zj^lD+>5cnGcp~{?{kvq1DV2UM`rPZ^4p;S=AemtF$_j}rU0Pk+&|+~(xKw7e7(_V7 z=to!$KT7#ZMFu<2rEmh54C$(RFNxRKMG}^ z$=>T(HP9>F6`4gpTalHzb&&cC`!7O`-W{q^sKxzn0{Pi|B`z6H!+pIfY|vX@+2i1e;wX~d0F1;dj%4Z00esMQNb4LHmi`l4eI4@jE9%QpWsb)zeW~=474NVgF zB)6sYEZy$tvp-jHsZYvR{2u#f{1LJEpD!d`lztzEDtiM^(m~i?TT{EErr8{)zd_gU zqT-;L_ac^y`;AioCQgeoMq3g`(9`_?jm$1hlm@;A&x;3P#bk9jorH#y_IHxd@^{`j zn=nH1;&UZ2pnKAe;~aWU2sh-(+bT;6d)$zroi?vE34{gXz z-Wt59b4J!86%&vNfmGt)6UsJks#>#c2|?rY01sqcG6@<^fxz^H3Z(L$>E@J zyU|rXzl4oWTzfox7s)5DnsOkODC!(@R*;oPPlpo^E0*rTY~HD&VDi_Z#!V(G>zp9r z;8-ZpL@DukR;(e`nH%Eejmu$6}t%uZw^&r1qKG{dtj5&TL#h6ppXeIJt%oZO&KECM<8vm}ati z=ixB>o1w#edh#k3(kHZKJu_5XYU!xhdq# zbF$K!xGNzy#V;(hI<>}yxa%^fF=uQ)fNeyTj7OhE8vAkG1{GI%*thVE*}#YWYWeEi zqRYtCOSYQ|*IX{b^-r6n>L5W{a+qC_p92r_tyRbKjIGVj?H=&i8WX|P?ae4d7IqpT z^qzl~o&;R6FV51T-xwe4ABd$_8$&~zeEH*J{1Y$)x)9T&f$yY7XE@ke8+_IN9;uy1 zr9!K=FKk)<62z)?<&iw>-YUC%vD)s>3XOB;3B^I11Y5Ysq7cl|PGkPpjgh6d^<8#H zZnHFV_KucNtIF_fZXO-%tS{1qhBWN39-@0XE~c)g`UB0v2X+wg=V*Anq^pC1+duEy zGn6)lpGjZ$>bvP{!wPZ8FSnR%|AXx~*rU*e$L9H5{uQ6gU*YfF)3G#rwf>fwPpF^$ zOjV7D4sf^NF?b=qimx8COMEhg{AG6Xf3ua@&&P2AM>qvbE#MJ_KOGBqwoN6@X%}f{ z1uOM&&ZPah%?0SNbKwznRdfEpDd;@QZ!LpzfiUZKegjQ=Rd&iFtR;$aPJ!%*%gK?x z7w=4qTSFC_?i=IuOvrS|@}euHT9(GWV$&#NNq+PO8o#psw>P(F6!F_vi__le4Uhqm z!>gu)IAjdoydKv>Y)X-eIAGR!@6^cm_L!8)M0U1D(kSNdhsFr!FXit8+tu{)7h`Wd z$Pf*KVQpi9LKjg?^@6i`AzB`VS#?BQZ*FWVbs6Fbp5u_=$QFdaD87mfha=hX4;gQ3 z211nAWiL^>cxTOh|6^!5DxR<8P|oAxaC`|!*U9hK_GDN-n$tlo;|A;)&n27^z*j$cuNvOIPm4Y> zBS9%atNz^Tst!@5r(_4uqyY^$lPrH>_@xw?tt>1rJ(0o@Lge~sz?LLOlps)m+lT$c z8zTen$e>KQSH;D@e0}?NIg7I&2(9l;^ykejl^1%Q>R#LX`iDM|rI83|=MqWJ@K}_b zD^ev{y`lmSfG^5jM6jvqFY1GdZD5HkkCMmB$Xl03@uz?B*P9~&byh=~YzZ5ptVYbM zm64HW6{$|MTOzFLj6?q$_TS10v=ooD4lyy)857_-wku*Jba|2bS~JoqmssnQ*))M4 zBpGdZ#1(?TSWat-BCH^TxM)|Y;AxL9q=GO4xYCiT`lu_7t4Qr>H@(FiBwKU(2QyP+FdeHxes0l0t--Rc2WkTH6$bNn zXCp-KdWcp4D!u>VzB7+hyydy0>Y+_9zYcRrFC7hk1wSeUe9<->QC&$E-i@^dc@}+b zm}F2*mhB=w>f6?Xp_$-cFI^=GLwmR{O$M85d+XbeiAAPTd&s9uJkqL1y>r0}IYYgT z72e%z(!XSt@g7r0up0Up{~om>R=yt2la)o=lg4l64L%7@vqYg{Kdx&Ttk#X=RW2_= z0Oq-*reueq-ok%j>NtaWIADj{87$U4=a^H24G_CC@giPyH7- zcs$x+Wr$@_IJdU7S{t0Xa@NK<$;d674tMB{Vj3r)%hAM!gC9%Cfr&W$genLoW9$I} zn9>zHQGTO;HMxl@AR!m7#`1(3t`dv*?K9sy^XGb#X!rOb%n=zB08Qif&CDw__%w)U zIkp8I=lDs$An1rGx#i3U+jOI%9tetI>2-3)22Xbx!}!Wr2IDswH}cF(X9#i>8Z#dYvvQeuF4#jO%GF1E%SZN$_SHcce&rm{)iZCnL(f4+{v`etvIrP?2TDYDl7nQ|sKPtM0}8l{ZJUpCn+Vw4RoZwIcuzR~VD?F1oF;znPY;{Og2df;X3$yo z{&HzXGz5k;$Aewzls0rB?kQ`(*YUZkOrljvo<|V(bvxe`(IJJ*0l z-{WU-%cs60>TB(oF#1FUFB0`t=Hy;--lUFYY&Td+0G;;>|9{>}`-{(iuha6&a4m%~StwB` z^Il6#^4D2inN|AvYzK!wg81%SxXptUg@<4RWRDWU7sG3)|IVXh*%zuLg^&_CO~%EX zIt^8u`Gb|f((gTMJJ1!g5C|+Ren>BesNF$JbrE@XV{^Mdlv1_W3!;)e`P%N~b-o+ZCJKV1AYSH_%Un_&nybG9tUFPy-OGi0idIdN*4d)+6f62F8m`h|G_dfQthZR4We3|2#i4e5`%y^YC+F=}iXv`L{pM7PzYm+n4c{ z{q~t3;p1%{Gb6m+$-;*@-(?6UO)`Z5w6}6qr6%CKO?ObUl^Mo$#b;g0NYQF@g2gur zPq2{#LUsi)=Oe;;S%u?m;;W)%dZ?>blZ!@TA>4u^UVOy8md7sCJYsHw%p>-~*=gJ^ zp6EC1ZlIQh`Ej=9BYxO$DOTd>iV8;v@wsMq6h2Lxi3|>S$Wx@dOY0_zwl;)1=cAiP zK-wYlNzDf2TvN+cqsh8K0cJo{N?pQos+(5x&l?3@!w`a~st@BF{(kv}nXo92sqDwS$+dP4Ulpp~+ zNMf6E$b|X6Km`q&Rt3c*U0jhY=3!C;3v= z{9t^`K|a9q=R6mKt5>2+7`W^$GsME1X^=n_2`|r9h}9qI`oIHi1ZbXiZ>BJ&Bqob5 z88grbxz#I1u9-=got8tCFZ?YCrP9{YcFA8oI z&Z51Solzw$#UkegA4rV?+0r*%sFIVYbfj~;vh9O%2i9)_1+EroMwqu&{h_52vW=Tu zYWhZwc!btELGIJ3Ab$j+d7xOujn=+bPhQSeB`4xOyL_i=_4@t8qrq@Li8tA6&VvZL zCswU=zqfNRxOx=~4I^;{LCm_8hS2uYmpZbsw{OIGq^i@3Z1Phmh7>L{@(t*9!NDl> zEHl5bIQIt9pL)q?W%_={_KvBtr4%S>s?Jz$)uCXh62Wd#TqIh*&((HPqu&GpBbyJz z+K6_^=_MS&pyj(ihxGo5%h1q#5uB|#N|lc?rd$S6Y#wFPI*)dmb3Hn(FTW=%38MH| z2qsYeVqbPbzgvX=D!+zoq{n5AWlC(+X z61|QG#gnw13iozs*F1uA6vFHW@Nex0@Rw!|RlF#(Lk=~q9XuYK2QHar@CYDtg-eu7fs{{K!;S;C0_F6wDM`*1lVegm*XeXc zaGhfLxx%!i=oRXsWwv3|FYURfcFnV8;R5y zGUID%j}GC@6cCmxi%9{!yPEyE$EYDRmyb;PndIC!gcV#8(ddp!@0v6k=vIq~f0@on z9|)Z~;hnaWtnIxq<3XvSDvc$Ofc}E^s(n4FQuExK)69;Rw(vnNltV4R<8zKTLx#7K zsZDK>SH9APMD0}|)aNS)7>gv54ZK4VI5JY!bY4@=JYtbcEIQfx{3KNOWO4PauJt*j)U zAbsAX+MGR6kSt4jcc8G z+X2pLOb3{Gn5hRZ#C#F7)~T=Z+I3R+%PeIxFWUJLtdKp6WEOY8&99ai$NO^v*7?MCkQiBB=7$ih=wEX4T`Yb^$%q$}mTcr>068ixl z6u2b#N(aDqQliok?qj*k#e=R=pN8DWk=E zo94S}*ZAE%kOQDpR0*DkV7Xw}73ngRX4^_)OxpZu{M!2H#gq(pKvpSFQkNqRW#Z}= zI{ao%kra;soJgJt4q0Vi$2yp^S?ym;AWh<#6yPK=#dQ&7jtS*uMaa^tMiBK1a=U(_uv6q%@fIn4BjZ00zbxu!mnyc1B3yXMiK2T75#$0cyd%?FLja(lkJ$Z&gZEhfX> z&}Dn|YWY1HoW$*`-x8f-RzYtRFe4E?T%bB~Q7Q+Y08`PtBpWliIjDwK6d4ORd@r)g z@;+Y#E&hacC*3?^&?0trum8hpb~)^H>{z8bX;eg{l*dj8Yq5WjuFmVM!G$#}H~&gv zp7Tq$Zh0f!`yCrzzjRbhvADI8Uo3JTh#Iuk)I z!2J@*mAllgcE2kd4Ypk_zrd}G1pLVf4bBbh74v}82N%Eo_N_SGdUu~D`WCl#ufR;i z#E=&uTO?Yfy}>m}9(0adc!1?NxXB72BX8)%;!i65yPvs8InMn%=6ieRDjMLDy1YgR ztv@)S?OWovBuJpQ;Y}9X{Cp}=5m3y!*X$ldBcoH39j|i*)I~OOgQ8 ze8y<9x8-6I?}GFUn`B{Dx!2XJt=S1u=jXwS#&0pLtJt6O{KV!$dx{aY7uZaw^& zRmJh=8zeKTmP0Z)qatqZIQ!zQQd*TnK#-xob~>J=;~>0)=bww(1$@S~fMar!iAm4z zy?I-!lr*T;VaVL-B~FJT&$xEAQ%Fg}W(w`1%ug16gwJ+7IU;8x=~s83dop zLjKJ@9ed2d)u!*|1D$l^SdXB|*Lrgk;f9X5;JAwWxZi{6^sfEq)hGW2KEE%u%g=8W z|M&s#!5{zuX~2qHHTeN#eupIsj^V%NOp7JkGV2LjAaZs0ofv zZ==Ecbz#J-sF?A~h=r&t75onHwy-O7`Zym)Z~HtAjBn^@U+=adzQ#kfr`M z)=@-x`cm4QguctuqqSBNR9tZ>`!QN^)}ub=xoc`ub!-f?hm)#M61Nt{t`XmJw< zqd%JT?6zCO54ws?rvhrWu&wC9K8rA>uDtEmY0^2>+MSiV^Vwh0XXLNXoU?V`H}m0{ zUnigG(=-3o%nz!pz1-&;ev0%W-h+yWW2Pjz?5D$FBz8W$OuBvwQ z9rH)QVm5|NI^ho|iY9N~VV~5?3kVUtbt!;mX(b8_f(Hl5^_$mfSqyj`5B>|X{k1c{ zW9EnKtoUbV{?E>*-0JWHslrTC+A4RTjF2h$1%=@^Q+&S|lHpnmcZX3Tj|6gZezbxl zjRvj3)}u)-UGFXwdKvf~RBb4W28ycO}Zy?-(k%VVOih zU)|WrOrE^&=HPrjzD)RZcZ=k~#qUeNHioShT}m!A2qG12&L|H-#nU8p-tqw=stK_W zfdCbs#e>YCI;f=k$Wgmx#3=AaN5| zL~#?b`;&qSx~aS+^5sdc2f3Izz{5SKRF{Pfu+-SOn5IpmGSOH!%rZI0SkkbdRP5` z<6vn^rEuEHHp0G1X$V#4T2n2cBD$UkMmtF6im1F(DDK`l>P-P#m%Chq-4(?PZMB?- zqo-^qL(6w_slvLi)n2vlTo3B*=f3S_j`O4-|Dy?mnMBUO>tKvmAW;LRgv=zUBTVtD z_(RMs4>cm?DC4JH+-9yr`Ec}@(il)seU^;h*!bp0m57~lFq11rgNxIMQYv(_4|815 zj1*RVa^D>-bud*W0O*7O!~*fB*&Zgu7S5iN;sOAoC{%@w7(BG!?Bf;TpCAdwr-gJm z(YP&kQ@nYV6&>Xx`G?b_XzkUKdyp2czWDf!iT{b;MB*z~vjT+e@8gtow3F7(I<@RVA;zVlb1|n(iFdP@ch8v&87-u?MXK0ak@F9@gE=6GupE zJ!Sc^NX<}+;i<*y0{aQ6J46jbT(V<(KrhbpW}f-%|HBLQXLM*x=1-QuPJnEcz)O_L zFnj0hocM3>S>9V5&|;@EZdyO>B2)$R0V{8 z%3D~npy4GKl6W?Ooa&?;)t4m}4R4Sl-u~$76`miu1**1Zfx5dihhf#pu}WD*ZTI5l zv4Ws7eV+q;Tn>8OdB^|P%)grXbM(63+GJ|9tkdm8>aF{&GlMp@Aj*eQk+6t6 znx0W_@ha^e^15kK7CWA~*CKBypd0s$WQN^=ehm4z1~+1nP{mjGzJEgwD}N{JaP7=D zxxTo+$FE;Ch1tN2sQR_3VGyA=uspJGZ>`q867v-`tgCK4>G}q17>$_0&z<8Q8}D_fDw?mH3Tnw>YXowXd3y=|qi>5`}sYr)#$^ zB4#@3znq=>NfYU2J?eXw!Mz_%@zw?d%XY{|wK1;V`rZ-)O0`{>C{b@5i#VmpYb87C ziS-V)c5C=E`WwBa6vurVH+D8qLywt+w91Qu!1@r)Z!Ykfm9D*?GXmGQ$>@HrIuUctJ2tHG4F{ zxy0j~S%RdeOf3o1VZOfbAtIMH=DepUq64rQ+z*&+`fQ@9t!|hi`~KigpU+;vLEd^C zUd+eRS)Y)*^^b*Ji`>Rp46%lddjxW=nyqSP zV9KXeNI}E&fShKvo@AmLf*Ne{ZnVBCU_C68HBzGMOj-{pq((tXS;5?MUmC3Mgcc{+gIKZ)+8J#v#Ln5_q6s z%k{R7C?V`D?P32b^=Cm9?0s$Sq>z!1U@ z#U^4yi9V5zb|t2Oc>eWunsEw#<8WO~Y6OhUXV1hWdxxuhOPq*W)JCJOU{k}vx< zL}^_m`}EZQaLL-usIa;gBh7^o{W*6iP*FN;sE(26+obSU>#gK2W-};4cr5NdxBPTi z&!6^%+cIi8o}}8(T0N2tsf;@L64&$>N^Iv>=#TDG>d^0ZuAIv zDL(-n4l5PaLH>97)0RwxI)M}1Cyd~EazFwK^&Kq2e2bjrw(U-J)zUcc=cPEs3%K&5 zVWX`b*(hRkS_={BL`kA2-idI<5O6rSeKQkUmsGdUke+VWB=e>JuM(dc@f5Gf~fK2xy{(C=*PKaZE1Vj%!St zo4#Bl8f4sx>HGs4-rlEH0D|W{O9NiLDG$SK!l0fadIhq}fjeDQ&3rl)<|}M0ue>FQ zZ?ypQIG3@KM51FNSsnEa8|JBp{q-y(ke8vEE@Gb9S{5|(DB6U)IdOJNvkRCd!zT)# zRV4j08a64JmCVoPOS#e;^7tx2RUl;L8an~2IBsR*`fq=K)O*3mO2U>xb`o&}Gv36q8%8GS`f>HnrD_}gfl ze{AOeE*ZUDB-&g{NE18*%c|YGgkP-+9|p^1><5ha@M0&GR8T)H9p-eX{Eo}uQ-pQN zg5Z2S33ipTl(N)`h=OS_+m6W1^V$vk+;``CMLJBPLR1A`)6JU1sizIt?^T_1Enzq> z&@=mD9_AUmRoArDu1>xl{ksnip{l4D3ZnbqS8|gMDn?^sldAw#P{_q)S?JNs!eXVA zvI#O2ws0UH7sy&bPKpZ6@ulHRY@Y1%X0G^gMI{B#(^h-4XB(g~wnpoK z9bxj(a?(nfG@WV%QK+l4;6m3X7Frd4N`UvwmMJrY^Gkvzy%4T@?`}ZgN=`fLXvHos zKQ0Pe+rrkZgJZaib0zl4EJz03JZI7RUDZz9PKz5K!VQ6M?7&Gpv=x}=T^PJ48CW@* zVw9Y}3>i0F9#Mp2XYcBj-opCE)vKCa1p6Ed8{%ZzmNCTm+ql(|Uf^M{T+;q}2#D%q zJ#i)b7KvTR!5ZGQh?H2Q_R-^1ABZ`=ho9wp_`7t?cZuGAyUx%*%!>Nu-ir|3*+!w# z@`aW86s&Z7Tg=$)q|r#SAO|A_!c#~*jW$rKBGBA5faL}#ApniB0fP7jOov(or8hXU zkuN0&-&bPNxX|Yegx_Kl-of6H2fV-$CV^+*DuH! z*xT*^wn+#Ia!H1A0%RP2&JWVlsLbM!@8&|W{46y%lhC-sBKSs_wUE?;-D*6OQZ7=$Iz1C z+Y5IXe|i4(%}GoTl_ayi_R>zV8oic%QxYM{S@giczTwS0L{}QT>{j%z;(qEK%NZm2 z-n{DOORhxx?n0aWh4YM>rn!+jL>I{%l~Cs3w%)6g)eP@bA)6%P@=%hbq$Sbvq%=(9 zo6bnQf7vX%A31VMj@I9kqje@L`a?6HEICrjKaC@+2$n>fgShy-SZ(*4sIaV>jqvcW zlR7LYv|!2x&vL3owH#OSR1yTX^;0^U!~LD^6fBC;ot}*S_Xm$a{)AUNS$9D;E zSSRUx*I!*)dn}`V{_e*i=qs)q4{pGe8JS=Bz?USQ4;Y5;d#{{^pq!*a$n3Gv%oFw; z|GVm4@65bLrsl7f$<%yFO>?d32+M?{I=|?X5;Uo?As~El$Mnem=w_yD@Tv5!;jLH| zF`wY5F)yXG6Qwl?pF1g;k|(7iHx7%y|Jt~r4U{tatboIVSPn@Q+dq^vg6tD`>h<>y zA~btf&TcOBZ`@cNJRc`$gv%VSCka6inw9?Kt)-Y+7m;E&*EXI>0M#N*3oY|w=ndm| z+1PWK(BO>X*Ep3lBkkRXyF4wvQ++6-geE7I!>n2Grpg*tTae)8?C2KrOi`DG=Beid zCbO#MB{}s57Z>-epO0KQ99}UoiDk?zIfZ-hPsf1-xjQA)TScV~K3sg=4(| z&A^rY{>9VJY#Gk#Xgx0Pa=-t?;}H>&7?Tgljm9+LA^i*(xw0&lkFWVu!yfy#FRHts zH>>%GEg{cr{Gv%&T9m;sI+9T!#U_rJ<&EJLz6hON5^mulPC;LUic*;V@Htcj|2J^a zKTx0htZMJCq}P6;jcjPBBhLyzM0IhK@!p}j zmY@GZ3SgR+B|Cve%b65Itb}f^d3OFWRFk~&rPWv~Ns?XGLR^&GZXdOW0Qa}5*Rw5Vl+{8bRtJaC1iv2O{ z|L0M_!e&`-{gwIU&CS*I_-=JPCkN1Bw7+t8&FWn?zrL~ffrxZ1JBN-*W;<=s^+v;; zT{4^aSdp_Wq)D0GNIh-p7f2}yCnVkamUU$}LNdx+WUuT01IGVHy+NMkANq22eIM^+ zLlJ%k(ocYDGV-%sUGNieoK68$NAqgrRA>3fiTUS#Bt)_`%!GGas`x!K(MG>CJE!ZK z)IQA$@pJZvNMGA=8U{JXlfg${eC<}`_l`6j1Ii5ETvzFs5S*_qFN<$SDbeU4krqcc-B?}2!0DTZYKB3q>zxU>iK(QA49=49x^UK|Z?5#TvR zca_JVGO0IjEZbWTo1{Zk6kFro|A=c1S2xxpg6Gvrsq%AYu{>F>MqIXRZ^51o*#ai6 zW9q@ix)k5B_%dBxYmmuMT<(xO_&M@m)ovCq>w)lfcF+8je1=P@5IQJCmsc(T&O7FX z8$|l^Ie8FkD`+p@M?TKdiL2o|^->4WC9T4bdAdl9T;lXS^^FH}a_F+9Z8AhL6TprdKl!D^nF` z#Q$(iRrO_KGiu-$C#`>bO7^k~fO-;p8N?rBQB7vf$&H`kSHG@8@&mdLd@HZ(@1L%! znwpaxQoOCGG8QW1^!^26GJ#F3T3G=Y5RhsUYbn;a*fFpz73wpl;Pp4_Kr zn66|`T`>Yb$92oDg-Ghe_{O@#1vCB|);ASp#l;bN3X}D3p7}TGPBi8I!fSUn1?;%h zcecfT1f-4ewQHuz=-+Z^yhXk9bL-~p+~{v^?cB;Hv?6PR{>>W{cZ#{`8m#MLQlw?_ z9CwvIVUFGEu0@lLyT+NfH{#*R8vm4}@RE6D%41P|clJ=Dn~L0}=h5<7`ZK;lO-m}E z$P7N6XBD`jjl2mp;>*7X<#lFOwjGZ5CO=Padn0)w3f22*yPWUbo98;Q%rUNqIZ#v!l>7p35KQIS+EamnYh48Of_ozPB+^yyn~O zvE+KaD@Rw3)}vD!;Mf(s5x#fVIP-?hK@YOYELR_ud;H8(ERk4>@iJcFd!r$dlr(Jb z_HHJ3nAD-4_j|9)O-LA9a?B2Xt%XOYz_hmB%B;{E%xYR)XJ?xbXu`O+5`^SY=)(-# zGVc#&KY}%K9Wh(!zA8`Yc$ciluymsw5JmiuLvPQN9@$xBN{+g(L9_&>v-<= zxhxe-v;5d?v)Fs$sWk7vPi*$py@NYaocV?bwWps*#tDz(WVl6tDd=aBo^#JKmI%Lo zPvW-Vz*@-jQP-ele@?(TvW^GX9s!gL$p;GA%%7=HmAbsNxEgm&wvVLt&`6x#Dw0@62G{q~RZFi=7 zaOeL3QO?M62nzi?qJ(vzy?>9ScVw6-KhxLu&TC(odb_$#h2|3!<-1QFk4%FyGxXWR|pvh&4o zctt5tO1VXYASXVA7k8yKuPU@0-V4B@8u-O3BAHWKEbDs5wYjxG=OUiSt;#sWcuR{% z1KJ;CNC$M=BaaJU{9;de3Z&%Al?Nf0^?LJdt|n0w7AE0D$^c;m(DEiY!l8yJ%E|x- zaZ&LudZ2jf!0eA_&d8FVAxoZ^c|XnW6E*K$AH~cVdU}|QnYatOsOgkhf;d>KcLY;7 z5i*}Ob#2BkBP-33WA=iWD0Yo_E~mKZb+RxTr-hed*mlH{pk_#}nYIl`XXhWD$tV~^ z4pf;5ru9IjXstH8Pa0XDXc+KJ8MB0^rKQo96cTeoYwjH!^?IB?1}OtYTe~*OPUJKI z8+4~*HVxs*4aR+NFI(*L#J`@%O3-|o3+Z|j+0dBJ0812l!W zj5pIi%;iQ4>vEl=;#aJwI`t5z;ut~|Tt8XYH`VR@G{3|b$d7!_%m-P+AFsUy|G-pV z*qVkUk}Z2DV;@N}wTx>KMr&&UhX)z{1_sma$E0S~g9;bAxSJQXth?VOcREMjbU~ZS zT+XaIJ9ArI>!dryLMxK!TCj6Boqt1oErTd{Qoghy(Y)SBT0faz5leqkF^&%{BpROg zCiB%oV`$g!YrC2QQxoa+S|jL}Y1^Cao;;&r5^C-qUwLY*IzWTU;o#|~;^e^jeAgSY z;zUy?J^BS8Xn5FvEZc`Dejy_U-;;%8vS|F!f|9Mvv34Iw-O)4xlWyVK)O2Vw(X>{q zogaw|Qex>hA^M!S&pjVqXfH`MH1Q+fL@Lwl*AWRzTBnc!*&8s)O=)4L^Mj&iO1|$< zA?=|Ix2$5V$C8|DuE#TvTgN}iM*Fsz|59A_Psxh?J5%<4ILkFnnPxwYWorqWjytUG z?q~9_a5=M?Bu6xv*-@R>r}3mtNb=b%}}30mP%~C4!Ge zF*VaKeOgmZ)17`xR=&J@T7ZfGWp}Dki0o+G8}a1Q$&*Fox5-E<2rVy@lJKG|{{Sa> z_%w3s&=4nEpC*F!Im9D&=_L}kF+sHYAkFRc9NbQthrrA2-Th~yK1!J(Ql2R7K>$e0 zIWbCoE!vxLJ))9I*HBj%!O^XgD!H~`#=A|08j^vvHrOdw?mC* zRK(;x&GxUcl`xrL!N3MIiJ2m%5|^ZmhBhqZWX`x=aN&qeQj9o>#m2}Cb14|enE;}8 z;I&lKq4ZF}&Jgf~3n8Bl7wJOU+!I(4Y5t`a(X7&+LZN9oFE-usKrhsvS1Y=p(*1@A z(I<3|`6K$Q{pF6GHj6~gNs|P}YmQ4loc?vLB;-;jOoCoy$AcC~ALFyBksFWfSu=87 zsko?lY{O8^)-5r1;keRcst?hlBC2yVaWa;On%X!n`yjZnfA}L3$|ZepexO-3mCb4$ z|3(2*oA6KwU$7mW6z`;4&W?Yh=uLlUde^0E z1Ru;~M4{R~8m63}UK$n&G{r;^ZA3;Mj2$e*?EiA(uwhpI+;>2NjNOn2_j;hs{D2(W zp>b_aW=sKm1$8r z%w z#L%1K(V`(Abl~k+seYBno9aN9&gnd2pdGxOMVi*@`)7Zcg_k6T(c*0HUHeDG4&~wc znW3iEP&mWT*$u*9a6mewX_`pF_I7!y6n&E&$iaktaeSa!D3Em+UBeEq$e2)+#r$0* zYa(1i2hTtx^_HC5YYE9v)9*dMv3aX?+#;!t4wz0kUR($G_NDX0Ju@ETt_Z()ZJfdm zw{zPn`SdOBq|kwdIyX4k-J?XMGA%uofj>!}yk#Vg)Met>^ZLIFG0#0<(j3Zh(0jw{ zMPQQ!LSWuJkD*jKR4|CY9x|2hS;q?9WjA@Od4kPx{oY?ozihciGvhdo>V|p`u zYUU5}_x$(W9$3f<{;Cpbn!EE-;9*M*(_0ENFcz*FYXwLhxq(*Tq9CbcTrNdAMgjLK zOj%0UrWt- zY~0_EU>po?Z;^lYKwMZ|%*KC|stn*{vXeel8OeEJ#iJwLvPE%|@Dir1f)4-M_^EcQ z(D?^=h%Y(nlc%rjo7E(i;5&1GI|Y8PC~#!3#XHm%UU;fnnwvq=v5MM)TJKiYma10yj>RSUdWTmSdG_-_STONXDO( zERFQBX;y5Seif)>GKKh%dXt;eo|IoAmiaem_Wy9^-_867IjTC0o1uV#j3WpiOpR`A zq`5*ft{RU_rJmyp1gBxF#$oqFYfuzVesU*+#Iq!^MEv5j3lI!HxkEN-@ej1t4aZce z`U`UMssH27i~FULB}Bp4%Pc?sL_9L$ z2+X=y$H;t%207=fGJ#O{Dn)Ln|$9irV&K58|7%Q zvmfsYKB`c|FJdEk&rX zO{&L4iD7|LeJIUSCfGN5A*p9?JAvZ{z83sWiUuJWpSvS_4To%_-jOC*UY@FNndo)n2AUq(aLY$1HU3C_ zSFB+QrZq%~jj@%aeeYOop8xHkYHK17sWVH{7A9ZrVV9Z{i-XsuG08MJx>K!m4Q=ul9CCdi}gvNg5r;Q^zOQ`v?ocH=UnN$<8K1uV47+qgm(Lb3U8o%utQXBkOO%&-`wxbSi4K*qvw zc=hV6qz2N%urj9D_)45rl^6z?G-c9-4PqkPL_rp2t^c{#xY&YiZC%u;#w=>>UGf0d z{qA?N?6uO2r50_trhrX^U5sU_pY+4s*7-%sG-GT5415#Go~|AZ#v)4=s))45*L!Rn z5yG{!Ff-u4`Nf%^G6<u-{c2kK+9p=5Xlr=T$@d$l!XvP#bs}M^iX9Q!UA5%H^ng zr-ryqo!4!aPD1-NN#>%>i))oHCsSkoBTvr0*Gwn~UM+D(CyoDt9K3ci8r`CfN`|o6 z)e=77Ns%E=-x5gY^Sr^)X);kBI!z-uUmI$ZFPpMqgUB}MoorC*&YrTi;dbG=3sbVh z@3ik)rG%f^JL6{2L{Ct+N@{8Kk?@~peWVo&u? z_=n{K>9B%ki95C?US2thxKfH(O;1YN|okz!Z&jX(M@cisOKy=_g4i{ zv`^hy;bY>hirI${$t&ALn(XzBANBXvR@fh@IU%Dmm9fap;^#o!^RlQU>^{T zng=p8ZTN>E#}PZ8WHUL92bF8|KZ{-6Ra5fEYUNDp=d2%NXpC8R@eh=~UDHx%53ZZb zfy#2XTWz({jA}Y&(+o7CiB`u5bFvDfj}f{)O&p? zC$p0^#rBae@lx4#$ z7qgj!vVB)Wha@(94MEhG81!x{))pqz>S*>nmy7dZ{@aj3qN(G}bxx;A?6xy{M;?LY zwSyDJ2M1egvCG6~WH!ciP6vGKnWuRYeVeVV$*hodu82|MEDr`4S^$#N-#i6R5S4Fs zImQ$mWTUf4iO&O;WjG;k9hCi~sNy`{vv6{#kK#X-fpLzXUl8Gp1!dD3li6?(o90pg zrt_emtlj(Fj3-sy*1%08N(3`FXfh@%MEmn!OKdy)3ZQ~f43{_})&j-!z zv44nmZ=B3af5;A$6`oEL4Ne`|F?gF8kYJYn6%}eS@6mvgbn_CW@#Y!O#ot5Kq{^_f zJrw}Zuy~qC#+&4~Ep+biFH>k_Z~Q(JVlz1knm~t1PI?=rn3EwXP&U7?wY9W7&(e~} zo!vadpT)j{I`k6Uh5yqUcEe6N{D6xqvvi_uIcdKvHhn67`G;!OEa0rEt%s}dlFsjE zSi`o>e9TI=wrdGmgx!j~U|J|1N!3hCMI!zDIrzb83uW@6>> z1U?0Iyh{oQSSdlS2D*+N*|HCr%X_hnPmH1^3m>DWI3SrF$wCUFN3)6>O>f9a?;Q)Y zQ%8>u_tCDUXVht-JR$vqT`Q(P`g+VVzqPTzHQQTd!ccR#W^AjlG*3}YO`_TxJ~iJ= zpeySyj^kt`(wc_!ro_ovm#b^!forY!&sVXU1?U3aI6-8Y^L7-W58E2u8m(EP^r)w- z(Z8eT_q=HJJMEeFCoAH&1iB#emg$P zv9=}3ijUVe#9w%Mga@1i1=e@F!A?_m)8f;8{ehGfwyP%&|?tj!Y3c>*N}-XY<)wXlPz{1;(=D z=%~FfrLdWJJRFmUkKARl?gtX!`n&IrXKXMz^76)`b6%MJPvqpn5j~QoQe?jlmJhV;bhnp{YAq_T)F_iTN-_Fe% zJt8_ZZ-cOS>~w#63UApE0ZHT?n*RF!0x)TKgOFxK!ly-zu{@(>~ffn$u`T<*~wA0M3k zMI{+1e^%y~zV8M?wMjXiFsp!wl>X*0ApLq!lwZ)OTEY1WF8DQQEk#GNzn1A_|gD zl52rchW&e#KmPbul9-s(pJ7$gCg)bzd(JS+<+H~%AmJ&XXY}~vp5gXw@kaJW_L8YQ zj?NcRyaI#S^#xl>4_*9HP*{t#9)Pn=Jl^JJ+EYr_^o*+(5-HgGA{HM|quLq(9%Q!Q z*4DfrCy#RoC|^C+10x?h@t#0=EPI&UQXiu; zL{}&?TBF(H>L3SsW7LuPE@Qc3+QkJ;*GxIV$vJQZ7iIYIB$c8OCTW5PW}wrbdw>F4 z-T;!OX^g{NCm2i$u!G1cBB!NOI2w-HVUcwS=S02C6)VFs7Y$h3xnaFJ9N=1hT^-zE zZi+W5)_<%Hfm<}32QJud8LBIK1-FN~P#(NlH5cEU;wF@|Ck;1+l$62YW(<-jhd^Vf zu3U@nE}n_`+YqVjblBh8AhiHWHr?b7Sj7 zOc@{iF`iidKwKN*k_-UqlfFm+AEgwgrMqNLbfPdD;@Osp0c-R1(w=BG=r!6C!6*C) zda*plgRl1@6#)S6y!~4@VKwp_MuIg-V3Ub(w!Od+>f8pG;NhY3^kag5rZlOl+3RRa z9XK7GLM=f}hd89Yl!goO93Sp2YGmw*<6HN&k30lQ6;c}wC0V3<9VHUVMypv((VCMN z7?tbrfWWsA0o6KL@AR#z&5Peeu*s2ZBHY~!=*>-eZ?moU=Mb5D)(aWFgm>Ch+nA4YZLP!S4XT}I9rQoFc&D}AJ#1>Hg5MdYu~ z;n?2=nrcjdB|9$kp3hs>Xl$#J`*q)`;Lr6hYTeWmUE1DLGMxhRV)`OCZ$6mjS^JYl z$-dNDa&9g3Pw1wt$kXHy7^54;7?R8(4`iBJ8asA5by|zTpkQ+%_o^9Dt81GZ69fl% zRr@$t+T{M_@kEixrjpbkzJGMUIT{Do{QQf#d}cagwZEJh25s$L#689e9W(p%EQ&MB zDm=+xO9L?WK65%qCB9>s#WY(QC88jRgwVE?yFTMDNy!paqI+`##DhX%kn!W~ED>aC z*Iw@`qm7dVoabkkucmz6h2v*n&ktsg4k&vanRA`8ZZ2YaqS`8mboGPtiGm zcygpzGxogH0$)37q4c|Ch9quQG&;Muw7Qy(0<((Qv4YU)>}>gy!=sAf=qBNYq_w&q zJxJAh`FsvP`%mbGKSf6Wz|0@->9Yq%RnQ+Jz98lI3AzK;#LLT)&%Xh0F<;SIARdClKae+9@PVbHEW zg5jybS#EjP_f{PA-D*iV>q!ttAw{*0bANu*kK`Tg?L; z-EfeK&@^B{EEF%Mx@^S{m`Ta7=^syU5zuKXhjh{bgYKDK3rw1Sx6I%xU8n;rcy1DFjQK!=~3ViNy$7L@cS z+U(eoz5V%{QStkK_1A1&|^nJHnpg2I zqADl2@WZO@+~q;kqqE;To@2no5o#{wRT^XFuF_o&Ml2KCqC69*FVZ%M>7PX#F^^`= z`Y_j;Fjyr?{GVfw_&1#=W1298oB)w1)QKi)_&lum8{6}m)nq19e7Kq%E!oBz9n9`gWFY7T3u*sGf2 zAs4u>_{aLysH3XZ81tSvdaO)DF}Cy&^Im*FgOOy^e*gAk0V&O9QTA}WwHX9?SO9E9 zw4%&_ZBlWGJ~@09y$mOKgn(RT7#JHNejaP!E4-i0R;!ub{?WmBa+}V_Z816pb{ihP zPDsHqseI3W9%j(L%{CY*?YEc>?Ar~e=`fb&%1Tipm|3IpQNvU3?or&+BV+|}NF)#W z?6d!?s=A-HEBcG_uD)AM@{ifW+TwT+=sj#p0R|WwdI~au4O_fW2PYS$kQCKE2)cG4 zEp&}`wQl6w1+*P7Yv}YU{OlZ;aCXahDS8f^-N~Cp%#6hgq1e)vHph=CU#_PD)+`#I zWG$b^Z3_DCn5jy&mB)?c~NC~ zCCB|=O$J$GXmRd2uy9klaJ<`0u-p^c0N3Dim?7h%wMWv-z`_TY@ zXX-&{gbr&_wjt)CfEzHS9~ZSE2(+_TS#;_`0(st#>DDApEEOf|A{Wn9vO+q&rQ>3& zpyT^^;IMgJvsQ?Yng*T+=~i2-cda%81zgYThlg#YS6Y^J)*fsp(Dw*+z3LIc-yfmz z@O!q0Dz6>E<)iwZB;5V!0?qgAqA};zaa%KS_f;Lz{{SGM0F_~+_)+OV6o}b`!}zDn zn~#;!>pmjwF_~RF<)WO*Ld;I|{LHaa-)#Mu!4M^fe=cc`)0hWSCI)9MvP{V$76Xq9 zeJAE*)N*VWU4c$cxyRZX6zuOG^PpD>RYAyyRqfiB@i^kxZ|4qY-?Os3!GpZDA$Bxo ztRx9{?7O&izDrWD7{s6RUEHg;PJiQcOibQ)$$pXWsno6zVli}CxH;1Q)Vx}8%oJZPUzXgezWBC{4eeBP?q^hCWA*G8< zJCsB(iCd(D_*79T99uU*aGWx*h|A9)x)xK;0ZBhTCn9px=~;WzDvBKt_jQY$3HfU@IXu1k;5E*M64TDC?G2B~qN+ohmn@Qg|D}ddPtx~- zS4VV7fNUZCNw&NFbDp1hql){lv_si%<;#!_(Dv<`5>te&aYZXzwF^WOwGUaLoD$f_ z2;;nqNaM)(uB9{z^KKK;E|G&@HFI@z9pTk@x)Xd}mQSM74*r`Nj4(Jjw%q#12TAR> zl+su=#xP}nFt|#3^z2BMYZG!QZykKHn~w#(cw>gYvxaLZSfhlL0i zMqIz#Jq^mFH7^hETcNeY=Z2@2;b8yZ0OR$q-{9=RRbOPcqim)+c!IRUh7{4Ka@ehN zD@jX*KSlOV`glW*JP~1!+?bm1zq5gnVW?pYrZ>Z`WEbi>JmBkXQ zT*55MYYVHSg|&(OrFK{fxX<1{urZrt(M9?V19eq%xZ&zMaP`Jkc17BeaY&8$FeFT# zea?`_S!B_t(?D}Hp)=7%kH!}nHYShWK8cTKiQ#*VTr3 za~z%!71v{_B2x7=OOaEQ56$K72E#&v?mhaUz8W-lb&}&gy=0ls`(LXQd~D`9`&NEN zRcg&G&3L*jjCM`Zot=`+ogUpLRsW~yYU}ie`tw{vM`ulwDawcpdz!ymcr}q`we`^G zCM@^s94d7!S2C*)I;XYZJv|`-nWlm}*riTR%lGnP9NvFovY>OK>9$Z!AwMz}T+w8q z>Ll?e*YU9boXiIQCEU>;ud2_Ez)xV)sHZo`qEzs~HIX&lnkM7hkIl_43v-#V(Y2k; zZDk_M=?}%HVsrWUA?0d&lszH)KFg4^QBIzDknreJN@^m2>hXRU5GSLz@NwA4`>I{E z(k?okNo2613z4$O#?dp*<@3uEP6ju*9b$B-xV`Nw%p2F*Din-GzSD`AvWA zNtu!X$i>CsEZdY0bo(aP?EJE~s2^iE7)(&Hgvh1QhlCVtpwt__BVqoRUrFun_V)6^ zJdfJknhjiTILSk#g=By5#0#%+A65*Kij3W3za>ICySd7Pka%s3?NytQLCfedyVY`) zEiSzbRBLM~eHgK^@WOCGy&^a9aBy<$@3#%-AbWsGOfgxU{(C=dZ-zJMF!@3CP~XTh z|NhLg^~q6r>8ho{w-t-rD@eKx0A+ZTO}(uJtvSmqhJQ^^>?&>$*7w05Wf~wz1}P9n`1@RiNLNp z*09?(Sf|6NVBivcI6bX~{SUJ^B>2c30hZ+@39w)n)KyT+if0(uq>lBjYg;y}l_>y9 z79}6({BSdQ1gS&nKVIw9{i$*{q6F^m>_O7-?qdByTl7Pq5ocN#>=Y)e>meN!zfg_1aa>w5XmczgM*oD}6<;}Q5x$!Fihm=cJh(e#nFJ%M3<)M@-(`?b+co zcfF<8!0ZJ+-%zvg&#N|f7Z!elSJt@+h~bl9AKzEaMJda*ddXC!u$8{ z`plC9Ci7yn_uyF&vfyJ)+vFsc*Mv05uIKSV(dq^2A|!@y38e8~%ERN^O2!|**Fa?k zCK4&#-2-wwy0T=?8FWeQS;k{XN|z$}C1J=`3w!yt z8r0JY)v%Bvdhib3zP<(l=GFG^*)vNHcX(j8xP@ZDOh~_pr^IhTD4CVE|4Fu1Z|?T| zhQtC%DSY>LcJ{~Pqa*XPyv}|c^i1dA`R7g!(-mlLVe6e9fs}dTNm!!EtvC-aqy{@P zPN17PPitz(|H13i@0YM2+>mY^wMNF?XtamM`j0KquuOycJmM9m}$oP0f%My(i z7j}u1m$Nr@l4Xmi5E@PPl@a)A*G^^!r&rHzGF>K%3kT5;*Y%3{m-@you?Rm%Yxt>> zE13yHYGf;=po%*(Gjuw!sFRu<>fgmqidZxEmo$<7(12LYNS`^H`HVUy*y4u3BqkIQ?T^#YsR_hP!MJ%l!H^7>GpFTOb*~07D4&M<0tS zwY!}(_K65`SSax^F3^QQXWV~TH|`{evUV5N>^L2I)a0BLf?=->0f9skm2x#+kVCkU zeov#LW3E~Sc;A>nv@n{xvw6qrn1)i-s(cA?F~}5b@p+o&guAkj=m5u@eD>ek@B1&$ z9O%*bP4>V20TI+ctCqiMtKH(?+HA^1V9=Je3C~0qJ;b>@ed#^m%tY6#q#66801z=3 z8FL@B>Q%{|WRQboRHG(-I(4KNWj-o4XFkoCkkYtiV^E5^wmtf39UW~ z6==A$TAkNqkB%1N*vKZu^4{Gmy{L!VyidePoY+xyw|9p9w-5zsY{hu0!{|lB?Y;6< zI?%10D|NsletDrfNep|t2l?puFp(rKi&L2JcQ`6ixC;LRgLs&O8csr7%C}Z3RFqnJ zZv+kIi=|@>yrx}8_sI!xvuijsQ1aJ_MVZr$S1%iu_P4hv_(REEly0DZ3B0l?g0FM~ zZ63@ z(#Cs^s;f%II&m1E3lYu=t5g?y^hit^pm<9A3#-p&LHT-+H&{&VrLl;&mhvpnH|%N0 zh2?_Sx!yrwvd$dv9EbbZaxi|AKpr=^ryiZq=o_GBdspHrU6NG>QM#>AXeGV0o{g;^ z_dR~ox9RHlyJr6UrKF^;1RI5ck~*dmzxX*HCr>HP4uYwy-ZsgVB6=3HZ5lW$9jUox zx=T$Zrh^i0YqzL3Q`m}r%4lcF!QEX#IZiqu>AN|e2DLM#$SR>~nz{GdEnJSn^?R0A zbV-Y>FpEJZ^f;i*s}a#p6ep^gk~r17zeomZ!~WxgvbA=ZM^}(RdKOy?-D7 zOlBTaTk})m!%y(Ce}pFet$GCh%;z8`&`2IngqHBf&BwmxZ>pq*4?MiB>ON4K>JH&(` zgYhVH9gg8_ddsN&zjFzg%tZbp-Q>886W*UwW5I!A1nrv|>wVCBpXMD7q;k*+5*no( zsSHoeoNP|xA7vQ%*Pg`vCzqDCxMT%@2gj+f8}y%x)t+Pscha^myHO1EunF%ar(Fy{ zaxrabd98YUiW+C1cW>vO58@d_U^~UuUmV`@VMdQq_H`_rABgs`~CXdu||*-GmSl2@oMBAR?e3Yt)D^ z7)4wGaT|0HK_5p%REUgG5g8pHoyBp(6%j=Tbmn>Hd6>`l{r^vO-y5BIrYpI1>YV>} ze!qA5zIzBwWkf!)4j-UhA$g8Wr_gp>C2Uhhfl_2o3H~JzD1m2WUUOJ3eGW2fEr?Dk z1k$7X?)-8pdH&AK6DluXntA`sM^NAQ>;Lwny28O(5f81lYY1>Eyc)l4Be2;0L{`*I zP*2k|xa3uxTJ$;pbt=;jP;gBOsNCAK~U}h1{h&MjYm;I-?h)9T0d-g=&!_nUefpg< z-!=0`*#haJ`VZ0Rf1XmR-5!=uR5a*yc`GL+i?Z=)yA`_O?rQxFq3lDH7KDGUPeUTX zZ{_!d(VXG0Tox%c7%=aIW;3X-xy`ZrI%LxLBfNGM`H+)?&X#LC9)Z@ClGP09P4ti3 z@QJ5O?$~z763G^QkIF_V(heQFRxS|M!U^cskBphz?|AYPh$GF50^R0CyzCs@W^uWL zxFXAPWyp%^zmPf2@lM)l!|T@wQ#;#a?!__?Ct0KLcvq!tWIs;~AR{pljZji9Y_CJd zNfGg~Au0gfCj(wG?_Er;8Bp+K#A7~(@cg?({i3lv)|)S03DQrqgw2hmMcO!Vxqk08 z;DhR;rK9*fGK&TEf^@^qdxltpyB~$z@+F>rIw&j+q;t?{X?$T1g@q{~tN z^Qr4MT!3?BW+v`kE>@u&Gpg|;=hmS^2Nw))5G4u6GO1B_YUYtuV71KM*Vd@(rc6_FF(!$*BTfAq2M*R_w z(O~6i7bah7eV{1wc*Zl!=FtBFjJPoKB>Mg!fBlcn{5{o2|F-Cw)C-kG(iQ!+T0GIgG>a%&A}z`;Ryd0|ZHN>ZwNzd3!C$#%s9MN3WYvO;>DaumL8NCc)_CY!D;ZIq z=Aud7;zvR2a$CNfLO0Cuh@O5DNaLqWS^a|&WazJ5t}lRAPx zObe($LO&Gq9190xi>D-cf3ZeWSm8YnLwX^1LfMh)3H;m29VHQfO0pn@-s~qiH|Xu~ z`(qS_?JYfq(*`IE{(*;s?38i7}0~L61e8)yK@`BbgWKRTbUhDet`ss`aN}%Y%5k3 z%2g!j21#fLn`XXy=7+26XG5`sWTSc;>YRp{kV!+dMafask;Wn5kYK6(kg$VV zl5c&%jf@SIA($d%$6V^bpKjB15pW%+Hnz^$NQ6M@B54}R-!9qR+{Z2RHi|BuICNTQ z(xrnH%J>OW<>W1CEuJ&)`>T{g`y34qgc;9He}F?gcB6HTF_3i)iE>@e>AIlV&q zZ)X81!PHhh3_c8$xT$h#Q4|ccSdK+?F`5;M;5JUOAt{z< zQlanpc;K>QX zqtm;@Z@i}6k7R*H>q}~X(;9AhX>mzS>%zRa>8}n8V>ywp!Jc*tyF1ZBlF=6491o4G z=4FL3aUCVv0lQzyUSqUtgE=7=4?j0}k<}&Yfo(M35rOd{UVE8vwydI z*B_qw)|o#G^Zu_hKT{I6D8faD4R#1A6k(i`8`3lOj3$n0b2xcC(G2}$u4qE1C(T(7 zzR$)E#Z@5e@dO7zHpKN9Ii*y|u`M!f1bhkIfPfYYALr3R{$7;4_Y!3~z>mv?55ftX z01qbuF`t_R3D@t_ALi?^37Uhz1Y?eKsV3l%F0JGImTlp#jrQJr*3EP@R_u@ z*i&wiVz$|(xy~gR6)k2+fGZxK$d|$gp($ZHU(_9DS68BA%FC$!qJm|^_xhUNl}k4o z9mqr{rB}GT1o20s<+~c`%54QsnP|SS0ZEo-{t_8JH%`a!eBkSSDB|9QN^y9P@1B>6 z2IzM$iR_8b3=iWcPhnl`ukp+ia_s&`*!JGcGiLF9t_-_Bt;+M4I=fR$+p7DrzRqc? zoYWz&CWv-SQJ3-6NYU0m6nWK(&=PlzG(IcJL_ig&aY!peBR|{t3&IT%Hx+m_WLsAqBIf6;3onxrE~Tut+n4Qex9agv|@#4((_<$W4kv3kB)PJLg8Pfgb+JcN-oVzpJ8{;uXV(#a!(W_Iqts1U(g>qu!4F^X^xbs|a zZoCLGTv2QHo$;YVsK&4gEMZB}Mrq}~PbfK>pU|)GhO}RdwVHl0xT>JW+A?Ikg2j@( zdL?0_SOFwV(i5W_T^zkb=BdNQl+hRI>E{Z;S>e|HNRRwp_hH0!+^eG-H(baqxjhm& zjbIvHx^%gE*3XGU{ws0FpJopRFMqyT{g098-@z*Ug+`u-q(hR3EcDp?(GZ+>L)*l4 z<3c#kSqmg+PiZK(tVi#a9f%H(g_mDx1|H_koQG~tk!fbJPkZ1p^o|?(+!}zMCLBZs zI3?bPDs8QI+&h(k`KipA91$>HXEsmpavc%gY|zu>FKDuf2NIK(>yU==&>=Pup0oqn zk@&!7aA@{l6yLQ6p*6-9f$5X%4ash!mZ}%vT$3#~_^iEs=p@cFT`@P)o+u8C{;poQ z$m&YQnzCM`u&}?zorB=%6wSTm__|XPJ%?4;jdjO3*{U1{FT_|P!m%i&lZ(rO&TdUR{_sT+qnUBE5|`ZcEhqpqM3>a!L_$SmP`hsM0o@dxex^;3X-i0PzDP zpESQp5^MRbB3Or_7_Frms-}TL#3c8KVE0aYY(3`LDY(*nrFy%*VyhTVC*NfRW-PVE z#g|l{>&s+>OUU;kV0y7`X-R9vo5u{r9J<_i*1tBH27BGGm9lQz1W1C_0;{ zAo)4Nhub?xa83w7M(6fc93VMrlA5i#@vT)kU=oLJrin`isAIL zfY24)y@LQn#t!miE)WnEwt*tT;Q~*-uW#T%*l#Wpq2HU;k`BQOO?2LiZs`vw8;7T{ zZSE=G@G>(_mAMh42)#GA8{a$2Z%#ZXQoG-IB3Ji_u9P|_7K#guI@QigqOgcI1N#?EYir}uuTCa2MXuc z%X19VDv1Wq1d=puq7b{+kI2?Fk!<)V6>njO^W#F^3HX=z_8b8-!AnV7$6n~Zez*gD z*fKyKGkpQtFIS>IJe#wNAp*Om{LT*f5ix~Smq^&?bza)uhIr7)-abjs00K^vmgYyg zF*t-0(yNNY>gr*HsW$_bf&$)>F0jcf=KBj|Nv8@Y__eyomjR$_(6gMe;`UfGGVM%L za7GO51B9l{kvC;gAe4~a7(aof4~Qq`=Kydc<2TBrw+^~ z0U2o>F4-WNR-yE?5GH3=C>e9El~OKp$aOkj>B!2k11km>jfzA3h0;)J;S*g?*p2y>!M=$Hn)#& zTA_P)`DAzZBMLZi#nyVmix)JPMUe5JCO4>auzT{L|KyWt@aentO#Qqb≠YDMYmf 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%0DbN%P6*`)477{1CqrfVNK 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�H5k(k;$270)*aj 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

UbW=m#+7c52|&15xwE&xZ* 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 jYXAFv%6JOi{ubZ-KldqbBw}arlqmUi!zlgv literal 0 HcmV?d00001 diff --git a/app/src/main/assets/privacyas.txt b/app/src/main/assets/privacyas.txt new file mode 100644 index 0000000..d9b91ba --- /dev/null +++ b/app/src/main/assets/privacyas.txt @@ -0,0 +1,11 @@ +欢迎您使用安顺祥智控。您可使用本应用以实现智能设备的控制、情景、设备分享等功能。 +我们深知隐私保护对您的重要性,为了更全面地呈现我们收集和使用您的个人信息的相关情况,我们依据最新法律法规要求在您使用我们的产品或服务(统称“服务”)重点内容包括一下信息: +必要权限(用于该应用的基本服务和功能) +· 获取手机帐号信息: +用于应用内使用安顺祥智控帐号登录; +· 获取位置信息: +基于位置信息为您提供的服务,如配网,家庭切换天气服务; +· 相册权限:基于图片/视频相关服务,用于从相册中选择图片、视频文件; +· 麦克风权限:基于语音实现服务,如在线语音控制设备; +· 消息通知权限:向您推送有关产品或服务、安防类的通知等功能。 +如果您不统一调用以上必须权限或功能,或不同意我们收集并使用以上信息,将导致本应用无法正常运行,您可选择退出本应用终止服务。 \ No newline at end of file diff --git a/app/src/main/assets/privacycw.txt b/app/src/main/assets/privacycw.txt new file mode 100644 index 0000000..1ff1633 --- /dev/null +++ b/app/src/main/assets/privacycw.txt @@ -0,0 +1,11 @@ +欢迎您使用Swaiot智控。您可使用本应用以实现智能设备的控制、情景、设备分享等功能。 +我们深知隐私保护对您的重要性,为了更全面地呈现我们收集和使用您的个人信息的相关情况,我们依据最新法律法规要求在您使用我们的产品或服务(统称“服务”)重点内容包括一下信息: +必要权限(用于该应用的基本服务和功能) +· 获取手机帐号信息: +用于应用内使用Swaiot智控帐号登录; +· 获取位置信息: +基于位置信息为您提供的服务,如配网,家庭切换天气服务; +· 相册权限:基于图片/视频相关服务,用于从相册中选择图片、视频文件; +· 麦克风权限:基于语音实现服务,如在线语音控制设备; +· 消息通知权限:向您推送有关产品或服务、安防类的通知等功能。 +如果您不统一调用以上必须权限或功能,或不同意我们收集并使用以上信息,将导致本应用无法正常运行,您可选择退出本应用终止服务。 \ No newline at end of file diff --git a/app/src/main/assets/privacyyj.txt b/app/src/main/assets/privacyyj.txt new file mode 100644 index 0000000..040eb24 --- /dev/null +++ b/app/src/main/assets/privacyyj.txt @@ -0,0 +1,11 @@ +欢迎您使用雅今智慧生活。您可使用本应用以实现智能设备的控制、情景、设备分享等功能。 +我们深知隐私保护对您的重要性,为了更全面地呈现我们收集和使用您的个人信息的相关情况,我们依据最新法律法规要求在您使用我们的产品或服务(统称“服务”)重点内容包括一下信息: +必要权限(用于该应用的基本服务和功能) +· 获取手机帐号信息: +用于应用内使用雅今智慧生活帐号登录; +· 获取位置信息: +基于位置信息为您提供的服务,如配网,家庭切换天气服务; +· 相册权限:基于图片/视频相关服务,用于从相册中选择图片、视频文件; +· 麦克风权限:基于语音实现服务,如在线语音控制设备; +· 消息通知权限:向您推送有关产品或服务、安防类的通知等功能。 +如果您不统一调用以上必须权限或功能,或不同意我们收集并使用以上信息,将导致本应用无法正常运行,您可选择退出本应用终止服务。 \ No newline at end of file diff --git a/app/src/main/assets/t_s.bmp b/app/src/main/assets/t_s.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8081e0918210cd6c40380e479d3865f5ba860c3b GIT binary patch literal 22554 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�Ib5#IZ2!GE0~A)|vc2n@=Wg9^q}s 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 Bejxw= literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/common/openapi/ClassInstanceManager.java b/app/src/main/java/com/common/openapi/ClassInstanceManager.java new file mode 100644 index 0000000..ed4c976 --- /dev/null +++ b/app/src/main/java/com/common/openapi/ClassInstanceManager.java @@ -0,0 +1,58 @@ +package com.common.openapi; + +import android.content.Context; + +public class ClassInstanceManager { + private volatile static ClassInstanceManager classInstanceManager; + private DeviceLocalCacheManager deviceLocalCacheManager; + private DeviceDetailService deviceDetailService; + private DeviceListService deviceListService; + private DeviceRecordService deviceRecordService; + private DeviceLocalCacheService deviceLocalCacheService; + private DeviceSubAccountListService deviceSubAccountListService; + + public static ClassInstanceManager newInstance() { + if (classInstanceManager == null) { + synchronized (ClassInstanceManager.class) { + if (classInstanceManager == null) { + classInstanceManager = new ClassInstanceManager(); + } + } + } + return classInstanceManager; + } + + public void init(Context context) { + deviceLocalCacheManager = new DeviceLocalCacheManager(); + deviceLocalCacheManager.init(context); + deviceDetailService = new DeviceDetailService(); + deviceListService = new DeviceListService(); + deviceRecordService = new DeviceRecordService(); + deviceLocalCacheService = new DeviceLocalCacheService(); + deviceSubAccountListService = new DeviceSubAccountListService(); + } + + public DeviceLocalCacheManager getDeviceLocalCacheManager() { + return deviceLocalCacheManager; + } + + public DeviceDetailService getDeviceDetailService() { + return deviceDetailService; + } + + public DeviceListService getDeviceListService() { + return deviceListService; + } + + public DeviceRecordService getDeviceRecordService() { + return deviceRecordService; + } + + public DeviceLocalCacheService getDeviceLocalCacheService() { + return deviceLocalCacheService; + } + + public DeviceSubAccountListService getDeviceSubAccountListService() { + return deviceSubAccountListService; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceDetailService.java b/app/src/main/java/com/common/openapi/DeviceDetailService.java new file mode 100644 index 0000000..14a7260 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceDetailService.java @@ -0,0 +1,295 @@ +package com.common.openapi; + +import android.os.Message; + +import com.common.openapi.entity.DeviceAlarmStatusData; +import com.common.openapi.entity.DeviceChannelInfoData; +import com.common.openapi.entity.DeviceModifyNameData; +import com.common.openapi.entity.DeviceUnBindData; +import com.common.openapi.entity.DeviceVersionListData; +import com.mm.android.deviceaddmodule.device_wifi.CurWifiInfo; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessRunnable; +import com.mm.android.deviceaddmodule.mobilecommon.base.LCBusinessHandler; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.BusinessErrorTip; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.HandleMessageCode; +import com.mm.android.deviceaddmodule.openapi.DeviceAddOpenApiManager; + +public class DeviceDetailService { + + + /** + * 获取设备版本和可升级信息 + * + * @param deviceVersionListData + * @param deviceVersionCallBack + */ + public void deviceVersionList(final DeviceVersionListData deviceVersionListData, final IGetDeviceInfoCallBack.IDeviceVersionCallBack deviceVersionCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceVersionCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceVersionCallBack.deviceVersion((DeviceVersionListData.Response) msg.obj); + } else { + //失败 + deviceVersionCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + DeviceVersionListData.Response response = DeviceInfoOpenApiManager.deviceVersionList(deviceVersionListData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 修改设备或通道名称 + * + * @param deviceModifyNameData + * @param modifyDeviceCallBack + */ + public void modifyDeviceName(final DeviceModifyNameData deviceModifyNameData, final IGetDeviceInfoCallBack.IModifyDeviceCallBack modifyDeviceCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (modifyDeviceCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + modifyDeviceCallBack.deviceModify((boolean) msg.obj); + } else { + //失败 + modifyDeviceCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + boolean b = DeviceInfoOpenApiManager.modifyDeviceName(deviceModifyNameData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, b).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 解绑设备 + * + * @param deviceUnBindData + * @param unbindDeviceCallBack + */ + public void unBindDevice(final DeviceUnBindData deviceUnBindData, final IGetDeviceInfoCallBack.IUnbindDeviceCallBack unbindDeviceCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (unbindDeviceCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + unbindDeviceCallBack.unBindDevice((boolean) msg.obj); + } else { + //失败 + unbindDeviceCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + boolean b = DeviceInfoOpenApiManager.unBindDevice(deviceUnBindData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, b).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + public void deletePermission(final String deviceId, final String channelId, final IGetDeviceInfoCallBack.IUnbindDeviceCallBack unbindDeviceCallBack){ + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (unbindDeviceCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + unbindDeviceCallBack.unBindDevice((boolean) msg.obj); + } else { + //失败 + unbindDeviceCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + boolean b = DeviceInfoOpenApiManager.deletePermission(deviceId,channelId); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, b).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 单个设备通道的详细信息获取 + * + * @param deviceChannelInfoData + * @param deviceChannelInfoCallBack + */ + public void bindDeviceChannelInfo(final DeviceChannelInfoData deviceChannelInfoData, final IGetDeviceInfoCallBack.IDeviceChannelInfoCallBack deviceChannelInfoCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceChannelInfoCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceChannelInfoCallBack.deviceChannelInfo((DeviceChannelInfoData.Response) msg.obj); + } else { + //失败 + deviceChannelInfoCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + DeviceChannelInfoData.Response response = DeviceInfoOpenApiManager.bindDeviceChannelInfo(deviceChannelInfoData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 设置动检开关 + * + * @param deviceAlarmStatusData + * @param deviceAlarmStatusCallBack + */ + public void modifyDeviceAlarmStatus(final DeviceAlarmStatusData deviceAlarmStatusData, final IGetDeviceInfoCallBack.IDeviceAlarmStatusCallBack deviceAlarmStatusCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceAlarmStatusCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceAlarmStatusCallBack.deviceAlarmStatus((boolean) msg.obj); + } else { + //失败 + deviceAlarmStatusCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + boolean b = DeviceInfoOpenApiManager.modifyDeviceAlarmStatus(deviceAlarmStatusData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, b).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 设备升级 + * + * @param deviceId + * @param deviceUpdateCallBack + */ + public void upgradeDevice(final String deviceId, final IGetDeviceInfoCallBack.IDeviceUpdateCallBack deviceUpdateCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceUpdateCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceUpdateCallBack.deviceUpdate((boolean) msg.obj); + } else { + //失败 + deviceUpdateCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + boolean b = DeviceInfoOpenApiManager.upgradeDevice(deviceId); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, b).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 设备当前连接热点信息 + * + * @param deviceId + * @param deviceCurrentWifiInfoCallBack + */ + public void currentDeviceWifi(final String deviceId, final IGetDeviceInfoCallBack.IDeviceCurrentWifiInfoCallBack deviceCurrentWifiInfoCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceCurrentWifiInfoCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceCurrentWifiInfoCallBack.deviceCurrentWifiInfo((CurWifiInfo) msg.obj); + } else { + //失败 + deviceCurrentWifiInfoCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + CurWifiInfo curWifiInfo = DeviceAddOpenApiManager.currentDeviceWifi(deviceId); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, curWifiInfo).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + +} diff --git a/app/src/main/java/com/common/openapi/DeviceInfoOpenApiManager.java b/app/src/main/java/com/common/openapi/DeviceInfoOpenApiManager.java new file mode 100644 index 0000000..98276ac --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceInfoOpenApiManager.java @@ -0,0 +1,337 @@ +package com.common.openapi; + +import com.common.openapi.entity.CloudRecordsData; +import com.common.openapi.entity.ControlMovePTZData; +import com.common.openapi.entity.DeviceAlarmStatusData; +import com.common.openapi.entity.DeviceChannelInfoData; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceListData; +import com.common.openapi.entity.DeviceModifyNameData; +import com.common.openapi.entity.DeviceUnBindData; +import com.common.openapi.entity.DeviceVersionListData; +import com.common.openapi.entity.LocalRecordsData; +import com.common.openapi.entity.SubAccountDeviceData; +import com.google.gson.JsonObject; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.openapi.HttpSend; + +import java.util.HashMap; + +public class DeviceInfoOpenApiManager { + + private static int TIME_OUT = 10 * 1000; + private static int DMS_TIME_OUT = 45 * 1000; + + /** + * 分页获取乐橙app添加或分享的设备通道基本信息 + * + * @param deviceListData + * @return + * @throws BusinessException + */ + public static DeviceListData.Response deviceBaseList(DeviceListData deviceListData) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("bindId", deviceListData.data.baseBindId); + paramsMap.put("limit", deviceListData.data.limit); + paramsMap.put("type", deviceListData.data.type); + paramsMap.put("needApInfo", deviceListData.data.needApInfo); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_BASE_LIST,TIME_OUT); + DeviceListData.Response response = new DeviceListData.Response(); + response.parseData(json); + return response; + } + + /** + * 分页获取开放平台添加设备的通道基本信息 + * + * @param deviceListData + * @return + * @throws BusinessException + */ + public static DeviceListData.Response deviceOpenList(DeviceListData deviceListData) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("bindId", deviceListData.data.openBindId); + paramsMap.put("limit", deviceListData.data.limit); + paramsMap.put("type", deviceListData.data.type); + paramsMap.put("needApInfo", deviceListData.data.needApInfo); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_OPEN_LIST,TIME_OUT); + DeviceListData.Response response = new DeviceListData.Response(); + response.parseData(json); + return response; + } + + /** + * 批量根据设备序列号、通道号列表和配件号列表,获取设备的详细信息 + * + * @param deviceDetailListData + * @return + * @throws BusinessException + */ + public static DeviceDetailListData.Response deviceOpenDetailList(DeviceDetailListData deviceDetailListData) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceList", deviceDetailListData.data.deviceList); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_OPEN_DETAIL_LIST,TIME_OUT); + DeviceDetailListData.Response response = new DeviceDetailListData.Response(); + response.parseData(json); + return response; + } + + /** + * 批量根据设备序列号、通道号列表和配件号列表,获取乐橙app添加或分享的设备的详细信息 + * + * @param deviceDetailListData + * @return + * @throws BusinessException + */ + public static DeviceDetailListData.Response deviceBaseDetailList(DeviceDetailListData deviceDetailListData) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceList", deviceDetailListData.data.deviceList); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_BASE_DETAIL_LIST,TIME_OUT); + DeviceDetailListData.Response response = new DeviceDetailListData.Response(); + response.parseData(json); + return response; + } + + /** + * 解绑设备 + * + * @param deviceUnBindData + * @return + * @throws BusinessException + */ + public static boolean unBindDevice(DeviceUnBindData deviceUnBindData) throws BusinessException { + // 解绑设备 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceUnBindData.data.deviceId); + HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_UN_BIND,TIME_OUT); + return true; + } + + public static boolean deletePermission(String deviceId,String channelId) throws BusinessException { + HashMap paramsMap = new HashMap(); +// paramsMap.put("openid", LCDeviceEngine.newInstance().openid); + paramsMap.put("channelId", channelId); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceId); + HttpSend.execute(paramsMap, MethodConst.DELETE_DEVICE_PERMISSION,TIME_OUT); + return true; + } + + /** + * 获取设备版本和可升级信息 + * + * @param deviceVersionListData + * @return + * @throws BusinessException + */ + public static DeviceVersionListData.Response deviceVersionList(DeviceVersionListData deviceVersionListData) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceIds", deviceVersionListData.data.deviceIds); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_VERSION_LIST,TIME_OUT); + DeviceVersionListData.Response response = new DeviceVersionListData.Response(); + response.parseData(json); + return response; + } + + /** + * 修改设备或通道名称 + * + * @param deviceModifyNameData + * @return + * @throws BusinessException + */ + public static boolean modifyDeviceName(DeviceModifyNameData deviceModifyNameData) throws BusinessException { + // 解绑设备 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceModifyNameData.data.deviceId); + paramsMap.put("channelId", deviceModifyNameData.data.channelId); + paramsMap.put("name", deviceModifyNameData.data.name); + HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_MODIFY_NAME,TIME_OUT); + return true; + } + + /** + * 单个设备通道的详细信息获取 + * + * @param deviceChannelInfoData + * @return + * @throws BusinessException + */ + public static DeviceChannelInfoData.Response bindDeviceChannelInfo(DeviceChannelInfoData deviceChannelInfoData) throws BusinessException { + // 单个设备通道的详细信息获取 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceChannelInfoData.data.deviceId); + paramsMap.put("channelId", deviceChannelInfoData.data.channelId); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_CHANNEL_INFO, DMS_TIME_OUT); + DeviceChannelInfoData.Response response = new DeviceChannelInfoData.Response(); + response.parseData(json); + return response; + } + + /** + * 设置动检开关 + * + * @param deviceAlarmStatusData + * @return + * @throws BusinessException + */ + public static boolean modifyDeviceAlarmStatus(DeviceAlarmStatusData deviceAlarmStatusData) throws BusinessException { + // 解绑设备 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceAlarmStatusData.data.deviceId); + paramsMap.put("channelId", deviceAlarmStatusData.data.channelId); + paramsMap.put("enable", deviceAlarmStatusData.data.enable); + HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_MODIFY_ALARM_STATUS, DMS_TIME_OUT); + return true; + } + + /** + * 设备升级 + * + * @param deviceId + * @return + * @throws BusinessException + */ + public static boolean upgradeDevice(String deviceId) throws BusinessException { + // 解绑设备 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceId); + HttpSend.execute(paramsMap, MethodConst.METHOD_DEVICE_UPDATE, DMS_TIME_OUT); + return true; + } + + /** + * 倒序查询设备云录像片段 + * + * @param cloudRecordsData + * @return + * @throws BusinessException + */ + public static CloudRecordsData.Response getCloudRecords(CloudRecordsData cloudRecordsData) throws BusinessException { + // 倒序查询设备云录像片段 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", cloudRecordsData.data.deviceId); + paramsMap.put("channelId", cloudRecordsData.data.channelId); + paramsMap.put("beginTime", cloudRecordsData.data.beginTime); + paramsMap.put("endTime", cloudRecordsData.data.endTime); + paramsMap.put("nextRecordId", cloudRecordsData.data.nextRecordId); + paramsMap.put("count", cloudRecordsData.data.count); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_GET_CLOUND_RECORDS,TIME_OUT); + CloudRecordsData.Response response = new CloudRecordsData.Response(); + response.parseData(json); + return response; + } + + /** + * 查询设备设备录像片段 + * + * @param localRecordsData + * @return + * @throws BusinessException + */ + public static LocalRecordsData.Response queryLocalRecords(LocalRecordsData localRecordsData) throws BusinessException { + // 查询设备设备录像片段 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", localRecordsData.data.deviceId); + paramsMap.put("channelId", localRecordsData.data.channelId); + paramsMap.put("beginTime", localRecordsData.data.beginTime); + paramsMap.put("endTime", localRecordsData.data.endTime); + paramsMap.put("type", localRecordsData.data.type); + paramsMap.put("queryRange", localRecordsData.data.queryRange); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.METHOD_QUERY_LOCAL_RECORD, DMS_TIME_OUT); + LocalRecordsData.Response response = new LocalRecordsData.Response(); + response.parseData(json); + return response; + } + + public static int queryCloudUse(String deviceId,String channelId) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceId); + paramsMap.put("channelId", channelId); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.GET_DEVICE_CLOUD, DMS_TIME_OUT); + Integer state = json.get("strategyStatus").getAsInt(); + return state; + } + + public static String querySDState(String deviceId) throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", deviceId); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.SD_STATUE_QUERY, DMS_TIME_OUT); + String state = json.get("status").getAsString(); + return state; + } + + /** + * 云台移动控制接口(V2版本) + * + * @param controlMovePTZData + * @return + * @throws BusinessException + */ + public static void controlMovePTZ(ControlMovePTZData controlMovePTZData) throws BusinessException { + // 云台移动控制接口(V2版本) + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("deviceId", controlMovePTZData.data.deviceId); + paramsMap.put("channelId", controlMovePTZData.data.channelId); + paramsMap.put("operation", controlMovePTZData.data.operation); + paramsMap.put("duration", controlMovePTZData.data.duration); + HttpSend.execute(paramsMap, MethodConst.METHOD_CONTROL_MOVE_PTZ, DMS_TIME_OUT); + } + + /** + * 删除设备云录像片段 + * + * @param recordRegionId + * @return + * @throws BusinessException + */ + public static boolean deleteCloudRecords(String recordRegionId) throws BusinessException { + // 删除设备云录像片段 + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("recordRegionId", recordRegionId); + HttpSend.execute(paramsMap, MethodConst.METHOD_DELETE_CLOUND_RECORDS,TIME_OUT); + return true; + } + + //V7.12新增 + public static SubAccountDeviceData.Response getSubAccountDeviceListLight(int pageNo, int pageSize, String openid)throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("pageNo", pageNo); + paramsMap.put("pageSize",pageSize); + paramsMap.put("openid",openid); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.LIST_SUB_ACCOUNT_DEVICE,TIME_OUT); + SubAccountDeviceData.Response response = new SubAccountDeviceData.Response(); + response.parseData(json); + return response; + } + + public static DeviceDetailListData.Response getSubAccountDeviceList(int pageNo, int pageSize)throws BusinessException { + HashMap paramsMap = new HashMap(); + paramsMap.put("token", LCDeviceEngine.newInstance().accessToken); + paramsMap.put("page", pageNo); + paramsMap.put("pageSize",pageSize); + JsonObject json = HttpSend.execute(paramsMap, MethodConst.SUB_ACCOUNT_DEVICE_LIST,TIME_OUT); + DeviceDetailListData.Response response = new DeviceDetailListData.Response(); + response.parseData(json); + return response; + } + +} diff --git a/app/src/main/java/com/common/openapi/DeviceListService.java b/app/src/main/java/com/common/openapi/DeviceListService.java new file mode 100644 index 0000000..0edff80 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceListService.java @@ -0,0 +1,164 @@ +package com.common.openapi; + +import android.os.Message; + +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceListData; +import com.google.gson.Gson; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessRunnable; +import com.mm.android.deviceaddmodule.mobilecommon.base.LCBusinessHandler; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.BusinessErrorTip; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.HandleMessageCode; + +import java.util.ArrayList; +import java.util.List; + +public class DeviceListService { + + public static final int pageSize=8; + + + /** + * 获取设备列表 1:开放平台添加的 2:乐橙App添加的 + * + * @param deviceListData + * @param getDeviceListCallBack + */ + public void deviceBaseList(final DeviceListData deviceListData, final IGetDeviceInfoCallBack.IDeviceListCallBack getDeviceListCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (getDeviceListCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + getDeviceListCallBack.deviceList((DeviceDetailListData.Response) msg.obj); + } else { + //失败 + getDeviceListCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + dealDeviceDetailList(handler, deviceListData); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + private void dealDeviceDetailList(LCBusinessHandler handler, DeviceListData deviceListData) throws BusinessException { + if (deviceListData == null) { + deviceListData = new DeviceListData(); + } + //成功返回值 + DeviceDetailListData.Response result = null; + //获取乐橙添加的设备 + DeviceDetailListData.Response deviceBaseDetailList = getDeviceDetailListFromCloud(false, deviceListData); + //乐橙返回 + if (deviceBaseDetailList.data != null && deviceBaseDetailList.data.deviceList != null && deviceBaseDetailList.data.deviceList.size() > 0) { + result = new DeviceDetailListData.Response(); + result.data = new DeviceDetailListData.ResponseData(); + result.data.count = deviceBaseDetailList.data.deviceList.size(); + result.data.deviceList = new ArrayList<>(); + for (DeviceDetailListData.ResponseData.DeviceListBean a : deviceBaseDetailList.data.deviceList) { + DeviceDetailListData.ResponseData.DeviceListBean b = new DeviceDetailListData.ResponseData.DeviceListBean(); + Gson gson = new Gson(); + b = gson.fromJson(gson.toJson(a), DeviceDetailListData.ResponseData.DeviceListBean.class); + b.deviceSource=2; + result.data.deviceList.add(b); + } + result.baseBindId = deviceBaseDetailList.baseBindId; + if (result.data.deviceList.size() >= pageSize) { + //单次已经达到8条不再拉取 + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, result).sendToTarget(); + return; + } else { + //单次没有达到8条 + deviceListData.data.limit = (8 - result.data.deviceList.size()) + ""; + } + } + //获取开放平台添加的设备 + DeviceDetailListData.Response deviceOpenDetailList = getDeviceDetailListFromCloud(true, deviceListData); + //开放平台返回 + if (deviceOpenDetailList.data != null && deviceOpenDetailList.data.deviceList != null && deviceOpenDetailList.data.deviceList.size() > 0) { + if (result == null) { + result = new DeviceDetailListData.Response(); + result.data = new DeviceDetailListData.ResponseData(); + result.data.count = deviceOpenDetailList.data.deviceList.size(); + result.data.deviceList = new ArrayList<>(); + for (DeviceDetailListData.ResponseData.DeviceListBean a : deviceOpenDetailList.data.deviceList) { + DeviceDetailListData.ResponseData.DeviceListBean b = new DeviceDetailListData.ResponseData.DeviceListBean(); + Gson gson = new Gson(); + b = gson.fromJson(gson.toJson(a), DeviceDetailListData.ResponseData.DeviceListBean.class); + b.deviceSource=1; + result.data.deviceList.add(b); + } + } else { + result.data.count = deviceOpenDetailList.data.count + result.data.count; + for (DeviceDetailListData.ResponseData.DeviceListBean a : deviceOpenDetailList.data.deviceList) { + DeviceDetailListData.ResponseData.DeviceListBean b = new DeviceDetailListData.ResponseData.DeviceListBean(); + Gson gson = new Gson(); + b = gson.fromJson(gson.toJson(a), DeviceDetailListData.ResponseData.DeviceListBean.class); + result.data.deviceList.add(b); + } + } + result.openBindId = deviceOpenDetailList.openBindId; + } + if (result == null) { + result = new DeviceDetailListData.Response(); + } + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, result).sendToTarget(); + } + + private DeviceDetailListData.Response getDeviceDetailListFromCloud(boolean isOpenPlatform, DeviceListData deviceListDat) throws BusinessException { + DeviceDetailListData.Response result = new DeviceDetailListData.Response(); + DeviceListData.Response deviceList = null; + //获取到设备基本信息列表 + if (isOpenPlatform) { + deviceList = DeviceInfoOpenApiManager.deviceOpenList(deviceListDat); + } else { + deviceList = DeviceInfoOpenApiManager.deviceBaseList(deviceListDat); + } + if (deviceList.data == null || deviceList.data.deviceList == null || deviceList.data.deviceList.size() == 0) { + return result; + } + //获取设备详情列表request参数封装 + DeviceDetailListData deviceDetailListData = new DeviceDetailListData(); + List deviceListBeans = new ArrayList<>(); + for (DeviceListData.ResponseData.DeviceListElement deviceListElement : deviceList.data.deviceList) { + DeviceDetailListData.RequestData.DeviceListBean deviceListBean = new DeviceDetailListData.RequestData.DeviceListBean(); + deviceListBean.deviceId = deviceListElement.deviceId; + StringBuilder stringBuilder=new StringBuilder(); + if (deviceListElement.channels.size()>0){ + for (DeviceListData.ResponseData.DeviceListElement.ChannelsElement channelsElement:deviceListElement.channels){ + stringBuilder.append(channelsElement.channelId).append(","); + } + deviceListBean.channelList=stringBuilder.substring(0,stringBuilder.length()-1); + } + deviceListBeans.add(deviceListBean); + } + deviceDetailListData.data.deviceList = deviceListBeans; + //获取设备详情列表 + if (isOpenPlatform) { + result = DeviceInfoOpenApiManager.deviceOpenDetailList(deviceDetailListData); + } else { + result = DeviceInfoOpenApiManager.deviceBaseDetailList(deviceDetailListData); + } + if (result == null) { + result = new DeviceDetailListData.Response(); + } + if (isOpenPlatform) { + result.openBindId = Long.parseLong(deviceList.data.deviceList.get(deviceList.data.deviceList.size() - 1).bindId); + } else { + result.baseBindId = Long.parseLong(deviceList.data.deviceList.get(deviceList.data.deviceList.size() - 1).bindId); + } + return result; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceLocalCacheDatabase.java b/app/src/main/java/com/common/openapi/DeviceLocalCacheDatabase.java new file mode 100644 index 0000000..8bdcc2b --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceLocalCacheDatabase.java @@ -0,0 +1,122 @@ +package com.common.openapi; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.common.openapi.entity.DeviceLocalCacheData; + +import java.util.ArrayList; +import java.util.List; + +public class DeviceLocalCacheDatabase extends SQLiteOpenHelper { + private static final String TAG = DeviceLocalCacheDatabase.class.getSimpleName(); + + private static final String DB_NAME = "device_local_cache"; + private static final String TABLE_NAME = "t_device_local_cache"; + + private static final String TABLE_CREATE_SQL = "create table " + TABLE_NAME + "(" + + "cache_id integer primary key autoincrement, " + + "device_id text, " + + "device_name text, " + + "channel_id text, " + + "channel_name text, " + + "pic_path text, " + + "creation_time integer, " + + "modify_time integer " + + ")"; + + private static final String[] TABLE_COLUMNS = { + "cache_id", + "device_id", + "device_name", + "channel_id", + "channel_name", + "pic_path", + "creation_time", + "modify_time" + }; + + public DeviceLocalCacheDatabase(Context context) { + super(context, DB_NAME, null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(TABLE_CREATE_SQL); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } + + public int addLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + SQLiteDatabase db = getWritableDatabase(); + ContentValues v = new ContentValues(); + v.put("device_id", deviceLocalCacheData.getDeviceId()); + v.put("device_name", deviceLocalCacheData.getDeviceName()); + v.put("channel_id", deviceLocalCacheData.getChannelId()); + v.put("channel_name", deviceLocalCacheData.getChannelName()); + v.put("pic_path", deviceLocalCacheData.getPicPath()); + v.put("creation_time", System.currentTimeMillis()); + v.put("modify_time", System.currentTimeMillis()); + long rowid = db.insert(TABLE_NAME, null, v); + if (rowid != -1) { + return 1; + } + return 0; + } + + public int updateLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + ContentValues v = new ContentValues(); + v.put("pic_path", deviceLocalCacheData.getPicPath()); + v.put("modify_time", System.currentTimeMillis()); + SQLiteDatabase db = getWritableDatabase(); + int ret = db.update(TABLE_NAME, v, "cache_id=?", new String[]{String.valueOf(deviceLocalCacheData.getCacheId())}); + if (ret > 0) { + return 1; + } + return 0; + } + + public DeviceLocalCacheData findLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + StringBuilder selectionBuilder = new StringBuilder(); + List selectionArgs = new ArrayList<>(); + boolean first = true; + if (deviceLocalCacheData.getDeviceId() != null) { + selectionBuilder.append(" device_id =? "); + selectionArgs.add(deviceLocalCacheData.getDeviceId()); + first = false; + } + if (deviceLocalCacheData.getChannelId() != null) { + if (!first) { + selectionBuilder.append(" and "); + } + selectionBuilder.append(" channel_id =? "); + selectionArgs.add(deviceLocalCacheData.getChannelId()); + } + SQLiteDatabase db = getReadableDatabase(); + try (Cursor c = db.query(TABLE_NAME, TABLE_COLUMNS, selectionBuilder.toString(), selectionArgs.toArray(new String[0]), null, null, null, "1")) { + if (c.moveToFirst()) { + return (buildLocalCacheFromCursor(c)); + } + } + return null; + } + + private DeviceLocalCacheData buildLocalCacheFromCursor(Cursor c) { + DeviceLocalCacheData deviceLocalCacheData = new DeviceLocalCacheData(); + deviceLocalCacheData.setCacheId(c.getInt(0)); + deviceLocalCacheData.setDeviceId(c.getString(1)); + deviceLocalCacheData.setDeviceName(c.getString(2)); + deviceLocalCacheData.setChannelId(c.getString(3)); + deviceLocalCacheData.setChannelName(c.getString(4)); + deviceLocalCacheData.setPicPath(c.getString(5)); + deviceLocalCacheData.setCreationTime(c.getLong(6)); + deviceLocalCacheData.setModifyTime(c.getLong(7)); + return deviceLocalCacheData; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceLocalCacheManager.java b/app/src/main/java/com/common/openapi/DeviceLocalCacheManager.java new file mode 100644 index 0000000..9022264 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceLocalCacheManager.java @@ -0,0 +1,43 @@ +package com.common.openapi; + +import android.content.Context; + +import com.common.openapi.entity.DeviceLocalCacheData; +import com.lechange.demo.tools.MediaPlayHelper; + +public class DeviceLocalCacheManager { + + private DeviceLocalCacheDatabase deviceLocalCacheDatabase; + + public void init(Context context) { + deviceLocalCacheDatabase = new DeviceLocalCacheDatabase(context); + } + + public int addLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + DeviceLocalCacheData find = deviceLocalCacheDatabase.findLocalCache(deviceLocalCacheData); + if (find == null) { + int add = deviceLocalCacheDatabase.addLocalCache(deviceLocalCacheData); + return add; + } else { + deviceLocalCacheData.setCacheId(find.getCacheId()); + int update = deviceLocalCacheDatabase.updateLocalCache(deviceLocalCacheData); + //删除之前缓存文件 + MediaPlayHelper.delete(find.getPicPath()); + return update; + } + } + + public DeviceLocalCacheData findLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + DeviceLocalCacheData find = deviceLocalCacheDatabase.findLocalCache(deviceLocalCacheData); + return find; + } + + public int updateLocalCache(DeviceLocalCacheData deviceLocalCacheData) { + DeviceLocalCacheData find = deviceLocalCacheDatabase.findLocalCache(deviceLocalCacheData); + if (find == null) { + return 0; + } + int update = deviceLocalCacheDatabase.updateLocalCache(find); + return update; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceLocalCacheService.java b/app/src/main/java/com/common/openapi/DeviceLocalCacheService.java new file mode 100644 index 0000000..54152b4 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceLocalCacheService.java @@ -0,0 +1,69 @@ +package com.common.openapi; + +import android.os.Message; + +import com.common.openapi.entity.DeviceLocalCacheData; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessRunnable; +import com.mm.android.deviceaddmodule.mobilecommon.base.LCBusinessHandler; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.BusinessErrorTip; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.HandleMessageCode; + +public class DeviceLocalCacheService { + + /** + * 添加设备缓存信息 + * @param localCacheData + */ + public void addLocalCache(final DeviceLocalCacheData localCacheData) { + new BusinessRunnable(null) { + @Override + public void doBusiness() throws BusinessException { + try { + DeviceLocalCacheManager deviceLocalCacheManager = ClassInstanceManager.newInstance().getDeviceLocalCacheManager(); + deviceLocalCacheManager.addLocalCache(localCacheData); + } catch (Throwable e) { + throw e; + } + } + }; + } + + /** + * 获取设备缓存信息 + * @param localCacheData + * @param deviceCacheCallBack + */ + public void findLocalCache(final DeviceLocalCacheData localCacheData, final IGetDeviceInfoCallBack.IDeviceCacheCallBack deviceCacheCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceCacheCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceCacheCallBack.deviceCache((DeviceLocalCacheData) msg.obj); + } else { + //失败 + deviceCacheCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + DeviceLocalCacheData localCache = ClassInstanceManager.newInstance().getDeviceLocalCacheManager().findLocalCache(localCacheData); + if (localCache != null) { + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, localCache).sendToTarget(); + } else { + throw new BusinessException("null point"); + } + } catch (Throwable e) { + throw e; + } + } + }; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceRecordService.java b/app/src/main/java/com/common/openapi/DeviceRecordService.java new file mode 100644 index 0000000..d83bb64 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceRecordService.java @@ -0,0 +1,204 @@ +package com.common.openapi; + +import android.os.Message; + +import com.common.openapi.entity.CloudRecordsData; +import com.common.openapi.entity.ControlMovePTZData; +import com.common.openapi.entity.DeleteCloudRecordsData; +import com.common.openapi.entity.LocalRecordsData; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessRunnable; +import com.mm.android.deviceaddmodule.mobilecommon.base.LCBusinessHandler; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.BusinessErrorTip; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.HandleMessageCode; + +public class DeviceRecordService { + + /** + * 倒序查询设备云录像片段 + * + * @param cloudRecordsData + * @param cloudRecordCallBack + */ + public void getCloudRecords(final CloudRecordsData cloudRecordsData, final IGetDeviceInfoCallBack.IDeviceCloudRecordCallBack cloudRecordCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (cloudRecordCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + cloudRecordCallBack.deviceCloudRecord((CloudRecordsData.Response) msg.obj); + } else { + //失败 + cloudRecordCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + CloudRecordsData.Response response = DeviceInfoOpenApiManager.getCloudRecords(cloudRecordsData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 查询设备设备录像片段 + * + * @param localRecordsData + * @param deviceLocalRecordCallBack + */ + public void queryLocalRecords(final LocalRecordsData localRecordsData, final IGetDeviceInfoCallBack.IDeviceLocalRecordCallBack deviceLocalRecordCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceLocalRecordCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceLocalRecordCallBack.deviceLocalRecord((LocalRecordsData.Response) msg.obj); + } else { + //失败 + deviceLocalRecordCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + LocalRecordsData.Response response = DeviceInfoOpenApiManager.queryLocalRecords(localRecordsData); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + public void queryCloudUse(final String deviceId, final String channelId, final IGetDeviceInfoCallBack.ICommon iCommon){ + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (iCommon == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + iCommon.onCommonBack(msg.obj); + } else { + //失败 + iCommon.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + int response = DeviceInfoOpenApiManager.queryCloudUse(deviceId,channelId); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + public void querySDUse(final String deviceId, final IGetDeviceInfoCallBack.ICommon iCommon){ + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (iCommon == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + iCommon.onCommonBack(msg.obj); + } else { + //失败 + iCommon.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + String response = DeviceInfoOpenApiManager.querySDState(deviceId); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 云台移动控制接口(V2版本) + * + * @param controlMovePTZData + */ + public void controlMovePTZ(final ControlMovePTZData controlMovePTZData) { + new BusinessRunnable(new LCBusinessHandler() { + + @Override + public void handleBusiness(Message msg) { + } + }) { + @Override + public void doBusiness() throws BusinessException { + try { + DeviceInfoOpenApiManager.controlMovePTZ(controlMovePTZData); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + /** + * 删除设备云录像片段 + * + * @param deleteCloudRecordsData + * @param deviceDeleteRecordCallBack + */ + public void deleteCloudRecords(final DeleteCloudRecordsData deleteCloudRecordsData, final IGetDeviceInfoCallBack.IDeviceDeleteRecordCallBack deviceDeleteRecordCallBack) { + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (deviceDeleteRecordCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + deviceDeleteRecordCallBack.deleteDeviceRecord(); + } else { + //失败 + deviceDeleteRecordCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + for (String id : deleteCloudRecordsData.data.recordRegionIds) { + DeviceInfoOpenApiManager.deleteCloudRecords(id); + } + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, null).sendToTarget(); + } catch (BusinessException e) { + throw e; + } + } + }; + } +} diff --git a/app/src/main/java/com/common/openapi/DeviceSubAccountListService.java b/app/src/main/java/com/common/openapi/DeviceSubAccountListService.java new file mode 100644 index 0000000..45530a2 --- /dev/null +++ b/app/src/main/java/com/common/openapi/DeviceSubAccountListService.java @@ -0,0 +1,83 @@ +package com.common.openapi; + +import android.os.Handler; +import android.os.Message; + +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.SubAccountDeviceData; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessException; +import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.BusinessRunnable; +import com.mm.android.deviceaddmodule.mobilecommon.base.LCBusinessHandler; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.BusinessErrorTip; +import com.mm.android.deviceaddmodule.mobilecommon.businesstip.HandleMessageCode; + +public class DeviceSubAccountListService { + public static final int pageSize=10; + + public void getDeviceListSubAccount(final int pageNo, final String openid, final IGetDeviceInfoCallBack.ISubAccountDevice getDeviceListCallBack){ + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (getDeviceListCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + getDeviceListCallBack.DeviceList((SubAccountDeviceData.Response) msg.obj); + } else { + //失败 + getDeviceListCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + dealSubAccountDeviceList(handler,pageNo,openid); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + private void dealSubAccountDeviceList(Handler handler,int pageNo,String openid)throws BusinessException { + SubAccountDeviceData.Response response= DeviceInfoOpenApiManager.getSubAccountDeviceListLight(pageNo,pageSize,openid); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } + + public void getSubAccountDeviceList(final int pageNo, final IGetDeviceInfoCallBack.ISubAccountDevice getDeviceListCallBack){ + final LCBusinessHandler handler = new LCBusinessHandler() { + @Override + public void handleBusiness(Message msg) { + if (getDeviceListCallBack == null) { + return; + } + if (msg.what == HandleMessageCode.HMC_SUCCESS) { + //成功 + getDeviceListCallBack.DeviceList(( DeviceDetailListData.Response) msg.obj); + } else { + //失败 + getDeviceListCallBack.onError(BusinessErrorTip.throwError(msg)); + } + } + }; + new BusinessRunnable(handler) { + @Override + public void doBusiness() throws BusinessException { + try { + getDeviceListAtSubAccount(handler,pageNo); + } catch (BusinessException e) { + throw e; + } + } + }; + } + + private void getDeviceListAtSubAccount(Handler handler,int pageNo)throws BusinessException { + DeviceDetailListData.Response response= DeviceInfoOpenApiManager.getSubAccountDeviceList(pageNo,pageSize); + handler.obtainMessage(HandleMessageCode.HMC_SUCCESS, response).sendToTarget(); + } + +} diff --git a/app/src/main/java/com/common/openapi/IGetDeviceInfoCallBack.java b/app/src/main/java/com/common/openapi/IGetDeviceInfoCallBack.java new file mode 100644 index 0000000..e752944 --- /dev/null +++ b/app/src/main/java/com/common/openapi/IGetDeviceInfoCallBack.java @@ -0,0 +1,218 @@ +package com.common.openapi; + +import com.common.openapi.entity.CloudRecordsData; +import com.common.openapi.entity.DeviceChannelInfoData; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceLocalCacheData; +import com.common.openapi.entity.DeviceVersionListData; +import com.common.openapi.entity.LocalRecordsData; +import com.mm.android.deviceaddmodule.device_wifi.CurWifiInfo; + +public interface IGetDeviceInfoCallBack { + public interface IDeviceListCallBack { + /** + * 成功获取到设备列表 + * + * @param responseData + */ + void deviceList(DeviceDetailListData.Response responseData); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceVersionCallBack { + /** + * 获取设备版本和可升级信息 + * + * @param responseData + */ + void deviceVersion(DeviceVersionListData.Response responseData); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IModifyDeviceCallBack { + /** + * 修改设备或通道名称成功 + * + * @param result + */ + void deviceModify(boolean result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IUnbindDeviceCallBack { + /** + * 解绑设备成功 + * + * @param result + */ + void unBindDevice(boolean result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceChannelInfoCallBack { + /** + * 单个设备通道的详细信息获取 + * + * @param result + */ + void deviceChannelInfo(DeviceChannelInfoData.Response result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceAlarmStatusCallBack { + /** + * 设置动检开关 + * + * @param result + */ + void deviceAlarmStatus(boolean result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceUpdateCallBack { + /** + * 设备升级 + * + * @param result + */ + void deviceUpdate(boolean result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceCloudRecordCallBack { + /** + * 倒序查询设备云录像片段 + * + * @param result + */ + void deviceCloudRecord(CloudRecordsData.Response result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceLocalRecordCallBack { + /** + * 查询设备设备录像片段 + * + * @param result + */ + void deviceLocalRecord(LocalRecordsData.Response result); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceDeleteRecordCallBack { + /** + * 删除设备云录像片段 + */ + void deleteDeviceRecord(); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceCacheCallBack { + /** + * 获取设备缓存信息 + */ + void deviceCache(DeviceLocalCacheData deviceLocalCacheData); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IDeviceCurrentWifiInfoCallBack { + /** + * 设备当前连接热点信息 + */ + void deviceCurrentWifiInfo(CurWifiInfo curWifiInfo); + + /** + * 错误回调 + * + * @param throwable + */ + void onError(Throwable throwable); + } + + public interface IModifyDeviceName { + /** + * 设备修改之后的名字 + */ + void deviceName(String newName); + } + + public interface ISubAccountDevice{ + void DeviceList(T response); + + void onError(Throwable throwable); + } + + public interface ICommon{ + void onCommonBack(T response); + void onError(Throwable throwable); + } + + + +} diff --git a/app/src/main/java/com/common/openapi/MethodConst.java b/app/src/main/java/com/common/openapi/MethodConst.java new file mode 100644 index 0000000..10e26b6 --- /dev/null +++ b/app/src/main/java/com/common/openapi/MethodConst.java @@ -0,0 +1,54 @@ +package com.common.openapi; + +public class MethodConst { + //分页获取乐橙app添加或分享的设备通道基本信息 + public static String METHOD_DEVICE_BASE_LIST = "deviceBaseList"; + //分页获取开放平台添加设备的通道基本信息 + public static String METHOD_DEVICE_OPEN_LIST = "deviceOpenList"; + //批量根据设备序列号、通道号列表和配件号列表,获取设备的详细信息 + public static String METHOD_DEVICE_OPEN_DETAIL_LIST = "deviceOpenDetailList"; + //批量根据设备序列号、通道号列表和配件号列表,获取乐橙app添加或分享的设备的详细信息 + public static String METHOD_DEVICE_BASE_DETAIL_LIST = "deviceBaseDetailList"; + //解绑设备 + public static String METHOD_DEVICE_UN_BIND = "unBindDevice"; + //获取设备版本和可升级信息 + public static String METHOD_DEVICE_VERSION_LIST = "deviceVersionList"; + //修改设备或通道名称 + public static String METHOD_DEVICE_MODIFY_NAME = "modifyDeviceName"; + //单个设备通道的详细信息获取 + public static String METHOD_DEVICE_CHANNEL_INFO = "bindDeviceChannelInfo"; + //设置动检开关 + public static String METHOD_DEVICE_MODIFY_ALARM_STATUS = "modifyDeviceAlarmStatus"; + //设备升级 + public static String METHOD_DEVICE_UPDATE = "upgradeDevice"; + //倒序查询设备云录像片段 + public static String METHOD_GET_CLOUND_RECORDS = "getCloudRecords"; + //查询设备设备录像片段 + public static String METHOD_QUERY_LOCAL_RECORD = "queryLocalRecords"; + //云台移动控制接口(V2版本) + public static String METHOD_CONTROL_MOVE_PTZ = "controlMovePTZ"; + //查询设备云录像片 + public static String METHOD_QUERY_CLOUND_RECORDS = "queryCloudRecords"; + //删除设备云录像片段 + public static String METHOD_DELETE_CLOUND_RECORDS = "deleteCloudRecords"; + + public static String LIST_SUB_ACCOUNT_DEVICE = "listSubAccountDevice"; + + public static String SUB_ACCOUNT_DEVICE_LIST = "subAccountDeviceList"; + + public static String DELETE_DEVICE_PERMISSION = "deleteDevicePermission"; + + public static String SD_STATUE_QUERY = "deviceSdcardStatus"; + public static String GET_DEVICE_CLOUD = "getDeviceCloud"; + + + + public interface ParamConst { + public String deviceDetail = "deviceDetail"; + public String recordType = "recordType"; + public String recordData = "recordsData"; + public int recordTypeLocal = 2; + public int recordTypeCloud = 1; + public String fromList = "list"; + } +} diff --git a/app/src/main/java/com/common/openapi/entity/CloudRecordsData.java b/app/src/main/java/com/common/openapi/entity/CloudRecordsData.java new file mode 100644 index 0000000..121d14e --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/CloudRecordsData.java @@ -0,0 +1,48 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.List; + +public class CloudRecordsData implements Serializable { + public CloudRecordsData.RequestData data = new CloudRecordsData.RequestData(); + + public static class Response { + public CloudRecordsData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), CloudRecordsData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public List records; + + public static class RecordsBean implements Serializable { + public String recordId; + public String deviceId; + public String channelId; + public String beginTime; + public String endTime; + public String size; + public String thumbUrl; + public int encryptMode; + public String recordRegionId; + public String type; + } + } + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId = "0"; + public String beginTime; + public String endTime; + public long nextRecordId=-1; + public long count; + public String queryRange; + } +} diff --git a/app/src/main/java/com/common/openapi/entity/ControlMovePTZData.java b/app/src/main/java/com/common/openapi/entity/ControlMovePTZData.java new file mode 100644 index 0000000..279c92f --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/ControlMovePTZData.java @@ -0,0 +1,16 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class ControlMovePTZData implements Serializable { + public ControlMovePTZData.RequestData data = new ControlMovePTZData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId = "0"; + //0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-停止 + public String operation; + public long duration; + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeleteCloudRecordsData.java b/app/src/main/java/com/common/openapi/entity/DeleteCloudRecordsData.java new file mode 100644 index 0000000..6a0b988 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeleteCloudRecordsData.java @@ -0,0 +1,14 @@ +package com.common.openapi.entity; + +import java.io.Serializable; +import java.util.List; + +public class DeleteCloudRecordsData implements Serializable { + public DeleteCloudRecordsData.RequestData data = new DeleteCloudRecordsData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public List recordRegionIds; + + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceAlarmStatusData.java b/app/src/main/java/com/common/openapi/entity/DeviceAlarmStatusData.java new file mode 100644 index 0000000..d40b166 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceAlarmStatusData.java @@ -0,0 +1,15 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class DeviceAlarmStatusData implements Serializable { + public DeviceAlarmStatusData.RequestData data = new DeviceAlarmStatusData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId="0"; + public boolean enable; + } + +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceChannelInfoData.java b/app/src/main/java/com/common/openapi/entity/DeviceChannelInfoData.java new file mode 100644 index 0000000..e0b822e --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceChannelInfoData.java @@ -0,0 +1,39 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; + +public class DeviceChannelInfoData implements Serializable { + public DeviceChannelInfoData.RequestData data = new DeviceChannelInfoData.RequestData(); + + public static class Response { + public DeviceChannelInfoData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), DeviceChannelInfoData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public String deviceId; + public int alarmStatus; + public int channelId; + public String channelName; + public String channelOnline; + public String channelPicUrl; + public String shareStatus; + public String shareFunctions; + public String csStatus; + public String channelAbility; + } + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId="0"; + } + +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceDetailListData.java b/app/src/main/java/com/common/openapi/entity/DeviceDetailListData.java new file mode 100644 index 0000000..b3d588a --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceDetailListData.java @@ -0,0 +1,478 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class DeviceDetailListData implements Serializable { + public DeviceDetailListData.RequestData data = new DeviceDetailListData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public List deviceList; + + @Override + public String toString() { + return "RequestData{" + + "token='" + token + '\'' + + ", deviceList=" + deviceList + + '}'; + } + + public static class DeviceListBean implements Serializable { + public String deviceId; + public String channelList; + public String apList; + + @Override + public String toString() { + return "DeviceListBean{" + + "deviceId='" + deviceId + '\'' + + ", channelList='" + channelList + '\'' + + ", apList='" + apList + '\'' + + '}'; + } + } + } + + public static class Response { + public DeviceDetailListData.ResponseData data; + public long baseBindId = -1; + public long openBindId = -1; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), DeviceDetailListData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public int count; + + public List deviceList; + + @Override + public String toString() { + return "ResponseData{" + + "count=" + count + + ", deviceList=" + deviceList + + '}'; + } + + public List getDeviceList() { + if (deviceList == null) { + return new ArrayList<>(); + } + return deviceList; + } + + public void setDeviceList(List deviceList) { + this.deviceList = deviceList; + } + + public static class DeviceListBean implements Serializable { + public String deviceId; + public String id; + public String status; + public String deviceModel; + public String catalog; + public String brand; + public String version; + public String name; + public String ability; + public String accessType; + public int checkedChannel; + public String playToken; + public int encryptMode; + public String channelNum; + public String permission; + public String addressId; + public String deviceType; + //1:开放平台添加 2:乐橙App添加 + public int deviceSource; + public List channels = new ArrayList<>(); + public List aplist; + + @Override + public String toString() { + return "DeviceListBean{" + + "deviceId='" + deviceId + '\'' + + ", status='" + status + '\'' + + ", deviceModel='" + deviceModel + '\'' + + ", catalog='" + catalog + '\'' + + ", brand='" + brand + '\'' + + ", version='" + version + '\'' + + ", name='" + name + '\'' + + ", ability='" + ability + '\'' + + ", accessType='" + accessType + '\'' + + ", checkedChannel=" + checkedChannel + + ", channelNum=" + channelNum + + ", playToken='" + playToken + '\'' + + ", deviceSource=" + deviceSource + + ", channels=" + channels + + ", aplist=" + aplist + + '}'; + } + + public String getAddressId() { + return addressId == null ? "" : addressId; + } + + public void setAddressId(String addressId) { + this.addressId = addressId == null ? "" : addressId; + } + + public String getDeviceType() { + return deviceType == null ? "" : deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType == null ? "" : deviceType; + } + + public String getId() { + return id == null ? "" : id; + } + + public void setId(String id) { + this.id = id == null ? "" : id; + } + + public String getDeviceId() { + return deviceId == null ? "" : deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId == null ? "" : deviceId; + } + + public String getStatus() { + return status == null ? "" : status; + } + + public void setStatus(String status) { + this.status = status == null ? "" : status; + } + + public String getDeviceModel() { + return deviceModel == null ? "" : deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel == null ? "" : deviceModel; + } + + public String getCatalog() { + return catalog == null ? "" : catalog; + } + + public void setCatalog(String catalog) { + this.catalog = catalog == null ? "" : catalog; + } + + public String getBrand() { + return brand == null ? "" : brand; + } + + public void setBrand(String brand) { + this.brand = brand == null ? "" : brand; + } + + public String getVersion() { + return version == null ? "" : version; + } + + public void setVersion(String version) { + this.version = version == null ? "" : version; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name == null ? "" : name; + } + + public String getAbility() { + return ability == null ? "" : ability; + } + + public void setAbility(String ability) { + this.ability = ability == null ? "" : ability; + } + + public String getAccessType() { + return accessType == null ? "" : accessType; + } + + public void setAccessType(String accessType) { + this.accessType = accessType == null ? "" : accessType; + } + + public int getCheckedChannel() { + return checkedChannel; + } + + public void setCheckedChannel(int checkedChannel) { + this.checkedChannel = checkedChannel; + } + + public String getPlayToken() { + return playToken == null ? "" : playToken; + } + + public void setPlayToken(String playToken) { + this.playToken = playToken == null ? "" : playToken; + } + + public int getEncryptMode() { + return encryptMode; + } + + public void setEncryptMode(int encryptMode) { + this.encryptMode = encryptMode; + } + + public String getChannelNum() { + return channelNum == null ? "" : channelNum; + } + + public void setChannelNum(String channelNum) { + this.channelNum = channelNum == null ? "" : channelNum; + } + + public String getPermission() { + return permission == null ? "" : permission; + } + + public void setPermission(String permission) { + this.permission = permission == null ? "" : permission; + } + + public int getDeviceSource() { + return deviceSource; + } + + public void setDeviceSource(int deviceSource) { + this.deviceSource = deviceSource; + } + + public List getChannels() { + if (channels == null) { + return new ArrayList<>(); + } + return channels; + } + + public void setChannels(List channels) { + this.channels = channels; + } + + public List getAplist() { + if (aplist == null) { + return new ArrayList<>(); + } + return aplist; + } + + public void setAplist(List aplist) { + this.aplist = aplist; + } + + public static class ChannelsBean implements Serializable { + public String channelId; + public String deviceId; + public String channelName; + public String ability; + public String status; + public String picUrl; + public String remindStatus; + public String cameraStatus; + public String storageStrategyStatus; + public String shareStatus; + public String shareFunctions; + public String permission; +// public List resolutions = new ArrayList<>(); + + @Override + public String toString() { + return "ChannelsBean{" + + "channelId='" + channelId + '\'' + + ", deviceId='" + deviceId + '\'' + + ", channelName='" + channelName + '\'' + + ", ability='" + ability + '\'' + + ", status='" + status + '\'' + + ", picUrl='" + picUrl + '\'' + + ", remindStatus='" + remindStatus + '\'' + + ", cameraStatus='" + cameraStatus + '\'' + + ", storageStrategyStatus='" + storageStrategyStatus + '\'' + + ", shareStatus='" + shareStatus + '\'' + + ", shareFunctions='" + shareFunctions + '\'' + + ", permission='" + permission + '\'' + + '}'; + } + + public String getChannelId() { + return channelId == null ? "" : channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId == null ? "" : channelId; + } + + public String getDeviceId() { + return deviceId == null ? "" : deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId == null ? "" : deviceId; + } + + public String getChannelName() { + return channelName == null ? "" : channelName; + } + + public void setChannelName(String channelName) { + this.channelName = channelName == null ? "" : channelName; + } + + public String getAbility() { + return ability == null ? "" : ability; + } + + public void setAbility(String ability) { + this.ability = ability == null ? "" : ability; + } + + public String getStatus() { + return status == null ? "" : status; + } + + public void setStatus(String status) { + this.status = status == null ? "" : status; + } + + public String getPicUrl() { + return picUrl == null ? "" : picUrl; + } + + public void setPicUrl(String picUrl) { + this.picUrl = picUrl == null ? "" : picUrl; + } + + public String getRemindStatus() { + return remindStatus == null ? "" : remindStatus; + } + + public void setRemindStatus(String remindStatus) { + this.remindStatus = remindStatus == null ? "" : remindStatus; + } + + public String getCameraStatus() { + return cameraStatus == null ? "" : cameraStatus; + } + + public void setCameraStatus(String cameraStatus) { + this.cameraStatus = cameraStatus == null ? "" : cameraStatus; + } + + public String getStorageStrategyStatus() { + return storageStrategyStatus == null ? "" : storageStrategyStatus; + } + + public void setStorageStrategyStatus(String storageStrategyStatus) { + this.storageStrategyStatus = storageStrategyStatus == null ? "" : storageStrategyStatus; + } + + public String getShareStatus() { + return shareStatus == null ? "" : shareStatus; + } + + public void setShareStatus(String shareStatus) { + this.shareStatus = shareStatus == null ? "" : shareStatus; + } + + public String getShareFunctions() { + return shareFunctions == null ? "" : shareFunctions; + } + + public void setShareFunctions(String shareFunctions) { + this.shareFunctions = shareFunctions == null ? "" : shareFunctions; + } + + public String getPermission() { + return permission == null ? "" : permission; + } + + public void setPermission(String permission) { + this.permission = permission == null ? "" : permission; + } + + /*public List getResolutions() { + if (resolutions == null) { + return new ArrayList<>(); + } + return resolutions; + } + + public void setResolutions(List resolutions) { + this.resolutions = resolutions; + }*/ + + public static class ResolutionBean implements Serializable { + public String name; + public int imageSize; + public int streamType; + + public ResolutionBean(String name, int imageSize, int streamType) { + this.name = name; + this.imageSize = imageSize; + this.streamType = streamType; + } + + @Override + public String toString() { + return "ResolutionBean{" + + "name='" + name + '\'' + + ", imageSize=" + imageSize + + ", streamType=" + streamType + + '}'; + } + } + } + + + public static class AplistBean implements Serializable { + public String apId; + public String apName; + public String apType; + public String apModel; + public String ioType; + public String apVersion; + public String apStatus; + public String apEnable; + public String apCapacity; + + @Override + public String toString() { + return "AplistBean{" + + "apId='" + apId + '\'' + + ", apName='" + apName + '\'' + + ", apType='" + apType + '\'' + + ", apModel='" + apModel + '\'' + + ", ioType='" + ioType + '\'' + + ", apVersion='" + apVersion + '\'' + + ", apStatus='" + apStatus + '\'' + + ", apEnable='" + apEnable + '\'' + + ", apCapacity='" + apCapacity + '\'' + + '}'; + } + } + } + } + +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceListData.java b/app/src/main/java/com/common/openapi/entity/DeviceListData.java new file mode 100644 index 0000000..1cf2d97 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceListData.java @@ -0,0 +1,100 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.List; + +public class DeviceListData implements Serializable{ + public DeviceListData.RequestData data = new DeviceListData.RequestData(); + + public static class Response { + public DeviceListData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), DeviceListData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public String count; + public List deviceList; + + @Override + public String toString() { + return "ResponseData{" + + "count='" + count + '\'' + + ", deviceList=" + deviceList + + '}'; + } + + public static class DeviceListElement implements Serializable { + public String bindId; + public String deviceId; + public List channels; + public List aplist; + + @Override + public String toString() { + return "DeviceListElement{" + + "bindId='" + bindId + '\'' + + ", deviceId='" + deviceId + '\'' + + ", channels=" + channels + + ", aplist=" + aplist + + '}'; + } + + public static class ChannelsElement implements Serializable { + public String channelName; + public String channelId; + + @Override + public String toString() { + return "ChannelsElement{" + + "channelName='" + channelName + '\'' + + ", channelId='" + channelId + '\'' + + '}'; + } + } + + public static class AplistElement implements Serializable { + public String apId; + public String apName; + public String apType; + + @Override + public String toString() { + return "AplistElement{" + + "apId='" + apId + '\'' + + ", apName='" + apName + '\'' + + ", apType='" + apType + '\'' + + '}'; + } + } + } + + } + + public static class RequestData implements Serializable { + public String token; + public String limit="8"; + public String type="bindAndShare"; + public String needApInfo="false"; + public long baseBindId=-1; + public long openBindId=-1; + + @Override + public String toString() { + return "RequestData{" + + "token='" + token + '\'' + + ", limit='" + limit + '\'' + + ", type='" + type + '\'' + + ", needApInfo='" + needApInfo + '\'' + + ", baseBindId=" + baseBindId + + ", openBindId=" + openBindId + + '}'; + } + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceLocalCacheData.java b/app/src/main/java/com/common/openapi/entity/DeviceLocalCacheData.java new file mode 100644 index 0000000..72b2585 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceLocalCacheData.java @@ -0,0 +1,70 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class DeviceLocalCacheData implements Serializable { + private long cacheId; + private String deviceId; + private String deviceName; + private String channelId; + private String channelName; + private String picPath; + private long creationTime; + private long modifyTime; + + public long getCacheId() { + return cacheId; + } + + public void setCacheId(long cacheId) { + this.cacheId = cacheId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getChannelId() { + return channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId; + } + + public String getChannelName() { + return channelName; + } + + public void setChannelName(String channelName) { + this.channelName = channelName; + } + + public String getPicPath() { + return picPath; + } + + public void setPicPath(String picPath) { + this.picPath = picPath; + } + + public void setCreationTime(long creationTime) { + this.creationTime = creationTime; + } + + public void setModifyTime(long modifyTime) { + this.modifyTime = modifyTime; + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceModifyNameData.java b/app/src/main/java/com/common/openapi/entity/DeviceModifyNameData.java new file mode 100644 index 0000000..cd8d993 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceModifyNameData.java @@ -0,0 +1,46 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class DeviceModifyNameData implements Serializable { + public DeviceModifyNameData.RequestData data = new DeviceModifyNameData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId; + public String name; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getChannelId() { + return channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceUnBindData.java b/app/src/main/java/com/common/openapi/entity/DeviceUnBindData.java new file mode 100644 index 0000000..8af1dc8 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceUnBindData.java @@ -0,0 +1,13 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class DeviceUnBindData implements Serializable { + public DeviceUnBindData.RequestData data = new DeviceUnBindData.RequestData(); + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + + } +} diff --git a/app/src/main/java/com/common/openapi/entity/DeviceVersionListData.java b/app/src/main/java/com/common/openapi/entity/DeviceVersionListData.java new file mode 100644 index 0000000..8e5221f --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/DeviceVersionListData.java @@ -0,0 +1,124 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.List; + +public class DeviceVersionListData implements Serializable { + public DeviceVersionListData.RequestData data = new DeviceVersionListData.RequestData(); + + public static class Response { + public DeviceVersionListData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), DeviceVersionListData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public String count; + public List deviceVersionList; + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public static class DeviceVersionListBean implements Serializable { + public boolean canBeUpgrade; + public String deviceId; + public String version; + public UpgradeInfoBean upgradeInfo; + + public boolean isCanBeUpgrade() { + return canBeUpgrade; + } + + public void setCanBeUpgrade(boolean canBeUpgrade) { + this.canBeUpgrade = canBeUpgrade; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public UpgradeInfoBean getUpgradeInfo() { + return upgradeInfo; + } + + public void setUpgradeInfo(UpgradeInfoBean upgradeInfo) { + this.upgradeInfo = upgradeInfo; + } + + public static class UpgradeInfoBean implements Serializable { + public String version; + public String description; + public String packageUrl; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPackageUrl() { + return packageUrl; + } + + public void setPackageUrl(String packageUrl) { + this.packageUrl = packageUrl; + } + } + } + } + + public static class RequestData implements Serializable { + public String token; + public String deviceIds; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getDeviceIds() { + return deviceIds; + } + + public void setDeviceIds(String deviceIds) { + this.deviceIds = deviceIds; + } + } + +} diff --git a/app/src/main/java/com/common/openapi/entity/LocalRecordsData.java b/app/src/main/java/com/common/openapi/entity/LocalRecordsData.java new file mode 100644 index 0000000..a7d1650 --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/LocalRecordsData.java @@ -0,0 +1,44 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.List; + +public class LocalRecordsData implements Serializable { + public LocalRecordsData.RequestData data = new LocalRecordsData.RequestData(); + + public static class Response { + public LocalRecordsData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), LocalRecordsData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public List records; + + public static class RecordsBean implements Serializable { + public String recordId; + public long fileLength; + public String channelID; + public String beginTime; + public String endTime; + public String type; + } + } + + public static class RequestData implements Serializable { + public String token; + public String deviceId; + public String channelId = "0"; + public String beginTime; + public String endTime; + public String type; + public String queryRange; + + } +} diff --git a/app/src/main/java/com/common/openapi/entity/RecordListData.java b/app/src/main/java/com/common/openapi/entity/RecordListData.java new file mode 100644 index 0000000..e0ad44d --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/RecordListData.java @@ -0,0 +1,12 @@ +package com.common.openapi.entity; + +import com.lechange.demo.adapter.DeviceInnerRecordListAdapter; + +import java.io.Serializable; +import java.util.List; + +public class RecordListData implements Serializable { + public String period; + public List recordsData; + public DeviceInnerRecordListAdapter deviceInnerRecordListAdapters; +} diff --git a/app/src/main/java/com/common/openapi/entity/RecordsData.java b/app/src/main/java/com/common/openapi/entity/RecordsData.java new file mode 100644 index 0000000..e1c52ff --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/RecordsData.java @@ -0,0 +1,52 @@ +package com.common.openapi.entity; + +import java.io.Serializable; + +public class RecordsData implements Serializable { + //0 云录像 1设备录像 + public int recordType; + //通用字段 + public String recordId; + public String beginTime; + public String endTime; + public String type; + public boolean check; + //设备录像 + public long fileLength; + public String channelID; + //云录像 + public String deviceId; + public String channelId; + public String size; + public String thumbUrl; + public int encryptMode; + public String recordRegionId; + + public static RecordsData parseCloudData(CloudRecordsData.ResponseData.RecordsBean recordsBean){ + RecordsData recordsData=new RecordsData(); + recordsData.recordType=0; + recordsData.recordId=recordsBean.recordId; + recordsData.beginTime=recordsBean.beginTime; + recordsData.endTime=recordsBean.endTime; + recordsData.type=recordsBean.type; + recordsData.deviceId=recordsBean.deviceId; + recordsData.channelId=recordsBean.channelId; + recordsData.size=recordsBean.size; + recordsData.thumbUrl=recordsBean.thumbUrl; + recordsData.encryptMode=recordsBean.encryptMode; + recordsData.recordRegionId=recordsBean.recordRegionId; + return recordsData; + } + + public static RecordsData parseLocalData(LocalRecordsData.ResponseData.RecordsBean recordsBean){ + RecordsData recordsData=new RecordsData(); + recordsData.recordType=1; + recordsData.recordId=recordsBean.recordId; + recordsData.beginTime=recordsBean.beginTime; + recordsData.endTime=recordsBean.endTime; + recordsData.type=recordsBean.type; + recordsData.fileLength=recordsBean.fileLength; + recordsData.channelID=recordsBean.channelID; + return recordsData; + } +} diff --git a/app/src/main/java/com/common/openapi/entity/SubAccountDeviceData.java b/app/src/main/java/com/common/openapi/entity/SubAccountDeviceData.java new file mode 100644 index 0000000..5effb7b --- /dev/null +++ b/app/src/main/java/com/common/openapi/entity/SubAccountDeviceData.java @@ -0,0 +1,37 @@ +package com.common.openapi.entity; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.Serializable; +import java.util.List; + +public class SubAccountDeviceData implements Serializable { + + public static class Response { + public SubAccountDeviceData.ResponseData data; + + public void parseData(JsonObject json) { + Gson gson = new Gson(); + this.data = gson.fromJson(json.toString(), SubAccountDeviceData.ResponseData.class); + } + } + + public static class ResponseData implements Serializable { + public int pageNo; + public int pageSize; + public int total; + List deviceLists; + + public static class DeviceList implements Serializable{ + public String deviceId; + public String permission; + List channelLists; + } + + public static class ChannelList implements Serializable{ + public String channelId; + public String permission; + } + } +} diff --git a/app/src/main/java/com/ds/remote/Device.java b/app/src/main/java/com/ds/remote/Device.java new file mode 100644 index 0000000..a60baf6 --- /dev/null +++ b/app/src/main/java/com/ds/remote/Device.java @@ -0,0 +1,241 @@ +package com.ds.remote; + +import android.content.Context; +import android.content.res.AssetManager; + +public class Device { + + //设备号定义 + public static enum DEVICE_TYPE { //设备类型 + C_AUX_DEVICE, //国外 + C_DVB_DEVICE, //国内DVB + C_STB_DEVICE, //国外机顶盒 + C_ATV_DEVICE, //国内TV,或东南亚TV + C_CTV_DEVICE, //国外TV + C_DVD_DEVICE, //国外DVD + C_ARC_DEVICE // + } + + //每个设备的最大码组数定义 + public static int C_AUX_GROUP_MAX = 501; + public static int C_DVB_GROUP_MAX = 372; + public static int C_STB_GROUP_MAX = 213; + public static int C_ATV_GROUP_MAX = 550; + public static int C_CTV_GROUP_MAX = 360; + public static int C_DVD_GROUP_MAX = 315; + public static int C_ARC_GROUP_MAX = 1000; + + //通信命令定义 + public static int CMD_URC_INDEX = 0x01; //发送 URC 的设备号、码组号、键值给IRIC,并启动IRIC发送内部码 + public static int CMD_ARC_INDEX = 0x02; //发送 ARC 的码组号、空调状态变量给IRIC,并启动IRIC发送内部空调码 + public static int CMD_URC_FID = 0x03; //发送 URC 的数据文件号和键值给IRIC,并启动IRIC从MPU读取数据并发送红外码 + public static int CMD_ARC_FID = 0x04; //发送 ARC 的数据文件号和空调状态变量给IRIC,并启动IRIC从MPU读取数据并发送红外码 + public static int CMD_FILE_DATA = 0x05; //将在数据文件中读到的数据发送给IRIC(与IRIC向MPU发送的命令CMD_READ_FILE对应) + public static int CMD_LEN_START = 0x06; //发送 学习命令给IRIC,并启动IRIC进入学习状态(与IRIC向MPU发送学习数据的命令CMD_LEN_DATA对应) + public static int CMD_LEN_DATA = 0x07; //发送 LRC数据给IRIC,并启动IRIC发送该数据(与IRIC向MPU发送学习数据的命令CMD_LEN_DATA相同) + //public static int CMD_READ_FILE = 0x80 //发送读数据文件命令给MPU,MPU根据文件号FILEID,偏移地址ADDR_OFS,需要读取的数据个数DataCnt,将数据取出后发给IRIC + public static int CMD_ARC_VAR = 0x0A; //发送 检测IRIC程序版本命令给IRIC,并启动IRIC将版本号发给MPU(与IRIC向MPU发送版本信息的命令CMD_IRIC_VER相同) + public static int CMD_IRIC_VER = 0x08; //IRIC将修正后的空调状态变量发给MPU,MPU收到后覆盖原来的空调状态变量(与MPU向IRIC发送空调命令CMD_ARC_FID,CMD_ARC_INDEX对应) + public static int CMD_ARC_LEN_START = 0x0c; //空调学习命令 + public static int CMD_ARC_LEN_DATA = 0x0d; //发空调学习数据命令 + + + // + public static int ADR_VAR_LEN = 14; + + /************** + * 学习返回状态 + ****************************************/ + public static int NO_LEARN_DATA = 0; + //public static int LEN_FLAS = 0xff + public static int LEN_DOING = 0x01; + public static int LEN_OK = 0x02; + public static int LEN_ERROR = 0x03; + + + //================================================================================================ + /* 空调变量数组 ADR_VAR[]说明 */ + public static int ADR_VAR_START = 0x00; //空调变量的存放位置(需要根据程序修改) + public static int ADR_MODE = 0; //模式------------》变化范围"0~4"对应模式详见"模式常量"定义 + public static int ADR_TMP = 1; //温度------------》变化范围"0~16"对应温度"16~32" + public static int ADR_FANLEV = 2; //风量------------》变化范围"0~3"对应风量"自动,低,中,高" + public static int ADR_FANDIR = 3; //风向------------》按自动风向键清0,按手动风向键加1(在1~8之间变化)(用于自动风向和手动风向数据在同一位置) + public static int ADR_AFANDIR = 4; //自动风向----》按自动风向键改变(在0~8之间变化),按手动风向键不变(用于自动风向和手动风向数据在不同位置) + public static int ADR_MFANDIR = 5; //手动风向----》按手动风向键改变(在0~8之间变化),按自动风向键不变(用于自动风向和手动风向数据在不同位置,或只有一个风向键的时候) + public static int ADR_CKHOUR = 6; //时钟小时 + public static int ADR_TIMEON = 7; //定开时间(小时)----》变化范围"0~12"对应定开时间"0~12"小时(只要用于定开定关数据在不同位置的时候) + public static int ADR_TIMEOFF = 8; //定关时间(小时)----》变化范围"0~12"对应定关时间"0~12"小时(只要用于定开定关数据在不同位置的时候) + public static int ADR_KEYVAL = 9; //键值------------》详见"按键常量"定义,空键:0FFH + public static int ADR_SYSFLAG = 10; //功能标志---》详见"功能标志"常量定义 + public static int ADR_TMSTATE7 = 11; //定时状态(7种),详见"定时状态常量(7态)" + public static int ADR_TMSTATE3 = 12; //定时状态(3种),详见"定时状态常量(3态)" + //ADR_TM_MIN EQU 13 //定时分钟 + public static int ADR_CKMIN = 13; //时钟分钟 + //#define ADR_TMON_10MINS 14 //定时开分钟 + //#define ADR_TMOFF_10MINS 15 //定时关分钟 + + + /*ADR_SYSFLAG(功能标志)常量定义*/ + public static int SYSFLAG_POWER = 0x01; //00000001B //开关机标志----》开关=1,关机=0 + public static int ADSF_POWER = 0; //开关机标志位置 + public static int SYSFLAG_SLEEP = 0x02; //00000010B //睡眠标志--------》睡眠开=1,睡眠关=0 + public static int ADSF_SLEEP = 1; //睡眠标志位置 + public static int SYSFLAG_HEAT = 0x04; //00000100B //电辅热标志----》电辅热开=1,电辅热关=0 + public static int ADSF_HEAT = 2; //电辅热标志位置 + public static int SYSFLAG_TIME = 0x08; //00001000B //定时标志-------》 有定时= 1,没有定时 = 0 + public static int ADSF_TIME = 3; //定时标志位置 + public static int SYSFLAG_STRONG = 0x10; //00010000B //强力标志-------》 强力开= 1,强力关 = 0 + public static int ADSF_STRONG = 4; //强力标志位置 + public static int SYSFLAG_LIGHT = 0x20; //00100000B //灯光标志-------》 灯光开= 1,灯光关 = 0 + public static int ADSF_LIGHT = 5; //灯光标志位置 + public static int SYSFLAG_AIRCLEAR = 0x40; //01000000B //空清/净化/健康标志-------》 空清/净化/健康开= 1,空清/净化/健康关 = 0 + public static int ADSF_AIRCLEAR = 6; //空清/净化/健康标志位置 + public static int SYSFLAG_ECONOMIC = 0x80; //10000000B //经济标志-------》 经济开= 1,经济关 = 0 + public static int ADSF_ECONOMIC = 7; //经济标志位置 + + //返回值 + public static int SEND_CODE = 0x01; //按键有发送发码命令 + public static int SEND_END = 0x11; //发码结束 + + public static int LENTIMEOUT = 0x80; + public static int UPDATE_ARC_DISP = 0xF0; //Tony 添加:用户ARC屏幕更新 + + + public static String urc_excode_file = "urc_excode.Bin"; + public static String arc_excode_file = "arc_excode.bin"; + + + //操作 + public static enum OPERATION { + HB_IOCTL_INIT, //初始化,应用程序打开时,调用此函数 + HB_IOCTL_TIMER100, //定时器100ms到时,调用此函数 + HB_IOCTL_TIMER500, //RTC定时器500ms + HB_IOCTL_CREATE_IRDevice, //新建红外设备(收藏红外设备时调用) + //建立对应红外设备 数据 + //TV(设备类型),品牌,码组索引,学习数据 + //ARC:空调相关变量 + HB_IOCTL_Delete_Device, //删除红外设备(删除收藏记录时调用) + HB_IOCTL_KeyDn, //设备按键按下,调用此函数发码 + HB_IOCTL_KeyUp, + //序根据当前设备值,红外设备号,调用对应文件中对应数据,查表或运算后发码 + HB_IOCTL_Change_Device, // 更改设备类型, + //应用层改变设备类型,红外设备,品牌,或者码组时,需要调用此函数更新红外系统内部变量 + HB_IOCTL_IRRX_BEGIN, //程序发码给HB1682 ,启动学习; 具体查询学习是否完成,在定时器中处理; + HB_IOCTL_ARC_IRRX, //启动空调码学习 + HB_IOCTL_IRRX_END, // 在学习过程中,用户可以取消学习,则应用层需要调用此函数终止学习; + HB_IOCTL_Send_LenCode, //发送URC学习的数据 + HB_IOCTL_Send_ArcLenCode, //发送ARC学习码 + HB_IOCTL_RX_ICVER, //读取IC 程序版本 + HB_IOCTL_RX_PRO, //串口接收数据处理 + HB_IOCTL_SEND_Search, //搜索发码 + } //ev_ioctl_e + + //--------------------------------------------------------- + public static int m_group; //码组 + public static int m_device; //设备类型 + public static int m_keyval; //键值 + public static int m_arc_group; //空调码组 + public static int m_arc_group_1; //空调码组1 + public static int m_arc_group_2; //空调码组2 + public static int m_arc_group_3; //空调码组3 + + public static DEVICE_TYPE m_device_type; //当前设备类型(这个是类型,m_device是序号) + public static boolean b_learn_mode; //是否在学习模式 + public static boolean b_recognition_mode; //是否在自动识别模式 + + public static int m_favorite_id; //收藏夹ID + + //用于传递数据 + public static DEVICE_TYPE tmp_device_type; //临时设备类型 + public static String tmp_brand; //临时品牌 + public static String tmp_group_list; //临时码组列表 + public static boolean tmp_force_exit; //强制退出页面 + + + public static String get_title(Context context, DEVICE_TYPE device_type) { + if (device_type == DEVICE_TYPE.C_ATV_DEVICE) { + return Language.get(context, "atv"); + } else if (device_type == DEVICE_TYPE.C_STB_DEVICE) { + return Language.get(context, "stb"); + } else if (device_type == DEVICE_TYPE.C_ARC_DEVICE) { + return Language.get(context, "air"); + } else if (device_type == DEVICE_TYPE.C_AUX_DEVICE) { + return Language.get(context, "aux"); + } else if (device_type == DEVICE_TYPE.C_CTV_DEVICE) { + return Language.get(context, "ctv"); + } else if (device_type == DEVICE_TYPE.C_DVB_DEVICE) { + return Language.get(context, "dvb"); + } else if (device_type == DEVICE_TYPE.C_DVD_DEVICE) { + return Language.get(context, "dvd"); + } + return ""; + } + + public static String get_title(Context context, int device_type) { + if (device_type == DEVICE_TYPE.C_ATV_DEVICE.ordinal()) { + return Language.get(context, "atv"); + } else if (device_type == DEVICE_TYPE.C_STB_DEVICE.ordinal()) { + return Language.get(context, "stb"); + } else if (device_type == DEVICE_TYPE.C_ARC_DEVICE.ordinal()) { + return Language.get(context, "air"); + } else if (device_type == DEVICE_TYPE.C_AUX_DEVICE.ordinal()) { + return Language.get(context, "aux"); + } else if (device_type == DEVICE_TYPE.C_CTV_DEVICE.ordinal()) { + return Language.get(context, "ctv"); + } else if (device_type == DEVICE_TYPE.C_DVB_DEVICE.ordinal()) { + return Language.get(context, "dvb"); + } else if (device_type == DEVICE_TYPE.C_DVD_DEVICE.ordinal()) { + return Language.get(context, "dvd"); + } + return ""; + } + + public static tagSerialPortRx get_RemoteRxData() { + short[] rx = new short[3]; + rx = Device.HBioctlGetRemoteRxData(); + tagSerialPortRx RemoteRxData = new tagSerialPortRx(); + // RemoteRxData.RxBuf = BytesUtil.hexStringToBytes("168cd02333000011012c026500250021002500c504250000002500ffffffffffffffffffffffff0122211122222222222222121222212122123122121222222212222222222222211114000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d4c08"); + // RemoteRxData.RxBuf = BytesUtil.hexStringToBytes("2333000011012c026500250021002500c504250000002500ffffffffffffffffffffffff0122211122222222222222121222212122123122121222222212222222222222211114000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d"); + RemoteRxData.RemoteCMD = (byte) rx[0]; + RemoteRxData.wRxLen = rx[1]; + RemoteRxData.wRxPos = rx[2]; + return RemoteRxData; + } + + public static DEVICE_TYPE get_default_device_type() { + if (Public.group_library == Public.GROUP_LIBRARY.america) { + return Public.DEFAULT_DEVICE_TYPE_AMERICA; + } else { + return Public.DEFAULT_DEVICE_TYPE_ASIA; + } + } + + public static void set_default_device() { + Device.m_device = get_default_device_type().ordinal(); + Device.m_group = 0; + Device.m_arc_group = 0; + Device.m_arc_group_1 = 0; + Device.m_arc_group_2 = 0; + Device.m_arc_group_3 = 0; + Device.m_favorite_id = 0; + } + + // TODO: 2017/7/3 + public native static int HBioctlGetArcGroupNum(int[] GroupNumber); + + public native static int HBioctl(int cmd, Object arg); + + public native static byte[] HBioctlGetAdrVar(); + + public native static int HBioctlSetAdrVar(Object arg); + + public native static byte[] HBioctlGetArDispData(); + + public native static short[] HBioctlGetRemoteRxData(); + + public native static int HBFILEOpen(AssetManager ass, String filename, int type); + + public native static int HBFILEClose(); +} + + diff --git a/app/src/main/java/com/ds/remote/Language.java b/app/src/main/java/com/ds/remote/Language.java new file mode 100644 index 0000000..ec959ae --- /dev/null +++ b/app/src/main/java/com/ds/remote/Language.java @@ -0,0 +1,12 @@ +package com.ds.remote; + +import android.content.Context; +import android.content.res.Resources; + +public class Language { + public static String get(Context context, String lang) { + Public.LANGUAGE l = Settings.get_language(context); + Resources res = context.getResources(); + return ""; + } +} diff --git a/app/src/main/java/com/ds/remote/Public.java b/app/src/main/java/com/ds/remote/Public.java new file mode 100644 index 0000000..769b012 --- /dev/null +++ b/app/src/main/java/com/ds/remote/Public.java @@ -0,0 +1,178 @@ +package com.ds.remote; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.util.Log; + +import java.util.Calendar; + +public class Public { + //串口服务 + public static SerialPortService serial_port_service; + //串口名称 + //public static final String ComDefaultName = "/dev/s3c2410_serial3"; //Android 开发板靠边第一个串口 + public static final String ComDefaultName = "/dev/ttyS1"; //Android 开发板靠边第一个串口 + private static String ComName; + //串口波特率 + public static final int ComBaudrate = 19200; + + //数据库 + public static final String db_name = "remote.sqlite"; + public static final String table_name_favorite = "favorite"; + public static final String table_name_learn_code = "learn_code"; + + //Message + public static final int MESSAGE_LEARN_BUTTON = 1; //更新学习的按钮 + public static final int MESSAGE_UPDATE_ARC_DISPLAY = 2; //更新arc显示 + public static final int MESSAGE_START_LEARN = 3; //开始学习 + public static final int MESSAGE_LEARN_TIMEOUT = 4; //学习超时 + public static final int MESSAGE_CHANGE_GROUP = 5; //变换码组 + public static final int MESSAGE_LEARN_SUCCEEDED = 6; //学习成功 + public static final int MESSAGE_LEARN_FAILED = 7; //学习失败 + public static final int MESSAGE_ON_RECEIVED = 8; //串口接收数据 + public static final int MESSAGE_SHOW_SIGNAL_FALG = 9; //显示发码标志 + public static final int MESSAGE_HIDE_SIGNAL_FALG = 10; //隐藏发码标志 + public static final int MESSAGE_AUTO_RECOGNITION = 11; //空调学习 + public static final int MESSAGE_RECOGNITION_TIMEOUT = 12; //识别超时 + public static final int MESSAGE_RECOGNITION_SUCCEEDED = 13; //识别超时 + public static final int MESSAGE_RECOGNITION_FAILED = 14; //学习失败 + + //常量 + public static final int REQUEST_LEARN = 0x01; + public static final int REQUEST_RECOGNITION = 0x02; + public static final int REQUEST_GROUP = 0x03; + + //码库 + public static enum GROUP_LIBRARY { + asia, //亚洲 + america //美洲/欧洲 + } + + //语言 + public static enum LANGUAGE { + simple_chinese, //中文 + english //英文 + } + + public static GROUP_LIBRARY group_library; + public static LANGUAGE language; + + + //设置 + public static final String PREFS_NAME = "HbgRemote.Prefs"; + public static final String SETTING_GROUP_LIBRARY = "SETTING_GROUP_LIBRARY"; + public static final String SETTING_LANGUAGE = "SETTING_LANGUAGE"; + + //默认:亚洲码库,中文界面 + public static final GROUP_LIBRARY DEFAULT_GROUP_LIBRARY = GROUP_LIBRARY.asia; + public static final LANGUAGE DEFAULT_LANGUAGE = LANGUAGE.simple_chinese; + + public static final String SETTING_FAVORITE_ID = "SETTING_FAVORITE_ID"; + public static final String SETTING_LAST_DEVICE = "SETTING_DEVICE"; + public static final String SETTING_LAST_GROUP = "SETTING_LAST_DEIVCE"; + public static final String SETTING_IS_FIRST = "SETTING_IS_FIRST"; + + //默认设备 + public static final Device.DEVICE_TYPE DEFAULT_DEVICE_TYPE_ASIA = Device.DEVICE_TYPE.C_ATV_DEVICE; + public static final Device.DEVICE_TYPE DEFAULT_DEVICE_TYPE_AMERICA = Device.DEVICE_TYPE.C_CTV_DEVICE; + + public static boolean b_require_reload; //是否需要重新加载页面 + + + ////////////////////////// + public static void ShowAlert(String title, String msg, Context context) { + new AlertDialog.Builder(context) + .setIcon(android.R.drawable.ic_dialog_alert) + .setTitle(title) + .setMessage(msg) + .setCancelable(false) + .setNegativeButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + public static void ShowInfo(String title, String msg, Context context) { + new AlertDialog.Builder(context) + .setIcon(android.R.drawable.ic_dialog_info) + .setTitle(title) + .setMessage(msg) + .setCancelable(false) + .setNegativeButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + public static String get_date() { + int mYear; + int mMonth; + int mDay; + + final Calendar c = Calendar.getInstance(); + + mYear = c.get(Calendar.YEAR); + mMonth = c.get(Calendar.MONTH) + 1; + mDay = c.get(Calendar.DAY_OF_MONTH); + + String result = String.format("%04d-%02d-%02d", mYear, mMonth, mDay); + return result; + } + + public static String get_date_time() { + int mYear; + int mMonth; + int mDay; + int mHour; + int mMinute; + int mSecond; + + final Calendar c = Calendar.getInstance(); + + mYear = c.get(Calendar.YEAR); + mMonth = c.get(Calendar.MONTH) + 1; + mDay = c.get(Calendar.DAY_OF_MONTH); + mHour = c.get(Calendar.HOUR_OF_DAY); + mMinute = c.get(Calendar.MINUTE); + mSecond = c.get(Calendar.SECOND); + + String result = String.format("%04d-%02d-%02d %02d:%02d:%02d", + mYear, mMonth, mDay, mHour, mMinute, mSecond); + return result; + } + + public static int get_current_hour() { + final Calendar c = Calendar.getInstance(); + return c.get(Calendar.HOUR_OF_DAY); + } + + public static int get_current_minute() { + final Calendar c = Calendar.getInstance(); + return c.get(Calendar.MINUTE); + } + + public static void debug(byte[] buf, int len) { + StringBuilder str = new StringBuilder(); + for (int i=0; i 0) { + // Send the obtained bytes to the UI Activity + mHandler.obtainMessage(Public.MESSAGE_ON_RECEIVED, size, -1, buffer).sendToTarget(); + } + } catch (IOException e) { + e.printStackTrace(); + return; + } + } + } + } + + +} diff --git a/app/src/main/java/com/ds/remote/Settings.java b/app/src/main/java/com/ds/remote/Settings.java new file mode 100644 index 0000000..f17ccf5 --- /dev/null +++ b/app/src/main/java/com/ds/remote/Settings.java @@ -0,0 +1,97 @@ +package com.ds.remote; + +import android.content.Context; +import android.content.SharedPreferences; + +public class Settings { + public static Public.GROUP_LIBRARY get_group_library(Context context) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + int lang = settings.getInt(Public.SETTING_GROUP_LIBRARY, Public.DEFAULT_GROUP_LIBRARY.ordinal()); + if (lang == 0) { + return Public.GROUP_LIBRARY.asia; + } else { + return Public.GROUP_LIBRARY.america; + } + } + + public static Public.LANGUAGE get_language(Context context) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + int lang = settings.getInt(Public.SETTING_LANGUAGE, Public.DEFAULT_GROUP_LIBRARY.ordinal()); + if (lang == 0) { + return Public.LANGUAGE.simple_chinese; + } else { + return Public.LANGUAGE.english; + } + } + + public static Remote get_last_device(Context context) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + Remote remote = new Remote(); + int first = settings.getInt(Public.SETTING_IS_FIRST, 0); + if (first == 0) { + remote.favorite_id = 0; + remote.device = Device.get_default_device_type().ordinal(); + remote.group = 0; + set_last_device(context, remote); + } else { + remote.favorite_id = settings.getInt(Public.SETTING_FAVORITE_ID, 0); + remote.device = settings.getInt(Public.SETTING_LAST_DEVICE, 0); + remote.group = settings.getInt(Public.SETTING_LAST_GROUP, 0); + } + return remote; + } + + public static void set_group_library(Context context, Public.GROUP_LIBRARY gl) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + editor.putInt(Public.SETTING_GROUP_LIBRARY, gl.ordinal()); + editor.commit(); + + } + + public static void set_language(Context context, Public.LANGUAGE lang) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + editor.putInt(Public.SETTING_LANGUAGE, lang.ordinal()); + editor.commit(); + } + + public static void set_last_device(Context context, Remote ld) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + editor.putInt(Public.SETTING_IS_FIRST, 0x1234); + editor.putInt(Public.SETTING_FAVORITE_ID, ld.favorite_id); + editor.putInt(Public.SETTING_LAST_DEVICE, ld.device); + editor.putInt(Public.SETTING_LAST_GROUP, ld.group); + editor.commit(); + } + + public static void delete_all_settings(Context context) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + settings.edit().clear().commit(); + } + + public static void set_adr_var(Context context, int favorite_id, String adr_var) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + String key = String.format("ADR_VAR_:%d", favorite_id); + editor.putString(key, adr_var); + editor.commit(); + } + + public static String get_adr_var(Context context, int favorite_id) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + String key = String.format("ADR_VAR_:%d", favorite_id); + String var = settings.getString(key, ""); + return var; + } + + public static void delete_adr_var(Context context, int favorite_id) { + SharedPreferences settings = context.getSharedPreferences(Public.PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + String key = String.format("ADR_VAR_:%d", favorite_id); + editor.putString(key, ""); //清空,就等于删掉了 + editor.commit(); + } + +} diff --git a/app/src/main/java/com/ds/remote/tagSerialPortRx.java b/app/src/main/java/com/ds/remote/tagSerialPortRx.java new file mode 100644 index 0000000..ac080a4 --- /dev/null +++ b/app/src/main/java/com/ds/remote/tagSerialPortRx.java @@ -0,0 +1,17 @@ +package com.ds.remote; + +public class tagSerialPortRx { + byte RemoteCMD; + public byte RxDone; + public byte[] RxBuf; + public short wRxPos; + public short wRxLen; + + public tagSerialPortRx() { + RxBuf = new byte[256]; + RemoteCMD = 0; + RxDone = 0; + wRxPos = 0; + wRxLen = 0; + } +} diff --git a/app/src/main/java/com/ds/remote/type_CUR_group.java b/app/src/main/java/com/ds/remote/type_CUR_group.java new file mode 100644 index 0000000..d78c3a3 --- /dev/null +++ b/app/src/main/java/com/ds/remote/type_CUR_group.java @@ -0,0 +1,11 @@ +package com.ds.remote; + +public class type_CUR_group { + public short group_aux; + public short group_dvb; + public short group_stb; + public short group_atv; + public short group_ctv; + public short group_dvd; + public short group_arc; +} diff --git a/app/src/main/java/com/ds/remote/type_updatatime.java b/app/src/main/java/com/ds/remote/type_updatatime.java new file mode 100644 index 0000000..1c51a27 --- /dev/null +++ b/app/src/main/java/com/ds/remote/type_updatatime.java @@ -0,0 +1,7 @@ +package com.ds.remote; + +public class type_updatatime { + public short arc_group; + public byte clk_hour; + public byte clk_min; // +} diff --git a/app/src/main/java/com/lechange/demo/adapter/DeviceInnerRecordListAdapter.java b/app/src/main/java/com/lechange/demo/adapter/DeviceInnerRecordListAdapter.java new file mode 100644 index 0000000..50af6a7 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/adapter/DeviceInnerRecordListAdapter.java @@ -0,0 +1,103 @@ +package com.lechange.demo.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.common.openapi.entity.RecordsData; +import com.lechange.demo.tools.DateHelper; +import com.lechange.demo.tools.ImageHelper; +import com.yonsz.z1.R; + +import java.util.List; + +public class DeviceInnerRecordListAdapter extends RecyclerView.Adapter { + private Context mContext; + private List recordsData; + + public DeviceInnerRecordListAdapter(Context mContext, List recordsData) { + this.mContext = mContext; + this.recordsData = recordsData; + } + + @NonNull + @Override + public DeviceInnerRecordListHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.item_record, parent, false); + return new DeviceInnerRecordListAdapter.DeviceInnerRecordListHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final DeviceInnerRecordListHolder holder, final int position) { + long time = DateHelper.string2Date(recordsData.get(position).endTime).getTime() - DateHelper.string2Date(recordsData.get(position).beginTime).getTime(); + holder.tvTimeM.setText(recordsData.get(position).beginTime.substring(11)); + holder.tvTimeS.setText(time / 1000 + "s"); + if (recordsData.get(position).recordType == 0) { + try { + ImageHelper.loadCacheImage(recordsData.get(position).thumbUrl, recordsData.get(position).deviceId, recordsData.get(position).deviceId, position, new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + try { + if (recordsData.get(msg.arg1).thumbUrl.hashCode() == msg.what && msg.obj != null) { + holder.ivBg.setImageDrawable((Drawable) msg.obj); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + holder.ivCheck.setVisibility(recordsData.get(position).check ? View.VISIBLE : View.GONE); + } + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (editClickListener != null) { + editClickListener.edit(position); + } + } + }); + } + + @Override + public int getItemCount() { + return recordsData == null ? 0 : recordsData.size(); + } + + class DeviceInnerRecordListHolder extends RecyclerView.ViewHolder { + + ImageView ivBg; + TextView tvTimeS; + TextView tvTimeM; + ImageView ivCheck; + + public DeviceInnerRecordListHolder(View itemView) { + super(itemView); + ivBg = itemView.findViewById(R.id.iv_bg); + ivCheck = itemView.findViewById(R.id.iv_check); + tvTimeS = itemView.findViewById(R.id.tv_time_s); + tvTimeM = itemView.findViewById(R.id.tv_time_m); + } + } + + private EditClickListener editClickListener; + + public interface EditClickListener { + void edit(int innerPosition); + } + + public void setEditClickListener(EditClickListener editClickListener) { + this.editClickListener = editClickListener; + } +} diff --git a/app/src/main/java/com/lechange/demo/adapter/DeviceRecordListAdapter.java b/app/src/main/java/com/lechange/demo/adapter/DeviceRecordListAdapter.java new file mode 100644 index 0000000..65f45c3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/adapter/DeviceRecordListAdapter.java @@ -0,0 +1,77 @@ +package com.lechange.demo.adapter; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.common.openapi.entity.RecordListData; +import com.yonsz.z1.R; + +import java.util.List; + +public class DeviceRecordListAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List recordListDataList; + + public DeviceRecordListAdapter(Context mContext, List recordListDataList) { + this.mContext = mContext; + this.recordListDataList = recordListDataList; + } + + @NonNull + @Override + public DeviceListHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.item_record_list, parent, false); + return new DeviceRecordListAdapter.DeviceListHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull DeviceListHolder holder, final int position) { + holder.tvTime.setText(recordListDataList.get(position).period); + GridLayoutManager gridLayoutManager = new GridLayoutManager(mContext, 4); + holder.rcvRecord.setLayoutManager(gridLayoutManager); + DeviceInnerRecordListAdapter deviceInnerRecordListAdapter = new DeviceInnerRecordListAdapter(mContext, recordListDataList.get(position).recordsData); + deviceInnerRecordListAdapter.setEditClickListener(new DeviceInnerRecordListAdapter.EditClickListener() { + @Override + public void edit(int innerPosition) { + if (editClickListener != null) { + editClickListener.edit(position,innerPosition); + } + } + }); + holder.rcvRecord.setAdapter(deviceInnerRecordListAdapter); + } + + @Override + public int getItemCount() { + return recordListDataList == null ? 0 : recordListDataList.size(); + } + + class DeviceListHolder extends RecyclerView.ViewHolder { + + RecyclerView rcvRecord; + TextView tvTime; + + public DeviceListHolder(View itemView) { + super(itemView); + rcvRecord = itemView.findViewById(R.id.rcv_record); + tvTime = itemView.findViewById(R.id.tv_time); + } + } + + private EditClickListener editClickListener; + + public interface EditClickListener { + void edit(int outPosition, int innerPosition); + } + + public void setEditClickListener(EditClickListener editClickListener) { + this.editClickListener = editClickListener; + } +} diff --git a/app/src/main/java/com/lechange/demo/adapter/MediaPlayRecordAdapter.java b/app/src/main/java/com/lechange/demo/adapter/MediaPlayRecordAdapter.java new file mode 100644 index 0000000..b8ce372 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/adapter/MediaPlayRecordAdapter.java @@ -0,0 +1,126 @@ +package com.lechange.demo.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.common.openapi.entity.RecordsData; +import com.lechange.demo.tools.ImageHelper; +import com.yonsz.z1.R; + +import java.util.List; + +public class MediaPlayRecordAdapter extends RecyclerView.Adapter { + private List recordsBeanList; + private Context context; + + public MediaPlayRecordAdapter(List recordsBeanList, Context context) { + this.recordsBeanList = recordsBeanList; + this.context = context; + } + + @NonNull + @Override + public MediaPlayHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_media_play_record, parent, false); + return new MediaPlayRecordAdapter.MediaPlayHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final MediaPlayHolder holder, final int position) { + if (position == recordsBeanList.size()) { + holder.tvLoadingMore.setVisibility(View.VISIBLE); + holder.tvLoadingMore.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (loadMoreClickListener != null) { + loadMoreClickListener.loadMore(); + } + } + }); + } else { + String time = recordsBeanList.get(position).beginTime.substring(11); + holder.tvTime.setText(time); + if (recordsBeanList.get(position).recordType == 0) { + //云录像 + holder.tvLoadingMore.setVisibility(View.GONE); + try { + ImageHelper.loadCacheImage(recordsBeanList.get(position).thumbUrl, recordsBeanList.get(position).deviceId, recordsBeanList.get(position).deviceId, position, new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + try { + if (recordsBeanList.get(msg.arg1).thumbUrl.hashCode() == msg.what && msg.obj != null) { + holder.ivImg.setImageDrawable((Drawable) msg.obj); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + //设备录像 + holder.tvLoadingMore.setVisibility(View.GONE); + holder.ivImg.setImageDrawable(context.getDrawable(R.mipmap.lc_demo_default_bg)); + } + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + onItemClickListener.click(recordsBeanList.get(position).recordType, position); + } + } + }); + } + } + + @Override + public int getItemCount() { + return recordsBeanList == null ? 0 : (recordsBeanList.size() == 6 ? 7 : (recordsBeanList.size() + 1)); + } + + class MediaPlayHolder extends RecyclerView.ViewHolder { + ImageView ivImg; + TextView tvTime; + TextView tvLoadingMore; + + public MediaPlayHolder(View itemView) { + super(itemView); + ivImg = itemView.findViewById(R.id.iv_img); + tvTime = itemView.findViewById(R.id.tv_time); + tvLoadingMore = itemView.findViewById(R.id.tv_loadingmore); + } + } + + private LoadMoreClickListener loadMoreClickListener; + + public interface LoadMoreClickListener { + void loadMore(); + } + + public void setLoadMoreClickListener(LoadMoreClickListener loadMoreClickListener) { + this.loadMoreClickListener = loadMoreClickListener; + } + + + private OnItemClickListener onItemClickListener; + + public interface OnItemClickListener { + void click(int recordType, int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } +} diff --git a/app/src/main/java/com/lechange/demo/adapter/PixelListAdapter.java b/app/src/main/java/com/lechange/demo/adapter/PixelListAdapter.java new file mode 100644 index 0000000..4de6c26 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/adapter/PixelListAdapter.java @@ -0,0 +1,75 @@ +package com.lechange.demo.adapter; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.common.openapi.entity.DeviceDetailListData; +import com.lechange.demo.view.LcPopupWindow; +import com.yonsz.z1.R; + +import java.util.List; + +public class PixelListAdapter extends RecyclerView.Adapter implements View.OnClickListener { + + + private Context mContext; + private List mPixelList; + private LcPopupWindow.onRecyclerViewItemClickListener mItemClickListener; + private RecyclerView mRecycleView; + + + public PixelListAdapter(Context context, List pixelList) { + this.mContext = context; + this.mPixelList = pixelList; + } + + + public void setOnItemClickListener(LcPopupWindow.onRecyclerViewItemClickListener onRecyclerViewItemClickListener) { + this.mItemClickListener = onRecyclerViewItemClickListener; + } + + + @NonNull + @Override + public PixelHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mRecycleView = (RecyclerView) parent; + View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_pixel_list, parent, false); + inflate.setOnClickListener(this); + return new PixelHolder(inflate); + } + + @Override + public void onBindViewHolder(@NonNull PixelHolder holder, int position) { + holder.tvPixel.setText(mPixelList.get(position).name); + } + + @Override + public int getItemCount() { + return mPixelList!=null?mPixelList.size():0; + } + + @Override + public void onClick(View view) { + int childAdapterPosition = mRecycleView.getChildAdapterPosition(view); + if(mItemClickListener!=null){ + mItemClickListener.onItemClick(mRecycleView,view,childAdapterPosition, + mPixelList.get(childAdapterPosition).name,mPixelList.get(childAdapterPosition).imageSize,mPixelList.get(childAdapterPosition).streamType); + } + } + + class PixelHolder extends RecyclerView.ViewHolder{ + + public TextView tvPixel; + + public PixelHolder(View itemView) { + super(itemView); + tvPixel = itemView.findViewById(R.id.tv_pixel); + } + } + +} diff --git a/app/src/main/java/com/lechange/demo/business/Business.java b/app/src/main/java/com/lechange/demo/business/Business.java new file mode 100644 index 0000000..8ce826e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/Business.java @@ -0,0 +1,1905 @@ +package com.lechange.demo.business; + +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; + +import com.lechange.demo.business.entity.AlarmMessageInfo; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.entity.ChannelPTZInfo; +import com.lechange.demo.business.entity.ChannelPTZInfo.Direction; +import com.lechange.demo.business.entity.ChannelPTZInfo.Duration; +import com.lechange.demo.business.entity.ChannelPTZInfo.Operation; +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.business.entity.RecordInfo.RecordEventType; +import com.lechange.demo.business.util.OpenApiHelper; +import com.lechange.demo.business.util.TaskPoolHelper; +import com.lechange.demo.business.util.TaskPoolHelper.RunnableTask; +import com.lechange.demo.business.util.TimeHelper; +import com.lechange.opensdk.api.LCOpenSDK_Api; +import com.lechange.opensdk.api.bean.BeAuthDeviceList; +import com.lechange.opensdk.api.bean.BindDevice; +import com.lechange.opensdk.api.bean.BindDeviceInfo; +import com.lechange.opensdk.api.bean.BreathingLightStatus; +import com.lechange.opensdk.api.bean.CheckDeviceBindOrNot; +import com.lechange.opensdk.api.bean.ControlDeviceWifi; +import com.lechange.opensdk.api.bean.ControlPTZ; +import com.lechange.opensdk.api.bean.CurrentDeviceWifi; +import com.lechange.opensdk.api.bean.DeleteAlarmMessage; +import com.lechange.opensdk.api.bean.DeviceAlarmPlan; +import com.lechange.opensdk.api.bean.DeviceAlarmPlan.ResponseData.RulesElement; +import com.lechange.opensdk.api.bean.DeviceList; +import com.lechange.opensdk.api.bean.DeviceList.Response; +import com.lechange.opensdk.api.bean.DeviceList.ResponseData.DevicesElement; +import com.lechange.opensdk.api.bean.DeviceOnline; +import com.lechange.opensdk.api.bean.FrameReverseStatus; +import com.lechange.opensdk.api.bean.GetAlarmMessage; +import com.lechange.opensdk.api.bean.GetAlarmMessage.ResponseData.AlarmsElement; +import com.lechange.opensdk.api.bean.ModifyBreathingLight; +import com.lechange.opensdk.api.bean.ModifyDeviceAlarmPlan; +import com.lechange.opensdk.api.bean.ModifyDeviceAlarmStatus; +import com.lechange.opensdk.api.bean.ModifyDevicePwd; +import com.lechange.opensdk.api.bean.ModifyFrameReverseStatus; +import com.lechange.opensdk.api.bean.QueryCloudRecordNum; +import com.lechange.opensdk.api.bean.QueryCloudRecords; +import com.lechange.opensdk.api.bean.QueryCloudRecords.ResponseData.RecordsElement; +import com.lechange.opensdk.api.bean.QueryLocalRecordNum; +import com.lechange.opensdk.api.bean.QueryLocalRecords; +import com.lechange.opensdk.api.bean.RecoverSDCard; +import com.lechange.opensdk.api.bean.SetStorageStrategy; +import com.lechange.opensdk.api.bean.ShareDeviceList; +import com.lechange.opensdk.api.bean.UnBindDevice; +import com.lechange.opensdk.api.bean.UnBindDeviceInfo; +import com.lechange.opensdk.api.bean.UpgradeDevice; +import com.lechange.opensdk.api.bean.WifiAround; +import com.lechange.opensdk.api.client.BaseRequest; +import com.lechange.opensdk.api.client.BaseResponse; +import com.lechange.opensdk.device.LCOpenSDK_DeviceInit; +import com.lechange.opensdk.media.DeviceInitInfo; +import com.lechange.opensdk.media.LCOpenSDK_LoginManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Business { + + public static final boolean isOversea = false; + // hls,rtsp等相关底层库的错误码解析 + public static final int RESULT_SOURCE_OPENAPI = 99; // 在播放过程中rest请求回调类型 + public final static String tag = "Business"; + // 码流超时时间 + public final static int DMS_TIMEOUT = 60 * 1000; + private List mChannelInfoList = new ArrayList(); // 由于demo,不考虑多线程操作问题 + private List mSharedChannelInfoList = new ArrayList(); // 由于demo,不考虑多线程操作问题 + private List mBeAuthChannelInfoList = new ArrayList(); // 由于demo,不考虑多线程操作问题 + private List mRecordInfoList = new ArrayList(); // 由于demo,不考虑多线程操作问题 + private List mAllRecordInfoList = new ArrayList(); // 由于demo,不考虑多线程操作问题 + private List mAlarmMessageInfoList = new ArrayList(); + private String mHost; + private String mAppId; + private String mAppSecret; + private String mToken = ""; // userToken或accessToken + + public static Business getInstance() { + return Instance.instance; + } + + public boolean isOversea() { + return isOversea; + } + + /** + * 设备能力集转换 + * + * @param strAbility + * @return + */ + public static int StringToAbility(String strAbility) { + int ability = 0; + if (strAbility == null) { + return ability; + } + + if (strAbility.contains("WLAN")) { + ability |= ChannelInfo.Ability.WLAN; + } + if (strAbility.contains("AlarmPIR")) { + ability |= ChannelInfo.Ability.AlarmPIR; + } + if (strAbility.contains("AudioTalk")) { + ability |= ChannelInfo.Ability.AudioTalk; + } + if (strAbility.contains("VVP2P")) { + ability |= ChannelInfo.Ability.VVP2P; + } + if (strAbility.contains("PTZ") || strAbility.contains("PT")) { + ability |= ChannelInfo.Ability.PTZ; + } + if (strAbility.contains("HSEncrypt")) { + ability |= ChannelInfo.Ability.HSEncrypt; + } + if (strAbility.contains("CloudStorage")) { + ability |= ChannelInfo.Ability.CloudStorage; + } + if (strAbility.contains("RTSV1")) { + ability |= ChannelInfo.Ability.SUPPORT_DHHTTP_LIVE; + } + if (strAbility.contains("PBSV1")) { + ability |= ChannelInfo.Ability.SUPPORT_DHHTTP_PLAYBACK; + } + if (strAbility.contains("TCM")) { + ability |= ChannelInfo.Ability.TCM; + } + return ability; + } + + /** + * 初始化client对象,配置client参数 + * + * @return + */ + public boolean init(String appid, String appsecret, String host) { + // 设置乐橙服务地址 + LCOpenSDK_Api.setHost(host); + mAppId = appid; + mAppSecret = appsecret; + mHost = host; + + // bInit = true; + Log.d(tag, "Init OK"); + // } + return true; + } + + /** + * 发送网络请求,并对请求结果的错误码进行处理 + * + * @param req + * @return + */ + private RetObject request(BaseRequest req) { + return request(req, 15 * 1000); + } + + // private boolean bInit = false; + + /** + * 发送网络请求,并对请求结果的错误码进行处理 + * + * @param req + * @param timeOut 访问dms接口时,超时时间设置长一点 + * @return + * @throws Exception + */ + private RetObject request(BaseRequest req, int timeOut) { + // T t = LCOpenSDK_Api.request(req, timeOut); + RetObject retObject = new RetObject(); + BaseResponse t = null; + try { + t = LCOpenSDK_Api.request(req, timeOut); + // Log.d(tag, req.getBody()); + + if (t.getCode() == HttpCode.SC_OK) { + // 请求成功,则看服务器处理错误 + if (!t.getApiRetCode().equals("0")) + retObject.mErrorCode = 2; // 业务错误 + retObject.mMsg = "business errorcode: " + t.getApiRetCode() + + ", error msg: " + t.getApiRetMsg(); + } else { + retObject.mErrorCode = 1; // http错误 + retObject.mMsg = "HTTP errorcode: " + t.getCode() + + ", error msg: " + t.getDesc(); + } + } catch (Exception e) { + // if timeout,return; + e.printStackTrace(); + retObject.mErrorCode = -1000; + retObject.mMsg = "inner errorcode : -1000, error msg: " + + e.getMessage(); + Log.d(tag, req.getBody() + retObject.mMsg); + } + retObject.resp = t; + return retObject; + } + + public String getHost() { + return mHost; + } + + public String getToken() { + return mToken; + } + + public void setToken(String mToken) { + this.mToken = mToken; + } + + /** + * 管理员登陆设备 + */ + public void adminlogin(final Handler handler) { + // 请求AccessToken 以开发者手机号 + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + // AccessToken req = new AccessToken(); + // req.data.phone = ""; // 唯一标记一类app + // //AccessToken.Response resp= null; + // RetObject retObject = null; + // retObject = request(req); + // //将标示符和返回体发送给handle处理 + // //retobject.resp = resp; + // if(retObject.resp != null && ((AccessToken.Response)retObject.resp).data != null) + // handler.obtainMessage(retObject.mErrorCode, ((AccessToken.Response)retObject.resp).data.accessToken).sendToTarget(); + + // 实现一个443连接供上层参考 + // 3.0.1不需要管理员账号,在此屏蔽 + OpenApiHelper.getAccessToken(mHost, "", mAppId, mAppSecret, handler); + } + }); + } + + /** + * 获取验证码 + * + * @param phoneNumber + * @param mAppid + * @param mAppSecret + * @param handler + * @param context + */ + public void getUserSms(final String phoneNumber, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // 实现一个443连接供上层参考 + OpenApiHelper.userBindSms(mHost, phoneNumber, mAppId, + mAppSecret, handler); + } + }); + + } + + /** + * 验证验证码 + * + * @param phoneNumber + * @param smsCode + * @param handler + * @param context + */ + public void checkUserSms(final String phoneNumber, final String smsCode, + final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // 实现一个443连接供上层参考 + OpenApiHelper.userBind(mHost, phoneNumber, mAppId, mAppSecret, + smsCode, handler); + } + }); + } + + /** + * 用户登陆设备 + */ + public void userlogin(final String phoneNumber, final Handler handler) { + // 请求usersToken 以开发者手机号 + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // 实现一个443连接供上层参考 + OpenApiHelper.getUserToken(mHost, phoneNumber, mAppId, + mAppSecret, handler); + } + }); + } + + /** + * 从检索出的设备列表中查找制定设备通道 + * + * @param id + * @return + */ + public ChannelInfo getChannel(String id) { + + for (ChannelInfo chl : mChannelInfoList) { + if (chl.getUuid().equals(id)) { + return chl; + } + } + for (ChannelInfo chl : mSharedChannelInfoList) { + if (chl.getUuid().equals(id)) { + return chl; + } + } + for (ChannelInfo chl : mBeAuthChannelInfoList) { + if (chl.getUuid().equals(id)) { + return chl; + } + } + return null; + } + + /** + * 获取用户下面所有设备通道列表 + * + * @param handler + */ + public void getChannelList(final Handler handler) { + mChannelInfoList.clear(); // 清数据 + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + DeviceList req = new DeviceList(); + // req.data.filter = new ArrayList(); // + // 过滤条件,可指定获取特定设备序列号的设备信息,我们这获取用户所有设备,无过滤条件。 + req.data.token = mToken; // token + req.data.queryRange = "1-10"; + DeviceList.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (Response) retObject.resp; + mChannelInfoList.clear(); // 防止list崩溃 + if (resp != null && resp.data != null + && resp.data.devices != null) + for (DevicesElement devElement : resp.data.devices) { + List list = devicesElementToResult( + devElement, null); + mChannelInfoList.addAll(list); + } + retObject.resp = mChannelInfoList; + // 解析设备列表信息 + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + } + }); + } + + /** + * 获取分享设备列表 + * + * @param handler + */ + public void getSharedDeviceList(final Handler handler) { + + mSharedChannelInfoList.clear(); // 清数据 + TaskPoolHelper.addTask(new RunnableTask("Shared") { + @Override + public void run() { + // TODO Auto-generated method stub + + ShareDeviceList req = new ShareDeviceList(); + req.data.queryRange = "1-10"; + req.data.token = mToken; + + ShareDeviceList.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (ShareDeviceList.Response) retObject.resp; + mSharedChannelInfoList.clear(); // 防止list崩溃 + if (resp != null && resp.data != null + && resp.data.devices != null) { + for (ShareDeviceList.ResponseData.DevicesElement devElement : resp.data.devices) { + List list = devicesElementToResult(null, + devElement); + mSharedChannelInfoList.addAll(list); + } + + } + + retObject.resp = mSharedChannelInfoList; + + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + + } + }); + } + + /** + * 获取授权设备列表 + * + * @param handler + */ + public void getBeAuthDeviceList(final Handler handler) { + + mBeAuthChannelInfoList.clear(); // 清数据 + TaskPoolHelper.addTask(new RunnableTask("BeAuth") { + @Override + public void run() { + // TODO Auto-generated method stub + + BeAuthDeviceList req = new BeAuthDeviceList(); + req.data.queryRange = "1-10"; + req.data.token = mToken; + + BeAuthDeviceList.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (BeAuthDeviceList.Response) retObject.resp; + mBeAuthChannelInfoList.clear(); // 防止list崩溃 + // list = null; + if (resp != null && resp.data != null + && resp.data.devices != null) { + + // list = new ArrayList(); + for (BeAuthDeviceList.ResponseData.DevicesElement devElement : resp.data.devices) { + ChannelInfo channelInfo = devicesElementToResult(devElement); + // List list.add(channelInfo); + mBeAuthChannelInfoList.add(channelInfo); + } + } + retObject.resp = mBeAuthChannelInfoList; + + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + + } + }); + } + + /** + * 获取用户设备信息 + * + * @param handler + */ + public void getDeviceInfo(final String chnlId, final Handler handler) { + + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + BindDeviceInfo req = new BindDeviceInfo(); + + req.data.token = mToken; // token + req.data.deviceId = chl.getDeviceCode(); + BindDeviceInfo.Response resp = null; + + RetObject retObject = null; + retObject = request(req); + resp = (BindDeviceInfo.Response) retObject.resp; + + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "getDeviceInfo faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null || resp.data.channels == null) { + Log.d(tag, "getDeviceInfo success data is null"); + } + Bundle bundle = new Bundle(); + bundle.putInt("alarmStatus", + resp.data.channels.get(0).alarmStatus); + // bundle.putInt("alarmStatus", 0); + bundle.putInt("cloudStatus", + resp.data.channels.get(0).csStatus); + bundle.putBoolean("canBeUpgrade", resp.data.canBeUpgrade); + // todo:其他信息解析请见OpenAPI 平台sdk文档 + handler.obtainMessage(0, bundle).sendToTarget(); // 发送成功消息到界面 + } + } + + }); + } + + private ChannelInfo devicesElementToResult( + BeAuthDeviceList.ResponseData.DevicesElement beAuthDevElement) { + ChannelInfo chnlInfo = new ChannelInfo(); + // 解析分享设备通道列表 + if (beAuthDevElement != null) { + + chnlInfo.setDeviceCode(beAuthDevElement.deviceId); + chnlInfo.setDeviceModel(beAuthDevElement.deviceModel); + chnlInfo.setEncryptMode(beAuthDevElement.encryptMode); + chnlInfo.setIndex(beAuthDevElement.channelId); + chnlInfo.setName(beAuthDevElement.channelName + "[beAuth]"); + chnlInfo.setBackgroudImgURL(beAuthDevElement.channelPicUrl); + chnlInfo.setCloudMealStates(beAuthDevElement.csStatus); + // chnlInfo.setAlarmStatus(beAuthDevElement.alarmStatus); + // // 是否为云台设备 + // if ((chnlElement.channelAbility != null + // && chnlElement.channelAbility.contains("PTZ")) + // || devElement.ability.contains("PTZ")) { + // chnlInfo.setType(ChannelType.PtzCamera); + // } + // else { + // chnlInfo.setType(ChannelType.Camera); + // } + // 是否支持加密 + chnlInfo.setEncryptMode(beAuthDevElement.encryptMode); + // 设置设备能力集 + chnlInfo.setAbility(StringToAbility(beAuthDevElement.ability)); + + // 设备与通道同时在线,通道才算在线 + if (beAuthDevElement.channelOnline) + switch (beAuthDevElement.status) { + case 0: + chnlInfo.setState(ChannelInfo.ChannelState.Offline); + break; + case 1: + chnlInfo.setState(ChannelInfo.ChannelState.Online); + break; + case 3: + chnlInfo.setState(ChannelInfo.ChannelState.Upgrade); + break; + } + + } + + return chnlInfo; + + } + + /** + * 一个设备下面有多个通道,目前demo不需要太多设备信息,故没有解析设备信息,但设备信息解析可参照下面代码,或者参照OpenAPI sdk文档。 + * + * @param devElement + * @return + */ + private List devicesElementToResult( + DeviceList.ResponseData.DevicesElement devElement, + ShareDeviceList.ResponseData.DevicesElement shareDevElement) { + + List channelList = new ArrayList(); + + // 解析绑定通道列表 + if (devElement != null && devElement.channels != null) { + for (DeviceList.ResponseData.DevicesElement.ChannelsElement chnlElement : devElement.channels) { + ChannelInfo chnlInfo = new ChannelInfo(); + chnlInfo.setDeviceCode(devElement.deviceId); + chnlInfo.setDeviceModel(devElement.deviceModel); + chnlInfo.setEncryptMode(devElement.encryptMode); + chnlInfo.setIndex(chnlElement.channelId); + chnlInfo.setName(chnlElement.channelName); + chnlInfo.setBackgroudImgURL(chnlElement.channelPicUrl); + chnlInfo.setCloudMealStates(chnlElement.csStatus); + // chnlInfo.setAlarmStatus(chnlElement.alarmStatus); + // // 是否为云台设备 + // if ((chnlElement.channelAbility != null + // && chnlElement.channelAbility.contains("PTZ")) + // || devElement.ability.contains("PTZ")) { + // chnlInfo.setType(ChannelType.PtzCamera); + // } + // else { + // chnlInfo.setType(ChannelType.Camera); + // } + // 是否支持加密 + if (devElement.ability.contains("HSEncrypt")) { + chnlInfo.setEncrypt(1); + } else { + chnlInfo.setEncrypt(0); + } + // 设置设备能力集 + chnlInfo.setAbility(StringToAbility(devElement.ability) | StringToAbility(chnlElement.channelAbility)); + + // 设备与通道同时在线,通道才算在线 + if (chnlElement.channelOnline) + switch (devElement.status) { + case 0: + chnlInfo.setState(ChannelInfo.ChannelState.Offline); + break; + case 1: + chnlInfo.setState(ChannelInfo.ChannelState.Online); + break; + case 3: + chnlInfo.setState(ChannelInfo.ChannelState.Upgrade); + break; + } + channelList.add(chnlInfo); + } + } + + // 解析分享设备通道列表 + if (shareDevElement != null && shareDevElement.channels != null) { + for (ShareDeviceList.ResponseData.DevicesElement.ChannelsElement chnlElement : shareDevElement.channels) { + ChannelInfo chnlInfo = new ChannelInfo(); + chnlInfo.setDeviceCode(shareDevElement.deviceId); + chnlInfo.setDeviceModel(shareDevElement.deviceModel); + chnlInfo.setEncryptMode(shareDevElement.encryptMode); + chnlInfo.setIndex(chnlElement.channelId); + chnlInfo.setName(chnlElement.channelName + "[shared]"); + chnlInfo.setBackgroudImgURL(chnlElement.channelPicUrl); + // chnlInfo.setAlarmStatus(chnlElement.alarmStatus); + // // 是否为云台设备 + // if ((chnlElement.channelAbility != null + // && chnlElement.channelAbility.contains("PTZ")) + // || devElement.ability.contains("PTZ")) { + // chnlInfo.setType(ChannelType.PtzCamera); + // } + // else { + // chnlInfo.setType(ChannelType.Camera); + // } + // 是否支持加密 + if (shareDevElement.ability.contains("HSEncrypt")) { + chnlInfo.setEncrypt(1); + } else { + chnlInfo.setEncrypt(0); + } + // 设置设备能力集 + chnlInfo.setAbility(StringToAbility(shareDevElement.ability)); + + // 设备与通道同时在线,通道才算在线 + if (chnlElement.channelOnline) + switch (shareDevElement.status) { + case 0: + chnlInfo.setState(ChannelInfo.ChannelState.Offline); + break; + case 1: + chnlInfo.setState(ChannelInfo.ChannelState.Online); + break; + case 3: + chnlInfo.setState(ChannelInfo.ChannelState.Upgrade); + break; + } + channelList.add(chnlInfo); + } + } + return channelList; + } + + public void checkBindOrNot(final String deviceId, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + CheckDeviceBindOrNot req = new CheckDeviceBindOrNot(); + req.data.token = mToken; + req.data.deviceId = deviceId; // 设备id。 + // CheckDeviceBindOrNot.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 将标示符和返回体发送给handle处理 + // retobject.resp = resp; + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); + } + }); + } + + /** + * 设备在线状态 + * + * @param deviceId + * @param handler + */ + public void checkOnline(final String deviceId, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + DeviceOnline req = new DeviceOnline(); + req.data.token = mToken; + req.data.deviceId = deviceId; // 设备id。 + RetObject retObject = null; + retObject = request(req); + + // 将标示符和返回体发送给handle处理 + // retobject.resp = resp; + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); + } + }); + } + + public void unBindDeviceInfo(final String deviceID, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + UnBindDeviceInfo req = new UnBindDeviceInfo(); + req.data.token = mToken; + req.data.deviceId = deviceID; // 设备id。 + RetObject retObject = null; + retObject = request(req); + UnBindDeviceInfo.Response resp = (UnBindDeviceInfo.Response) retObject.resp; + if (resp.data == null || resp.data.ability == null) { + Log.e(tag, "unBindDeviceInfo response data is null"); + handler.obtainMessage(1000, "unBindDeviceInfo response data is null").sendToTarget(); + return; + } + + retObject.resp = resp.data.ability; + // 将标示符和返回体发送给handle处理 + handler.obtainMessage(retObject.mErrorCode, retObject.resp).sendToTarget(); + + } + }); + } + + /** + * 为账号绑定设备 + * + * @param deviceID 序列号 + * @param handler + */ + public void bindDevice(final String deviceID, final String key, + final Handler handler) { + bindDevice(deviceID, key, key, handler); + } + + public void bindDevice(final String deviceID, final String code, + final String key, final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + BindDevice req = new BindDevice(); + req.data.token = mToken; + req.data.deviceId = deviceID; + req.data.code = code; + + // BindDevice.Response resp = null; + RetObject retObject = null; + retObject = request(req, 5 * 1000); + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); + } + }); + } + + /** + * 为账号解绑设备 + * + * @param deleteCloudRecords 是否删除云录像 + * @param deviceID 序列号 + * @param handler + */ + public void unBindDevice(final String deviceID, final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + UnBindDevice req = new UnBindDevice(); + req.data.token = mToken; + req.data.deviceId = deviceID; + // UnBindDevice.Response resp = null; + RetObject retObject = null; + retObject = request(req, 15 * 1000); + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); + } + }); + } + + // 网络周边 + public void getWifiStatus(final String ssid, final String deviceID, + final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + WifiAround req = new WifiAround(); + req.data.token = mToken; + req.data.deviceId = deviceID; + // WifiAround.Response resp = null; + RetObject retObject = null; + retObject = request(req, 45 * 1000); + System.out.println("SSID:" + ssid); + + // 解析数据 + if (retObject.mErrorCode == 0) { + // get device wifilist + for (WifiAround.ResponseData.WLanElement element : ((WifiAround.Response) retObject.resp).data.wLan) { + if (element.ssid.equals(ssid)) { + System.out.println("obtainMessage:" + element.ssid); + retObject.resp = element.bssid; + } + } + } + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送消息到界面 + } + }); + } + + // 连接网络 + public void connectWifi(final String token, final String BSSID, final String ssid, + final String password, final String deviceID, final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + ControlDeviceWifi req = new ControlDeviceWifi(); + req.data.token = token; + req.data.password = password; + req.data.linkEnable = true; + req.data.ssid = ssid; + req.data.deviceId = deviceID; + req.data.bssid = BSSID; + // ControlDeviceWifi.Response resp = null; + System.out.println(ssid + "--" + password + "--" + deviceID + "--" + token); + RetObject retObject = null; + retObject = request(req, 45 * 1000); // dms timeout + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送消息到界面 + } + }); + } + + public void setAlarmPlanConfig(final String deviceID, + final String optional, final List rules, + final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + ModifyDeviceAlarmPlan req = new ModifyDeviceAlarmPlan(); + req.data.deviceId = deviceID; + req.data.channelId = optional; + + // System.out.println("channels.get(0).rules.size:"+channels.get(0).rules.size()); + for (RulesElement ele : rules) { + System.out.println(ele.beginTime); + System.out.println(ele.endTime); + System.out.println(ele.period); + } + RetObject retObject = null; + retObject = request(req); + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + } + }); + + } + + /** + * 查询报警计划配置 + * + * @param deviceID 设备id + * @param optional 通道id + * @param handler 回调 + */ + public void getAlarmPlanConfig(final String deviceID, + final String optional, final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + DeviceAlarmPlan req = new DeviceAlarmPlan(); + req.data.deviceId = deviceID; // 过滤条件,可指定获取特定设备序列号的设备信息。 + req.data.channelId = optional; // 通道id + DeviceAlarmPlan.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + if (resp == null || resp.data == null) { + // throw new + // BusinessException(BusinessErrorCode.BEC_COMMON_NULL_POINT); + } + + resp = (DeviceAlarmPlan.Response) retObject.resp; + // 如果设备在线 + if (resp.data != null) { + retObject.resp = resp.data.rules; + } + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送消息到界面 + } + }); + + } + + public void AsynControlPtz(String id, ChannelPTZInfo ptz, + final Handler handler) { + // TODO Auto-generated method stub + String operation = ""; + String duration = null; + int v = 0; + int h = 0; + double z = 1.0d; + if (ptz.getOperation() == Operation.Move) { + operation = "move"; + if (ptz.getDuration() == Duration.Forever) { + duration = "last"; + } else if (ptz.getDuration() == Duration.Long) { + duration = "last"; + } else if (ptz.getDuration() == Duration.Generral) { + duration = "500"; + } else if (ptz.getDuration() == Duration.Short) { + duration = "200"; + } + + if (ptz.getDirection() == Direction.Left) { + h = -5; + } else if (ptz.getDirection() == Direction.Right) { + h = 5; + } else if (ptz.getDirection() == Direction.Up) { + v = 5; + } else if (ptz.getDirection() == Direction.Down) { + v = -5; + } else if (ptz.getDirection() == Direction.ZoomIn) { + z = 0.5d; + } else if (ptz.getDirection() == Direction.ZoomOut) { + z = 1.5d; + } + + } else if (ptz.getOperation() == Operation.Locate) { + operation = "locate"; + } else if (ptz.getOperation() == Operation.Stop) { + operation = "move"; // stop 为自定义事件,协议为 operation设置move vhz的值设置0,0,1 + duration = "100"; // 随意填写 以防设备出错 + v = 0; + h = 0; + z = 1.0d; + } + + final ChannelInfo chl = getChannel(id); + if (chl == null) { + Log.d(tag, "chl is null"); + return; + } + + final ControlPTZ req = new ControlPTZ(); + req.data.token = mToken; + req.data.operation = operation; + req.data.v = v; + req.data.duration = duration; + req.data.h = h; + req.data.z = z; + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.deviceId = chl.getDeviceCode(); + + Log.d(tag, "id=" + id + "devId=" + chl.getDeviceCode()); + + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // ControlPTZ.Response resp = null; + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送消息到界面 + } + }); + + } + + /** + * 查询通道下的录像总数 + * + * @param chnlId + * @param chnl + * @param startTime + * @param endTime + * @param startIndex + * @param endIndex + * @param handler - + */ + public void queryRecordNum(String chnlId, final String startTime, + final String endTime, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + QueryLocalRecordNum req = new QueryLocalRecordNum(); + req.data.token = mToken; + req.data.beginTime = startTime; + // req.data.type = "All"; 默认为all + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.endTime = endTime; + req.data.deviceId = chl.getDeviceCode(); + Log.d(tag, "strStartTime:" + startTime + "strEndTime:" + + endTime); + + RetObject retObject = null; + retObject = request(req, DMS_TIMEOUT); + QueryLocalRecordNum.Response resp = (QueryLocalRecordNum.Response) retObject.resp; + + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "QueryLocalRecordNum faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null) { + Log.d(tag, "QueryLocalRecordNum success data is null"); + } + // todo:其他信息解析请见OpenAPI 平台sdk文档 + handler.obtainMessage( + 0, + resp.data.recordNum, 1).sendToTarget(); + // resp.data.recordNum > 99 ? 99 : resp.data.recordNum, 1).sendToTarget(); // 发送成功消息到界面 + } + } + }); + } + + /** + * 查询通道下的录像列表 + * + * @param chnlId + * @param chnl + * @param startTime + * @param endTime + * @param startIndex + * @param endIndex + * @param handler + */ + public void queryRecordList(String chnlId, final String startTime, + final String endTime, int startIndex, int endIndex, + final Handler handler) { + mRecordInfoList.clear(); // 清数据 + + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + //加个判断大于99个不能查 + if (endIndex - startIndex >= 60) { + startIndex = endIndex - 60; + } + final String strNneed = String.valueOf(startIndex) + "-" + + String.valueOf(endIndex); // 需要录像的条数,从那条记录到那一条,demo只读取前面5条,不查询完所有录像 + + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + + QueryLocalRecords req = new QueryLocalRecords(); + req.data.token = mToken; + req.data.beginTime = startTime; + // req.data.type = "All"; 默认为all + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.queryRange = strNneed; + req.data.endTime = endTime; + req.data.deviceId = chl.getDeviceCode(); + Log.d(tag, "strStartTime:" + startTime + "strEndTime:" + + endTime); + + RetObject retObject = null; + retObject = request(req); + QueryLocalRecords.Response resp = (QueryLocalRecords.Response) retObject.resp; + + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "QueryRecordList faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null || resp.data.records == null) { + Log.d(tag, "queryRecordList success data is null"); + handler.obtainMessage(-1, "respone data is null").sendToTarget(); + } + + for (QueryLocalRecords.ResponseData.RecordsElement element : resp.data.records) { + RecordInfo info = new RecordInfo(); + info.setDeviceId(chl.getDeviceCode()); + info.setChnlUuid(chl.getUuid()); + long dateStart = TimeHelper.getTimeStamp(element.beginTime); + info.setStartTime(dateStart); + long dateEnd = TimeHelper.getTimeStamp(element.endTime); + info.setEndTime(dateEnd); + info.setDeviceKey(chl.getEncryptKey()); + info.setRecordID(element.recordId); + info.setFileLength(element.fileLength); + if (element.type.equals("Event")) + info.setEventType(RecordEventType.Event); + else if (element.type.equals("All")) + info.setEventType(RecordEventType.All); + else if (element.type.equals("Manual")) + info.setEventType(RecordEventType.Manual); + mRecordInfoList.add(info); + mAllRecordInfoList.add(info); + } + Collections.reverse(mRecordInfoList);// 反序 临时使用下 + // todo:其他信息解析请见OpenAPI 平台sdk文档 + handler.obtainMessage(0, mRecordInfoList).sendToTarget(); // 发送成功消息到界面 + } + } + }); + } + + /** + * 查询通道下的云录像总数 + * + * @param chnlId + * @param startTime + * @param endTime + * @param startIndex + * @param endIndex + * @param handler + */ + public void queryCloudRecordNum(String chnlId, final String startTime, + final String endTime, final Handler handler) { + + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + // + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + QueryCloudRecordNum req = new QueryCloudRecordNum(); + req.data.token = mToken; + req.data.beginTime = startTime; + req.data.endTime = endTime; + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.deviceId = chl.getDeviceCode(); + Log.d(tag, "startTime:" + req.data.beginTime + "endTime:" + + req.data.endTime + "channelId:" + req.data.channelId + + "deviceId:" + chl.getDeviceCode()); + + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + QueryCloudRecordNum.Response resp = (QueryCloudRecordNum.Response) retObject.resp; + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "QueryCloudRecordNum faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null) { + Log.d(tag, "QueryCloudRecordNum success data is null"); + } + // todo:其他信息解析请见OpenAPI 平台sdk文档 + handler.obtainMessage( + 0, + resp.data.recordNum, + resp.data.recordNum > 10 ? resp.data.recordNum - 9 + : 1).sendToTarget(); // 发送成功消息到界面 + } + } + }); + } + + /** + * 查询通道下的云录像列表 + * + * @param chnlId + * @param startTime + * @param endTime + * @param startIndex + * @param endIndex + * @param handler + */ + public void queryCloudRecordList(String chnlId, final String startTime, + final String endTime, int startIndex, int endIndex, + final Handler handler) { + mRecordInfoList.clear(); // 清数据 + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + + final String strNneed = String.valueOf(startIndex) + "-" + + String.valueOf(endIndex); // 需要录像的条数,从那条记录到那一条,demo只读取前面10条,不查询完所有录像 + // + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + QueryCloudRecords req = new QueryCloudRecords(); + req.data.token = mToken; + req.data.beginTime = startTime; + req.data.endTime = endTime; + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.queryRange = strNneed; + req.data.deviceId = chl.getDeviceCode(); + Log.d(tag, "startTime:" + req.data.beginTime + "endTime:" + + req.data.endTime + "channelId:" + req.data.channelId + + "deviceId:" + chl.getDeviceCode() + "strNneed:" + + strNneed); + + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + QueryCloudRecords.Response resp = (QueryCloudRecords.Response) retObject.resp; + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "queryCloudRecordList faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null || resp.data.records == null) { + Log.d(tag, "queryRecordList success data is null"); + } + + for (RecordsElement element : resp.data.records) { + RecordInfo info = new RecordInfo(); + info.setChnlUuid(chl.getUuid()); + + String dateStart = element.beginTime; + // dateStart *= 1000; + info.setStartTime(TimeHelper.getTimeStamp(dateStart)); + String dateEnd = element.endTime; + // dateEnd *= 1000; + info.setEndTime(TimeHelper.getTimeStamp(dateEnd)); + info.setDeviceKey(chl.getEncryptKey()); + info.setRecordID(element.recordId); + info.setBackgroudImgUrl(element.thumbUrl); + info.setDeviceId(element.deviceId); + info.setType(RecordInfo.RecordType.PublicCloud); + if (element.size.length() > 0) { + info.setFileLength(Long.parseLong(element.size)); + } else { // easy4ip设备size字段为“” + info.setFileLength(0); + } + mRecordInfoList.add(info); + } + Collections.reverse(mRecordInfoList);// 反序 临时使用下 + // todo:其他信息解析请见OpenAPI 平台sdk文档 + handler.obtainMessage(0, mRecordInfoList).sendToTarget(); // 发送成功消息到界面 + } + } + }); + } + + /** + * 获取设备动检计划 + * + * @param chnlId + * @param handler + */ + public void getAlarmStatus(final String chnlId, final Handler handler) { + + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + DeviceAlarmPlan req = new DeviceAlarmPlan(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + + DeviceAlarmPlan.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (DeviceAlarmPlan.Response) retObject.resp; + + if (retObject.mErrorCode != 0) { + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + int arg1 = resp.data.rules.get(0).enable == true ? 1 : 0; + handler.obtainMessage(0, arg1, 0).sendToTarget(); + + } + + } + }); + } + + /** + * 改变设备的动检开关 + * + * @param enable + * @param channelId + * @param deviceId + */ + public void modifyAlarmStatus(final boolean enable, final String chnlId, + final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + ModifyDeviceAlarmStatus req = new ModifyDeviceAlarmStatus(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.enable = enable; + + ModifyDeviceAlarmStatus.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + public void setStorageStartegy(final String enable, final String chnlId, + final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + SetStorageStrategy req = new SetStorageStrategy(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.status = enable; + + SetStorageStrategy.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + /** + * recoverSDCard 请求初始化SD卡 + */ + public void recoverSDCard(final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + RecoverSDCard req = new RecoverSDCard(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + + RecoverSDCard.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + /** + * frameReverseStatus 获取设备翻转状态 + */ + public void frameReverseStatus(final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + FrameReverseStatus req = new FrameReverseStatus(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + + FrameReverseStatus.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (FrameReverseStatus.Response) retObject.resp; + if (retObject.mErrorCode != 0) { + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + int arg1 = 0; + if (resp.data.direction.toString().equals("reverse")) { + arg1 = 1; + } else { + arg1 = 0; + } + handler.obtainMessage(0, arg1, 0).sendToTarget(); + + } + + } + }); + } + + /** + * modifyFrameReverseStatus 设置设备翻转状态 + */ + public void modifyFrameReverseStatus(final String state, final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + ModifyFrameReverseStatus req = new ModifyFrameReverseStatus(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.direction = state; + + ModifyFrameReverseStatus.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + /** + * modifyBreathingLight 获取呼吸灯状态 + */ + public void breathingLightStatus(final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + BreathingLightStatus req = new BreathingLightStatus(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + + BreathingLightStatus.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (BreathingLightStatus.Response) retObject.resp; + if (retObject.mErrorCode != 0) { + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + int arg1; + if (resp.data.status.toString().equals("on")) { + arg1 = 1; + } else { + arg1 = 0; + } + handler.obtainMessage(0, arg1, 0).sendToTarget(); + + } + + } + }); + } + + /** + * modifyBreathingLight 设置呼吸灯开关 + */ + public void modifyBreathingLight(final String state, final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + ModifyBreathingLight req = new ModifyBreathingLight(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + req.data.status = state; + + ModifyBreathingLight.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + /** + * modifyBreathingLight 获取呼吸灯状态 + */ + public void currentDeviceWifi(final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + CurrentDeviceWifi req = new CurrentDeviceWifi(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + + CurrentDeviceWifi.Response resp = null; + RetObject retObject = null; + retObject = request(req); + resp = (CurrentDeviceWifi.Response) retObject.resp; + if (retObject.mErrorCode != 0) { + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + String ssid = resp.data.ssid; + handler.obtainMessage(0, ssid).sendToTarget(); + } + + } + }); + } + + /** + * 升级设备 + * + * @param chnlId + * @param handler + */ + + public void upgradeDevice(final String chnlId, final Handler handler) { + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // TODO Auto-generated method stub + UpgradeDevice req = new UpgradeDevice(); + req.data.token = mToken; + req.data.deviceId = chl.getDeviceCode(); + + UpgradeDevice.Response resp = null; + RetObject retObject = null; + retObject = request(req); + + // 网络请求失败 + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + + } + }); + } + + /** + * 查询报警消息列表 + * + * @param chnlId + * @param deviceId + * @param startTime + * @param endTime + * @param count + * @param handler + */ + public void queryAlarmMessageList(String chnlId, final String startTime, + final String endTime, final int count, final Handler handler) { + mAlarmMessageInfoList.clear(); + final ChannelInfo chl = getChannel(chnlId); + if (chl == null) { + return; + } + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + GetAlarmMessage req = new GetAlarmMessage(); + req.data.token = mToken; + req.data.beginTime = startTime; + req.data.endTime = endTime; + req.data.channelId = String.valueOf(chl.getIndex()); + req.data.count = "" + count; + req.data.deviceId = chl.getDeviceCode(); + Log.d(tag, "startTime:" + req.data.beginTime + "endTime:" + + req.data.endTime + "channelId:" + req.data.channelId + + "deviceId:" + chl.getDeviceCode()); + + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + GetAlarmMessage.Response resp = (GetAlarmMessage.Response) retObject.resp; + // 网络请求失败 + if (retObject.mErrorCode != 0) { + Log.d(tag, "queryAlarmMessageList faied " + retObject.mMsg); + handler.obtainMessage(retObject.mErrorCode).sendToTarget(); + } else { + if (resp.data == null || resp.data.alarms == null) { + Log.d(tag, "query Alarm Message success data is null"); + } + + for (AlarmsElement element : resp.data.alarms) { + AlarmMessageInfo info = new AlarmMessageInfo(); + info.setChnlUuid(chl.getUuid()); + info.setAlarmId(element.alarmId); + info.setType(element.type); + info.setDeviceId(element.deviceId); + info.setDeviceKey(chl.getEncryptKey()); + info.setName(element.name); + // 暂不支持缩略图 + if (element.picurlArray.size() > 0) + info.setPicUrl(element.picurlArray.get(0)); + info.setThumbUrl(element.thumbUrl); + info.setLocalDate(element.localDate); + + info.setTime(element.time); + mAlarmMessageInfoList.add(info); + } + + // todo:其他信息解析请见RestAPI 平台sdk文档 + handler.obtainMessage(0, mAlarmMessageInfoList) + .sendToTarget(); // 发送成功消息到界面 + } + } + }); + } + + /** + * 删除报警消息 + * + * @param indexId + * @param handler + */ + public void deleteAlarmMessage(final AlarmMessageInfo info, + final Handler handler) { + + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + DeleteAlarmMessage req = new DeleteAlarmMessage(); + req.data.token = mToken; + req.data.indexId = info.getAlarmId(); + Log.d(tag, "indexId" + info.getAlarmId()); + + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + DeleteAlarmMessage.Response resp = (DeleteAlarmMessage.Response) retObject.resp; + + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + } + + }); + } + + /** + * 检索已查询出来的录像对象 + * + * @param id + * @return + */ + public RecordInfo getRecord(String id) { + // TODO Auto-generated method stub + for (RecordInfo red : mRecordInfoList) { + if (red.getId().equals(id)) { + return red; + } + } + return null; + } + + public RecordInfo getAllRecord(String id) { + // TODO Auto-generated method stub + for (RecordInfo red : mAllRecordInfoList) { + if (red.getId().equals(id)) { + return red; + } + } + return null; + } + + /** + * 设备密码校验 + * + * @param deviceId + * @param pwd + * @return + */ + public int checkPwdValidity(String deviceId, String pwd) { + // return LCOpenSDK_DeviceInit.getInstance().checkPwdValidity(mToken, deviceId, pwd); + return 1; + } + + /** + * 设备初始化 + * + * @param deviceId + * @param pwd + * @param timeout + * @return + */ + public void searchDevice(final String deviceId, final int timeout, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + + int ret = -1; + String msg = ""; + DeviceInitInfo deviceInitInfo = LCOpenSDK_DeviceInit.getInstance().searchDeviceInitInfo(deviceId, timeout); + if (deviceInitInfo != null) { + if (deviceInitInfo.mStatus == 0) { // 不支持初始化操作 + ret = 0; + msg = "device not support init"; + } else if (deviceInitInfo.mStatus == 1) { // 未初始化 + ret = 1; + msg = "device not init yet"; + } else if (deviceInitInfo.mStatus == 2) { // 已初始化 + ret = 2; + msg = "device already init"; + } else { + ret = -2; + msg = "device not found"; + } + } else { + ret = -1; + msg = "StartSearchDevices failed"; + } + + handler.obtainMessage(ret, deviceInitInfo).sendToTarget(); + + } + }); + + } + + /** + * 修改设备密码 + * + * @param deviceId + * @param oldPwd + * @param newPwd + * @param handler + */ + public void modifyDevicePwd(final String deviceId, final String oldPwd, + final String newPwd, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + + @Override + public void run() { + // if (0 != checkPwdValidity(deviceId, oldPwd)) { + // RetObject retObject = new RetObject(); + // retObject.mErrorCode = -1; + // retObject.mMsg = "checkPwdValidity failed"; + // handler.obtainMessage(retObject.mErrorCode, retObject) + // .sendToTarget(); // 发送成功消息到界面 + // return; + // } + + ModifyDevicePwd req = new ModifyDevicePwd(); + req.data.token = mToken; + req.data.deviceId = deviceId; + req.data.oldPwd = oldPwd; + req.data.newPwd = newPwd; + + RetObject retObject = null; + retObject = request(req); // 码流请求超时时间长一些 + ModifyDevicePwd.Response resp = (ModifyDevicePwd.Response) retObject.resp; + + handler.obtainMessage(retObject.mErrorCode, retObject) + .sendToTarget(); // 发送成功消息到界面 + } + + }); + } + + public void initDevice(final String mac, final String key, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + int ret = LCOpenSDK_DeviceInit.getInstance().initDevice(mac, key); + String msg = ""; + if (ret == 0) { + msg = "Init success"; + } else if (ret == -1) { + msg = "input param is empty"; + } else {//ret = error code + msg = "InitDevAccount failed"; + } + + handler.obtainMessage(ret, msg).sendToTarget(); + } + }); + } + + public void initDeviceByIP(final String mac, final String ip, final String key, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + int ret = LCOpenSDK_DeviceInit.getInstance().initDeviceByIP(mac, ip, key); + String msg = ""; + if (ret == 0) { + msg = "Init success"; + } else if (ret == -1) { + msg = "input param is empty"; + } else {//ret = error code + msg = "InitDevAccountByIP failed"; + } + + handler.obtainMessage(ret, msg).sendToTarget(); + } + }); + } + + public void addDevices(final String devicesJsonStr, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + // TODO Auto-generated method stub + int ret = LCOpenSDK_LoginManager.addDevices(mToken, devicesJsonStr); + String msg = ""; + if (ret == 1) + msg = "addDevices success"; + else if (ret == -1) + msg = "init server failed"; + else + msg = "addDevices failed"; + + handler.obtainMessage(ret, msg).sendToTarget(); + } + }); + } + + private static class Instance { + static Business instance = new Business(); + } + + public static class CloudStorageCode { + public static final String HLS_DOWNLOAD_FAILD = "0"; // 下载失败 + public static final String HLS_DOWNLOAD_BEGIN = "1"; // 开始下载 + public static final String HLS_DOWNLOAD_END = "2"; // 下载结束 + public static final String HLS_SEEK_SUCCESS = "3"; // 定位成功 + public static final String HLS_SEEK_FAILD = "4"; // 定位失败 + // public static final String HLS_ABORT_DONE = "5"; + // public static final String HLS_RESUME_DONE = "6"; + public static final String HLS_KEY_ERROR = "11"; // 秘钥错误 + } + + public static class LocalDownloadCode { + public static final String RTSP_DOWNLOAD_FRAME_ERROR = "0"; + public static final String RTSP_DOWNLOAD_TEARDOWN = "1"; + public static final String RTSP_DOWNLOAD_AUTHORIZATION_FAIL = "3"; + public static final String RTSP_DOWNLOAD_BEGIN = "4"; + public static final String RTSP_DOWNLOAD_OVER = "5"; + public static final String RTSP_DOWNLOAD_PAUSE = "6"; + public static final String RTSP_DOWNLOAD_KEY_MISMATH = "7"; + } + + public static class PlayerResultCode { + public static final String STATE_PACKET_FRAME_ERROR = "0"; // 组帧失败 + public static final String STATE_RTSP_TEARDOWN_ERROR = "1"; // 内部要求关闭,如连接断开等 + public static final String STATE_RTSP_DESCRIBE_READY = "2"; // 会话已经收到Describe响应 + public static final String STATE_RTSP_AUTHORIZATION_FAIL = "3"; // RTSP鉴权失败 + public static final String STATE_RTSP_PLAY_READY = "4"; // 收到PLAY响应 + // public static final String STATE_RTSP_FILE_PLAY_OVER = "5"; // + // 录像文件回放正常结束 + public static final String STATE_RTSP_KEY_MISMATCH = "7"; + } + + public static class RetObject { + public int mErrorCode = 0; // 错误码表示符 -1:返回体为null,0:成功,1:http错误, 2:业务错误 + public String mMsg; + public Object resp; + } + + public final class HttpCode { + public static final int SC_OK = 200;// OK + // (API调用成功,但是具体返回结果,由content中的code和desc描述) + public static final int Bad_Request = 400;// Bad Request (API格式错误,无返回内容) + public static final int Unauthorized = 401;// Unauthorized + // (用户名密码认证失败,无返回内容) + public static final int Forbidden = 403;// Forbidden (认证成功但是无权限,无返回内容) + public static final int Not_Found = 404;// Not Found (请求的URI错误,无返回内容) + public static final int Precondition_Failed = 412;// Precondition Failed + // (先决条件失败,无返回内容。通常是由于客户端所带的x-hs-date时间与服务器时间相差过大。) + public static final int Internal_Server_Error = 500;// Internal Server + // Error + // (服务器内部错误,无返回内容) + public static final int Service_Unavailable = 503;// Service Unavailable + // (服务不可用,无返回内容。这种情况一般是因为接口调用超出频率限制。) + } + +} diff --git a/app/src/main/java/com/lechange/demo/business/entity/AlarmMessageInfo.java b/app/src/main/java/com/lechange/demo/business/entity/AlarmMessageInfo.java new file mode 100644 index 0000000..607fef2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/entity/AlarmMessageInfo.java @@ -0,0 +1,114 @@ +package com.lechange.demo.business.entity; + + +public class AlarmMessageInfo { + + private String chnlUuid; // 通道的uuid + + /** [long]消息ID */ + private long alarmId; + + /** [int]报警类型 */ + private int type; + + /** 设备或通道的名称 */ + private String name = ""; + + /** ***LLLJHHDF */ + private String thumbUrl = ""; + private String picUrl = ""; + + /** 报警时设备本地时间,格式如2014-12-12 12:12:12 */ + private String localDate = ""; + + private String deviceId; //设备ID + private String deviceKey; //设备秘钥 + + /** [long]报警时间UNIX时间戳秒 */ + private long time; + + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public long getAlarmId() { + return alarmId; + } + + public void setAlarmId(long alarmId) { + this.alarmId = alarmId; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPicUrl() { + return picUrl; + } + + public void setPicUrl(String picUrl) { + this.picUrl = picUrl; + } + + public String getThumbUrl() { + return thumbUrl; + } + + public void setThumbUrl(String thumbUrl) { + this.thumbUrl = thumbUrl; + } + + public String getLocalDate() { + return localDate; + } + + public void setLocalDate(String localDate) { + this.localDate = localDate; + } + + + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public String getChnlUuid() { + return chnlUuid; + } + + public void setChnlUuid(String chnlUuid) { + this.chnlUuid = chnlUuid; + } + + public String getDeviceKey() { + return deviceKey; + } + + public void setDeviceKey(String deviceKey) { + this.deviceKey = deviceKey; + } + + +} diff --git a/app/src/main/java/com/lechange/demo/business/entity/ChannelInfo.java b/app/src/main/java/com/lechange/demo/business/entity/ChannelInfo.java new file mode 100644 index 0000000..4cc878b --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/entity/ChannelInfo.java @@ -0,0 +1,175 @@ +package com.lechange.demo.business.entity; + +import com.tuya.sdk.blelib.channel.ChannelState; + +import java.util.UUID; + +public class ChannelInfo { + + private String id = UUID.randomUUID().toString(); + private int index; // 通道索引 + private String name; // 通道名称 + private ChannelState state; // 通道状态 + private String backgroudImgURL; // 背景图URL + private String deviceCode; // 关联的设备id + private String deviceModel; // 关联的设备型号 + private String encryptKey; // 秘钥的key + private String deviceName; // 设备名称 + private String deviceType; // 设备类型 + private int encryptMode; // 秘钥模式:0-默认模式,1-自定义模式 + private int encrypt; // 是否支持加密 + private int ability; + private int cloudMealStates; //云套餐状态 + private int alarmStatus; //动检计划状态 + + public String getDeviceType() { + return deviceType == null ? "" : deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getDeviceName() { + return deviceName == null ? "" : deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public ChannelState getState() { + return state; + } + + public void setState(ChannelState state) { + this.state = state; + } + + public String getUuid() { + return id; + } + + public String getId() { + return id == null ? "" : id; + } + + public void setId(String id) { + this.id = id; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBackgroudImgURL() { + return backgroudImgURL == null ? "" : backgroudImgURL; + } + + public void setBackgroudImgURL(String backgroudImgURL) { + this.backgroudImgURL = backgroudImgURL; + } + + public String getDeviceCode() { + return deviceCode == null ? "" : deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceModel() { + return deviceModel == null ? "" : deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public String getEncryptKey() { + return encryptKey == null ? "" : encryptKey; + } + + public void setEncryptKey(String encryptKey) { + this.encryptKey = encryptKey; + } + + public int getEncryptMode() { + return encryptMode; + } + + public void setEncryptMode(int encryptMode) { + this.encryptMode = encryptMode; + } + + public int getEncrypt() { + return encrypt; + } + + public void setEncrypt(int encrypt) { + this.encrypt = encrypt; + } + + public int getAbility() { + return ability; + } + + public void setAbility(int ability) { + this.ability = ability; + } + + public int getCloudMealStates() { + return cloudMealStates; + } + + public void setCloudMealStates(int cloudMealStates) { + this.cloudMealStates = cloudMealStates; + } + + public int getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(int alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public enum ChannelState { + Online, // 在线 + Offline, // 离线 + Upgrade, // 升级中 + } + + /** + * 设备能力集合 + * + * @author 23930 + */ + public class Ability { + public static final int WLAN = 1; // 设备支持接入无线局域网 + public static final int AlarmPIR = 2;// 设备支持人体红外报警 + public static final int AlarmMD = 4; // 设备支持动检报警 + public static final int AudioTalk = 8; // 设备支持语音对讲 + public static final int VVP2P = 16; // 设备支持威威网络P2P服务 + public static final int DHP2P = 32; // 设备支持大华P2P服务 + public static final int PTZ = 64; //设备支持云台操作 + public static final int HSEncrypt = 128; // 设备支持华视微讯码流加密 + public static final int CloudStorage = 256; // 设备支持华视微讯平台云存储 + public static final int SUPPORT_DHHTTP_LIVE = 512; //支持私有协议直播 + public static final int SUPPORT_DHHTTP_PLAYBACK = 1024; //支持私有协议回放 + public static final int SUPPORT_DHHTTP_TALK = 2048; //支持私有协议对讲 + public static final int TCM = 4096; //设备支持TCM能力 + } +} diff --git a/app/src/main/java/com/lechange/demo/business/entity/ChannelPTZInfo.java b/app/src/main/java/com/lechange/demo/business/entity/ChannelPTZInfo.java new file mode 100644 index 0000000..4b637d6 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/entity/ChannelPTZInfo.java @@ -0,0 +1,91 @@ +package com.lechange.demo.business.entity; +/** + * 文件描述:package com.android.business.entity; + * 功能说明: + * 版权申明: + * @author ding_qili + * @version 2015-6-17下午3:29:12 + */ + +public class ChannelPTZInfo { + + public enum Operation{ + Move,//移动 + Locate,//定位 + Stop;//立即停止! + } + + + public enum Duration{//持续多久 + Forever,//永远 + Long,//长 + Generral,//普通 + Short;//短 + } + + public enum Direction{//方向 + Left, + Right, + Up, + Down, + ZoomIn, + ZoomOut; + } + + public ChannelPTZInfo(Operation operation,Direction direction) { + this.operation = operation; + this.direction = direction; + } + + + + /** 操作行为;move表示移动,locate表示定位 */ + private Operation operation = Operation.Move; + /** + * 持续时间 + */ + private Duration duration = Duration.Generral; + /** + * 方向 + */ + private Direction direction = Direction.Left; + /** + * @return the operation + */ + public Operation getOperation() { + return operation; + } + /** + * @param operation the operation to set + */ + public void setOperation(Operation operation) { + this.operation = operation; + } + /** + * @return the duration + */ + public Duration getDuration() { + return duration; + } + /** + * @param duration the duration to set + */ + public void setDuration(Duration duration) { + this.duration = duration; + } + /** + * @return the direction + */ + public Direction getDirection() { + return direction; + } + /** + * @param direction the direction to set + */ + public void setDirection(Direction direction) { + this.direction = direction; + } + + + +} diff --git a/app/src/main/java/com/lechange/demo/business/entity/RecordInfo.java b/app/src/main/java/com/lechange/demo/business/entity/RecordInfo.java new file mode 100644 index 0000000..e567560 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/entity/RecordInfo.java @@ -0,0 +1,128 @@ +package com.lechange.demo.business.entity; + +import java.util.UUID; + +public class RecordInfo { + + public enum RecordType + { + DeviceLocal, // 设备本地录像 + PrivateCloud, // 私有云 + PublicCloud, // 公有云 + } + + public enum RecordEventType + { + All, // 所有录像 + Manual, // 手动录像 + Event, // 事件录像 + } + + private String id = UUID.randomUUID().toString(); + private RecordType type; // 录像类型 + private float fileLength; // 文件长度 + private float downLength = -1; // 已下载长度 + private long startTime; // 开始时间 + private long endTime; // 结束时间 + private String deviceId; //设备ID + private String deviceKey; + private String backgroudImgUrl; // 录像文件Url + private String chnlUuid; // 通道的uuid + private RecordEventType eventType; // 事件类型 + private String recordID; //录像ID + private String recordPath; //录像ID(设备录像) + private String recordRegionId; //新的录像ID + + + public String getRecordRegionId() { + return recordRegionId; + } + public void setRecordRegionId(String recordRegionId) { + this.recordRegionId = recordRegionId; + } + + + public String getDeviceId() { + return deviceId; + } + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + public String getDeviceKey() { + return deviceKey; + } + public void setDeviceKey(String deviceKey) { + this.deviceKey = deviceKey; + } + + public RecordType getType() { + return type; + } + public void setType(RecordType type) { + this.type = type; + } + public long getStartTime() { + return startTime; + } + public float getFileLength() { + return fileLength; + } + public void setFileLength(float fileLength) { + this.fileLength = fileLength; + } + public float getDownLength() { + return downLength; + } + public void setDownLength(float downLength) { + this.downLength = downLength; + } + public void setStartTime(long startTime) { + this.startTime = startTime; + } + public long getEndTime() { + return endTime; + } + public void setEndTime(long endTime) { + this.endTime = endTime; + } + public String getBackgroudImgUrl() { + return backgroudImgUrl; + } + public void setBackgroudImgUrl(String backgroudImgUrl) { + this.backgroudImgUrl = backgroudImgUrl; + } + public String getChnlUuid() { + return chnlUuid; + } + public void setChnlUuid(String chnlUuid) { + this.chnlUuid = chnlUuid; + } + public RecordEventType getEventType() { + return eventType; + } + public void setEventType(RecordEventType eventType) { + this.eventType = eventType; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public void setRecordID(String id) { + this.recordID = id; + } + public String getRecordID() { + return this.recordID; + } + + public boolean isDownload() { + return downLength >= 0; + } + public String getRecordPath() { + return recordPath; + } + public void setRecordPath(String recordPath) { + this.recordPath = recordPath; + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/HttpUtils.java b/app/src/main/java/com/lechange/demo/business/util/HttpUtils.java new file mode 100644 index 0000000..9b32389 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/HttpUtils.java @@ -0,0 +1,227 @@ +package com.lechange.demo.business.util; + +import android.net.Uri; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +/** + * @author 31833 + * @version Version Time Description
+ * 1.0 2017/3/4 13:45 封装HTTP的相关请求 + */ + +public class HttpUtils { + + private static final String ALLOWED_URL_CHARS = "@#&=*+-_.,:!?()/~'%"; + + private static final String CHARSET = "UTF-8"; + + private static final int connectTimeout = 5 * 1000; + + private static final int readTimout = 10 * 1000; + + private static HttpUtils instance; + + private TrustManager[] trustAllCerts = {new TrustAllX509TrustManager()}; + + public static HttpUtils getInstance() { + if (instance == null) { + synchronized (HttpUtils.class) { + if (instance == null) { + instance = new HttpUtils(); + } + } + } + return instance; + } + + private HttpUtils() { + + try { + HttpsURLConnection.setDefaultHostnameVerifier(new NullhostNameVerifier()); + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + HttpURLConnection.setFollowRedirects(true); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + } + + public HttpURLConnection createConnection(String url) throws IOException { + + String encodeUrl = Uri.encode(url, ALLOWED_URL_CHARS); + HttpURLConnection conn = (HttpURLConnection) new URL(encodeUrl).openConnection(); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimout); + + return conn; + } + + public InputStream getInputStream(String url) { + InputStream is = null; + + try { + HttpURLConnection conn = createConnection(url); + conn.setRequestMethod("GET"); + is = conn.getInputStream(); + } catch (Exception e) { + e.printStackTrace(); + } + return is; + } + + public String getString(String url) { + String result = null; + InputStream is = null; + BufferedReader br = null; + + try { + is = getInputStream(url); + br = new BufferedReader(new InputStreamReader(is, CHARSET)); + String line = null; + StringBuffer sb = new StringBuffer(); + + while ((line = br.readLine()) != null) { + sb.append(line); + } + result = sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (br != null) { + br.close(); + } + } catch (IOException e) { + + } + + try { + if (is != null) { + is.close(); + } + } catch (IOException e) { + + } + + } + return result; + } + + public String postString(String url, String params) { + String result = null; + OutputStream os = null; + InputStream is = null; + BufferedReader br = null; + + try { + HttpURLConnection conn = createConnection(url); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + + conn.setRequestProperty("Content_Type", "application/json;charset= " + CHARSET); + + if (params != null) { + os = conn.getOutputStream(); + DataOutputStream dos = new DataOutputStream(os); + dos.write(params.getBytes(CHARSET)); + dos.flush(); + dos.close(); + ; + } + + is = conn.getInputStream(); + br = new BufferedReader(new InputStreamReader(is, CHARSET)); + String line = null; + + StringBuffer sb = new StringBuffer(); + + while ((line = br.readLine()) != null) { + sb.append(line); + } + + result = sb.toString(); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + try { + if (is != null) { + is.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return result; + } + + + private boolean shouldBeProcessed(HttpURLConnection conn) throws IOException { + return conn.getResponseCode() == 200; + } + + private static class NullhostNameVerifier implements HostnameVerifier { + + public NullhostNameVerifier() { + + } + + @Override + public boolean verify(String host, SSLSession session) { + return true; + } + } + + private static class TrustAllX509TrustManager implements X509TrustManager { + + + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/ImageHelper.java b/app/src/main/java/com/lechange/demo/business/util/ImageHelper.java new file mode 100644 index 0000000..7f4505e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/ImageHelper.java @@ -0,0 +1,209 @@ +package com.lechange.demo.business.util; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.BitmapFactory.Options; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.util.LruCache; + +import com.lechange.demo.business.util.TaskPoolHelper.RunnableTask; +import com.lechange.opensdk.utils.LCOpenSDK_Utils; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +public class ImageHelper { + + private final static String TAG = "ImageHelper"; + private static Options mDefaultOption; + //最近最少使用算法的缓存策略 + private static LruCache mImageCache = new LruCache(100); + + static{ + mDefaultOption = new Options(); + //demo里面为了降低使用内存,图片缩小了一倍 + mDefaultOption.inSampleSize = 2; + mDefaultOption.inPreferredConfig = Config.RGB_565; + } + + + + public static void loadRealImage(final String url, final Handler handler) { + downloadImage(url, "real", handler); + } + + /** + * 加载普通图片(缓存) + * @param url + * @param key + * @param handler + */ + public static void loadCacheImage(final String url, final Handler handler) { + String[] imageIDBuffer = url.split("[/?]"); + final String imageID = imageIDBuffer[imageIDBuffer.length - 2]; + Drawable drawable = mImageCache.get(imageID); + if(drawable != null){ + Message msg = new Message(); + msg.what = url.hashCode(); + msg.obj = drawable; + handler.handleMessage(msg); + } + else{ + downloadImage(url, imageID, handler); + } + } + + + + /** + * 加载加密图片(实时) + * @param url + * @param key + * @param handler + */ + public static void loadRealImage(final String url,String deviceId, String key, final Handler handler) { + downloadImage(url, "real",deviceId, key, handler); + } + + + /** + * 加载加密图片(缓存) + * @param url + * @param key + * @param handler + */ + public static void loadCacheImage(final String url,final String deviceId, String key, final Handler handler) { + String[] imageIDBuffer = url.split("[/?]"); + final String imageID = imageIDBuffer[imageIDBuffer.length - 2]; + Drawable drawable = mImageCache.get(imageID); + if(drawable != null){ + Message msg = new Message(); + msg.what = url.hashCode(); + msg.obj = drawable; + handler.handleMessage(msg); + } + else{ + downloadImage(url, imageID,deviceId, key, handler); + } + } + + + /** + * 下载普通图片任务 + * @param url + * @param imageID + * @param handler + */ + private static void downloadImage(final String url, final String imageID, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask(imageID) { + @Override + public void run() { + // TODO Auto-generated method stub + Drawable drawable = null; + try { + //创建一个url对象 + URL resurl = new URL(url); + //设置超时时间 + HttpURLConnection urlConn = (HttpURLConnection) resurl.openConnection(); + urlConn.setConnectTimeout(5000); + urlConn.setReadTimeout(5000); + //打开URL对应的资源输入流 + InputStream is= urlConn.getInputStream(); + //从InputStream流中解析出图片 + Bitmap bitmap = BitmapFactory.decodeStream(is, null, mDefaultOption); + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + //加入缓存 + mImageCache.put(imageID, drawable); + //关闭输入流 + is.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + // 解析设备列表信息 + handler.obtainMessage(url.hashCode(), drawable).sendToTarget(); // 发送成功消息到界面 + } + }); + } + + /** + * 下载加密图片任务 + * @param url + * @param imageID + * @param key + * @param handler + */ + private static void downloadImage(final String url, final String imageID, final String deviceId,final String key, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask(imageID) { + @Override + public void run() { + // TODO Auto-generated method stub + Drawable drawable = null; + try { + //创建一个url对象 + URL resurl = new URL(url); + //设置超时时间 + HttpURLConnection urlConn = (HttpURLConnection) resurl.openConnection(); + urlConn.setConnectTimeout(5000); + urlConn.setReadTimeout(5000); + //打开URL对应的资源输入流 + InputStream is= urlConn.getInputStream(); + //从InputStream流中解析出图片 + ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); + byte[] buff = new byte[500]; + int rc = 0; + int length = 0; + while((rc = is.read(buff,0,500)) >0) + { + length += rc; + swapStream.write(buff,0,rc); + } + + byte[] srcBuf = swapStream.toByteArray(); + byte[] dstBuf = new byte[500000]; + int[] dstLen = new int[1]; + dstLen[0] = 500000; + Bitmap bitmap; //=null + switch(LCOpenSDK_Utils.decryptPic(srcBuf,length,deviceId,key,dstBuf,dstLen)){ + case 0: //解密成功 + bitmap = BitmapFactory.decodeByteArray(dstBuf, 0, dstLen[0], mDefaultOption); + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + break; + case 3: //图片非加密 + bitmap = BitmapFactory.decodeByteArray(srcBuf, 0, length, mDefaultOption); + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + break; + default: //解密失败 + break; + } + //加入缓存 + mImageCache.put(imageID, drawable); + //关闭输入流 + is.close(); + swapStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + // 解析设备列表信息 + handler.obtainMessage(url.hashCode(), drawable).sendToTarget(); // 发送成功消息到界面 + } + }); + } + + public static void clear() { + TaskPoolHelper.clearTask(); + mImageCache.evictAll(); + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/MD5Helper.java b/app/src/main/java/com/lechange/demo/business/util/MD5Helper.java new file mode 100644 index 0000000..0f91ab3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/MD5Helper.java @@ -0,0 +1,91 @@ +package com.lechange.demo.business.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5Helper +{ + private static byte[] hex = new byte[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + /** + * 对字符串进行MD5加密 + * @param rawString 要加密的字符串 + * @return MD5摘要码 + */ + public static String encode(String rawString) + { + String md5String = null; + + try + { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + md5.update(rawString.getBytes()); + md5String = convertToHexString(md5.digest()); + } + catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + } + + if (null != md5String) + { + return md5String.toUpperCase(); + } + + return md5String; + } + + public static String encodeToLowerCase(String rawString){ + return encode(rawString).toLowerCase(); + } + + /** + * 对文件全文生成MD5摘要 + * @param file 要加密的文件 + * @return MD5摘要码 + */ + public static String getMD5(File file) { + FileInputStream fis = null; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + + fis = new FileInputStream(file); + byte[] buffer = new byte[2048]; + int length = -1; + while ((length = fis.read(buffer)) != -1) { + md.update(buffer, 0, length); + } + byte[] b = md.digest(); + return convertToHexString(b);//byteToHexString(b); + // 16位加密 + // return buf.toString().substring(8, 24); + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } finally { + try { + fis.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + + private static String convertToHexString(byte[] digests) + { + byte[] md5String = new byte[digests.length * 2]; + + int index = 0; + for (byte digest : digests) + { + md5String[index] = hex[(digest >> 4) & 0x0F]; + md5String[index + 1] = hex[digest &0x0F]; + index += 2; + } + + return new String(md5String); + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/MediaPlayHelper.java b/app/src/main/java/com/lechange/demo/business/util/MediaPlayHelper.java new file mode 100644 index 0000000..b51fd22 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/MediaPlayHelper.java @@ -0,0 +1,132 @@ +package com.lechange.demo.business.util; + +import android.app.Activity; +import android.os.Environment; +import android.view.WindowManager; + +import java.io.File; +import java.text.SimpleDateFormat; + +public class MediaPlayHelper { + + private final static String ProjectName = "LechangeDemo"; + + public enum DHFilesType { + DHImage, + DHVideo + } + + + public static void setFullScreen(Activity activity) { + activity.getWindow().setFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + public static void quitFullScreen(Activity activity) { + final WindowManager.LayoutParams attrs = activity.getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + activity.getWindow().setAttributes(attrs); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + + + /** + * 创建文件路径 + * @param file + * @param filePath + * @return + */ + public static boolean createFilePath(File file, String filePath) { + int index = filePath.indexOf("/"); + if (index == -1) { + return false; + } + if (index == 0) { + filePath = filePath.substring(index + 1, filePath.length()); + index = filePath.indexOf("/"); + } + String path = filePath.substring(0, index); + File fPath; + if (file == null) { + fPath = new File(path); + } else { + fPath = new File(file.getPath() + "/" + path); + } + if (!fPath.exists()) { + if (!fPath.mkdir()) // SD卡已满无法在下载文件 + { + return false; + } + } + if (index < (filePath.length() - 1)) { + String exPath = filePath.substring(index + 1, filePath.length()); + createFilePath(fPath, exPath); + } + return true; + + } + + /** + * 生成抓图路径或录像存放路径 + * + */ + public static String getCaptureAndVideoPath(DHFilesType type, String cameraName) { + String path = null; + String picType = null; + java.util.Date now = new java.util.Date(); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + String sdPath = Environment.getExternalStorageDirectory().getPath(); + if(type == DHFilesType.DHImage){ + picType = "image"; + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + cameraName + ".jpg"; + } else{ + picType = "video"; + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + cameraName + ".mp4"; + } + createFilePath(null, path); + return path; + } + + /** + * 生成下载录像存放路径 + * + */ + public static String getDownloadVideoPath(int type, String recordID, long startTime) { + String path = null; + String sdPath = Environment.getExternalStorageDirectory().getPath(); + String picType = "download"; + picType += type==0 ? "_cloud" : "_remote"; + + java.util.Date now = new java.util.Date(startTime); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + recordID + ".mp4"; + createFilePath(null, path); + return path; + } + + /** + * 删除下载录像存放的录像 + * + */ + public static void deleteDownloadVideo(String recordID, long startTime) { + String path = null; + String sdPath = Environment.getExternalStorageDirectory().getPath(); + String picType = "download"; + java.util.Date now = new java.util.Date(startTime); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + recordID + ".mp4"; + + File soFile = new File(path); + if (soFile.exists()) { + soFile.delete(); + } + + } + +} diff --git a/app/src/main/java/com/lechange/demo/business/util/OpenApiHelper.java b/app/src/main/java/com/lechange/demo/business/util/OpenApiHelper.java new file mode 100644 index 0000000..553c16a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/OpenApiHelper.java @@ -0,0 +1,192 @@ +package com.lechange.demo.business.util; + +import android.os.Handler; +import android.util.Log; + +import org.json.JSONObject; + + +public class OpenApiHelper { + + public final static String tag = "OpenApiHelper"; + + + public static void getAccessToken(final String host, + final String phoneNumber, final String appid, + final String appsecret, final Handler handler) { + // 拼装url + String url = ""; + if (host.endsWith(":443")) { + url = "https://" + host + "/openapi/accessToken"; + } else { + url = "http://" + host + "/openapi/accessToken"; + } + Log.d(tag, url); + getToken(url, phoneNumber, appid, appsecret, handler); + } + + public static void getUserToken(final String host, + final String phoneNumber, final String appid, + final String appsecret, final Handler handler) { + // 拼装url + String url = ""; + if (host.endsWith(":443")) { + url = "https://" + host + "/openapi/userToken"; + } else { + url = "http://" + host + "/openapi/userToken"; + } + Log.d(tag, url); + getToken(url, phoneNumber, appid, appsecret, handler); + } + + public static void userBindSms(final String host, final String phoneNumber, + final String appid, final String appsecret, final Handler handler) { + String url = ""; + if (host.endsWith(":443")) { + url = "https://" + host + "/openapi/userBindSms"; + } else { + url = "http://" + host + "/openapi/userBindSms"; + } + Log.d(tag, url); + + int code = -1; + String result = null; + try { + JSONObject body = new JSONObject(); + String data = "{phone: \"" + phoneNumber + "\"}"; + body.put("params", new JSONObject(data)); + body.put("id", "1");// id号 随机值 + + body.put( + "system", + new JSONObject(SignHelper.getSystem(data, appid, appsecret, + "1.1"))); + + String response = HttpUtils.getInstance().postString(url, body.toString()); + + JSONObject res = new JSONObject((String) response); + if (res.getJSONObject("result").getString("code").equals("0")) { + code = 0; + result = res.getJSONObject("result").getString("msg"); + } else { + code = -1; + result = res.getJSONObject("result").getString("msg"); + + } + + } catch (Exception e) { + e.printStackTrace(); + result = e.getMessage(); + } + + handler.obtainMessage(code, result).sendToTarget(); + + } + + public static void userBind(final String host, final String phoneNumber, + final String appId, String appSecret, final String smsCode, + final Handler handler) { + String url = ""; + if (host.endsWith(":443")) { + url = "https://" + host + "/openapi/userBind"; + } else { + url = "http://" + host + "/openapi/userBind"; + } + Log.d(tag, url); + + + int code = -1; + String result = null; + try { + JSONObject body = new JSONObject(); + String data = "{phone: \"" + phoneNumber + "\",smsCode:\"" + smsCode + + "\"}"; + body.put("params", new JSONObject(data)); + body.put("id", "1");// id号 随机值 + body.put( + "system", + new JSONObject(SignHelper.getSystem(data, appId, appSecret, + "1.1"))); + + + String response = HttpUtils.getInstance().postString(url, body.toString()); + Log.d("Uriah", "response" + response); + JSONObject res = new JSONObject((String) response); + if (res.getJSONObject("result").getString("code").equals("0")) { + code = 0; + result = res.getJSONObject("result").getString("msg"); + } else { + code = -1; + result = res.getJSONObject("result").getString("msg"); + + } + + } catch (Exception e) { + e.printStackTrace(); + result = e.getMessage(); + } + + handler.obtainMessage(code, result).sendToTarget(); + } + + private static void getToken(final String host, final String phoneNumber, + final String appid, final String appsecret, final Handler handler) { + + int code = -1; + String result = null; + try { + JSONObject body = new JSONObject(); + String data = "{phone:\"" + phoneNumber + "\"}"; + body.put("params", new JSONObject(data)); + body.put("id", "1");// id号 随机值 + body.put( + "system", + new JSONObject(SignHelper.getSystem(data, appid, appsecret, + "1.1"))); + + String response = HttpUtils.getInstance().postString(host, body.toString()); + + if(response != null){ + JSONObject res = new JSONObject((String) response); + if (res.getJSONObject("result").getString("code").equals("0")) { + code = 0; + if (res.getJSONObject("result").getJSONObject("data") + .has("accessToken")) { + result = res.getJSONObject("result") + .getJSONObject("data") + .getString("accessToken"); + } else { + result = res.getJSONObject("result") + .getJSONObject("data") + .getString("userToken"); + } + } else { + code = -1; + result = res.getJSONObject("result").getString("msg"); + // 界面展示和业务需要 特殊处理 + if (res.getJSONObject("result").getString("code") + .equals("TK1004")) + code = 1; + if (res.getJSONObject("result").getString("code") + .equals("TK1006")) + code = 1; + + } + }else{ + code = -1; + result = "get Token failed,Response is null"; + } + + } catch (Exception e) { + e.printStackTrace(); + result = e.getMessage(); + } + + handler.obtainMessage(code, result).sendToTarget(); + + } + +} + + + diff --git a/app/src/main/java/com/lechange/demo/business/util/PermissionHelper.java b/app/src/main/java/com/lechange/demo/business/util/PermissionHelper.java new file mode 100644 index 0000000..2aba920 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/PermissionHelper.java @@ -0,0 +1,43 @@ +package com.lechange.demo.business.util; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.v4.app.ActivityCompat; + +/** + * @author 31833 + * @version Version Time Description
+ * 1.0 2017/4/27 15:42 运行时权限申请帮助类 + */ + +public class PermissionHelper { + + private static boolean isHasPermission(Context context, String permission){ + + if(Build.VERSION.SDK_INT < 23) { + return true; + } + + return ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; + + } + + + public static void requestPermission(Activity activity, String[] permissions) { + boolean flag = true; + + for (String permission : permissions) { + if(isHasPermission(activity,permission)){ + flag = false; + break; + } + continue; + } + + if(flag) { + ActivityCompat.requestPermissions(activity, permissions, permissions.length); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/SignHelper.java b/app/src/main/java/com/lechange/demo/business/util/SignHelper.java new file mode 100644 index 0000000..28a829f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/SignHelper.java @@ -0,0 +1,84 @@ +package com.lechange.demo.business.util; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class SignHelper { + public static String getSystem(String data, String appId, String appSecret, String sysVersion){ + StringBuffer sign = new StringBuffer(); + try { + JSONObject params = new JSONObject(data); + Iterator it = params.keys(); + List keyList = new ArrayList(); + while(it.hasNext()){ + keyList.add(it.next().toString()); + } + Collections.sort(keyList); + for(String key : keyList){ + sign.append("").append(key).append(":").append(params.get(key).toString()).append(","); + } + //System.out.println(sign); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String time = Long.toString(System.currentTimeMillis()/1000); + String nonce = randomString(32); + sign.append("time").append(":").append(time).append(","); + sign.append("nonce").append(":").append(nonce).append(","); + sign.append("appSecret").append(":").append(appSecret); + //System.out.println(sign); + JSONObject system = new JSONObject(); + try { + system.put("ver", sysVersion); + system.put("sign", md5Hex(sign.toString())); + system.put("appId", appId); + system.put("time", time); + system.put("nonce", nonce); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return system.toString(); + } + + public static String md5Hex(String str) { + try { + byte hash[] = MessageDigest.getInstance("MD5").digest(str.getBytes()); + StringBuilder hex = new StringBuilder(hash.length * 2); + for (byte b : hash) { + if ((b & 0xFF) < 0x10) { + hex.append("0"); + } + hex.append(Integer.toHexString(b & 0xFF)); + } + return hex.toString(); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + final static String VEC = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + private static Random rand; + public static String randomString(int length) { + if (rand == null) { + rand = new Random(System.currentTimeMillis()); + } + String ret = ""; + for (int i = 0; i < length; i++) { + ret = ret + VEC.charAt(rand.nextInt(VEC.length())); + } + return ret; + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/TaskPoolHelper.java b/app/src/main/java/com/lechange/demo/business/util/TaskPoolHelper.java new file mode 100644 index 0000000..8f5aa65 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/TaskPoolHelper.java @@ -0,0 +1,102 @@ +package com.lechange.demo.business.util; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.locks.LockSupport; + +public class TaskPoolHelper { + private final static String TAG = "TaskPoolHelper"; + + /** + * 构造具备过滤的task + */ + public static abstract class RunnableTask implements Runnable{ + public String mTaskID; + + public RunnableTask(String taskID){ + this.mTaskID = taskID; + } + } + + //private static ExecutorService mPool = Executors.newFixedThreadPool(3); + //队列属性的task + private static ArrayBlockingQueue mQueueTask = new ArrayBlockingQueue(50); + private static List mFilteTask = new ArrayList(); + private static Thread mQueueThread; + + //实时属性的task + private static RunnableTask mRealTask; //=null + private static Thread mRealThread; + + static { + mQueueThread = new Thread() { + @Override + public void run() { + // TODO Auto-generated method stub + super.run(); + while (true) { + try { + //自带阻塞光环 + RunnableTask task = mQueueTask.take(); + task.run(); + mFilteTask.remove(task.mTaskID); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + mQueueThread.start(); + + mRealThread = new Thread() { + @Override + public void run() { + // TODO Auto-generated method stub + super.run(); + while (true) { + if (mRealTask == null) { + LockSupport.park(); + } else { + RunnableTask task = mRealTask; + mRealTask = null; + task.run(); + } + } + } + }; + mRealThread.start(); + } + + + public static void addTask(RunnableTask task) { + //过滤 + if (task.mTaskID.equals("real")) { + mRealTask = task; + LockSupport.unpark(mRealThread); + return; + } + if (mFilteTask.contains(task.mTaskID)) { + return; + } + + try { + mQueueTask.add(task); + mFilteTask.add(task.mTaskID); + } catch(IllegalStateException e) { + Log.w(TAG, e.getMessage()); + mQueueTask.clear(); + mFilteTask.clear(); + } + } + + + public static void clearTask(){ + mQueueTask.clear(); + mFilteTask.clear(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/business/util/TimeHelper.java b/app/src/main/java/com/lechange/demo/business/util/TimeHelper.java new file mode 100644 index 0000000..0d2b00c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/TimeHelper.java @@ -0,0 +1,44 @@ +package com.lechange.demo.business.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class TimeHelper { + + public static String getDateHMS(long time) { + SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss"); + Date date = new Date(time); + String strdate = format.format(date); + return strdate;// 2012-10-03 23:41:31 + } + + public static String getTimeHMS(long time) { + SimpleDateFormat format1 = new SimpleDateFormat("HH:mm:ss"); + Date date = new Date(time); + String date1 = format1.format(date); + return date1;// 2012-10-03 23:41:31 + } + + public static String getDateEN(long time) { + SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(time); + String date1 = format1.format(date); + return date1;// 2012-10-03 23:41:31 + } + + public static long getTimeStamp(String time) { + SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = null; + try { + date = format1.parse(time); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (date == null) { + return -1; + } + return date.getTime(); + } +} diff --git a/app/src/main/java/com/lechange/demo/business/util/WifiManagerUtil.java b/app/src/main/java/com/lechange/demo/business/util/WifiManagerUtil.java new file mode 100644 index 0000000..a87941f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/business/util/WifiManagerUtil.java @@ -0,0 +1,379 @@ +package com.lechange.demo.business.util; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.DhcpInfo; +import android.net.NetworkInfo; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; + +import java.util.Iterator; +import java.util.List; +import java.util.Locale; + +public class WifiManagerUtil { + private WifiManager mWifiManager; + private WifiInfo mWifiInfo; + private List mWifiList; + private List mWifiConfiguration; + private WifiManager.WifiLock mWifiLock; + private static int WIFI_TYPE_NO_PASSWORD = 1; + private static int WIFI_TYPE_WEP = 2; + private static int WIFI_TYPE_WPA = 3; + + @SuppressLint("MissingPermission") + public WifiManagerUtil(Context context) { + this.mWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); + this.mWifiInfo = this.mWifiManager.getConnectionInfo(); + } + + @SuppressLint("MissingPermission") + public void openWifi() { + if (!this.mWifiManager.isWifiEnabled()) { + this.mWifiManager.setWifiEnabled(true); + } + + } + + @SuppressLint("MissingPermission") + public void closeWifi() { + if (this.mWifiManager.isWifiEnabled()) { + this.mWifiManager.setWifiEnabled(false); + } + + } + + public boolean isWifi5G(Context context) { + int freq = 0; + if (Build.VERSION.SDK_INT > 21) { + freq = this.mWifiInfo.getFrequency(); + } else { + String ssid = this.mWifiInfo.getSSID(); + if (ssid != null && ssid.length() > 2) { + String ssidTemp = ssid.substring(1, ssid.length() - 1); + @SuppressLint("MissingPermission") + List scanResults = this.mWifiManager.getScanResults(); + Iterator var6 = scanResults.iterator(); + + while(var6.hasNext()) { + ScanResult scanResult = (ScanResult)var6.next(); + if (scanResult.SSID.equals(ssidTemp)) { + freq = scanResult.frequency; + break; + } + } + } + } + + return freq > 4900 && freq < 5900; + } + + @SuppressLint("MissingPermission") + public int checkState() { + return this.mWifiManager.getWifiState(); + } + + public void acquireWifiLock() { + this.mWifiLock.acquire(); + } + + public void releaseWifiLock() { + if (this.mWifiLock.isHeld()) { + this.mWifiLock.acquire(); + } + + } + + public void creatWifiLock() { + this.mWifiLock = this.mWifiManager.createWifiLock("Test"); + } + + public List getConfiguration() { + return this.mWifiConfiguration; + } + + @SuppressLint("MissingPermission") + public void connectConfiguration(int index) { + if (index <= this.mWifiConfiguration.size()) { + this.mWifiManager.enableNetwork(((WifiConfiguration)this.mWifiConfiguration.get(index)).networkId, true); + } + } + + @SuppressLint("MissingPermission") + public void startScan() { + this.mWifiManager.startScan(); + this.mWifiList = this.mWifiManager.getScanResults(); + this.mWifiConfiguration = this.mWifiManager.getConfiguredNetworks(); + } + + public List getWifiList() { + return this.mWifiList; + } + + public StringBuilder lookUpScan() { + StringBuilder stringBuilder = new StringBuilder(); + + for(int i = 0; i < this.mWifiList.size(); ++i) { + stringBuilder.append("Index_" + (new Integer(i + 1)).toString() + ":"); + stringBuilder.append(((ScanResult)this.mWifiList.get(i)).toString()); + stringBuilder.append("/n"); + } + + return stringBuilder; + } + + public String getMacAddress() { + return this.mWifiInfo == null ? "NULL" : this.mWifiInfo.getMacAddress(); + } + + public String getBSSID() { + return this.mWifiInfo == null ? "NULL" : this.mWifiInfo.getBSSID(); + } + + public int getIPAddress() { + return this.mWifiInfo == null ? 0 : this.mWifiInfo.getIpAddress(); + } + + public int getNetworkId() { + return this.mWifiInfo == null ? 0 : this.mWifiInfo.getNetworkId(); + } + + public String getWifiInfo() { + return this.mWifiInfo == null ? "NULL" : this.mWifiInfo.toString(); + } + + @SuppressLint("MissingPermission") + public boolean addNetwork(WifiConfiguration wcg) { + int wcgID = this.mWifiManager.addNetwork(wcg); + return this.mWifiManager.enableNetwork(wcgID, true); + } + + @SuppressLint("MissingPermission") + public void disconnectWifi(int netId) { + this.mWifiManager.disableNetwork(netId); + this.mWifiManager.disconnect(); + } + + @SuppressLint("MissingPermission") + public WifiConfiguration createWifiInfo(String SSID, String Password, int Type) { + WifiConfiguration config = new WifiConfiguration(); + config.allowedAuthAlgorithms.clear(); + config.allowedGroupCiphers.clear(); + config.allowedKeyManagement.clear(); + config.allowedPairwiseCiphers.clear(); + config.allowedProtocols.clear(); + config.SSID = "\"" + SSID + "\""; + WifiConfiguration tempConfig = this.IsExsits(SSID); + if (tempConfig != null) { + this.mWifiManager.removeNetwork(tempConfig.networkId); + } + + if (Type == WIFI_TYPE_NO_PASSWORD) { + config.wepKeys[0] = "\"\""; + config.allowedKeyManagement.set(0); + config.wepTxKeyIndex = 0; + } + + if (Type == WIFI_TYPE_WEP) { + config.hiddenSSID = true; + config.wepKeys[0] = "\"" + Password + "\""; + config.allowedAuthAlgorithms.set(1); + config.allowedGroupCiphers.set(3); + config.allowedGroupCiphers.set(2); + config.allowedGroupCiphers.set(0); + config.allowedGroupCiphers.set(1); + config.allowedKeyManagement.set(0); + config.wepTxKeyIndex = 0; + } + + if (Type == WIFI_TYPE_WPA) { + config.preSharedKey = "\"" + Password + "\""; + config.hiddenSSID = true; + config.allowedAuthAlgorithms.set(0); + config.allowedGroupCiphers.set(2); + config.allowedKeyManagement.set(1); + config.allowedPairwiseCiphers.set(1); + config.allowedGroupCiphers.set(3); + config.allowedPairwiseCiphers.set(2); + config.status = 2; + } + + return config; + } + + @SuppressLint("MissingPermission") + private WifiConfiguration IsExsits(String SSID) { + List existingConfigs = this.mWifiManager.getConfiguredNetworks(); + if (existingConfigs == null) { + return null; + } else { + Iterator var3 = existingConfigs.iterator(); + + WifiConfiguration existingConfig; + do { + if (!var3.hasNext()) { + return null; + } + + existingConfig = (WifiConfiguration)var3.next(); + } while(!existingConfig.SSID.equals("\"" + SSID + "\"")); + + return existingConfig; + } + } + @SuppressLint("MissingPermission") + public boolean connectWifi(String SSID, String passWord) { + if (Build.VERSION.SDK_INT >= 23) { + WifiConfiguration tempConfig = this.IsExsits(SSID); + if (tempConfig != null) { + return this.mWifiManager.enableNetwork(tempConfig.networkId, true); + } + } + + return this.addNetwork(this.createWifiInfo(SSID, passWord, WIFI_TYPE_NO_PASSWORD)); + } + @SuppressLint("MissingPermission") + public String getGatewayIp() { + DhcpInfo dhcpInfo = this.mWifiManager.getDhcpInfo(); + if (dhcpInfo != null) { + long gatewayIps = (long)dhcpInfo.gateway; + return this.long2ip(gatewayIps); + } else { + return ""; + } + } + + public String long2ip(long ip) { + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(String.valueOf((int)(ip & 255L))); + stringBuffer.append('.'); + stringBuffer.append(String.valueOf((int)(ip >> 8 & 255L))); + stringBuffer.append('.'); + stringBuffer.append(String.valueOf((int)(ip >> 16 & 255L))); + stringBuffer.append('.'); + stringBuffer.append(String.valueOf((int)(ip >> 24 & 255L))); + return stringBuffer.toString(); + } + + @SuppressLint("MissingPermission") + public WifiInfo getCurrentWifiInfo() { + this.mWifiInfo = this.mWifiManager.getConnectionInfo(); + return this.mWifiInfo; + } + @SuppressLint("MissingPermission") + public boolean isWifi(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) { + return false; + } else { + NetworkInfo curNetwork = connectivity.getActiveNetworkInfo(); + if (curNetwork != null && curNetwork.getType() == ConnectivityManager.TYPE_WIFI) { + return true; + } + } + return false; + } + + public int getWifiEncryption(String capabilities) { + int encryption = 255; + String cap = capabilities.toUpperCase(Locale.US); + if (cap.indexOf("WPA2") != -1) { + if (cap.indexOf("WPA2-PSK-TKIP") != -1) { + encryption = 6; + } else if (cap.indexOf("WPA2-PSK-AES") != -1) { + encryption = 7; + } else if (cap.indexOf("WPA2-TKIP") != -1) { + encryption = 10; + } else if (cap.indexOf("WPA2-AES") != -1) { + encryption = 11; + } else if (cap.indexOf("WPA2-PSK-CCMP") != -1) { + encryption = 12; + } + } else if (cap.indexOf("WPA") != -1) { + if (cap.indexOf("WPA-PSK-TKIP") != -1) { + encryption = 4; + } else if (cap.indexOf("WPA-PSK-CCMP") != -1) { + encryption = 5; + } else if (cap.indexOf("WPA-TKIP") != -1) { + encryption = 8; + } else if (cap.indexOf("WPA-CCMP") != -1) { + encryption = 9; + } + } else if (cap.indexOf("WEP") != -1) { + if (cap.indexOf("WEP_Open") != -1) { + encryption = 2; + } else if (cap.indexOf("WEP_Shared") != -1) { + encryption = 3; + } + } else { + encryption = 255; + } + + return encryption; + } + + public ScanResult getScanResult() { + ScanResult scanResult = null; + if (this.mWifiManager == null) { + return null; + } else { + this.getCurrentWifiInfo(); + if (this.mWifiInfo.getSSID() != null) { + try { + if (this.mWifiList == null) { + this.startScan(); + } + + if (this.mWifiList == null) { + return null; + } + + Iterator var2 = this.mWifiList.iterator(); + + while(var2.hasNext()) { + ScanResult s = (ScanResult)var2.next(); + if (s.SSID.replaceAll("\"", "").equals(this.mWifiInfo.getSSID().replaceAll("\"", ""))) { + scanResult = s; + break; + } + } + } catch (Exception var4) { + return null; + } + } + + return scanResult; + } + } + + public boolean isNoPasswordWifi() { + ScanResult scanResult = this.getScanResult(); + if (scanResult == null) { + return false; + } else { + int encypt = this.getWifiEncryption(scanResult.capabilities); + return encypt == 2 || encypt == 255; + } + } + + public String getDoorbellSSID(String deviceSn) { + return "Doorbell-" + deviceSn; + } + + public boolean isConnectedDoorbellHot(String deviceSn) { + WifiInfo wifiInfo = this.getCurrentWifiInfo(); + if (wifiInfo == null) { + return false; + } else { + String ssid = this.getDoorbellSSID(deviceSn); + ssid = "\"" + ssid + "\""; + return wifiInfo.getSSID().equals(ssid); + } + } + + +} diff --git a/app/src/main/java/com/lechange/demo/common/CommonTitle.java b/app/src/main/java/com/lechange/demo/common/CommonTitle.java new file mode 100644 index 0000000..d884e4a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/CommonTitle.java @@ -0,0 +1,264 @@ +package com.lechange.demo.common; + + +import android.content.Context; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; + +/** + * 工具类使用说明:左按钮,中间按钮,右按钮,均支持图片和文字背景二选一,左右按钮默认支持图片,中间按钮默认支持文字 + * xml使用注意:需要在xml文件中设置宽高和背景色 + * + */ +public class CommonTitle extends RelativeLayout +{ + /** + * 左侧按钮ID + */ + public static final int ID_LEFT = 0; + + /** + * 右侧按钮ID + */ + public static final int ID_RIGHT = 1; + + /** + * 中间按钮ID, 暂时不加监听器 + */ + public static final int ID_CENTER = 2; + + /** + * 左侧按钮 + */ + private ImageView mTitleLeft; + + + /** + * 右侧按钮 + */ + private ImageView mTitleRight; + + + /** + * 文字标题 + */ + private TextView mTitleCenter; + + /** + * 点击监听 + */ + private OnTitleClickListener mListener; + + private View mBottom; + + /** + * 默认隐藏左2和右2的按钮 ,创建一个新的实例CommonTitle. + * @param context + * @param attrs + */ + public CommonTitle(Context context, AttributeSet attrs) { + super(context, attrs); + LayoutInflater.from(context).inflate(R.layout.widget_common_title, this); + initView(); + setListeners(); + } + + private void initView() { + mBottom = findViewById(R.id.bottom_line); + mTitleLeft = (ImageView) findViewById(R.id.title_left); + mTitleRight = (ImageView) findViewById(R.id.title_right); + + mTitleCenter = (TextView) findViewById(R.id.title_center); + mTitleCenter.setTextColor(getResources().getColor(R.color.title_color_center)); + mTitleCenter.setTextSize(TypedValue.COMPLEX_UNIT_PX, + getResources().getDimensionPixelSize(R.dimen.text_size_large)); + } + + private void setListeners() { + mTitleLeft.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mListener != null) { + mListener.onCommonTitleClick(ID_LEFT); + } + + } + }); + + + mTitleRight.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mListener != null) { + mListener.onCommonTitleClick(ID_RIGHT); + } + + } + }); + } + + /** + * 初始化参数,按钮均可支持图片或者文字背景 + * + * @param leftResId 左按钮 + * @param rightResId 右按钮 + * @param centerResId 中间text + * + */ + + public void initView(int leftResId, int rightResId, int centerResId) { + setTitleLeftView(leftResId); + setTitleRightView(rightResId); + setTitleCenterView(centerResId, 0, 0); + } + + + public TextView getTextViewCenter() { + return mTitleCenter; + } + + + /** + *

+ * 设置按钮是否可用 + *

+ */ + public void setTitleEnabled(boolean enabled, int id) { + View v = findView(id); + if (v != null) { + v.setEnabled(enabled); + } + } + + private View findView(int id) { + switch (id) { + case ID_LEFT: + return mTitleLeft; + case ID_RIGHT: + return mTitleRight; + case ID_CENTER: + return mTitleCenter; + default: + return null; + } + } + + public void setTitleLeftView(int resId) { + setTitleLeft(resId); + } + + public void setTitleRightView(int resId) { + setTitleRight(resId); + } + + public void setTitleCenterView(int resId, int colorId, int textSizeDimenId) { + setTitleCenter(resId); + setTextColorCenter(colorId); + setTextSizeCenter(textSizeDimenId); + } + + + /** + * 设置左边按钮图片 + * @param leftResId + */ + private void setTitleLeft(int leftResId) { + if (leftResId != 0) { + if (mTitleLeft != null && mTitleLeft.getVisibility() != View.VISIBLE) + mTitleLeft.setVisibility(VISIBLE); + mTitleLeft.setImageResource(leftResId); + }else { + if (mTitleLeft != null) + mTitleLeft.setVisibility(INVISIBLE); + } + } + + + /** + * 设置右边按钮图片 + * @param rightResId + */ + private void setTitleRight(int rightResId) { + if (rightResId != 0) { + if (mTitleRight != null && mTitleRight.getVisibility() != View.VISIBLE) + mTitleRight.setVisibility(VISIBLE); + mTitleRight.setImageResource(rightResId); + }else { + if (mTitleRight != null) + mTitleRight.setVisibility(INVISIBLE); + } + } + + + /** + * 设置中间按钮文字 + * @param centerResId + */ + private void setTitleCenter(int centerResId) { + if (centerResId != 0) { + if (mTitleCenter != null && mTitleCenter.getVisibility() != View.VISIBLE) + mTitleCenter.setVisibility(VISIBLE); + mTitleCenter.setText(centerResId); + }else { + if (mTitleCenter != null) + mTitleCenter.setVisibility(INVISIBLE); + } + } + + public void setTextColorCenter(int colorId) { + if (mTitleCenter != null) { + mTitleCenter.setTextColor(colorId != 0 ? getResources().getColor(colorId) : getResources().getColor( + R.color.title_color_center)); + } + } + + + public void setTextSizeCenter(int textSizeDimenId) { + if (mTitleCenter != null) { + mTitleCenter.setTextSize(TypedValue.COMPLEX_UNIT_PX, + textSizeDimenId != 0 ? getResources().getDimensionPixelSize(textSizeDimenId) : getResources() + .getDimensionPixelSize(R.dimen.text_size_large)); + } + } + + public void setVisibleLeft(int flag) { + if (mTitleLeft != null) { + mTitleLeft.setVisibility(flag); + } + } + + + public void setVisibleRight(int flag) { + if (mTitleRight != null) { + mTitleRight.setVisibility(flag); + } + } + + + public void setVisibleCenter(int flag) { + if (mTitleCenter != null) { + mTitleCenter.setVisibility(flag); + } + } + + public void setVisibleBottom(int flag) { + if (mBottom != null) { + mBottom.setVisibility(flag); + } + } + + public void setOnTitleClickListener(OnTitleClickListener listener) { + mListener = listener; + } + + public interface OnTitleClickListener { + public void onCommonTitleClick(int id); + } +} diff --git a/app/src/main/java/com/lechange/demo/common/DatePicker.java b/app/src/main/java/com/lechange/demo/common/DatePicker.java new file mode 100644 index 0000000..6789eb6 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/DatePicker.java @@ -0,0 +1,254 @@ +package com.lechange.demo.common; + + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.AnticipateOvershootInterpolator; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lechange.demo.common.datepicker.AbstractWheel; +import com.lechange.demo.common.datepicker.OnWheelChangedListener; +import com.lechange.demo.common.datepicker.adapters.NumericWheelAdapter; +import com.yonsz.z1.R; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + + +@SuppressLint("SimpleDateFormat") +public class DatePicker extends LinearLayout { + private static final String TAG = "LCDatePicker"; + + public static final int ID_LEFT = 0; + public static final int ID_RIGHT = 1; + + private OnTimeClickListener mListener; + + private AbstractWheel mYearWheel; //滚轮-年 + private AbstractWheel mMonthWheel; //滚轮-月 + private AbstractWheel mDayWheel; //滚轮-日 + + private Button mCancel; //取消按钮(左边按钮) + private TextView mNotice; //提示信息(中间文本) + private Button mSearch; //搜索按钮(右边按钮) + + private Date mMinDate; //拾取器的最小日期 ,默认为当前时间往前50年 + private Date mMaxDate; //拾取器的最大日期,默认为当前时间往后50年 + private String mCurrentYear; //拾取器当前选中的年-yyyy + private String mCurrentMonth; //拾取器当前选中的月-MM + private String mCurrentDay; //拾取器当前选中的日-dd + + public DatePicker(Context context){ + super(context); + LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); + inflater.inflate(R.layout.widget_common_datepicker, this); + init(); + resetWheels(); + + } + + public DatePicker(Context context, AttributeSet attrs) { + super(context, attrs); + LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); + inflater.inflate(R.layout.widget_common_datepicker, this); + init(); + resetWheels(); + } + + /** + * 设置时间拾取器可选时间范围 + *

+ * @author 16552 2016年2月29日 上午9:44:34 + * @param minDate + * @param maxDate + */ + public void setMinMaxDate(Date minDate, Date maxDate) { + this.mMinDate = minDate; + this.mMaxDate = maxDate; + resetWheels(); + } + + + /** + * 设置按钮文本 + * @param leftText + * @param centerText + * @param rightText + */ + public void setText(String leftText,String centerText,String rightText){ + + mCancel.setText(leftText); + mNotice.setText(centerText); + mSearch.setText(rightText); + } + /** + * 获取时间拾取器当前选中的时间 + *

+ * @author 16552 2016年2月29日 上午9:44:18 + * @return + */ + public Date getSelectedDate() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + Log.d("Business",mCurrentYear + mCurrentMonth + mCurrentDay); + Date selectedDate = null; + try { + selectedDate = dateFormat.parse(mCurrentYear + mCurrentMonth + mCurrentDay ); + } catch (ParseException e) { + e.printStackTrace(); + Log.e(TAG, "getEndTime parse daile -> " + mCurrentYear + mCurrentMonth + mCurrentDay ); + } + return selectedDate == null ? new Date() : selectedDate; + } + + private void init() { + Date currentDate = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(currentDate); + calendar.add(Calendar.YEAR, 50); + mMaxDate = calendar.getTime(); + calendar.add(Calendar.YEAR, -100); + mMinDate = calendar.getTime(); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String dateString = sdf.format(currentDate); + mCurrentYear = dateString.substring(0, 4); + mCurrentMonth = dateString.substring(4, 6); + mCurrentDay = dateString.substring(6, 8); + + + mYearWheel = (AbstractWheel) findViewById(R.id.year_wheel); + mMonthWheel = (AbstractWheel) findViewById(R.id.month_wheel); + mDayWheel = (AbstractWheel) findViewById(R.id.day_wheel); + + mCancel = (Button) findViewById(R.id.cancel); + mNotice = (TextView) findViewById(R.id.notice); + mSearch = (Button) findViewById(R.id.search); + + mCancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + if(mListener != null) { + mListener.onCommonTimeClick(ID_LEFT); + } + + } + }); + + mSearch.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + if(mListener != null) { + mListener.onCommonTimeClick(ID_RIGHT); + } + + + } + }); + + } + + private void resetWheels() { + + + + + if(mYearWheel == null) + { + Log.d("tag","mYearWheel is null"); + } + mYearWheel.setViewAdapter(new NumericWheelAdapter(getContext(), mMinDate.getYear() + 1900, mMaxDate.getYear() + 1900, "%04d")); + mYearWheel.setCyclic(false); + mYearWheel.setInterpolator(new AnticipateOvershootInterpolator()); + mYearWheel.addChangingListener(new OnWheelChangedListener() { + + @Override + public void onChanged(AbstractWheel wheel, int oldValue, int newValue) { + String format = "%04d"; + mCurrentYear = String.format(format, newValue + (mMinDate.getYear() + 1900)); + resetDayWheelAdapter(); + } + }); + mYearWheel.setCurrentItem(Integer.valueOf(mCurrentYear) - (mMinDate.getYear() + 1900)); + + int thisMonth = Integer.valueOf(mCurrentMonth); + mMonthWheel.setViewAdapter(new NumericWheelAdapter(getContext(), 1,12, "%02d")); + mMonthWheel.setCyclic(true); + mMonthWheel.setInterpolator(new AnticipateOvershootInterpolator()); + mMonthWheel.addChangingListener(new OnWheelChangedListener() { + + @Override + public void onChanged(AbstractWheel wheel, int oldValue, int newValue) { + String format = "%02d"; + mCurrentMonth = String.format(format, newValue + 1); + resetDayWheelAdapter(); + } + }); + mMonthWheel.setCurrentItem(thisMonth - 1); + + resetDayWheelAdapter(); + + } + + + /** + * 使用 mCurrentYear 和 mCurrentMonth 计算并重设 mDayWheel + */ + private void resetDayWheelAdapter() { + + int thisDay = Integer.valueOf(mCurrentDay); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM"); + Calendar cal = Calendar.getInstance(); + Date month = null; + try { + month = dateFormat.parse(mCurrentYear + mCurrentMonth); + } catch (ParseException e) { + e.printStackTrace(); + Log.e(TAG, "dateFormat.parse daile -> " + mCurrentYear + mCurrentMonth); + } + if (month != null){ + cal.setTime(month); + }else { + cal.setTime(new Date()); + } + int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); + + mDayWheel.setViewAdapter(new NumericWheelAdapter(getContext(), 1, maxDays, "%02d")); + mDayWheel.setCyclic(true); + mDayWheel.setInterpolator(new AnticipateOvershootInterpolator()); + mDayWheel.addChangingListener(new OnWheelChangedListener() { + + @Override + public void onChanged(AbstractWheel wheel, int oldValue, int newValue) { + String format = "%02d"; + mCurrentDay = String.format(format, newValue + 1); + } + }); + + if(thisDay > maxDays){ + mDayWheel.setCurrentItem(maxDays - 1); + }else { + mDayWheel.setCurrentItem(thisDay - 1); + } + + } + + public void setOnTimeClickListener(OnTimeClickListener listener){ + + mListener = listener; + } + + public interface OnTimeClickListener{ + + public void onCommonTimeClick(int id); + } +} diff --git a/app/src/main/java/com/lechange/demo/common/ProgressDialog.java b/app/src/main/java/com/lechange/demo/common/ProgressDialog.java new file mode 100644 index 0000000..9dc0780 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/ProgressDialog.java @@ -0,0 +1,116 @@ +package com.lechange.demo.common; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import java.util.concurrent.locks.LockSupport; + + +/** + * 多个ProgressDialog映射一个线程,通过mThreadDialog字段标识 + * @author 31554 + * + */ +public class ProgressDialog extends TextView{ + + private static Thread mUIThread; + private static ProgressDialog mThreadDialog; + + private static StringBuilder mMsg; + private static int mMsgIndex; + private static Handler mHandler; + static { + mHandler = new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + //Log.d("ProgressDialog", "======" + mMsg.toString()); + if (mThreadDialog != null) { + mThreadDialog.setText(mMsg.toString()); + } + } + }; + mUIThread = new Thread() { + @Override + public void run() { + super.run(); + while (true) { + if (mThreadDialog != null) { + if(mMsgIndex >= 4){ + mMsgIndex = 0; + mMsg.setLength(mMsg.length() - 8); + } + mMsg.append(" ."); + mMsgIndex++; + mHandler.obtainMessage().sendToTarget(); + try { + Thread.sleep(1000); + } catch (Exception e) { + // InterruptedException + e.printStackTrace(); + } + } else + LockSupport.park(); + } + } + }; + mUIThread.start(); + } + + //构造 + public ProgressDialog(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public ProgressDialog(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ProgressDialog(Context context) { + super(context); + } + + public void setStart(String msg){ + //Log.d("111", this + "=====start " + mThreadDialog + " : " + this); + mMsgIndex = 0; + mMsg = new StringBuilder(msg); + if (mThreadDialog == null || mThreadDialog.hashCode() != this.hashCode()) { + mHandler.post(new Runnable() { + @Override + public void run() { + setVisibility(View.VISIBLE); + setText(mMsg); + } + }); + mThreadDialog = this; + LockSupport.unpark(mUIThread); + } + } + + public void setStop(){ + //Log.d("111", "=====stop " + mThreadDialog + " : " + this); + mHandler.post(new Runnable() { + @Override + public void run() { + setVisibility(View.GONE); + } + }); + if (mThreadDialog != null && mThreadDialog.hashCode() == this.hashCode()) { + mThreadDialog = null; + } + } + +} + + +//mUIThread.interrupt(); +//try { +// mUIThread.join(); +//} catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +//} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/common/RecoderSeekBar.java b/app/src/main/java/com/lechange/demo/common/RecoderSeekBar.java new file mode 100644 index 0000000..8e888cc --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/RecoderSeekBar.java @@ -0,0 +1,33 @@ +package com.lechange.demo.common; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.SeekBar; + +public class RecoderSeekBar extends SeekBar{ + + private boolean canTouchAble = true; + + public RecoderSeekBar(Context context,AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + public RecoderSeekBar(Context context, + AttributeSet attrs) { + super(context, attrs); + } + public RecoderSeekBar(Context context) { + super(context); + } + @Override + public boolean onTouchEvent(MotionEvent event) { + if(!canTouchAble){ + return true; + } + return super.onTouchEvent(event); + } + + public void setCanTouchAble(boolean canTouchAble){ + this.canTouchAble = canTouchAble; + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheel.java b/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheel.java new file mode 100644 index 0000000..366cc52 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheel.java @@ -0,0 +1,889 @@ +package com.lechange.demo.common.datepicker; + + + +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + + +import android.content.Context; +import android.content.res.TypedArray; +import android.database.DataSetObserver; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.Interpolator; +import android.widget.LinearLayout; + +import com.lechange.demo.common.datepicker.adapters.WheelViewAdapter; +import com.yonsz.z1.R; + +import java.util.LinkedList; +import java.util.List; + + +/** + * Abstract spinner spinnerwheel view + * This class should be subclassed. + * + * @author Yuri Kanivets + * @author Dimitri Fedorov + */ +public abstract class AbstractWheel extends View { + + private static int itemID = -1; + + @SuppressWarnings("unused") + private final String LOG_TAG = AbstractWheel.class.getName() + " #" + (++itemID); + + //---------------------------------- + // Default properties values + //---------------------------------- + + /** Default count of visible items */ + private static final int DEF_VISIBLE_ITEMS = 4; + private static final boolean DEF_IS_CYCLIC = false; + + //---------------------------------- + // Class properties + //---------------------------------- + + protected int mCurrentItemIdx = 0; + + // Count of visible items + protected int mVisibleItems; + // Should all items be visible + protected boolean mIsAllVisible; + + protected boolean mIsCyclic; + + // Scrolling + protected WheelScroller mScroller; + protected boolean mIsScrollingPerformed; + protected int mScrollingOffset; + + // Items layout + protected LinearLayout mItemsLayout; + + // The number of first item in layout + protected int mFirstItemIdx; + + // View adapter + protected WheelViewAdapter mViewAdapter; + + protected int mLayoutHeight; + protected int mLayoutWidth; + + // Recycle + private WheelRecycler mRecycler = new WheelRecycler(this); + + // Listeners + private List changingListeners = new LinkedList(); + private List scrollingListeners = new LinkedList(); + private List clickingListeners = new LinkedList(); + + //XXX: I don't like listeners the way as they are now. -df + + // Adapter listener + private DataSetObserver mDataObserver; + + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Create a new AbstractWheel instance + * + * @param context the application environment. + * @param attrs a collection of attributes. + * @param defStyle The default style to apply to this view. + */ + public AbstractWheel(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs); + initAttributes(attrs, defStyle); + initData(context); + } + + //-------------------------------------------------------------------------- + // + // Initiating data and assets at start up + // + //-------------------------------------------------------------------------- + + /** + * Initiates data and parameters from styles + * + * @param attrs a collection of attributes. + * @param defStyle The default style to apply to this view. + */ + protected void initAttributes(AttributeSet attrs, int defStyle) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.AbstractWheelView, defStyle, 0); + mVisibleItems = a.getInt(R.styleable.AbstractWheelView_visibleItems, DEF_VISIBLE_ITEMS); + mIsAllVisible = a.getBoolean(R.styleable.AbstractWheelView_isAllVisible, false); + mIsCyclic = a.getBoolean(R.styleable.AbstractWheelView_isCyclic, DEF_IS_CYCLIC); + + a.recycle(); + } + + /** + * Initiates data + * + * @param context the context + */ + protected void initData(Context context) { + + mDataObserver = new DataSetObserver() { + @Override + public void onChanged() { + invalidateItemsLayout(false); + } + + @Override + public void onInvalidated() { + invalidateItemsLayout(true); + } + }; + + // creating new scroller + mScroller = createScroller(new WheelScroller.ScrollingListener() { + + public void onStarted() { + mIsScrollingPerformed = true; + notifyScrollingListenersAboutStart(); + onScrollStarted(); + } + + public void onTouch() { + onScrollTouched(); + } + + public void onTouchUp() { + if (!mIsScrollingPerformed) + onScrollTouchedUp(); // if scrolling IS performed, whe should use onFinished instead + } + + public void onScroll(int distance) { + doScroll(distance); + + int dimension = getBaseDimension(); + if (mScrollingOffset > dimension) { + mScrollingOffset = dimension; + mScroller.stopScrolling(); + } else if (mScrollingOffset < - dimension) { + mScrollingOffset = - dimension; + mScroller.stopScrolling(); + } + } + + public void onFinished() { + if (mIsScrollingPerformed) { + notifyScrollingListenersAboutEnd(); + mIsScrollingPerformed = false; + onScrollFinished(); + } + + mScrollingOffset = 0; + invalidate(); + } + + public void onJustify() { + if (Math.abs(mScrollingOffset) > WheelScroller.MIN_DELTA_FOR_SCROLLING) { + mScroller.scroll(mScrollingOffset, 0); + } + } + }); + } + + @Override + public Parcelable onSaveInstanceState() { + //begin boilerplate code that allows parent classes to save state + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + //end + + ss.currentItem = this.getCurrentItem(); + + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + //begin boilerplate code so parent classes can restore state + if(!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + + final SavedState ss = (SavedState)state; + super.onRestoreInstanceState(ss.getSuperState()); + //end + + mCurrentItemIdx = ss.currentItem; + + // dirty hack to re-draw child items correctly + postDelayed(new Runnable() { + @Override + public void run() { + invalidateItemsLayout(false); + } + }, 100); + } + + static class SavedState extends BaseSavedState { + int currentItem; + + SavedState(Parcelable superState) { + super(superState); + } + + private SavedState(Parcel in) { + super(in); + this.currentItem = in.readInt(); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(this.currentItem); + } + + //required field that makes Parcelables from a Parcel + public static final Creator CREATOR = + new Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + abstract protected void recreateAssets(int width, int height); + + abstract public void removeBitmap(); + + //-------------------------------------------------------------------------- + // + // Scroller operations + // + //-------------------------------------------------------------------------- + + /** + * Creates scroller appropriate for specific wheel implementation. + * + * @param scrollingListener listener to be passed to the scroller + * @return Initialized scroller to be used + */ + abstract protected WheelScroller createScroller(WheelScroller.ScrollingListener scrollingListener); + + /* These methods are not abstract, as we may want to override only some of them */ + protected void onScrollStarted() {} + protected void onScrollTouched() {} + protected void onScrollTouchedUp() {} + protected void onScrollFinished() {} + + /** + * Stops scrolling + */ + public void stopScrolling() { + mScroller.stopScrolling(); + } + + /** + * Set the the specified scrolling interpolator + * @param interpolator the interpolator + */ + public void setInterpolator(Interpolator interpolator) { + mScroller.setInterpolator(interpolator); + } + + /** + * Scroll the spinnerwheel + * @param itemsToScroll items to scroll + * @param time scrolling duration + */ + public void scroll(int itemsToScroll, int time) { + int distance = itemsToScroll * getItemDimension() - mScrollingOffset; + onScrollTouched(); // we have to emulate touch when scrolling spinnerwheel programmatically to light up stuff + mScroller.scroll(distance, time); + } + + /** + * Scrolls the spinnerwheel + * @param delta the scrolling value + */ + private void doScroll(int delta) { + mScrollingOffset += delta; + + int itemDimension = getItemDimension(); + int count = mScrollingOffset / itemDimension; + + int pos = mCurrentItemIdx - count; + int itemCount = mViewAdapter.getItemsCount(); + + int fixPos = mScrollingOffset % itemDimension; + if (Math.abs(fixPos) <= itemDimension / 2) { + fixPos = 0; + } + if (mIsCyclic && itemCount > 0) { + if (fixPos > 0) { + pos--; + count++; + } else if (fixPos < 0) { + pos++; + count--; + } + // fix position by rotating + while (pos < 0) { + pos += itemCount; + } + pos %= itemCount; + } else { + if (pos < 0) { + count = mCurrentItemIdx; + pos = 0; + } else if (pos >= itemCount) { + count = mCurrentItemIdx - itemCount + 1; + pos = itemCount - 1; + } else if (pos > 0 && fixPos > 0) { + pos--; + count++; + } else if (pos < itemCount - 1 && fixPos < 0) { + pos++; + count--; + } + } + + int offset = mScrollingOffset; + if (pos != mCurrentItemIdx) { + setCurrentItem(pos, false); + } else { + invalidate(); + } + + // update offset + int baseDimension = getBaseDimension(); + mScrollingOffset = offset - count * itemDimension; + if (mScrollingOffset > baseDimension) { + mScrollingOffset = mScrollingOffset % baseDimension + baseDimension; + } + } + + //-------------------------------------------------------------------------- + // + // Base measurements + // + //-------------------------------------------------------------------------- + + /** + * Returns base dimension of the spinnerwheel 鈥�width for horizontal spinnerwheel, height for vertical + * + * @return width or height of the spinnerwheel + */ + abstract protected int getBaseDimension(); + + /** + * Returns base dimension of base item 鈥�width for horizontal spinnerwheel, height for vertical + * + * @return width or height of base item + */ + abstract protected int getItemDimension(); + + /** + * Processes MotionEvent and returns relevant position 鈥�x for horizontal spinnerwheel, y for vertical + * + * @param event MotionEvent to be processed + * @return relevant position of the MotionEvent + */ + abstract protected float getMotionEventPosition(MotionEvent event); + + + //-------------------------------------------------------------------------- + // + // Layout creation and measurement operations + // + //-------------------------------------------------------------------------- + + /** + * Creates item layouts if necessary + */ + abstract protected void createItemsLayout(); + + /** + * Sets layout width and height + */ + abstract protected void doItemsLayout(); + + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + if (changed) { + int w = r - l; + int h = b - t; + doItemsLayout(); + if (mLayoutWidth != w || mLayoutHeight != h) { + recreateAssets(getMeasuredWidth(), getMeasuredHeight()); + } + mLayoutWidth = w; + mLayoutHeight = h; + } + } + + /** + * Invalidates items layout + * + * @param clearCaches if true then cached views will be cleared + */ + public void invalidateItemsLayout(boolean clearCaches) { + if (clearCaches) { + mRecycler.clearAll(); + if (mItemsLayout != null) { + mItemsLayout.removeAllViews(); + } + mScrollingOffset = 0; + } else if (mItemsLayout != null) { + // cache all items + mRecycler.recycleItems(mItemsLayout, mFirstItemIdx, new ItemsRange()); + } + invalidate(); + } + + + //-------------------------------------------------------------------------- + // + // Getters and setters + // + //-------------------------------------------------------------------------- + + /** + * Gets count of visible items + * + * @return the count of visible items + */ + public int getVisibleItems() { + return mVisibleItems; + } + + /** + * Sets the desired count of visible items. + * Actual amount of visible items depends on spinnerwheel layout parameters. + * To apply changes and rebuild view call measure(). + * + * @param count the desired count for visible items + */ + public void setVisibleItems(int count) { + mVisibleItems = count; + } + + /** + * Sets all items to have no dim and makes them visible + * @param isAllVisible + */ + public void setAllItemsVisible(boolean isAllVisible){ + mIsAllVisible = isAllVisible; + invalidateItemsLayout(false); + } + + /** + * Gets view adapter + * @return the view adapter + */ + public WheelViewAdapter getViewAdapter() { + return mViewAdapter; + } + + + /** + * Sets view adapter. Usually new adapters contain different views, so + * it needs to rebuild view by calling measure(). + * + * @param viewAdapter the view adapter + */ + public void setViewAdapter(WheelViewAdapter viewAdapter) { + if (this.mViewAdapter != null) { + this.mViewAdapter.unregisterDataSetObserver(mDataObserver); + } + this.mViewAdapter = viewAdapter; + if (this.mViewAdapter != null) { + this.mViewAdapter.registerDataSetObserver(mDataObserver); + } + invalidateItemsLayout(true); + } + + /** + * Gets current value + * + * @return the current value + */ + public int getCurrentItem() { + return mCurrentItemIdx; + } + + /** + * Sets the current item. Does nothing when index is wrong. + * + * @param index the item index + * @param animated the animation flag + */ + public void setCurrentItem(int index, boolean animated) { + if (mViewAdapter == null || mViewAdapter.getItemsCount() == 0) { + return; // throw? + } + + int itemCount = mViewAdapter.getItemsCount(); + if (index < 0 || index >= itemCount) { + if (mIsCyclic) { + while (index < 0) { + index += itemCount; + } + index %= itemCount; + } else{ + return; // throw? + } + } + if (index != mCurrentItemIdx) { + if (animated) { + int itemsToScroll = index - mCurrentItemIdx; + if (mIsCyclic) { + int scroll = itemCount + Math.min(index, mCurrentItemIdx) - Math.max(index, mCurrentItemIdx); + if (scroll < Math.abs(itemsToScroll)) { + itemsToScroll = itemsToScroll < 0 ? scroll : -scroll; + } + } + scroll(itemsToScroll, 0); + } else { + mScrollingOffset = 0; + final int old = mCurrentItemIdx; + mCurrentItemIdx = index; + notifyChangingListeners(old, mCurrentItemIdx); + invalidate(); + } + } + } + + /** + * Sets the current item w/o animation. Does nothing when index is wrong. + * + * @param index the item index + */ + public void setCurrentItem(int index) { + setCurrentItem(index, false); + } + + /** + * Tests if spinnerwheel is cyclic. That means before the 1st item there is shown the last one + * @return true if spinnerwheel is cyclic + */ + public boolean isCyclic() { + return mIsCyclic; + } + + /** + * Set spinnerwheel cyclic flag + * @param isCyclic the flag to set + */ + public void setCyclic(boolean isCyclic) { + this.mIsCyclic = isCyclic; + invalidateItemsLayout(false); + } + + + //-------------------------------------------------------------------------- + // + // Listener operations + // + //-------------------------------------------------------------------------- + + /** + * Adds spinnerwheel changing listener + * @param listener the listener + */ + public void addChangingListener(OnWheelChangedListener listener) { + changingListeners.add(listener); + } + + /** + * Removes spinnerwheel changing listener + * @param listener the listener + */ + public void removeChangingListener(OnWheelChangedListener listener) { + changingListeners.remove(listener); + } + + /** + * Notifies changing listeners + * @param oldValue the old spinnerwheel value + * @param newValue the new spinnerwheel value + */ + protected void notifyChangingListeners(int oldValue, int newValue) { + for (OnWheelChangedListener listener : changingListeners) { + listener.onChanged(this, oldValue, newValue); + } + } + + /** + * Adds spinnerwheel scrolling listener + * @param listener the listener + */ + public void addScrollingListener(OnWheelScrollListener listener) { + scrollingListeners.add(listener); + } + + /** + * Removes spinnerwheel scrolling listener + * @param listener the listener + */ + public void removeScrollingListener(OnWheelScrollListener listener) { + scrollingListeners.remove(listener); + } + + /** + * Notifies listeners about starting scrolling + */ + protected void notifyScrollingListenersAboutStart() { + for (OnWheelScrollListener listener : scrollingListeners) { + listener.onScrollingStarted(this); + } + } + + /** + * Notifies listeners about ending scrolling + */ + protected void notifyScrollingListenersAboutEnd() { + for (OnWheelScrollListener listener : scrollingListeners) { + listener.onScrollingFinished(this); + } + } + + /** + * Adds spinnerwheel clicking listener + * @param listener the listener + */ + public void addClickingListener(OnWheelClickedListener listener) { + clickingListeners.add(listener); + } + + /** + * Removes spinnerwheel clicking listener + * @param listener the listener + */ + public void removeClickingListener(OnWheelClickedListener listener) { + clickingListeners.remove(listener); + } + + /** + * Notifies listeners about clicking + * @param item clicked item + */ + protected void notifyClickListenersAboutClick(int item) { + for (OnWheelClickedListener listener : clickingListeners) { + listener.onItemClicked(this, item); + } + } + + + //-------------------------------------------------------------------------- + // + // Rebuilding items + // + //-------------------------------------------------------------------------- + + /** + * Rebuilds spinnerwheel items if necessary. Caches all unused items. + * + * @return true if items are rebuilt + */ + protected boolean rebuildItems() { + boolean updated; + ItemsRange range = getItemsRange(); + + if (mItemsLayout != null) { + int first = mRecycler.recycleItems(mItemsLayout, mFirstItemIdx, range); + updated = mFirstItemIdx != first; + mFirstItemIdx = first; + } else { + createItemsLayout(); + updated = true; + } + + if (!updated) { + updated = mFirstItemIdx != range.getFirst() || mItemsLayout.getChildCount() != range.getCount(); + } + + if (mFirstItemIdx > range.getFirst() && mFirstItemIdx <= range.getLast()) { + for (int i = mFirstItemIdx - 1; i >= range.getFirst(); i--) { + if (!addItemView(i, true)) { + break; + } + mFirstItemIdx = i; + } + } else { + mFirstItemIdx = range.getFirst(); + } + + int first = mFirstItemIdx; + for (int i = mItemsLayout.getChildCount(); i < range.getCount(); i++) { + if (!addItemView(mFirstItemIdx + i, false) && mItemsLayout.getChildCount() == 0) { + first++; + } + } + mFirstItemIdx = first; + + return updated; + } + + //---------------------------------- + // ItemsRange operations + //---------------------------------- + + /** + * Calculates range for spinnerwheel items + * @return the items range + */ + private ItemsRange getItemsRange() { + if (mIsAllVisible) { + int baseDimension = getBaseDimension(); + int itemDimension = getItemDimension(); + if (itemDimension != 0) + mVisibleItems = baseDimension / itemDimension + 1; + } + + int start = mCurrentItemIdx - mVisibleItems / 2; + int end = start + mVisibleItems - (mVisibleItems % 2 == 0 ? 0 : 1); + if (mScrollingOffset != 0) { + if (mScrollingOffset > 0) { + start--; + } else { + end++; + } + } + if (!isCyclic()) { + if (start < 0) + start = 0; + if (end > mViewAdapter.getItemsCount()) + end = mViewAdapter.getItemsCount(); + } + return new ItemsRange(start, end - start + 1); + } + + /** + * Checks whether item index is valid + * @param index the item index + * @return true if item index is not out of bounds or the spinnerwheel is cyclic + */ + protected boolean isValidItemIndex(int index) { + return (mViewAdapter != null) && (mViewAdapter.getItemsCount() > 0) && + (mIsCyclic || (index >= 0 && index < mViewAdapter.getItemsCount())); + } + + //---------------------------------- + // Operations with item view + //---------------------------------- + + /** + * Adds view for item to items layout + * @param index the item index + * @param first the flag indicates if view should be first + * @return true if corresponding item exists and is added + */ + private boolean addItemView(int index, boolean first) { + View view = getItemView(index); + if (view != null) { + if (first) { + mItemsLayout.addView(view, 0); + } else { + mItemsLayout.addView(view); + } + return true; + } + return false; + } + + /** + * Returns view for specified item + * @param index the item index + * @return item view or empty view if index is out of bounds + */ + private View getItemView(int index) { + if (mViewAdapter == null || mViewAdapter.getItemsCount() == 0) { + return null; + } + int count = mViewAdapter.getItemsCount(); + if (!isValidItemIndex(index)) { + return mViewAdapter.getEmptyItem( mRecycler.getEmptyItem(), mItemsLayout); + } else { + while (index < 0) { + index = count + index; + } + } + index %= count; + return mViewAdapter.getItem(index, mRecycler.getItem(), mItemsLayout); + } + + + //-------------------------------------------------------------------------- + // + // Intercepting and processing touch event + // + //-------------------------------------------------------------------------- + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!isEnabled() || getViewAdapter() == null) { + return true; + } + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_MOVE: + if (getParent() != null) { + getParent().requestDisallowInterceptTouchEvent(true); + } + break; + + case MotionEvent.ACTION_UP: + if (!mIsScrollingPerformed) { + int distance = (int) getMotionEventPosition(event) - getBaseDimension() / 2; + if (distance > 0) { + distance += getItemDimension() / 2; + } else { + distance -= getItemDimension() / 2; + } + int items = distance / getItemDimension(); + if (items != 0 && isValidItemIndex(mCurrentItemIdx + items)) { + notifyClickListenersAboutClick(mCurrentItemIdx + items); + } + } + break; + } + return mScroller.onTouchEvent(event); + } + +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheelView.java b/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheelView.java new file mode 100644 index 0000000..c8494eb --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/AbstractWheelView.java @@ -0,0 +1,325 @@ +package com.lechange.demo.common.datepicker; + + + +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + + +import android.animation.Animator; +import android.animation.ObjectAnimator; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; + +import com.yonsz.z1.R; + +/** + * Abstract spinner spinnerwheel view. + * This class should be subclassed. + * + * @author Yuri Kanivets + * @author Dimitri Fedorov + */ +public abstract class AbstractWheelView extends AbstractWheel { + + private static int itemID = -1; + + @SuppressWarnings("unused") + private final String LOG_TAG = AbstractWheelView.class.getName() + " #" + (++itemID); + + //---------------------------------- + // Default properties values + //---------------------------------- + + protected static final int DEF_ITEMS_DIMMED_ALPHA = 50; // 60 in ICS + + protected static final int DEF_SELECTION_DIVIDER_ACTIVE_ALPHA = 70; + + protected static final int DEF_SELECTION_DIVIDER_DIMMED_ALPHA = 70; + + protected static final int DEF_ITEM_OFFSET_PERCENT = 10; + + protected static final int DEF_ITEM_PADDING = 10; + + protected static final int DEF_SELECTION_DIVIDER_SIZE = 2; + + //---------------------------------- + // Class properties + //---------------------------------- + + // configurable properties + + /** The alpha of the selector spinnerwheel when it is dimmed. */ + protected int mItemsDimmedAlpha; + + /** The alpha of separators spinnerwheel when they are shown. */ + protected int mSelectionDividerActiveAlpha; + + /** The alpha of separators when they are is dimmed. */ + protected int mSelectionDividerDimmedAlpha; + + /** Top and bottom items offset */ + protected int mItemOffsetPercent; + + /** Left and right padding value */ + protected int mItemsPadding; + + /** Divider for showing item to be selected while scrolling */ + protected Drawable mSelectionDivider; + + // the rest + + /** + * The {@link Paint} for drawing the selector. + */ + protected Paint mSelectorWheelPaint; + + /** + * The {@link Paint} for drawing the separators. + */ + protected Paint mSeparatorsPaint; + + /** + * {@link com.nineoldandroids.animation.Animator} for dimming the selector spinnerwheel. + */ + protected Animator mDimSelectorWheelAnimator; + + /** + * {@link com.nineoldandroids.animation.Animator} for dimming the selector spinnerwheel. + */ + protected Animator mDimSeparatorsAnimator; + + /** + * The property for setting the selector paint. + */ + protected static final String PROPERTY_SELECTOR_PAINT_COEFF = "selectorPaintCoeff"; + + /** + * The property for setting the separators paint. + */ + protected static final String PROPERTY_SEPARATORS_PAINT_ALPHA = "separatorsPaintAlpha"; + + + protected Bitmap mSpinBitmap; +// protected Bitmap mSeparatorsBitmap; + + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + public AbstractWheelView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + //-------------------------------------------------------------------------- + // + // Initiating assets and setters for paints + // + //-------------------------------------------------------------------------- + + @Override + protected void initAttributes(AttributeSet attrs, int defStyle) { + super.initAttributes(attrs, defStyle); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.AbstractWheelView, defStyle, 0); + mItemsDimmedAlpha = a.getInt(R.styleable.AbstractWheelView_itemsDimmedAlpha, DEF_ITEMS_DIMMED_ALPHA); + mSelectionDividerActiveAlpha = a.getInt(R.styleable.AbstractWheelView_selectionDividerActiveAlpha, DEF_SELECTION_DIVIDER_ACTIVE_ALPHA); + mSelectionDividerDimmedAlpha = a.getInt(R.styleable.AbstractWheelView_selectionDividerDimmedAlpha, DEF_SELECTION_DIVIDER_DIMMED_ALPHA); + mItemOffsetPercent = a.getInt(R.styleable.AbstractWheelView_itemOffsetPercent, DEF_ITEM_OFFSET_PERCENT); + mItemsPadding = a.getDimensionPixelSize(R.styleable.AbstractWheelView_itemsPadding, DEF_ITEM_PADDING); + mSelectionDivider = a.getDrawable(R.styleable.AbstractWheelView_selectionDivider); + a.recycle(); + } + + @Override + protected void initData(Context context) { + super.initData(context); + + // creating animators + mDimSelectorWheelAnimator = ObjectAnimator.ofFloat(this, PROPERTY_SELECTOR_PAINT_COEFF, 1, 0); + + mDimSeparatorsAnimator = ObjectAnimator.ofInt(this, PROPERTY_SEPARATORS_PAINT_ALPHA, + mSelectionDividerActiveAlpha, mSelectionDividerDimmedAlpha + ); + + // creating paints + mSeparatorsPaint = new Paint(); + mSeparatorsPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); + mSeparatorsPaint.setAlpha(mSelectionDividerDimmedAlpha); + + mSelectorWheelPaint = new Paint(); + mSelectorWheelPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); + } + + /** + * Recreates assets (like bitmaps) when layout size has been changed + * + * @param width New spinnerwheel width + * @param height New spinnerwheel height + */ + @Override + protected void recreateAssets(int width, int height) { + if(mSpinBitmap == null){ + mSpinBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + } + +// if(mSeparatorsBitmap == null){ +// mSeparatorsBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); +// } + setSelectorPaintCoeff(0); + } + + /** + * Sets the alpha of the {@link Paint} for drawing separators + * spinnerwheel. + * @param alpha alpha value from 0 to 255 + */ + @SuppressWarnings("unused") // Called via reflection + public void setSeparatorsPaintAlpha(int alpha) { + mSeparatorsPaint.setAlpha(alpha); + invalidate(); + } + + @Override + public void removeBitmap(){ + if(mSpinBitmap != null && !mSpinBitmap.isRecycled()){ + mSpinBitmap.recycle(); + mSpinBitmap = null; + } +// +// if(mSeparatorsBitmap != null && !mSeparatorsBitmap.isRecycled()){ +// mSeparatorsBitmap.recycle(); +// mSeparatorsBitmap = null; +// } + } + + /** + * Sets the coeff of the {@link Paint} for drawing + * the selector spinnerwheel. + * + * @param coeff Coefficient from 0 (selector is passive) to 1 (selector is active) + */ + abstract public void setSelectorPaintCoeff(float coeff); + + + //-------------------------------------------------------------------------- + // + // Processing scroller events + // + //-------------------------------------------------------------------------- + + @Override + protected void onScrollTouched() { + mDimSelectorWheelAnimator.cancel(); + mDimSeparatorsAnimator.cancel(); + setSelectorPaintCoeff(1); + setSeparatorsPaintAlpha(mSelectionDividerActiveAlpha); + } + + @Override + protected void onScrollTouchedUp() { + super.onScrollTouchedUp(); + fadeSelectorWheel(750); + lightSeparators(750); + } + + @Override + protected void onScrollFinished() { + fadeSelectorWheel(500); + lightSeparators(500); + } + + //---------------------------------- + // Animating components + //---------------------------------- + + /** + * Fade the selector spinnerwheel via an animation. + * + * @param animationDuration The duration of the animation. + */ + private void fadeSelectorWheel(long animationDuration) { + mDimSelectorWheelAnimator.setDuration(animationDuration); + mDimSelectorWheelAnimator.start(); + } + + /** + * Fade the selector spinnerwheel via an animation. + * + * @param animationDuration The duration of the animation. + */ + private void lightSeparators(long animationDuration) { + mDimSeparatorsAnimator.setDuration(animationDuration); + mDimSeparatorsAnimator.start(); + } + + + //-------------------------------------------------------------------------- + // + // Layout measuring + // + //-------------------------------------------------------------------------- + + /** + * Perform layout measurements + */ + abstract protected void measureLayout(); + + + //-------------------------------------------------------------------------- + // + // Drawing stuff + // + //-------------------------------------------------------------------------- + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (mViewAdapter != null && mViewAdapter.getItemsCount() > 0) { + if (rebuildItems()) { + measureLayout(); + } + doItemsLayout(); + drawItems(canvas); + } + } + + /** + * Draws items on specified canvas + * + * @param canvas the canvas for drawing + */ + abstract protected void drawItems(Canvas canvas); +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/ItemsRange.java b/app/src/main/java/com/lechange/demo/common/datepicker/ItemsRange.java new file mode 100644 index 0000000..fcf49b8 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/ItemsRange.java @@ -0,0 +1,86 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + + /** + * Range for visible items. + */ + public class ItemsRange { + // First item number + private int first; + + // Items count + private int count; + + /** + * Default constructor. Creates an empty range + */ + public ItemsRange() { + this(0, 0); + } + + /** + * Constructor + * @param first the number of first item + * @param count the count of items + */ + public ItemsRange(int first, int count) { + this.first = first; + this.count = count; + } + + /** + * Gets number of first item + * @return the number of the first item + */ + public int getFirst() { + return first; + } + + /** + * Gets number of last item + * @return the number of last item + */ + public int getLast() { + return getFirst() + getCount() - 1; + } + + /** + * Get items count + * @return the count of items + */ + public int getCount() { + return count; + } + + /** + * Tests whether item is contained by range + * @param index the item number + * @return true if item is contained + */ + public boolean contains(int index) { + return index >= getFirst() && index <= getLast(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelChangedListener.java b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelChangedListener.java new file mode 100644 index 0000000..b40b6ec --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelChangedListener.java @@ -0,0 +1,43 @@ +package com.lechange.demo.common.datepicker; + +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + + + +/** + * Wheel changed listener interface. + *

The onChanged() method is called whenever current spinnerwheel positions is changed: + *

  • New Wheel position is set + *
  • Wheel view is scrolled + */ +public interface OnWheelChangedListener { + /** + * Callback method to be invoked when current item changed + * @param wheel the spinnerwheel view whose state has changed + * @param oldValue the old value of current item + * @param newValue the new value of current item + */ + void onChanged(AbstractWheel wheel, int oldValue, int newValue); +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelClickedListener.java b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelClickedListener.java new file mode 100644 index 0000000..4d599e9 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelClickedListener.java @@ -0,0 +1,42 @@ +package com.lechange.demo.common.datepicker; + +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + + + +/** + * Wheel clicked listener interface. + *

    The onItemClicked() method is called whenever a spinnerwheel item is clicked + *

  • New Wheel position is set + *
  • Wheel view is scrolled + */ +public interface OnWheelClickedListener { + /** + * Callback method to be invoked when current item clicked + * @param wheel the spinnerwheel view + * @param itemIndex the index of clicked item + */ + void onItemClicked(AbstractWheel wheel, int itemIndex); +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelScrollListener.java b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelScrollListener.java new file mode 100644 index 0000000..f7805cb --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/OnWheelScrollListener.java @@ -0,0 +1,42 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + +/** + * Wheel scrolled listener interface. + */ +public interface OnWheelScrollListener { + /** + * Callback method to be invoked when scrolling started. + * @param wheel the spinnerwheel view whose state has changed. + */ + void onScrollingStarted(AbstractWheel wheel); + + /** + * Callback method to be invoked when scrolling ended. + * @param wheel the spinnerwheel view whose state has changed. + */ + void onScrollingFinished(AbstractWheel wheel); +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalScroller.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalScroller.java new file mode 100644 index 0000000..c9e1c03 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalScroller.java @@ -0,0 +1,72 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + +import android.content.Context; +import android.view.MotionEvent; + +public class WheelHorizontalScroller extends WheelScroller { + + /** + * Constructor + * + * @param context + * the current context + * @param listener + * the scrolling listener + */ + public WheelHorizontalScroller(Context context, ScrollingListener listener) { + super(context, listener); + } + + @Override + protected int getCurrentScrollerPosition() { + return scroller.getCurrX(); + } + + @Override + protected int getFinalScrollerPosition() { + return scroller.getFinalX(); + } + + @Override + protected float getMotionEventPosition(MotionEvent event) { + // should be overriden + return event.getX(); + } + + @Override + protected void scrollerStartScroll(int distance, int time) { + scroller.startScroll(0, 0, distance, 0, time); + } + + @Override + protected void scrollerFling(int position, int velocityX, int velocityY) { + final int maxPosition = 0x7FFFFFFF; + final int minPosition = -maxPosition; + scroller.fling(position, 0, -velocityX, 0, minPosition, maxPosition, 0, + 0); + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalView.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalView.java new file mode 100644 index 0000000..e9eeda3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelHorizontalView.java @@ -0,0 +1,371 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Shader; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; + +/** + * Spinner wheel horizontal view. + * + * @author Yuri Kanivets + * @author Dimitri Fedorov + */ +public class WheelHorizontalView extends AbstractWheelView { + + private static int itemID = -1; + + @SuppressWarnings("unused") + private final String LOG_TAG = WheelVerticalView.class.getName() + " #" + (++itemID); + + /** + * The width of the selection divider. + */ + protected int mSelectionDividerWidth; + + // Item width + private int itemWidth = 0; + + //-------------------------------------------------------------------------- + // + // Constructors + // + //-------------------------------------------------------------------------- + + /** + * Create a new wheel horizontal view. + * + * @param context The application environment. + */ + public WheelHorizontalView(Context context) { + this(context, null); + } + + /** + * Create a new wheel horizontal view. + * + * @param context The application environment. + * @param attrs A collection of attributes. + */ + public WheelHorizontalView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.abstractWheelViewStyle); + } + + /** + * Create a new wheel horizontal view. + * + * @param context the application environment. + * @param attrs a collection of attributes. + * @param defStyle The default style to apply to this view. + */ + public WheelHorizontalView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + + //-------------------------------------------------------------------------- + // + // Initiating assets and setter for selector paint + // + //-------------------------------------------------------------------------- + + @Override + protected void initAttributes(AttributeSet attrs, int defStyle) { + super.initAttributes(attrs, defStyle); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.WheelHorizontalView, defStyle, 0); + mSelectionDividerWidth = a.getDimensionPixelSize(R.styleable.WheelHorizontalView_selectionDividerWidth, DEF_SELECTION_DIVIDER_SIZE); + a.recycle(); + } + + @Override + public void setSelectorPaintCoeff(float coeff) { + if (mItemsDimmedAlpha >= 100) + return; + + LinearGradient shader; + + int w = getMeasuredWidth(); + int iw = getItemDimension(); + float p1 = (1 - iw/(float) w)/2; + float p2 = (1 + iw/(float) w)/2; + float z = mItemsDimmedAlpha * (1 - coeff); + float c1f = z + 255 * coeff; + + if (mVisibleItems == 2) { + int c1 = Math.round( c1f ) << 24; + int c2 = Math.round( z ) << 24; + int[] colors = {c2, c1, 0xff000000, 0xff000000, c1, c2}; + float[] positions = { 0, p1, p1, p2, p2, 1}; + shader = new LinearGradient(0, 0, w, 0, colors, positions, Shader.TileMode.CLAMP); + } else { + float p3 = (1 - iw*3/(float) w)/2; + float p4 = (1 + iw*3/(float) w)/2; + + float s = 255 * p3/p1; + float c3f = s * coeff ; // here goes some optimized stuff + float c2f = z + c3f; + + int c1 = Math.round( c1f ) << 24; + int c2 = Math.round( c2f ) << 24; + int c3 = Math.round( c3f ) << 24; + + int[] colors = { c2, c2, c2, c2, 0xff000000, 0xff000000, c2, c2, c2, c2 }; + float[] positions = { 0, p3, p3, p1, p1, p2, p2, p4, p4, 1 }; + shader = new LinearGradient(0, 0, w, 0, colors, positions, Shader.TileMode.CLAMP); + } + mSelectorWheelPaint.setShader(shader); + invalidate(); + } + + + //-------------------------------------------------------------------------- + // + // Scroller-specific methods + // + //-------------------------------------------------------------------------- + + @Override + protected WheelScroller createScroller(WheelScroller.ScrollingListener scrollingListener) { + return new WheelHorizontalScroller(getContext(), scrollingListener); + } + + @Override + protected float getMotionEventPosition(MotionEvent event) { + return event.getX(); + } + + + //-------------------------------------------------------------------------- + // + // Base measurements + // + //-------------------------------------------------------------------------- + + @Override + protected int getBaseDimension() { + return getWidth(); + } + + /** + * Returns height of spinnerwheel item + * @return the item width + */ + @Override + protected int getItemDimension() { + if (itemWidth != 0) { + return itemWidth; + } + + if (mItemsLayout != null && mItemsLayout.getChildAt(0) != null) { + itemWidth = mItemsLayout.getChildAt(0).getMeasuredWidth(); + return itemWidth; + } + + return getBaseDimension() / mVisibleItems; + } + + //-------------------------------------------------------------------------- + // + // Debugging stuff + // + //-------------------------------------------------------------------------- + + + @Override + protected void onScrollTouchedUp() { + super.onScrollTouchedUp(); + int cnt = mItemsLayout.getChildCount(); + View itm; + Log.e(LOG_TAG, " ----- layout: " + mItemsLayout.getMeasuredWidth() + mItemsLayout.getMeasuredHeight()); + Log.e(LOG_TAG, " -------- dumping " + cnt + " items"); + for (int i = 0; i < cnt; i++) { + itm = mItemsLayout.getChildAt(i); + Log.e(LOG_TAG, " item #" + i + ": " + itm.getWidth() + "x" + itm.getHeight()); + itm.forceLayout(); // forcing layout without re-rendering parent + } + Log.e(LOG_TAG, " ---------- dumping finished "); + } + + + //-------------------------------------------------------------------------- + // + // Layout creation and measurement operations + // + //-------------------------------------------------------------------------- + + /** + * Creates item layouts if necessary + */ + @Override + protected void createItemsLayout() { + if (mItemsLayout == null) { + mItemsLayout = new LinearLayout(getContext()); + mItemsLayout.setOrientation(LinearLayout.HORIZONTAL); + } + } + + @Override + protected void doItemsLayout() { + mItemsLayout.layout(0, 0, getMeasuredWidth(), getMeasuredHeight() - 2 * mItemsPadding); + } + + @Override + protected void measureLayout() { + mItemsLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + // XXX: Locating bug + mItemsLayout.measure( + View.MeasureSpec.makeMeasureSpec(getWidth() + getItemDimension(), View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(getHeight(), View.MeasureSpec.AT_MOST)); + } + + //XXX: Most likely, measurements of mItemsLayout or/and its children are done inconrrectly. + // Investigate and fix it + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + int heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + int widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + int heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + + rebuildItems(); // rebuilding before measuring + + int height = calculateLayoutHeight(heightSize, heightMode); + + int width; + if (widthMode == View.MeasureSpec.EXACTLY) { + width = widthSize; + } else { + width = Math.max( + getItemDimension() * (mVisibleItems - mItemOffsetPercent / 100), + getSuggestedMinimumWidth() + ); + + if (widthMode == View.MeasureSpec.AT_MOST) { + width = Math.min(width, widthSize); + } + } + setMeasuredDimension(width, height); + } + + + /** + * Calculates control height and creates text layouts + * @param heightSize the input layout height + * @param mode the layout mode + * @return the calculated control height + */ + private int calculateLayoutHeight(int heightSize, int mode) { + mItemsLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + mItemsLayout.measure( + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(heightSize, View.MeasureSpec.UNSPECIFIED) + ); + int height = mItemsLayout.getMeasuredHeight(); + + if (mode == View.MeasureSpec.EXACTLY) { + height = heightSize; + } else { + height += 2 * mItemsPadding; + + // Check against our minimum width + height = Math.max(height, getSuggestedMinimumHeight()); + + if (mode == View.MeasureSpec.AT_MOST && heightSize < height) { + height = heightSize; + } + } + // forcing recalculating + mItemsLayout.measure( + // MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(400, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(height - 2 * mItemsPadding, View.MeasureSpec.EXACTLY) + ); + + return height; + } + + + //-------------------------------------------------------------------------- + // + // Drawing items + // + //-------------------------------------------------------------------------- + + @Override + protected void drawItems(Canvas canvas) { + canvas.save(); + int w = getMeasuredWidth(); + int h = getMeasuredHeight(); + int iw = getItemDimension(); + + // resetting intermediate bitmap and recreating canvases + mSpinBitmap.eraseColor(0); + Canvas c = new Canvas(mSpinBitmap); + Canvas cSpin = new Canvas(mSpinBitmap); + + int left = (mCurrentItemIdx - mFirstItemIdx) * iw + (iw - getWidth()) / 2; + c.translate(- left + mScrollingOffset, mItemsPadding); + mItemsLayout.draw(c); + +// mSeparatorsBitmap.eraseColor(0); + Canvas cSeparators = new Canvas(mSpinBitmap); + + if (mSelectionDivider != null) { + // draw the top divider + int leftOfLeftDivider = (getWidth() - iw - mSelectionDividerWidth) / 2; + int rightOfLeftDivider = leftOfLeftDivider + mSelectionDividerWidth; + mSelectionDivider.setBounds(leftOfLeftDivider, 0, rightOfLeftDivider, getHeight()); + mSelectionDivider.draw(cSeparators); + + // draw the bottom divider + int leftOfRightDivider = leftOfLeftDivider + iw; + int rightOfRightDivider = rightOfLeftDivider + iw; + mSelectionDivider.setBounds(leftOfRightDivider, 0, rightOfRightDivider, getHeight()); + mSelectionDivider.draw(cSeparators); + } + + cSpin.drawRect(0, 0, w, h, mSelectorWheelPaint); + cSeparators.drawRect(0, 0, w, h, mSeparatorsPaint); + + canvas.drawBitmap(mSpinBitmap, 0, 0, null); + canvas.drawBitmap(mSpinBitmap, 0, 0, null); + canvas.restore(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelRecycler.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelRecycler.java new file mode 100644 index 0000000..ddd36e8 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelRecycler.java @@ -0,0 +1,163 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + +import android.view.View; +import android.widget.LinearLayout; + +import java.util.LinkedList; +import java.util.List; + +/** + * Recycle stored spinnerwheel items to reuse. + */ +public class WheelRecycler { + + + @SuppressWarnings("unused") + private static final String LOG_TAG = WheelRecycler.class.getName(); + + // Cached items + private List items; + + // Cached empty items + private List emptyItems; + + // Wheel view + private AbstractWheel wheel; + + /** + * Constructor + * @param wheel the spinnerwheel view + */ + public WheelRecycler(AbstractWheel wheel) { + this.wheel = wheel; + } + + /** + * Recycles items from specified layout. + * There are saved only items not included to specified range. + * All the cached items are removed from original layout. + * + * @param layout the layout containing items to be cached + * @param firstItem the number of first item in layout + * @param range the range of current spinnerwheel items + * @return the new value of first item number + */ + public int recycleItems(LinearLayout layout, int firstItem, ItemsRange range) { + int index = firstItem; + for (int i = 0; i < layout.getChildCount();) { + if (!range.contains(index)) { + recycleView(layout.getChildAt(i), index); + layout.removeViewAt(i); + if (i == 0) { // first item + firstItem++; + } + } else { + i++; // go to next item + } + index++; + } + return firstItem; + } + + /** + * Gets item view + * @return the cached view + */ + public View getItem() { + return getCachedView(items); + } + + /** + * Gets empty item view + * @return the cached empty view + */ + public View getEmptyItem() { + return getCachedView(emptyItems); + } + + /** + * Clears all views + */ + public void clearAll() { + if (items != null) { + items.clear(); + } + if (emptyItems != null) { + emptyItems.clear(); + } + } + + /** + * Adds view to specified cache. Creates a cache list if it is null. + * @param view the view to be cached + * @param cache the cache list + * @return the cache list + */ + private List addView(View view, List cache) { + if (cache == null) { + cache = new LinkedList(); + } + + cache.add(view); + return cache; + } + + /** + * Adds view to cache. Determines view type (item view or empty one) by index. + * @param view the view to be cached + * @param index the index of view + */ + private void recycleView(View view, int index) { + int count = wheel.getViewAdapter().getItemsCount(); + + if ((index < 0 || index >= count) && !wheel.isCyclic()) { + // empty view + emptyItems = addView(view, emptyItems); + } else { + while (index < 0) { + index = count + index; + } + index %= count; + items = addView(view, items); + } + } + + /** + * Gets view from specified cache. + * @param cache the cache + * @return the first view from cache. + */ + private View getCachedView(List cache) { + if (cache != null && cache.size() > 0) { + View view = cache.get(0); + cache.remove(0); + return view; + } + return null; + } + +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelScroller.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelScroller.java new file mode 100644 index 0000000..cd2a20f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelScroller.java @@ -0,0 +1,281 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.animation.Interpolator; +import android.widget.Scroller; + +/** + * Scroller class handles scrolling events and updates the spinnerwheel + */ +public abstract class WheelScroller { + /** + * Scrolling listener interface + */ + public interface ScrollingListener { + /** + * Scrolling callback called when scrolling is performed. + * @param distance the distance to scroll + */ + void onScroll(int distance); + + /** + * This callback is invoked when scroller has been touched + */ + void onTouch(); + + /** + * This callback is invoked when touch is up + */ + void onTouchUp(); + + /** + * Starting callback called when scrolling is started + */ + void onStarted(); + + /** + * Finishing callback called after justifying + */ + void onFinished(); + + /** + * Justifying callback called to justify a view when scrolling is ended + */ + void onJustify(); + } + + /** Scrolling duration */ + private static final int SCROLLING_DURATION = 400; + + /** Minimum delta for scrolling */ + public static final int MIN_DELTA_FOR_SCROLLING = 1; + + // Listener + private ScrollingListener listener; + + // Context + private Context context; + + // Scrolling + private GestureDetector gestureDetector; + protected Scroller scroller; + private int lastScrollPosition; + private float lastTouchedPosition; + private boolean isScrollingPerformed; + + /** + * Constructor + * @param context the current context + * @param listener the scrolling listener + */ + public WheelScroller(Context context, ScrollingListener listener) { + gestureDetector = new GestureDetector(context, new SimpleOnGestureListener() { + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + // Do scrolling in onTouchEvent() since onScroll() are not call immediately + // when user touch and move the spinnerwheel + return true; + } + + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + lastScrollPosition = 0; + scrollerFling(lastScrollPosition, (int) velocityX, (int) velocityY); + setNextMessage(MESSAGE_SCROLL); + return true; + } + + // public boolean onDown(MotionEvent motionEvent); + + }); + gestureDetector.setIsLongpressEnabled(false); + + scroller = new Scroller(context); + + this.listener = listener; + this.context = context; + } + + /** + * Set the the specified scrolling interpolator + * @param interpolator the interpolator + */ + public void setInterpolator(Interpolator interpolator) { + scroller.forceFinished(true); + scroller = new Scroller(context, interpolator); + } + + /** + * Scroll the spinnerwheel + * @param distance the scrolling distance + * @param time the scrolling duration + */ + public void scroll(int distance, int time) { + scroller.forceFinished(true); + lastScrollPosition = 0; + scrollerStartScroll(distance, time != 0 ? time : SCROLLING_DURATION); + setNextMessage(MESSAGE_SCROLL); + startScrolling(); + } + + /** + * Stops scrolling + */ + public void stopScrolling() { + scroller.forceFinished(true); + } + + /** + * Handles Touch event + * @param event the motion event + * @return + */ + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + + case MotionEvent.ACTION_DOWN: + lastTouchedPosition = getMotionEventPosition(event); + scroller.forceFinished(true); + clearMessages(); + listener.onTouch(); + break; + + case MotionEvent.ACTION_UP: + if (scroller.isFinished()) + listener.onTouchUp(); + break; + + + case MotionEvent.ACTION_MOVE: + // perform scrolling + int distance = (int)(getMotionEventPosition(event) - lastTouchedPosition); + if (distance != 0) { + startScrolling(); + listener.onScroll(distance); + lastTouchedPosition = getMotionEventPosition(event); + } + break; + } + + if (!gestureDetector.onTouchEvent(event) && event.getAction() == MotionEvent.ACTION_UP) { + justify(); + } + + return true; + } + + + // Messages + private final int MESSAGE_SCROLL = 0; + private final int MESSAGE_JUSTIFY = 1; + + /** + * Set next message to queue. Clears queue before. + * + * @param message the message to set + */ + private void setNextMessage(int message) { + clearMessages(); + animationHandler.sendEmptyMessage(message); + } + + /** + * Clears messages from queue + */ + private void clearMessages() { + animationHandler.removeMessages(MESSAGE_SCROLL); + animationHandler.removeMessages(MESSAGE_JUSTIFY); + } + + // animation handler + private Handler animationHandler = new Handler() { + public void handleMessage(Message msg) { + scroller.computeScrollOffset(); + int currPosition = getCurrentScrollerPosition(); + int delta = lastScrollPosition - currPosition; + lastScrollPosition = currPosition; + if (delta != 0) { + listener.onScroll(delta); + } + + // scrolling is not finished when it comes to final Y + // so, finish it manually + if (Math.abs(currPosition - getFinalScrollerPosition()) < MIN_DELTA_FOR_SCROLLING) { + // currPosition = getFinalScrollerPosition(); + scroller.forceFinished(true); + } + if (!scroller.isFinished()) { + animationHandler.sendEmptyMessage(msg.what); + } else if (msg.what == MESSAGE_SCROLL) { + justify(); + } else { + finishScrolling(); + } + } + }; + + /** + * Justifies spinnerwheel + */ + private void justify() { + listener.onJustify(); + setNextMessage(MESSAGE_JUSTIFY); + } + + /** + * Starts scrolling + */ + private void startScrolling() { + if (!isScrollingPerformed) { + isScrollingPerformed = true; + listener.onStarted(); + } + } + + /** + * Finishes scrolling + */ + protected void finishScrolling() { + if (isScrollingPerformed) { + listener.onFinished(); + isScrollingPerformed = false; + } + } + + protected abstract int getCurrentScrollerPosition(); + + protected abstract int getFinalScrollerPosition(); + + protected abstract float getMotionEventPosition(MotionEvent event); + + protected abstract void scrollerStartScroll(int distance, int time); + + protected abstract void scrollerFling(int position, int velocityX, int velocityY); +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalScroller.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalScroller.java new file mode 100644 index 0000000..ce8ad81 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalScroller.java @@ -0,0 +1,71 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + +import android.content.Context; +import android.view.MotionEvent; + +/** + * Scroller class handles scrolling events and updates the + */ +public class WheelVerticalScroller extends WheelScroller { + + /** + * Constructor + * @param context the current context + * @param listener the scrolling listener + */ + public WheelVerticalScroller(Context context, ScrollingListener listener) { + super(context, listener); + } + + @Override + protected int getCurrentScrollerPosition() { + return scroller.getCurrY(); + } + + @Override + protected int getFinalScrollerPosition() { + return scroller.getFinalY(); + } + + @Override + protected float getMotionEventPosition(MotionEvent event) { + // should be overriden + return event.getY(); + } + + @Override + protected void scrollerStartScroll(int distance, int time) { + scroller.startScroll(0, 0, 0, distance, time); + } + + @Override + protected void scrollerFling(int position, int velocityX, int velocityY) { + final int maxPosition = 0x7FFFFFFF; + final int minPosition = -maxPosition; + scroller.fling(0, position, 0, -velocityY, 0, 0, minPosition, maxPosition); + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalView.java b/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalView.java new file mode 100644 index 0000000..ba0669a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/WheelVerticalView.java @@ -0,0 +1,344 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Shader; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; + +/** + * Spinner wheel vertical view. + * + * @author Yuri Kanivets + * @author Dimitri Fedorov + */ +public class WheelVerticalView extends AbstractWheelView { + + private static int itemID = -1; + + @SuppressWarnings("unused") + private final String LOG_TAG = WheelVerticalView.class.getName() + " #" + (++itemID); + + /** + * The height of the selection divider. + */ + protected int mSelectionDividerHeight; + + // Cached item height + private int mItemHeight = 0; + + //-------------------------------------------------------------------------- + // + // Constructors + // + //-------------------------------------------------------------------------- + + /** + * Create a new wheel vertical view. + * + * @param context The application environment. + */ + public WheelVerticalView(Context context) { + this(context, null); + } + + /** + * Create a new wheel vertical view. + * + * @param context The application environment. + * @param attrs A collection of attributes. + */ + public WheelVerticalView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.abstractWheelViewStyle); + } + + /** + * Create a new wheel vertical view. + * + * @param context the application environment. + * @param attrs a collection of attributes. + * @param defStyle The default style to apply to this view. + */ + public WheelVerticalView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + + //-------------------------------------------------------------------------- + // + // Initiating assets and setter for selector paint + // + //-------------------------------------------------------------------------- + + @Override + protected void initAttributes(AttributeSet attrs, int defStyle) { + super.initAttributes(attrs, defStyle); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.WheelVerticalView, defStyle, 0); + mSelectionDividerHeight = a.getDimensionPixelSize(R.styleable.WheelVerticalView_selectionDividerHeight, DEF_SELECTION_DIVIDER_SIZE); + a.recycle(); + } + + @Override + public void setSelectorPaintCoeff(float coeff) { + LinearGradient shader; + + int h = getMeasuredHeight(); + int ih = getItemDimension(); + float p1 = (1 - ih/(float) h)/2; + float p2 = (1 + ih/(float) h)/2; + float z = mItemsDimmedAlpha * (1 - coeff); + float c1f = z + 255 * coeff; + + if (mVisibleItems == 2) { + int c1 = Math.round( c1f ) << 24; + int c2 = Math.round( z ) << 24; + int[] colors = {c2, c1, 0xff000000, 0xff000000, c1, c2}; + float[] positions = { 0, p1, p1, p2, p2, 1}; + shader = new LinearGradient(0, 0, 0, h, colors, positions, Shader.TileMode.CLAMP); + } else { + float p3 = (1 - ih*3/(float) h)/2; + float p4 = (1 + ih*3/(float) h)/2; + + float s = 255 * p3/p1; + float c3f = s * coeff ; // here goes some optimized stuff + float c2f = z + c3f; + + int c1 = Math.round( c1f ) << 24; + int c2 = Math.round( c2f ) << 24; + int c3 = Math.round( c3f ) << 24; + + int[] colors = {0, c3, c2, c1, 0xff000000, 0xff000000, c1, c2, c3, 0}; + float[] positions = {0, p3, p3, p1, p1, p2, p2, p4, p4, 1}; + shader = new LinearGradient(0, 0, 0, h, colors, positions, Shader.TileMode.CLAMP); + } + mSelectorWheelPaint.setShader(shader); + invalidate(); + } + + + //-------------------------------------------------------------------------- + // + // Scroller-specific methods + // + //-------------------------------------------------------------------------- + + @Override + protected WheelScroller createScroller(WheelScroller.ScrollingListener scrollingListener) { + return new WheelVerticalScroller(getContext(), scrollingListener); + } + + @Override + protected float getMotionEventPosition(MotionEvent event) { + return event.getY(); + } + + //-------------------------------------------------------------------------- + // + // Base measurements + // + //-------------------------------------------------------------------------- + + @Override + protected int getBaseDimension() { + return getHeight(); + } + + /** + * Returns height of the spinnerwheel + * @return the item height + */ + @Override + protected int getItemDimension() { + if (mItemHeight != 0) { + return mItemHeight; + } + + if (mItemsLayout != null && mItemsLayout.getChildAt(0) != null) { + mItemHeight = mItemsLayout.getChildAt(0).getMeasuredHeight(); + return mItemHeight; + } + + return getBaseDimension() / mVisibleItems; + } + + //-------------------------------------------------------------------------- + // + // Layout creation and measurement operations + // + //-------------------------------------------------------------------------- + + /** + * Creates item layout if necessary + */ + @Override + protected void createItemsLayout() { + if (mItemsLayout == null) { + mItemsLayout = new LinearLayout(getContext()); + mItemsLayout.setOrientation(LinearLayout.VERTICAL); + } + } + + @Override + protected void doItemsLayout() { + mItemsLayout.layout(0, 0, getMeasuredWidth() - 2 * mItemsPadding, getMeasuredHeight()); + } + + + @Override + protected void measureLayout() { + mItemsLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + + mItemsLayout.measure( + View.MeasureSpec.makeMeasureSpec(getWidth() - 2 * mItemsPadding, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ); + + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + int heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + int widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + int heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + + rebuildItems(); // rebuilding before measuring + + int width = calculateLayoutWidth(widthSize, widthMode); + + int height; + if (heightMode == View.MeasureSpec.EXACTLY) { + height = heightSize; + } else { + height = Math.max( + getItemDimension() * (mVisibleItems - mItemOffsetPercent / 100), + getSuggestedMinimumHeight() + ); + + if (heightMode == View.MeasureSpec.AT_MOST) { + height = Math.min(height, heightSize); + } + } + setMeasuredDimension(width, height); + } + + /** + * Calculates control width + * @param widthSize the input layout width + * @param mode the layout mode + * @return the calculated control width + */ + private int calculateLayoutWidth(int widthSize, int mode) { + mItemsLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + mItemsLayout.measure( + View.MeasureSpec.makeMeasureSpec(widthSize, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ); + int width = mItemsLayout.getMeasuredWidth(); + + if (mode == View.MeasureSpec.EXACTLY) { + width = widthSize; + } else { + width += 2 * mItemsPadding; + + // Check against our minimum width + width = Math.max(width, getSuggestedMinimumWidth()); + + if (mode == View.MeasureSpec.AT_MOST && widthSize < width) { + width = widthSize; + } + } + + // forcing recalculating + mItemsLayout.measure( + View.MeasureSpec.makeMeasureSpec(width - 2 * mItemsPadding, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ); + + return width; + } + + + //-------------------------------------------------------------------------- + // + // Drawing items + // + //-------------------------------------------------------------------------- + + @Override + protected void drawItems(Canvas canvas) { + canvas.save(); + int w = getMeasuredWidth(); + int h = getMeasuredHeight(); + int ih = getItemDimension(); + + // resetting intermediate bitmap and recreating canvases + mSpinBitmap.eraseColor(0); + Canvas c = new Canvas(mSpinBitmap); + Canvas cSpin = new Canvas(mSpinBitmap); + + int top = (mCurrentItemIdx - mFirstItemIdx) * ih + (ih - getHeight()) / 2; + c.translate(mItemsPadding, - top + mScrollingOffset); + mItemsLayout.draw(c); + +// mSeparatorsBitmap.eraseColor(0); + Canvas cSeparators = new Canvas(mSpinBitmap); + + if (mSelectionDivider != null) { + // draw the top divider + int topOfTopDivider = (getHeight() - ih - mSelectionDividerHeight) / 2; + int bottomOfTopDivider = topOfTopDivider + mSelectionDividerHeight; + mSelectionDivider.setBounds(0, topOfTopDivider, w, bottomOfTopDivider); + mSelectionDivider.draw(cSeparators); + + // draw the bottom divider + int topOfBottomDivider = topOfTopDivider + ih; + int bottomOfBottomDivider = bottomOfTopDivider + ih; + mSelectionDivider.setBounds(0, topOfBottomDivider, w, bottomOfBottomDivider); + mSelectionDivider.draw(cSeparators); + } + + cSpin.drawRect(0, 0, w, h, mSelectorWheelPaint); + cSeparators.drawRect(0, 0, w, h, mSeparatorsPaint); + + canvas.drawBitmap(mSpinBitmap, 0, 0, null); + canvas.drawBitmap(mSpinBitmap, 0, 0, null); + canvas.restore(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelAdapter.java b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelAdapter.java new file mode 100644 index 0000000..be3dafc --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelAdapter.java @@ -0,0 +1,82 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker.adapters; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; + +import java.util.LinkedList; +import java.util.List; + +/** + * Abstract Wheel adapter. + */ +public abstract class AbstractWheelAdapter implements WheelViewAdapter { + // Observers + private List datasetObservers; + + @Override + public View getEmptyItem(View convertView, ViewGroup parent) { + return null; + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + if (datasetObservers == null) { + datasetObservers = new LinkedList(); + } + datasetObservers.add(observer); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + if (datasetObservers != null) { + datasetObservers.remove(observer); + } + } + + /** + * Notifies observers about data changing + */ + protected void notifyDataChangedEvent() { + if (datasetObservers != null) { + for (DataSetObserver observer : datasetObservers) { + observer.onChanged(); + } + } + } + + /** + * Notifies observers about invalidating data + */ + protected void notifyDataInvalidatedEvent() { + if (datasetObservers != null) { + for (DataSetObserver observer : datasetObservers) { + observer.onInvalidated(); + } + } + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelTextAdapter.java b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelTextAdapter.java new file mode 100644 index 0000000..4864a34 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/AbstractWheelTextAdapter.java @@ -0,0 +1,289 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ +package com.lechange.demo.common.datepicker.adapters; + +import android.content.Context; +import android.graphics.Typeface; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +/** + * Abstract spinnerwheel adapter provides common functionality for adapters. + */ +public abstract class AbstractWheelTextAdapter extends AbstractWheelAdapter { + + /** Text view resource. Used as a default view for adapter. */ + public static final int TEXT_VIEW_ITEM_RESOURCE = -1; + + /** No resource constant. */ + protected static final int NO_RESOURCE = 0; + + /** Default text color */ + public static final int DEFAULT_TEXT_COLOR = 0xFF101010; + + /** Default text color */ + public static final int LABEL_COLOR = 0xFF700070; + + /** Default text size */ + public static final int DEFAULT_TEXT_SIZE = 24; + + /// Custom text typeface + private Typeface textTypeface; + + // Text settings + private int textColor = DEFAULT_TEXT_COLOR; + private int textSize = DEFAULT_TEXT_SIZE; + + // Current context + protected Context context; + // Layout inflater + protected LayoutInflater inflater; + + // Items resources + protected int itemResourceId; + protected int itemTextResourceId; + + // Empty items resources + protected int emptyItemResourceId; + + + /** + * Constructor + * @param context the current context + */ + protected AbstractWheelTextAdapter(Context context) { + this(context, TEXT_VIEW_ITEM_RESOURCE); + } + + /** + * Constructor + * @param context the current context + * @param itemResource the resource ID for a layout file containing a TextView to use when instantiating items views + */ + protected AbstractWheelTextAdapter(Context context, int itemResource) { + this(context, itemResource, NO_RESOURCE); + } + + /** + * Constructor + * @param context the current context + * @param itemResource the resource ID for a layout file containing a TextView to use when instantiating items views + * @param itemTextResource the resource ID for a text view in the item layout + */ + protected AbstractWheelTextAdapter(Context context, int itemResource, int itemTextResource) { + this.context = context; + itemResourceId = itemResource; + itemTextResourceId = itemTextResource; + + inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * Gets text color + * @return the text color + */ + public int getTextColor() { + return textColor; + } + + /** + * Sets text color + * @param textColor the text color to set + */ + public void setTextColor(int textColor) { + this.textColor = textColor; + } + + /** + * Sets text typeface + * @param typeface typeface to set + */ + public void setTextTypeface(Typeface typeface) { + this.textTypeface = typeface; + } + + /** + * Gets text size + * @return the text size + */ + public int getTextSize() { + return textSize; + } + + /** + * Sets text size + * @param textSize the text size to set + */ + public void setTextSize(int textSize) { + this.textSize = textSize; + } + + /** + * Gets resource Id for items views + * @return the item resource Id + */ + public int getItemResource() { + return itemResourceId; + } + + /** + * Sets resource Id for items views + * @param itemResourceId the resource Id to set + */ + public void setItemResource(int itemResourceId) { + this.itemResourceId = itemResourceId; + } + + /** + * Gets resource Id for text view in item layout + * @return the item text resource Id + */ + public int getItemTextResource() { + return itemTextResourceId; + } + + /** + * Sets resource Id for text view in item layout + * @param itemTextResourceId the item text resource Id to set + */ + public void setItemTextResource(int itemTextResourceId) { + this.itemTextResourceId = itemTextResourceId; + } + + /** + * Gets resource Id for empty items views + * @return the empty item resource Id + */ + public int getEmptyItemResource() { + return emptyItemResourceId; + } + + /** + * Sets resource Id for empty items views + * @param emptyItemResourceId the empty item resource Id to set + */ + public void setEmptyItemResource(int emptyItemResourceId) { + this.emptyItemResourceId = emptyItemResourceId; + } + + /** + * Returns text for specified item + * @param index the item index + * @return the text of specified items + */ + protected abstract CharSequence getItemText(int index); + + @Override + public View getItem(int index, View convertView, ViewGroup parent) { + if (index >= 0 && index < getItemsCount()) { + if (convertView == null) { + convertView = getView(itemResourceId, parent); + } + TextView textView = getTextView(convertView, itemTextResourceId); + if (textView != null) { + CharSequence text = getItemText(index); + if (text == null) { + text = ""; + } + textView.setText(text); + configureTextView(textView); + } + return convertView; + } + return null; + } + + @Override + public View getEmptyItem(View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = getView(emptyItemResourceId, parent); + } + if (convertView instanceof TextView) { + configureTextView((TextView)convertView); + } + + return convertView; + } + + /** + * Configures text view. Is called for the TEXT_VIEW_ITEM_RESOURCE views. + * @param view the text view to be configured + */ + protected void configureTextView(TextView view) { + if (itemResourceId == TEXT_VIEW_ITEM_RESOURCE) { + view.setTextColor(textColor); + view.setGravity(Gravity.CENTER); + view.setTextSize(textSize); + view.setLines(1); + } + if (textTypeface != null) { + view.setTypeface(textTypeface); + } else { + view.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD); + } + } + + /** + * Loads a text view from view + * @param view the text view or layout containing it + * @param textResource the text resource Id in layout + * @return the loaded text view + */ + private TextView getTextView(View view, int textResource) { + TextView text = null; + try { + if (textResource == NO_RESOURCE && view instanceof TextView) { + text = (TextView) view; + } else if (textResource != NO_RESOURCE) { + text = (TextView) view.findViewById(textResource); + } + } catch (ClassCastException e) { + Log.e("AbstractWheelAdapter", "You must supply a resource ID for a TextView"); + throw new IllegalStateException( + "AbstractWheelAdapter requires the resource ID to be a TextView", e); + } + + return text; + } + + /** + * Loads view from resources + * @param resource the resource Id + * @return the loaded view or null if resource is not set + */ + private View getView(int resource, ViewGroup parent) { + switch (resource) { + case NO_RESOURCE: + return null; + case TEXT_VIEW_ITEM_RESOURCE: + return new TextView(context); + default: + return inflater.inflate(resource, parent, false); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/adapters/ArrayWheelAdapter.java b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/ArrayWheelAdapter.java new file mode 100644 index 0000000..54ff65c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/ArrayWheelAdapter.java @@ -0,0 +1,70 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ +package com.lechange.demo.common.datepicker.adapters; + +import android.content.Context; + +/** + * The simple Array spinnerwheel adapter + * + * @param + * the element type + */ +public class ArrayWheelAdapter extends AbstractWheelTextAdapter { + + // items + private T items[]; + + /** + * Constructor + * + * @param context + * the current context + * @param items + * the items + */ + public ArrayWheelAdapter(Context context, T items[]) { + super(context); + + // setEmptyItemResource(TEXT_VIEW_ITEM_RESOURCE); + this.items = items; + } + + @Override + public CharSequence getItemText(int index) { + if (index >= 0 && index < items.length) { + T item = items[index]; + if (item instanceof CharSequence) { + return (CharSequence) item; + } + return item.toString(); + } + return null; + } + + @Override + public int getItemsCount() { + return items.length; + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/adapters/NumericWheelAdapter.java b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/NumericWheelAdapter.java new file mode 100644 index 0000000..1afe288 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/NumericWheelAdapter.java @@ -0,0 +1,106 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker.adapters; + +import android.content.Context; + +/** + * Numeric Wheel adapter. + */ +public class NumericWheelAdapter extends AbstractWheelTextAdapter { + + /** The default min value */ + public static final int DEFAULT_MAX_VALUE = 9; + + /** The default max value */ + private static final int DEFAULT_MIN_VALUE = 0; + + // Values + private int minValue; + private int maxValue; + + // format + private String format; + + /** + * Constructor + * + * @param context + * the current context + */ + public NumericWheelAdapter(Context context) { + this(context, DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE); + } + + /** + * Constructor + * + * @param context + * the current context + * @param minValue + * the spinnerwheel min value + * @param maxValue + * the spinnerwheel max value + */ + public NumericWheelAdapter(Context context, int minValue, int maxValue) { + this(context, minValue, maxValue, null); + } + + /** + * Constructor + * + * @param context + * the current context + * @param minValue + * the spinnerwheel min value + * @param maxValue + * the spinnerwheel max value + * @param format + * the format string + */ + public NumericWheelAdapter(Context context, int minValue, int maxValue, + String format) { + super(context); + + this.minValue = minValue; + this.maxValue = maxValue; + this.format = format; + } + + @Override + public CharSequence getItemText(int index) { + if (index >= 0 && index < getItemsCount()) { + int value = minValue + index; + return format != null ? String.format(format, value) : Integer + .toString(value); + } + return null; + } + + @Override + public int getItemsCount() { + return maxValue - minValue + 1; + } +} diff --git a/app/src/main/java/com/lechange/demo/common/datepicker/adapters/WheelViewAdapter.java b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/WheelViewAdapter.java new file mode 100644 index 0000000..297095d --- /dev/null +++ b/app/src/main/java/com/lechange/demo/common/datepicker/adapters/WheelViewAdapter.java @@ -0,0 +1,72 @@ +/* + * android-spinnerwheel + * https://github.com/ai212983/android-spinnerwheel + * + * based on + * + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2011 Yuri Kanivets + * + * Licensed 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. + */ + +package com.lechange.demo.common.datepicker.adapters; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; + +/** + * Wheel items adapter interface + */ +public interface WheelViewAdapter { + /** + * Gets items count + * @return the count of spinnerwheel items + */ + public int getItemsCount(); + + /** + * Get a View that displays the data at the specified position in the data set + * + * @param index the item index + * @param convertView the old view to reuse if possible + * @param parent the parent that this view will eventually be attached to + * @return the spinnerwheel item View + */ + public View getItem(int index, View convertView, ViewGroup parent); + + /** + * Get a View that displays an empty spinnerwheel item placed before the first or after + * the last spinnerwheel item. + * + * @param convertView the old view to reuse if possible + * @param parent the parent that this view will eventually be attached to + * @return the empty item View + */ + public View getEmptyItem(View convertView, ViewGroup parent); + + /** + * Register an observer that is called when changes happen to the data used by this adapter. + * @param observer the observer to be registered + */ + public void registerDataSetObserver(DataSetObserver observer); + + /** + * Unregister an observer that has previously been registered + * @param observer the observer to be unregistered + */ + void unregisterDataSetObserver(DataSetObserver observer); +} diff --git a/app/src/main/java/com/lechange/demo/dialog/DeviceUpdateDialog.java b/app/src/main/java/com/lechange/demo/dialog/DeviceUpdateDialog.java new file mode 100644 index 0000000..c6c3e1c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/dialog/DeviceUpdateDialog.java @@ -0,0 +1,59 @@ +package com.lechange.demo.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; + + +public class DeviceUpdateDialog extends Dialog { + private TextView tv_title; + private TextView tv_msg; + private TextView btn_ok; + private TextView btn_cancel; + + public DeviceUpdateDialog(Context context) { + super(context, R.style.sign_dialog); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_device_update); + tv_title = findViewById(R.id.tv_title); + tv_msg = findViewById(R.id.tv_msg); + btn_ok = findViewById(R.id.btn_ok); + btn_cancel = findViewById(R.id.btn_cancel); + btn_ok.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mOnOkClickLisenter != null) { + mOnOkClickLisenter.OnOK(); + } + dismiss(); + + } + }); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dismiss(); + + } + }); + } + + public interface OnOkClickLisenter { + void OnOK(); + } + + private OnOkClickLisenter mOnOkClickLisenter; + + public void setOnOkClickLisenter(OnOkClickLisenter lisenter) { + this.mOnOkClickLisenter = lisenter; + } + +} diff --git a/app/src/main/java/com/lechange/demo/dialog/EncryptKeyInputDialog.java b/app/src/main/java/com/lechange/demo/dialog/EncryptKeyInputDialog.java new file mode 100644 index 0000000..b5fa4a1 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/dialog/EncryptKeyInputDialog.java @@ -0,0 +1,72 @@ +package com.lechange.demo.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.mm.android.deviceaddmodule.mobilecommon.widget.ClearEditText; +import com.yonsz.z1.R; + +public class EncryptKeyInputDialog extends Dialog { + + private TextView tvTitle; + private ClearEditText encryptKey; + private TextView tvCancel; + private TextView tvSure; + private OnClick onClick; + + public EncryptKeyInputDialog(Context context) { + super(context, R.style.custom_dialog); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_encryptkey_input); + setCanceledOnTouchOutside(false); + initView(); + } + + public void setText(String content){ + tvTitle.setText(content); + } + + + private void initView() { + tvTitle = findViewById(R.id.tv_title); + encryptKey = findViewById(R.id.encrypt_key); + tvCancel = findViewById(R.id.tv_cancel); + tvSure = findViewById(R.id.tv_sure); + tvCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismissLoading(); + } + }); + tvSure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String key = encryptKey.getText().toString().trim(); + if (onClick != null && !TextUtils.isEmpty(key)) { + onClick.onSure(key); + dismissLoading(); + } + } + }); + } + + public void dismissLoading() { + dismiss(); + } + + public interface OnClick { + void onSure(String txt); + } + + public void setOnClick(OnClick onClick) { + this.onClick = onClick; + } +} diff --git a/app/src/main/java/com/lechange/demo/dialog/LoadingDialog.java b/app/src/main/java/com/lechange/demo/dialog/LoadingDialog.java new file mode 100644 index 0000000..7cb11b1 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/dialog/LoadingDialog.java @@ -0,0 +1,35 @@ +package com.lechange.demo.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.ProgressBar; + +import com.yonsz.z1.R; + + +public class LoadingDialog extends Dialog { + ProgressBar av_anim; + + public LoadingDialog(Context context) { + super(context, R.style.custom_dialog); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_loading_view); + setCanceledOnTouchOutside(false); + initView(); + } + + private void initView() { + av_anim = (ProgressBar) findViewById(R.id.av_anim); + } + + public void dismissLoading() { + av_anim.setVisibility(View.GONE); + dismiss(); + } +} diff --git a/app/src/main/java/com/lechange/demo/dialog/PasswordDialog.java b/app/src/main/java/com/lechange/demo/dialog/PasswordDialog.java new file mode 100644 index 0000000..7d7b158 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/dialog/PasswordDialog.java @@ -0,0 +1,148 @@ +package com.lechange.demo.dialog; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.View; +import android.widget.EditText; +import android.widget.LinearLayout; + +import com.lechange.demo.listener.PasswordSetListener; +import com.yonsz.z1.R; + +public class PasswordDialog extends DialogFragment { + + + private PasswordSetListener mListener; + // private EditText mEditText; + private EditText editText1; + + private int currentType = -1; //1 表示设备密码 2表示wifi密码 设备初始化的密码 + + @Override + public void setStyle(int style, int theme) { + super.setStyle(style, theme); + } + + @Override + public void dismiss() { + super.dismiss(); + } + + @Override + public void setCancelable(boolean cancelable) { + super.setCancelable(cancelable); + } + + @Override + public boolean isCancelable() { + return super.isCancelable(); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + } + + @Override + public void onDetach() { + super.onDetach(); + } + + /** + * 注释原因:wifi密码从设备添加页面携带过来,不再从密码框输入中获取 + * + * @param savedInstanceState + */ + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// mEditText = new EditText(getActivity()); + editText1 = new EditText(getActivity()); +// mEditText.setHint(getResources().getString(R.string.please_input_connect_wifi_password)); + editText1.setHint(getResources().getString(R.string.please_input_init_password)); + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage("请输入密码"); + LinearLayout linearLayout = new LinearLayout(getActivity()); + linearLayout.setOrientation(LinearLayout.VERTICAL); +// linearLayout.addView(mEditText); + linearLayout.addView(editText1); + builder.setView(linearLayout); + if (currentType == 1) { + editText1.setHint(getResources().getString(R.string.please_input_init_password)); + editText1.setVisibility(View.VISIBLE); + } else if (currentType == 2) { + editText1.setHint(getResources().getString(R.string.please_input_init_password_old)); + editText1.setVisibility(View.VISIBLE); + } else { + editText1.setVisibility(View.GONE); + } + + builder.setPositiveButton(getResources().getString(R.string.dialog_positive), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + if (null != mListener) { + if (currentType == 1 || currentType == 2) { +// mListener.onSaveSuccess(mEditText.getText().toString(),editText1.getText().toString()); + mListener.onSaveSuccess(editText1.getText().toString()); + } else { +// mListener.onWifiPassWord(mEditText.getText().toString(),editText1.getText().toString()); + mListener.onWifiPassWord(editText1.getText().toString()); + } + } + } + }); + builder.setNegativeButton(getResources().getString(R.string.dialog_negative), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dismiss(); + } + }); + builder.setCancelable(false); + AlertDialog alertDialog = builder.create(); + return alertDialog; + } + + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void onStart() { + super.onStart(); + } + + @Override + public void onStop() { + super.onStop(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } + + + public void setListener(PasswordSetListener listener) { + this.mListener = listener; + + } + + + public void setCurrentType(int currentType) { + this.currentType = currentType; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/handler/ActivityHandler.java b/app/src/main/java/com/lechange/demo/handler/ActivityHandler.java new file mode 100644 index 0000000..c14d377 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/handler/ActivityHandler.java @@ -0,0 +1,25 @@ +package com.lechange.demo.handler; + +import android.os.Handler; +import android.os.Message; +import android.support.v4.app.FragmentActivity; + +import java.lang.ref.WeakReference; + +public abstract class ActivityHandler extends Handler { + private WeakReference mActivity; + public ActivityHandler(FragmentActivity activity){ + super(); + this.mActivity = new WeakReference(activity); + } + public abstract void handleMsg(Message msg); + @Override + public void handleMessage(Message msg) { + FragmentActivity activity = mActivity.get(); + if(activity == null){ + return; + } + handleMsg(msg); + super.handleMessage(msg); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/listener/PasswordSetListener.java b/app/src/main/java/com/lechange/demo/listener/PasswordSetListener.java new file mode 100644 index 0000000..aecc5af --- /dev/null +++ b/app/src/main/java/com/lechange/demo/listener/PasswordSetListener.java @@ -0,0 +1,6 @@ +package com.lechange.demo.listener; + +public interface PasswordSetListener { + void onSaveSuccess(String psw1); + void onWifiPassWord(String psw1); +} diff --git a/app/src/main/java/com/lechange/demo/listview/DevicelistActivity.java b/app/src/main/java/com/lechange/demo/listview/DevicelistActivity.java new file mode 100644 index 0000000..08d2280 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/listview/DevicelistActivity.java @@ -0,0 +1,498 @@ +package com.lechange.demo.listview; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListView; +import android.widget.Toast; + +import com.lechange.common.log.Logger; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.RetObject; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.common.CommonTitle; +import com.lechange.demo.common.CommonTitle.OnTitleClickListener; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.manager.DeviceAddActivity; +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +public class DevicelistActivity extends Activity { + private final String tag = "MainActivity"; + private ListView mListview; + private CommonTitle mCommonTitle; + private ProgressDialog mProgressDialog; //请求加载使用 + private List mChannelInfoList; + private ChannelAdapter mChnlAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_list); + + //绘制标题 + mCommonTitle = (CommonTitle) findViewById(R.id.title); + mCommonTitle.initView(R.drawable.title_btn_back, R.drawable.title_btn_deviceadd, R.string.devices_name); + + mCommonTitle.setOnTitleClickListener(new OnTitleClickListener() { + @Override + public void onCommonTitleClick(int id) { + // TODO Auto-generated method stub + switch (id) { + case CommonTitle.ID_LEFT: + finish(); + break; + case CommonTitle.ID_RIGHT: + Intent intent = new Intent(DevicelistActivity.this, DeviceAddActivity.class); + Log.d(tag, "LcnDeviceAddActivity"); + startActivityForResult(intent, 0); + break; + default: + break; + } + } + }); + + //开启请求加载控件 + mProgressDialog = (ProgressDialog) this.findViewById(R.id.query_load); + mProgressDialog.setStart(getString(R.string.common_loading)); + + //绘制list + mListview = (ListView) this.findViewById(R.id.list_devices); + mChnlAdapter = new ChannelAdapter(this); + mListview.setAdapter(mChnlAdapter); + + // 初始化数据 + loadChannelList(); + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (resultCode) { //resultCode为回传的标记 + case RESULT_OK: + loadChannelList(); + mChnlAdapter.notifyDataSetChanged(); + mProgressDialog.setStart(getString(R.string.common_loading)); + //Toast.makeText(DevicelistActivity.this, "刷新完成", Toast.LENGTH_SHORT).show(); + break; + default: + break; + } + } + + private void loadChannelList() { + + mChannelInfoList = new ArrayList(); + + + // 初始化数据 + Business.getInstance().getChannelList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + Business.RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0) { + mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + mChnlAdapter.notifyDataSetChanged(); + // addDevices(); + } else { + Toast.makeText(DevicelistActivity.this, R.string.toast_device_no_devices, Toast.LENGTH_LONG).show(); + } + } else { + Toast.makeText(DevicelistActivity.this, retObject.mMsg, Toast.LENGTH_LONG).show(); + Logger.e(tag, retObject.mMsg); + } + } + }); + + //国内支持共享设备和授权设备 + if (!Business.getInstance().isOversea) { + Business.getInstance().getSharedDeviceList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + Business.RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0 && retObject.resp != null) { + mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + mChnlAdapter.notifyDataSetChanged(); + } else { + Toast.makeText(DevicelistActivity.this, R.string.devices_no_shared_device, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(DevicelistActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + System.out.println("devices"); + Business.getInstance().getBeAuthDeviceList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + Business.RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0 && retObject.resp != null) { + mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + mChnlAdapter.notifyDataSetChanged(); + } else { + Toast.makeText(DevicelistActivity.this, R.string.devices_no_authorized_device, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(DevicelistActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + } + // try { + // Thread.sleep(50000); + // } catch (InterruptedException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + + // addDevices(); + } + + private void addDevices() { + for (int i = 0; i < mChannelInfoList.size(); i++) { + StringBuilder devicesJson = new StringBuilder(); + if (mChannelInfoList.size() > 0) { + ChannelInfo c = mChannelInfoList.get(i); + devicesJson.append("[{\"Sn\":\"" + c.getDeviceCode() + "\","); + devicesJson.append("\"Port\":554,"); + devicesJson.append("\"User\":\"\","); + devicesJson.append("\"Pwd\":\"\","); + devicesJson.append("\"Type\":1}]"); + + Business.getInstance().addDevices(devicesJson.toString(), new Handler() { + @Override + public void handleMessage(Message msg) { + Toast.makeText(DevicelistActivity.this, (String) msg.obj, Toast.LENGTH_LONG).show(); + } + }); + } + } + + } + + static class ViewHolder { + /*TextView mChannelName; + ImageView mDelete; + RelativeLayout mBgDevice; + ImageView mLiveVideo; + ImageView mLocalVideo; + ImageView mCloudVideo; + ImageView mMessage; + ImageView mSetting; + LinearLayout mListShade; + ChannelInfo mInfo;*/ + } + + private class ChannelAdapter extends BaseAdapter { + private LayoutInflater mInflater; + + public ChannelAdapter(Context context) { + mInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return mChannelInfoList != null ? mChannelInfoList.size() : 0; + } + + @Override + public ChannelInfo getItem(int position) { + return mChannelInfoList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + private void unBindDevice(final ChannelInfo info) { + Business.getInstance().unBindDevice(info.getDeviceCode(), new Handler() { + @Override + public void handleMessage(Message msg) { + RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0) { + Toast.makeText(getApplicationContext(), R.string.toast_device_delete_success, Toast.LENGTH_SHORT).show(); + mChannelInfoList.remove(info); + mChnlAdapter.notifyDataSetChanged(); + } else { + Toast.makeText(getApplicationContext(), retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + + } + }); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + + /*if (convertView == null) { + convertView = mInflater.inflate(R.layout.activity_device_list_item, null); + holder = new ViewHolder(); + holder.mChannelName = (TextView) convertView.findViewById(R.id.list_channel_name); + holder.mDelete = (ImageView) convertView.findViewById(R.id.list_device_delete); + holder.mBgDevice = (RelativeLayout) convertView.findViewById(R.id.list_bg_device); + holder.mLiveVideo = (ImageView) convertView.findViewById(R.id.list_device_livevideo); + holder.mLocalVideo = (ImageView) convertView.findViewById(R.id.list_device_localvideo); + holder.mCloudVideo = (ImageView) convertView.findViewById(R.id.list_device_cloudvideo); + holder.mMessage = (ImageView) convertView.findViewById(R.id.list_device_message); + holder.mSetting = (ImageView) convertView.findViewById(R.id.list_device_setting); + holder.mListShade = (LinearLayout) convertView.findViewById(R.id.list_shade); + + //设置监听 + holder.mDelete.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + DialogInterface.OnClickListener dialogOnclicListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case Dialog.BUTTON_POSITIVE: + unBindDevice(holder.mInfo); + break; + case Dialog.BUTTON_NEGATIVE: + break; + case Dialog.BUTTON_NEUTRAL: + break; + } + } + }; + //dialog参数设置 + AlertDialog.Builder builder = new AlertDialog.Builder(DevicelistActivity.this); //先得到构造器 + builder.setTitle(R.string.devices_delete_dialog_title); //设置标题 + builder.setMessage(R.string.devices_delete_dialog_message); //设置内容 + builder.setPositiveButton(R.string.dialog_positive, dialogOnclicListener); + builder.setNegativeButton(R.string.dialog_negative, dialogOnclicListener); + builder.create().show(); + } + }); + + holder.mListShade.setVisibility(View.GONE); + + holder.mLiveVideo.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // 启动实时视频 + final EditText et = new EditText(DevicelistActivity.this); + if (holder.mInfo.getEncryptMode() == 1 && holder.mInfo.getEncryptKey() == null) { + new AlertDialog.Builder(DevicelistActivity.this).setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info).setView(et) + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + holder.mInfo.setEncryptKey(et.getText().toString()); + Intent intent = new Intent(DevicelistActivity.this, MediaPlayActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_ONLINE); + intent.putExtra("MEDIA_TITLE", R.string.live_play_name); + DevicelistActivity.this.startActivityForResult(intent, 0); + } + }) + .setNegativeButton(R.string.dialog_negative, null).show(); + } else { + Intent intent = new Intent(DevicelistActivity.this, MediaPlayActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_ONLINE); + intent.putExtra("MEDIA_TITLE", R.string.live_play_name); + DevicelistActivity.this.startActivityForResult(intent, 0); + } + } + }); + holder.mLocalVideo.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // 启动本地录像 + final EditText et = new EditText(DevicelistActivity.this); + if (holder.mInfo.getEncryptMode() == 1 && holder.mInfo.getEncryptKey() == null) { + new AlertDialog.Builder(DevicelistActivity.this).setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info).setView(et) + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + holder.mInfo.setEncryptKey(et.getText().toString()); + Intent intent = new Intent(DevicelistActivity.this, RecordListActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent.putExtra("MEDIA_TITLE", R.string.local_records_name); + DevicelistActivity.this.startActivity(intent); + } + }) + .setNegativeButton(R.string.dialog_negative, null).show(); + } else { + Intent intent = new Intent(DevicelistActivity.this, RecordListActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent.putExtra("MEDIA_TITLE", R.string.local_records_name); + DevicelistActivity.this.startActivity(intent); + } + } + }); + holder.mCloudVideo.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // 启动云录像 + final EditText et = new EditText(DevicelistActivity.this); + if (holder.mInfo.getEncryptMode() == 1 && holder.mInfo.getEncryptKey() == null) { + new AlertDialog.Builder(DevicelistActivity.this).setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info).setView(et) + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + holder.mInfo.setEncryptKey(et.getText().toString()); + Intent intent = new Intent(DevicelistActivity.this, RecordListActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("MEDIA_TITLE", R.string.cloud_records_name); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD); + DevicelistActivity.this.startActivity(intent); + } + }) + .setNegativeButton(R.string.dialog_negative, null).show(); + } else { + Intent intent = new Intent(DevicelistActivity.this, RecordListActivity.class); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("MEDIA_TITLE", R.string.cloud_records_name); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD); + DevicelistActivity.this.startActivity(intent); + } + } + }); + holder.mMessage.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + // 启动报警图片 + final EditText et = new EditText(DevicelistActivity.this); + if (holder.mInfo.getEncryptMode() == 1 && holder.mInfo.getEncryptKey() == null) { + new AlertDialog.Builder(DevicelistActivity.this).setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info).setView(et) + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + holder.mInfo.setEncryptKey(et.getText().toString()); + Intent intent = new Intent(DevicelistActivity.this, AlarmMessageActivity.class); + intent.putExtra("sn", holder.mInfo.getDeviceCode()); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("index", holder.mInfo.getIndex()); + DevicelistActivity.this.startActivity(intent); + System.out.println("DeviceCode" + holder.mInfo.getDeviceCode()); + } + }) + .setNegativeButton(R.string.dialog_negative, null).show(); + } else { + Intent intent = new Intent(DevicelistActivity.this, AlarmMessageActivity.class); + intent.putExtra("sn", holder.mInfo.getDeviceCode()); + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("index", holder.mInfo.getIndex()); + DevicelistActivity.this.startActivity(intent); + System.out.println("DeviceCode" + holder.mInfo.getDeviceCode()); + } + } + }); + //设备操作 + holder.mSetting.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // 启动设备管理 + Intent intent = new Intent(DevicelistActivity.this, DeviceSetActivity.class); + + intent.putExtra("UUID", holder.mInfo.getUuid()); + intent.putExtra("alarmPlanStatus", holder.mInfo.getAlarmStatus()); + intent.putExtra("cloudMealStatus", holder.mInfo.getCloudMealStates()); + + + DevicelistActivity.this.startActivity(intent); + System.out.println("DeviceCode" + holder.mInfo.getDeviceCode()); + } + }); + //屏蔽监听 + holder.mListShade.setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionevent) { + // TODO Auto-generated method stub + return true; + } + }); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + //修改数据信息(含加密标识符) + holder.mInfo = getItem(position); + //Log.d(tag, "index : " + position); + // holder.mChannelName.setText(holder.mInfo.getDeviceCode() + "-" + holder.mInfo.getIndex()); + if (holder.mInfo.getEncryptMode() == 1) { + holder.mChannelName.setText(holder.mInfo.getName() + " - Encrypt"); + } else { + holder.mChannelName.setText(holder.mInfo.getName()); + } + + //加载背景图片 + holder.mBgDevice.setBackgroundResource(R.drawable.list_bg_device); + if (holder.mInfo.getBackgroudImgURL() != null && holder.mInfo.getBackgroudImgURL().length() > 0) { + //下载 注:由于有些请求的图片是经过加密处理的,所以需要使用带有解密功能的接口,默认密码为设备序列号 + ImageHelper.loadCacheImage(holder.mInfo.getBackgroudImgURL(), holder.mInfo.getDeviceCode(), holder.mInfo.getDeviceCode(), new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if (holder.mInfo.getBackgroudImgURL().hashCode() == msg.what && msg.obj != null) { + holder.mBgDevice.setBackgroundDrawable((Drawable) msg.obj); + } + } + }); + } + + //"在线" : "离线" + if (holder.mInfo.getState() == ChannelInfo.ChannelState.Online) { + holder.mListShade.setVisibility(View.GONE); + } else { + holder.mListShade.setVisibility(View.VISIBLE); + } + + //是否自定义加密,效率不高 + if (holder.mInfo.getEncryptMode() == 1 && holder.mInfo.getEncryptKey() == null) { + holder.mLiveVideo.setAlpha(128); + holder.mLocalVideo.setAlpha(128); + holder.mCloudVideo.setAlpha(128); + holder.mMessage.setAlpha(128); + } else { + holder.mLiveVideo.setAlpha(255); + holder.mLocalVideo.setAlpha(255); + holder.mCloudVideo.setAlpha(255); + holder.mMessage.setAlpha(255); + }*/ + + return convertView; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/BaseDecoration.java b/app/src/main/java/com/lechange/demo/localvideo/BaseDecoration.java new file mode 100644 index 0000000..8b048a2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/BaseDecoration.java @@ -0,0 +1,475 @@ +package com.lechange.demo.localvideo; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.support.annotation.ColorInt; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.util.SparseIntArray; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; + +import com.gavin.com.library.BuildConfig; +import com.gavin.com.library.ClickInfo; +import com.gavin.com.library.listener.OnGroupClickListener; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Administrator on 2019/3/15. + */ + +public abstract class BaseDecoration extends RecyclerView.ItemDecoration { + // TODO: 2018/4/13 加载更新后闪动 + + protected OnGroupClickListener mOnGroupClickListener; + /** + * 记录每个头部和悬浮头部的坐标信息【用于点击事件】 + * 位置由子类添加 + */ + protected HashMap stickyHeaderPosArray = new HashMap<>(); + /** + * group背景色,默认透明 + */ + @ColorInt + int mGroupBackground = Color.parseColor("#48BDFF"); + /** + * 悬浮栏高度 + */ + int mGroupHeight = 120; + /** + * 分割线颜色,默认灰色 + */ + @ColorInt + int mDivideColor = Color.parseColor("#CCCCCC"); + /** + * 分割线宽度 + */ + int mDivideHeight = 0; + /** + * RecyclerView头部数量 + * 最小为0 + */ + int mHeaderCount; + Paint mDividePaint; + /** + * 缓存分组第一个item的position + */ + private SparseIntArray firstInGroupCash = new SparseIntArray(100); + /** + * down事件在顶部悬浮栏中 + */ + private boolean mDownInHeader; + private GestureDetector gestureDetector; + private GestureDetector.OnGestureListener gestureListener = new GestureDetector.OnGestureListener() { + @Override + public boolean onDown(MotionEvent e) { + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + return onTouchEvent(e); + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + return false; + } + + @Override + public void onLongPress(MotionEvent e) { + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + return false; + } + }; + + public BaseDecoration() { + mDividePaint = new Paint(); + mDividePaint.setColor(mDivideColor); + } + + /** + * 设置点击事件 + * + * @param listener + */ + protected void setOnGroupClickListener(OnGroupClickListener listener) { + this.mOnGroupClickListener = listener; + } + + /** + * 获取分组名 + * + * @param position position + * @return group + */ + abstract String getGroupName(int position); + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + int position = parent.getChildAdapterPosition(view); + RecyclerView.LayoutManager manager = parent.getLayoutManager(); + if (manager instanceof GridLayoutManager) { + //网格布局 + int spanCount = ((GridLayoutManager) manager).getSpanCount(); + if (!isHeader(position)) { + if (isFirstLineInGroup(position, spanCount)) { + //为悬浮view预留空间 + outRect.top = mGroupHeight; + } else { + //为分割线预留空间 + outRect.top = mDivideHeight; + } + } + } else { + //其他的默认为线性布局 + //只有是同一组的第一个才显示悬浮栏 + if (!isHeader(position)) { + if (isFirstInGroup(position)) { + //为悬浮view预留空间 + outRect.top = mGroupHeight; + } else { + //为分割线预留空间 + outRect.top = mDivideHeight; + } + } + } + } + + /** + * 判断是不是组中的第一个位置 + * 根据前一个组名,判断当前是否为新的组 + * 当前为groupId为null时,则与上一个为同一组 + */ + protected boolean isFirstInGroup(int position) { + int realPosition = position - mHeaderCount; + if (realPosition < 0) { + //小于header数量,不是第一个 + return false; + } else if (realPosition == 0) { + //等于header数量,为第一个 + return true; + } + String preGroupId; + if (realPosition <= 0) { + preGroupId = null; + } else { + preGroupId = getGroupName(realPosition - 1); + } + String curGroupId = getGroupName(realPosition); + if (curGroupId == null) { + return false; + } + return !TextUtils.equals(preGroupId, curGroupId); + } + + /** + * 是否在RecyclerView处于第一个(header部分不算) + * + * @param position 总的position + * @param index RecyclerView中的Index + * @return + */ + protected boolean isFirstInRecyclerView(int position, int index) { + return position >= mHeaderCount && index == 0; + } + + /** + * 是否为Header + * + * @param position + * @return + */ + protected boolean isHeader(int position) { + return position < mHeaderCount; + } + + /** + * 判断是不是新组的第一行(GridLayoutManager使用) + * 利用当前行的第一个对比前一个组名,判断当前是否为新组的第一样 + */ + protected boolean isFirstLineInGroup(int position, int spanCount) { + int realPosition = position - mHeaderCount; + if (realPosition < 0) { + //小于header数量,不是第一个 + return false; + } else if (realPosition == 0) { + return true; + } + if (position <= 0) { + return true; + } else { + int posFirstInGroup = getFirstInGroupWithCash(position); + if (position - posFirstInGroup < spanCount) { + return true; + } else { + return false; + } + } + } + + /** + * 网格布局需要调用 + * + * @param recyclerView recyclerView + * @param gridLayoutManager gridLayoutManager + */ + public void resetSpan(RecyclerView recyclerView, GridLayoutManager gridLayoutManager) { + if (recyclerView == null) { + throw new NullPointerException("recyclerView not allow null"); + } + if (gridLayoutManager == null) { + throw new NullPointerException("gridLayoutManager not allow null"); + } + final int spanCount = gridLayoutManager.getSpanCount(); + //相当于weight + GridLayoutManager.SpanSizeLookup lookup = new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + int span; + int realPosition = position - mHeaderCount; + if (realPosition < 0) { + //小于header数量 + span = spanCount; + } else { + String curGroupId = getGroupName(position); + String nextGroupId; + try { + //防止外面没判断,导致越界 + nextGroupId = getGroupName(position + 1); + } catch (Exception e) { + nextGroupId = curGroupId; + } + if (!TextUtils.equals(curGroupId, nextGroupId)) { + //为本行的最后一个 + int posFirstInGroup = getFirstInGroupWithCash(position); + span = spanCount - (position - posFirstInGroup) % spanCount; + } else { + span = 1; + } + } + return span; + } + }; + gridLayoutManager.setSpanSizeLookup(lookup); + } + + /** + * RecyclerView onInterceptEvent中down事件调用,用于处理点击穿透问题 + * + * @param event + */ + public void onEventDown(MotionEvent event) { + if (event == null) { + mDownInHeader = false; + return; + } + mDownInHeader = event.getY() > 0 && event.getY() < mGroupHeight; + } + + /** + * RecyclerView onInterceptEvent中up事件调用,用于处理点击穿透问题 + * + * @param event + * @return + */ + public boolean onEventUp(MotionEvent event) { + if (mDownInHeader) { + float y = event.getY(); + boolean isInHeader = y > 0 && y < mGroupHeight; + if (isInHeader) { + return onTouchEvent(event); + } + } + return false; + } + + /** + * 得到当前分组第一个item的position + * + * @param position position + */ + protected int getFirstInGroupWithCash(int position) { + if (firstInGroupCash.get(position) == 0) { + int firstPosition = getFirstInGroup(position); + firstPosition = firstPosition > 0 ? firstPosition - mHeaderCount : firstPosition; + firstInGroupCash.put(position, firstPosition); + return firstPosition; + } else { + return firstInGroupCash.get(position); + } + } + + /** + * 得到当前分组第一个item的position + * + * @param position position + */ + private int getFirstInGroup(int position) { + if (position <= 0) { + return 0; + } else { + if (isFirstInGroup(position)) { + return position; + } else { + return getFirstInGroup(position - 1); + } + } + } + + /** + * 判断自己是否为group的最后一行 + * + * @param recyclerView recyclerView + * @param position position + * @return + */ + protected boolean isLastLineInGroup(RecyclerView recyclerView, int position) { + int realPosition = position - mHeaderCount; + if (realPosition < 0) { + return true; + } else { + String curGroupName = getGroupName(realPosition); + String nextGroupName; + RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); + //默认往下查找的数量 + int findCount = 1; + if (manager instanceof GridLayoutManager) { + int spanCount = ((GridLayoutManager) manager).getSpanCount(); + int firstPositionInGroup = getFirstInGroupWithCash(realPosition); + findCount = spanCount - (realPosition - firstPositionInGroup) % spanCount; + } + try { + nextGroupName = getGroupName(realPosition + findCount); + } catch (Exception e) { + nextGroupName = curGroupName; + } + if (nextGroupName == null) { + return false; + } + return !TextUtils.equals(curGroupName, nextGroupName); + } + } + + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + super.onDrawOver(c, parent, state); + //点击事件处理 + if (gestureDetector == null) { + gestureDetector = new GestureDetector(parent.getContext(), gestureListener); + parent.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + }); + } + stickyHeaderPosArray.clear(); + } + + /** + * 点击事件调用 + * + * @param position position + */ + private void onGroupClick(int position, int viewId) { + if (mOnGroupClickListener != null) { + mOnGroupClickListener.onClick(position, viewId); + } + } + + /** + * 对touch事件处理,找到点击事件 + * + * @param e + * @return + */ + private boolean onTouchEvent(MotionEvent e) { + for (Map.Entry entry : stickyHeaderPosArray.entrySet()) { + + ClickInfo value = stickyHeaderPosArray.get(entry.getKey()); + float y = e.getY(); + float x = e.getX(); + if (value.mBottom - mGroupHeight <= y && y <= value.mBottom) { + //如果点击到分组头 + if (value.mDetailInfoList == null || value.mDetailInfoList.size() == 0) { + //没有子View的点击事件 + onGroupClick(entry.getKey(), value.mGroupId); + } else { + List list = value.mDetailInfoList; + boolean isChildViewClicked = false; + for (ClickInfo.DetailInfo detailInfo : list) { + if (detailInfo.top <= y && y <= detailInfo.bottom + && detailInfo.left <= x && detailInfo.right >= x) { + //当前view被点击 + onGroupClick(entry.getKey(), detailInfo.id); + isChildViewClicked = true; + break; + } + } + if (!isChildViewClicked) { + //点击范围不在带有id的子view中,则表示整个groupView被点击 + onGroupClick(entry.getKey(), value.mGroupId); + } + + } + return true; + } + } + return false; + } + + /** + * 绘制分割线 + * + * @param c + * @param parent + * @param childView + * @param position + * @param left + * @param right + */ + protected void drawDivide(Canvas c, RecyclerView parent, View childView, int position, int left, int right) { + if (mDivideHeight != 0 && !isHeader(position)) { + RecyclerView.LayoutManager manager = parent.getLayoutManager(); + if (manager instanceof GridLayoutManager) { + int spanCount = ((GridLayoutManager) manager).getSpanCount(); + if (!isFirstLineInGroup(position, spanCount)) { + float bottom = childView.getTop() + parent.getPaddingTop(); + //高度小于顶部悬浮栏时,跳过绘制 + if (bottom >= mGroupHeight) { + c.drawRect(left, bottom - mDivideHeight, right, bottom, mDividePaint); + } + } + } else { + float bottom = childView.getTop(); + //高度小于顶部悬浮栏时,跳过绘制 + if (bottom >= mGroupHeight) { + c.drawRect(left, bottom - mDivideHeight, right, bottom, mDividePaint); + } + } + } + } + + protected void log(String content) { + if (BuildConfig.DEBUG) { + Log.i("StickDecoration", content); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/City.java b/app/src/main/java/com/lechange/demo/localvideo/City.java new file mode 100644 index 0000000..2df5c23 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/City.java @@ -0,0 +1,71 @@ +package com.lechange.demo.localvideo; + +/** + * Created by gavin + * Created date 17/5/24 + * Created log 市 + */ + +public class City { + /** + * 城市名 + */ + private String name; + /** + * 所属省份 + */ + private String province; + /** + * 省份icon + */ + private int icon; + + private boolean expanded = true; + + public City(String name, String province, int icon) { + this.name = name; + this.province = province; + this.icon = icon; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public int getIcon() { + return icon; + } + + public void setIcon(int icon) { + this.icon = icon; + } + + public boolean isExpanded() { + return expanded; + } + + public void setExpanded(boolean expanded) { + this.expanded = expanded; + } + + @Override + public String toString() { + return "City{" + + "name='" + name + '\'' + + ", province='" + province + '\'' + + ", icon=" + icon + + '}'; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/localvideo/CityUtil.java b/app/src/main/java/com/lechange/demo/localvideo/CityUtil.java new file mode 100644 index 0000000..dfb0aa9 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/CityUtil.java @@ -0,0 +1,79 @@ +package com.lechange.demo.localvideo; + + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * Created by gavin + * Created date 17/5/31 + * Created log + */ + +public class CityUtil { + + private static final String[] CITYS = {"福建省", "安徽省", "浙江省", "江苏省"}; + + /** + * 获取城市名 + * + * @return + */ + public static List getCityList() { + List dataList = new ArrayList<>(); + final String FU_JIAN = CITYS[0]; + final int FU_JIAN_ICON = R.mipmap.city1; + dataList.add(new City("福州", FU_JIAN, FU_JIAN_ICON)); + dataList.add(new City("厦门", FU_JIAN, FU_JIAN_ICON)); + dataList.add(new City("泉州", FU_JIAN, FU_JIAN_ICON)); + dataList.add(new City("宁德", FU_JIAN, FU_JIAN_ICON)); + dataList.add(new City("漳州", FU_JIAN, FU_JIAN_ICON)); + final String AN_HUI = CITYS[1]; + final int AN_HUI_ICON = R.mipmap.city2; + dataList.add(new City("合肥", AN_HUI, AN_HUI_ICON)); + dataList.add(new City("芜湖", AN_HUI, AN_HUI_ICON)); + dataList.add(new City("蚌埠", AN_HUI, AN_HUI_ICON)); + final String ZHE_JIANG = CITYS[2]; + final int ZHE_JIANG_ICON = R.mipmap.city3; + dataList.add(new City("杭州", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("宁波", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("温州", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("嘉兴", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("绍兴", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("金华", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("湖州", ZHE_JIANG, ZHE_JIANG_ICON)); + dataList.add(new City("舟山", ZHE_JIANG, ZHE_JIANG_ICON)); + final String JIANG_SU = CITYS[3]; + final int JIANG_SU_ICOM = R.mipmap.city4; + dataList.add(new City("南京", JIANG_SU, JIANG_SU_ICOM)); + return dataList; + } + + + /** + * 获取城市名 + * + * @return + */ + public static List getRandomCityList() { + List dataList = new ArrayList<>(); + Random random = new Random(); + int provinceSize = random.nextInt(5) + 3; + for (int i = 0; i < provinceSize; i++) { + String province = getRandomCityName(); + int citySize = random.nextInt(3) + 1; + for (int j = 0; j < citySize; j++) { + dataList.add(new City(province + " : city " + j, province, R.mipmap.city4)); + } + } + return dataList; + } + + private static String getRandomCityName() { + Random random = new Random(); + return CITYS[random.nextInt(4)]; + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/MyRecyclerView.java b/app/src/main/java/com/lechange/demo/localvideo/MyRecyclerView.java new file mode 100644 index 0000000..5f0b1c0 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/MyRecyclerView.java @@ -0,0 +1,57 @@ +package com.lechange.demo.localvideo; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import com.gavin.com.library.BaseDecoration; + +/** + * Created by gavin + * date 2018/8/26 + */ +public class MyRecyclerView extends RecyclerView { + + private BaseDecoration mDecoration; + + public MyRecyclerView(Context context) { + super(context); + } + + public MyRecyclerView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void addItemDecoration(ItemDecoration decor) { + if (decor != null && decor instanceof BaseDecoration) { + mDecoration = (BaseDecoration) decor; + } + super.addItemDecoration(decor); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent e) { + if (mDecoration != null) { + switch (e.getAction()) { + case MotionEvent.ACTION_DOWN: + mDecoration.onEventDown(e); + break; + case MotionEvent.ACTION_UP: + if (mDecoration.onEventUp(e)) { + return true; + } + break; + default: + } + } + return super.onInterceptTouchEvent(e); + } +} + diff --git a/app/src/main/java/com/lechange/demo/localvideo/PowerfulStickyDecoration.java b/app/src/main/java/com/lechange/demo/localvideo/PowerfulStickyDecoration.java new file mode 100644 index 0000000..f4c6628 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/PowerfulStickyDecoration.java @@ -0,0 +1,331 @@ +package com.lechange.demo.localvideo; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.support.annotation.ColorInt; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.gavin.com.library.ClickInfo; +import com.gavin.com.library.cache.CacheUtil; +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.gavin.com.library.util.ViewUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2019/3/15. + */ + +public class PowerfulStickyDecoration extends BaseDecoration { + + private Paint mGroutPaint; + + /** + * 缓存图片 + */ + private CacheUtil mBitmapCache = new CacheUtil<>(); + + /** + * 缓存View + */ + private CacheUtil mHeadViewCache = new CacheUtil<>(); + + private PowerGroupListener mGroupListener; + + private PowerfulStickyDecoration(PowerGroupListener groupListener) { + super(); + this.mGroupListener = groupListener; + //设置悬浮栏的画笔---mGroutPaint + mGroutPaint = new Paint(); + } + + + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + super.onDrawOver(c, parent, state); + //绘制 + int itemCount = state.getItemCount(); + int childCount = parent.getChildCount(); + int left = parent.getPaddingLeft(); + int right = parent.getWidth() - parent.getPaddingRight(); + + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int position = parent.getChildAdapterPosition(childView); + if (isFirstInGroup(position) || isFirstInRecyclerView(position, i)) { + int viewBottom = childView.getBottom(); + //top 决定当前顶部第一个悬浮Group的位置 + int bottom = Math.max(mGroupHeight, childView.getTop() + parent.getPaddingTop()); + if (position + 1 < itemCount) { + //下一组的第一个View接近头部 + if (isLastLineInGroup(parent, position) && viewBottom < bottom) { + bottom = viewBottom; + } + } + drawDecoration(c, position, left, right, bottom); + } else { + //绘制分割线 + drawDivide(c, parent, childView, position, left, right); + } + } + } + + /** + * 绘制悬浮框 + * + * @param c Canvas + * @param position position + * @param left left + * @param right right + * @param bottom bottom + */ + private void drawDecoration(Canvas c, int position, int left, int right, int bottom) { + c.drawRect(left, bottom - mGroupHeight, right, bottom, mGroutPaint); + //根据position获取View + View groupView; + int firstPositionInGroup = getFirstInGroupWithCash(position); + if (mHeadViewCache.get(firstPositionInGroup) == null) { + groupView = getGroupView(firstPositionInGroup); + if (groupView == null) { + return; + } + measureAndLayoutView(groupView, left, right); + mHeadViewCache.put(firstPositionInGroup, groupView); + } else { + groupView = mHeadViewCache.get(firstPositionInGroup); + } + Bitmap bitmap; + if (mBitmapCache.get(firstPositionInGroup) != null) { + bitmap = mBitmapCache.get(firstPositionInGroup); + } else { + bitmap = Bitmap.createBitmap(groupView.getDrawingCache()); + mBitmapCache.put(firstPositionInGroup, bitmap); + } + c.drawBitmap(bitmap, left, bottom - mGroupHeight, null); + if (mOnGroupClickListener != null) { + setClickInfo(groupView, left, bottom, position); + } + } + + /** + * 对view进行测量和布局 + * + * @param groupView groupView + * @param left left + * @param right right + */ + private void measureAndLayoutView(View groupView, int left, int right) { + groupView.setDrawingCacheEnabled(true); + //手动对view进行测量,指定groupView的高度、宽度 + ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(right, mGroupHeight); + groupView.setLayoutParams(layoutParams); + groupView.measure( + View.MeasureSpec.makeMeasureSpec(right, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(mGroupHeight, View.MeasureSpec.EXACTLY)); + groupView.layout(left, 0 - mGroupHeight, right, 0); + } + + /** + * 点击的位置信息 + * + * @param groupView + * @param parentBottom + * @param position + */ + private void setClickInfo(View groupView, int parentLeft, int parentBottom, int position) { + int parentTop = parentBottom - mGroupHeight; + List list = new ArrayList<>(); + List viewList = ViewUtil.getChildViewWithId(groupView); + for (View view : viewList) { + int top = view.getTop() + parentTop; + int bottom = view.getBottom() + parentTop; + int left = view.getLeft() + parentLeft; + int right = view.getRight() + parentLeft; + list.add(new ClickInfo.DetailInfo(view.getId(), left, right, top, bottom)); + } + ClickInfo clickInfo = new ClickInfo(parentBottom, list); + clickInfo.mGroupId = groupView.getId(); + stickyHeaderPosArray.put(position, clickInfo); + } + + /** + * 获取组名 + * + * @param position position + * @return 组名 + */ + @Override + String getGroupName(int position) { + if (mGroupListener != null) { + return mGroupListener.getGroupName(position); + } else { + return null; + } + } + + /** + * 获取组View + * + * @param position position + * @return 组名 + */ + private View getGroupView(int position) { + if (mGroupListener != null) { + return mGroupListener.getGroupView(position); + } else { + return null; + } + } + + /** + * 是否使用缓存 + * + * @param b b + */ + public void setCacheEnable(boolean b) { + mHeadViewCache.isCacheable(b); + } + + /** + * 清空缓存 + */ + public void clearCache() { + mHeadViewCache.clean(); + mBitmapCache.clean(); + } + + /** + * 通知重新绘制 + * 使用场景:网络图片加载后调用 + * + * @param recyclerView recyclerView + * @param position position + */ + public void notifyRedraw(RecyclerView recyclerView, View viewGroup, int position) { + viewGroup.setDrawingCacheEnabled(false); + int firstPositionInGroup = getFirstInGroupWithCash(position); + mBitmapCache.remove(firstPositionInGroup); + mHeadViewCache.remove(firstPositionInGroup); + int left = recyclerView.getPaddingLeft(); + int right = recyclerView.getWidth() - recyclerView.getPaddingRight(); + measureAndLayoutView(viewGroup, left, right); + mHeadViewCache.put(firstPositionInGroup, viewGroup); + recyclerView.invalidate(); + } + + public static class Builder { + PowerfulStickyDecoration mDecoration; + + private Builder(PowerGroupListener listener) { + mDecoration = new PowerfulStickyDecoration(listener); + } + + public static PowerfulStickyDecoration.Builder init(PowerGroupListener listener) { + return new PowerfulStickyDecoration.Builder(listener); + } + + /** + * 设置Group高度 + * + * @param groutHeight 高度 + * @return this + */ + public PowerfulStickyDecoration.Builder setGroupHeight(int groutHeight) { + mDecoration.mGroupHeight = groutHeight; + return this; + } + + + /** + * 设置Group背景 + * + * @param background 背景色 + */ + public PowerfulStickyDecoration.Builder setGroupBackground(@ColorInt int background) { + mDecoration.mGroupBackground = background; + mDecoration.mGroutPaint.setColor(mDecoration.mGroupBackground); + return this; + } + + /** + * 设置分割线高度 + * + * @param height 高度 + * @return this + */ + public PowerfulStickyDecoration.Builder setDivideHeight(int height) { + mDecoration.mDivideHeight = height; + return this; + } + + /** + * 设置分割线颜色 + * + * @param color color + * @return this + */ + public PowerfulStickyDecoration.Builder setDivideColor(@ColorInt int color) { + mDecoration.mDivideColor = color; + return this; + } + + /** + * 设置点击事件 + * + * @param listener 点击事件 + * @return this + */ + public PowerfulStickyDecoration.Builder setOnClickListener(OnGroupClickListener listener) { + mDecoration.setOnGroupClickListener(listener); + return this; + } + + /** + * 重置span + * + * @param recyclerView recyclerView + * @param gridLayoutManager gridLayoutManager + * @return this + */ + public PowerfulStickyDecoration.Builder resetSpan(RecyclerView recyclerView, GridLayoutManager gridLayoutManager) { + mDecoration.resetSpan(recyclerView, gridLayoutManager); + return this; + } + + /** + * 是否使用缓存 + * + * @param b + * @return + */ + public PowerfulStickyDecoration.Builder setCacheEnable(boolean b) { + mDecoration.setCacheEnable(b); + return this; + } + + /** + * 设置头部数量 + * 用于顶部Header不需要设置悬浮的情况(仅LinearLayoutManager) + * + * @param headerCount + * @return + */ + public PowerfulStickyDecoration.Builder setHeaderCount(int headerCount) { + if (headerCount >= 0) { + mDecoration.mHeaderCount = headerCount; + } + return this; + } + + public PowerfulStickyDecoration build() { + return mDecoration; + } + } + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/RecordListActivity.java b/app/src/main/java/com/lechange/demo/localvideo/RecordListActivity.java new file mode 100644 index 0000000..3f669cb --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/RecordListActivity.java @@ -0,0 +1,883 @@ +package com.lechange.demo.localvideo; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.media.MediaScannerConnection; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.lechange.common.log.Logger; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.CloudStorageCode; +import com.lechange.demo.business.Business.LocalDownloadCode; +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.business.util.ImageHelper; +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.business.util.TaskPoolHelper; +import com.lechange.demo.business.util.TimeHelper; +import com.lechange.demo.common.DatePicker; +import com.lechange.demo.common.DatePicker.OnTimeClickListener; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.localvideo.calendar.CalendarPopipWindow; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.opensdk.listener.LCOpenSDK_DownloadListener; +import com.lechange.opensdk.media.LCOpenSDK_Download; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.view.TitleView; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +public class RecordListActivity extends BaseActivity { + private final String tag = "RecordList"; + private TitleView mTitleView; + private RecyclerView mRv; + private ImageView iv_back; + private RadioButton rb_model_set, rb_model_time; + private RelativeLayout mFuntion; + private ListView mListview = null; + private final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + //不显示进度 + int firstIndex = mListview.getFirstVisiblePosition(); + int lastIndex = mListview.getLastVisiblePosition(); + for (int i = firstIndex; i <= lastIndex; i++) { + ViewHolder holder = (ViewHolder) mListview.getChildAt(i - firstIndex).getTag(); + //渲染下载更新 + ViewGroup.LayoutParams params = holder.mDownload_bg.getLayoutParams(); + if (holder.mInfo.isDownload()) { + if (holder.mInfo.getDownLength() > 0) { + if (holder.mInfo.getFileLength() > 0) + params.width = (int) (holder.mDownload_icon.getWidth() / (holder.mInfo.getFileLength() / holder.mInfo.getDownLength())); + else + params.width = 0; + } + } else { + params.width = 0; + holder.mDownload_icon.setText(R.string.download); + } + holder.mDownload_bg.setLayoutParams(params); + } + sendEmptyMessageDelayed(0, 1000); + } + + ; + }; //定时器,每500ms刷新一次, + private DatePicker mDatePicker; + private LinearLayout mViewContainer; // 放置DatePicker的容器 + private ProgressDialog mProgressDialog; //请求加载使用 + private RecrodListAdapter mRecordListAdapt; + private List mRecordList; + private String mChannelUUID = null; + private int mType; + private int mIndex = -1; //当前正在下载的索引号,目前仅支持单个下载,日后会扩展多个下载 + private PowerfulStickyDecoration decoration; + private List dataList = new ArrayList<>(); + private com.lechange.demo.localvideo.SimpleAdapter mAdapter; + private TextView mCalendarTv, tv_before_day, tv_last_day; + private boolean isChangeDate = false; + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_record_list); + Intent intent = getIntent(); + mChannelUUID = intent.getStringExtra("UUID"); + mType = intent.getIntExtra("TYPE", 0); + Log.d(tag, mType + "::mChannelUUID:" + mChannelUUID); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_local_video_list); + mTitleView.setHead("本地录像"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mRv = (RecyclerView) findViewById(R.id.rv); + //绘制标题 + iv_back = (ImageView) findViewById(R.id.iv_back); + rb_model_set = (RadioButton) findViewById(R.id.rb_model_set); + rb_model_time = (RadioButton) findViewById(R.id.rb_model_time); + mFuntion = (RelativeLayout) findViewById(R.id.iv_funtion); + iv_back.setOnClickListener(this); + rb_model_set.setOnClickListener(this); + rb_model_time.setOnClickListener(this); + mFuntion.setOnClickListener(this); + + //日期控件 + mViewContainer = (LinearLayout) findViewById(R.id.timerContainer); + //开启请求加载控件 + mProgressDialog = (ProgressDialog) this.findViewById(R.id.query_load); + mProgressDialog.setStart(getString(R.string.common_loading)); + + //绘制list + mListview = (ListView) this.findViewById(R.id.list_records); + mRecordListAdapt = new RecrodListAdapter(this); + mListview.setAdapter(mRecordListAdapt); + + tv_before_day = (TextView) findViewById(R.id.tv_before_day); + tv_last_day = (TextView) findViewById(R.id.tv_last_day); + tv_before_day.setOnClickListener(this); + tv_last_day.setOnClickListener(this); + final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + mCalendarTv = (TextView) findViewById(R.id.tv_calendar); + mCalendarTv.setText(df.format(new Date())); + String startTime = df.format(new Date()) + " 00:00:00"; + String endTime = df.format(new Date()) + " 23:59:59"; + //初始化数据 + if (null != getIntent().getExtras().get("dateString")) { + String date = (String) getIntent().getExtras().get("dateString"); + if (mCalendarTv.getText().toString().compareTo(date) > 0) { + tv_last_day.setVisibility(View.VISIBLE); + } + mCalendarTv.setText(date); + startTime = date + " 00:00:00"; + endTime = date + " 23:59:59"; + } + loadRecrodList(startTime, endTime); + + //设置监听 + setItemClick(); + + //设置云录像下载监听 + if (mType == MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD) { + LCOpenSDK_Download.setListener(new CloudDownloadListener()); + } else { + LCOpenSDK_Download.setListener(new LocalDownloadListener()); + } + //开启定时刷新 + mHandler.obtainMessage().sendToTarget(); + + // setRecycleView(); + + mCalendarTv.setOnClickListener(this); + mCalendarTv.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + String s1 = s.toString(); + if (s1.equals(df.format(new Date())) || s1.compareTo(df.format(new Date())) > 0) { + tv_last_day.setVisibility(View.GONE); + } else { + tv_last_day.setVisibility(View.VISIBLE); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + private void setRecycleView() { + //模拟数据 + // dataList.addAll(CityUtil.getCityList()); + GridLayoutManager manager = new GridLayoutManager(this, 4); + // LinearLayoutManager manager = new LinearLayoutManager(this); + mRv.setLayoutManager(manager); + if (null != decoration) { + mRv.removeItemDecoration(decoration); + } + decoration = PowerfulStickyDecoration.Builder + .init(new PowerGroupListener() { + @Override + public String getGroupName(int position) { + //获取组名,用于判断是否是同一组 + if (dataList.size() > position) { + Log.i("TAG", "RecordListActivity getGroupName()" + String.valueOf(dataList.get(position).getStartTime())); + SimpleDateFormat sdf2 = new SimpleDateFormat("HH"); + Log.i("TAG", "RecordListActivity getGroupName()" + sdf2.format(dataList.get(position).getStartTime())); + return String.valueOf(sdf2.format(dataList.get(position).getStartTime()) + ":00"); + } + return null; + } + + @Override + public View getGroupView(int position) { + //获取自定定义的组View + if (dataList.size() > position) { + SimpleDateFormat sdf2 = new SimpleDateFormat("HH"); + final View view = getLayoutInflater().inflate(R.layout.city_group, null, true); + ((TextView) view.findViewById(R.id.tv)).setText(sdf2.format(dataList.get(position).getStartTime()) + ":00"); + ImageView imageView = (ImageView) view.findViewById(R.id.iv); + imageView.setImageResource(R.drawable.icon_style); + return view; + } else { + return null; + } + } + }) + .setCacheEnable(true) + .resetSpan(mRv, manager) + .setGroupHeight(DensityUtil.dip2px(RecordListActivity.this, 40)) + .setDivideHeight(0) + .setOnClickListener(new OnGroupClickListener() { + @Override + public void onClick(int position, int id) { + if (dataList.size() > position) { + /*//修改数据 + changeExpandedState(position); + City city = dataList.get(position); + //修改悬浮窗 + final View view = getLayoutInflater().inflate(R.layout.city_group, null, false); + ((TextView) view.findViewById(R.id.tv)).setText(dataList.get(position).getProvince()); + ImageView imageView = (ImageView) view.findViewById(R.id.iv); + imageView.setImageResource(dataList.get(position).getIcon()); + ImageView ivExpanded = (ImageView) view.findViewById(R.id.iv_expanded); + int rotation = city.isExpanded() ? 0 : 180; + ivExpanded.setRotation(rotation); + //修改数据后,刷新指定的悬浮窗 + decoration.notifyRedraw(mRv, view, position); + mAdapter.notifyDataSetChanged();*/ + } + } + }) + .build(); + //---------------- ------------- + mRv.addItemDecoration(decoration); + mRv.setVisibility(View.VISIBLE); + //------------- PowerfulStickyDecoration 使用部分 ---------------- + //下面是平时的RecyclerView操作 + mAdapter = new com.lechange.demo.localvideo.SimpleAdapter(this, dataList); + mRv.setAdapter(mAdapter); + } + + /** + * 修改数据 + * + * @param position + */ + private void changeExpandedState(int position) { + if (dataList.size() > position) { + RecordInfo city = dataList.get(position); + /*city.setExpanded(!city.isExpanded()); + position++; + if (dataList.size() > position) { + //下个是当前分组 + City city2 = dataList.get(position); + if (TextUtils.equals(city.getProvince(), city2.getProvince())) { + changeExpandedState(position); + } + }*/ + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_back: + finish(); + break; + case R.id.rb_model_set: + + break; + case R.id.rb_model_time: + + break; + case R.id.iv_funtion: + //添加时间选择控件 + Log.d("Business", "Business" + mViewContainer.getChildCount()); + if (mViewContainer.getChildCount() > 0) { + return; + } + + // undo 添加datepicker + if (mDatePicker == null) { + mDatePicker = new DatePicker(getApplicationContext()); + initDatePicker(); + } + + LayoutParams lp = new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT); + mViewContainer.addView(mDatePicker, lp); + break; + case R.id.tv_calendar: + showCalendarBottom(mCalendarTv.getText().toString()); + break; + case R.id.tv_before_day: + String beforeFromTarget = DateTimeUitl.getBeforeFromTarget(mCalendarTv.getText().toString()); + mCalendarTv.setText(beforeFromTarget); + showChooseDateVideo(beforeFromTarget); + break; + case R.id.tv_last_day: + String futureFromTarget = DateTimeUitl.getFutureFromTarget(mCalendarTv.getText().toString()); + mCalendarTv.setText(futureFromTarget); + showChooseDateVideo(futureFromTarget); + break; + } + } + + private void showCalendarBottom(String date) { + View rootview = LayoutInflater.from(this).inflate(R.layout.fragment_media_record, null); + CalendarPopipWindow popupWindow = new CalendarPopipWindow(this, date.substring(0, 4) + "年" + date.substring(5, 7) + "月", new CalendarPopipWindow.OnCompleteListener() { + @Override + public void onComplete(String dayStr) { + showChooseDateVideo(dayStr); + mCalendarTv.setText(dayStr); + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + public void initDatePicker() { + if (mDatePicker == null) { + return; + } + + mDatePicker.setOnTimeClickListener(new OnTimeClickListener() { + @Override + public void onCommonTimeClick(int id) { + if (id == DatePicker.ID_LEFT) { // 点击左边 + mViewContainer.removeView(mDatePicker); + } else { // 点击右边 + // showChooseDateVideo(); + } + + } + }); + } + + private void showChooseDateVideo(String date) { + if (mIndex != -1) { + LCOpenSDK_Download.stopDownload(mIndex); //重新加载前停止下载 + MediaPlayHelper.deleteDownloadVideo(mRecordList.get(mIndex).getRecordID(), mRecordList.get(mIndex).getStartTime()); + //屏蔽操作 + mIndex = -1; + } + /*Date time = mDatePicker.getSelectedDate(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String date = df.format(date1);*/ + /*int year = Integer.parseInt(date1.substring(0, 4)); + int month = Integer.parseInt(date1.substring(5, 7)); + int day = Integer.parseInt(date1.substring(date1.indexOf("月") + 1, date1.indexOf("日"))); + String date = DateTimeUitl.formatDateFromInt(year, month, day);*/ + + String startTime = date + " 00:00:00"; + String endTime = date + " 23:59:59"; + + mViewContainer.removeView(mDatePicker); + isChangeDate = true; + loadRecrodList(startTime, endTime); + //清空屏幕 + if (mRecordList != null) + mRecordList.clear(); //清数据 临时使用 + mRecordListAdapt.notifyDataSetChanged(); + + RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.GONE); + RecordListActivity.this.findViewById(R.id.tv_records_novideo).setVisibility(View.GONE); + mProgressDialog.setStart(getString(R.string.common_loading)); + } + + public void setItemClick() { + //单个录像监听 + mListview.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterview, View view, int position, + long id) { + // TODO Auto-generated method stub + if (mIndex != -1) { + Toast.makeText(RecordListActivity.this, R.string.toast_recordlist_onlyone, Toast.LENGTH_SHORT).show(); + return; + } + Log.d(tag, "click:" + position + "-" + id + "ID:" + view.getId()); + Intent intent = new Intent(RecordListActivity.this, MediaPlayActivity.class); + switch (mType) { + case MediaPlayActivity.IS_VIDEO_REMOTE_RECORD: + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + break; + case MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD: + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD); + break; + default: + break; + } + intent.putExtra("ID", mRecordList.get(position).getId()); + intent.putExtra("MEDIA_TITLE", R.string.record_play_name); + RecordListActivity.this.startActivity(intent); + } + }); + } + + + public void loadRecrodList(final String startTime, final String endTime) { + switch (mType) { + case MediaPlayActivity.IS_VIDEO_REMOTE_RECORD: + //查询1天之内的后10条录像 + dataList.clear(); + Business.getInstance().queryRecordNum(mChannelUUID, startTime, + endTime, new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + mProgressDialog.setStop(); //关闭加载窗口 + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_query_failed) + msg.what, Toast.LENGTH_SHORT).show(); + } else if (msg.what == 0) { + if (msg.arg1 > 0) { + Business.getInstance().queryRecordList(mChannelUUID, startTime, + endTime, msg.arg2, msg.arg1, new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + if (msg.what != 0) { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_query_failed) + msg.obj, Toast.LENGTH_SHORT).show(); + } else { + // mRecordList = (List) msg.obj; + dataList.addAll((List) msg.obj); + if (dataList != null && dataList.size() > 0) { + Log.d(tag, "loadRecrodList mRecordList.size:" + dataList.size()); + Collections.reverse(dataList); + // mRecordListAdapt.notifyDataSetChanged(); + setRecycleView(); + } else { + mRv.setVisibility(View.GONE); + RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + RecordListActivity.this.findViewById(R.id.tv_records_novideo).setVisibility(View.VISIBLE); + //Toast.makeText(RecordListActivity.this, "没有录像", Toast.LENGTH_SHORT).show(); + } + } + } + }); + } else { + mRv.setVisibility(View.GONE); + mProgressDialog.setStop(); //关闭加载窗口 + RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + RecordListActivity.this.findViewById(R.id.tv_records_novideo).setVisibility(View.VISIBLE); + } + } + } + }); + break; + case MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD: + //查询1天之内的前10条录像 + Business.getInstance().queryCloudRecordNum(mChannelUUID, startTime, + endTime, new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + mProgressDialog.setStop(); //关闭加载窗口 + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_query_failed) + msg.what, Toast.LENGTH_SHORT).show(); + } else if (msg.what == 0) { + if (msg.arg1 > 0) { + Business.getInstance().queryCloudRecordList(mChannelUUID, startTime, + endTime, msg.arg2, msg.arg1, new Handler() { + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + if (msg.what != 0) { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_query_failed) + msg.arg1, Toast.LENGTH_SHORT).show(); + } else { + mRecordList = (List) msg.obj; + if (mRecordList != null && mRecordList.size() > 0) { + Log.d(tag, "loadRecrodList mRecordList.size:" + mRecordList.size() + mRecordList.toString()); + mRecordListAdapt.notifyDataSetChanged(); + } else { + RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + RecordListActivity.this.findViewById(R.id.tv_records_novideo).setVisibility(View.VISIBLE); + //Toast.makeText(RecordListActivity.this, "没有录像", Toast.LENGTH_SHORT).show(); + } + } + } + }); + } else { + mProgressDialog.setStop(); //关闭加载窗口 + RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + RecordListActivity.this.findViewById(R.id.tv_records_novideo).setVisibility(View.VISIBLE); + } + } + } + }); + break; + default: + break; + } + } + + @Override + public void onPause() { + // TODO Auto-generated method stub + super.onPause(); + if (mIndex != -1) { + LCOpenSDK_Download.stopDownload(mIndex); + MediaPlayHelper.deleteDownloadVideo(mRecordList.get(mIndex).getRecordID(), mRecordList.get(mIndex).getStartTime()); + mRecordList.get(mIndex).setDownLength(-1); + //屏蔽操作 + mIndex = -1; + } + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + TaskPoolHelper.clearTask(); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + static class ViewHolder { + int mPosition; + RelativeLayout mBgVideo; + TextView mRecordTime; + RecordInfo mInfo; + FrameLayout mDownload; + View mDownload_bg; + TextView mDownload_icon; + } + + private class RecrodListAdapter extends BaseAdapter { + private LayoutInflater mInflater; + + public RecrodListAdapter(Context context) { + mInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return mRecordList != null ? mRecordList.size() : 0; + } + + @Override + public RecordInfo getItem(int position) { + return mRecordList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + + if (convertView == null) { + convertView = mInflater.inflate(R.layout.activity_record_list_item, null); + holder = new ViewHolder(); + holder.mBgVideo = (RelativeLayout) convertView.findViewById(R.id.list_bg_video); + holder.mRecordTime = (TextView) convertView.findViewById(R.id.list_record_time); + //云录像加载下载按钮 + // if (mType == MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD) { + holder.mDownload = (FrameLayout) convertView.findViewById(R.id.list_record_download); + holder.mDownload_bg = convertView.findViewById(R.id.record_download_bg); + holder.mDownload_icon = (TextView) convertView.findViewById(R.id.record_download_icon); + holder.mDownload.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + if (mIndex == -1 || mIndex == holder.mPosition) + if (holder.mDownload_icon.getText().toString().equals(getString(R.string.download))) { + //置为可以取消状态 + holder.mDownload_icon.setText(R.string.cancel); + holder.mInfo.setDownLength(0); + + String decryptKey = holder.mInfo.getDeviceKey() != null ? holder.mInfo.getDeviceKey() : holder.mInfo.getDeviceId(); + Logger.e("====decryptKey====", decryptKey); + if (mType == MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD) { + LCOpenSDK_Download.startDownload(holder.mPosition, + MediaPlayHelper.getDownloadVideoPath(0, String.valueOf(holder.mPosition), holder.mInfo.getStartTime()), + Business.getInstance().getToken(), + holder.mInfo.getRecordRegionId(), + holder.mInfo.getDeviceId(), + String.valueOf(0), + decryptKey, + 1000, + 5000); + } else { + LCOpenSDK_Download.startDownload(holder.mPosition, Business.getInstance().getToken(), + holder.mInfo.getDeviceId(), + MediaPlayHelper.getDownloadVideoPath(1, String.valueOf(holder.mPosition), holder.mInfo.getStartTime()), + holder.mInfo.getRecordID(), + decryptKey, + 0, //默认偏移为0 + 0, //mp4格式 + 16.0f); + } + //屏蔽操作 + mIndex = holder.mPosition; + } else { + //置为可以下载状态 + ViewGroup.LayoutParams params = holder.mDownload_bg.getLayoutParams(); + params.width = 0; + holder.mDownload_bg.setLayoutParams(params); + holder.mDownload_icon.setText(R.string.download); + holder.mInfo.setDownLength(-1); + LCOpenSDK_Download.stopDownload(holder.mPosition); + + //删除文件 + MediaPlayHelper.deleteDownloadVideo(String.valueOf(holder.mPosition), holder.mInfo.getStartTime()); + //屏蔽操作 + mIndex = -1; + } + else + Toast.makeText(RecordListActivity.this, R.string.toast_recordlist_onlyone, Toast.LENGTH_SHORT).show(); + } + }); + // } + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + //修改数据信息 + holder.mPosition = position; + holder.mInfo = getItem(position); + //Log.d(tag, "index : " + position); + + ViewGroup.LayoutParams params = holder.mDownload_bg.getLayoutParams(); + switch (mType) { + case MediaPlayActivity.IS_VIDEO_REMOTE_RECORD: + // 屏蔽平台返回的录像大小=0情况(easy4ip设备返回录像大小为0) + if (holder.mInfo.getFileLength() > 0) { + holder.mDownload.setVisibility(View.VISIBLE); + } else { + holder.mDownload.setVisibility(View.INVISIBLE); + } + + //渲染下载更新 + if (holder.mInfo.isDownload()) { + holder.mDownload_icon.setText(R.string.cancel); + if (holder.mInfo.getDownLength() > 0) { + params.width = (int) (holder.mDownload_icon.getWidth() / (holder.mInfo.getFileLength() / holder.mInfo.getDownLength())); + } else { + params.width = 0; + } + } else { + holder.mDownload_icon.setText(R.string.download); + params.width = 0; + } + holder.mDownload_bg.setLayoutParams(params); + + //加载背景图片,设备录像,不用解密 + holder.mBgVideo.setBackgroundResource(R.drawable.list_bg_video); + if (holder.mInfo.getBackgroudImgUrl() != null && holder.mInfo.getBackgroudImgUrl().length() > 0) { + //下载 + ImageHelper.loadCacheImage(holder.mInfo.getBackgroudImgUrl(), new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if (holder.mInfo.getBackgroudImgUrl().hashCode() == msg.what && msg.obj != null) { + holder.mBgVideo.setBackgroundDrawable((Drawable) msg.obj); + } + } + }); + } + break; + case MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD: + // 屏蔽平台返回的录像大小=0情况(easy4ip设备返回录像大小为0) + if (holder.mInfo.getFileLength() > 0) { + holder.mDownload.setVisibility(View.VISIBLE); + } else { + holder.mDownload.setVisibility(View.INVISIBLE); + } + + //渲染下载更新 + if (holder.mInfo.isDownload()) { + holder.mDownload_icon.setText(R.string.cancel); + if (holder.mInfo.getDownLength() > 0) { + params.width = (int) (holder.mDownload_icon.getWidth() / (holder.mInfo.getFileLength() / holder.mInfo.getDownLength())); + } else { + params.width = 0; + } + } else { + holder.mDownload_icon.setText(R.string.download); + params.width = 0; + } + holder.mDownload_bg.setLayoutParams(params); + //加载背景图片,云录像,要解密 + holder.mBgVideo.setBackgroundResource(R.drawable.list_bg_device); + if (holder.mInfo.getBackgroudImgUrl() != null && holder.mInfo.getBackgroudImgUrl().length() > 0) { + //下载 + ImageHelper.loadCacheImage(holder.mInfo.getBackgroudImgUrl(), holder.mInfo.getDeviceId(), holder.mInfo.getDeviceKey() != null ? holder.mInfo.getDeviceKey() : holder.mInfo.getDeviceId(), new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if (holder.mInfo.getBackgroudImgUrl().hashCode() == msg.what && msg.obj != null) { + holder.mBgVideo.setBackgroundDrawable((Drawable) msg.obj); + } + } + }); + } + break; + default: + break; + } + + //时间 + holder.mRecordTime.setText(TimeHelper.getDateHMS(holder.mInfo.getStartTime()) + "--" + TimeHelper.getDateHMS(holder.mInfo.getEndTime())); + + return convertView; + } + } + + private class CloudDownloadListener extends LCOpenSDK_DownloadListener { + @Override + public void onDownloadReceiveData(int index, int dataLen) { + // TODO Auto-generated method stub + if (mRecordList.size() != 0) { + RecordInfo info = mRecordList.get((int) index); + info.setDownLength(info.getDownLength() + dataLen); + Logger.d(tag, "downLen:" + info.getDownLength()); + } + } + + @Override + public void onDownloadState(final int index, String code, int Type) { + // TODO Auto-generated method stub + if (Type == Business.RESULT_SOURCE_OPENAPI + || code.equals(CloudStorageCode.HLS_DOWNLOAD_FAILD) + || code.equals(CloudStorageCode.HLS_SEEK_FAILD) + || code.equals(CloudStorageCode.HLS_KEY_ERROR)) { + //重置为可以下载状态 + mRecordList.get((int) index).setDownLength(-1); + if (mHandler != null) { + mHandler.post(new Runnable() { + public void run() { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_failed) + ",index : " + index, Toast.LENGTH_SHORT).show(); + } + }); + } + //删除下载到一半的文件 + MediaPlayHelper.deleteDownloadVideo(String.valueOf(index), mRecordList.get(index).getStartTime()); + //屏蔽操作 + mIndex = -1; + + } + if (code.equals(CloudStorageCode.HLS_DOWNLOAD_END)) { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_end) + ",index : " + index, Toast.LENGTH_SHORT).show(); + //重置为可以下载状态 + mRecordList.get((int) index).setDownLength(-1); + if (mHandler != null) { + mHandler.post(new Runnable() { + public void run() { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_end) + ",index : " + index, Toast.LENGTH_SHORT).show(); + } + }); + } + //通知图库刷新 + MediaScannerConnection.scanFile(RecordListActivity.this, + new String[]{MediaPlayHelper.getDownloadVideoPath(0, String.valueOf(index), mRecordList.get(index).getStartTime())}, null, null); + //屏蔽操作 + mIndex = -1; + } + } + } + + private class LocalDownloadListener extends LCOpenSDK_DownloadListener { + @Override + public void onDownloadReceiveData(int index, int dataLen) { + // TODO Auto-generated method stub + if (mRecordList.size() != 0) { + RecordInfo info = mRecordList.get((int) index); + info.setDownLength(info.getDownLength() + dataLen); + + Logger.d(tag, "downLen:" + info.getDownLength()); + } + } + + @Override + public void onDownloadState(final int index, String code, int Type) { + // TODO Auto-generated method stub + if (Type == Business.RESULT_SOURCE_OPENAPI + || code.equals(LocalDownloadCode.RTSP_DOWNLOAD_FRAME_ERROR) + || code.equals(LocalDownloadCode.RTSP_DOWNLOAD_TEARDOWN) + || code.equals(LocalDownloadCode.RTSP_DOWNLOAD_AUTHORIZATION_FAIL) + || code.equals(LocalDownloadCode.RTSP_DOWNLOAD_KEY_MISMATH)) { + //重置为可以下载状态 + mRecordList.get((int) index).setDownLength(-1); + if (mHandler != null) { + mHandler.post(new Runnable() { + public void run() { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_failed) + ",index : " + index, Toast.LENGTH_SHORT).show(); + } + }); + } + //删除下载到一半的文件 + MediaPlayHelper.deleteDownloadVideo(String.valueOf(index), mRecordList.get(index).getStartTime()); + //屏蔽操作 + mIndex = -1; + + } + if (code.equals(LocalDownloadCode.RTSP_DOWNLOAD_OVER)) { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_end) + ",index : " + index, Toast.LENGTH_SHORT).show(); + //重置为可以下载状态 + mRecordList.get((int) index).setDownLength(-1); + LCOpenSDK_Download.stopDownload(index); + if (mHandler != null) { + mHandler.post(new Runnable() { + public void run() { + Toast.makeText(RecordListActivity.this, getString(R.string.toast_recordlist_download_end) + ",index : " + index, Toast.LENGTH_SHORT).show(); + } + }); + } + //通知图库刷新 + MediaScannerConnection.scanFile(RecordListActivity.this, + new String[]{MediaPlayHelper.getDownloadVideoPath(1, String.valueOf(index), mRecordList.get(index).getStartTime())}, null, null); + //屏蔽操作 + mIndex = -1; + } + } + } + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/SimpleAdapter.java b/app/src/main/java/com/lechange/demo/localvideo/SimpleAdapter.java new file mode 100644 index 0000000..b877c28 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/SimpleAdapter.java @@ -0,0 +1,120 @@ +package com.lechange.demo.localvideo; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.demo.mediaplay.MediaPlayBackActivity; +import com.yonsz.z1.R; + +import java.text.SimpleDateFormat; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by gavin + * Created date 17/6/5 + * Created log + */ + +public class SimpleAdapter extends RecyclerView.Adapter { + private List mCities; + private Context mContext; + + public SimpleAdapter(Context context, List cities) { + mCities = cities; + mContext = context; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_city, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) { + ViewHolder holder = (ViewHolder) viewHolder; + if (mCities.size() > position) { + RecordInfo city = mCities.get(position); + holder.mIvCity.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mContext, MediaPlayBackActivity.class); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent.putExtra("ID", mCities.get(position).getId()); + intent.putExtra("dateString", mCities.get(position).getStartTime()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent); + } + }); + long startTime = city.getStartTime(); + long endTime = city.getEndTime(); + long l = endTime - startTime; + SimpleDateFormat sdf1 = new SimpleDateFormat("mm:ss"); + holder.mTvCity.setText(String.valueOf(sdf1.format(l))); + SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); + holder.mTvBrief.setText(String.valueOf(sdf2.format(startTime))); + /*if (city.isExpanded()) { + ViewGroup.LayoutParams layoutParams = holder.mLlBg.getLayoutParams(); + layoutParams.height = DensityUtil.dip2px(mContext, 100); + holder.mLlBg.setLayoutParams(layoutParams); + //holder.itemView.setVisibility(View.VISIBLE); + int i = position % 5 + 1; + if (i == 1) { + holder.mIvCity.setImageResource(R.mipmap.subject1); + holder.mLlBg.setBackgroundColor(mContext.getResources().getColor(R.color.bg1)); + } else if (i == 2) { + holder.mIvCity.setImageResource(R.mipmap.subject2); + holder.mLlBg.setBackgroundColor(mContext.getResources().getColor(R.color.bg2)); + } else if (i == 3) { + holder.mIvCity.setImageResource(R.mipmap.subject3); + holder.mLlBg.setBackgroundColor(mContext.getResources().getColor(R.color.bg3)); + } else if (i == 4) { + holder.mIvCity.setImageResource(R.mipmap.subject4); + holder.mLlBg.setBackgroundColor(mContext.getResources().getColor(R.color.bg4)); + } else { + holder.mIvCity.setImageResource(R.mipmap.subject5); + holder.mLlBg.setBackgroundColor(mContext.getResources().getColor(R.color.bg5)); + } + holder.mTvCity.setText(city.getName()); + } else { + ViewGroup.LayoutParams layoutParams = holder.mLlBg.getLayoutParams(); + layoutParams.height = DensityUtil.dip2px(mContext, 0); + holder.mLlBg.setLayoutParams(layoutParams); + //holder.itemView.setVisibility(View.GONE); + }*/ + } + } + + @Override + public int getItemCount() { + return mCities.size(); + } + + + static class ViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_city) + ImageView mIvCity; + @BindView(R.id.tv_city) + TextView mTvCity; + @BindView(R.id.tv_brief) + TextView mTvBrief; + /*@BindView(R.id.ll_bg) + LinearLayout mLlBg;*/ + + ViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/TodayLocalAdapter.java b/app/src/main/java/com/lechange/demo/localvideo/TodayLocalAdapter.java new file mode 100644 index 0000000..1ea214d --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/TodayLocalAdapter.java @@ -0,0 +1,140 @@ +package com.lechange.demo.localvideo; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.mediaplay.MediaPlayBackActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2019/2/27. + */ + +public class TodayLocalAdapter extends RecyclerView.Adapter { + + private List mOnLineRecordList = new ArrayList<>(); + private Context mContext; + private String uuid; + private OnRecyclerClickListener mOnItemClickListener; + + public TodayLocalAdapter(Context mContext, List mRecordInfos, String uuid) { + super(); + this.mContext = mContext; + this.mOnLineRecordList = mRecordInfos; + this.uuid = uuid; + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_local_video_item, + parent, false); + return new TodayLocalAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(TodayLocalAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + if (mOnLineRecordList.size() < 5) { + return mOnLineRecordList != null ? mOnLineRecordList.size() + 1 : 0; + } else { + return mOnLineRecordList != null ? 6 : 0; + } + } + + @Override + public long getItemId(int position) { + return super.getItemId(position); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + /*private TextView mChannelName; + private ImageView mDelete;*/ + // private RelativeLayout mBgDevice; + private ImageView mLiveVideo; + /*private ImageView mLocalVideo; + private ImageView mCloudVideo; + private ImageView mMessage; + private ImageView mSetting;*/ + private LinearLayout mListShade; + private ChannelInfo mInfo; + private ImageView iv; + private TextView tv_more; + private TextView tv_start_time; + + public MessageViewHolder(View convertView) { + super(convertView); + /*mChannelName = (TextView) convertView.findViewById(R.id.list_channel_name); + mDelete = (ImageView) convertView.findViewById(R.id.list_device_delete);*/ + // mBgDevice = (RelativeLayout) convertView.findViewById(R.id.list_bg_device); + mLiveVideo = (ImageView) convertView.findViewById(R.id.list_device_livevideo); + /*mLocalVideo = (ImageView) convertView.findViewById(R.id.list_device_localvideo); + mCloudVideo = (ImageView) convertView.findViewById(R.id.list_device_cloudvideo); + mMessage = (ImageView) convertView.findViewById(R.id.list_device_message); + mSetting = (ImageView) convertView.findViewById(R.id.list_device_setting);*/ + mListShade = (LinearLayout) convertView.findViewById(R.id.list_shade); + iv = (ImageView) itemView.findViewById(R.id.imageView); + tv_more = (TextView) itemView.findViewById(R.id.tv_more); + tv_start_time = (TextView) itemView.findViewById(R.id.tv_start_time); + } + + public void setViews(final int position) { + //修改数据信息(含加密标识符) + if (position == mOnLineRecordList.size() || position == 5) { + iv.setVisibility(View.GONE); + } else { + iv.setVisibility(View.VISIBLE); + SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); + tv_start_time.setText(String.valueOf(sdf2.format(mOnLineRecordList.get(position).getStartTime()))); + } + iv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + /*Intent intent = new Intent(mContext, MediaPlayBackActivity.class); + if (TextUtils.isEmpty(mOnLineRecordList.get(position).getId())) { + return; + } + intent.putExtra("TYPE", MediaPlayBackActivity.IS_VIDEO_REMOTE_RECORD); + intent.putExtra("ID", mOnLineRecordList.get(position).getId()); + intent.putExtra("dateString", mOnLineRecordList.get(position).getStartTime()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent);*/ + } + }); + tv_more.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(mContext, RecordListActivity.class); + intent1.putExtra("UUID", uuid); + intent1.putExtra("TYPE", MediaPlayBackActivity.IS_VIDEO_REMOTE_RECORD); + intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent1); + } + }); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/calendar/CalendarPopipWindow.java b/app/src/main/java/com/lechange/demo/localvideo/calendar/CalendarPopipWindow.java new file mode 100644 index 0000000..07a9bd8 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/calendar/CalendarPopipWindow.java @@ -0,0 +1,136 @@ +package com.lechange.demo.localvideo.calendar; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DateTimeUitl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Created by Administrator on 2019/3/7. + */ + +public class CalendarPopipWindow extends PopupWindow { + private Context context; + private View contentView; + private CustomCalendar cal; + private String chooseDay; + private OnCompleteListener onCompleteListener; + + public CalendarPopipWindow(Context context, String chooseDay, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.chooseDay = chooseDay; + this.onCompleteListener = onCompleteListener; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_calendar, null); + cal = (CustomCalendar) contentView.findViewById(R.id.cal); + final List list = new ArrayList<>(); + cal.setRenwu(chooseDay, list); + cal.setOnClickListener(new CustomCalendar.onClickListener() { + @Override + public void onLeftRowClick() { + Toast.makeText(context, "点击减箭头", Toast.LENGTH_SHORT).show(); + cal.monthChange(-1); + new Thread() { + @Override + public void run() { + try { + Thread.sleep(1000); + /*runOnUiThread(new Runnable() { + @Override + public void run() { + cal.setRenwu(list); + } + });*/ + } catch (Exception e) { + } + } + }.start(); + } + + @Override + public void onRightRowClick() { + Toast.makeText(context, "点击加箭头", Toast.LENGTH_SHORT).show(); + cal.monthChange(1); + new Thread() { + @Override + public void run() { + try { + Thread.sleep(1000); + /*runOnUiThread(new Runnable() { + @Override + public void run() { + cal.setRenwu(list); + } + });*/ + } catch (Exception e) { + } + } + }.start(); + } + + @Override + public void onTitleClick(String monthStr, Date month) { + Toast.makeText(context, "点击了标题:" + monthStr, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onWeekClick(int weekIndex, String weekStr) { + Toast.makeText(context, "点击了星期:" + weekStr, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onDayClick(int day, String dayStr, DayFinish finish) { + Toast.makeText(context, "点击了日期:" + dayStr, Toast.LENGTH_SHORT).show(); + // Log.w("", "点击了日期:" + dayStr); + if (onCompleteListener != null) { + int year = Integer.parseInt(dayStr.substring(0, 4)); + int month = Integer.parseInt(dayStr.substring(5, 7)); + String date = DateTimeUitl.formatDateFromInt(year, month, day); + onCompleteListener.onComplete(date); + } + dismiss(); + } + }); + + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + this.setOutsideTouchable(true); + this.setTouchable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + + this.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent event) { + //如果点击了popuWindow的外部,popuWindow也会消失 + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + dismiss(); + return true; + } + return false; + } + }); + } + + public interface OnCompleteListener { + void onComplete(String dayStr); + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/calendar/CustomCalendar.java b/app/src/main/java/com/lechange/demo/localvideo/calendar/CustomCalendar.java new file mode 100644 index 0000000..12712a3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/calendar/CustomCalendar.java @@ -0,0 +1,657 @@ +package com.lechange.demo.localvideo.calendar; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.DashPathEffect; +import android.graphics.Paint; +import android.graphics.PathEffect; +import android.graphics.PointF; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.yonsz.z1.R; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * author : openXu + * create at : 2017/1/3 9:56 + * blog : http://blog.csdn.net/xmxkf + * gitHub : https://github.com/openXu + * project : CustomCalendar + * class name : CustomCalendar + * version : 1.0 + * class describe:自定义日历控件 + */ +public class CustomCalendar extends View { + + private String TAG = "CustomCalendar"; + + /** + * 各部分背景 + */ + private int mBgMonth, mBgWeek, mBgDay, mBgPre; + /** + * 标题的颜色、大小 + */ + private int mTextColorMonth; + private float mTextSizeMonth; + private int mMonthRowL, mMonthRowR; + private float mMonthRowSpac; + private float mMonthSpac; + /** + * 星期的颜色、大小 + */ + private int mTextColorWeek, mSelectWeekTextColor; + private float mTextSizeWeek; + /** + * 日期文本的颜色、大小 + */ + private int mTextColorDay; + private float mTextSizeDay; + /** + * 任务次数文本的颜色、大小 + */ + private int mTextColorPreFinish, mTextColorPreUnFinish, mTextColorPreNull; + private float mTextSizePre; + /** + * 选中的文本的颜色 + */ + private int mSelectTextColor; + /** + * 选中背景 + */ + private int mSelectBg, mCurrentBg; + private float mSelectRadius, mCurrentBgStrokeWidth; + private float[] mCurrentBgDashPath; + + /** + * 行间距 + */ + private float mLineSpac; + /** + * 字体上下间距 + */ + private float mTextSpac; + + private Paint mPaint; + private Paint bgPaint; + + private float titleHeight, weekHeight, dayHeight, preHeight, oneHeight; + private int columnWidth; //每列宽度 + + private Date month; //当前的月份 + private boolean isCurrentMonth; //展示的月份是否是当前月 + private int currentDay, selectDay, lastSelectDay; //当前日期 、 选中的日期 、上一次选中的日期(避免造成重复回调请求) + + private int dayOfMonth; //月份天数 + private int firstIndex; //当月第一天位置索引 + private int todayWeekIndex;//今天是星期几 + private int firstLineNum, lastLineNum; //第一行、最后一行能展示多少日期 + private int lineNum; //日期行数 + private String[] WEEK_STR = new String[]{"日", "一", "二", "三", "四", "五", "六",}; + /** + * 绘制月份 + */ + private int rowLStart, rowRStart, rowWidth; + /****************************事件处理↓↓↓↓↓↓↓****************************/ + //焦点坐标 + private PointF focusPoint = new PointF(); + //控制事件是否响应 + private boolean responseWhenEnd = false; + /***********************接口API↓↓↓↓↓↓↓**************************/ + private Map map; + private onClickListener listener; + + public CustomCalendar(Context context) { + this(context, null); + } + + public CustomCalendar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CustomCalendar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + //获取自定义属性的值 + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomCalendar, defStyleAttr, 0); + + mBgMonth = a.getColor(R.styleable.CustomCalendar_mBgMonth, Color.TRANSPARENT); + mBgWeek = a.getColor(R.styleable.CustomCalendar_mBgWeek, Color.TRANSPARENT); + mBgDay = a.getColor(R.styleable.CustomCalendar_mBgDay, Color.TRANSPARENT); + mBgPre = a.getColor(R.styleable.CustomCalendar_mBgPre, Color.TRANSPARENT); + + mMonthRowL = a.getResourceId(R.styleable.CustomCalendar_mMonthRowL, R.drawable.custom_calendar_row_left); + mMonthRowR = a.getResourceId(R.styleable.CustomCalendar_mMonthRowR, R.drawable.custom_calendar_row_right); + mMonthRowSpac = a.getDimension(R.styleable.CustomCalendar_mMonthRowSpac, 20); + mTextColorMonth = a.getColor(R.styleable.CustomCalendar_mTextColorMonth, Color.BLACK); + mTextSizeMonth = a.getDimension(R.styleable.CustomCalendar_mTextSizeMonth, 100); + mMonthSpac = a.getDimension(R.styleable.CustomCalendar_mMonthSpac, 20); + mTextColorWeek = a.getColor(R.styleable.CustomCalendar_mTextColorWeek, Color.BLACK); + mSelectWeekTextColor = a.getColor(R.styleable.CustomCalendar_mSelectWeekTextColor, Color.BLACK); + + mTextSizeWeek = a.getDimension(R.styleable.CustomCalendar_mTextSizeWeek, 70); + mTextColorDay = a.getColor(R.styleable.CustomCalendar_mTextColorDay, Color.GRAY); + mTextSizeDay = a.getDimension(R.styleable.CustomCalendar_mTextSizeDay, 70); + mTextColorPreFinish = a.getColor(R.styleable.CustomCalendar_mTextColorPreFinish, Color.BLUE); + mTextColorPreUnFinish = a.getColor(R.styleable.CustomCalendar_mTextColorPreUnFinish, Color.BLUE); + mTextColorPreNull = a.getColor(R.styleable.CustomCalendar_mTextColorPreNull, Color.BLUE); + mTextSizePre = a.getDimension(R.styleable.CustomCalendar_mTextSizePre, 0); + mSelectTextColor = a.getColor(R.styleable.CustomCalendar_mSelectTextColor, Color.YELLOW); + mCurrentBg = a.getColor(R.styleable.CustomCalendar_mCurrentBg, Color.GRAY); + try { + int dashPathId = a.getResourceId(R.styleable.CustomCalendar_mCurrentBgDashPath, R.array.customCalendar_currentDay_bg_DashPath); + int[] array = getResources().getIntArray(dashPathId); + mCurrentBgDashPath = new float[array.length]; + for (int i = 0; i < array.length; i++) { + mCurrentBgDashPath[i] = array[i]; + } + } catch (Exception e) { + e.printStackTrace(); + mCurrentBgDashPath = new float[]{2, 3, 2, 3}; + } + mSelectBg = a.getColor(R.styleable.CustomCalendar_mSelectBg, Color.YELLOW); + mSelectRadius = a.getDimension(R.styleable.CustomCalendar_mSelectRadius, 20); + mCurrentBgStrokeWidth = a.getDimension(R.styleable.CustomCalendar_mCurrentBgStrokeWidth, 5); + mLineSpac = a.getDimension(R.styleable.CustomCalendar_mLineSpac, 20); + mTextSpac = a.getDimension(R.styleable.CustomCalendar_mTextSpac, 20); + a.recycle(); //注意回收 + + initCompute(); + + } + + /** + * 计算相关常量,构造方法中调用 + */ + private void initCompute() { + mPaint = new Paint(); + bgPaint = new Paint(); + mPaint.setAntiAlias(true); //抗锯齿 + bgPaint.setAntiAlias(true); //抗锯齿 + + map = new HashMap<>(); + + //标题高度 + mPaint.setTextSize(mTextSizeMonth); + titleHeight = FontUtil.getFontHeight(mPaint) + 2 * mMonthSpac; + //星期高度 + mPaint.setTextSize(mTextSizeWeek); + weekHeight = FontUtil.getFontHeight(mPaint); + //日期高度 + mPaint.setTextSize(mTextSizeDay); + dayHeight = FontUtil.getFontHeight(mPaint); + //次数字体高度 + mPaint.setTextSize(mTextSizePre); + preHeight = FontUtil.getFontHeight(mPaint); + //每行高度 = 行间距 + 日期字体高度 + 字间距 + 次数字体高度 + oneHeight = mLineSpac + dayHeight + mTextSpac + preHeight; + + //默认当前月份 + String cDateStr = getMonthStr(new Date()); + // cDateStr = "2015年08月"; + setMonth(cDateStr); + } + + /** + * 设置月份 + */ + private void setMonth(String Month) { + //设置的月份(2017年01月) + month = str2Date(Month); + + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + //获取今天是多少号 + currentDay = calendar.get(Calendar.DAY_OF_MONTH); + todayWeekIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; + + Date cM = str2Date(getMonthStr(new Date())); + //判断是否为当月 + if (cM.getTime() == month.getTime()) { + isCurrentMonth = true; + selectDay = currentDay;//当月默认选中当前日 + } else { + isCurrentMonth = false; + selectDay = 0; + } + Log.d(TAG, "设置月份:" + month + " 今天" + currentDay + "号, 是否为当前月:" + isCurrentMonth); + calendar.setTime(month); + dayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //第一行1号显示在什么位置(星期几) + firstIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; + lineNum = 1; + //第一行能展示的天数 + firstLineNum = 7 - firstIndex; + lastLineNum = 0; + int shengyu = dayOfMonth - firstLineNum; + while (shengyu > 7) { + lineNum++; + shengyu -= 7; + } + if (shengyu > 0) { + lineNum++; + lastLineNum = shengyu; + } + Log.i(TAG, getMonthStr(month) + "一共有" + dayOfMonth + "天,第一天的索引是:" + firstIndex + " 有" + lineNum + + "行,第一行" + firstLineNum + "个,最后一行" + lastLineNum + "个"); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + //宽度 = 填充父窗体 + int widthSize = MeasureSpec.getSize(widthMeasureSpec); //获取宽的尺寸 + columnWidth = widthSize / 7; + //高度 = 标题高度 + 星期高度 + 日期行数*每行高度 + float height = titleHeight + weekHeight + (lineNum * oneHeight); + Log.v(TAG, "标题高度:" + titleHeight + " 星期高度:" + weekHeight + " 每行高度:" + oneHeight + + " 行数:" + lineNum + " \n控件高度:" + height); + setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), + (int) height); + + } + + @Override + protected void onDraw(Canvas canvas) { + drawMonth(canvas); + drawWeek(canvas); + drawDayAndPre(canvas); + } + + private void drawMonth(Canvas canvas) { + //背景 + bgPaint.setColor(mBgMonth); + RectF rect = new RectF(0, 0, getWidth(), titleHeight); + canvas.drawRect(rect, bgPaint); + //绘制月份 + mPaint.setTextSize(mTextSizeMonth); + mPaint.setColor(mTextColorMonth); + float textLen = FontUtil.getFontlength(mPaint, getMonthStr(month)); + float textStart = (getWidth() - textLen) / 2; + canvas.drawText(getMonthStr(month), textStart, + mMonthSpac + FontUtil.getFontLeading(mPaint), mPaint); + /*绘制左右箭头*/ + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), mMonthRowL); + int h = bitmap.getHeight(); + rowWidth = bitmap.getWidth(); + //float left, float top + rowLStart = (int) (textStart - 2 * mMonthRowSpac - rowWidth); + canvas.drawBitmap(bitmap, rowLStart + mMonthRowSpac, (titleHeight - h) / 2, new Paint()); + bitmap = BitmapFactory.decodeResource(getResources(), mMonthRowR); + rowRStart = (int) (textStart + textLen); + canvas.drawBitmap(bitmap, rowRStart + mMonthRowSpac, (titleHeight - h) / 2, new Paint()); + } + + /** + * 绘制绘制星期 + */ + private void drawWeek(Canvas canvas) { + //背景 + bgPaint.setColor(mBgWeek); + RectF rect = new RectF(0, titleHeight, getWidth(), titleHeight + weekHeight); + canvas.drawRect(rect, bgPaint); + //绘制星期:七天 + mPaint.setTextSize(mTextSizeWeek); + + for (int i = 0; i < WEEK_STR.length; i++) { + if (todayWeekIndex == i && isCurrentMonth) { + mPaint.setColor(mSelectWeekTextColor); + } else { + mPaint.setColor(mTextColorWeek); + } + int len = (int) FontUtil.getFontlength(mPaint, WEEK_STR[i]); + int x = i * columnWidth + (columnWidth - len) / 2; + canvas.drawText(WEEK_STR[i], x, titleHeight + FontUtil.getFontLeading(mPaint), mPaint); + } + } + + /** + * 绘制日期和次数 + */ + private void drawDayAndPre(Canvas canvas) { + //某行开始绘制的Y坐标,第一行开始的坐标为标题高度+星期部分高度 + float top = titleHeight + weekHeight; + //行 + for (int line = 0; line < lineNum; line++) { + if (line == 0) { + //第一行 + drawDayAndPre(canvas, top, firstLineNum, 0, firstIndex); + } else if (line == lineNum - 1) { + //最后一行 + top += oneHeight; + drawDayAndPre(canvas, top, lastLineNum, firstLineNum + (line - 1) * 7, 0); + } else { + //满行 + top += oneHeight; + drawDayAndPre(canvas, top, 7, firstLineNum + (line - 1) * 7, 0); + } + } + } + + /** + * 绘制某一行的日期 + * + * @param canvas + * @param top 顶部坐标 + * @param count 此行需要绘制的日期数量(不一定都是7天) + * @param overDay 已经绘制过的日期,从overDay+1开始绘制 + * @param startIndex 此行第一个日期的星期索引 + */ + private void drawDayAndPre(Canvas canvas, float top, + int count, int overDay, int startIndex) { + // Log.e(TAG, "总共"+dayOfMonth+"天 有"+lineNum+"行"+ " 已经画了"+overDay+"天,下面绘制:"+count+"天"); + //背景 + float topPre = top + mLineSpac + dayHeight; + bgPaint.setColor(mBgDay); + RectF rect = new RectF(0, top, getWidth(), topPre); + canvas.drawRect(rect, bgPaint); + + bgPaint.setColor(mBgPre); + rect = new RectF(0, topPre, getWidth(), topPre + mTextSpac + dayHeight); + canvas.drawRect(rect, bgPaint); + + mPaint.setTextSize(mTextSizeDay); + float dayTextLeading = FontUtil.getFontLeading(mPaint); + mPaint.setTextSize(mTextSizePre); + float preTextLeading = FontUtil.getFontLeading(mPaint); + // Log.v(TAG, "当前日期:"+currentDay+" 选择日期:"+selectDay+" 是否为当前月:"+isCurrentMonth); + for (int i = 0; i < count; i++) { + int left = (startIndex + i) * columnWidth; + int day = (overDay + i + 1); + + mPaint.setTextSize(mTextSizeDay); + + //如果是当前月,当天日期需要做处理 + if (isCurrentMonth && currentDay == day) { + mPaint.setColor(mTextColorDay); + bgPaint.setColor(mCurrentBg); + bgPaint.setStyle(Paint.Style.STROKE); //空心 + PathEffect effect = new DashPathEffect(mCurrentBgDashPath, 1); + bgPaint.setPathEffect(effect); //设置画笔曲线间隔 + bgPaint.setStrokeWidth(mCurrentBgStrokeWidth); //画笔宽度 + //绘制空心圆背景 + canvas.drawCircle(left + columnWidth / 2, top + mLineSpac + dayHeight / 2, + mSelectRadius - mCurrentBgStrokeWidth, bgPaint); + } + //绘制完后将画笔还原,避免脏笔 + bgPaint.setPathEffect(null); + bgPaint.setStrokeWidth(0); + bgPaint.setStyle(Paint.Style.FILL); + + //选中的日期,如果是本月,选中日期正好是当天日期,下面的背景会覆盖上面绘制的虚线背景 + if (selectDay == day) { + //选中的日期字体白色,橙色背景 + mPaint.setColor(mSelectTextColor); + bgPaint.setColor(mSelectBg); + //绘制橙色圆背景,参数一是中心点的x轴,参数二是中心点的y轴,参数三是半径,参数四是paint对象; + canvas.drawCircle(left + columnWidth / 2, top + mLineSpac + dayHeight / 2, mSelectRadius, bgPaint); + } else { + mPaint.setColor(mTextColorDay); + } + + int len = (int) FontUtil.getFontlength(mPaint, day + ""); + int x = left + (columnWidth - len) / 2; + canvas.drawText(day + "", x, top + mLineSpac + dayTextLeading, mPaint); + + //绘制次数 + mPaint.setTextSize(mTextSizePre); + DayFinish finish = map.get(day); + String preStr = ""; + if (isCurrentMonth) { + if (day > currentDay) { + mPaint.setColor(mTextColorPreNull); + } else if (finish != null) { + //区分完成未完成 + if (finish.finish >= finish.all) { + mPaint.setColor(mTextColorPreFinish); + } else { + mPaint.setColor(mTextColorPreUnFinish); + } + preStr = finish.finish + "/" + finish.all; + + } else { + mPaint.setColor(mTextColorPreNull); + } + } else { + if (finish != null) { + //区分完成未完成 + if (finish.finish >= finish.all) { + mPaint.setColor(mTextColorPreFinish); + } else { + mPaint.setColor(mTextColorPreUnFinish); + } + preStr = finish.finish + "/" + finish.all; + + } else { + mPaint.setColor(mTextColorPreNull); + } + } + + len = (int) FontUtil.getFontlength(mPaint, preStr); + x = left + (columnWidth - len) / 2; + canvas.drawText(preStr, x, topPre + mTextSpac + preTextLeading, mPaint); + } + } + + /** + * 获取月份标题 + */ + private String getMonthStr(Date month) { + SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月"); + return df.format(month); + } + + private Date str2Date(String str) { + try { + SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月"); + return df.parse(str); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + int action = event.getAction() & MotionEvent.ACTION_MASK; + switch (action) { + case MotionEvent.ACTION_DOWN: + focusPoint.set(event.getX(), event.getY()); + touchFocusMove(focusPoint, false); + break; + case MotionEvent.ACTION_MOVE: + focusPoint.set(event.getX(), event.getY()); + touchFocusMove(focusPoint, false); + break; + case MotionEvent.ACTION_OUTSIDE: + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + focusPoint.set(event.getX(), event.getY()); + touchFocusMove(focusPoint, true); + break; + } + return true; + } + + /** + * 焦点滑动 + */ + public void touchFocusMove(final PointF point, boolean eventEnd) { + Log.e(TAG, "点击坐标:(" + point.x + " ," + point.y + "),事件是否结束:" + eventEnd); + /**标题和星期只有在事件结束后才响应*/ + if (point.y <= titleHeight) { + //事件在标题上 + if (eventEnd && listener != null) { + if (point.x >= rowLStart && point.x < (rowLStart + 2 * mMonthRowSpac + rowWidth)) { + Log.w(TAG, "点击左箭头"); + listener.onLeftRowClick(); + } else if (point.x > rowRStart && point.x < (rowRStart + 2 * mMonthRowSpac + rowWidth)) { + Log.w(TAG, "点击右箭头"); + listener.onRightRowClick(); + } else if (point.x > rowLStart && point.x < rowRStart) { + listener.onTitleClick(getMonthStr(month), month); + } + } + } else if (point.y <= (titleHeight + weekHeight)) { + //事件在星期部分 + if (eventEnd && listener != null) { + //根据X坐标找到具体的焦点日期 + int xIndex = (int) point.x / columnWidth; + Log.e(TAG, "列宽:" + columnWidth + " x坐标余数:" + (point.x / columnWidth)); + if ((point.x / columnWidth - xIndex) > 0) { + xIndex += 1; + } + if (listener != null) { + listener.onWeekClick(xIndex - 1, WEEK_STR[xIndex - 1]); + } + } + } else { + /**日期部分按下和滑动时重绘,只有在事件结束后才响应*/ + touchDay(point, eventEnd); + } + } + + /** + * 事件点在 日期区域 范围内 + */ + private void touchDay(final PointF point, boolean eventEnd) { + //根据Y坐标找到焦点行 + boolean availability = false; //事件是否有效 + //日期部分 + float top = titleHeight + weekHeight + oneHeight; + int foucsLine = 1; + while (foucsLine <= lineNum) { + if (top >= point.y) { + availability = true; + break; + } + top += oneHeight; + foucsLine++; + } + if (availability) { + //根据X坐标找到具体的焦点日期 + int xIndex = (int) point.x / columnWidth; + if ((point.x / columnWidth - xIndex) > 0) { + xIndex += 1; + } + // Log.e(TAG, "列宽:"+columnWidth+" x坐标余数:"+(point.x / columnWidth)); + if (xIndex <= 0) + xIndex = 1; //避免调到上一行最后一个日期 + if (xIndex > 7) + xIndex = 7; //避免调到下一行第一个日期 + // Log.e(TAG, "事件在日期部分,第"+foucsLine+"/"+lineNum+"行, "+xIndex+"列"); + if (foucsLine == 1) { + //第一行 + if (xIndex <= firstIndex) { + Log.e(TAG, "点到开始空位了"); + setSelectedDay(selectDay, true); + } else { + setSelectedDay(xIndex - firstIndex, eventEnd); + } + } else if (foucsLine == lineNum) { + //最后一行 + if (xIndex > lastLineNum) { + Log.e(TAG, "点到结尾空位了"); + setSelectedDay(selectDay, true); + } else { + setSelectedDay(firstLineNum + (foucsLine - 2) * 7 + xIndex, eventEnd); + } + } else { + setSelectedDay(firstLineNum + (foucsLine - 2) * 7 + xIndex, eventEnd); + } + } else { + //超出日期区域后,视为事件结束,响应最后一个选择日期的回调 + setSelectedDay(selectDay, true); + } + } + + /** + * 设置选中的日期 + */ + private void setSelectedDay(int day, boolean eventEnd) { + Log.w(TAG, "选中:" + day + " 事件是否结束" + eventEnd); + selectDay = day; + invalidate(); + if (listener != null && eventEnd && responseWhenEnd && lastSelectDay != selectDay) { + lastSelectDay = selectDay; + listener.onDayClick(selectDay, getMonthStr(month) + selectDay + "日", map.get(selectDay)); + } + responseWhenEnd = !eventEnd; + } + + /****************************事件处理↑↑↑↑↑↑↑****************************/ + + + @Override + public void invalidate() { + requestLayout(); + super.invalidate(); + } + + public void setRenwu(String month, List list) { + setMonth(month); + + if (list != null && list.size() > 0) { + map.clear(); + for (DayFinish finish : list) { + map.put(finish.day, finish); + } + } + invalidate(); + } + + public void setRenwu(List list) { + if (list != null && list.size() > 0) { + map.clear(); + for (DayFinish finish : list) { + map.put(finish.day, finish); + } + } + invalidate(); + } + + /** + * 月份增减 + */ + public void monthChange(int change) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(month); + calendar.add(Calendar.MONTH, change); + setMonth(getMonthStr(calendar.getTime())); + map.clear(); + invalidate(); + } + + public void setOnClickListener(onClickListener listener) { + this.listener = listener; + } + + interface onClickListener { + + public abstract void onLeftRowClick(); + + public abstract void onRightRowClick(); + + public abstract void onTitleClick(String monthStr, Date month); + + public abstract void onWeekClick(int weekIndex, String weekStr); + + public abstract void onDayClick(int day, String dayStr, DayFinish finish); + } + + + /***********************接口API↑↑↑↑↑↑↑**************************/ + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/calendar/DayFinish.java b/app/src/main/java/com/lechange/demo/localvideo/calendar/DayFinish.java new file mode 100644 index 0000000..66da3da --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/calendar/DayFinish.java @@ -0,0 +1,16 @@ +package com.lechange.demo.localvideo.calendar; + +/** + * Created by Administrator on 2019/3/7. + */ + +public class DayFinish { + int day; + int all; + int finish; + public DayFinish(int day, int finish, int all) { + this.day = day; + this.all = all; + this.finish = finish; + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/calendar/FontUtil.java b/app/src/main/java/com/lechange/demo/localvideo/calendar/FontUtil.java new file mode 100644 index 0000000..7da877c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/calendar/FontUtil.java @@ -0,0 +1,44 @@ +package com.lechange.demo.localvideo.calendar; + +import android.graphics.Paint; + +/** + * author : openXu + * create at : 2016/07/8 12:40 + * blog : http://blog.csdn.net/xmxkf + * gitHub : https://github.com/openXu + * project : StockChart + * class name : FontUtil + * version : 1.0 + * class describe:文字相关处理帮助类 + */ +public class FontUtil { + + /** + * @param paint + * @param str + * @return 返回指定笔和指定字符串的长度 + * @add yujiangtao 16/8/5 + */ + public static float getFontlength(Paint paint, String str) { + return paint.measureText(str); + } + /** + * @return 返回指定笔的文字高度 + * @add yujiangtao 16/8/5 + */ + public static float getFontHeight(Paint paint) { + Paint.FontMetrics fm = paint.getFontMetrics(); + return fm.descent - fm.ascent; + } + /** + * @return 返回指定笔离文字顶部的基准距离 + * @add yujiangtao 16/8/5 + */ + public static float getFontLeading(Paint paint) { + Paint.FontMetrics fm = paint.getFontMetrics(); + return fm.leading- fm.ascent; + } + + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/LayoutController.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/LayoutController.java new file mode 100644 index 0000000..d0f941d --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/LayoutController.java @@ -0,0 +1,83 @@ +package com.lechange.demo.localvideo.timeshaftbar; + +import android.content.Context; +import android.util.Log; + + +public class LayoutController { + protected int mWidth; + protected int mHeight; + + protected int mScrollPosition; + + protected int mContentLength = 0; + protected OverScroller mScroller; + protected int mPaddingLeft = 0; + protected int mPaddingRight = 0; + protected int mPaddingTop = 0; + + public LayoutController(Context context) { + mScroller = new OverScroller(context); + } + + public void setLayoutSize(int width,int height,int contentLength) { + mWidth = width; + mHeight = height; + mPaddingLeft = mWidth/2; + mPaddingRight = mWidth/2; + mContentLength = mPaddingLeft + contentLength + mPaddingRight; + } + public int getScrollLimit() { + int limit = mContentLength - mPaddingLeft - mPaddingRight; + return limit <= 0 ? 0 : limit; + } + //for scroll + public boolean computeScrollOffset() { + return mScroller.computeScrollOffset(); + } + public void forceFinished() { + mScroller.forceFinished(true); + mScroller.startScroll(mScroller.getCurrX(), mScroller.getCurrY(),0, 0 , 0); + } + public int getPosition() { + return mScroller.getCurrX(); + } + + + public int getPaddingLeft() { + return mPaddingLeft; + } + + public int getPaddingRight() { + return mPaddingRight; + } + + public void fling(int velocity, int min, int max) { + int currX = getPosition(); + mScroller.fling(currX, 0, velocity, 0, min, max, 0, 0,0,0); + } + // Returns the input value x clamped to the range [min, max]. + public static int clamp(int x, int min, int max) { + if (x > max) return max; + if (x < min) return min; + return x; + } + // Returns the distance that over the scroll limit. + public int startScroll(int distance, int min, int max) { + int currPosition = mScroller.getCurrX(); + int newPosition = clamp(currPosition + distance, min, max); + if (newPosition != currPosition) { + Log.d("LayoutController","currPosition = " + currPosition +" distance = "+distance); + mScroller.startScroll(currPosition,0, newPosition - currPosition,0, 0); + } + return distance - newPosition; + } + + public void setPosition(int postion) { + mScrollPosition = postion; + mScroller.startScroll(postion,mScroller.getCurrY(),0, 0 , 0); + } + public boolean isFinished() { + return mScroller.isFinished(); + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/OverScroller.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/OverScroller.java new file mode 100644 index 0000000..cb079cb --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/OverScroller.java @@ -0,0 +1,952 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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. + */ + +package com.lechange.demo.localvideo.timeshaftbar; + +import android.content.Context; +import android.hardware.SensorManager; +import android.view.ViewConfiguration; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; + + +/** + * This class encapsulates scrolling with the ability to overshoot the bounds + * of a scrolling operation. This class is a drop-in replacement for + * {@link android.widget.Scroller} in most cases. + */ +public class OverScroller { + private int mMode; + + private final SplineOverScroller mScrollerX; + private final SplineOverScroller mScrollerY; + + private Interpolator mInterpolator; + + private final boolean mFlywheel; + + private static final int DEFAULT_DURATION = 250; + private static final int SCROLL_MODE = 0; + private static final int FLING_MODE = 1; + + /** + * Creates an OverScroller with a viscous fluid scroll interpolator and flywheel. + * @param context + */ + public OverScroller(Context context) { + this(context, null); + } + + /** + * Creates an OverScroller with flywheel enabled. + * @param context The context of this application. + * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will + * be used. + */ + public OverScroller(Context context, Interpolator interpolator) { + this(context, interpolator, true); + } + + /** + * Creates an OverScroller. + * @param context The context of this application. + * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will + * be used. + * @param flywheel If true, successive fling motions will keep on increasing scroll speed. + * @hide + */ + public OverScroller(Context context, Interpolator interpolator, boolean flywheel) { + mInterpolator = interpolator; + mFlywheel = flywheel; + mScrollerX = new SplineOverScroller(context); + mScrollerY = new SplineOverScroller(context); + } + + /** + * Creates an OverScroller with flywheel enabled. + * @param context The context of this application. + * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will + * be used. + * @param bounceCoefficientX A value between 0 and 1 that will determine the proportion of the + * velocity which is preserved in the bounce when the horizontal edge is reached. A null value + * means no bounce. This behavior is no longer supported and this coefficient has no effect. + * @param bounceCoefficientY Same as bounceCoefficientX but for the vertical direction. This + * behavior is no longer supported and this coefficient has no effect. + * !deprecated Use {!link #OverScroller(Context, Interpolator, boolean)} instead. + */ + public OverScroller(Context context, Interpolator interpolator, + float bounceCoefficientX, float bounceCoefficientY) { + this(context, interpolator, true); + } + + /** + * Creates an OverScroller. + * @param context The context of this application. + * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will + * be used. + * @param bounceCoefficientX A value between 0 and 1 that will determine the proportion of the + * velocity which is preserved in the bounce when the horizontal edge is reached. A null value + * means no bounce. This behavior is no longer supported and this coefficient has no effect. + * @param bounceCoefficientY Same as bounceCoefficientX but for the vertical direction. This + * behavior is no longer supported and this coefficient has no effect. + * @param flywheel If true, successive fling motions will keep on increasing scroll speed. + * !deprecated Use {!link OverScroller(Context, Interpolator, boolean)} instead. + */ + public OverScroller(Context context, Interpolator interpolator, + float bounceCoefficientX, float bounceCoefficientY, boolean flywheel) { + this(context, interpolator, flywheel); + } + + void setInterpolator(Interpolator interpolator) { + mInterpolator = interpolator; + } + + /** + * The amount of friction applied to flings. The default value + * is {@link ViewConfiguration#getScrollFriction}. + * + * @param friction A scalar dimension-less value representing the coefficient of + * friction. + */ + public final void setFriction(float friction) { + mScrollerX.setFriction(friction); + mScrollerY.setFriction(friction); + } + + /** + * + * Returns whether the scroller has finished scrolling. + * + * @return True if the scroller has finished scrolling, false otherwise. + */ + public final boolean isFinished() { + return mScrollerX.mFinished && mScrollerY.mFinished; + } + + /** + * Force the finished field to a particular value. Contrary to + * {@link #abortAnimation()}, forcing the animation to finished + * does NOT cause the scroller to move to the final x and y + * position. + * + * @param finished The new finished value. + */ + public final void forceFinished(boolean finished) { + mScrollerX.mFinished = mScrollerY.mFinished = finished; + } + + /** + * Returns the current X offset in the scroll. + * + * @return The new X offset as an absolute distance from the origin. + */ + public final int getCurrX() { + return mScrollerX.mCurrentPosition; + } + + /** + * Returns the current Y offset in the scroll. + * + * @return The new Y offset as an absolute distance from the origin. + */ + public final int getCurrY() { + return mScrollerY.mCurrentPosition; + } + + /** + * Returns the absolute value of the current velocity. + * + * @return The original velocity less the deceleration, norm of the X and Y velocity vector. + */ + public float getCurrVelocity() { + float squaredNorm = mScrollerX.mCurrVelocity * mScrollerX.mCurrVelocity; + squaredNorm += mScrollerY.mCurrVelocity * mScrollerY.mCurrVelocity; + return (float) Math.sqrt(squaredNorm); + } + + /** + * Returns the start X offset in the scroll. + * + * @return The start X offset as an absolute distance from the origin. + */ + public final int getStartX() { + return mScrollerX.mStart; + } + + /** + * Returns the start Y offset in the scroll. + * + * @return The start Y offset as an absolute distance from the origin. + */ + public final int getStartY() { + return mScrollerY.mStart; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final X offset as an absolute distance from the origin. + */ + public final int getFinalX() { + return mScrollerX.mFinal; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final Y offset as an absolute distance from the origin. + */ + public final int getFinalY() { + return mScrollerY.mFinal; + } + + /** + * Returns how long the scroll event will take, in milliseconds. + * + * @return The duration of the scroll in milliseconds. + * + * @hide Pending removal once nothing depends on it + * @deprecated OverScrollers don't necessarily have a fixed duration. + * This function will lie to the best of its ability. + */ + @Deprecated + public final int getDuration() { + return Math.max(mScrollerX.mDuration, mScrollerY.mDuration); + } + + /** + * Extend the scroll animation. This allows a running animation to scroll + * further and longer, when used with {@link #setFinalX(int)} or {@link #setFinalY(int)}. + * + * @param extend Additional time to scroll in milliseconds. + * @see #setFinalX(int) + * @see #setFinalY(int) + * + * @hide Pending removal once nothing depends on it + * @deprecated OverScrollers don't necessarily have a fixed duration. + * Instead of setting a new final position and extending + * the duration of an existing scroll, use startScroll + * to begin a new animation. + */ + @Deprecated + public void extendDuration(int extend) { + mScrollerX.extendDuration(extend); + mScrollerY.extendDuration(extend); + } + + /** + * Sets the final position (X) for this scroller. + * + * @param newX The new X offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalY(int) + * + * @hide Pending removal once nothing depends on it + * @deprecated OverScroller's final position may change during an animation. + * Instead of setting a new final position and extending + * the duration of an existing scroll, use startScroll + * to begin a new animation. + */ + @Deprecated + public void setFinalX(int newX) { + mScrollerX.setFinalPosition(newX); + } + + /** + * Sets the final position (Y) for this scroller. + * + * @param newY The new Y offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalX(int) + * + * @hide Pending removal once nothing depends on it + * @deprecated OverScroller's final position may change during an animation. + * Instead of setting a new final position and extending + * the duration of an existing scroll, use startScroll + * to begin a new animation. + */ + @Deprecated + public void setFinalY(int newY) { + mScrollerY.setFinalPosition(newY); + } + + /** + * Call this when you want to know the new location. If it returns true, the + * animation is not yet finished. + */ + public boolean computeScrollOffset() { + if (isFinished()) { + return false; + } + + switch (mMode) { + case SCROLL_MODE: + long time = AnimationUtils.currentAnimationTimeMillis(); + // Any scroller can be used for time, since they were started + // together in scroll mode. We use X here. + final long elapsedTime = time - mScrollerX.mStartTime; + + final int duration = mScrollerX.mDuration; + if (elapsedTime < duration) { + float q = (float) (elapsedTime) / duration; + + if (mInterpolator == null) { + q = Scroller.viscousFluid(q); + } else { + q = mInterpolator.getInterpolation(q); + } + + mScrollerX.updateScroll(q); + mScrollerY.updateScroll(q); + } else { + abortAnimation(); + } + break; + + case FLING_MODE: + if (!mScrollerX.mFinished) { + if (!mScrollerX.update()) { + if (!mScrollerX.continueWhenFinished()) { + mScrollerX.finish(); + } + } + } + + if (!mScrollerY.mFinished) { + if (!mScrollerY.update()) { + if (!mScrollerY.continueWhenFinished()) { + mScrollerY.finish(); + } + } + } + + break; + } + + return true; + } + + /** + * Start scrolling by providing a starting point and the distance to travel. + * The scroll will use the default value of 250 milliseconds for the + * duration. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + */ + public void startScroll(int startX, int startY, int dx, int dy) { + startScroll(startX, startY, dx, dy, DEFAULT_DURATION); + } + + /** + * Start scrolling by providing a starting point and the distance to travel. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + * @param duration Duration of the scroll in milliseconds. + */ + public void startScroll(int startX, int startY, int dx, int dy, int duration) { + mMode = SCROLL_MODE; + mScrollerX.startScroll(startX, dx, duration); + mScrollerY.startScroll(startY, dy, duration); + } + + /** + * Call this when you want to 'spring back' into a valid coordinate range. + * + * @param startX Starting X coordinate + * @param startY Starting Y coordinate + * @param minX Minimum valid X value + * @param maxX Maximum valid X value + * @param minY Minimum valid Y value + * @param maxY Minimum valid Y value + * @return true if a springback was initiated, false if startX and startY were + * already within the valid range. + */ + public boolean springBack(int startX, int startY, int minX, int maxX, int minY, int maxY) { + mMode = FLING_MODE; + + // Make sure both methods are called. + final boolean spingbackX = mScrollerX.springback(startX, minX, maxX); + final boolean spingbackY = mScrollerY.springback(startY, minY, maxY); + return spingbackX || spingbackY; + } + + public void fling(int startX, int startY, int velocityX, int velocityY, + int minX, int maxX, int minY, int maxY) { + fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, 0, 0); + } + + /** + * Start scrolling based on a fling gesture. The distance traveled will + * depend on the initial velocity of the fling. + * + * @param startX Starting point of the scroll (X) + * @param startY Starting point of the scroll (Y) + * @param velocityX Initial velocity of the fling (X) measured in pixels per + * second. + * @param velocityY Initial velocity of the fling (Y) measured in pixels per + * second + * @param minX Minimum X value. The scroller will not scroll past this point + * unless overX > 0. If overfling is allowed, it will use minX as + * a springback boundary. + * @param maxX Maximum X value. The scroller will not scroll past this point + * unless overX > 0. If overfling is allowed, it will use maxX as + * a springback boundary. + * @param minY Minimum Y value. The scroller will not scroll past this point + * unless overY > 0. If overfling is allowed, it will use minY as + * a springback boundary. + * @param maxY Maximum Y value. The scroller will not scroll past this point + * unless overY > 0. If overfling is allowed, it will use maxY as + * a springback boundary. + * @param overX Overfling range. If > 0, horizontal overfling in either + * direction will be possible. + * @param overY Overfling range. If > 0, vertical overfling in either + * direction will be possible. + */ + public void fling(int startX, int startY, int velocityX, int velocityY, + int minX, int maxX, int minY, int maxY, int overX, int overY) { + // Continue a scroll or fling in progress + if (mFlywheel && !isFinished()) { + float oldVelocityX = mScrollerX.mCurrVelocity; + float oldVelocityY = mScrollerY.mCurrVelocity; + if (Math.signum(velocityX) == Math.signum(oldVelocityX) && + Math.signum(velocityY) == Math.signum(oldVelocityY)) { + velocityX += oldVelocityX; + velocityY += oldVelocityY; + } + } + + mMode = FLING_MODE; + mScrollerX.fling(startX, velocityX, minX, maxX, overX); + mScrollerY.fling(startY, velocityY, minY, maxY, overY); + } + + /** + * Notify the scroller that we've reached a horizontal boundary. + * Normally the information to handle this will already be known + * when the animation is started, such as in a call to one of the + * fling functions. However there are cases where this cannot be known + * in advance. This function will transition the current motion and + * animate from startX to finalX as appropriate. + * + * @param startX Starting/current X position + * @param finalX Desired final X position + * @param overX Magnitude of overscroll allowed. This should be the maximum + * desired distance from finalX. Absolute value - must be positive. + */ + public void notifyHorizontalEdgeReached(int startX, int finalX, int overX) { + mScrollerX.notifyEdgeReached(startX, finalX, overX); + } + + /** + * Notify the scroller that we've reached a vertical boundary. + * Normally the information to handle this will already be known + * when the animation is started, such as in a call to one of the + * fling functions. However there are cases where this cannot be known + * in advance. This function will animate a parabolic motion from + * startY to finalY. + * + * @param startY Starting/current Y position + * @param finalY Desired final Y position + * @param overY Magnitude of overscroll allowed. This should be the maximum + * desired distance from finalY. Absolute value - must be positive. + */ + public void notifyVerticalEdgeReached(int startY, int finalY, int overY) { + mScrollerY.notifyEdgeReached(startY, finalY, overY); + } + + /** + * Returns whether the current Scroller is currently returning to a valid position. + * Valid bounds were provided by the + * {@link #fling(int, int, int, int, int, int, int, int, int, int)} method. + * + * One should check this value before calling + * {@link #startScroll(int, int, int, int)} as the interpolation currently in progress + * to restore a valid position will then be stopped. The caller has to take into account + * the fact that the started scroll will start from an overscrolled position. + * + * @return true when the current position is overscrolled and in the process of + * interpolating back to a valid value. + */ + public boolean isOverScrolled() { + return ((!mScrollerX.mFinished && + mScrollerX.mState != SplineOverScroller.SPLINE) || + (!mScrollerY.mFinished && + mScrollerY.mState != SplineOverScroller.SPLINE)); + } + + /** + * Stops the animation. Contrary to {@link #forceFinished(boolean)}, + * aborting the animating causes the scroller to move to the final x and y + * positions. + * + * @see #forceFinished(boolean) + */ + public void abortAnimation() { + mScrollerX.finish(); + mScrollerY.finish(); + } + + /** + * Returns the time elapsed since the beginning of the scrolling. + * + * @return The elapsed time in milliseconds. + * + * @hide + */ + public int timePassed() { + final long time = AnimationUtils.currentAnimationTimeMillis(); + final long startTime = Math.min(mScrollerX.mStartTime, mScrollerY.mStartTime); + return (int) (time - startTime); + } + + /** + * @hide + */ + public boolean isScrollingInDirection(float xvel, float yvel) { + final int dx = mScrollerX.mFinal - mScrollerX.mStart; + final int dy = mScrollerY.mFinal - mScrollerY.mStart; + return !isFinished() && Math.signum(xvel) == Math.signum(dx) && + Math.signum(yvel) == Math.signum(dy); + } + + static class SplineOverScroller { + // Initial position + private int mStart; + + // Current position + private int mCurrentPosition; + + // Final position + private int mFinal; + + // Initial velocity + private int mVelocity; + + // Current velocity + private float mCurrVelocity; + + // Constant current deceleration + private float mDeceleration; + + // Animation starting time, in system milliseconds + private long mStartTime; + + // Animation duration, in milliseconds + private int mDuration; + + // Duration to complete spline component of animation + private int mSplineDuration; + + // Distance to travel along spline animation + private int mSplineDistance; + + // Whether the animation is currently in progress + private boolean mFinished; + + // The allowed overshot distance before boundary is reached. + private int mOver; + + // Fling friction + private float mFlingFriction = ViewConfiguration.getScrollFriction(); + + // Current state of the animation. + private int mState = SPLINE; + + // Constant gravity value, used in the deceleration phase. + private static final float GRAVITY = 2000.0f; + + // A context-specific coefficient adjusted to physical values. + private float mPhysicalCoeff; + + private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9)); + private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1) + private static final float START_TENSION = 0.5f; + private static final float END_TENSION = 1.0f; + private static final float P1 = START_TENSION * INFLEXION; + private static final float P2 = 1.0f - END_TENSION * (1.0f - INFLEXION); + + private static final int NB_SAMPLES = 100; + private static final float[] SPLINE_POSITION = new float[NB_SAMPLES + 1]; + private static final float[] SPLINE_TIME = new float[NB_SAMPLES + 1]; + + private static final int SPLINE = 0; + private static final int CUBIC = 1; + private static final int BALLISTIC = 2; + + static { + float x_min = 0.0f; + float y_min = 0.0f; + for (int i = 0; i < NB_SAMPLES; i++) { + final float alpha = (float) i / NB_SAMPLES; + + float x_max = 1.0f; + float x, tx, coef; + while (true) { + x = x_min + (x_max - x_min) / 2.0f; + coef = 3.0f * x * (1.0f - x); + tx = coef * ((1.0f - x) * P1 + x * P2) + x * x * x; + if (Math.abs(tx - alpha) < 1E-5) break; + if (tx > alpha) x_max = x; + else x_min = x; + } + SPLINE_POSITION[i] = coef * ((1.0f - x) * START_TENSION + x) + x * x * x; + + float y_max = 1.0f; + float y, dy; + while (true) { + y = y_min + (y_max - y_min) / 2.0f; + coef = 3.0f * y * (1.0f - y); + dy = coef * ((1.0f - y) * START_TENSION + y) + y * y * y; + if (Math.abs(dy - alpha) < 1E-5) break; + if (dy > alpha) y_max = y; + else y_min = y; + } + SPLINE_TIME[i] = coef * ((1.0f - y) * P1 + y * P2) + y * y * y; + } + SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0f; + } + + void setFriction(float friction) { + mFlingFriction = friction; + } + + SplineOverScroller(Context context) { + mFinished = true; + final float ppi = context.getResources().getDisplayMetrics().density * 160.0f; + mPhysicalCoeff = SensorManager.GRAVITY_EARTH // g (m/s^2) + * 39.37f // inch/meter + * ppi + * 0.84f; // look and feel tuning + } + + void updateScroll(float q) { + mCurrentPosition = mStart + Math.round(q * (mFinal - mStart)); + } + + /* + * Get a signed deceleration that will reduce the velocity. + */ + static private float getDeceleration(int velocity) { + return velocity > 0 ? -GRAVITY : GRAVITY; + } + + /* + * Modifies mDuration to the duration it takes to get from start to newFinal using the + * spline interpolation. The previous duration was needed to get to oldFinal. + */ + private void adjustDuration(int start, int oldFinal, int newFinal) { + final int oldDistance = oldFinal - start; + final int newDistance = newFinal - start; + final float x = Math.abs((float) newDistance / oldDistance); + final int index = (int) (NB_SAMPLES * x); + if (index < NB_SAMPLES) { + final float x_inf = (float) index / NB_SAMPLES; + final float x_sup = (float) (index + 1) / NB_SAMPLES; + final float t_inf = SPLINE_TIME[index]; + final float t_sup = SPLINE_TIME[index + 1]; + final float timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf); + mDuration *= timeCoef; + } + } + + void startScroll(int start, int distance, int duration) { + mFinished = false; + + mStart = start; + mFinal = start + distance; + + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mDuration = duration; + + // Unused + mDeceleration = 0.0f; + mVelocity = 0; + } + + void finish() { + mCurrentPosition = mFinal; + // Not reset since WebView relies on this value for fast fling. + // TODO: restore when WebView uses the fast fling implemented in this class. + // mCurrVelocity = 0.0f; + mFinished = true; + } + + void setFinalPosition(int position) { + mFinal = position; + mFinished = false; + } + + void extendDuration(int extend) { + final long time = AnimationUtils.currentAnimationTimeMillis(); + final int elapsedTime = (int) (time - mStartTime); + mDuration = elapsedTime + extend; + mFinished = false; + } + + boolean springback(int start, int min, int max) { + mFinished = true; + + mStart = mFinal = start; + mVelocity = 0; + + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mDuration = 0; + + if (start < min) { + startSpringback(start, min, 0); + } else if (start > max) { + startSpringback(start, max, 0); + } + + return !mFinished; + } + + private void startSpringback(int start, int end, int velocity) { + // mStartTime has been set + mFinished = false; + mState = CUBIC; + mStart = start; + mFinal = end; + final int delta = start - end; + mDeceleration = getDeceleration(delta); + // TODO take velocity into account + mVelocity = -delta; // only sign is used + mOver = Math.abs(delta); + mDuration = (int) (1000.0 * Math.sqrt(-2.0 * delta / mDeceleration)); + } + + void fling(int start, int velocity, int min, int max, int over) { + mOver = over; + mFinished = false; + mCurrVelocity = mVelocity = velocity; + mDuration = mSplineDuration = 0; + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mCurrentPosition = mStart = start; + + if (start > max || start < min) { + startAfterEdge(start, min, max, velocity); + return; + } + + mState = SPLINE; + double totalDistance = 0.0; + + if (velocity != 0) { + mDuration = mSplineDuration = getSplineFlingDuration(velocity); + totalDistance = getSplineFlingDistance(velocity); + } + + mSplineDistance = (int) (totalDistance * Math.signum(velocity)); + mFinal = start + mSplineDistance; + + // Clamp to a valid final position + if (mFinal < min) { + adjustDuration(mStart, mFinal, min); + mFinal = min; + } + + if (mFinal > max) { + adjustDuration(mStart, mFinal, max); + mFinal = max; + } + } + + private double getSplineDeceleration(int velocity) { + return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff)); + } + + private double getSplineFlingDistance(int velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l); + } + + /* Returns the duration, expressed in milliseconds */ + private int getSplineFlingDuration(int velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return (int) (1000.0 * Math.exp(l / decelMinusOne)); + } + + private void fitOnBounceCurve(int start, int end, int velocity) { + // Simulate a bounce that started from edge + final float durationToApex = - velocity / mDeceleration; + final float distanceToApex = velocity * velocity / 2.0f / Math.abs(mDeceleration); + final float distanceToEdge = Math.abs(end - start); + final float totalDuration = (float) Math.sqrt( + 2.0 * (distanceToApex + distanceToEdge) / Math.abs(mDeceleration)); + mStartTime -= (int) (1000.0f * (totalDuration - durationToApex)); + mStart = end; + mVelocity = (int) (- mDeceleration * totalDuration); + } + + private void startBounceAfterEdge(int start, int end, int velocity) { + mDeceleration = getDeceleration(velocity == 0 ? start - end : velocity); + fitOnBounceCurve(start, end, velocity); + onEdgeReached(); + } + + private void startAfterEdge(int start, int min, int max, int velocity) { + if (start > min && start < max) { + mFinished = true; + return; + } + final boolean positive = start > max; + final int edge = positive ? max : min; + final int overDistance = start - edge; + boolean keepIncreasing = overDistance * velocity >= 0; + if (keepIncreasing) { + // Will result in a bounce or a to_boundary depending on velocity. + startBounceAfterEdge(start, edge, velocity); + } else { + final double totalDistance = getSplineFlingDistance(velocity); + if (totalDistance > Math.abs(overDistance)) { + fling(start, velocity, positive ? min : start, positive ? start : max, mOver); + } else { + startSpringback(start, edge, velocity); + } + } + } + + void notifyEdgeReached(int start, int end, int over) { + // mState is used to detect successive notifications + if (mState == SPLINE) { + mOver = over; + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + // We were in fling/scroll mode before: current velocity is such that distance to + // edge is increasing. This ensures that startAfterEdge will not start a new fling. + startAfterEdge(start, end, end, (int) mCurrVelocity); + } + } + + private void onEdgeReached() { + // mStart, mVelocity and mStartTime were adjusted to their values when edge was reached. + float distance = mVelocity * mVelocity / (2.0f * Math.abs(mDeceleration)); + final float sign = Math.signum(mVelocity); + + if (distance > mOver) { + // Default deceleration is not sufficient to slow us down before boundary + mDeceleration = - sign * mVelocity * mVelocity / (2.0f * mOver); + distance = mOver; + } + + mOver = (int) distance; + mState = BALLISTIC; + mFinal = mStart + (int) (mVelocity > 0 ? distance : -distance); + mDuration = - (int) (1000.0f * mVelocity / mDeceleration); + } + + boolean continueWhenFinished() { + switch (mState) { + case SPLINE: + // Duration from start to null velocity + if (mDuration < mSplineDuration) { + // If the animation was clamped, we reached the edge + mStart = mFinal; + // TODO Better compute speed when edge was reached + mVelocity = (int) mCurrVelocity; + mDeceleration = getDeceleration(mVelocity); + mStartTime += mDuration; + onEdgeReached(); + } else { + // Normal stop, no need to continue + return false; + } + break; + case BALLISTIC: + mStartTime += mDuration; + startSpringback(mFinal, mStart, 0); + break; + case CUBIC: + return false; + } + + update(); + return true; + } + + /* + * Update the current position and velocity for current time. Returns + * true if update has been done and false if animation duration has been + * reached. + */ + boolean update() { + final long time = AnimationUtils.currentAnimationTimeMillis(); + final long currentTime = time - mStartTime; + + if (currentTime > mDuration) { + return false; + } + + double distance = 0.0; + switch (mState) { + case SPLINE: { + final float t = (float) currentTime / mSplineDuration; + final int index = (int) (NB_SAMPLES * t); + float distanceCoef = 1.f; + float velocityCoef = 0.f; + if (index < NB_SAMPLES) { + final float t_inf = (float) index / NB_SAMPLES; + final float t_sup = (float) (index + 1) / NB_SAMPLES; + final float d_inf = SPLINE_POSITION[index]; + final float d_sup = SPLINE_POSITION[index + 1]; + velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); + distanceCoef = d_inf + (t - t_inf) * velocityCoef; + } + + distance = distanceCoef * mSplineDistance; + mCurrVelocity = velocityCoef * mSplineDistance / mSplineDuration * 1000.0f; + break; + } + + case BALLISTIC: { + final float t = currentTime / 1000.0f; + mCurrVelocity = mVelocity + mDeceleration * t; + distance = mVelocity * t + mDeceleration * t * t / 2.0f; + break; + } + + case CUBIC: { + final float t = (float) (currentTime) / mDuration; + final float t2 = t * t; + final float sign = Math.signum(mVelocity); + distance = sign * mOver * (3.0f * t2 - 2.0f * t * t2); + mCurrVelocity = sign * mOver * 6.0f * (- t + t2); + break; + } + } + + mCurrentPosition = mStart + (int) Math.round(distance); + + return true; + } + } +} + diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/Scroller.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/Scroller.java new file mode 100644 index 0000000..061d347 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/Scroller.java @@ -0,0 +1,586 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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. + */ + +package com.lechange.demo.localvideo.timeshaftbar; + +import android.content.Context; +import android.hardware.SensorManager; +import android.os.Build; +import android.view.ViewConfiguration; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; + + +/** + *

    This class encapsulates scrolling. You can use scrollers ({@link Scroller} + * or {@link OverScroller}) to collect the data you need to produce a scrolling + * animation—for example, in response to a fling gesture. Scrollers track + * scroll offsets for you over time, but they don't automatically apply those + * positions to your view. It's your responsibility to get and apply new + * coordinates at a rate that will make the scrolling animation look smooth.

    + * + *

    Here is a simple example:

    + * + *
     private Scroller mScroller = new Scroller(context);
    + * ...
    + * public void zoomIn() {
    + *     // Revert any animation currently in progress
    + *     mScroller.forceFinished(true);
    + *     // Start scrolling by providing a starting point and
    + *     // the distance to travel
    + *     mScroller.startScroll(0, 0, 100, 0);
    + *     // Invalidate to request a redraw
    + *     invalidate();
    + * }
    + * + *

    To track the changing positions of the x/y coordinates, use + * {@link #computeScrollOffset}. The method returns a boolean to indicate + * whether the scroller is finished. If it isn't, it means that a fling or + * programmatic pan operation is still in progress. You can use this method to + * find the current offsets of the x and y coordinates, for example:

    + * + *
    if (mScroller.computeScrollOffset()) {
    + *     // Get current x and y positions
    + *     int currX = mScroller.getCurrX();
    + *     int currY = mScroller.getCurrY();
    + *    ...
    + * }
    + */ +public class Scroller { + private int mMode; + + private int mStartX; + private int mStartY; + private int mFinalX; + private int mFinalY; + + private int mMinX; + private int mMaxX; + private int mMinY; + private int mMaxY; + + private int mCurrX; + private int mCurrY; + private long mStartTime; + private int mDuration; + private float mDurationReciprocal; + private float mDeltaX; + private float mDeltaY; + private boolean mFinished; + private Interpolator mInterpolator; + private boolean mFlywheel; + + private float mVelocity; + private float mCurrVelocity; + private int mDistance; + + private float mFlingFriction = ViewConfiguration.getScrollFriction(); + + private static final int DEFAULT_DURATION = 250; + private static final int SCROLL_MODE = 0; + private static final int FLING_MODE = 1; + + private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9)); + private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1) + private static final float START_TENSION = 0.5f; + private static final float END_TENSION = 1.0f; + private static final float P1 = START_TENSION * INFLEXION; + private static final float P2 = 1.0f - END_TENSION * (1.0f - INFLEXION); + + private static final int NB_SAMPLES = 100; + private static final float[] SPLINE_POSITION = new float[NB_SAMPLES + 1]; + private static final float[] SPLINE_TIME = new float[NB_SAMPLES + 1]; + + private float mDeceleration; + private final float mPpi; + + // A context-specific coefficient adjusted to physical values. + private float mPhysicalCoeff; + + static { + float x_min = 0.0f; + float y_min = 0.0f; + for (int i = 0; i < NB_SAMPLES; i++) { + final float alpha = (float) i / NB_SAMPLES; + + float x_max = 1.0f; + float x, tx, coef; + while (true) { + x = x_min + (x_max - x_min) / 2.0f; + coef = 3.0f * x * (1.0f - x); + tx = coef * ((1.0f - x) * P1 + x * P2) + x * x * x; + if (Math.abs(tx - alpha) < 1E-5) break; + if (tx > alpha) x_max = x; + else x_min = x; + } + SPLINE_POSITION[i] = coef * ((1.0f - x) * START_TENSION + x) + x * x * x; + + float y_max = 1.0f; + float y, dy; + while (true) { + y = y_min + (y_max - y_min) / 2.0f; + coef = 3.0f * y * (1.0f - y); + dy = coef * ((1.0f - y) * START_TENSION + y) + y * y * y; + if (Math.abs(dy - alpha) < 1E-5) break; + if (dy > alpha) y_max = y; + else y_min = y; + } + SPLINE_TIME[i] = coef * ((1.0f - y) * P1 + y * P2) + y * y * y; + } + SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0f; + + // This controls the viscous fluid effect (how much of it) + sViscousFluidScale = 8.0f; + // must be set to 1.0 (used in viscousFluid()) + sViscousFluidNormalize = 1.0f; + sViscousFluidNormalize = 1.0f / viscousFluid(1.0f); + + } + + private static float sViscousFluidScale; + private static float sViscousFluidNormalize; + + /** + * Create a Scroller with the default duration and interpolator. + */ + public Scroller(Context context) { + this(context, null); + } + + /** + * Create a Scroller with the specified interpolator. If the interpolator is + * null, the default (viscous) interpolator will be used. "Flywheel" behavior will + * be in effect for apps targeting Honeycomb or newer. + */ + public Scroller(Context context, Interpolator interpolator) { + this(context, interpolator, + context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB); + } + + /** + * Create a Scroller with the specified interpolator. If the interpolator is + * null, the default (viscous) interpolator will be used. Specify whether or + * not to support progressive "flywheel" behavior in flinging. + */ + public Scroller(Context context, Interpolator interpolator, boolean flywheel) { + mFinished = true; + mInterpolator = interpolator; + mPpi = context.getResources().getDisplayMetrics().density * 160.0f; + mDeceleration = computeDeceleration(ViewConfiguration.getScrollFriction()); + mFlywheel = flywheel; + + mPhysicalCoeff = computeDeceleration(0.84f); // look and feel tuning + } + + /** + * The amount of friction applied to flings. The default value + * is {@link ViewConfiguration#getScrollFriction}. + * + * @param friction A scalar dimension-less value representing the coefficient of + * friction. + */ + public final void setFriction(float friction) { + mDeceleration = computeDeceleration(friction); + mFlingFriction = friction; + } + + private float computeDeceleration(float friction) { + return SensorManager.GRAVITY_EARTH // g (m/s^2) + * 39.37f // inch/meter + * mPpi // pixels per inch + * friction; + } + + /** + * + * Returns whether the scroller has finished scrolling. + * + * @return True if the scroller has finished scrolling, false otherwise. + */ + public final boolean isFinished() { + return mFinished; + } + + /** + * Force the finished field to a particular value. + * + * @param finished The new finished value. + */ + public final void forceFinished(boolean finished) { + mFinished = finished; + } + + /** + * Returns how long the scroll event will take, in milliseconds. + * + * @return The duration of the scroll in milliseconds. + */ + public final int getDuration() { + return mDuration; + } + + /** + * Returns the current X offset in the scroll. + * + * @return The new X offset as an absolute distance from the origin. + */ + public final int getCurrX() { + return mCurrX; + } + + /** + * Returns the current Y offset in the scroll. + * + * @return The new Y offset as an absolute distance from the origin. + */ + public final int getCurrY() { + return mCurrY; + } + + /** + * Returns the current velocity. + * + * @return The original velocity less the deceleration. Result may be + * negative. + */ + public float getCurrVelocity() { + return mMode == FLING_MODE ? + mCurrVelocity : mVelocity - mDeceleration * timePassed() / 2000.0f; + } + + /** + * Returns the start X offset in the scroll. + * + * @return The start X offset as an absolute distance from the origin. + */ + public final int getStartX() { + return mStartX; + } + + /** + * Returns the start Y offset in the scroll. + * + * @return The start Y offset as an absolute distance from the origin. + */ + public final int getStartY() { + return mStartY; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final X offset as an absolute distance from the origin. + */ + public final int getFinalX() { + return mFinalX; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final Y offset as an absolute distance from the origin. + */ + public final int getFinalY() { + return mFinalY; + } + + /** + * Call this when you want to know the new location. If it returns true, + * the animation is not yet finished. + */ + public boolean computeScrollOffset() { + if (mFinished) { + return false; + } + + int timePassed = (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime); + + if (timePassed < mDuration) { + switch (mMode) { + case SCROLL_MODE: + float x = timePassed * mDurationReciprocal; + + if (mInterpolator == null) + x = viscousFluid(x); + else + x = mInterpolator.getInterpolation(x); + + mCurrX = mStartX + Math.round(x * mDeltaX); + mCurrY = mStartY + Math.round(x * mDeltaY); + break; + case FLING_MODE: + final float t = (float) timePassed / mDuration; + final int index = (int) (NB_SAMPLES * t); + float distanceCoef = 1.f; + float velocityCoef = 0.f; + if (index < NB_SAMPLES) { + final float t_inf = (float) index / NB_SAMPLES; + final float t_sup = (float) (index + 1) / NB_SAMPLES; + final float d_inf = SPLINE_POSITION[index]; + final float d_sup = SPLINE_POSITION[index + 1]; + velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); + distanceCoef = d_inf + (t - t_inf) * velocityCoef; + } + + mCurrVelocity = velocityCoef * mDistance / mDuration * 1000.0f; + + mCurrX = mStartX + Math.round(distanceCoef * (mFinalX - mStartX)); + // Pin to mMinX <= mCurrX <= mMaxX + mCurrX = Math.min(mCurrX, mMaxX); + mCurrX = Math.max(mCurrX, mMinX); + + mCurrY = mStartY + Math.round(distanceCoef * (mFinalY - mStartY)); + // Pin to mMinY <= mCurrY <= mMaxY + mCurrY = Math.min(mCurrY, mMaxY); + mCurrY = Math.max(mCurrY, mMinY); + + if (mCurrX == mFinalX && mCurrY == mFinalY) { + mFinished = true; + } + + break; + } + } + else { + mCurrX = mFinalX; + mCurrY = mFinalY; + mFinished = true; + } + return true; + } + + /** + * Start scrolling by providing a starting point and the distance to travel. + * The scroll will use the default value of 250 milliseconds for the + * duration. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + */ + public void startScroll(int startX, int startY, int dx, int dy) { + startScroll(startX, startY, dx, dy, DEFAULT_DURATION); + } + + /** + * Start scrolling by providing a starting point, the distance to travel, + * and the duration of the scroll. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + * @param duration Duration of the scroll in milliseconds. + */ + public void startScroll(int startX, int startY, int dx, int dy, int duration) { + mMode = SCROLL_MODE; + mFinished = false; + mDuration = duration; + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mStartX = startX; + mStartY = startY; + mFinalX = startX + dx; + mFinalY = startY + dy; + mDeltaX = dx; + mDeltaY = dy; + mDurationReciprocal = 1.0f / (float) mDuration; + } + + /** + * Start scrolling based on a fling gesture. The distance travelled will + * depend on the initial velocity of the fling. + * + * @param startX Starting point of the scroll (X) + * @param startY Starting point of the scroll (Y) + * @param velocityX Initial velocity of the fling (X) measured in pixels per + * second. + * @param velocityY Initial velocity of the fling (Y) measured in pixels per + * second + * @param minX Minimum X value. The scroller will not scroll past this + * point. + * @param maxX Maximum X value. The scroller will not scroll past this + * point. + * @param minY Minimum Y value. The scroller will not scroll past this + * point. + * @param maxY Maximum Y value. The scroller will not scroll past this + * point. + */ + public void fling(int startX, int startY, int velocityX, int velocityY, + int minX, int maxX, int minY, int maxY) { + // Continue a scroll or fling in progress + if (mFlywheel && !mFinished) { + float oldVel = getCurrVelocity(); + + float dx = (float) (mFinalX - mStartX); + float dy = (float) (mFinalY - mStartY); + float hyp = (float) Math.sqrt(dx * dx + dy * dy); + + float ndx = dx / hyp; + float ndy = dy / hyp; + + float oldVelocityX = ndx * oldVel; + float oldVelocityY = ndy * oldVel; + if (Math.signum(velocityX) == Math.signum(oldVelocityX) && + Math.signum(velocityY) == Math.signum(oldVelocityY)) { + velocityX += oldVelocityX; + velocityY += oldVelocityY; + } + } + + mMode = FLING_MODE; + mFinished = false; + + float velocity = (float) Math.sqrt(velocityX * velocityX + velocityY * velocityY); + + mVelocity = velocity; + mDuration = getSplineFlingDuration(velocity); + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mStartX = startX; + mStartY = startY; + + float coeffX = velocity == 0 ? 1.0f : velocityX / velocity; + float coeffY = velocity == 0 ? 1.0f : velocityY / velocity; + + double totalDistance = getSplineFlingDistance(velocity); + mDistance = (int) (totalDistance * Math.signum(velocity)); + + mMinX = minX; + mMaxX = maxX; + mMinY = minY; + mMaxY = maxY; + + mFinalX = startX + (int) Math.round(totalDistance * coeffX); + // Pin to mMinX <= mFinalX <= mMaxX + mFinalX = Math.min(mFinalX, mMaxX); + mFinalX = Math.max(mFinalX, mMinX); + + mFinalY = startY + (int) Math.round(totalDistance * coeffY); + // Pin to mMinY <= mFinalY <= mMaxY + mFinalY = Math.min(mFinalY, mMaxY); + mFinalY = Math.max(mFinalY, mMinY); + } + + private double getSplineDeceleration(float velocity) { + return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff)); + } + + private int getSplineFlingDuration(float velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return (int) (1000.0 * Math.exp(l / decelMinusOne)); + } + + private double getSplineFlingDistance(float velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l); + } + + static float viscousFluid(float x) + { + x *= sViscousFluidScale; + if (x < 1.0f) { + x -= (1.0f - (float) Math.exp(-x)); + } else { + float start = 0.36787944117f; // 1/e == exp(-1) + x = 1.0f - (float) Math.exp(1.0f - x); + x = start + x * (1.0f - start); + } + x *= sViscousFluidNormalize; + return x; + } + + /** + * Stops the animation. Contrary to {@link #forceFinished(boolean)}, + * aborting the animating cause the scroller to move to the final x and y + * position + * + * @see #forceFinished(boolean) + */ + public void abortAnimation() { + mCurrX = mFinalX; + mCurrY = mFinalY; + mFinished = true; + } + + /** + * Extend the scroll animation. This allows a running animation to scroll + * further and longer, when used with {@link #setFinalX(int)} or {@link #setFinalY(int)}. + * + * @param extend Additional time to scroll in milliseconds. + * @see #setFinalX(int) + * @see #setFinalY(int) + */ + public void extendDuration(int extend) { + int passed = timePassed(); + mDuration = passed + extend; + mDurationReciprocal = 1.0f / mDuration; + mFinished = false; + } + + /** + * Returns the time elapsed since the beginning of the scrolling. + * + * @return The elapsed time in milliseconds. + */ + public int timePassed() { + return (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime); + } + + /** + * Sets the final position (X) for this scroller. + * + * @param newX The new X offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalY(int) + */ + public void setFinalX(int newX) { + mFinalX = newX; + mDeltaX = mFinalX - mStartX; + mFinished = false; + } + + /** + * Sets the final position (Y) for this scroller. + * + * @param newY The new Y offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalX(int) + */ + public void setFinalY(int newY) { + mFinalY = newY; + mDeltaY = mFinalY - mStartY; + mFinished = false; + } + + /** + * @hide + */ + public boolean isScrollingInDirection(float xvel, float yvel) { + return !mFinished && Math.signum(xvel) == Math.signum(mFinalX - mStartX) && + Math.signum(yvel) == Math.signum(mFinalY - mStartY); + } +} + diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimebarTick.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimebarTick.java new file mode 100644 index 0000000..47b2097 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimebarTick.java @@ -0,0 +1,103 @@ +/* + * This source code is licensed under the MIT-style license found in the + * LICENSE file in the root directory of this source tree. + */ +package com.lechange.demo.localvideo.timeshaftbar; + +/** + * 时间轴显示的等级 + */ +public class TimebarTick { + /** + * 时间轴总长度 + */ + private long viewLength; + + /** + * 时间轴未缩放时的标准长度 + */ + private long standardViewLength; + + /** + * 间隔距离 + */ + private float intervel; + + + /** + * 时间轴未缩放时的屏幕显示的时间(秒) + */ + private int totalSecondsInOneScreen; + + /** + * 时间轴中大刻度之间的时间间隔(秒) + */ + private int maxTickInSecond; + + /** + * 时间轴中小刻度之间的时间间隔(秒) + */ + private int minTickInSecond; + + /** + * 刻度显示的格式 + */ + private String dataPattern; + + public long getViewLength() { + return viewLength; + } + + public void setViewLength(long viewLength) { + this.viewLength = viewLength; + } + + public int getTotalSecondsInOneScreen() { + return totalSecondsInOneScreen; + } + + public void setTotalSecondsInOneScreen(int totalSecondsInOneScreen) { + this.totalSecondsInOneScreen = totalSecondsInOneScreen; + } + + public int getMaxTickInSecond() { + return maxTickInSecond; + } + + public void setMaxTickInSecond(int maxTickInSecond) { + this.maxTickInSecond = maxTickInSecond; + } + + public int getMinTickInSecond() { + return minTickInSecond; + } + + public void setMinTickInSecond(int minTickInSecond) { + this.minTickInSecond = minTickInSecond; + } + + public String getDataPattern() { + return dataPattern; + } + + public void setDataPattern(String dataPattern) { + this.dataPattern = dataPattern; + } + + public long getStandardViewLength() { + return standardViewLength; + } + + public void setStandardViewLength(long standardViewLength) { + this.standardViewLength = standardViewLength; + this.viewLength = this.standardViewLength; + } + + public void setIntervel(float intervel) { + this.intervel = intervel; + } + + public float getIntervel() { + return intervel; + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftBar.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftBar.java new file mode 100644 index 0000000..278d776 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftBar.java @@ -0,0 +1,731 @@ +package com.lechange.demo.localvideo.timeshaftbar; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +/** + * 项目名称:EZUIKitDemo + * 类描述:回放时间轴 + * 创建人:dingwei3 + * 创建时间:2017/4/12 14:03 + * 修改人:dingwei3 + * 修改时间:2017/4/12 14:03 + * 修改备注: + */ +public class TimerShaftBar extends View implements TimerShaftInterface { + private static final String TAG = "TimerShaftBar"; + /** + * Touch默认模式 + */ + private final static int TOUCH_MODE_NONE = 0; + /** + * 滑动事件 + */ + private final static int TOUCH_MODE_SCROLLER = 1; + /** + * 缩放事件 + */ + private final static int TOUCH_MODE_SCALE = 2; + /** + * 滑动FlING事件 + */ + private final static int TOUCH_MODE_SCROLLER_FlING = 3; + private Context mContext; + /** + * 手势事件处理 + */ + private GestureDetector mGestureDetector; + /** + * 缩放手势事件处理 + */ + private ScaleGestureDetector mScaleGestureDetector; + /** + * 手势事件模式 + */ + private int mTouchMode = TOUCH_MODE_NONE; + + + /** + * 滑动处理 + */ + private LayoutController mLayoutController; + /** + * 是否触摸屏幕 + */ + private boolean isTouchScreent = false; + /** + * 组件屏幕上现实的宽度 + */ + private int mWidth; + /** + * 组件屏幕上现实的高度 + */ + private int mHeight; + /** + * + */ + private TimebarTick mTimebarTick; + + /** + * 绘制时间轴起始时间 + */ + private Calendar mStartCalendar; + /** + * 绘制时间轴结束时间 + */ + private Calendar mEndCalendar; + + /** + * 绘制时间轴总时长(秒) + */ + private long TOTOAL_TIME = 24 * 60 * 60L; + /** + * 时间刻度画笔 + */ + private Paint mTextPaint = new Paint(); + + /** + * 当前时间刻度画笔 + */ + private Paint mCurrentTimeLinePaint = new Paint(); + /** + * 时间区域画笔 + */ + private Paint mTimeRegionPaint = new Paint(); + + /** + * 时间轴区域背景画笔 + */ + private Paint mBackParint = new Paint(); + /** + * 当前时间画笔 + */ + private Paint mCurrentTimePaint = new Paint(); + /** + * 时间轴与上边距间距 + */ + private int mTop; + + /** + * 播放时间显示区域高度 + */ + private int mCurrentTimeTextHeight; + + private Paint.FontMetrics mFontMetrics; + + private ArrayList mTimebarTicks = new ArrayList(); + private ArrayList mTimeShaftItems = new ArrayList<>(); + + /** + * 对比起始位置的时间(秒) + */ + private int mCurrentSecond; + + /** + * 组件当前位置 + */ + private int mCurrentPosition; + + /** + * 单位距离(每秒) + */ + private float mPixelsPerSecond = 0; + + /** + * 当前屏幕位置的起始秒数 + */ + private long mStartSecondOnScreen; + /** + * 当前屏幕位置的结束秒数 + */ + private long mEndSecondOnScreen; + + private TimerShaftBarListener mTimerShaftBarListener; + + /** + * 大刻度绘线绘制高度 + */ + private int mMaxScaleHeight; + + /** + * 中刻度绘线绘制高度 + */ + private int mMidScaleHeight; + + /** + * 小刻度绘线绘制高度 + */ + private int mMinScaleHeight; + + /** + * 刻度显示字体大小 + */ + private int mScaleTextSize = 10; + + /** + * 当前时间显示字体大小 + */ + private int mCurrentScaleTextSize = 10; + + /** + * 刻度显示字体高度 + */ + private int mScaleTextHeight; + + /** + * 绘制包含时间区域的颜色 + */ + private int mRegionCloudBackColor = 0xFFFF0606; + + /** + * 绘制包含时间区域的颜色 + */ + private int mRegionLocalBackColor = 0xFFFF0606; + + + /** + * 刻度已经时间显示字体颜色 + */ + private int mTextColor = 0xFF888888; + + /** + * 绘制时间轴区域的颜色 + */ + private int mBackColor = 0xFFF5F5F5; + + /** + * 绘制当前时间轴区域的颜色 + */ + private int mCurrentTimeLineColor = 0xFFF7AC00; + + /** + * 当前时间calendar + */ + private Calendar mPositonCalendar; + + /** + * 更具播放器进度显示当前位置 + */ + private boolean isRefereshPlayTimeWithPlayer = false; + + + public TimerShaftBar(Context context) { + super(context); + mContext = context; + init(); + } + + + public TimerShaftBar(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + mContext = context; + init(); + } + + private static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 设置时间轴事件监听 + * + * @param timerShaftBarListener + */ + @Override + public void setTimerShaftLayoutListener(TimerShaftBarListener timerShaftBarListener) { + mTimerShaftBarListener = timerShaftBarListener; + } + + /** + * 设置绘制区域 + * + * @param timeShaftItems 绘制区域item + */ + public void setTimeShaftItems(ArrayList timeShaftItems) { + /*if (mTimeShaftItems.size() != 0) { + mTimeShaftItems.clear(); + }*/ + mTimeShaftItems = timeShaftItems; + if (mTimeShaftItems != null && mTimeShaftItems.size() > 0) { + Calendar calendar = mTimeShaftItems.get(0).getStartCalendar(); + mStartCalendar = (Calendar) calendar.clone(); + + calendar = mTimeShaftItems.get(mTimeShaftItems.size() - 1).getEndCalendar(); + mEndCalendar = (Calendar) calendar.clone(); + mEndCalendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1); + initCalendar(); + } + initTimebarTicks(); + } + + /** + * 设置时间轴是否根据接受外部播放进度,当播放成功是需要调用设置用来刷新播放时间 + */ + @Override + public void setRefereshPlayTimeWithPlayer() { + isRefereshPlayTimeWithPlayer = true; + } + + /** + * 设置播放当前时间 + * + * @param calendar + */ + @Override + public void setPlayCalendar(Calendar calendar) { + Log.i("setPlayCalendar", calendar.getTime().toString()); + if (!mLayoutController.computeScrollOffset() && !isTouchScreent && isRefereshPlayTimeWithPlayer) { + mPositonCalendar = (Calendar) calendar.clone(); + mCurrentSecond = (int) ((mPositonCalendar.getTimeInMillis() - mStartCalendar.getTimeInMillis()) / 1000); + mLayoutController.setPosition((int) (mCurrentSecond * mPixelsPerSecond)); + invalidate(); + } + } + + /** + * 初始化时间轴显示的等级 + */ + private void initTimebarTicks() { + if (mTimebarTicks.size() <= 0) { + TimebarTick timebarTick1 = new TimebarTick(); + timebarTick1.setTotalSecondsInOneScreen(24 * 60 * 60); + timebarTick1.setMaxTickInSecond(4 * 60 * 60); + timebarTick1.setMinTickInSecond(60 * 60); + timebarTick1.setDataPattern("HH:mm"); + timebarTick1.setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) timebarTick1.getTotalSecondsInOneScreen()))); + + TimebarTick timebarTick2 = new TimebarTick(); + timebarTick2.setTotalSecondsInOneScreen(18 * 60 * 60); + timebarTick2.setMaxTickInSecond(2 * 60 * 60); + timebarTick2.setMinTickInSecond(30 * 60); + timebarTick2.setDataPattern("HH:mm"); + timebarTick2.setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) timebarTick2.getTotalSecondsInOneScreen()))); + + TimebarTick timebarTick3 = new TimebarTick(); + timebarTick3.setTotalSecondsInOneScreen(8 * 60 * 60); + timebarTick3.setMaxTickInSecond(60 * 60); + timebarTick3.setMinTickInSecond(12 * 60); + timebarTick3.setDataPattern("HH:mm"); + timebarTick3.setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) timebarTick3.getTotalSecondsInOneScreen()))); + + TimebarTick timebarTick4 = new TimebarTick(); + timebarTick4.setTotalSecondsInOneScreen(3 * 30 * 60); + timebarTick4.setMaxTickInSecond(10 * 60); + timebarTick4.setMinTickInSecond(2 * 60); + timebarTick4.setDataPattern("HH:mm"); + timebarTick4.setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) timebarTick4.getTotalSecondsInOneScreen()))); + + TimebarTick timebarTick5 = new TimebarTick(); + timebarTick5.setTotalSecondsInOneScreen(30 * 60); + timebarTick5.setMaxTickInSecond(10 * 60); + timebarTick5.setMinTickInSecond(2 * 60); + timebarTick5.setDataPattern("HH:mm"); + timebarTick5.setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) timebarTick5.getTotalSecondsInOneScreen()))); + + mTimebarTicks.add(timebarTick5); + mTimebarTicks.add(timebarTick4); + mTimebarTicks.add(timebarTick3); + mTimebarTicks.add(timebarTick2); + mTimebarTicks.add(timebarTick1); + } else { + for (int i = 0; i < mTimebarTicks.size(); i++) { + mTimebarTicks.get(i).setStandardViewLength(((long) ((double) mWidth * TOTOAL_TIME / (double) mTimebarTicks.get(i).getTotalSecondsInOneScreen()))); + } + } + setTimebarScaleIndex(1, 0); + + } + + private void setTimebarScaleIndex(int position, int length) { + mTimebarTick = mTimebarTicks.get(position); + if (length <= 0) { + mTimebarTick.setViewLength(mTimebarTick.getStandardViewLength()); + mLayoutController.setLayoutSize(mWidth, mHeight, (int) mTimebarTick.getViewLength()); + } else { + mTimebarTick.setViewLength(length); + mLayoutController.setLayoutSize(mWidth, mHeight, length); + } + mPixelsPerSecond = mTimebarTick.getViewLength() / (float) TOTOAL_TIME; + Log.d(TAG, "pixelsPerSecond = " + mPixelsPerSecond); + mLayoutController.setPosition((int) (mCurrentSecond * mPixelsPerSecond)); + invalidate(); + } + + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + Log.d(TAG, "onSizeChanged"); + mWidth = w; + mHeight = h; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (mWidth == 0) { + mWidth = MeasureSpec.getSize(widthMeasureSpec); + mHeight = MeasureSpec.getSize(widthMeasureSpec); + initTimebarTicks(); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + private void init() { + initCalendar(); + mMaxScaleHeight = dip2px(mContext, 12); + mMidScaleHeight = dip2px(mContext, 7); + mMinScaleHeight = dip2px(mContext, 5); + + //编辑起始时间绘制 + mTextPaint.setColor(mTextColor); + mTextPaint.setTextSize(dip2px(mContext, mScaleTextSize)); + mFontMetrics = mTextPaint.getFontMetrics();// 得到系统默认字体属性 + mScaleTextHeight = (int) (mFontMetrics.bottom - mFontMetrics.top); + + //编辑当前时间绘制 + mCurrentTimePaint.setColor(mTextColor); + mCurrentTimePaint.setTextSize(dip2px(mContext, mCurrentScaleTextSize)); + mFontMetrics = mTextPaint.getFontMetrics();// 得到系统默认字体属性 + mCurrentTimeTextHeight = (int) (mFontMetrics.bottom - mFontMetrics.top); + mTop = mCurrentTimeTextHeight + dip2px(mContext, 10); + mBackParint.setColor(mBackColor); + mCurrentTimeLinePaint = new Paint(); + mCurrentTimeLinePaint.setColor(mCurrentTimeLineColor); + mLayoutController = new LayoutController(mContext); + mScaleGestureDetector = new ScaleGestureDetector(mContext, new ScaleGestureDetector.OnScaleGestureListener() { + @Override + public boolean onScale(ScaleGestureDetector detector) { + Log.d(TAG, "onScale detector = " + detector.getScaleFactor()); + scaleTimebar(detector.getScaleFactor() * (1 + (detector.getScaleFactor() - 1) * 1.2f)); + return true; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + Log.d(TAG, "onScaleBegin detector = " + detector.getScaleFactor()); + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + Log.d(TAG, "onScaleEnd = " + detector.getScaleFactor()); + } + }); + mGestureDetector = new GestureDetector(mContext, new GestureDetector.OnGestureListener() { + @Override + public boolean onDown(MotionEvent e) { + Log.d(TAG, "GestureDetector onDown "); + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + Log.d(TAG, "GestureDetector onShowPress "); + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + Log.d(TAG, "GestureDetector onSingleTapUp "); + return true; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + Log.d(TAG, "GestureDetector onScroll "); + if (mTouchMode == TOUCH_MODE_SCROLLER) { + isRefereshPlayTimeWithPlayer = false; + mLayoutController.startScroll(Math.round(distanceX), 0, mLayoutController.getScrollLimit()); + invalidate(); + } + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + Log.d(TAG, "GestureDetector onLongPress "); + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + Log.d(TAG, "GestureDetector onFling "); + if (mTouchMode == TOUCH_MODE_SCROLLER) { + int scrollLimit = mLayoutController.getScrollLimit(); + if (scrollLimit == 0) + return false; + mLayoutController.fling((int) (-velocityX), 0, scrollLimit); + invalidate(); + } + return true; + } + }); + } + + private void initCalendar() { + if (mStartCalendar == null) { + mStartCalendar = Calendar.getInstance(); + mStartCalendar.set(Calendar.DATE, mStartCalendar.get(Calendar.DATE)); + } + if (mEndCalendar == null) { + mEndCalendar = (Calendar) mStartCalendar.clone(); + mEndCalendar.set(Calendar.DATE, mEndCalendar.get(Calendar.DATE) + 1); + } + mStartCalendar.set(Calendar.HOUR_OF_DAY, 0); + mStartCalendar.set(Calendar.MINUTE, 0); + mStartCalendar.set(Calendar.SECOND, 0); + + mEndCalendar.set(Calendar.HOUR_OF_DAY, 0); + mEndCalendar.set(Calendar.MINUTE, 0); + mEndCalendar.set(Calendar.SECOND, 0); + mPositonCalendar = (Calendar) mStartCalendar.clone(); + TOTOAL_TIME = (mEndCalendar.getTimeInMillis() - mStartCalendar.getTimeInMillis()) / 1000; + } + + @Override + protected void onDraw(Canvas canvas) { + long b = System.currentTimeMillis(); + boolean ret = mLayoutController.computeScrollOffset(); + + mCurrentPosition = mLayoutController.getPosition(); + //算开始时缩放时不重新获取当前播放时间 + // mCurrentSecond = (int) ((mCurrentPosition) * TOTOAL_TIME / mTimebarTick.getViewLength()); + if (mTouchMode == TOUCH_MODE_SCROLLER) { + mCurrentSecond = (int) (mCurrentPosition / mPixelsPerSecond); + } + drawBack(canvas); + drawScale(canvas); + drawRegionRect(canvas); + drawCurrentPositionLine(canvas); + drawCurrentTime(canvas); + Log.d(TAG, "onDraw position = " + mCurrentSecond + " computeScrollOffset = " + ret); + if (ret) { + invalidate(); + } else { + if (mTouchMode == TOUCH_MODE_SCROLLER) { + Log.d(TAG, "isTouchScreent = " + isTouchScreent); + if (!isTouchScreent) { + mTouchMode = TOUCH_MODE_NONE; + } + mPositonCalendar.setTimeInMillis(mStartCalendar.getTimeInMillis() + mCurrentSecond * 1000); + if (mTimerShaftBarListener != null) { + mTimerShaftBarListener.onTimerShaftBarPosChanged(mPositonCalendar); + } + } + if (mTouchMode == TOUCH_MODE_SCALE && !isTouchScreent) { + mTouchMode = TOUCH_MODE_NONE; + } + } + Log.d(TAG, "on draw time = " + String.valueOf(System.currentTimeMillis() - b)); + } + + /** + * 绘制当前时间 + * + * @param canvas + */ + private void drawCurrentTime(Canvas canvas) { + if (mTouchMode == TOUCH_MODE_SCROLLER || mLayoutController.computeScrollOffset()) { + mPositonCalendar.setTimeInMillis(mStartCalendar.getTimeInMillis() + mCurrentSecond * 1000); + } + String text = getTime(mPositonCalendar.getTimeInMillis(), "yyyy-MM-dd HH:mm:ss"); + canvas.drawText(text, mWidth / 2 - mCurrentTimePaint.measureText(text) / 2, mCurrentTimeTextHeight, mCurrentTimePaint); + } + + /** + * 绘制当前时间 + * k + * + * @param canvas + */ + private void drawBack(Canvas canvas) { + canvas.drawRect(new Rect(0, mTop, mWidth, getHeight()), mBackParint); + } + + /** + * 绘制标尺 + * + * @param canvas + */ + private void drawScale(Canvas canvas) { + long b = System.currentTimeMillis(); + canvas.drawLine(0, mTop, mWidth, mTop, mTextPaint); + canvas.drawLine(0, getHeight() - 1, mWidth, getHeight() - 1, mTextPaint); + + mStartSecondOnScreen = (long) ((mCurrentPosition - mLayoutController.getPaddingLeft()) / mPixelsPerSecond); + mEndSecondOnScreen = (long) (mStartSecondOnScreen + mWidth / mPixelsPerSecond); + + Log.d(TAG, "onDraw startTikeStart = " + mStartSecondOnScreen); + Log.d(TAG, "onDraw endTikeStart = " + mEndSecondOnScreen); + if (mEndSecondOnScreen > TOTOAL_TIME) { + mEndSecondOnScreen = TOTOAL_TIME; + } + for (long i = mStartSecondOnScreen - 20; i < mEndSecondOnScreen + 20; i++) { + if (i < 0 || i > TOTOAL_TIME) { + continue; + } + long startX = (long) ((i - mStartSecondOnScreen) * mPixelsPerSecond); + if (i % (60 * 60) == 0) { + canvas.drawLine(startX, mTop, startX, mTop + mMaxScaleHeight, mTextPaint); + canvas.drawLine(startX, getHeight() - mMaxScaleHeight, startX, getHeight(), mTextPaint); + } + if (i % mTimebarTick.getMaxTickInSecond() == 0) { + if (i % (60 * 60) != 0) { + canvas.drawLine(startX, mTop, startX, mTop + mMidScaleHeight, mTextPaint); + canvas.drawLine(startX, getHeight() - mMidScaleHeight, startX, getHeight(), mTextPaint); + String timeText = getTime((i * 1000l + mStartCalendar.getTimeInMillis()), mTimebarTick.getDataPattern()); + canvas.drawText(timeText, startX - mTextPaint.measureText(timeText) / 2, mTop + mMidScaleHeight + mScaleTextHeight / 2 + dip2px(mContext, 10), mTextPaint); + } else { + String timeText = getTime((i * 1000l + mStartCalendar.getTimeInMillis()), mTimebarTick.getDataPattern()); + canvas.drawText(timeText, startX - mTextPaint.measureText(timeText) / 2, mTop + mMaxScaleHeight + mScaleTextHeight / 2 + dip2px(mContext, 10), mTextPaint); + } + } else if (i % mTimebarTick.getMinTickInSecond() == 0) { + canvas.drawLine(startX, mTop, startX, mTop + mMinScaleHeight, mTextPaint); + canvas.drawLine(startX, getHeight() - mMinScaleHeight, startX, getHeight(), mTextPaint); + } + } + Log.d(TAG, "drawtime drawScale time = " + (System.currentTimeMillis() - b)); + } + + /** + * 绘制包含时间所在区域 + * + * @param canvas + */ + private void drawRegionRect(Canvas canvas) { + if (mTimeShaftItems != null) { + long b = System.currentTimeMillis(); + for (int y = 0; y < mTimeShaftItems.size(); y++) { + TimerShaftRegionItem timeShaftItem = mTimeShaftItems.get(y); + if (timeShaftItem.getEndCalendar().getTimeInMillis() - mStartCalendar.getTimeInMillis() - mStartSecondOnScreen * 1000l < -10000) { + continue; + } + if (timeShaftItem.getStartCalendar().getTimeInMillis() - mStartCalendar.getTimeInMillis() - mEndSecondOnScreen * 1000l > 10000) { + continue; + } + int startTime = (int) ((timeShaftItem.getStartCalendar().getTimeInMillis() - mStartCalendar.getTimeInMillis()) / 1000); + int endTime = (int) ((timeShaftItem.getEndCalendar().getTimeInMillis() - mStartCalendar.getTimeInMillis()) / 1000); + int startX = (int) ((startTime - mStartSecondOnScreen) * mPixelsPerSecond); + int endX = (int) ((endTime - mStartSecondOnScreen) * mPixelsPerSecond); + mTimeRegionPaint.setColor(mRegionCloudBackColor); + /*if (timeShaftItem.getRecType() == 1) { + //云存储 + mTimeRegionPaint.setColor(mRegionCloudBackColor); + } else if (timeShaftItem.getRecType() == 2) { + //本地录像 + mTimeRegionPaint.setColor(mRegionLocalBackColor); + + }*/ + canvas.drawRect(new Rect(startX, mTop, endX, getHeight()), mTimeRegionPaint); + } + Log.d(TAG, "drawtime drawRegionRect time = " + (System.currentTimeMillis() - b)); + } + } + + /** + * 绘制标示当前位置的线 + * + * @param canvas + */ + private void drawCurrentPositionLine(Canvas canvas) { + long b = System.currentTimeMillis(); + //绘制中心线 + canvas.drawRect(new Rect(mWidth / 2 - dip2px(mContext, 0.5f), mTop, mWidth / 2 + dip2px(mContext, 0.5f), getHeight()), mCurrentTimeLinePaint); + Path path = new Path(); + path.moveTo(mWidth / 2 - dip2px(mContext, 4), mTop);// 此点为多边形的起点 + path.lineTo(mWidth / 2 + dip2px(mContext, 4), mTop); + path.lineTo(mWidth / 2, dip2px(mContext, 5) + mTop); + path.close(); // 使这些点构成封闭的多边形 + canvas.drawPath(path, mCurrentTimeLinePaint); + Log.d(TAG, "drawtime drawCurrentPositionLine time = " + (System.currentTimeMillis() - b)); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + int actionType = event.getActionMasked(); + switch (actionType) { + case MotionEvent.ACTION_DOWN: + mTouchMode = TOUCH_MODE_SCROLLER; + isTouchScreent = true; + // 第一个点被按下 + // Toast.makeText(getContext(), "第一个点被按下", Toast.LENGTH_SHORT); + break; + case MotionEvent.ACTION_POINTER_DOWN: + // Toast.makeText(getContext(), "第一个点被按下", Toast.LENGTH_SHORT); + mTouchMode = TOUCH_MODE_SCALE; + isRefereshPlayTimeWithPlayer = true; + break; + case MotionEvent.ACTION_MOVE: + Log.d(TAG, "ACTION_MOVE "); + break; + case MotionEvent.ACTION_UP: + Log.d(TAG, "ACTION_UP + " + !mLayoutController.computeScrollOffset()); + isTouchScreent = false; + if (mTouchMode == TOUCH_MODE_SCALE) { + isRefereshPlayTimeWithPlayer = true; + mTouchMode = TOUCH_MODE_NONE; + } + break; + } + mGestureDetector.onTouchEvent(event); + mScaleGestureDetector.onTouchEvent(event); + return true; + } + + private void scaleTimebar(float scaleFactor) { + int newWidth = (int) (mTimebarTick.getViewLength() * scaleFactor); + Log.d(TAG, "scaleTimebarByFactor mTimebarTick.getViewLength() = " + mTimebarTick.getViewLength() + " newWidth = " + newWidth); + if (newWidth >= mTimebarTicks.get(0).getStandardViewLength()) { + setTimebarScaleIndex(0, 0); + } else if (newWidth < mTimebarTicks.get(0).getStandardViewLength() && newWidth >= mTimebarTicks.get(1).getStandardViewLength()) { + setTimebarScaleIndex(1, newWidth); + } else if (newWidth < mTimebarTicks.get(1).getStandardViewLength() && newWidth >= mTimebarTicks.get(2).getStandardViewLength()) { + setTimebarScaleIndex(2, newWidth); + } else if (newWidth < mTimebarTicks.get(2).getStandardViewLength() && newWidth >= mTimebarTicks.get(3).getStandardViewLength()) { + setTimebarScaleIndex(3, newWidth); + } else if (newWidth < mTimebarTicks.get(3).getStandardViewLength() && newWidth >= mTimebarTicks.get(4).getStandardViewLength()) { + setTimebarScaleIndex(4, newWidth); + } else if (newWidth <= mTimebarTicks.get(4).getStandardViewLength()) { + setTimebarScaleIndex(4, 0); + } + } + + private String getTime(long duration, String formate) { + Date mDate = new Date(); + mDate.setTime(duration); + SimpleDateFormat mDateFormat = new SimpleDateFormat(formate, Locale.getDefault()); + return mDateFormat.format(mDate); + } + + /** + * 时间轴事件监听 + */ + public interface TimerShaftBarListener { + /** + * 当TimerShaftBar滑动时的通知 + * + * @param calendar 当前calendar + */ + void onTimerShaftBarPosChanged(Calendar calendar); + + /** + * 时间轴手指按下时触发 + */ + void onTimerShaftBarDown(); + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftInterface.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftInterface.java new file mode 100644 index 0000000..b32fb8c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftInterface.java @@ -0,0 +1,39 @@ +package com.lechange.demo.localvideo.timeshaftbar; + +import java.util.ArrayList; +import java.util.Calendar; + +/** + * 项目名称:EZUIKitDemo + * 类描述: + * 创建人:dingwei3 + * 创建时间:2017/5/2 15:15 + * 修改人:dingwei3 + * 修改时间:2017/5/2 15:15 + * 修改备注: + */ +public interface TimerShaftInterface { + + /** + * 设置时间轴事件监听 + * @param timerShaftBarListener + */ + void setTimerShaftLayoutListener(TimerShaftBar.TimerShaftBarListener timerShaftBarListener); + + /** + * 设置绘制区域 + * @param timeShaftItems 绘制区域item + */ + void setTimeShaftItems(ArrayList timeShaftItems); + + /** + * 设置时间轴是否根据接受外部播放进度,当播放成功时需要调用此方法,用来刷新播放时间进度 + */ + void setRefereshPlayTimeWithPlayer(); + + /** + * 设置播放当前时间 + * @param calendar + */ + void setPlayCalendar(Calendar calendar); +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftRegionItem.java b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftRegionItem.java new file mode 100644 index 0000000..3966da6 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/timeshaftbar/TimerShaftRegionItem.java @@ -0,0 +1,80 @@ +package com.lechange.demo.localvideo.timeshaftbar; + +import java.util.Calendar; + +/** + * 项目名称:EZUIKitDemo + * 类描述:时间轴显示的区域对象 + * 创建人:dingwei3 + * 创建时间:2017/4/20 14:28 + * 修改人:dingwei3 + * 修改时间:2017/4/20 14:28 + * 修改备注: + */ +public class TimerShaftRegionItem { + + /** + * 开始时间 + */ + private long mStartTime; + /** + * 结束时间 + */ + private long mEndTime; + + private Calendar mStartCalendar; + + private Calendar mEndCalendar; + + private int recType = 0; + + public TimerShaftRegionItem(long startTime, long endTime, int recType) { + mStartTime = startTime; + mEndTime = endTime; + mStartCalendar = Calendar.getInstance(); + mStartCalendar.setTimeInMillis(mStartTime); + mEndCalendar = Calendar.getInstance(); + mEndCalendar.setTimeInMillis(mEndTime); + this.recType = recType; + } + + public int getRecType() { + return recType; + } + + public void setRecType(int recType) { + this.recType = recType; + } + + public long getStartTime() { + return mStartTime; + } + + public void setStartTime(long startTime) { + mStartTime = startTime; + } + + public long getEndTime() { + return mEndTime; + } + + public void setEndTime(long endTime) { + mEndTime = endTime; + } + + public Calendar getStartCalendar() { + return mStartCalendar; + } + + public void setStartCalendar(Calendar startCalendar) { + mStartCalendar = startCalendar; + } + + public Calendar getEndCalendar() { + return mEndCalendar; + } + + public void setEndCalendar(Calendar endCalendar) { + mEndCalendar = endCalendar; + } +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/turnview/AXLog.java b/app/src/main/java/com/lechange/demo/localvideo/turnview/AXLog.java new file mode 100644 index 0000000..1770391 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/turnview/AXLog.java @@ -0,0 +1,249 @@ +package com.lechange.demo.localvideo.turnview; + + +import android.content.Context; +import android.os.Environment; +import android.util.Log; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +/** + * Created by wzy on 15/11/27. + * 模仿logger,创建自己的日志操作类 + */ +public class AXLog { + public static final String TAG = AXLog.class.getSimpleName(); + /** + * 控制变量,是否显示log日志 + */ + public static boolean isShowLog = true; + public static String defaultMsg = ""; + public static final int V = 1; + public static final int D = 2; + public static final int I = 3; + public static final int W = 4; + public static final int E = 5; + + private static String logPath = null;//log日志存放路径 + + private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);//日期格式; + + private static Date date = new Date();//因为log日志是使用日期命名的,使用静态成员变量主要是为了在整个程序运行期间只存在一个.log文件中; + +// /** +// * 初始化,须在使用之前设置,最好在Application创建时调用 +// * +// * @param context +// */ +// public static void init(Context context) { +// logPath = getFilePath(context) + "/Logs";//获得文件储存路径,在后面加"/Logs"建立子文件夹 +// } + + /** + * 获得文件存储路径 + * + * @return + */ + private static String getFilePath(Context context) { + + if (Environment.MEDIA_MOUNTED.equals(Environment.MEDIA_MOUNTED) || !Environment.isExternalStorageRemovable()) {//如果外部储存可用 + return context.getExternalFilesDir(null).getPath();//获得外部存储路径,默认路径为 /storage/emulated/0/Android/data/com.waka.workspace.logtofile/files/Logs/log_2016-03-14_16-15-09.log + } else { + return context.getFilesDir().getPath();//直接存在/data/data里,非root手机是看不到的 + } + } + + /** + * 初始化控制变量 + * + * @param isShowLog + */ + public static void init(boolean isShowLog) { + AXLog.isShowLog = isShowLog; + } + + /** + * 初始化控制变量和默认日志 + * + * @param isShowLog + * @param defaultMsg + */ + public static void init(boolean isShowLog, String defaultMsg) { + AXLog.isShowLog = isShowLog; + AXLog.defaultMsg = defaultMsg; + } + + public static void v() { + llog(V, null, defaultMsg); + } + + public static void v(Object obj) { + llog(V, null, obj); + } + + public static void v(String tag, Object obj) { + llog(V, tag, obj); + } + + public static void d() { + llog(D, null, defaultMsg); + } + + public static void d(Object obj) { + llog(D, null, obj); + } + + public static void d(String tag, Object obj) { + llog(D, tag, obj); + } + + public static void i() { + llog(I, null, defaultMsg); + } + + public static void i(Object obj) { + llog(I, null, obj); + } + + public static void i(String tag, String obj) { + llog(I, tag, obj); + } + + public static void w() { + llog(W, null, defaultMsg); + } + + public static void w(Object obj) { + llog(W, null, obj); + } + + public static void w(String tag, Object obj) { + llog(W, tag, obj); + } + + public static void e() { + llog(E, null, defaultMsg); + } + + public static void e(Object obj) { + llog(E, null, obj); + } + + public static void e(String tag, Object obj) { + llog(E, tag, obj); + } + + + /** + * 执行打印方法 + * + * @param type + * @param tagStr + * @param obj + */ + public static void llog(int type, String tagStr, Object obj) { + String msg; + if (!isShowLog) { + return; + } + + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + + int index = 4; + String className = stackTrace[index].getFileName(); + String methodName = stackTrace[index].getMethodName(); + int lineNumber = stackTrace[index].getLineNumber(); + + String tag = (tagStr == null ? className : tagStr); + methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("[ (").append(className).append(":").append(lineNumber).append(")#").append(methodName).append(" ] "); + + if (obj == null) { + msg = "Log with null Object"; + } else { + msg = obj.toString(); + } + if (msg != null) { + stringBuilder.append(msg); + } + + String logStr = stringBuilder.toString(); + + switch (type) { + case V: + Log.v(tag, logStr); + break; + case D: + Log.d(tag, logStr); + break; + case I: + Log.i(tag, logStr); + break; + case W: + Log.w(tag, logStr); + break; + case E: + Log.e(tag, logStr); + break; + } + } + + /** + * 将log信息写入文件中 + * + * @param type + * @param tag + * @param msg + */ + private static void writeToFile(char type, String tag, String msg) { + + if (null == logPath) { + Log.e(TAG, "logPath == null ,未初始化MLog"); + return; + } + + String fileName = logPath + "/log_" + dateFormat.format(new Date()) + ".log";//log日志名,使用时间命名,保证不重复 + String log = dateFormat.format(date) + " " + type + " " + tag + " " + msg + "\n";//log日志内容,可以自行定制 + + //如果父路径不存在 + File file = new File(logPath); + if (!file.exists()) { + file.mkdirs();//创建父路径 + } + + FileOutputStream fos = null;//FileOutputStream会自动调用底层的close()方法,不用关闭 + BufferedWriter bw = null; + try { + + fos = new FileOutputStream(fileName, true);//这里的第二个参数代表追加还是覆盖,true为追加,flase为覆盖 + bw = new BufferedWriter(new OutputStreamWriter(fos)); + bw.write(log); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (bw != null) { + bw.close();//关闭缓冲流 + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/localvideo/turnview/OnValueChangeListener.java b/app/src/main/java/com/lechange/demo/localvideo/turnview/OnValueChangeListener.java new file mode 100644 index 0000000..6f52de6 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/turnview/OnValueChangeListener.java @@ -0,0 +1,10 @@ +package com.lechange.demo.localvideo.turnview; + +/** + * Created by Administrator on 2017/10/19. + */ + +public interface OnValueChangeListener { + public void onValueChange(float value); + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/turnview/RecordInfo.java b/app/src/main/java/com/lechange/demo/localvideo/turnview/RecordInfo.java new file mode 100644 index 0000000..0d35e6f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/turnview/RecordInfo.java @@ -0,0 +1,54 @@ +package com.lechange.demo.localvideo.turnview; + +public class RecordInfo { + + private long startTime; + private long endTime; + + private int startValue; + private int endValue; + + public int getStartValue() { + return startValue; + } + + public void setStartValue(int startValue) { + this.startValue = startValue; + } + + public int getEndValue() { + return endValue; + } + + public void setEndValue(int endValue) { + this.endValue = endValue; + } + + public RecordInfo() { + super(); + } + + public long getStartTime() { + return startTime; + } + + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + public long getEndTime() { + return endTime; + } + + public void setEndTime(long endTime) { + this.endTime = endTime; + } + + @Override + public String toString() { + // TODO Auto-generated method stub + return " startTime:" + startTime + " endTime:" + endTime + " startValue:" + startValue + " endValue:" + endValue; + } + + +} diff --git a/app/src/main/java/com/lechange/demo/localvideo/turnview/TunlView.java b/app/src/main/java/com/lechange/demo/localvideo/turnview/TunlView.java new file mode 100644 index 0000000..ee92526 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/localvideo/turnview/TunlView.java @@ -0,0 +1,646 @@ +package com.lechange.demo.localvideo.turnview; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.text.Layout; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import com.yonsz.z1.R; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * Created by Administrator on 2017/10/19. + */ + +public class TunlView extends View { + + /** + * 图片放大状态常量 + */ + public static final int STATUS_ZOOM_OUT = 1; + + /** + * 图片缩小状态常量 + */ + public static final int STATUS_ZOOM_IN = 2; + + /** + * 记录两指同时放在屏幕上时,中心点的横坐标值 + */ + private float centerPointX; + + /** + * 记录两指同时放在屏幕上时,中心点的纵坐标值 + */ + private float centerPointY; + + /** + * 记录按下两指之间的距离 + */ + private double lastFingerDis; + + /** + * 记录当前操作的状态,可选值为STATUS_ZOOM_OUT、STATUS_ZOOM_IN + */ + private int currentStatus; + + + private static final float TEXT_SIZE = 12; + + public int mWidth,mHeight,mlastX,mMove; + + int mValue; //当前时间轴中点所在得刻度尺value + + public static final float LINE_DIVIDER = 2.0f; //初始化每个刻度间距为2 + + float mLineDivider = LINE_DIVIDER ;//记录一刻度屏幕上得距离 + + static float lastItemDivider = LINE_DIVIDER;//缩放后一刻度得屏幕距离 + + private float mDensity; + private float ITEM_MAX_HEIGHT = 30; + private float ITEM_MIN_HEIGHT = 15; + private float textWidth; + + Calendar calendar1 = Calendar.getInstance(); + + List list = new ArrayList<>(); + private String[] timeString0 = {"00:00", "00:30", "01:00", "01:30", "02:00", "02:30", "03:00", "03:30", "04:00", "04:30", + "05:00", "05:30", "06:00", "06:30", "07:00", "07:30", "08:00", "08:30", "09:00", "09:30", "10:00", "10:30", + "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", + "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", + "23:00", "23:30"}; + + private String[] timeString1 = {"00:00", "01:00", "02:00", "03:00", "04:00", + "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", + "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", + "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", + "23:00"}; + + private String[] timeString2 = {"00:00", "03:00", "06:00", "9:00", "12:00", "15:00","18:00","21:00"}; + + private String[] timeString3 = {"00:00", "12:00"}; + + private String[] timeString4 = {"00:00"}; + + public int Mode = Mode_1 ; // 当前的刻度尺缩放模式,默认模式一 + public static final int Mode_0 = 0; //模式一,当前刻度尺显示timeString0 + public static final int Mode_1 = 1; //模式一,当前刻度尺显示timeString1 + public static final int Mode_2 = 2; //模式一,当前刻度尺显示timeString2 + public static final int Mode_3 = 3; //模式一,当前刻度尺显示timeString3 + public static final int Mode_4 = 4; //模式一,当前刻度尺显示timeString4 + + /** + * 代表value值增加60,刻度尺对应多少(一个大刻度对应多少value) + * Mode_0代表半个小时 + * Mode_1代表1个小时 + * Mode_2代表3个小时 + * Mode_3代表12个小时 + * Mode_4代表24个小时 + */ + int largeScaleValue = 60; + + /** + * 代表value值增加10,刻度尺对应多少(一个小刻度对应多少value) + * Mode_0代表5分钟 + * Mode_1代表10分钟 + * Mode_2代表15分钟 + * Mode_3代表60分钟 + * Mode_4代表120分钟 + */ + int smallScaleValue = 10; + + public static int valueToSencond ; // 代表mvalue加1,刻度尺增加多少秒 + + private int REFRESH_TIME = valueToSencond*1000; + + public String[] useString; + + private float scaledRatio; + + private OnValueChangeListener mListener; + + public OnValueChangeListener getmListener() { + return mListener; + } + + public void setmListener(OnValueChangeListener mListener) { + this.mListener = mListener; + } + + Paint linePaint = new Paint(); + Paint shadowPaint = new Paint(); + + TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + + public TunlView(Context context) { + super(context); + } + + public TunlView(Context context, AttributeSet attrs) { + super(context, attrs); + + useString = timeString1; + valueToSencond = 60 ; //当选择timeString1时,mvlaue加一,刻度尺增加60秒 + + mDensity = getContext().getResources().getDisplayMetrics().density; + setBackgroundResource(R.drawable.bg_wheel); + + //过二十五秒让mValue自增一次,模拟在录像状态 + postDelayed(new Runnable() { + @Override + public void run() { + postDelayed(this, valueToSencond*1000); + mValue++; + postInvalidate(); + } + }, valueToSencond*1000); + + + initData(); + shadowPaint.setStyle(Paint.Style.FILL); + shadowPaint.setColor(Color.parseColor("#83D7DD")); + shadowPaint.setAlpha(101); + + } + + + public void initData() { + list.clear(); + mValue = getNowValue(); + + Date d = new Date(); + RecordInfo info1 = new RecordInfo(); + + + RecordInfo info2 = new RecordInfo(); + info2.setStartTime(d.getTime() - 60 * 60 * 1000 * 8); + info2.setEndTime(d.getTime() - 60 * 60 * 1000 * 7); + info2.setStartValue(getmValue(info2.getStartTime())); + info2.setEndValue(getmValue(info2.getEndTime())); + + info1.setStartTime(d.getTime() - 60 * 60 * 1000); + info1.setEndTime(d.getTime()); + // info1.setCurrentDate("2017-10-23"); + info1.setStartValue(getmValue(info1.getStartTime())); + info1.setEndValue(getmValue(info1.getEndTime())); + + list.add(info2); + list.add(info1); + + postDelayed(new Runnable() { + @Override + public void run() { + postDelayed(this, 60 * 1000); + RecordInfo info = new RecordInfo(); + info.setStartTime(System.currentTimeMillis() - 60 * 1000); + info.setEndTime(System.currentTimeMillis()); + info.setStartValue(getmValue(info.getStartTime())); + info.setEndValue(getmValue(info.getEndTime())); + AXLog.e("wzytest", "info.StartTime:" + info.getStartTime() + " info.getEndTime():" + info.getEndTime()); + addNoRepeatList(info); + postInvalidate(); + } + + }, 60 * 1000); + + } + + /** + * 时间轴在跑动,不能每秒都往录像list 增加一条录像, + * 判断如果前后录像文件时间戳相差不大于一秒,则代表录像时间相连, + * 并不往录像列表增加一条记录(为何不判断相等?) + * @param info + */ + private void addNoRepeatList(RecordInfo info) { + RecordInfo lastInfo = list.get(list.size() - 1); + if (info.getStartTime() - lastInfo.getEndTime() < 1000) { + AXLog.e("wzytest", "前一个数据的最后时间小于当前的开始时间不超过一秒"); + lastInfo.setEndTime(info.getEndTime()); + lastInfo.setEndValue(info.getEndValue()); + } else { + list.add(info); + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawScaleLine(canvas); + drawMiddleLine(canvas); + drawShadow(canvas); + } + + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + mWidth = getWidth(); + mHeight = getHeight(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + + //划线 + public void drawScaleLine(Canvas canvas) { + linePaint.setStrokeWidth(2); + linePaint.setColor(Color.BLACK); + + textPaint.setTextSize(TEXT_SIZE * mDensity); + textPaint.setTextSize(16); + textWidth = Layout.getDesiredWidth("0", textPaint); + + int width = mWidth, drawCount = 0; + + float xPosition; + + for (int i = 0; drawCount < width * 2; i++) { + xPosition = (mWidth / 2 + mMove) + i * mDensity * (mLineDivider); + if (((mValue + i)) % largeScaleValue == 0) { + canvas.drawLine(xPosition, 0, xPosition, mDensity * ITEM_MAX_HEIGHT, linePaint); + if ((((mValue + i)) / largeScaleValue % useString.length) < 0) { + canvas.drawText(useString[useString.length + (((mValue + i)) / largeScaleValue % useString.length)], countLeftStart(mValue + i, xPosition, textWidth), getHeight() - textWidth, textPaint); + } else { + canvas.drawText(useString[((mValue + i)) / largeScaleValue % useString.length], countLeftStart(mValue + i, xPosition, textWidth), getHeight() - textWidth, textPaint); + } + + } else { + if ((mValue + i) % smallScaleValue == 0) { + canvas.drawLine(xPosition, 0, xPosition, mDensity * ITEM_MIN_HEIGHT, linePaint); + } + } + + xPosition = (mWidth / 2 + mMove) - i * mDensity * (mLineDivider); + if (( (mValue - i)) % largeScaleValue == 0) { + canvas.drawLine(xPosition, 0, xPosition, mDensity * ITEM_MAX_HEIGHT, linePaint); + if ((( (mValue - i)) / largeScaleValue % useString.length) < 0) { + canvas.drawText(useString[useString.length + (((mValue - i)) / largeScaleValue % useString.length)], countLeftStart(mValue - i, xPosition, textWidth), getHeight() - textWidth, textPaint); + } else { + canvas.drawText(useString[( (mValue - i)) / largeScaleValue % useString.length], countLeftStart(mValue - i, xPosition, textWidth), getHeight() - textWidth, textPaint); + } + } else { + if ( (mValue - i) % smallScaleValue == 0) { + canvas.drawLine(xPosition, 0, xPosition, mDensity * ITEM_MIN_HEIGHT, linePaint); + } + } + drawCount += mDensity * (mLineDivider); + + } + } + + public void drawShadow(Canvas canvas){ + float startXPosition ; + float endXPosition ; + // TODO: 2017/10/24 画阴影面积 + for (int j = 0; j < list.size(); j++) { + RecordInfo info = list.get(j); + int startvalue = info.getStartValue(); + int endvalue = info.getEndValue(); + + //获取当前得value + AXLog.e("wzytest","getNowValue:"+getNowValue() +"mvalue:"+mValue); + + startXPosition = mWidth/2 - (mValue-startvalue) * mDensity * (mLineDivider); + endXPosition = mWidth/2 + (endvalue-mValue) * mDensity * (mLineDivider); + + canvas.drawRect(startXPosition,0,endXPosition,mHeight,shadowPaint); + } + } + + /** + * 计算数字显示位置的辅助方法 + * + * @param value + * @param xPosition + * @param textWidth + * @return + */ + private float countLeftStart(int value, float xPosition, float textWidth) { + float xp; + xp = xPosition - (textWidth * 5 / 2); //从2.5个字开始写 + return xp; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + int xPosition = (int) event.getX(); + int xMove; + switch (event.getActionMasked()) { + case MotionEvent.ACTION_POINTER_DOWN: + if (event.getPointerCount() == 2) { + // 当有两个手指按在屏幕上时,计算两指之间的距离 + lastFingerDis = distanceBetweenFingers(event); + } + break; + case MotionEvent.ACTION_DOWN: + mlastX = xPosition; + mMove = 0; + break; + case MotionEvent.ACTION_UP: + //当滑动到停止,改变当前刻度值 + xMove = (int) (mMove / (mLineDivider * mDensity)); + mValue -= xMove; + notifyValueChange(); + mMove = 0; + break; + case MotionEvent.ACTION_MOVE: + if (event.getPointerCount() == 1) { + mMove = xPosition - mlastX; + xMove = (int) (mMove / (mLineDivider * mDensity)); + mValue -= xMove; + notifyValueChange(); + invalidate(); + } else if (event.getPointerCount() == 2) { + // 有两个手指按在屏幕上移动时,为缩放状态 + centerPointBetweenFingers(event); + double fingerDis = distanceBetweenFingers(event); + + if (fingerDis > lastFingerDis) { + currentStatus = STATUS_ZOOM_OUT; + } else { + currentStatus = STATUS_ZOOM_IN; + } + + if(Mode==Mode_0&¤tStatus==STATUS_ZOOM_OUT||Mode==Mode_4&¤tStatus==STATUS_ZOOM_IN){ + AXLog.e("wzytest","Mode_0 时放大 和 Mode_4 时候缩小不做任何处理"); + }else{ + scaledRatio = (float) (fingerDis / lastFingerDis ); + shadowPaint.setStrokeWidth(6*scaledRatio); + mLineDivider = lastItemDivider * scaledRatio; //缩放后一刻度在屏幕上的距离 + } + + if(currentStatus==STATUS_ZOOM_IN&&Mode==Mode_0){ + if(2*mLineDividerLINE_DIVIDER){ + mLineDivider = 2; + lastItemDivider = 2; + useString = timeString3; + Mode = Mode_3; + valueToSencond = valueToSencond/2; + //重新获取当前value + mValue = getNowValue(); + //重新计算蓝色录像时间轴 + initData(); + } + }else if(currentStatus==STATUS_ZOOM_OUT&&Mode==Mode_3){ + if(mLineDivider/4>LINE_DIVIDER){ + mLineDivider = 2; + lastItemDivider = 2; + useString = timeString2; + Mode = Mode_2; + valueToSencond = valueToSencond/4; + AXLog.e("wzytest","mvalue:"+mValue); + //重新获取当前value + mValue = getNowValue(); + AXLog.e("wzytest","重新获取的value:"+mValue); + //重新计算蓝色录像时间轴 + initData(); + } + }else if(currentStatus==STATUS_ZOOM_OUT&&Mode==Mode_2){ + if(mLineDivider/3>LINE_DIVIDER){ + mLineDivider = 2; + lastItemDivider = 2; + useString = timeString1; + Mode = Mode_1; + valueToSencond = valueToSencond/3; + mValue = getNowValue(); + //重新计算蓝色录像时间轴 + initData(); + } + }else if(currentStatus==STATUS_ZOOM_OUT&&Mode==Mode_1){ + if(mLineDivider/2>LINE_DIVIDER){ + mLineDivider = 2; + lastItemDivider = 2; + useString = timeString0; + Mode = Mode_0; + valueToSencond = valueToSencond/2; + //重新获取当前value + mValue = getNowValue(); + //重新计算蓝色录像时间轴 + initData(); + } + } + + AXLog.e("wzytest","itemDivider:"+mLineDivider+" lastItemDivider:"+lastItemDivider); + postInvalidate(); + } + break; + case MotionEvent.ACTION_POINTER_UP: + if (event.getPointerCount() == 2) { + //lastValueTosecond = valueToSencond; + lastItemDivider = mLineDivider; + } + break; + case MotionEvent.ACTION_CANCEL: + AXLog.e("wzytest", "ACTION_CANCEL......."); + break; + default: + break; + } + return true; +// return super.onTouchEvent(event); + } + + private void notifyValueChange() { + + if (null != mListener) { + mListener.onValueChange(mValue); + } + } + + + /** + * 获取当前刻度值 + * + * @return + */ + public float getValue() { + return mValue; + } + + /** + * 设置当前刻度值 + * + * @param mValue + */ + public void setmValue(int mValue) { + this.mValue = mValue; + } + + /** + * 画中间的红色指示线 + * + * @param canvas + */ + private void drawMiddleLine(Canvas canvas) { + int indexWidth = 5; + String color = "#66999999"; + Paint redPaint = new Paint(); + redPaint.setStrokeWidth(indexWidth); + redPaint.setColor(Color.RED); + // canvas.drawLine(mWidth / 2, 0, mWidth / 2 , mHeight, shadowPaint); + canvas.drawLine(mWidth / 2, 0, mWidth / 2, mHeight, redPaint); + + } + + public static int getNowValue() { + Calendar c = Calendar.getInstance();//可以对每个时间域单独修改 + + int hour = c.get(Calendar.HOUR_OF_DAY); + int minute = c.get(Calendar.MINUTE); + int second = c.get(Calendar.SECOND); + Log.e("wzytest", "hour:" + hour + " minute:" + minute + " second:" + second); + + //一个mvalue代表25 秒,两个刻度中间间隔了(60/5)个mvalue + return ((hour * 60 + minute) * 60 + second) / valueToSencond ; + // return 360; + } + + /** + * 获取mValue 所对应的时间 + * @param mValue + * @return + */ + public static String getTime(float mValue) { + // TODO: 2017/10/23 超过24小时 和 少于0小时的处理 + + int day = (int) (mValue * valueToSencond / (3600 * 24)); // 天数 + int hour = (int) ((mValue * valueToSencond - (60 * 60 * 24) * day) / 3600); + int minute = (int) (mValue * valueToSencond - 3600 * hour - (60 * 60 * 24) * day) / 60; + int second = (int) mValue * valueToSencond - hour * 3600 - minute * 60 - (60 * 60 * 24) * day; + + AXLog.e("wzytest", "hour:" + hour + " minute:" + minute + " second:" + second + " day:" + day); + Calendar calendar1 = Calendar.getInstance(); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + /** + * 从00:00:00开始设置时间 + */ + calendar1.add(Calendar.DATE, day); + calendar1.set(Calendar.HOUR_OF_DAY, hour); + calendar1.set(Calendar.MINUTE, minute); + calendar1.set(Calendar.SECOND, second); + + String moveDate = sdf1.format(calendar1.getTime()); + return moveDate; + } + + + /** + * 获取时间戳所对应的mvalue + * @param time 录像时间段time + * @return + */ + private int getmValue(long time) { + /** + * 从00:00:00开始设置时间 + */ + calendar1.set(Calendar.HOUR_OF_DAY, 0); + calendar1.set(Calendar.MINUTE, 0); + calendar1.set(Calendar.SECOND, 0); + long l1 = calendar1.getTimeInMillis(); + return (int) (time - l1) / (1000 * valueToSencond); + } + + /** + * 计算两个手指之间的距离。 + * + * @param event + * @return 两个手指之间的距离 + */ + private double distanceBetweenFingers(MotionEvent event) { + float disX = Math.abs(event.getX(0) - event.getX(1)); + float disY = Math.abs(event.getY(0) - event.getY(1)); + return Math.sqrt(disX * disX + disY * disY); + } + + /** + * 计算两个手指之间中心点的坐标。 + * + * @param event + */ + private void centerPointBetweenFingers(MotionEvent event) { + float xPoint0 = event.getX(0); + float yPoint0 = event.getY(0); + float xPoint1 = event.getX(1); + float yPoint1 = event.getY(1); + centerPointX = (xPoint0 + xPoint1) / 2; + centerPointY = (yPoint0 + yPoint1) / 2; + } + + +} diff --git a/app/src/main/java/com/lechange/demo/login/BindUserActivity.java b/app/src/main/java/com/lechange/demo/login/BindUserActivity.java new file mode 100644 index 0000000..3fff5b2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/login/BindUserActivity.java @@ -0,0 +1,193 @@ +package com.lechange.demo.login; + + +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; +import com.lechange.demo.business.Business; +import com.lechange.demo.common.CommonTitle; +import com.lechange.demo.common.CommonTitle.OnTitleClickListener; +import com.yonsz.z1.R; + +public class BindUserActivity extends Activity{ + + private CommonTitle mCommonTitle; + + private EditText mAuthCodeEdit ; + private Button mGetAuthCodeBtn; + private Button mBindBtn; + private TextView mNoticeText; + private String mPhoneNumber; + private int mTime = 0; + private final Handler handler = new Handler(){ + @Override + public void handleMessage(Message msg) { + if(msg.what > 1) + { + sendEmptyMessageDelayed(mTime--, 1000); + mGetAuthCodeBtn.setText("重新获取(" + mTime +")"); + } + else if(msg.what <= 1) + { + mGetAuthCodeBtn.setText("重新获取"); + mGetAuthCodeBtn.setTextColor(Color.BLUE); + } + + } + + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_user_bind); + mPhoneNumber = getIntent().getStringExtra("phoneNumber"); + initView(); + initTitle(); + setListener(); + } + + public void initView() + { + mAuthCodeEdit = (EditText) findViewById(R.id.authCodeEdit); + mGetAuthCodeBtn = (Button) findViewById(R.id.getAuthCode); + mBindBtn = (Button) findViewById(R.id.bind); + mNoticeText = (TextView) findViewById(R.id.authCodeNotice); + mNoticeText.setText(this.getString(R.string.bind_user_notice) + mPhoneNumber); + } + + public void initTitle() + { + //绘制标题 + mCommonTitle = (CommonTitle) findViewById(R.id.title); + mCommonTitle.initView(R.drawable.title_btn_back, 0, R.string.user_bind); + + mCommonTitle.setOnTitleClickListener(new OnTitleClickListener() { + @Override + public void onCommonTitleClick(int id) { + // TODO Auto-generated method stub + switch (id) { + case CommonTitle.ID_LEFT: + finish(); + } + } + }); + } + + public void setListener() + { + mBindBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + checkSms(); + } + }); + mGetAuthCodeBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + //还在倒计时 + if(mTime > 0) + return; + getUserSms(); + } + }); + + mAuthCodeEdit.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int arg2, int arg3) { + if(s.length() != 0){ + mBindBtn.setBackgroundColor(Color.rgb(0x4e, 0xa7, 0xf2)); + } + else{ + mBindBtn.setBackgroundColor(Color.rgb(0x8a, 0xb9, 0xe1)); + } + + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, + int arg3) { + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + + public void checkSms(){ + mNoticeText.setVisibility(View.INVISIBLE); + mBindBtn.setClickable(false); + String smsCode = mAuthCodeEdit.getText().toString().trim(); + if(smsCode.length() == 0) + { + Toast.makeText(getApplicationContext(), R.string.toast_userbind_no_idcode, Toast.LENGTH_LONG).show(); + mBindBtn.setClickable(true); + return; + } + + Business.getInstance().checkUserSms(mPhoneNumber, smsCode, new Handler(){ + @Override + public void handleMessage(Message msg) { + if(0 == msg.what) + { + finish(); + } + else + { + mNoticeText.setText((String)msg.obj); + mNoticeText.setVisibility(View.VISIBLE); + } + mBindBtn.setClickable(true); + } + + }); + } + + /** + * 获取短信验证码 + */ + public void getUserSms(){ + mNoticeText.setVisibility(View.INVISIBLE); + Business.getInstance().getUserSms(mPhoneNumber, new Handler(){ + @Override + public void handleMessage(Message msg) { + if(0 == msg.what) + { + mGetAuthCodeBtn.setTextColor(Color.rgb(195, 195, 200)); + mTime = 60; + handler.obtainMessage(60).sendToTarget(); + + mNoticeText.setText(getApplication().getResources().getString(R.string.bind_user_notice) + mPhoneNumber); + mNoticeText.setVisibility(View.VISIBLE); + } + else + { + String result = (String)msg.obj; + mNoticeText.setText(result); + mNoticeText.setVisibility(View.VISIBLE); + } + } + + }); + } +} diff --git a/app/src/main/java/com/lechange/demo/login/SplashActivity.java b/app/src/main/java/com/lechange/demo/login/SplashActivity.java new file mode 100644 index 0000000..1bcdb79 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/login/SplashActivity.java @@ -0,0 +1,65 @@ +/* + * 项目名: YYS + * 文件名: YysApp.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.login; + + +import android.app.Activity; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.os.Bundle; +import com.lechange.demo.login.fragment.SplashErrFragment; +import com.lechange.demo.login.fragment.SplashNormalFragment; +import com.yonsz.z1.R; + +/** + * + * 描述:启动界面 + * + * @author:fuwl + */ + +public class SplashActivity extends Activity { + public static final String tag = "LoginActivity"; + public SplashNormalFragment mFragemnt; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + this.setContentView(R.layout.activity_splash); + FragmentManager fragementManager = getFragmentManager(); + FragmentTransaction fragmentTansaction = fragementManager.beginTransaction(); + mFragemnt = new SplashNormalFragment(); + + fragmentTansaction.add(R.id.frame_content, mFragemnt); + fragmentTansaction.commit(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + public void changeFragment() + { + FragmentManager fragementManager = getFragmentManager(); + FragmentTransaction fragmentTansaction = fragementManager.beginTransaction(); + SplashErrFragment errorFragment = new SplashErrFragment(); + Bundle bundle = new Bundle(); + bundle.putString("appId", mFragemnt.getAppId()); + bundle.putString("appSecret", mFragemnt.getAppSecret()); + errorFragment.setArguments(bundle); + fragmentTansaction.replace(R.id.frame_content, errorFragment); + fragmentTansaction.addToBackStack(null); + fragmentTansaction.commit(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/login/UserLoginActivity.java b/app/src/main/java/com/lechange/demo/login/UserLoginActivity.java new file mode 100644 index 0000000..fb97c2e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/login/UserLoginActivity.java @@ -0,0 +1,191 @@ +package com.lechange.demo.login; + + +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.lechange.demo.business.Business; +import com.lechange.demo.common.CommonTitle; +import com.lechange.demo.common.CommonTitle.OnTitleClickListener; +import com.lechange.demo.listview.DevicelistActivity; +import com.yonsz.z1.R; + +public class UserLoginActivity extends Activity { + + private String tag = "UserLoginActivity"; + private EditText mZoomEdit; + private EditText mPhoneEdit; + private Button mBindUserBtn; + private Button mDeviceListBtn; + private TextView notice; + private CommonTitle mCommonTitle; + private SharedPreferences sp; //固化数据 + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_user_login); + sp = this.getSharedPreferences("OpenSDK", MODE_PRIVATE); + initView(); + initTitle(); + setListener(); + } + + public void initView() { + mZoomEdit = (EditText) findViewById(R.id.zoneView); + mZoomEdit.setText(sp.getString("zone", "+86")); + mPhoneEdit = (EditText) findViewById(R.id.phoneEdit); + mPhoneEdit.setText(sp.getString("userphonenumber", "")); + + mBindUserBtn = (Button) findViewById(R.id.bindUser); + mDeviceListBtn = (Button) findViewById(R.id.deviceList); + notice = (TextView) findViewById(R.id.notice); + } + + public void initTitle() { + //绘制标题 + mCommonTitle = (CommonTitle) findViewById(R.id.title); + mCommonTitle.initView(R.drawable.title_btn_back, 0, R.string.user_login_name); + + mCommonTitle.setOnTitleClickListener(new OnTitleClickListener() { + @Override + public void onCommonTitleClick(int id) { + // TODO Auto-generated method stub + switch (id) { + case CommonTitle.ID_LEFT: + finish(); + } + } + }); + } + + public void setListener() { + mBindUserBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + userLogin(mBindUserBtn.getId()); + } + }); + + mDeviceListBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + userLogin(mDeviceListBtn.getId()); + } + }); + + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + + /** + * 获取usertoken + */ + public void userLogin(final int id) { + notice.setVisibility(View.INVISIBLE); + String zone = mZoomEdit.getText().toString().trim(); + String phoneNumber = mPhoneEdit.getText().toString().trim(); + + if (phoneNumber.length() != 11) { + notice.setText(R.string.user_no_input); + notice.setVisibility(View.VISIBLE); + return; + } + + + mBindUserBtn.setClickable(false); + mDeviceListBtn.setClickable(false); + + Editor editor = sp.edit(); + editor.putString("userphonenumber", phoneNumber); + editor.putString("zone", zone); + editor.commit(); + + if (!zone.endsWith("86") && !zone.equals("")) { + phoneNumber = zone + phoneNumber; + } + + + Business.getInstance().userlogin(phoneNumber, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + switch (id) { + case R.id.bindUser: + notice.setText(R.string.user_bind_err); + notice.setVisibility(View.VISIBLE); + break; + case R.id.deviceList: + String userToken = (String) msg.obj; + Log.d(tag, "userToken" + userToken); + Business.getInstance().setToken(userToken); + startActivity(); + break; + } + } else { + switch (id) { + case R.id.bindUser: + if (1 == msg.what) + startBindUserActivity(); + else { + String result = (String) msg.obj; + notice.setText(result); + notice.setVisibility(View.VISIBLE); + } + break; + case R.id.deviceList: + if (1 != msg.what) { + String result = (String) msg.obj; + notice.setText(result); + } else { + notice.setText(R.string.user_nobind_err); + } + + notice.setVisibility(View.VISIBLE); + break; + } + } + mBindUserBtn.setClickable(true); + mDeviceListBtn.setClickable(true); + } + + }); + } + + public void startBindUserActivity() { + Intent intent = new Intent(UserLoginActivity.this, BindUserActivity.class); + intent.putExtra("phoneNumber", mPhoneEdit.getText().toString()); + startActivity(intent); + } + + /** + * 跳转到主页 + */ + public void startActivity() { + Intent mIntent = new Intent(this, DevicelistActivity.class); + Bundle b = getIntent().getExtras(); + if (b != null) { + mIntent.putExtras(getIntent().getExtras()); + } + startActivity(mIntent); + finish(); + } +} diff --git a/app/src/main/java/com/lechange/demo/login/fragment/SplashErrFragment.java b/app/src/main/java/com/lechange/demo/login/fragment/SplashErrFragment.java new file mode 100644 index 0000000..3f4c545 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/login/fragment/SplashErrFragment.java @@ -0,0 +1,54 @@ +package com.lechange.demo.login.fragment; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; + +public class SplashErrFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + return inflater.inflate(R.layout.fragment_splash_err, container, false); + + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onActivityCreated(savedInstanceState); + EditText appId = (EditText) getView().findViewById(R.id.editAppId); + EditText appSecret = (EditText) getView().findViewById( + R.id.editAppSectet); + appId.setText(getArguments().getString("appId")); + appSecret.setText(getArguments().getString("appSecret")); + LinearLayout layout = (LinearLayout) getView().findViewById( + R.id.container); + layout.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + getFragmentManager().popBackStack(); + + } + + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + + +} diff --git a/app/src/main/java/com/lechange/demo/login/fragment/SplashNormalFragment.java b/app/src/main/java/com/lechange/demo/login/fragment/SplashNormalFragment.java new file mode 100644 index 0000000..49c5c7e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/login/fragment/SplashNormalFragment.java @@ -0,0 +1,192 @@ +package com.lechange.demo.login.fragment; + +import android.app.Activity; +import android.app.Fragment; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Toast; +import com.lechange.demo.business.Business; +import com.lechange.demo.listview.DevicelistActivity; +import com.lechange.demo.login.SplashActivity; +import com.lechange.demo.login.UserLoginActivity; +import com.yonsz.z1.R; + +public class SplashNormalFragment extends Fragment{ + + private EditText appId = null; + private EditText appSecret = null; + private EditText appUrl = null; + private ImageView adminBtn = null; + private ImageView userBtn = null; + private SharedPreferences sp; //固化数据 + private Activity mActivity; + + + public String getAppId() { + return appId.getText().toString(); + } + + + + public String getAppSecret() { + return appSecret.getText().toString(); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + sp = getActivity().getSharedPreferences("OpenSDK", SplashActivity.MODE_PRIVATE); + return inflater.inflate(R.layout.fragment_splash_normal, container,false); + + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + initView(); + setListener(); + +// inner online + appId.setText(sp.getString("appid", "")); + appSecret.setText(sp.getString("appsecret", "")); + appUrl.setText(sp.getString("appurl", Business.getInstance().isOversea ? "openapi.easy4ip.com:443" : "openapi.lechange.cn:443")); + appUrl.setVisibility(View.INVISIBLE); + + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + private void initView() + { + mActivity = getActivity(); + + appId = (EditText) getView().findViewById(R.id.editAppId); + appSecret = (EditText) getView().findViewById(R.id.editAppSectet); + appUrl = (EditText) getView().findViewById(R.id.editappurl); + adminBtn = (ImageView) getView().findViewById(R.id.adminButton); + userBtn = (ImageView) getView().findViewById(R.id.userButton); + + if(!getResources().getConfiguration().locale.getLanguage().endsWith("zh")){ + userBtn.setVisibility(View.GONE); + } + } + + private void setListener() + { + adminBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if(!validCheck()) + { + SplashActivity splashActivity = (SplashActivity) getActivity(); + splashActivity.changeFragment(); + return; + } + //按钮不能点击,防止连击开启多个activity;也可以修改启动模式 + adminBtn.setClickable(false); + + //初始化需要的数据 + Business.getInstance().init(appId.getText().toString(), appSecret.getText().toString(), appUrl.getText().toString()); + + Editor editor=sp.edit(); + editor.putString("appid", appId.getText().toString()); + editor.putString("appsecret", appSecret.getText().toString()); + editor.putString("appurl", appUrl.getText().toString()); + editor.commit(); + + adminLogin(); + } + + }); + + userBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + if(!validCheck()) + { + SplashActivity splashActivity = (SplashActivity) getActivity(); + splashActivity.changeFragment(); + return; + } + + //初始化需要的数据 + Business.getInstance().init(appId.getText().toString(), appSecret.getText().toString(), appUrl.getText().toString()); + + Editor editor=sp.edit(); + editor.putString("appid", appId.getText().toString()); + editor.putString("appsecret", appSecret.getText().toString()); + editor.putString("appurl", appUrl.getText().toString()); + editor.commit(); + + Intent intent = new Intent(getActivity(),UserLoginActivity.class ); + getActivity().startActivity(intent); + + } + + }); + } + + private void adminLogin() { + Business.getInstance().adminlogin(new Handler(){ + @Override + public void handleMessage(Message msg) { + if(0 == msg.what) + { + String accessToken = (String) msg.obj; + Business.getInstance().setToken(accessToken); + + //恢复可点击 + adminBtn.setClickable(true); + startActivity(); + } + else{ + if(1 == msg.what){ + Toast.makeText(mActivity, "getToken failed", Toast.LENGTH_SHORT).show(); + }else{ + String result = (String)msg.obj; + Toast.makeText(mActivity, result, Toast.LENGTH_SHORT).show(); + } + //恢复可点击 + adminBtn.setClickable(true); + } + } + + }); + } + + private void startActivity() { + Intent mIntent = new Intent(this.getActivity(), DevicelistActivity.class); + Bundle b = mActivity.getIntent().getExtras(); + if (b != null) { + mIntent.putExtras(mActivity.getIntent().getExtras()); + } + startActivity(mIntent); + } + + private boolean validCheck() + { + + if(appId.getText().length()==0 || appSecret.getText().length() == 0) + { + return false; + } + return true; + } + +} diff --git a/app/src/main/java/com/lechange/demo/manager/DeviceAddActivity.java b/app/src/main/java/com/lechange/demo/manager/DeviceAddActivity.java new file mode 100644 index 0000000..2b6c4d7 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/manager/DeviceAddActivity.java @@ -0,0 +1,895 @@ +package com.lechange.demo.manager; + +import android.Manifest; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.text.TextUtils; +import android.util.Log; +import android.widget.EditText; + +import com.alibaba.fastjson.JSON; +import com.lechange.common.configwifi.LCSmartConfig; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.RetObject; +import com.lechange.demo.business.util.TaskPoolHelper; +import com.lechange.demo.business.util.TaskPoolHelper.RunnableTask; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.yonsz.AddCompleteAndRenameActivity; +import com.lechange.demo.yonsz.TimeOutActivity; +import com.lechange.opensdk.api.bean.DeviceOnline; +import com.lechange.opensdk.configwifi.LCOpenSDK_ConfigWifi; +import com.lechange.opensdk.media.DeviceInitInfo; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.difference.DifferConstans.LECHENG_KEY; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.BIND_DEVICE; +import static com.yonsz.z1.version5.MainFragment5.isRefreshCamera; + +public class DeviceAddActivity extends BaseActivity implements + ActivityCompat.OnRequestPermissionsResultCallback { + public final static String tag = "AddDeviceActivity"; + // 无线配置参数 + private static final int PROGRESS_TIMEOUT_TIME = 120 * 1000; + private static final int PROGRESS_DELAY_TIME = 10 * 1000; + private final int startPolling = 0x10; + private final int successOnline = 0x11; + private final int asynWaitOnlineTimeOut = 0x12; + private final int successAddDevice = 0x13; + // private final int successOffline = 0x14; + // private final int addDeviceTimeOut = 0x15; + // private final int failedAddDevice = 0x16; + // private final int successOnlineEx = 0x17; + private final int deviceInitSuccess = 0x18; + private final int deviceInitFailed = 0x19; + private final int deviceInitByIPFailed = 0x1A; + private final int deviceSearchSuccess = 0x1B; + private final int deviceSearchFailed = 0x1C; + private final int INITMODE_UNICAST = 0; + private final int INITMODE_MULTICAST = 1; + private TitleView mTitleView; + private int curInitMode = INITMODE_MULTICAST; + private ProgressDialog mProgressDialog; // 播放加载使用 + private String key = ""; + private Handler mHandler; + private boolean mIsOffline = true; + private boolean mIsDeviceSearched = false; //设备初始化标志,保证设备初始化接口只调用一次 + + // 配对方式 + private boolean mIsDeviceInitSuccess = false; + private ConfigStatus mConfigStatus = ConfigStatus.query; // 默认为轮询状态 + private int time = 25; + + private String deviceSN, deviceCode = ""; + private StateButton mStateButton; + private int sec = 100; + + /** + * 无线配对超时任务 + */ + private Runnable progressRun = new Runnable() { + @Override + public void run() { + // TODO Auto-generated method stub + toast("超时配置失败"); + stopConfig(); + gotoTimeOutActivity(); + } + }; + /** + * 轮询定时启动任务 + */ + private Runnable progressPoll = new Runnable() { + @Override + public void run() { + // TODO Auto-generated method stub + mHandler.obtainMessage(startPolling).sendToTarget(); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_lcadd); + + initView(); + } + + private void initView() { + deviceSN = getIntent().getExtras().get("deviceSN").toString(); + deviceCode = getIntent().getExtras().get("deviceCode").toString(); + // load组件 + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mProgressDialog = (ProgressDialog) this.findViewById(R.id.query_load); + mTitleView = (TitleView) findViewById(R.id.title_lecheng_add); + mTitleView.setHead(R.string.add_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + Log.d(tag, "msg.what" + msg.what); + switch (msg.what) { + // 无线配对消息回调 + /*case LCOpenSDK_ConfigWifi.ConfigWifi_Event_Success: + Log.d(tag, "smartConfig success"); + mConfigStatus = ConfigStatus.wifipair; + toast("smartConfig success"); + stopConfig(); + mHandler.removeCallbacks(progressPoll); + if (!mIsDeviceSearched) { + mIsDeviceSearched = true; +// searchDevice(); + } + break;*/ + case deviceSearchSuccess: + Log.d(tag, "deviceSearchSuccess"); + initDevice((DeviceInitInfo) msg.obj, curInitMode); + break; + case deviceSearchFailed: + Log.d(tag, "deviceSearchFailed:" + (String) msg.obj); + toast("deviceSearchFailed:" + (String) msg.obj); + gotoTimeOutActivity(); + break; + case deviceInitSuccess: + Log.d(tag, "deviceInitSuccess"); + toast("deviceInitSuccess!"); + mIsDeviceInitSuccess = true; + if (mIsOffline) + checkOnline(); + else + mHandler.obtainMessage(successOnline).sendToTarget(); + break; + case deviceInitFailed: + toast("deviceInitFailed: " + (String) msg.obj); + //组播失败后走单播 + curInitMode = INITMODE_UNICAST; + // searchDevice(); + break; + case deviceInitByIPFailed: + toast("deviceInitByIPFailed: " + (String) msg.obj); + curInitMode = INITMODE_MULTICAST; + time = 0; + mProgressDialog.setStop(); + break; + case startPolling: + checkOnline(); + break; + // 校验消息回调 + case asynWaitOnlineTimeOut: + Log.d(tag, "checkIsOnlineTimeOut"); + break; + case successOnline: + Log.d(tag, "successOnline"); + stopConfig(); + if (deviceCode.equals("123456")) { + bindDevice(); + } else { + if (!mIsDeviceSearched) { + mIsDeviceSearched = true; + searchDevice(PROGRESS_TIMEOUT_TIME); + } else if (mIsDeviceInitSuccess) {//设备初始化成功且在线,则绑定 + unBindDeviceInfo(); + } + } + // unBindDeviceInfo(); + break; + case successAddDevice: + // DeviceInfo device = (DeviceInfo) msg.obj; + // success(device.getUuid()); + isRefreshCamera = true; + Log.d(tag, "SuccessAddDevice"); + toast("SuccessAddDevice"); + // 只有这么一种情况 + setResult(RESULT_OK); + EventBus.getDefault().post( + new ChooseHomeEvent("5")); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + sec = 101; + Intent intent; + if (getIntent().getExtras().get("deviceType").toString().equals(GATE_WAY)) { + intent = new Intent(DeviceAddActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + } else { + intent = new Intent(DeviceAddActivity.this, AddCompleteAndRenameActivity.class); + } + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + startActivity(intent); + finish(); + break; + case UPDATE_SEC: + if (sec > 1 && sec < 101) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else if (sec <= 1) { + gotoTimeOutActivity(); + } + break; + default: + break; + } + } + }; + + //开始匹配 + mIsDeviceSearched = false; + mIsOffline = true; + mIsDeviceInitSuccess = false; + showWifiConfig(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void gotoTimeOutActivity() { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent1 = new Intent(DeviceAddActivity.this, TimeOutActivity.class); + intent1.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent1.putExtra("password", getIntent().getExtras().get("password").toString()); + intent1.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent1.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent1.putExtra("deviceSN", deviceSN); + intent1.putExtra("deviceCode", deviceCode); + intent1.putExtra("from", "LcnDeviceAddActivity"); + startActivity(intent1); + finish(); + } + + @Override + public void onBackPressed() { + // super.onBackPressed(); + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + private void showIsFinishThis() { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + sec = 101; + stopConfig(); + finish(); + break; + } + } + }); + dialog.setContent("您还未完成配置,如果退出,您将可能重新开始配置流程"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + sec = 101; + time = 0; + stopConfig(); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + /** + * 校验在线 + */ + + /*private void checkOnline() { + Business.getInstance().checkOnline(devId, + new Handler() { + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + switch (msg.what) { + case 0: + if (((DeviceOnline.Response) retObject.resp).data.onLine.equals("1")) { + toast("Online"); + mHandler.obtainMessage(successOnline).sendToTarget(); + } else { + if(isCheckOnline) { + Logger.d(TAG,"onLine : "+((DeviceOnline.Response) retObject.resp).data.onLine); + mHandler.obtainMessage(CHECK_DEVICE_ONLINE).sendToTarget(); + } + } + break; + case -1000: + Logger.e(TAG,"check_online_respond : -1000"); + mHandler.obtainMessage(ON_LINE_FAILED).sendToTarget(); + break; + default: + Logger.e(TAG,"checkonline : "+msg.what); + mHandler.obtainMessage(ON_LINE_FAILED).sendToTarget(); + break; + } + } + }); + + }*/ + private void checkOnline() { + // 隔两秒轮询..... + Log.d(tag, "轮询" + deviceSN); + Business.getInstance().checkOnline(deviceSN, + new Handler() { + @Override + public void handleMessage(Message msg) { + if (!mIsOffline) + return; + + RetObject retObject = (RetObject) msg.obj; + Log.d(tag, "轮询" + msg.what); + switch (msg.what) { + case 0: + if (((DeviceOnline.Response) retObject.resp).data.onLine.equals("1")) { + switch (mConfigStatus) { + case wired: + Log.d(tag, "有线配对...."); + break; + case query: + Log.d(tag, "轮询...."); + stopConfig(); + case wifipair: + mProgressDialog.setStop(); + } + toast("Online"); + mIsOffline = false; + mHandler.obtainMessage(successOnline).sendToTarget(); + } else { + if (mConfigStatus == ConfigStatus.wired) { + Log.d(tag, "offline..... wired"); + toast("offline"); + gotoTimeOutActivity(); + } else if (time > 0) { + Log.d(tag, "offline..... try again checkOnline"); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + time--; + mHandler.obtainMessage(startPolling) + .sendToTarget(); + } else { + Log.d(tag, "offline..... try again max"); + mProgressDialog.setStop(); + time = 25; + toast("offline"); + } + } + break; + case -1000: + if (time > 0) { + Log.d(tag, + "code:-1000..... try again checkOnline"); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + time--; + mHandler.obtainMessage(startPolling) + .sendToTarget(); + } + break; + default: + switch (mConfigStatus) { + case wired: + Log.d(tag, "有线配对失败...."); + break; + case query: + Log.d(tag, "轮询失败...."); + stopConfig(); + case wifipair: + mProgressDialog.setStop(); + } + toast(retObject.mMsg); + break; + } + } + }); + + } + + /** + * 绑定 + */ + private void bindDevice() { + //调后台接口 + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceSN); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("code", key); + if (AppIdUtil.isBaseZhiKong()) { + map.put("addressId", localAddAddressId); + } else { + if (null != getIntent().getExtras().get("deviceAddress")) { + map.put("addressId", getIntent().getExtras().get("deviceAddress").toString()); + } else { + map.put("addressId", "1"); + } + } + map.put("deviceModel", "0"); + map.put("deviceType", getIntent().getExtras().get("deviceType").toString()); + map.put("wifiName", getIntent().getExtras().get("ssid").toString()); + if (null != homeListEntity && TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + } + netWorkUtil.requestPostByAsynewApi(BIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("bindDevice", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + mHandler.obtainMessage(successAddDevice).sendToTarget(); + } + + @Override + public void onFail(String message) { + toast("addDevice failed"); + } + }); + } + + private void unBindDeviceInfo() { + if (!Business.getInstance().isOversea) { + Business.getInstance().unBindDeviceInfo(deviceSN, new Handler() { + public void handleMessage(Message msg) { + String message = (String) msg.obj; + Log.d(tag, "unBindDeviceInfo," + message); + if (msg.what == 0) { + if (message.contains("Auth")) { + if (sec > 99) { + return; + } + bindDevice(); + } else if (message.contains("RegCode")) { + key = deviceCode; + if (sec > 99) { + return; + } + bindDevice(); + } else { + key = ""; + if (sec > 99) { + return; + } + bindDevice(); + } + } else { + /*toast("unBindDeviceInfo failed"); + Log.d(tag, message);*/ + + if (!deviceCode.equals("123456")) { + key = deviceCode; + } else { + key = "ysz123456"; + } + bindDevice(); + } + } + }); + } else { //oversea + // unBindDeviceInfo(); + if (!deviceCode.equals("123456")) { + key = deviceCode; + } else { + key = "ysz123456"; + } + bindDevice(); + } + + } + + /** + * 启动无线配对 + */ + private void startConfig() { + // 开启播放加载控件 + mProgressDialog.setStart(getString(R.string.wifi_config_loading)); + + /*String ssid = mWifiInfo.getSSID().replaceAll("\"", ""); + String ssid_pwd = mPwdText.getText().toString(); + String code = mSnText.getText().toString().toUpperCase();*/ + + String ssid = getIntent().getExtras().get("ssid").toString().replaceAll("\"", ""); + String ssid_pwd = getIntent().getExtras().get("password").toString(); + String code = deviceSN.toUpperCase(); + + String mCapabilities = getWifiCapabilities(ssid); + // 无线超时任务 + mHandler.postDelayed(progressRun, PROGRESS_TIMEOUT_TIME); + // 10s开启轮询 + // mHandler.postDelayed(progressPoll, PROGRESS_DELAY_TIME); + // 调用接口,开始通过smartConfig匹配 + // System.out.println("mLinkIPCProxy.start"); + /*LCOpenSDK_ConfigWifi.configWifiStart(code, ssid, ssid_pwd, + mCapabilities, mHandler);*/ + LCOpenSDK_ConfigWifi.configWifiStart(code, ssid, ssid_pwd, "WPA2", LCSmartConfig.ConfigType.LCConfigWifi_Type_ALL, true, 11000, 1); + + //LCOpenSDK_ConfigWifi.configWifiStart(code, ssid, ssid_pwd, "WPA2", LCSmartConfig.ConfigType.LCConfigWifi_Type_ALL,true,11000,1); + searchDevice(PROGRESS_TIMEOUT_TIME); + } + + /** + * 关闭无线配对 + */ + private void stopConfig() { + mHandler.removeCallbacks(progressRun); + LCOpenSDK_ConfigWifi.configWifiStop();// 调用smartConfig停止接口 + } + + /** + * 获取wifi加密信息 + */ + private String getWifiCapabilities(String ssid) { + String mCapabilities = null; + ScanResult mScanResult = null; + WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Activity.WIFI_SERVICE); + if (mWifiManager != null) { + WifiInfo mWifi = mWifiManager.getConnectionInfo(); + if (mWifi != null) { + // 判断SSID是否�?�� + if (mWifi.getSSID() != null + && mWifi.getSSID().replaceAll("\"", "").equals(ssid)) { + List mList = mWifiManager.getScanResults(); + if (mList != null) { + for (ScanResult s : mList) { + if (s.SSID.replaceAll("\"", "").equals(ssid)) { + mScanResult = s; + break; + } + } + } + } + } + } + mCapabilities = mScanResult != null ? mScanResult.capabilities : null; + return mCapabilities; + } + + private void toast(String content) { + /*Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT) + .show();*/ + /*runOnUiThread(new Runnable() { + @Override + public void run() { + ToastUtil.show(LcnDeviceAddActivity.this, content); + } + });*/ + } + + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + // TODO Auto-generated method stub + if (grantResults.length == 1 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // Camera permission has been granted, preview can be displayed + showPairDescription(); + + } else { + toast(getString(R.string.toast_permission_location_forbidden)); + + } + + } + + /** + * 开启无线配网流程(权限检查,配对说明) + */ + public void showWifiConfig() { + boolean isMinSDKM = Build.VERSION.SDK_INT < 23; + boolean isGranted = ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; + if (isMinSDKM || isGranted) { + + showPairDescription(); + // 开启无线配对 + return; + } + + requestLocationPermission(); + } + + /** + * 显示配对说明 + */ + private void showPairDescription() { + startConfig(); + /*DialogInterface.OnClickListener dialogOnclicListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case Dialog.BUTTON_POSITIVE: + startConfig(); + break; + case Dialog.BUTTON_NEGATIVE: + break; + case Dialog.BUTTON_NEUTRAL: + break; + } + } + }; + // dialog参数设置 + AlertDialog.Builder builder = new AlertDialog.Builder( + LcnDeviceAddActivity.this); // 先得到构造器 + builder.setTitle(R.string.devices_config_dialog_title); // 设置标题 + builder.setMessage(R.string.devices_config_dialog_message); // 设置内容 + builder.setPositiveButton(R.string.dialog_positive, + dialogOnclicListener); + builder.setNegativeButton(R.string.dialog_negative, + dialogOnclicListener); + builder.create().show();*/ + } + + /** + * 请求相关权限 + */ + private void requestLocationPermission() { + if (ActivityCompat.shouldShowRequestPermissionRationale(this, + Manifest.permission.ACCESS_FINE_LOCATION)) { + + Log.d("Uriah", "Uriah + shouldShowRequestPermission true"); + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + 1); + } else { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + 1); + } + } + + private void searchDevice(int timeout) { + final String deviceId = deviceSN; + Business.getInstance().searchDevice(deviceId, timeout, new Handler() { + public void handleMessage(final Message msg) { + if (msg.what < 0) { + if (msg.what == -2) + mHandler.obtainMessage(deviceSearchFailed, "device not found").sendToTarget(); + else + mHandler.obtainMessage(deviceSearchFailed, "StartSearchDevices failed").sendToTarget(); + return; + } + + mHandler.obtainMessage(deviceSearchSuccess, msg.obj).sendToTarget(); + } + }); + } + + private void searchDeviceEx() { + final EditText et = new EditText(DeviceAddActivity.this); + final String deviceId = deviceSN; + + //设备初始化 + Business.getInstance().searchDevice(deviceId, 15000, new Handler() { + public void handleMessage(final Message msg) { + if (msg.what < 0) { + if (msg.what == -2) + mHandler.obtainMessage(deviceInitFailed, "device not found").sendToTarget(); + else + mHandler.obtainMessage(deviceInitFailed, "StartSearchDevices failed").sendToTarget(); + return; + } + + final DeviceInitInfo deviceInitInfo = (DeviceInitInfo) msg.obj; + final int status = deviceInitInfo.mStatus; + + //not support init + if (status == 0 && !Business.getInstance().isOversea) { + key = ""; + mHandler.obtainMessage(deviceInitSuccess, "inner, go bind without key").sendToTarget(); + } else { + if (status == 1) { + et.setHint(getString(R.string.toast_adddevice_input_device_key_to_init)); + } else { + et.setHint(getString(R.string.toast_adddevice_input_device_key_after_init)); + } + + AlertDialog dialog = new AlertDialog.Builder(DeviceAddActivity.this) + .setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info) + .setView(et) + .setPositiveButton(R.string.dialog_positive, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + key = et.getText().toString(); + if (status == 0 || status == 2) { + if (Business.getInstance().isOversea) + checkPwdValidity(deviceId, key, mHandler); + else + mHandler.obtainMessage(deviceInitSuccess, "Inner, go bind with key").sendToTarget(); + } else if (status == 1) { + Business.getInstance().initDevice(deviceInitInfo.mMac, key, new Handler() { + public void handleMessage(Message msg) { + String message = (String) msg.obj; + if (msg.what == 0) { + mHandler.obtainMessage(deviceInitSuccess, message).sendToTarget(); + } else { + mHandler.obtainMessage(deviceInitFailed, message).sendToTarget(); + } + } + + ; + }); + } + } + }) + .setNegativeButton(R.string.dialog_negative, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mHandler.obtainMessage(deviceInitFailed, "Init has been cancelled").sendToTarget(); + } + }) + .create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); + } + } + }); + + } + + public void initDevice(final DeviceInitInfo deviceInitInfo, int initMode) { + //1.使用组播进行初始化(initMode=INITMODE_MULTICAST),走else流程 + //2.组播失败后再使用单播(initMode=INITMODE_UNICAST),此时直接使用组播时输入的秘钥进行初始化 + if (initMode == INITMODE_UNICAST) { + Business.getInstance().initDeviceByIP(deviceInitInfo.mMac, deviceInitInfo.mIp, key, new Handler() { + public void handleMessage(Message msg) { + String message = (String) msg.obj; + if (msg.what == 0) { + mHandler.obtainMessage(deviceInitSuccess, message).sendToTarget(); + } else { + mHandler.obtainMessage(deviceInitByIPFailed, message).sendToTarget(); + } + } + }); + } else { + final EditText et = new EditText(DeviceAddActivity.this); + final String deviceId = deviceSN; + final int status = deviceInitInfo.mStatus; + //not support init + if (status == 0 && !Business.getInstance().isOversea) { + key = ""; + mHandler.obtainMessage(deviceInitSuccess, "inner, go bind without key").sendToTarget(); + } else { + key = LECHENG_KEY; + if (status == 0 || status == 2) { + if (Business.getInstance().isOversea) + checkPwdValidity(deviceId, key, mHandler); + else + mHandler.obtainMessage(deviceInitSuccess, "Inner, go bind with key").sendToTarget(); + } else if (status == 1) { + Business.getInstance().initDevice(deviceInitInfo.mMac, key, new Handler() { + public void handleMessage(Message msg) { + String message = (String) msg.obj; + if (msg.what == 0) { + mHandler.obtainMessage(deviceInitSuccess, message).sendToTarget(); + } else { + mHandler.obtainMessage(deviceInitFailed, message).sendToTarget(); + } + } + + ; + }); + } + + /*AlertDialog dialog = new AlertDialog.Builder(LcnDeviceAddActivity.this) + .setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info) + .setView(et) + .setPositiveButton(R.string.dialog_positive, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }) + .setNegativeButton(R.string.dialog_negative, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mHandler.obtainMessage(deviceInitByIPFailed, "Init has been cancelled").sendToTarget(); + } + }) + .create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show();*/ + } + } + } + + public void checkPwdValidity(final String deviceId, final String key, final Handler handler) { + TaskPoolHelper.addTask(new RunnableTask("real") { + @Override + public void run() { + if (0 == Business.getInstance().checkPwdValidity(deviceId, key)) { + handler.obtainMessage(deviceInitSuccess, "checkPwdValidity success").sendToTarget(); + } else { + handler.obtainMessage(deviceInitByIPFailed, "checkPwdValidity failed").sendToTarget(); + } + } + }); + } + + private enum ConfigStatus { + query, wifipair, wired + } +} diff --git a/app/src/main/java/com/lechange/demo/manager/DeviceSetActivity.java b/app/src/main/java/com/lechange/demo/manager/DeviceSetActivity.java new file mode 100644 index 0000000..cc9a73f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/manager/DeviceSetActivity.java @@ -0,0 +1,348 @@ +package com.lechange.demo.manager; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; +import android.widget.ToggleButton; + +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.RetObject; +import com.lechange.demo.common.CommonTitle; +import com.lechange.demo.common.CommonTitle.OnTitleClickListener; +import com.lechange.demo.login.SplashActivity; +import com.yonsz.z1.R; + +public class DeviceSetActivity extends Activity { + + private String tag = "DeviceSetActivity"; + private SharedPreferences mSharedPreferences; + private CommonTitle mCommonTitle; + private ToggleButton mSwitch; // 报警订阅开关 + private ToggleButton mCloudMealBtn; // 云存储套餐开关 + private Button mModifyPwd; //修改设备密码 + private TextView mUpgrade; // 云升级开关 + private String mChannelUUID = null; + private int mCloudMealStates; // 云套餐状态 + private int mAlarmStates; // 报警计划状态 + private boolean mCanBeUpgrade; //设备是否可云升级 + private boolean IsClickSwitchBtn; // 是否主动修改动检开关(手势触发) + private boolean IsClickCloudMealBtn; // 是否主动修改套餐状态 (手势触发) + private LinearLayout mCloudStorageLL; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_set); + + mSharedPreferences = getSharedPreferences("OpenSDK", + SplashActivity.MODE_PRIVATE); + + mChannelUUID = getIntent().getStringExtra("UUID"); // 获取通道的UUID + + mSwitch = (ToggleButton) findViewById(R.id.switchPlan); + mCloudMealBtn = (ToggleButton) findViewById(R.id.cloudMealBtn); + mModifyPwd = (Button) findViewById(R.id.modify_device_pwd); + mUpgrade = (TextView) findViewById(R.id.device_upgrade_icon); + mCloudStorageLL= (LinearLayout) findViewById(R.id.cloudMeal); + mSwitch.setClickable(false); + mCloudMealBtn.setClickable(false); + mUpgrade.setClickable(false); + initTitle(); + setListener(); + getOriginStatus(); + + } + + @Override + protected void onDestroy() { + + super.onDestroy(); + } + + /** + * 初始化标题栏 + */ + public void initTitle() { + // 绘制标题 + mCommonTitle = (CommonTitle) findViewById(R.id.title); + mCommonTitle.initView(R.drawable.title_btn_back, 0, + R.string.devices_operation_name); + + mCommonTitle.setOnTitleClickListener(new OnTitleClickListener() { + @Override + public void onCommonTitleClick(int id) { + // TODO Auto-generated method stub + switch (id) { + case CommonTitle.ID_LEFT: + + finish(); + break; + } + } + }); + + if(!Business.getInstance().isOversea){ + mCloudStorageLL.setVisibility(View.VISIBLE); + } + } + + /** + * 获取初始状态 + */ + private void getOriginStatus() { +// String status = mSharedPreferences.getString("alarmPlan", ""); +// if (status != null) { +// mSwitch.setChecked(status.equals("open") ? true : false); +// } else {// 默认没有打开报警订阅 +// mSwitch.setChecked(false); +// mSharedPreferences.edit().putString("alarmPlan", "close").commit(); +// } +// mSwitch.setVisibility(View.VISIBLE); +// IsClickSwitchBtn = true; +// mSwitch.setClickable(true); + + // 初始化数据 + Business.getInstance().getDeviceInfo(mChannelUUID, new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + Bundle bundle = (Bundle) msg.obj; + if (msg.what == 0) { + + mAlarmStates = bundle.getInt("alarmStatus"); + mCloudMealStates = bundle.getInt("cloudStatus"); + mCanBeUpgrade = bundle.getBoolean("canBeUpgrade"); + + if (mCloudMealStates == 1) { + IsClickCloudMealBtn = false; + mCloudMealBtn.setChecked(true); + } + if (mAlarmStates == 1) { + IsClickSwitchBtn = false; + mSwitch.setChecked(true); + } + + if (!mCanBeUpgrade) { + mUpgrade.setVisibility(View.INVISIBLE); + } + + mSwitch.setVisibility(View.VISIBLE); + mCloudMealBtn.setVisibility(View.VISIBLE); + + } else { + Toast.makeText(DeviceSetActivity.this, + R.string.toast_device_get_init_info_failed, + Toast.LENGTH_SHORT).show(); + } + + IsClickCloudMealBtn = true; + IsClickSwitchBtn = true; + mSwitch.setClickable(true); + mCloudMealBtn.setClickable(true); + mUpgrade.setClickable(true); + } + }); + } + + /** + * 设置监听函数 + */ + public void setListener() { + mSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton view, boolean state) { + + // 如果是手势触发,则进行网络请求 + if (IsClickSwitchBtn) { + modifyAlarmPlan(state); + } + + } + }); + + mCloudMealBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton view, boolean state) { + // 如果是手势触发,则进行网络请求 + if (IsClickCloudMealBtn) { + //暂不支持此功能 +// Toast.makeText(DeviceSetActivity.this, "Not support now", Toast.LENGTH_SHORT).show(); + setStorageStrategy(state); + } + } + }); + + mModifyPwd.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + modifyDevicePassword(); + } + }); + + mUpgrade.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (!mCanBeUpgrade) { + Toast.makeText(DeviceSetActivity.this, "No upgrade", Toast.LENGTH_SHORT).show(); + return; + } + + UpgradeDevice(); + } + }); + } + + /** + * 设置云套餐状态 + * + * @param states + * 开启关闭状态 + */ + public void setStorageStrategy(final boolean state) { + + mCloudMealBtn.setClickable(false); + String states = null; + if (state) { + states = "on"; + } else { + states = "off"; + } + Business.getInstance().setStorageStartegy(states, mChannelUUID, + new Handler() { + + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + DeviceSetActivity.this, + R.string.toast_storagestrategy_update_success, + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + DeviceSetActivity.this, + R.string.toast_storagestrategy_update_failed, + Toast.LENGTH_SHORT).show(); + IsClickCloudMealBtn = false; + mCloudMealBtn.setChecked(!state); + } + IsClickCloudMealBtn = true; + mCloudMealBtn.setClickable(true); + } + }); + } + + /** + * 修改动检计划状态 + * + * @param enable + * 动检计划开启与否 + */ + public void modifyAlarmPlan(final boolean enable) { + + mSwitch.setClickable(false); + Business.getInstance().modifyAlarmStatus(enable, mChannelUUID, + new Handler() { + + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText(DeviceSetActivity.this, + R.string.toast_alarmplan_modifyalarmstatus_success, + Toast.LENGTH_LONG).show(); + + mSharedPreferences + .edit() + .putString("alarmPlan", enable ? "open" : "close").commit(); + } else { + Toast.makeText(DeviceSetActivity.this, + R.string.toast_alarmplan_modifyalarmstatus_failed, + Toast.LENGTH_LONG).show(); + IsClickSwitchBtn = false; + mSwitch.setChecked(!enable); + } + IsClickSwitchBtn = true; + mSwitch.setClickable(true); + } + + }); + } + + /** + * 修改设备密码 + */ + public void modifyDevicePassword() { + LinearLayout layout = (LinearLayout) LinearLayout.inflate(this, R.layout.dialog_modify_device_password, null); + final EditText oldPwd = (EditText) layout.findViewById(R.id.old_pwd); + final EditText newPwd = (EditText) layout.findViewById(R.id.new_pwd); + new AlertDialog.Builder(DeviceSetActivity.this) + .setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info) + .setView(layout) + .setPositiveButton(R.string.dialog_positive, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + String oldKey = oldPwd.getText().toString(); + String newKey = newPwd.getText().toString(); + String deviceId = Business.getInstance().getChannel(mChannelUUID).getDeviceCode(); + + Business.getInstance().modifyDevicePwd(deviceId, oldKey, newKey, new Handler(){ + @Override + public void handleMessage(Message msg) { + RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0) { + Toast.makeText(DeviceSetActivity.this, "modigyDevicePwd success", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(DeviceSetActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + } + }).setNegativeButton(R.string.dialog_negative, null).show(); + } + + /** + * 设备云升级 + */ + public void UpgradeDevice() { + + mUpgrade.setClickable(false); + Business.getInstance().upgradeDevice(mChannelUUID, new Handler() { + + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText(DeviceSetActivity.this, + R.string.toast_cloudupdate_success, + Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(DeviceSetActivity.this, + R.string.toast_cloudupdate_failed, + Toast.LENGTH_LONG).show(); + } + mUpgrade.setClickable(true); + } + + }); + } +} diff --git a/app/src/main/java/com/lechange/demo/manager/SoftAPActivity.java b/app/src/main/java/com/lechange/demo/manager/SoftAPActivity.java new file mode 100644 index 0000000..06afe02 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/manager/SoftAPActivity.java @@ -0,0 +1,608 @@ +package com.lechange.demo.manager; + +import android.content.Intent; +import android.content.IntentFilter; +import android.net.wifi.WifiInfo; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.common.log.Logger; +import com.lechange.demo.dialog.PasswordDialog; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.util.WifiManagerUtil; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.listener.PasswordSetListener; +import com.lechange.demo.yonsz.TimeOutActivity; +import com.lechange.opensdk.api.bean.CheckDeviceBindOrNot; +import com.lechange.opensdk.api.bean.DeviceOnline; +import com.lechange.opensdk.softap.LCOpenSDK_SoftAPConfig; +import com.lechange.opensdk.utils.NetWorkUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.BIND_DEVICE; + +public class SoftAPActivity extends FragmentActivity implements Handler.Callback, View.OnClickListener, PasswordSetListener, Runnable { + + public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; + private static final String TAG = "LCOpenSDK_Demo_SoftAPActivity"; + private final int ON_LINE_SUCCESS = 0x11; + private final int ON_LINE_FAILED = 0x12; + private final int CHECK_DEVICE_ONLINE = 0X1B; + private final int ADD_DEVICE_SUCCESS = 0x13; + // MyBroadcastReceiver broadcastReceiver; + TextView mSSidView; + TitleView mTitleView; + private boolean isCheckOnline = true; + private boolean isSC = false; + private Handler handler; + Runnable checkRunnable = new Runnable() { + @Override + public void run() { + //30秒后移除在线检查,并且返回失败,正常情况第一次就可以查询到在线的状态 + handler.removeCallbacksAndMessages(CHECK_DEVICE_ONLINE); + handler.obtainMessage(ON_LINE_FAILED).sendToTarget(); + isCheckOnline = false; + Logger.d(TAG, "check online timeout"); + } + }; + private String devHotSpot = ""; + private String ssid = ""; + private String pwd = ""; + private String scCode = ""; + private String devId; + private String devType; + private WifiManagerUtil managerUtil; + private PasswordDialog passwordDialog; + private ProgressDialog mProgressDialog; // 播放加载使用 + private String key = ""; + private StateButton mStateButton; + private int sec = 120; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.soft_ap_activity); + // 绘制标题 + mTitleView = (TitleView) findViewById(R.id.title_lecheng_add); + mTitleView.setHead("设备添加"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mProgressDialog = (ProgressDialog) this.findViewById(R.id.query_load); + /*findViewById(R.id.start_softAP_config).setOnClickListener(this); + findViewById(R.id.start_check_online).setOnClickListener(this);*/ + managerUtil = new WifiManagerUtil(getApplicationContext()); + devId = getIntent().getStringExtra("devId"); + devType = getIntent().getStringExtra("devType"); + ssid = getIntent().getStringExtra("ssid"); + pwd = getIntent().getStringExtra("mPwd"); + scCode = getIntent().getStringExtra("scCode"); + if (scCode != null && scCode.length() == 8) { + isSC = true; + } + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(CONNECTIVITY_CHANGE_ACTION); + // broadcastReceiver=new MyBroadcastReceiver(); + // registerReceiver(broadcastReceiver, intentFilter); + handler = new Handler(this); + passwordDialog = new PasswordDialog(); + passwordDialog.setListener(this); + devHotSpot = devType + "-" + devId.substring(devId.length() - 4); + // mSSidView.setText(getResources().getString(R.string.connect_wifi_name) + " : " + ssid); + + startApConfig(); + + handler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + + @Override + public boolean handleMessage(Message msg) { + switch (msg.what) { + case LCOpenSDK_SoftAPConfig.MSG_WHAT: + mProgressDialog.setStop(); + Toast.makeText(getApplicationContext(), String.valueOf(msg.arg1), Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), getResources().getString(R.string.switch_wifi_and_start_check_online), Toast.LENGTH_LONG).show(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + checkOnlineState(); + } + }, 35000); + break; + case CHECK_DEVICE_ONLINE: + // checkOnline(); + // checkOnBindAndRemind(); + bindDevice(); + // unBindDevice(); + break; + case ON_LINE_FAILED: + Logger.d(TAG, "check_online_failed"); + Toast.makeText(getApplicationContext(), "check_online_failed", Toast.LENGTH_SHORT).show(); + handler.removeCallbacksAndMessages(CHECK_DEVICE_ONLINE); + mProgressDialog.setStop(); + break; + case ON_LINE_SUCCESS: + //设备在线 + Logger.d(TAG, "check_online_success"); + handler.removeCallbacks(checkRunnable); + if (scCode != null && scCode.length() == 8) { + key = scCode; + bindDevice(); + Logger.d(TAG, "scDevice, key = " + key + ", scCode = " + scCode); + } else { + unBindDeviceInfo(); + } + mProgressDialog.setStart(getResources().getString(R.string.binding_device)); + break; + case ADD_DEVICE_SUCCESS: + mProgressDialog.setStop(); + Logger.d(TAG, "add_device_success"); + Toast.makeText(getApplicationContext(), "SuccessAddDevice", Toast.LENGTH_SHORT).show(); + /*startActivity(new Intent(SoftAPActivity.this, DevicelistActivity.class)); + finish();*/ + EventBus.getDefault().post( + new ChooseHomeEvent("5")); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(SoftAPActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceType", GATE_WAY); + intent.putExtra("deviceSN", devId); + intent.putExtra("deviceModel", "1"); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + startActivity(intent); + finish(); + break; + case UPDATE_SEC: + if (sec > 1 && sec < 121) { + sec--; + handler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else if (sec <= 1) { + gotoTimeOutActivity(); + } + break; + + + } + + return false; + } + + private void gotoTimeOutActivity() { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent1 = new Intent(SoftAPActivity.this, TimeOutActivity.class); + intent1.putExtra("ssid", ssid); + intent1.putExtra("pwd", pwd); + intent1.putExtra("devId", devId); + intent1.putExtra("scCode", scCode); + intent1.putExtra("devType", devType); + intent1.putExtra("from", "SoftAPActivity"); + startActivity(intent1); + finish(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + /*case R.id.start_softAP_config: + startApConfig(); + + // } else { + // Toast.makeText(getApplicationContext(), getString(R.string.connect_device_wifi), Toast.LENGTH_SHORT).show(); + // } + break; + + case R.id.start_check_online: + checkOnlineState(); + break;*/ + } + } + + private void checkOnlineState() { + isCheckOnline = true; + handler.obtainMessage(CHECK_DEVICE_ONLINE).sendToTarget(); + handler.postDelayed(checkRunnable, 30 * 1000); + mProgressDialog.setStart(getResources().getString(R.string.checking_device_online)); + } + + private void startApConfig() { + if (!managerUtil.isWifi(getApplicationContext())) { + Toast.makeText(getApplicationContext(), getString(R.string.connect_device_wifi), Toast.LENGTH_SHORT).show(); + return; + } + Logger.d(SoftAPActivity.this.getClass().getSimpleName(), " devHotSpot : " + devHotSpot); + // if (isConnectedDevHot()) { + if (null != passwordDialog && !passwordDialog.isAdded()) { + handler.removeCallbacks(SoftAPActivity.this); + mProgressDialog.setStart(getString(R.string.search_devices)); + Business.getInstance().searchDevice(devId, 30 * 1000, new Handler() { + public void handleMessage(final Message msg) { + if (msg.what == 0 || msg.what == 1 || msg.what == 2) { + /*//需要初始化 + passwordDialog.setCurrentType(1); + passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + } else if (msg.what == 2) { + //已经初始化 + passwordDialog.setCurrentType(2); + passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + } else if (msg.what == 0) { + //不需要初始化 + passwordDialog.setCurrentType(0); + passwordDialog.show(getSupportFragmentManager(), "passwordDialog");*/ + mProgressDialog.setStart(getResources().getString(R.string.soft_ap_config)); + key = scCode; + LCOpenSDK_SoftAPConfig.startSoftAPConfig(ssid, pwd, devId, key, isSC, handler, 30 * 1000); + } else { + Toast.makeText(getApplicationContext(), getResources().getString(R.string.search_devices_timeout), Toast.LENGTH_LONG).show(); + mProgressDialog.setStop(); + } + } + }); + + } + } + + + //是否已连上设备热点 + public boolean isConnectedDevHot() { + // return true; + boolean isWifiConnected = NetWorkUtil.NetworkType.NETWORK_WIFI.equals(NetWorkUtil.getNetworkType(getApplicationContext())); + WifiInfo wifiInfo = managerUtil.getCurrentWifiInfo(); + if (wifiInfo == null || !isWifiConnected) { + return false; + } else { + String ssid = "\"" + this.devHotSpot + "\""; + return wifiInfo.getSSID().equals(ssid); + } + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + // unregisterReceiver(broadcastReceiver); + LCOpenSDK_SoftAPConfig.cancel(); + if (handler != null) { + handler.removeCallbacksAndMessages(null); + isCheckOnline = false; + handler = null; + } + + } + + + /** + * 校验在线 + */ + private void checkOnline() { + Business.getInstance().checkOnline(devId, + new Handler() { + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + switch (msg.what) { + case 0: + if (((DeviceOnline.Response) retObject.resp).data.onLine.equals("1")) { + handler.obtainMessage(ON_LINE_SUCCESS).sendToTarget(); + } else { + if (isCheckOnline) { + Logger.d(TAG, "onLine : " + ((DeviceOnline.Response) retObject.resp).data.onLine); + handler.obtainMessage(CHECK_DEVICE_ONLINE).sendToTarget(); + } + } + break; + case -1000: + Logger.e(TAG, "check_online_respond : -1000 " + ((Business.RetObject) msg.obj).mMsg); + handler.obtainMessage(ON_LINE_FAILED).sendToTarget(); + Toast.makeText(getApplicationContext(), ((Business.RetObject) msg.obj).mMsg, Toast.LENGTH_SHORT).show(); + break; + default: + Logger.e(TAG, "checkonline : " + msg.what); + handler.obtainMessage(ON_LINE_FAILED).sendToTarget(); + Toast.makeText(getApplicationContext(), ((Business.RetObject) msg.obj).mMsg, Toast.LENGTH_SHORT).show(); + break; + } + } + }); + + } + + private void unBindDevice() { + Business.getInstance().unBindDevice(devId, new Handler() { + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + Toast.makeText(getApplicationContext(), R.string.toast_device_delete_success, Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + + } + }); + } + + private void unBindDeviceInfo() { + Logger.e(TAG, "------------isOversea = " + Business.getInstance().isOversea()); + if (!Business.getInstance().isOversea()) { + + Business.getInstance().unBindDeviceInfo(devId, new Handler() { + public void handleMessage(Message msg) { + String message = (String) msg.obj; + // Log.d(tag, "unBindDeviceInfo,"+message); + if (msg.what == 0) { + if (message.contains("Auth")) { + Logger.d(TAG, " Auth bindDevice(), key = :" + key + ", deviceID = " + devId); + bindDevice(); + } else if (message.contains("RegCode")) { + /*final EditText et = new EditText(SoftAPActivity.this); + final AlertDialog dialog = new AlertDialog.Builder(SoftAPActivity.this) + .setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info) + .setView(et) + .setPositiveButton(R.string.dialog_positive, null) + .setNegativeButton(R.string.dialog_negative, null) + .create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); + + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + if (TextUtils.isEmpty(et.getText())) { + Toast.makeText(getApplicationContext(), "Input can't be empty", Toast.LENGTH_SHORT).show(); + return; + } + key = et.getText().toString(); + bindDevice(); + dialog.dismiss(); + } + });*/ + key = scCode; + bindDevice(); + } else { + key = ""; + bindDevice(); + } + } else { + mProgressDialog.setStop(); + Toast.makeText(getApplicationContext(), "unBindDeviceInfo failed", Toast.LENGTH_SHORT).show(); + Logger.d(TAG, message); + } + } + }); + } else { //oversea + Logger.d(TAG, " oversea bindDevice(), key = :" + key + ", deviceID = " + devId); + bindDevice(); + } + + } + + + /** + * 绑定 + */ + /*private void bindDevice() { + //设备绑定 + Business.getInstance().bindDevice(devId, key, + new Handler() { + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + handler.obtainMessage(ADD_DEVICE_SUCCESS).sendToTarget(); + } else { + Toast.makeText(getApplicationContext(), getResources().getString(R.string.addDevice_failed), Toast.LENGTH_SHORT).show(); + Logger.d(TAG, retObject.mMsg); + } + } + }); + }*/ + + + /** + * 绑定 + */ + private void bindDevice() { + com.yonsz.z1.net.NetWorkUtil netWorkUtil = com.yonsz.z1.net.NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devId); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("code", key); + if (AppIdUtil.isBaseZhiKong()) { + map.put("addressId", localAddAddressId); + } else { + if (null != getIntent().getExtras().get("deviceAddress")) { + map.put("addressId", getIntent().getExtras().get("deviceAddress").toString()); + } else { + map.put("addressId", "1"); + } + } + map.put("deviceModel", "1"); + map.put("thirdModel", "G2"); + map.put("deviceType", GATE_WAY); + map.put("wifiName", ssid); + if (null != homeListEntity && !TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + } + netWorkUtil.requestPostByAsynewApi(BIND_DEVICE, map, new com.yonsz.z1.net.NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("bindDevice", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + handler.obtainMessage(ADD_DEVICE_SUCCESS).sendToTarget(); + } else { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), obj.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + } + } + + @Override + public void onFail(String message) { +// Toast.makeText(getApplicationContext(), getResources().getString(R.string.addDevice_failed), Toast.LENGTH_SHORT).show(); + } + }); + } + + + @Override + public void onSaveSuccess(String psw1) { + mProgressDialog.setStart(getResources().getString(R.string.soft_ap_config)); + // if(Business.getInstance().isOversea()){//海外软AP需携带code过去 + key = psw1; + // } + LCOpenSDK_SoftAPConfig.startSoftAPConfig(ssid, pwd, devId, psw1, isSC, handler, 30 * 1000); + } + + @Override + public void onWifiPassWord(String psw1) { + + } + + @Override + public void run() { + //超时操作 + Toast.makeText(getApplicationContext(), getString(R.string.switch_wifi_timeout), Toast.LENGTH_SHORT).show(); + } + + /** + * 检查是否已被绑定 + */ + public void checkOnBindAndRemind() { + Business.getInstance().checkBindOrNot(devId, + new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + CheckDeviceBindOrNot.Response resp = (CheckDeviceBindOrNot.Response) retObject.resp; + if (!resp.data.isBind) { + checkOnline(); + } else if (resp.data.isBind && resp.data.isMine) { + Toast.makeText(getApplicationContext(), getString(R.string.toast_adddevice_already_binded_by_self), Toast.LENGTH_SHORT).show(); + handler.removeCallbacks(checkRunnable); + mProgressDialog.setStop(); + } else { + Toast.makeText(getApplicationContext(), getString(R.string.toast_adddevice_already_binded_by_others), Toast.LENGTH_SHORT).show(); + handler.removeCallbacks(checkRunnable); + mProgressDialog.setStop(); + } + } else { + Toast.makeText(getApplicationContext(), retObject.mMsg, Toast.LENGTH_SHORT).show(); + handler.removeCallbacks(checkRunnable); + mProgressDialog.setStop(); + } + } + }); + } + + // public class MyBroadcastReceiver extends android.content.BroadcastReceiver { + // @Override + // public void onReceive(Context context, Intent intent) { + // if (intent.getAction().equals(CONNECTIVITY_CHANGE_ACTION)) { + // if (isConnectedDevHot()) { + // if (null != passwordDialog && !passwordDialog.isAdded()) { + // handler.removeCallbacks(SoftAPActivity.this); + // mProgressDialog.setStart(getString(R.string.switch_wifi_success)); + // Business.getInstance().searchDevice(devId, 30 * 1000, new Handler() { + // public void handleMessage(final Message msg) { + // if (msg.what == 1) { + // passwordDialog.setCurrentType(1); + // passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + // } else if (msg.what == 2) { + // Toast.makeText(getApplicationContext(), getString(R.string.please_reset_device), Toast.LENGTH_LONG).show(); + // passwordDialog.setCurrentType(1); + // passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + // } else if (msg.what == 0) { + // passwordDialog.setCurrentType(1); + // passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + // } + // } + // }); + // + // } + // + // } + // } + // + // } + // } + + + @Override + protected void onResume() { + super.onResume(); + // if (isConnectedDevHot()) { + // if (null != passwordDialog && !passwordDialog.isAdded()) { + // handler.removeCallbacks(SoftAPActivity.this); + // mProgressDialog.setStart(getString(R.string.switch_wifi_success)); + // Business.getInstance().searchDevice(devId, 30 * 1000, new Handler() { + // public void handleMessage(final Message msg) { + // if (msg.what == 1) { + // passwordDialog.setCurrentType(1); + // passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + // } else if (msg.what == 2) { + // Toast.makeText(getApplicationContext(), getString(R.string.please_reset_device), Toast.LENGTH_LONG).show(); + // mProgressDialog.setStop(); + // } else if (msg.what == 0) { + // passwordDialog.setCurrentType(1); + // passwordDialog.show(getSupportFragmentManager(), "passwordDialog"); + // } + // } + // }); + // } + // } + } +} diff --git a/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayActivity.java b/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayActivity.java new file mode 100644 index 0000000..d7d0ebf --- /dev/null +++ b/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayActivity.java @@ -0,0 +1,218 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayActivity.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.mediaplay; + +import android.Manifest; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.View; + +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.util.PermissionHelper; +import com.lechange.demo.mediaplay.fragment.MediaPlayFragment; +import com.lechange.demo.mediaplay.fragment.MediaPlayOnlineFragment; +import com.lechange.demo.yonsz.CameraDetailActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; + +import de.greenrobot.event.EventBus; + +/** + * 描述:视频播放Activity 作者: lc + */ +public class MediaPlayActivity extends BaseActivity implements + MediaPlayFragment.BackHandlerInterface, + OnRequestPermissionsResultCallback { + public static final int IS_VIDEO_ONLINE = 1; + public static final int IS_VIDEO_REMOTE_RECORD = 2; + public static final int IS_VIDEO_REMOTE_CLOUD_RECORD = 3; + private final static String tag = "MediaPlayActivity"; + private TitleView mTitleView; + private MediaPlayFragment mMediaPlayFragment; + private ArrayList uuidStringList; + private int firstPosition; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + finish(); + } + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("2") || msg.equals("5")) { + + } else { + mTitleView.setHead(msg); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_media_video); + initView(); + } + + private void initView() { + /*uuidStringList = getIntent().getExtras().getStringArrayList("UUIDStringList"); + firstPosition = (int) getIntent().getExtras().get("position");*/ + ChannelInfo channel = Business.getInstance().getChannel(getIntent().getStringExtra("UUID")); + mTitleView = (TitleView) findViewById(R.id.title_media_play); + if (null != channel) { + mTitleView.setHead(channel.getName()); + } else { + mTitleView.setHead("实时预览"); + } + mTitleView.setHeadFuntion(R.drawable.icon_setup); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + // Intent intent = new Intent(MediaPlayActivity.this, DeviceSetActivity.class); + Intent intent = new Intent(MediaPlayActivity.this, CameraDetailActivity.class); + intent.putExtra("UUID", getIntent().getStringExtra("UUID")); + intent.putExtra("alarmPlanStatus", true); + intent.putExtra("cloudMealStatus", true); + startActivity(intent); + } + + @Override + public void onFunctionText() { + + } + }); + + PermissionHelper.requestPermission(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}); + // 嵌入使用的帧 + MediaPlayFragment mediaPlayFragment; // 引用的布局帧 + Bundle b = new Bundle(); + String resId; // 资源id号 + mediaPlayFragment = new MediaPlayOnlineFragment(); + // VideoContainerFragment containerFragment = new VideoContainerFragment(); + resId = getIntent().getStringExtra("UUID"); + // resId = uuidStringList.get(firstPosition); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + /*switch (getIntent().getIntExtra("TYPE", 0)) { + case IS_VIDEO_ONLINE: + mediaPlayFragment = new MediaPlayOnlineFragment(); + // VideoContainerFragment containerFragment = new VideoContainerFragment(); + resId = getIntent().getStringExtra("UUID"); + // resId = uuidStringList.get(firstPosition); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + *//*containerFragment.setArguments(b); + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, containerFragment) + .commitAllowingStateLoss();*//* + break; + case IS_VIDEO_REMOTE_RECORD: + mediaPlayFragment = new MediaPlayBackFragment(); + resId = getIntent().getStringExtra("ID"); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + break; + case IS_VIDEO_REMOTE_CLOUD_RECORD: + mediaPlayFragment = new MediaPlayBackFragment(); + resId = getIntent().getStringExtra("ID"); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + break; + default: + break; + }*/ + } + + /** + * boolean) 描述:切换fragment + */ + public void changeFragment(Fragment targetFragment, boolean isAddToStack) { + if (isAddToStack) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, targetFragment) + .addToBackStack(null).commitAllowingStateLoss(); + } else { + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, targetFragment) + .commitAllowingStateLoss(); + } + + } + + @Override + public void onBackPressed() { + if (mMediaPlayFragment == null || !mMediaPlayFragment.onBackPressed()) { + Log.d(tag, "onBackPressed"); + super.onBackPressed(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + EventBus.getDefault().post( + new ChooseHomeEvent("5")); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void setSelectedFragment(MediaPlayFragment backHandledFragment) { + // TODO Auto-generated method stub + this.mMediaPlayFragment = backHandledFragment; + } + + // 横竖屏切换需要,隐藏标题栏 + public void toggleTitle(boolean isShow) { + mTitleView.setVisibility(isShow ? View.VISIBLE : View.GONE); + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String[] permissions, int[] grantResults) { + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + // if (grantResults.length == 1 + // && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // + // } else { + // Toast.makeText(this, R.string.no_access_write_external_storage, + // Toast.LENGTH_SHORT).show(); + // } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayBackActivity.java b/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayBackActivity.java new file mode 100644 index 0000000..234314c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/mediaplay/MediaPlayBackActivity.java @@ -0,0 +1,197 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayActivity.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.mediaplay; + +import android.Manifest; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.View; + +import com.lechange.demo.business.util.PermissionHelper; +import com.lechange.demo.mediaplay.fragment.MediaPlayBackFragment; +import com.lechange.demo.mediaplay.fragment.MediaPlayFragment; +import com.lechange.demo.yonsz.CameraDetailActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; + +import de.greenrobot.event.EventBus; + +/** + * 描述:视频播放Activity 作者: lc + */ +public class MediaPlayBackActivity extends BaseActivity implements + MediaPlayFragment.BackHandlerInterface, + OnRequestPermissionsResultCallback { + public static final int IS_VIDEO_ONLINE = 1; + public static final int IS_VIDEO_REMOTE_RECORD = 2; + public static final int IS_VIDEO_REMOTE_CLOUD_RECORD = 3; + private final static String tag = "MediaPlayActivity"; + private TitleView mTitleView; + private MediaPlayFragment mMediaPlayFragment; + private ArrayList uuidStringList; + private int firstPosition; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_media_video); + initView(); + } + + private void initView() { + /*uuidStringList = getIntent().getExtras().getStringArrayList("UUIDStringList"); + firstPosition = (int) getIntent().getExtras().get("position");*/ + mTitleView = (TitleView) findViewById(R.id.title_media_play); + mTitleView.setHead("本地录像"); + mTitleView.setHeadFuntion(R.drawable.icon_setup); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + // Intent intent = new Intent(MediaPlayActivity.this, DeviceSetActivity.class); + Intent intent = new Intent(MediaPlayBackActivity.this, CameraDetailActivity.class); + intent.putExtra("UUID", getIntent().getStringExtra("UUID")); + intent.putExtra("alarmPlanStatus", true); + intent.putExtra("cloudMealStatus", true); + startActivity(intent); + } + + @Override + public void onFunctionText() { + + } + }); + + PermissionHelper.requestPermission(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}); + // 嵌入使用的帧 + MediaPlayBackFragment mediaPlayFragment; // 引用的布局帧 + Bundle b = new Bundle(); + String resId; // 资源id号 + mediaPlayFragment = new MediaPlayBackFragment(); + resId = getIntent().getStringExtra("ID"); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + /*switch (getIntent().getIntExtra("TYPE", 0)) { + case IS_VIDEO_ONLINE: + mediaPlayFragment = new MediaPlayOnlineFragment(); + // VideoContainerFragment containerFragment = new VideoContainerFragment(); + resId = getIntent().getStringExtra("UUID"); + // resId = uuidStringList.get(firstPosition); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + *//*containerFragment.setArguments(b); + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, containerFragment) + .commitAllowingStateLoss();*//* + break; + case IS_VIDEO_REMOTE_RECORD: + mediaPlayFragment = new MediaPlayBackFragment(); + resId = getIntent().getStringExtra("ID"); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + break; + case IS_VIDEO_REMOTE_CLOUD_RECORD: + mediaPlayFragment = new MediaPlayBackFragment(); + resId = getIntent().getStringExtra("ID"); + b.putString("RESID", resId); + mediaPlayFragment.setArguments(b); + changeFragment(mediaPlayFragment, false); + break; + default: + break; + }*/ + } + + /** + * boolean) 描述:切换fragment + */ + public void changeFragment(Fragment targetFragment, boolean isAddToStack) { + if (isAddToStack) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, targetFragment) + .addToBackStack(null).commitAllowingStateLoss(); + } else { + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, targetFragment) + .commitAllowingStateLoss(); + } + + } + + @Override + public void onBackPressed() { + if (mMediaPlayFragment == null || !mMediaPlayFragment.onBackPressed()) { + Log.d(tag, "onBackPressed"); + super.onBackPressed(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + EventBus.getDefault().post( + new ChooseHomeEvent("5")); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void setSelectedFragment(MediaPlayFragment backHandledFragment) { + // TODO Auto-generated method stub + this.mMediaPlayFragment = backHandledFragment; + } + + // 横竖屏切换需要,隐藏标题栏 + public void toggleTitle(boolean isShow) { + mTitleView.setVisibility(isShow ? View.VISIBLE : View.GONE); + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String[] permissions, int[] grantResults) { + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + // if (grantResults.length == 1 + // && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // + // } else { + // Toast.makeText(this, R.string.no_access_write_external_storage, + // Toast.LENGTH_SHORT).show(); + // } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayBackFragment.java b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayBackFragment.java new file mode 100644 index 0000000..5990987 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayBackFragment.java @@ -0,0 +1,1124 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayBackFragment.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.mediaplay.fragment; + +import android.app.NotificationManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.media.AudioManager; +import android.media.MediaScannerConnection; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.CloudStorageCode; +import com.lechange.demo.business.Business.PlayerResultCode; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.business.util.TimeHelper; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.common.RecoderSeekBar; +import com.lechange.demo.localvideo.RecordListActivity; +import com.lechange.demo.localvideo.calendar.CalendarPopipWindow; +import com.lechange.demo.localvideo.timeshaftbar.TimerShaftBar; +import com.lechange.demo.localvideo.timeshaftbar.TimerShaftRegionItem; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.FileOutputStream; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Queue; + +import static com.lechange.demo.mediaplay.fragment.MediaPlayOnlineFragment.getLoacalBitmap; + + +/** + * 描述:远程录像回放(目前包括录像回放和告警消息两个场景) 作者: lc + */ +public class MediaPlayBackFragment extends MediaPlayFragment implements OnClickListener { + static private boolean sthls = false; + private final String tag = "MediaPlayBackFragment"; + private RecordInfo recordInfo; + private ChannelInfo channelInfo; + //SeekBar使用 + private int progress; + private String beginTime; + private Queue mSeekQueue = new LinkedList(); //云录像时间记忆 + private LinearLayout mRecordMenu; + private RelativeLayout mRecordMenu1; + private ImageView mRecordPlayPause, mRecordPlayPause1; + private TextView mRecordStartTime; + private RecoderSeekBar mRecordSeekbar; + private TextView mRecordEndTime; + private ImageView mRecordScale, mRecordScale1, record_no_voice1; + private PlayStatus mOpenPlay = PlayStatus.play_close; //语音对讲状态 + + private TextView mCalendarTv; + private TimerShaftBar mTimerShaftBar; + private ArrayList mTimeShaftItems = new ArrayList<>(); + private LinearLayout ll_all_video; + private List mRecordList = new ArrayList<>(); + + private ImageView mLiveScreenshot; + private ImageView iv_screen_shot, mLiveRecord; + private LinearLayout ll_record_time; + private TextView tv_record_time; + private TextView netSpeedTv; + private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 100: + netSpeedTv.setText(msg.obj.toString()); + break; + } + super.handleMessage(msg); + } + }; + //计时器 + private boolean isRecord = false; + private Handler mhandle = new Handler(); + private boolean isPause = false;//是否暂停 + private long currentSecond = 0;//当前毫秒数 + private Runnable timeRunable = new Runnable() { + @Override + public void run() { + currentSecond = currentSecond + 1000; + tv_record_time.setText(DateTimeUitl.getFormatHMS(currentSecond)); + if (!isPause) { + //递归调用本runable对象,实现每隔一秒一次执行任务 + mhandle.postDelayed(this, 1000); + } + } + }; + + private TextView tv_before_day, tv_last_day; + private boolean isOpenVoice = true; + private long lastTimeToPlay; + private LoadingDialog mLoadingDialog; + + /** + * 描述:获取录像通道参数 + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle b = getArguments(); + if (b != null) { + String id = b.getString("RESID"); + recordInfo = Business.getInstance().getAllRecord(id); + channelInfo = Business.getInstance().getChannel(recordInfo.getChnlUuid()); + } + if (recordInfo == null && channelInfo == null) { + toast(getString(R.string.toast_playback_no_records)); + getActivity().finish(); + } + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View mView = inflater.inflate(R.layout.fragment_media_record, container, false); + //必须赋值,父类需要使用到 + mSurfaceParentView = (ViewGroup) mView.findViewById(R.id.record_window); + //初始化窗口大小 + LayoutParams mLayoutParams = (LayoutParams) mSurfaceParentView.getLayoutParams(); + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + mSurfaceParentView.setLayoutParams(mLayoutParams); + + mPlayWin.initPlayWindow(this.getActivity(), (ViewGroup) mView.findViewById(R.id.record_window_content),0, true); + + mProgressDialog = (ProgressDialog) mView.findViewById(R.id.record_play_load); + mReplayTip = (TextView) mView.findViewById(R.id.record_play_pressed); + + mRecordMenu = (LinearLayout) mView.findViewById(R.id.record_menu); + mRecordMenu1 = (RelativeLayout) mView.findViewById(R.id.record_menu1); + mRecordPlayPause = (ImageView) mView.findViewById(R.id.record_play_pause); + mRecordPlayPause1 = (ImageView) mView.findViewById(R.id.record_play_pause1); + mRecordStartTime = (TextView) mView.findViewById(R.id.record_startTime); + mRecordSeekbar = (RecoderSeekBar) mView.findViewById(R.id.record_seekbar); + mRecordEndTime = (TextView) mView.findViewById(R.id.record_endTime); + mRecordScale = (ImageView) mView.findViewById(R.id.record_scale); + mRecordScale1 = (ImageView) mView.findViewById(R.id.record_scale1); + record_no_voice1 = (ImageView) mView.findViewById(R.id.record_no_voice1); + iv_screen_shot = (ImageView) mView.findViewById(R.id.iv_screen_shot); + netSpeedTv = (TextView) mView.findViewById(R.id.tv_net_speed); + ll_record_time = (LinearLayout) mView.findViewById(R.id.ll_record_time); + tv_record_time = (TextView) mView.findViewById(R.id.tv_record_time); + mLiveRecord = (ImageView) mView.findViewById(R.id.live_record); + tv_before_day = (TextView) mView.findViewById(R.id.tv_before_day); + tv_last_day = (TextView) mView.findViewById(R.id.tv_last_day); + + + tv_before_day.setOnClickListener(this); + tv_last_day.setOnClickListener(this); + mLiveRecord.setOnClickListener(this); + mReplayTip.setOnClickListener(this); + mRecordPlayPause.setOnClickListener(this); + mRecordPlayPause1.setOnClickListener(this); + mRecordScale.setOnClickListener(this); + mRecordScale1.setOnClickListener(this); + record_no_voice1.setOnClickListener(this); + + mCalendarTv = (TextView) mView.findViewById(R.id.tv_calendar); + mLiveScreenshot = (ImageView) mView.findViewById(R.id.live_screenshot); + mLiveScreenshot.setOnClickListener(this); + + mLiveRecord.setEnabled(false); + mLiveScreenshot.setEnabled(false); + + SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); + final String dateStr = dateformat.format(System.currentTimeMillis()); + mCalendarTv.setText(dateStr); + mCalendarTv.setOnClickListener(this); + mCalendarTv.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + String s1 = s.toString(); + if (s1.equals(dateStr) || s1.compareTo(dateStr) > 0) { + tv_last_day.setVisibility(View.GONE); + } else { + tv_last_day.setVisibility(View.VISIBLE); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + ll_all_video = (LinearLayout) mView.findViewById(R.id.ll_all_video); + ll_all_video.setOnClickListener(this); + mTimerShaftBar = (TimerShaftBar) mView.findViewById(R.id.timershaft_bar); + mTimerShaftBar.setTimerShaftLayoutListener(new TimerShaftBar.TimerShaftBarListener() { + @Override + public void onTimerShaftBarPosChanged(Calendar calendar) { + Log.i("mTimerShaftBar", "onTimerShaftBarPosChanged " + calendar.getTime().toString()); + //滑动的时间 + if (mTimeShaftItems.size() == 0 || mRecordList.size() == 0) { + return; + } + long timeInMillis = calendar.getTimeInMillis(); + if (lastTimeToPlay != timeInMillis) { + stop(-1); + } + long firstStartTime = mTimeShaftItems.get(mTimeShaftItems.size() - 1).getStartTime(); + long lastEndTime = mTimeShaftItems.get(0).getEndTime(); + if (timeInMillis <= firstStartTime) { + // Toast.makeText(getContext(), "我在最左边", Toast.LENGTH_SHORT).show(); + // play(-1, 1, firstStartTime, mRecordList.get(0).getEndTime(), mRecordList.get(0).getRecordID()); + stop(-1); + Toast.makeText(getContext(), "暂无视频", Toast.LENGTH_SHORT).show(); + } else if (lastEndTime <= timeInMillis) { + stop(-1); + Toast.makeText(getContext(), "暂无视频", Toast.LENGTH_SHORT).show(); + } else { + for (int i = mTimeShaftItems.size() - 1; i >= 0; i--) { + long startTime = mTimeShaftItems.get(i).getStartTime(); + long endTime = mTimeShaftItems.get(i).getEndTime(); + Log.i("mTimeShaftItems", i + "/" + mTimeShaftItems.size() + "---" + startTime + "---" + endTime + "---" + timeInMillis); + //如果再最左边 + if (startTime <= timeInMillis && timeInMillis <= endTime) { + // Toast.makeText(getContext(), "播放第" + i + "个视频中间", Toast.LENGTH_SHORT).show(); + play(-1, 2, timeInMillis, endTime, mRecordList.get(i).getRecordID()); + i = -1; + } else if (timeInMillis <= startTime) { + Toast.makeText(getContext(), "暂无视频", Toast.LENGTH_SHORT).show(); + stop(-1); + // Toast.makeText(getContext(), "播放第" + i + "个视频开头", Toast.LENGTH_SHORT).show(); + /*play(-1, 1, startTime, endTime, mRecordList.get(i).getRecordID()); + i = -1;*/ + } else { + // Toast.makeText(getContext(), "还没到播放的那个", Toast.LENGTH_SHORT).show(); + } + } + } + } + + @Override + public void onTimerShaftBarDown() { + //按下的时间 + } + }); + if (null != getActivity().getIntent().getExtras().get("dateString")) { + long dateString = (long) getActivity().getIntent().getExtras().get("dateString"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); + String date = String.valueOf(sdf2.format(dateString)); + mCalendarTv.setText(date); + queryRecordNum(date, "0"); + + Calendar calendar = Calendar.getInstance(); // 默认是当前日期 + calendar.setTimeInMillis(dateString * 1000); + if (calendar != null) { + Log.i("onPlayTime", "onPlayTime calendar = " + calendar.getTime().toString()); + mTimerShaftBar.setPlayCalendar(calendar); + } + + } else { + queryRecordNum("1", "0"); + } + + initSeekBarAndTime(); + play(-1); + return mView; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.setMessage("加载数据中"); + mLoadingDialog.show(); + } + + private void queryRecordNum(final String dateString, final String type) { + initLoadDialog(); + final String startTime; + final String endTime; + if (dateString.equals("1")) { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + startTime = df.format(new Date()) + " 00:00:00"; + endTime = df.format(new Date()) + " 23:59:59"; + } else { + stop(-1); //无效资源号 + startTime = dateString + " 00:00:00"; + endTime = dateString + " 23:59:59"; + } + Business.getInstance().queryRecordNum(recordInfo.getChnlUuid(), startTime, endTime, new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + Toast.makeText(getContext(), getString(R.string.toast_recordlist_query_failed) + msg.what, Toast.LENGTH_SHORT).show(); + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } else if (msg.what == 0) { + if (msg.arg1 > 0) { + Business.getInstance().queryRecordList(recordInfo.getChnlUuid(), startTime, endTime, msg.arg2, msg.arg1, new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + Toast.makeText(getContext(), getString(R.string.toast_recordlist_query_failed) + msg.obj, Toast.LENGTH_SHORT).show(); + } else { + mTimeShaftItems.clear(); + mRecordList = (List) msg.obj; + List obj = (List) msg.obj; + if (obj != null && obj.size() > 0) { + Log.i(tag, "loadRecrodList mRecordList.size:" + mRecordList.size()); + for (int i = 0; i < obj.size(); i++) { + TimerShaftRegionItem timeShaftItem = new TimerShaftRegionItem(obj.get(i).getStartTime(), obj.get(i).getEndTime(), 0); + mTimeShaftItems.add(timeShaftItem); + } + mTimerShaftBar.setTimeShaftItems(mTimeShaftItems); + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (type.equals("1")) { + play(-1, 2, mTimeShaftItems.get(mTimeShaftItems.size() - 1).getStartTime(), mTimeShaftItems.get(mTimeShaftItems.size() - 1).getEndTime(), mRecordList.get(mTimeShaftItems.size() - 1).getRecordID()); + } + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + Toast.makeText(getContext(), "没有录像", Toast.LENGTH_SHORT).show(); + } + } + } + }); + } else { + mTimeShaftItems.clear(); + long currentWithFormate = 0; + try { + currentWithFormate = DateTimeUitl.dateToStamp(startTime); + } catch (ParseException e) { + e.printStackTrace(); + } + TimerShaftRegionItem timeShaftItem = new TimerShaftRegionItem(currentWithFormate, currentWithFormate, 0); + mTimeShaftItems.add(timeShaftItem); + mTimerShaftBar.setTimeShaftItems(mTimeShaftItems); + Toast.makeText(getContext(), "没有录像", Toast.LENGTH_SHORT).show(); + mProgressDialog.setStop(); //关闭加载窗口 + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } + } + }); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + //SeekBar监听 + setSeekBarListener(); + //禁止拖动 + setCanSeekChanged(false); + + listener = new MyBasePlayerEventListener(); + mPlayWin.setWindowListener(listener); + mPlayWin.openTouchListener(); + + //开启横竖屏切换 + startListener(); + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + stop(-1); //无效资源号 + } + + @Override + public void onDestroyView() { + // TODO Auto-generated method stub + super.onDestroyView(); + mPlayWin.uninitPlayWindow();// 销毁底层资源 + } + + /** + * @param mConfiguration 描述:实现个性化界面 + */ + @Override + protected void resetViews(Configuration mConfiguration) { + super.resetViews(mConfiguration); + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + mRecordScale.setTag("LANDSCAPE"); + mRecordScale.setImageResource(R.drawable.record_btn_smallscreen); + mRecordScale1.setTag("LANDSCAPE"); + mRecordScale1.setImageResource(R.drawable.record_btn_smallscreen); + mRecordMenu.setVisibility(View.VISIBLE); + mRecordMenu1.setVisibility(View.GONE); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + mRecordScale.setTag("PORTRAIT"); + mRecordScale.setImageResource(R.drawable.record_btn_fullscreen); + mRecordScale1.setTag("PORTRAIT"); + mRecordScale1.setImageResource(R.drawable.record_btn_fullscreen); + mRecordMenu.setVisibility(View.GONE); + mRecordMenu1.setVisibility(View.VISIBLE); + } + + } + + private void initSeekBarAndTime() { + String mStartTime = TimeHelper.getTimeHMS(recordInfo.getStartTime()); + String mEndTime = TimeHelper.getTimeHMS(recordInfo.getEndTime()); + mRecordSeekbar.setMax((int) ((recordInfo.getEndTime() - recordInfo.getStartTime()) / 1000)); + mRecordSeekbar.setProgress(0); + mRecordStartTime.setText(mStartTime); + mRecordEndTime.setText(mEndTime); + } + + private void setSeekBarListener() { + mRecordSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + if (mRecordSeekbar.getMax() - MediaPlayBackFragment.this.progress <= 2) { + toast(getString(R.string.toast_playback_no_iframe)); + seek(mRecordSeekbar.getMax() >= 2 ? mRecordSeekbar.getMax() - 2 : 0); + } else { + seek(MediaPlayBackFragment.this.progress); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) { + if (byUser) { + MediaPlayBackFragment.this.progress = progress; + } + } + }); + } + + /** + * 描述:继续播放 + */ + public void resume() { + mPlayWin.resumeAsync(); + mOpenPlay = PlayStatus.play_open; + mRecordPlayPause.setImageResource(R.drawable.record_btn_pause); + mRecordPlayPause1.setImageResource(R.drawable.record_btn_pause); + } + + /** + * 描述:暂停播放 + */ + public void pause() { + mPlayWin.pauseAsync(); + mOpenPlay = PlayStatus.play_pause; + mRecordPlayPause.setImageResource(R.drawable.record_btn_play); + mRecordPlayPause1.setImageResource(R.drawable.record_btn_play); + } + + public boolean openAudio() { + return mPlayWin.playAudio() == retOK; + } + + public boolean closeAudio() { + return mPlayWin.stopAudio() == retOK; + } + + public void seek(int index) { + System.out.println("index:" + index); + + long seekTime = recordInfo.getStartTime() / 1000 + index; + //先暂存时间记录 + MediaPlayBackFragment.this.beginTime = TimeHelper.getTimeHMS(seekTime * 1000); + MediaPlayBackFragment.this.progress = index; + mRecordSeekbar.setProgress(index); + mRecordStartTime.setText(MediaPlayBackFragment.this.beginTime); + + mPlayWin.seek(index); + + // if (recordInfo != null&& (recordInfo.getType() == RecordInfo.RecordType.PublicCloud)) { + // if (mOpenPlay == PlayStatus.play_pause) { + // resume(); + // } + // mPlayWin.seek(index); + // System.out.println(tag + "tag-publicClound Seek to: " + index); + // }else{ + // playSeek(seekTime * 1000, recordInfo.getEndTime()); + // System.out.println(tag + "tag-deviceRecord Seek to: " + index); + // } + } + + public void play(int strRes, int type, long startTime, long endTime, String recordID) { + //if (mOpenPlay == PlayStatus.play_open) { + stop(-1); + //} + if (strRes > 0) { + showLoading(strRes); + } else { + showLoading(R.string.common_loading); + } + mOpenPlay = PlayStatus.play_opening; + mRecordPlayPause.setImageResource(R.drawable.record_btn_pause); + mRecordPlayPause1.setImageResource(R.drawable.record_btn_pause); + // mPlayWin.setStreamCallback(1); //启用标准流回调,测试代码 + if (recordInfo.getType() == RecordInfo.RecordType.PublicCloud) { + //播放起始时间默认设为0,开发者自行 + mPlayWin.playCloud(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + String.valueOf(channelInfo.getIndex()), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + recordInfo.getRecordID(), 1000, 0, 24 * 3600); + } else { + switch (type) { + case 1: + mPlayWin.playRtspPlayback(Business.getInstance().getToken(), channelInfo.getDeviceCode(), channelInfo.getIndex(), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), recordID, + startTime, endTime, 0, 0, true); + break; + case 2: + //按时间回放 + /*mPlayWin.playRtspPlaybackByUtcTime(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + channelInfo.getIndex(), startTime, endTime);*/ + + mPlayWin.playRtspPlayback(Business.getInstance().getToken(), channelInfo.getDeviceCode(), channelInfo.getIndex(), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), recordID, + startTime, endTime, 0, 0, true); + break; + case 3: + //按文件名回放,播放起始时间默认设为0,开发者自行修改 + /*mPlayWin.playRtspPlaybackByFileName(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + recordInfo.getRecordPath(), 0);*/ + break; + default: + + break; + } + } + + //允许拖动 + setCanSeekChanged(true); + } + + public void play(int strRes) { + //if (mOpenPlay == PlayStatus.play_open) { + stop(-1); + //} + if (strRes > 0) { + showLoading(strRes); + } else { + showLoading(R.string.common_loading); + } + mOpenPlay = PlayStatus.play_opening; + mRecordPlayPause.setImageResource(R.drawable.record_btn_pause); + mRecordPlayPause1.setImageResource(R.drawable.record_btn_pause); + // mPlayWin.setStreamCallback(1); //启用标准流回调,测试代码 + lastTimeToPlay = recordInfo.getStartTime(); + if (recordInfo.getType() == RecordInfo.RecordType.PublicCloud) { + //播放起始时间默认设为0,开发者自行 + mPlayWin.playCloud(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + String.valueOf(channelInfo.getIndex()), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + recordInfo.getRecordID(), 1000, 0, 24 * 3600); + } else { + mPlayWin.playRtspPlayback(Business.getInstance().getToken(), channelInfo.getDeviceCode(), channelInfo.getIndex(), + channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), recordInfo.getRecordID(), + recordInfo.getStartTime(), recordInfo.getEndTime(), 0, 0, true); + // //按时间回放 + // mPlayWin.playRtspPlaybackByUtcTime(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + // channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + // channelInfo.getIndex(), recordInfo.getStartTime(), recordInfo.getEndTime()); + + //按文件名回放,播放起始时间默认设为0,开发者自行修改 + // mPlayWin.playRtspPlaybackByFileName(Business.getInstance().getToken(), channelInfo.getDeviceCode(), + // channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), + // recordInfo.getRecordPath(), 0); + + } + + //允许拖动 + setCanSeekChanged(true); + } + + public void stop(final int res) { + //关闭播放加载控件 + mProgressDialog.setStop(); + stopPlayWindow(); + mOpenPlay = PlayStatus.play_close; + mRecordPlayPause.setImageResource(R.drawable.record_btn_play); + mRecordPlayPause1.setImageResource(R.drawable.record_btn_play); + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + if (res > 0) + showErrorTip(res); + } + } + }); + } + //禁止拖动 + setCanSeekChanged(false); + } + + // private void playSeek(long startTime, long endTime) { + // //打开加载进度栏 + // showLoading(R.string.common_loading); + // if (mOpenPlay != PlayStatus.play_close) { + // stopPlayWindow(); + // } + // mOpenPlay = PlayStatus.play_opening; + // mRecordPlayPause.setImageResource(R.drawable.record_btn_pause); + // + // mPlayWin.playRtspPlaybackByUtcTime(Business.getInstance().getToken(), + // channelInfo.getDeviceCode(), channelInfo.getEncryptKey() != null ? channelInfo.getEncryptKey() : channelInfo.getDeviceCode(), channelInfo.getIndex(), startTime, endTime); + // } + + /** + * 描述 :单独关闭播放 ! 注意:组件要求必须要主线程调用 + */ + public void stopPlayWindow() { + closeAudio();// 关闭音频 + if (recordInfo.getType() == RecordInfo.RecordType.PublicCloud) + mPlayWin.stopCloud(true); + else + mPlayWin.stopRtspPlayback(true);// 关闭视频 + } + + /** + * 描述:设置拖动进度条是否能使用 + */ + public void setCanSeekChanged(boolean canSeek) { + mRecordSeekbar.setCanTouchAble(canSeek); + } + + @Override + public void onClick(View view) { + // TODO Auto-generated method stub + switch (view.getId()) { + case R.id.record_play_pause: + case R.id.record_play_pause1: + switch (mOpenPlay) { + case play_open: + pause(); + break; + case play_pause: + resume(); + break; + case play_opening: + stop(-1); //因为准备播放过程异步执行,这个状态里,无法精准的控制停止操作 + break; + case play_close: + initSeekBarAndTime(); + // play(-1); + if (mTimeShaftItems.size() > 0) { + play(-1, 2, mTimeShaftItems.get(mTimeShaftItems.size() - 1).getStartTime(), mTimeShaftItems.get(mTimeShaftItems.size() - 1).getEndTime(), mRecordList.get(mTimeShaftItems.size() - 1).getRecordID()); + } + break; + default: + break; + } + break; + case R.id.record_scale: + case R.id.record_scale1: + if ("LANDSCAPE".equals(mRecordScale.getTag())) { + mOrientation = ORIENTATION.isPortRait; + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else { + mOrientation = ORIENTATION.isLandScape; + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + break; + case R.id.record_play_pressed: + initSeekBarAndTime(); + // play(-1); + if (mTimeShaftItems.size() > 0) { + play(-1, 2, mTimeShaftItems.get(mTimeShaftItems.size() - 1).getStartTime(), mTimeShaftItems.get(mTimeShaftItems.size() - 1).getEndTime(), mRecordList.get(mTimeShaftItems.size() - 1).getRecordID()); + } + break; + case R.id.tv_calendar: + showCalendarBottom(mCalendarTv.getText().toString()); + break; + case R.id.ll_all_video: + Intent intent1 = new Intent(getContext(), RecordListActivity.class); + intent1.putExtra("UUID", channelInfo.getUuid()); + intent1.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent1.putExtra("dateString", mCalendarTv.getText().toString()); + intent1.putExtra("MEDIA_TITLE", R.string.local_records_name); + startActivity(intent1); + break; + case R.id.record_no_voice1: + if (isOpenVoice) { + record_no_voice1.setImageResource(R.drawable.live_btn_sound_off); + closeAudio(); + isOpenVoice = false; + } else { + record_no_voice1.setImageResource(R.drawable.live_btn_sound_on); + openAudio(); + isOpenVoice = true; + } + /* AudioManager audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); + if (audioManager != null) { + if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT) { + record_no_voice1.setImageResource(R.drawable.live_btn_sound_on); + silentSwitchOff(audioManager); + openAudio(); + } else if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL) { + record_no_voice1.setImageResource(R.drawable.live_btn_sound_off); + silentSwitchOn(audioManager); + closeAudio(); + } + }*/ + break; + case R.id.live_screenshot: + mLiveScreenshot.setImageResource(R.drawable.icon_photograph_pre); + capture(); + mLiveScreenshot.setImageResource(R.drawable.icon_photograph_nor); + break; + case R.id.live_record: + if (!isRecord) { + // boolean result = startRecord(); + if (true) { + toastWithImg(getString(R.string.video_monitor_media_record), R.drawable.live_pic_record); + isRecord = true; + isPause = false; + mLiveRecord.setImageResource(R.drawable.icon_videotape_pre); + ll_record_time.setVisibility(View.VISIBLE); + //显示录制时间 + timeRunable.run(); + } + } else { + isPause = true; + stopRecord(); + } + break; + case R.id.tv_before_day: + String beforeFromTarget = DateTimeUitl.getBeforeFromTarget(mCalendarTv.getText().toString()); + mCalendarTv.setText(beforeFromTarget); + queryRecordNum(beforeFromTarget, "1"); + break; + case R.id.tv_last_day: + String futureFromTarget = DateTimeUitl.getFutureFromTarget(mCalendarTv.getText().toString()); + mCalendarTv.setText(futureFromTarget); + queryRecordNum(futureFromTarget, "1"); + break; + default: + break; + } + } + + /** + * 关闭录像 + */ + public void stopRecord() { + mPlayWin.stopRecord(); + isRecord = false; + toast(getString(R.string.video_monitor_video_record_success)); + mLiveRecord.setImageResource(R.drawable.icon_videotape_nor); + currentSecond = 0; + ll_record_time.setVisibility(View.GONE); + + /*MediaScannerConnection.scanFile(getActivity(), new String[]{path}, + null, null);*/ + } + + /** + * 描述:抓拍图像 + */ + public String capture() { + String captureFilePath = null; + // 判断SD卡是否已存在 + // SD卡容量检查 + // FIXME 检查设备是否在线 + // 抓图 + String channelName = null; + if (channelInfo != null) { + channelName = channelInfo.getName(); + } else { + channelName = ""; + } + + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + + captureFilePath = MediaPlayHelper.getCaptureAndVideoPath(MediaPlayHelper.DHFilesType.DHImage, channelName); + int ret = mPlayWin.snapShot(captureFilePath); + if (ret == retOK) { + // 扫描到相册中 + MediaScannerConnection.scanFile(getActivity(), new String[]{captureFilePath}, null, null); + Bitmap loacalBitmap = getLoacalBitmap(captureFilePath); + iv_screen_shot.setImageBitmap(loacalBitmap); + iv_screen_shot.setVisibility(View.VISIBLE); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + iv_screen_shot.setVisibility(View.GONE); + } + }, 2000); + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_success, + Toast.LENGTH_SHORT).show(); + } else { + captureFilePath = null; + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_failed, + Toast.LENGTH_SHORT).show(); + } + return captureFilePath; + } + + //获取Do not disturb权限,才可进行音量操作 + private void getDoNotDisturb() { + NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !notificationManager.isNotificationPolicyAccessGranted()) { + Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS); + startActivity(intent); + } + } + + private void showCalendarBottom(String date) { + View rootview = LayoutInflater.from(getContext()).inflate(R.layout.fragment_media_record, null); + CalendarPopipWindow popupWindow = new CalendarPopipWindow(getContext(), date.substring(0, 4) + "年" + date.substring(5, 7) + "月", new CalendarPopipWindow.OnCompleteListener() { + @Override + public void onComplete(String dayStr) { + /*int year = Integer.parseInt(dayStr.substring(0, 4)); + int month = Integer.parseInt(dayStr.substring(5, 7)); + int day = Integer.parseInt(dayStr.substring(dayStr.indexOf("月") + 1, dayStr.indexOf("日"))); + String date = DateTimeUitl.formatDateFromInt(year, month, day);*/ + mCalendarTv.setText(dayStr); + queryRecordNum(dayStr, "1"); + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void silentSwitchOn(AudioManager audioManager) { + if (audioManager != null) { + audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); + audioManager.getStreamVolume(AudioManager.STREAM_RING); + Log.d("Silent:", "RINGING 已被静音"); + } + } + + private void silentSwitchOff(AudioManager audioManager) { + if (audioManager != null) { + audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + audioManager.getStreamVolume(AudioManager.STREAM_RING); + Log.d("SilentListenerService", "RINGING 取消静音"); + } + } + + private enum PlayStatus {play_close, play_open, play_opening, play_pause} + + class MyBasePlayerEventListener extends LCOpenSDK_EventListener { + @Override + public void onPlayerResult(int index, String code, int type) { + System.out.println("winIndex:" + "code:" + code + "type:" + type); + if (type == Business.RESULT_SOURCE_OPENAPI) { + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + System.out.println("save stop"); + stop(R.string.video_monitor_play_error); + } + } + }); + } + } else if (recordInfo != null && recordInfo.getType() == RecordInfo.RecordType.PublicCloud) { + if (code.equals(CloudStorageCode.HLS_DOWNLOAD_FAILD) || + code.equals(CloudStorageCode.HLS_KEY_ERROR)) { + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + System.out.println("save stop"); + stop(R.string.video_monitor_play_error); + } + } + }); + } + } else if (code.equals(CloudStorageCode.HLS_SEEK_FAILD)) { + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_seek_error); + } + } + }); + } + } + return; + } else if (code.equals(PlayerResultCode.STATE_RTSP_TEARDOWN_ERROR)) { + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_online_fail_restart); + } + } + }); + } + } else if (code.equals(PlayerResultCode.STATE_PACKET_FRAME_ERROR) || + code.equals(PlayerResultCode.STATE_RTSP_AUTHORIZATION_FAIL) || + code.equals(PlayerResultCode.STATE_RTSP_KEY_MISMATCH)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_play_error); + } + } + }); + } + } + } + + @Override + public void onStreamCallback(int index, byte[] data, int len) { + // Log.d(tag, "LCOpenSDK_EventListener::onStreamCallback-size : " + len); + try { + String path = Environment.getExternalStorageDirectory().getPath() + "/streamCallback.ts"; + FileOutputStream fout = new FileOutputStream(path, true); + fout.write(data); + fout.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onPlayBegan(int index) { + // TODO Auto-generated method stub + if (recordInfo.getType() == RecordInfo.RecordType.PublicCloud) { + //if(code.equals(CloudStorageCode.HLS_DOWNLOAD_BEGIN)){ + // 云录像播放第二步 + System.out.println(tag + "*****+play pulic cloud video from CloudStorageCode.HLS_DOWNLOAD_BEGIN"); + if (mSeekQueue.size() > 0) { // 从上次停止的地方播放 + long time = mSeekQueue.poll(); + System.out.println(tag + "*****onPlay+play pulic cloud video from time:" + time); + mSeekQueue.clear(); + mPlayWin.seek(time); + } + // // 显示码率 + // if (mHander != null) { + // mHander.post(MediaPlayBackFragment.this); + // } + mOpenPlay = PlayStatus.play_open; + openAudio();//默认打开声音 + //关闭播放加载控件 + mProgressDialog.setStop(); + } else { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + mLiveRecord.setEnabled(true); + mLiveRecord.setAlpha(1.0f); + mLiveScreenshot.setAlpha(1.0f); + mLiveScreenshot.setEnabled(true); + } + }); + } + mTimerShaftBar.setRefereshPlayTimeWithPlayer(); + //if(code.equals(PlayerResultCode.STATE_RTSP_PLAY_READY)){ + // // 显示码率 + // if (mHander != null) { + // mHander.post(MediaPlayBackFragment.this); + // } + mOpenPlay = PlayStatus.play_open; + + openAudio();//默认打开声音 + //关闭播放加载控件 + mProgressDialog.setStop(); + } + } + + + @Override + public void onPlayFinished(int index) { + // TODO Auto-generated method stub + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_online_restart); + mLiveRecord.setAlpha(0.5f); + mLiveRecord.setEnabled(false); + mLiveScreenshot.setAlpha(0.5f); + mLiveScreenshot.setEnabled(false); + } + } + }); + } + } + + // @Override + // public void onReceiveData( int len) { + // // 流量统计 + // mTotalFlow += len; + // } + @Override + public void onPlayerTime(int index, final long current) { + System.out.println("timetest" + current); + long startTime; + if (sthls) { + startTime = 0; + } else { + startTime = recordInfo.getStartTime() / 1000; + } + MediaPlayBackFragment.this.progress = (int) (current - startTime); + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (sthls) { + if (isAdded()) { + mRecordSeekbar.setProgress(MediaPlayBackFragment.this.progress); + MediaPlayBackFragment.this.beginTime = TimeHelper.getTimeHMS(current * 1000); + int bh = (int) current / 3600; + int bm = (int) current / 60 % 60; + int bs = (int) current % 60; + MediaPlayBackFragment.this.beginTime = String.format(Locale.US, "%02d:%02d:%02d", bh, bm, bs); + System.out.println("onPlayerTimetest:" + MediaPlayBackFragment.this.beginTime); + mRecordStartTime.setText(MediaPlayBackFragment.this.beginTime); + } + } else { + if (isAdded()) { + mRecordSeekbar.setProgress(MediaPlayBackFragment.this.progress); + MediaPlayBackFragment.this.beginTime = TimeHelper.getTimeHMS(current * 1000); + mRecordStartTime.setText(MediaPlayBackFragment.this.beginTime); + Calendar calendar = Calendar.getInstance(); // 默认是当前日期 + calendar.setTimeInMillis(current * 1000); + if (calendar != null) { + // TODO: 2017/2/16 当前播放时间 + Log.i("onPlayTime", "onPlayTime calendar = " + calendar.getTime().toString()); + mTimerShaftBar.setPlayCalendar(calendar); + } + } + } + } + }); + } + } + + @Override + public void onWindowDBClick(int index, float dx, float dy) { + // TODO Auto-generated method stub + switch (mRecordMenu.getVisibility()) { + case View.GONE: + mRecordMenu.setVisibility(View.VISIBLE); + break; + case View.VISIBLE: + mRecordMenu.setVisibility(View.GONE); + break; + default: + break; + } + } + } +} diff --git a/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayFragment.java b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayFragment.java new file mode 100644 index 0000000..2dbbf3e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayFragment.java @@ -0,0 +1,266 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayFragment.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.mediaplay.fragment; + +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.hardware.SensorManager; +import android.os.Handler; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.OrientationEventListener; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.demo.mediaplay.MediaPlayBackActivity; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.media.LCOpenSDK_PlayWindow; + + +/** + * 描述:视频播放组件基类 作者: lc + */ +public class MediaPlayFragment extends Fragment { + //底层返回值 + protected static final int retOK = 0; + protected static final int retNG = -1; + protected static final String AUDIO_TALK_ERROR = "-1000"; //实时对讲初始化失败 + private final static String tag = "MediaPlayFragment"; + protected LCOpenSDK_EventListener listener; + protected LCOpenSDK_PlayWindow mPlayWin = new LCOpenSDK_PlayWindow(); + protected Handler mHander = new Handler(); + // 统计当前累计总流量,单位:字节 + //protected long mTotalFlow; + protected ViewGroup mSurfaceParentView; + protected ProgressDialog mProgressDialog; //播放加载使用 + protected TextView mReplayTip; + protected ORIENTATION mOrientation = ORIENTATION.isNone; //禁止横竖屏标志 + protected boolean isCanChangeScreen = true; + // 屏幕方向改变监听器 + private OrientationEventListener mOrientationListener; + + //吐司类工具 + protected void toast(int resId) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast.makeText(getActivity(), resId, Toast.LENGTH_SHORT).show(); + } + } + + protected void toast(String content) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast.makeText(getActivity(), content, Toast.LENGTH_SHORT).show(); + } + } + + public void toastWithImg(String content, int imgId) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast toast = Toast.makeText(getActivity(), content, Toast.LENGTH_LONG); + toast.setGravity(Gravity.CENTER, 0, 0); + LinearLayout toastView = (LinearLayout) toast.getView(); + ImageView imageCodeProject = new ImageView(getActivity()); + imageCodeProject.setImageResource(imgId); + toastView.addView(imageCodeProject, 0); + toast.show(); + } + } + + //播放失败提示器 + protected void showErrorTip(int resId) { + mReplayTip.setVisibility(View.VISIBLE); + mReplayTip.setText(resId); + } + + protected void showErrorTip(String res) { + mReplayTip.setVisibility(View.VISIBLE); + mReplayTip.setText(res); + } + + //播放缓冲提示器 + protected void showLoading(int res) { + mReplayTip.setVisibility(View.GONE); + mProgressDialog.setStart(getString(res)); //开启播放加载控件 + } + + protected void showLoading(String res) { + mReplayTip.setVisibility(View.GONE); + mProgressDialog.setStart(res); //开启播放加载控件 + } + + @Override + public void onStart() { + super.onStart(); + //将自己的实例传出去 + if (!(getActivity() instanceof BackHandlerInterface)) { + throw new ClassCastException("Hosting activity must implement BackHandlerInterface"); + } else { + ((BackHandlerInterface) getActivity()).setSelectedFragment(this); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (mOrientationListener != null) { + mOrientationListener.disable(); + mOrientationListener = null; + } + } + + /** + * 描述:开启屏幕方向监听 + */ + protected final void startListener() { + if (getActivity() == null || getActivity().isFinishing()) { + return; + } + mOrientationListener = new OrientationEventListener(getContext(), SensorManager.SENSOR_DELAY_NORMAL) { + @Override + public void onOrientationChanged(int rotation) { + // 设置竖屏 + if (getActivity() == null || getActivity().isFinishing()) { + return; + } + if (!isCanChangeScreen) { + return; + } + requestedOrientation(rotation); + } + }; + if (mOrientationListener.canDetectOrientation()) { + mOrientationListener.enable(); + } else { + mOrientationListener.disable(); + } + + } + + /** + * 描述:改变屏幕方向 + */ + private void requestedOrientation(int rotation) { + if (rotation < 10 || rotation > 350) {// 手机顶部向上 + setPortOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else if (rotation < 100 && rotation > 80) {// 手机右边向上 + setLandOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); + } else if (rotation < 190 && rotation > 170) {// 手机低边向上 + setPortOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); + } else if (rotation < 280 && rotation > 260) {// 手机左边向上 + setLandOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + } + + private void setPortOrientation(int type) { + switch (mOrientation) { + case isNone: + getActivity().setRequestedOrientation(type); + break; + case isPortRait: + mOrientation = ORIENTATION.isNone; + break; + default: + break; + } + } + + private void setLandOrientation(int type) { + switch (mOrientation) { + case isNone: + getActivity().setRequestedOrientation(type); + break; + case isLandScape: + mOrientation = ORIENTATION.isNone; + break; + default: + break; + } + } + + /** + * @see Fragment#onConfigurationChanged(Configuration) + * 描述:屏幕方向改变时重新绘制界面 + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + initWindow(newConfig); + initSurFace(newConfig); + resetViews(newConfig); + } + + /** + * 描述:初始化playWindow + */ + protected void initWindow(Configuration mConfiguration) { + LayoutParams mLayoutParams = (LayoutParams) mSurfaceParentView.getLayoutParams(); + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.heightPixels; // 屏幕高度(像素) + mLayoutParams.setMargins(0, 0, 0, 0); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + } + mSurfaceParentView.setLayoutParams(mLayoutParams); + } + + /** + * 描述:初始化全屏或非全屏 + */ + private void initSurFace(Configuration mConfiguration) { + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + if (getActivity() instanceof MediaPlayActivity) { + ((MediaPlayActivity) getActivity()).toggleTitle(false); + } + if (getActivity() instanceof MediaPlayBackActivity) { + ((MediaPlayBackActivity) getActivity()).toggleTitle(false); + } + MediaPlayHelper.setFullScreen(getActivity()); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + if (getActivity() instanceof MediaPlayActivity) { + ((MediaPlayActivity) getActivity()).toggleTitle(true); + } + if (getActivity() instanceof MediaPlayBackActivity) { + ((MediaPlayBackActivity) getActivity()).toggleTitle(true); + } + MediaPlayHelper.quitFullScreen(getActivity()); + } + } + + /** + * 重置View,子类实现 + */ + protected void resetViews(Configuration mConfiguration) { + } + + public boolean onBackPressed() { + return false; + } + + public enum ORIENTATION {isPortRait, isLandScape, isNone} + + public interface BackHandlerInterface { + public void setSelectedFragment(MediaPlayFragment backHandledFragment); + } +} + diff --git a/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayOnlineFragment.java b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayOnlineFragment.java new file mode 100644 index 0000000..3e0626e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/mediaplay/fragment/MediaPlayOnlineFragment.java @@ -0,0 +1,1365 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayOnlineFragment.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.mediaplay.fragment; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.MediaScannerConnection; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.support.v4.app.ActivityCompat; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.common.log.Logger; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.PlayerResultCode; +import com.lechange.demo.business.Business.RetObject; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.entity.ChannelPTZInfo; +import com.lechange.demo.business.entity.RecordInfo; +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.business.util.MediaPlayHelper.DHFilesType; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.localvideo.RecordListActivity; +import com.lechange.demo.localvideo.TodayLocalAdapter; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.demo.mediaplay.MediaPlayBackActivity; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.listener.LCOpenSDK_TalkerListener; +import com.lechange.opensdk.media.LCOpenSDK_Talk; +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NetWorkSpeedUtils; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 描述:实时视频监控 作者: lc + */ +public class MediaPlayOnlineFragment extends MediaPlayFragment implements + OnClickListener, View.OnLongClickListener { + + protected static final int MediaMain = 0; // 主码流 + protected static final int MediaAssist = 1; // 辅码流 + protected static final int RECORDER_TYPE_DAV = 3; // 录制格式DAV + protected static final int RECORDER_TYPE_MP4 = 4; // 录制格式MP4 + private static final String TAG = "MediaPlayOnlineFragment"; + /** + * 描述:开始录制 + */ + String path = null; + // 状态值 + private int bateMode = MediaAssist; + private AudioTalkStatus mOpenTalk = AudioTalkStatus.talk_close; // 语音对讲状态 + private boolean isRecord = false; // 正在录制 + private boolean isOpenSound = false; // 声音打开 + private boolean isPlaying; // 正在播放 + private boolean IsPTZOpen = false; // 云台打开 + private ChannelInfo channelInfo; + private LinearLayout mLiveMenu; + private TextView mLiveMode; + private ImageView mLivePtz, iv_live_ptz; + private RelativeLayout rl_live_ptz, rl_full_ptz, rl_local_video; + private ImageView mLiveSound; + private ImageView mLiveScale; + private ImageView mLiveStop; + private LinearLayout mLiveUseLayout; + private LinearLayout mLiveBack; + private ImageView mLiveScreenshot; + private ImageView live_ptz1, live_screenshot1, live_talk1, live_record1; + private ImageView mLiveTalk; + private ImageView mLiveRecord; + private TextView netSpeedTv; + private ImageView iv_top, iv_down, iv_left, iv_right, iv_top1, iv_down1, iv_left1, iv_right1; + private ImageView iv_screen_shot; + private String channelId; + private UIHandle mHandler; + private ImageView list_device_localvideo; + private TextView tv_device_localvideo; + + + /*private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 100: + netSpeedTv.setText(msg.obj.toString()); + break; + } + super.handleMessage(msg); + } + };*/ + private ImageView list_device_cloudvideo; + private RecyclerView horizontalRecyclerView; + private TextView tv_no_sdcard; + private TodayLocalAdapter mHorizontalAdapter; + private List mOnLineRecordList = new ArrayList<>(); + private LinearLayout ll_record_time; + private TextView tv_record_time; + private CheckBox iv_lock_screen; + //计时器 + private Handler mhandle = new Handler(); + private boolean isPause = false;//是否暂停 + private long currentSecond = 0;//当前毫秒数 + private Runnable timeRunable = new Runnable() { + @Override + public void run() { + currentSecond = currentSecond + 1000; + tv_record_time.setText(DateTimeUitl.getFormatHMS(currentSecond)); + if (!isPause) { + //递归调用本runable对象,实现每隔一秒一次执行任务 + mhandle.postDelayed(this, 1000); + } + } + }; + private boolean isCanRefrash = true; + + public static Bitmap getLoacalBitmap(String url) { + try { + FileInputStream fis = new FileInputStream(url); + return BitmapFactory.decodeStream(fis); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case 100: + netSpeedTv.setText(msg.obj.toString()); + break; + } + } + + /** + * @param savedInstanceState + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + Bundle b = getArguments(); + if (b != null) { + channelId = b.getString("RESID"); + channelInfo = Business.getInstance().getChannel(channelId); + } + if (channelInfo == null) { + toast("设备不存在"); + getActivity().setResult(-1); + getActivity().finish(); + } + } + + /** + * ViewGroup, Bundle) 描述: + * + * @return + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View mView = inflater.inflate(R.layout.fragment_media_live, container, + false); + // 必须赋值,父类需要使用到 + mSurfaceParentView = (ViewGroup) mView.findViewById(R.id.live_window); + // 初始化窗口大小 + LayoutParams mLayoutParams = (LayoutParams) mSurfaceParentView + .getLayoutParams(); + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + mSurfaceParentView.setLayoutParams(mLayoutParams); + + mPlayWin.initPlayWindow(this.getActivity(), + (ViewGroup) mView.findViewById(R.id.live_window_content), 0, true); + + mProgressDialog = (ProgressDialog) mView + .findViewById(R.id.live_play_load); + mReplayTip = (TextView) mView.findViewById(R.id.live_play_pressed); + + iv_top = (ImageView) mView.findViewById(R.id.iv_top); + iv_down = (ImageView) mView.findViewById(R.id.iv_down); + iv_left = (ImageView) mView.findViewById(R.id.iv_left); + iv_right = (ImageView) mView.findViewById(R.id.iv_right); + iv_top1 = (ImageView) mView.findViewById(R.id.iv_top1); + iv_down1 = (ImageView) mView.findViewById(R.id.iv_down1); + iv_left1 = (ImageView) mView.findViewById(R.id.iv_left1); + iv_right1 = (ImageView) mView.findViewById(R.id.iv_right1); + list_device_localvideo = (ImageView) mView.findViewById(R.id.list_device_localvideo); + tv_device_localvideo = (TextView) mView.findViewById(R.id.tv_device_localvideo); + list_device_cloudvideo = (ImageView) mView.findViewById(R.id.list_device_cloudvideo); + netSpeedTv = (TextView) mView.findViewById(R.id.tv_net_speed); + mLiveMenu = (LinearLayout) mView.findViewById(R.id.live_menu); + mLiveMode = (TextView) mView.findViewById(R.id.live_mode); + mLivePtz = (ImageView) mView.findViewById(R.id.live_ptz); + iv_live_ptz = (ImageView) mView.findViewById(R.id.iv_live_ptz); + rl_live_ptz = (RelativeLayout) mView.findViewById(R.id.rl_live_ptz); + rl_full_ptz = (RelativeLayout) mView.findViewById(R.id.rl_full_ptz); + rl_local_video = (RelativeLayout) mView.findViewById(R.id.rl_local_video); + mLiveSound = (ImageView) mView.findViewById(R.id.live_sound); + mLiveUseLayout = (LinearLayout) mView.findViewById(R.id.live_use_layout); + mLiveBack = (LinearLayout) mView.findViewById(R.id.live_video_back_layout); + mLiveScale = (ImageView) mView.findViewById(R.id.live_scale); + mLiveStop = (ImageView) mView.findViewById(R.id.live_stop); + mLiveScreenshot = (ImageView) mView.findViewById(R.id.live_screenshot); + live_ptz1 = (ImageView) mView.findViewById(R.id.live_ptz1); + live_screenshot1 = (ImageView) mView.findViewById(R.id.live_screenshot1); + live_talk1 = (ImageView) mView.findViewById(R.id.live_talk1); + live_record1 = (ImageView) mView.findViewById(R.id.live_record1); + mLiveTalk = (ImageView) mView.findViewById(R.id.live_talk); + mLiveRecord = (ImageView) mView.findViewById(R.id.live_record); + ll_record_time = (LinearLayout) mView.findViewById(R.id.ll_record_time); + tv_record_time = (TextView) mView.findViewById(R.id.tv_record_time); + iv_screen_shot = (ImageView) mView.findViewById(R.id.iv_screen_shot); + iv_lock_screen = (CheckBox) mView.findViewById(R.id.iv_lock_screen); + + horizontalRecyclerView = (RecyclerView) mView.findViewById(R.id.horizontal_RecyclerView); + tv_no_sdcard = (TextView) mView.findViewById(R.id.tv_no_sdcard); + + initListener(); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String startTime = df.format(new Date()) + " 00:00:00"; + String endTime = df.format(new Date()) + " 23:59:59"; + //初始化数据 + loadRecrodList(startTime, endTime); + + new NetWorkSpeedUtils(getContext(), mHandler).startShowNetSpeed(); + return mView; + + } + + private void loadRecrodList(final String startTime, final String endTime) { + Business.getInstance().queryRecordNum(channelId, startTime, + endTime, new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + tv_no_sdcard.setVisibility(View.VISIBLE); +// Toast.makeText(getContext(), getString(R.string.toast_recordlist_query_failed) + msg.what, Toast.LENGTH_SHORT).show(); + } else if (msg.what == 0) { + if (msg.arg1 > 0) { + int firstNumber = 1; + int lastNumber = msg.arg1; + if (msg.arg1 > 5) { + lastNumber = 5; + firstNumber = msg.arg1 - 4; + } + Business.getInstance().queryRecordList(channelId, startTime, + endTime, firstNumber, msg.arg1, new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + Toast.makeText(getContext(), getString(R.string.toast_recordlist_query_failed) + msg.obj, Toast.LENGTH_SHORT).show(); + } else { + if (isCanRefrash) { + mOnLineRecordList.addAll((List) msg.obj); + } else { + return; + } + if (mOnLineRecordList != null && mOnLineRecordList.size() > 0) { + Log.d("loadRecrodList", "loadRecrodList mRecordList.size:" + mOnLineRecordList.size()); + tv_no_sdcard.setVisibility(View.GONE); + mHorizontalAdapter = new TodayLocalAdapter(getActivity(), mOnLineRecordList, channelId); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(getActivity()); + manage.setOrientation(LinearLayoutManager.HORIZONTAL); + horizontalRecyclerView.setLayoutManager(manage); + horizontalRecyclerView.setAdapter(mHorizontalAdapter); + mHorizontalAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + Intent intent = new Intent(getActivity(), MediaPlayBackActivity.class); + if (TextUtils.isEmpty(mOnLineRecordList.get(position).getId())) { + return; + } + intent.putExtra("TYPE", MediaPlayBackActivity.IS_VIDEO_REMOTE_RECORD); + intent.putExtra("ID", mOnLineRecordList.get(position).getId()); + intent.putExtra("dateString", mOnLineRecordList.get(position).getStartTime()); + startActivity(intent); + } + }); + isCanRefrash = false; + } else { + tv_no_sdcard.setVisibility(View.VISIBLE); + // RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + Toast.makeText(getContext(), "没有录像", Toast.LENGTH_SHORT).show(); + } + } + } + }); + } else { + tv_no_sdcard.setVisibility(View.VISIBLE); + // RecordListActivity.this.findViewById(R.id.list_records_novideo).setVisibility(View.VISIBLE); + } + } + } + }); + } + + private void initListener() { + mReplayTip.setOnClickListener(this); + mLiveMode.setOnClickListener(this); + mLivePtz.setOnClickListener(this); + iv_live_ptz.setOnClickListener(this); + mLiveSound.setOnClickListener(this); + mLiveScale.setOnClickListener(this); + mLiveScale.setTag("PORTRAIT"); + mLiveStop.setOnClickListener(this); + mLiveScreenshot.setOnClickListener(this); + mLiveTalk.setOnClickListener(this); + mLiveRecord.setOnClickListener(this); + list_device_localvideo.setOnClickListener(this); + tv_device_localvideo.setOnClickListener(this); + list_device_cloudvideo.setOnClickListener(this); + iv_top.setOnClickListener(this); + iv_down.setOnClickListener(this); + iv_left.setOnClickListener(this); + iv_right.setOnClickListener(this); + iv_top1.setOnClickListener(this); + iv_down1.setOnClickListener(this); + iv_left1.setOnClickListener(this); + iv_right1.setOnClickListener(this); + iv_top.setOnLongClickListener(this); + iv_down.setOnLongClickListener(this); + iv_left.setOnLongClickListener(this); + iv_right.setOnLongClickListener(this); + live_ptz1.setOnClickListener(this); + live_screenshot1.setOnClickListener(this); + live_talk1.setOnClickListener(this); + live_record1.setOnClickListener(this); + iv_lock_screen.setOnClickListener(this); + } + + /** + * 描述:MediaPlayActivity创建完毕 + * + * @param savedInstanceState + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + listener = new MyBaseWindowListener(); + mPlayWin.setWindowListener(listener); + mPlayWin.openTouchListener(); + + // 开启横竖屏切换 + startListener(); + + + // int ability = channelInfo.getAbility(); + // if ((ability & ChannelInfo.Ability.AudioTalk) == 0) { + // if (getActivity().getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_LANDSCAPE) { + // mLiveTalk.setOnClickListener(new OnClickListener() { + // @Override + // public void onClick(View v) { + // toast(R.string.video_monitor_unsupport_audio_talk); + // } + // }); + // } else if + // (getActivity().getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_PORTRAIT) { + // mLiveTalk.setOnClickListener(new OnClickListener() { + // @Override + // public void onClick(View v) { + // toast(R.string.video_monitor_unsupport_audio_talk); + // } + // }); + // } + // } + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + play(0); + } + + @Override + public void onPause() { + super.onPause(); + // 停止实时视频,无效资源号 + stop(-1); + // 关闭语音对讲 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + } + + @Override + public void onDestroyView() { + // TODO Auto-generated method stub + super.onDestroyView(); + mPlayWin.uninitPlayWindow();// 销毁底层资源 + } + + /** + * 描述:实现个性化界面 + * + * @param mConfiguration + */ + @Override + protected void resetViews(Configuration mConfiguration) { + super.resetViews(mConfiguration); + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + mLiveUseLayout.setVisibility(View.GONE); + mLiveBack.setVisibility(View.GONE); + mLiveScale.setTag("LANDSCAPE"); + mLiveScale.setImageResource(R.drawable.live_btn_smallscreen); + live_ptz1.setVisibility(View.VISIBLE); + live_screenshot1.setVisibility(View.VISIBLE); + live_talk1.setVisibility(View.VISIBLE); + live_record1.setVisibility(View.VISIBLE); + if (IsPTZOpen) { + rl_full_ptz.setVisibility(View.VISIBLE); + } + iv_lock_screen.setVisibility(View.VISIBLE); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + mLiveUseLayout.setVisibility(View.VISIBLE); + mLiveBack.setVisibility(View.VISIBLE); + mLiveScale.setTag("PORTRAIT"); + mLiveScale.setImageResource(R.drawable.live_btn_fullscreen); + rl_full_ptz.setVisibility(View.GONE); + live_ptz1.setVisibility(View.GONE); + live_screenshot1.setVisibility(View.GONE); + live_talk1.setVisibility(View.GONE); + live_record1.setVisibility(View.GONE); + iv_lock_screen.setVisibility(View.GONE); + isCanChangeScreen = true; + } + } + + private void sendCloudOrder(final Cloud mCloud, final boolean longclick) { + if (IsPTZOpen && isPlaying) { + // super.sendCloudOrder(mCloud, longclick); + Log.d(TAG, "-----is longclick:" + longclick); + ChannelPTZInfo.Operation operation = ChannelPTZInfo.Operation.Move; + ChannelPTZInfo.Direction direction = null; + switch (mCloud) { + case up: + direction = ChannelPTZInfo.Direction.Up; + Log.d(TAG, "-----Up"); + break; + case down: + direction = ChannelPTZInfo.Direction.Down; + Log.d(TAG, "-----Down"); + break; + case left:// 手势向左, 摄像头向右转 + direction = ChannelPTZInfo.Direction.Left; + Log.d(TAG, "-----case left"); + break; + case right: + direction = ChannelPTZInfo.Direction.Right; + Log.d(TAG, "-----case right"); + break; + case zoomin: + direction = ChannelPTZInfo.Direction.ZoomIn; + Log.d(TAG, "-----ZoomIn"); + break; + case zoomout: + direction = ChannelPTZInfo.Direction.ZoomOut; + Log.d(TAG, "-----ZoomOut"); + break; + case stop: + Log.d(TAG, "-----stop"); + operation = ChannelPTZInfo.Operation.Stop; + // direction = ChannelPTZInfo.Direction.Down; + break; + default: + break; + } + ChannelPTZInfo ptzInfo = new ChannelPTZInfo(operation, direction); + ptzInfo.setDuration(ChannelPTZInfo.Duration.Short); + if (longclick) { + ptzInfo.setDuration(ChannelPTZInfo.Duration.Long); + } + + Business.getInstance().AsynControlPtz(channelId, + ptzInfo, new Handler() { + @Override + public void handleMessage(Message msg) { + if (!isAdded() || getActivity() == null) { + Log.d(TAG, "*******page not exits"); + return; + } + // Log.d(TAG, + // "-----control callback what:"+msg.what); + RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0) { + Log.d(TAG, "-----control result: true"); + } else + toast(retObject.mMsg); + } + }); + } + } + + /** + * 描述:开始播放 + */ + public void play(final int strRes) { + if (DensityUtil.checkNetworkConnection(getContext())) { + playOnline(strRes); + } else { + if (SharedpreferencesUtil.get("isShowMobilePlay", "").toString().equals("1")) { + playOnline(strRes); + } else { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + SharedpreferencesUtil.save("isShowMobilePlay", "1"); + playOnline(strRes); + break; + } + } + }); + dialog.setContent("你正在使用非WIFI网络继续播放将产生流量费用"); + dialog.setCancleBtn("暂停播放"); + dialog.setSureBtn("继续播放"); + dialog.setCancelable(false); + dialog.show(); + } + } + } + + private void playOnline(int strRes) { + stop(-1); + // } + if (strRes > 0) { + showLoading(strRes); + } else { + showLoading(R.string.common_loading); + } + mPlayWin.playRtspReal( + Business.getInstance().getToken(), + channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo + .getEncryptKey() : channelInfo.getDeviceCode(), + channelInfo.getIndex(), bateMode, true);//最后一个参数为true,表示使用长连接 + } + + /** + * 描述:停止播放 + */ + public void stop(final int res) { + // 关闭播放加载控件 + mProgressDialog.setStop(); + + if (isRecord) { + stopRecord();// 关闭录像 + } + + if (isOpenSound) { + closeAudio();// 关闭音频 + isOpenSound = false; + mLiveSound.setImageResource(R.drawable.live_btn_sound_off); + } + mPlayWin.stopRtspReal(false);// 关闭视频 + isPlaying = false; + + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + if (res > 0) + showErrorTip(res); + } + } + }); + } + } + + /** + * 描述:抓拍图像 + */ + public String capture() { + String captureFilePath = null; + // 判断SD卡是否已存在 + // SD卡容量检查 + // FIXME 检查设备是否在线 + // 抓图 + String channelName = null; + if (channelInfo != null) { + channelName = channelInfo.getName(); + } else { + channelName = ""; + } + + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + + captureFilePath = MediaPlayHelper.getCaptureAndVideoPath(DHFilesType.DHImage, channelName); + int ret = mPlayWin.snapShot(captureFilePath); + if (ret == retOK) { + // 扫描到相册中 + MediaScannerConnection.scanFile(getActivity(), new String[]{captureFilePath}, null, null); + Bitmap loacalBitmap = getLoacalBitmap(captureFilePath); + iv_screen_shot.setImageBitmap(loacalBitmap); + iv_screen_shot.setVisibility(View.VISIBLE); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + iv_screen_shot.setVisibility(View.GONE); + } + }, 2000); + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_success, + Toast.LENGTH_SHORT).show(); + } else { + captureFilePath = null; + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_failed, + Toast.LENGTH_SHORT).show(); + } + return captureFilePath; + } + + public boolean startRecord() { + if (!isPlaying) { + toast(R.string.video_monitor_video_record_failed); + return false; + } + // 判断SD卡是否已存在 + // SD卡容量检查 + + // FIXME 要做 ~~~~检查设备是否在线 + + // 录像的路径 + String channelName = null; + if (channelInfo != null) { + channelName = channelInfo.getName(); + } else { + channelName = ""; + } + + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + + path = MediaPlayHelper.getCaptureAndVideoPath(DHFilesType.DHVideo, + channelName); + int recordType = 1; + long spaceRemain = 0x7FFFFFFF; //保留字段 + // 开始录制 1 + int ret = mPlayWin.startRecord(path, recordType, spaceRemain); + if (ret != retOK) { + toast(R.string.video_monitor_video_record_failed); + return false; + } + + return true; + } + + /** + * 关闭录像 + */ + public void stopRecord() { + mPlayWin.stopRecord(); + isRecord = false; + toast(getString(R.string.video_monitor_video_record_success)); + live_record1.setImageResource(R.drawable.icon_column_videotape); + mLiveRecord.setImageResource(R.drawable.icon_videotape_nor); + currentSecond = 0; + ll_record_time.setVisibility(View.GONE); + + MediaScannerConnection.scanFile(getActivity(), new String[]{path}, + null, null); + } + + /** + * 打开声音 + */ + public boolean openAudio() { + return mPlayWin.playAudio() == retOK; + } + + /** + * 关闭声音 + */ + public boolean closeAudio() { + return mPlayWin.stopAudio() == retOK; + } + + /** + * 描述:开始对讲 + */ + public void startTalk() { + if (!isPlaying) { + toast(R.string.video_monitor_talk_open_error); + return; + } + + toastWithImg(getString(R.string.video_monitor_media_talk), R.drawable.live_pic_talkback); + + // 替换图片 + live_talk1.setImageResource(R.drawable.icon_column_suspend_per); + mLiveTalk.setImageResource(R.drawable.icon_dialogue_pre); + mOpenTalk = AudioTalkStatus.talk_opening; + // 关闭扬声器 默认为关 + if (isOpenSound) { + closeAudio(); + mLiveSound.setImageResource(R.drawable.live_btn_sound_off); + } + mLiveSound.setClickable(false); + LCOpenSDK_Talk.setListener(new AudioTalkerListener()); + LCOpenSDK_Talk.playTalk( + Business.getInstance().getToken(), + channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo + .getEncryptKey() : channelInfo.getDeviceCode(), true);//对讲使用长连接 + + + + /*LCOpenSDK_ParamTalk paramTalk = new LCOpenSDK_ParamTalk( + LCDeviceEngine.newInstance().accessToken, + deviceListBean.deviceId, + deviceListBean.channels.size() > 1 ? Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId) : -1, + TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey, + deviceListBean.playToken, + true + ); + LCOpenSDK_Talk.playTalk(paramTalk);*/ + } + + /** + * 描述:停止对讲 + */ + public void stopTalk() { + Log.d("playAudio", "stopTalk press"); + toast(R.string.video_monitor_media_talk_close); + // 替换图片 + live_talk1.setImageResource(R.drawable.icon_column_suspend1); + mLiveTalk.setImageResource(R.drawable.icon_dialogue_nor); + LCOpenSDK_Talk.stopTalk(); + // 解决gc回收问题 + LCOpenSDK_Talk.setListener(null); + mOpenTalk = AudioTalkStatus.talk_close; + // 开启扬声器 + if (isOpenSound && isPlaying) { + openAudio(); + mLiveSound.setImageResource(R.drawable.live_btn_sound_on); + } + mLiveSound.setClickable(true); + } + + @Override + public void onClick(View view) { + // TODO Auto-generated method stub + switch (view.getId()) { + case R.id.live_ptz: + case R.id.live_ptz1: + if (!isPlaying) { + return; + } + if ((channelInfo.getAbility() & ChannelInfo.Ability.PTZ) != 0) { + if (1 == 1) { + Log.i("393", "MediaPlayOnlineFragment onClick()" + (393 & 64)); + Log.i("457", "MediaPlayOnlineFragment onClick()" + (457 & 64)); + if ((channelInfo.getAbility() & ChannelInfo.Ability.PTZ) != 0) { + if (IsPTZOpen) { + // 测试专用 + // mPlayWin.setStreamCallback(0); + IsPTZOpen = false; + rl_live_ptz.setVisibility(View.GONE); + rl_full_ptz.setVisibility(View.GONE); + rl_local_video.setVisibility(View.VISIBLE); + mLivePtz.setImageResource(R.drawable.icon_control_nor); + live_ptz1.setImageResource(R.drawable.icon_column_control_nor); + } else { + // 测试专用 + // mPlayWin.setStreamCallback(1); + IsPTZOpen = true; + rl_local_video.setVisibility(View.GONE); + rl_live_ptz.setVisibility(View.VISIBLE); + mLivePtz.setImageResource(R.drawable.icon_control_pre); + live_ptz1.setImageResource(R.drawable.icon_column_control_pre); + if (mLiveScale.getTag().toString().equals("LANDSCAPE")) { + rl_full_ptz.setVisibility(View.VISIBLE); + } + } + } else { + toast(R.string.toast_device_ability_no_ptz); + } + } + } + break; + case R.id.iv_live_ptz: + if (IsPTZOpen) { + // 测试专用 + // mPlayWin.setStreamCallback(0); + IsPTZOpen = false; + mLivePtz.setImageResource(R.drawable.icon_control_nor); + rl_live_ptz.setVisibility(View.GONE); + rl_local_video.setVisibility(View.VISIBLE); + } + break; + case R.id.live_scale: + if ("LANDSCAPE".equals(mLiveScale.getTag())) { + mOrientation = ORIENTATION.isPortRait; + getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else { + mOrientation = ORIENTATION.isLandScape; + getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + break; + case R.id.live_stop: + if (isPlaying) { + mReplayTip.setVisibility(View.VISIBLE); + setButtonAlpha(0.5f); + // 停止实时视频,无效资源号 + stop(-1); + mLiveStop.setImageResource(R.drawable.icon_column_play); + // 关闭语音对讲 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + } else { + mReplayTip.setVisibility(View.GONE); + setButtonAlpha(1.0f); + mLiveStop.setImageResource(R.drawable.icon_column_suspend); + play(0); + } + break; + case R.id.live_mode: + // if(isPlaying) //播放是个异步的,多次点击会使停止播放顺序乱掉 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + // 高清切换到流畅 + if (bateMode == MediaMain) { + bateMode = MediaAssist; + mLiveMode.setText("流畅"); + play(R.string.video_monitor_change_stream_normal); + }// 流畅切换到高清 + else if (bateMode == MediaAssist) { + bateMode = MediaMain; + mLiveMode.setText("高清"); + play(R.string.video_monitor_change_stream_hd); + } + break; + case R.id.live_talk: + case R.id.live_talk1: + switch (mOpenTalk) { + case talk_open: + case talk_opening: + stopTalk(); + break; + case talk_close: + openTalk(); + // startTalk(); + break; + default: + break; + } + break; + case R.id.live_sound: + if (mOpenTalk != AudioTalkStatus.talk_close || !isPlaying) { + toast(R.string.video_monitor_load_talk_sound_error); + } else { + if (isOpenSound) { + boolean result = closeAudio(); + if (result) { + mLiveSound + .setImageResource(R.drawable.live_btn_sound_off); + toast(R.string.video_monitor_sound_close); + isOpenSound = false; + } + } else { + boolean result = openAudio(); + if (result) { + mLiveSound + .setImageResource(R.drawable.live_btn_sound_on); + toast(R.string.video_monitor_sound_open); + isOpenSound = true; + } + } + } + break; + case R.id.live_screenshot: + case R.id.live_screenshot1: + live_screenshot1.setImageResource(R.drawable.icon_column_photograph); + mLiveScreenshot.setImageResource(R.drawable.icon_photograph_pre); + capture(); + mLiveScreenshot.setImageResource(R.drawable.icon_photograph_nor); + break; + case R.id.live_record: + case R.id.live_record1: + if (!isRecord) { + boolean result = startRecord(); + if (result) { + toastWithImg(getString(R.string.video_monitor_media_record), R.drawable.live_pic_record); + isRecord = true; + isPause = false; + live_record1.setImageResource(R.drawable.icon_column_videotape_per); + mLiveRecord.setImageResource(R.drawable.icon_videotape_pre); + ll_record_time.setVisibility(View.VISIBLE); + //显示录制时间 + timeRunable.run(); + } + } else { + isPause = true; + stopRecord(); + } + break; + case R.id.live_play_pressed: + mLiveStop.setImageResource(R.drawable.icon_column_suspend); + setButtonAlpha(1.0f); + play(-1); + break; + case R.id.list_device_cloudvideo: + Intent intent = new Intent(getContext(), RecordListActivity.class); + intent.putExtra("UUID", channelId); + intent.putExtra("MEDIA_TITLE", R.string.cloud_records_name); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD); + startActivity(intent); + break; + case R.id.list_device_localvideo: + case R.id.tv_device_localvideo: + Intent intent1 = new Intent(getContext(), RecordListActivity.class); + intent1.putExtra("UUID", channelId); + intent1.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent1.putExtra("MEDIA_TITLE", R.string.local_records_name); + startActivity(intent1); + break; + case R.id.iv_top: + case R.id.iv_top1: + sendCloudOrder(Cloud.up, false); + break; + case R.id.iv_down: + case R.id.iv_down1: + sendCloudOrder(Cloud.down, false); + break; + case R.id.iv_left: + case R.id.iv_left1: + sendCloudOrder(Cloud.left, false); + break; + case R.id.iv_right: + case R.id.iv_right1: + sendCloudOrder(Cloud.right, false); + break; + case R.id.iv_lock_screen: + if (iv_lock_screen.isChecked()) { + Toast.makeText(getContext(), "横屏已锁定", Toast.LENGTH_SHORT).show(); + isCanChangeScreen = false; + } else { + Toast.makeText(getContext(), "解除横屏锁定", Toast.LENGTH_SHORT).show(); + isCanChangeScreen = true; + } + break; + default: + break; + } + } + + private void setButtonAlpha(float alpha) { + live_ptz1.setAlpha(alpha); + live_screenshot1.setAlpha(alpha); + live_talk1.setAlpha(alpha); + live_record1.setAlpha(alpha); + mLiveMode.setAlpha(alpha); + mLiveSound.setAlpha(alpha); + } + + @Override + public boolean onLongClick(View v) { + switch (v.getId()) { + case R.id.iv_top: + sendCloudOrder(Cloud.up, false); + break; + case R.id.iv_down: + sendCloudOrder(Cloud.down, false); + break; + case R.id.iv_left: + sendCloudOrder(Cloud.left, false); + break; + case R.id.iv_right: + sendCloudOrder(Cloud.right, false); + break; + } + return false; + } + + /** + * 权限检查) + */ + public void openTalk() { + boolean isMinSDKM = Build.VERSION.SDK_INT < 23; + boolean isGranted = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED; + if (isMinSDKM || isGranted) { + startTalk(); + // 对讲权限 + return; + } + requestRecordAudioPermission(); + } + + private void requestRecordAudioPermission() { + + if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), + Manifest.permission.RECORD_AUDIO)) { + + Logger.d("Uriah", "Uriah + shouldShowRequestPermission true"); + ActivityCompat.requestPermissions(getActivity(), + new String[]{Manifest.permission.RECORD_AUDIO}, + 1); + } else { + ActivityCompat.requestPermissions(getActivity(), + new String[]{Manifest.permission.RECORD_AUDIO}, + 1); + } + } + + public enum Cloud { + up, down, left, right, leftUp, rightUp, leftDown, RightDown, zoomin, zoomout, stop + } + + private enum AudioTalkStatus { + talk_close, talk_opening, talk_open + } + + //handler + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(MediaPlayOnlineFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + MediaPlayOnlineFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } + + class MyBaseWindowListener extends LCOpenSDK_EventListener { + @Override + public void onPlayerResult(int index, String code, int type) { + if (type == Business.RESULT_SOURCE_OPENAPI) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_play_error); + } + } + }); + } + } else { + if (code.equals(PlayerResultCode.STATE_PACKET_FRAME_ERROR) + || code.equals(PlayerResultCode.STATE_RTSP_TEARDOWN_ERROR) + || code.equals(PlayerResultCode.STATE_RTSP_AUTHORIZATION_FAIL) + || code.equals(PlayerResultCode.STATE_RTSP_KEY_MISMATCH)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_play_error); + } + } + }); + } + } + } + } + + @Override + public void onPlayBegan(int index) { + // TODO Auto-generated method stub + // 显示码率 + // if (mHander != null) { + // mHander.post(MediaPlayOnlineFragment.this); + // } + isPlaying = true; + // 建立码流,自动开启音频 + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + // showLoading(R.string.video_monitor_data_cache); + onClick(mLiveSound); + } + } + }); + } + // 关闭播放加载控件 + mProgressDialog.setStop(); + } + + // public void onReceiveData(int len) { + // // 流量统计 + // mTotalFlow += len; + // } + @Override + public void onStreamCallback(int index, byte[] data, int len) { + // Log.d(TAG, "LCOpenSDK_EventListener::onStreamCallback-size : " + + // len); + try { + String path = Environment.getExternalStorageDirectory() + .getPath() + "/streamCallback.ts"; + FileOutputStream fout = new FileOutputStream(path, true); + fout.write(data); + fout.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onWindowLongPressBegin(int index, Direction dir, float dx, + float dy) { + sendCloudOrder(direction2Cloud(dir), true); + } + + @Override + public void onWindowLongPressEnd(int index) { + sendCloudOrder(Cloud.stop, false); + } + + // 电子缩放 + @Override + public void onZooming(int index, float dScale) { + if (IsPTZOpen == false) { + mPlayWin.doScale(dScale); + } + + } + + // 云台缩放 + @Override + public void onZoomEnd(int index, ZoomType zoom) { + Log.d(TAG, "onZoomEnd" + zoom); + if (IsPTZOpen == false) { + return; + } + // TODO Auto-generated method stub + sendCloudOrder(zoom == ZoomType.ZOOM_IN ? Cloud.zoomin + : Cloud.zoomout, false); + } + + // 滑动开始 + @Override + public boolean onSlipBegin(int index, Direction dir, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin "); + } + sendCloudOrder(direction2Cloud(dir), false); + return true; + } + + // 滑动中 + @Override + public void onSlipping(int index, Direction dir, float prex, + float prey, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin onFlinging"); + mPlayWin.doTranslate(dx, dy); + } + } + + // 滑动结束 + @Override + public void onSlipEnd(int index, Direction dir, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin onFlingEnd"); + return; + } + + // sendCloudOrder(Cloud.stop, false); + } + + private Cloud direction2Cloud(Direction dir) { + Cloud cloud = null; + switch (dir) { + case Up: + cloud = Cloud.up; + break; + case Down: + cloud = Cloud.down; + break; + case Left: + cloud = Cloud.left; + break; + case Right: + cloud = Cloud.right; + break; + case Left_up: + cloud = Cloud.leftUp; + break; + case Left_down: + cloud = Cloud.leftDown; + break; + case Right_up: + cloud = Cloud.rightUp; + break; + case Right_down: + cloud = Cloud.RightDown; + break; + default: + break; + } + return cloud; + } + + public void onWindowDBClick(int index, float dx, float dy) { + // TODO Auto-generated method stub + switch (mLiveMenu.getVisibility()) { + case View.GONE: + mLiveMenu.setVisibility(View.VISIBLE); + break; + case View.VISIBLE: + mLiveMenu.setVisibility(View.GONE); + break; + default: + break; + } + } + + } + + class AudioTalkerListener extends LCOpenSDK_TalkerListener { + /** + * 描述:对讲状态获取 + */ + @Override + public void onTalkResult(String error, int type) { + // TODO Auto-generated method stub + if (type == Business.RESULT_SOURCE_OPENAPI + || error.equals(AUDIO_TALK_ERROR) + || error.equals(PlayerResultCode.STATE_PACKET_FRAME_ERROR) + || error.equals(PlayerResultCode.STATE_RTSP_TEARDOWN_ERROR) + || error.equals(PlayerResultCode.STATE_RTSP_AUTHORIZATION_FAIL)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + // 提示对讲打开失败 + toast(R.string.video_monitor_talk_open_error); + stopTalk();// 关闭播放 + } + } + }); + } + } else if (error.equals(PlayerResultCode.STATE_RTSP_PLAY_READY)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + // 提示对讲打开成功 + toast(R.string.video_monitor_media_talk_ready); + } + } + }); + } + mOpenTalk = AudioTalkStatus.talk_open; + } + + } + + @Override + public void onTalkPlayReady() { + // TODO Auto-generated method stub + + } + + @Override + public void onAudioRecord(byte[] pData, int length, int audioFormat, int sampleRate, int sampleDepth) { + super.onAudioRecord(pData, length, audioFormat, sampleRate, sampleDepth); + BufferedOutputStream bufferedOutputStream; + FileOutputStream fileOutputStream; + String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioFile.pcm"; + File file = new File(filePath); + if (file.exists()) { + try { + fileOutputStream = new FileOutputStream(file, true); + bufferedOutputStream = new BufferedOutputStream(fileOutputStream); + try { + bufferedOutputStream.write(pData); + bufferedOutputStream.flush(); + bufferedOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + + } + } else { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public void onAudioReceive(byte[] pData, int length, int audioFormat, int sampleRate, int sampleDepth) { + super.onAudioReceive(pData, length, audioFormat, sampleRate, sampleDepth); + } + + } +} diff --git a/app/src/main/java/com/lechange/demo/message/AlarmMessageActivity.java b/app/src/main/java/com/lechange/demo/message/AlarmMessageActivity.java new file mode 100644 index 0000000..7b9b264 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/message/AlarmMessageActivity.java @@ -0,0 +1,389 @@ +package com.lechange.demo.message; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.AlarmMessageInfo; +import com.lechange.demo.business.util.ImageHelper; +import com.lechange.demo.business.util.TaskPoolHelper; +import com.lechange.demo.common.CommonTitle; +import com.lechange.demo.common.CommonTitle.OnTitleClickListener; +import com.lechange.demo.common.DatePicker; +import com.lechange.demo.common.DatePicker.OnTimeClickListener; +import com.lechange.demo.common.ProgressDialog; +import com.yonsz.z1.R; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +public class AlarmMessageActivity extends Activity { + + private String tag="AlarmMessageActivity"; + private String mChannelUUID = null; + + private DatePicker mDatePicker; + private LinearLayout mDatePickerContainer; //放置DatePicker的容器 + private ListView mAlarmMsgListView; //放置报警信息的listview + private CommonTitle mCommonTitle; + private ProgressDialog mProgressDialog; //播放加载使用 + private AlarmMsgListAdapter mAlarmMsgAdapt; + private List mAlarmMsgInfoList; // 保存报警信息 + + private ImageView mNoMsgImageView; //无报警消息 + private ImageView mShowBigImageView; //显示大图 + + private String mStartTime; //开始时间 + private String mEndTime; //结束时间 + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_alarm_message); + + mChannelUUID = getIntent().getStringExtra("UUID"); //获取通道的UUID + initTitle(); + //开启播放加载控件 + mProgressDialog = (ProgressDialog) this.findViewById(R.id.query_load); + mProgressDialog.setStart(getString(R.string.common_loading)); + + initAlarmMsgListView(); + initBigImageView(); + + + } + + /** + * 初始化大图,并添加点击事件 + * @note 当大图显示中,界面只显示此控件。点击此控件,该控件隐藏,mAlarmMsgListView与mCommonTitle显示 + */ + public void initBigImageView(){ + mShowBigImageView = (ImageView) findViewById(R.id.showBigPhoto); + mShowBigImageView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + mProgressDialog.setStop(); //关闭加载窗口 + mShowBigImageView.setTag(0); + + mDatePickerContainer.setVisibility(View.VISIBLE); + mAlarmMsgListView.setVisibility(View.VISIBLE); + mCommonTitle.setVisibility(View.VISIBLE); + mShowBigImageView.setVisibility(View.GONE); + } + }); + } + + /** + * 初始化标题栏,管理mDatePickerContainer + * @note 点击右边按钮,会弹出时间选择器 + */ + public void initTitle() { + mDatePickerContainer = (LinearLayout) findViewById(R.id.timerContainer); + // 绘制标题 + mCommonTitle = (CommonTitle) findViewById(R.id.title); + mCommonTitle.initView(R.drawable.title_btn_back, + R.drawable.title_btn_search, R.string.alarm_message_name); + + mCommonTitle.setOnTitleClickListener(new OnTitleClickListener() { + @Override + public void onCommonTitleClick(int id) { + // TODO Auto-generated method stub + switch (id) { + case CommonTitle.ID_LEFT: + finish(); + break; + case CommonTitle.ID_RIGHT: + // 添加时间选择控件 + Log.d(tag,tag + mDatePickerContainer.getChildCount()); + if (mDatePickerContainer.getChildCount() > 0) { + return; + } + + // undo 添加datepicker + if (mDatePicker == null) { + mDatePicker = new DatePicker(getApplicationContext()); + initDatePicker(); + } + + LayoutParams lp = new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT); + mDatePickerContainer.addView(mDatePicker, lp); + break; + default: + break; + } + } + }); + } + + /** + * 初始化时间选择控件,主要是添加事件响应函数 + */ + + public void initDatePicker() { + if (mDatePicker == null) { + return; + } + + mDatePicker.setOnTimeClickListener(new OnTimeClickListener() { + + @Override + public void onCommonTimeClick(int id) { + if (id == DatePicker.ID_LEFT) { // 点击左边 + mDatePickerContainer.removeView(mDatePicker); + } else { // 点击右边 + Date time = mDatePicker.getSelectedDate(); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String date = df.format(time); + + mStartTime = date + " 00:00:00"; + mEndTime = date + " 23:59:59"; + + mDatePickerContainer.removeView(mDatePicker); + loadAlarmMsgList(mStartTime, mEndTime); + //清空屏幕 + mAlarmMsgAdapt.notifyDataSetChanged(); + mNoMsgImageView.setVisibility(View.GONE); + mProgressDialog.setStart(getString(R.string.common_loading)); + } + + } + }); + } + + /** + * 初始化报警消息列表 + */ + public void initAlarmMsgListView(){ + + mAlarmMsgListView = (ListView) findViewById(R.id.messageList); + mNoMsgImageView = (ImageView) findViewById(R.id.noMsgImg); + + mAlarmMsgAdapt = new AlarmMsgListAdapter(this); + mAlarmMsgListView.setAdapter(mAlarmMsgAdapt); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + mStartTime = df.format(new Date()) + " 00:00:00"; + mEndTime = df.format(new Date()) + " 23:59:59"; + + loadAlarmMsgList(mStartTime,mEndTime); + } + + /** + * 更新报警消息 + * @param startTime 报警开始时间段 + * @param endTime 报警结束时间段 + */ + + public void loadAlarmMsgList(String startTime, String endTime) { + //查10条 + Business.getInstance().queryAlarmMessageList(mChannelUUID, startTime, endTime, 10, new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + mProgressDialog.setStop(); //关闭加载窗口 + if (msg.what != 0) { + Toast.makeText(AlarmMessageActivity.this, getString(R.string.toast_alarmmsg_query_failed) + msg.arg1, Toast.LENGTH_SHORT).show(); + } else if (msg.what == 0) { + mAlarmMsgInfoList = (List) msg.obj; + if (mAlarmMsgInfoList != null && mAlarmMsgInfoList.size() > 0) { + mAlarmMsgAdapt.notifyDataSetChanged(); + } else { + mNoMsgImageView.setVisibility(View.VISIBLE); + //Toast.makeText(AlarmMessageActivity.this, "没有报警消息", Toast.LENGTH_SHORT).show(); + } + } + } + }); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + TaskPoolHelper.clearTask(); + } + + class AlarmMsgListAdapter extends BaseAdapter { + private LayoutInflater mInflater; + + public AlarmMsgListAdapter(Context context) { + this.mInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return mAlarmMsgInfoList != null ? mAlarmMsgInfoList.size():0; + } + + @Override + public AlarmMessageInfo getItem(int position) { + return mAlarmMsgInfoList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + /** + * 删除某条报警信息 + * @param info + */ + private void deleteAlarmMsg(final AlarmMessageInfo info) { + Business.getInstance().deleteAlarmMessage(info, new Handler() { + + @Override + public void handleMessage(Message msg) { + if (msg.what != 0) { + Toast.makeText(AlarmMessageActivity.this, R.string.toast_alarmmsg_delete_failed, + Toast.LENGTH_LONG).show(); + } else { + //mAlarmMsgInfoList.remove(info); + //mAlarmMsgAdapt.notifyDataSetChanged(); + + loadAlarmMsgList(mStartTime,mEndTime); + //清空屏幕 + mAlarmMsgAdapt.notifyDataSetChanged(); + mNoMsgImageView.setVisibility(View.GONE); + mProgressDialog.setStart(getString(R.string.common_loading)); + } + } + }); + } + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate( + R.layout.activity_alarm_message_item, null); + holder.photo = (ImageView) convertView.findViewById(R.id.photo); + holder.timeText = (TextView) convertView + .findViewById(R.id.alarmTime); + holder.deleteButton = (ImageView) convertView + .findViewById(R.id.delete); + + // 删除按钮添加响应事件 + holder.deleteButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which) { + switch(which){ + case Dialog.BUTTON_POSITIVE: + deleteAlarmMsg(holder.info); + break; + case Dialog.BUTTON_NEGATIVE: + break; + case Dialog.BUTTON_NEUTRAL: + break; + } + } + }; + //dialog参数设置 + AlertDialog.Builder builder=new AlertDialog.Builder(AlarmMessageActivity.this); //先得到构造器 + builder.setTitle(R.string.alarm_message_delete_dialog_title); //设置标题 + builder.setMessage(R.string.alarm_message_delete_dialog_message); //设置内容 + builder.setPositiveButton(R.string.dialog_positive,dialogOnclicListener); + builder.setNegativeButton(R.string.dialog_negative,dialogOnclicListener); + builder.create().show(); + } + }); + + holder.photo.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + mAlarmMsgListView.setVisibility(View.GONE); + mCommonTitle.setVisibility(View.GONE); + mDatePickerContainer.setVisibility(View.GONE); + + mProgressDialog.setStart(getString(R.string.common_loading)); + mShowBigImageView.setTag(holder.info.getPicUrl().hashCode()); + mShowBigImageView.setImageDrawable(null); + mShowBigImageView.setVisibility(View.VISIBLE); + if(holder.info.getPicUrl() != null && holder.info.getPicUrl().length() > 0) + ImageHelper.loadRealImage(holder.info.getPicUrl(), holder.info.getDeviceId(),holder.info.getDeviceKey() != null ? holder.info.getDeviceKey() : holder.info.getDeviceId(), new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if ((Integer)mShowBigImageView.getTag() == msg.what) { + mProgressDialog.setStop(); //关闭加载窗口 + if (msg.obj != null) { + mShowBigImageView.setImageDrawable((Drawable)msg.obj); + } else { + Toast.makeText(AlarmMessageActivity.this, R.string.toast_alarmmsg_load_failed, Toast.LENGTH_SHORT).show(); + } + } + } + }); + } + }); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + //修改数据信息 + holder.info = getItem(position); + Log.d("", "index : " + position); + + //背景\holder.photo图片清空 + holder.photo.setBackgroundResource(R.drawable.list_bg_device); + if(holder.info.getThumbUrl() != null && holder.info.getThumbUrl().length() > 0) + ImageHelper.loadCacheImage(holder.info.getThumbUrl(),holder.info.getDeviceId(),holder.info.getDeviceKey() != null ? holder.info.getDeviceKey() : holder.info.getDeviceId(), new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if(holder.info.getThumbUrl().hashCode() == msg.what && msg.obj != null){ + //Log.d(tag, msg.obj.toString()); + holder.photo.setBackgroundDrawable((Drawable)msg.obj); + } + } + }); + // 报警时间更新 + holder.timeText.setText(holder.info.getLocalDate()); + + + return convertView; + } + + + } + + static class ViewHolder { + public ImageView photo; + public TextView timeText; + public ImageView deleteButton; + public AlarmMessageInfo info; + } + +} diff --git a/app/src/main/java/com/lechange/demo/tools/DateHelper.java b/app/src/main/java/com/lechange/demo/tools/DateHelper.java new file mode 100644 index 0000000..acf7e7f --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/DateHelper.java @@ -0,0 +1,51 @@ +package com.lechange.demo.tools; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +public class DateHelper { + public static Date string2Date(String time) { + try { + String str = time; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = (Date) sdf.parse(str); + return date; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + public static String dateFormat(Date date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + String dateString = formatter.format(date); + return dateString; + } + + public static String dateFormatTiming(long date) { + SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); + formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00")); + String dateString = formatter.format(date); + return dateString; + } + + public static String getTimeHMS(long time) { + SimpleDateFormat format1 = new SimpleDateFormat("HH:mm:ss"); + Date date = new Date(time); + String date1 = format1.format(date); + return date1; + } + + public static long parseMills(String dateTime) { + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateTime)); + return calendar.getTimeInMillis(); + } catch (ParseException e) { + return 0; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/tools/DeviceAbilityHelper.java b/app/src/main/java/com/lechange/demo/tools/DeviceAbilityHelper.java new file mode 100644 index 0000000..bc3e007 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/DeviceAbilityHelper.java @@ -0,0 +1,19 @@ +package com.lechange.demo.tools; + +public class DeviceAbilityHelper { + + + public static boolean isHasAbility(String deviceAbility,String channelAbility,String ability1,String ability2){ + if (deviceAbility==null||channelAbility==null)return false; + + if (deviceAbility.contains(ability1)||deviceAbility.contains(ability2)){ + return true; + }else if (channelAbility.contains(ability1)||channelAbility.contains(ability2)){ + return true; + } + + return false; + + } + +} diff --git a/app/src/main/java/com/lechange/demo/tools/DialogUtils.java b/app/src/main/java/com/lechange/demo/tools/DialogUtils.java new file mode 100644 index 0000000..32d82af --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/DialogUtils.java @@ -0,0 +1,47 @@ +package com.lechange.demo.tools; + +import android.app.Activity; + +import com.lechange.demo.dialog.LoadingDialog; + +public class DialogUtils { + static LoadingDialog mLoadingDialog; + static Activity activity; + + public static void show(Activity mActivity) { + if (mActivity.isFinishing()) { + return; + } + if (activity != null) { + if (activity == mActivity) { + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + return; + } + } + } + } + activity = mActivity; + if (null != mLoadingDialog) { + dismiss(); + } + mLoadingDialog = new LoadingDialog(mActivity); + mLoadingDialog.show(); + } + + public static void dismiss() { + if (null == mLoadingDialog) { + return; + } + if (mLoadingDialog.isShowing()) { + try { + mLoadingDialog.dismissLoading(); + mLoadingDialog = null; + activity = null; + } catch (Exception e) { + mLoadingDialog = null; + activity = null; + } + } + } +} diff --git a/app/src/main/java/com/lechange/demo/tools/ImageHelper.java b/app/src/main/java/com/lechange/demo/tools/ImageHelper.java new file mode 100644 index 0000000..93a3f94 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/ImageHelper.java @@ -0,0 +1,217 @@ +package com.lechange.demo.tools; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.BitmapFactory.Options; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.util.LruCache; + +import com.lechange.common.log.Logger; +import com.lechange.opensdk.utils.LCOpenSDK_Utils; +import com.mm.android.deviceaddmodule.LCDeviceEngine; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +public class ImageHelper { + + private final static String TAG = "LCOpenSDK_Demo_ImageHelper"; + private static Options mDefaultOption; + //最近最少使用算法的缓存策略 + private static LruCache mImageCache = new LruCache(100); + + static { + mDefaultOption = new Options(); + //demo里面为了降低使用内存,图片缩小了一倍 + mDefaultOption.inSampleSize = 2; + mDefaultOption.inPreferredConfig = Config.RGB_565; + } + + public static void loadRealImage(final String url, final Handler handler) { + downloadImage(url, "real", handler); + } + + /** + * 加载普通图片(缓存) + * + * @param url + * @param handler + */ + public static void loadCacheImage(final String url, final Handler handler) { + String[] imageIDBuffer = url.split("[/?]"); + final String imageID = imageIDBuffer[imageIDBuffer.length - 2]; + Drawable drawable = mImageCache.get(imageID); + if (drawable != null) { + Message msg = new Message(); + msg.what = url.hashCode(); + msg.obj = drawable; + handler.handleMessage(msg); + } else { + downloadImage(url, imageID, handler); + } + } + + /** + * 加载加密图片(缓存) + * + * @param url + * @param key + * @param handler + */ + public static void loadCacheImage(final String url, final String deviceId, String key, int position,final Handler handler) { + String[] imageIDBuffer = url.split("[/?]"); + String imageID; + if (imageIDBuffer.length - 2 > 0) { + imageID = imageIDBuffer[imageIDBuffer.length - 2]; + } else { + imageID = ""; + } + Drawable drawable = mImageCache.get(imageID); + if (drawable != null) { + Message msg = new Message(); + msg.what = url.hashCode(); + msg.obj = drawable; + msg.arg1=position; + handler.handleMessage(msg); + } else { + downloadImage(url, imageID, deviceId, key, position, handler); + } + } + + /** + * 下载普通图片任务 + * + * @param url + * @param imageID + * @param handler + */ + private static void downloadImage(final String url, final String imageID, final Handler handler) { + TaskPoolHelper.addTask(new TaskPoolHelper.RunnableTask(imageID) { + @Override + public void run() { + Drawable drawable = null; + try { + //创建一个url对象 + URL resurl = new URL(url); + //设置超时时间 + HttpURLConnection urlConn = (HttpURLConnection) resurl.openConnection(); + urlConn.setConnectTimeout(5000); + urlConn.setReadTimeout(5000); + //打开URL对应的资源输入流 + InputStream is = urlConn.getInputStream(); + //从InputStream流中解析出图片 + Bitmap bitmap = BitmapFactory.decodeStream(is, null, mDefaultOption); + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + //加入缓存 + mImageCache.put(imageID, drawable); + //关闭输入流 + is.close(); + } catch (Exception e) { + e.printStackTrace(); + } + // 解析设备列表信息 + handler.obtainMessage(url.hashCode(), drawable).sendToTarget(); // 发送成功消息到界面 + } + }); + } + + /** + * 下载加密图片任务 + * + * @param url + * @param imageID + * @param key + * @param handler + */ + private static void downloadImage(final String url, final String imageID, final String deviceId, final String key, final int position, final Handler handler) { + TaskPoolHelper.addTask(new TaskPoolHelper.RunnableTask(imageID) { + @Override + public void run() { + Drawable drawable = null; + try { + //创建一个url对象 + URL resurl = new URL(url); + //设置超时时间 + HttpURLConnection urlConn = (HttpURLConnection) resurl.openConnection(); + urlConn.setConnectTimeout(5000); + urlConn.setReadTimeout(5000); + int code = urlConn.getResponseCode(); + Logger.e(TAG, "====getResponseCode, code=" + code + ", resurl.file=" + resurl.getFile()); + //打开URL对应的资源输入流 + InputStream is = urlConn.getInputStream(); + //从InputStream流中解析出图片 + ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); + byte[] buff = new byte[500]; + int rc = 0; + int length = 0; + while ((rc = is.read(buff, 0, 500)) > 0) { + length += rc; + swapStream.write(buff, 0, rc); + } + byte[] srcBuf = swapStream.toByteArray(); + byte[] dstBuf = new byte[500000]; + int[] dstLen = new int[1]; + dstLen[0] = 500000; + Bitmap bitmap; //=null + //调用图片解密新接口:三码合一 + int res = LCOpenSDK_Utils.decryptPic(LCDeviceEngine.newInstance().accessToken, srcBuf, length, deviceId, key, dstBuf, dstLen); + Logger.e(TAG, "====LCOpenSDK_Utils.decryptPic, res=" + res + ", length=" + length); + switch (res) { + case 0: //解密成功 + bitmap = BitmapFactory.decodeByteArray(dstBuf, 0, dstLen[0], mDefaultOption); + if (bitmap == null) { + String filepath = "sdcard/temp.jpg"; + //String sd = Environment.getExternalStorageDirectory() + "/temp.jpg"; + File file = new File(filepath); + OutputStream outputStream = new FileOutputStream(file); + outputStream.write(dstBuf); + outputStream.flush(); + outputStream.close(); + bitmap = BitmapFactory.decodeFile(filepath); + Logger.e(TAG, "BitmapFactory.decodeFile"); + } + + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + break; + case 1://待解密数据不完整 + case 3: //图片非加密 + bitmap = BitmapFactory.decodeByteArray(srcBuf, 0, length, mDefaultOption); + if (bitmap != null) { + drawable = new BitmapDrawable(bitmap); + } + break; + default: //解密失败 + break; + } + //加入缓存 + mImageCache.put(imageID, drawable); + //关闭输入流 + is.close(); + swapStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + // 解析设备列表信息 + handler.obtainMessage(url.hashCode(), position,0,drawable).sendToTarget(); // 发送成功消息到界面 + } + }); + } + + public static void clear() { + TaskPoolHelper.clearTask(); + mImageCache.evictAll(); + } +} diff --git a/app/src/main/java/com/lechange/demo/tools/MediaPlayHelper.java b/app/src/main/java/com/lechange/demo/tools/MediaPlayHelper.java new file mode 100644 index 0000000..286e426 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/MediaPlayHelper.java @@ -0,0 +1,277 @@ +package com.lechange.demo.tools; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.media.MediaScannerConnection; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.view.WindowManager; + +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; + +import java.io.File; +import java.io.FileInputStream; +import java.io.OutputStream; +import java.net.FileNameMap; +import java.net.URLConnection; +import java.text.SimpleDateFormat; + +public class MediaPlayHelper { + + private final static String ProjectName = "LechangeDemo"; + + private static Context mContext; + + public static void initContext(Context context) { + mContext = context; + } + + public enum DHFilesType { + DHImage, + DHVideo, + DHImageCache + } + + public static void setFullScreen(Activity activity) { + activity.getWindow().setFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + public static void quitFullScreen(Activity activity) { + final WindowManager.LayoutParams attrs = activity.getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + activity.getWindow().setAttributes(attrs); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + + /** + * 创建文件路径 + * + * @param file + * @param filePath + * @return + */ + public static boolean createFilePath(File file, String filePath) { + LogUtil.debugLog("20210513", "filePath::" + filePath); + int index = filePath.indexOf("/"); + if (index == -1) { + LogUtil.debugLog("20210513", "filePath---------:" + file.getAbsolutePath() + " filepath::" + filePath); + LogUtil.debugLog("20210513", "filePath---------::" + file.getPath() + " " + file.getName() + " " + file.getParent()); + // scanFile(file); + return false; + } + if (index == 0) { + filePath = filePath.substring(index + 1, filePath.length()); + index = filePath.indexOf("/"); + } + String path = filePath.substring(0, index); + File fPath; + if (file == null) { + fPath = new File(path); + } else { + fPath = new File(file.getPath() + "/" + path); + } + if (!fPath.exists()) { + if (!fPath.mkdir()) // SD卡已满无法在下载文件 + { + return false; + } + } + if (index < (filePath.length() - 1)) { + String exPath = filePath.substring(index + 1, filePath.length()); + createFilePath(fPath, exPath); + } + return true; + } + + /** + * 生成抓图路径或录像存放路径 + */ + public static String getCaptureAndVideoPath(DHFilesType type, String cameraName) { + String path = null; + String picType = null; + java.util.Date now = new java.util.Date(); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + String sdPath = null; + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + sdPath = mContext.getExternalFilesDir("demo").getAbsolutePath(); + } else { + }*/ + sdPath = Environment.getExternalStorageDirectory().getPath(); + + + if (type == DHFilesType.DHImage) { + picType = "image"; + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + cameraName + ".jpg"; + } else { + picType = "video"; + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + cameraName + ".mp4"; + } + if (type == DHFilesType.DHImageCache) { + picType = "imageCache"; + path = sdPath + "/" + ProjectName + "/" + picType + "/" + tf.format(now) + "_" + + cameraName + ".jpg"; + } + createFilePath(null, path); + return path; + } + + + public static void updatePhotoAlbum(String path) { + if (path == null) return; + String[] split = path.split("/"); + String fileName = split[split.length - 1]; + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ContentValues values = new ContentValues(); + values.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); + values.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); + values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM); + ContentResolver contentResolver = mContext.getContentResolver(); + Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + + if (uri == null) { + return; + } + OutputStream out = null; + FileInputStream fis= null; + try { + out = contentResolver.openOutputStream(uri); + fis = new FileInputStream(path); + FileUtils.copy(fis, out); + fis.close(); + out.close(); + + //导出相册成功后,删除App沙盒内的临时文件 + MediaPlayHelper.delete(path); + } catch (Exception e) { + e.printStackTrace(); + } + } else { }*/ + MediaScannerConnection.scanFile(mContext.getApplicationContext(), new String[]{path}, new String[]{"image/jpeg"}, new MediaScannerConnection.OnScanCompletedListener() { + @Override + public void onScanCompleted(String path, Uri uri) { + + } + }); + + } + + public static void updatePhotoVideo(String path) { + if (path == null) return; + String[] split = path.split("/"); + String fileName = split[split.length - 1]; + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ContentValues values = new ContentValues(); + values.put(MediaStore.Video.VideoColumns.DISPLAY_NAME, fileName); + values.put(MediaStore.Video.VideoColumns.MIME_TYPE, "video/3gp"); + values.put(MediaStore.Video.VideoColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM); + ContentResolver contentResolver = mContext.getContentResolver(); + Uri uri = contentResolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); + + if (uri == null) { + return; + } + OutputStream out = null; + FileInputStream fis = null; + try { + out = contentResolver.openOutputStream(uri); + fis = new FileInputStream(path); + FileUtils.copy(fis, out); + fis.close(); + out.close(); + + //导出相册成功后,删除App沙盒内的临时文件 + MediaPlayHelper.delete(path); + + } catch (Exception e) { + e.printStackTrace(); + } + } else {}*/ + MediaScannerConnection.scanFile(mContext.getApplicationContext(), new String[]{path}, new String[]{"video/3gp"}, new MediaScannerConnection.OnScanCompletedListener() { + @Override + public void onScanCompleted(String path, Uri uri) { + + } + }); + + } + + + public static String getMimeType(File file) { + FileNameMap fileNameMap = URLConnection.getFileNameMap(); + String type = fileNameMap.getContentTypeFor(file.getName()); + return type; + } + + + /** + * 生成下载录像存放路径 + */ + public static String getDownloadVideoPath(int type, String recordID, long startTime) { + String path = null; + String sdPath = null; + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + sdPath = mContext.getExternalFilesDir("demo").getAbsolutePath(); + } else { + }*/ + sdPath = Environment.getExternalStorageDirectory().getPath(); + + String picType = "download"; + picType += type == 0 ? "_cloud" : "_remote"; + java.util.Date now = new java.util.Date(startTime); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + recordID + ".mp4"; + createFilePath(null, path); + return path; + } + + /** + * 删除下载录像存放的录像 + */ + public static void deleteDownloadVideo(String recordID, long startTime) { + String path = null; + String sdPath = Environment.getExternalStorageDirectory().getPath(); + String picType = "download"; + java.util.Date now = new java.util.Date(startTime); + SimpleDateFormat tf = new SimpleDateFormat("yyyyMMddHHmmss"); + path = sdPath + "/" + ProjectName + "/" + tf.format(now) + "_" + picType + "_" + + recordID + ".mp4"; + File soFile = new File(path); + if (soFile.exists()) { + soFile.delete(); + } + } + + /** + * 删除缓存文件 + */ + public static void delete(String path) { + File file = new File(path); + if (file.exists()) { + file.delete(); + } + } + + public static BitmapDrawable picDrawable(String path) { + try { + FileInputStream fis = new FileInputStream(path); + Bitmap bitmap = BitmapFactory.decodeStream(fis); + BitmapDrawable bd = new BitmapDrawable(bitmap); + return bd; + } catch (Throwable e) { + return null; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/tools/RootUtil.java b/app/src/main/java/com/lechange/demo/tools/RootUtil.java new file mode 100644 index 0000000..fd28fcf --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/RootUtil.java @@ -0,0 +1,47 @@ +package com.lechange.demo.tools; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; + +public class RootUtil { + public static boolean isDeviceRooted() { + return checkRootMethod1() || checkRootMethod2() || checkRootMethod3(); + } + + private static boolean checkRootMethod1() { + String buildTags = android.os.Build.TAGS; + return buildTags != null && buildTags.contains("test-keys"); + } + + private static boolean checkRootMethod2() { + String[] paths = {"/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", + "/system/xbin/su", "/data/local/xbin/su", + "/data/local/bin/su", "/system/sd/xbin/su", + "/system/bin/failsafe/su", "/data/local/su", "/su/bin/su"}; + for (String path : paths) { + if (new File(path).exists()) { + return true; + } + } + return false; + } + + private static boolean checkRootMethod3() { + Process process = null; + try { + process = Runtime.getRuntime().exec(new String[]{"/system/xbin/which", "su"}); + BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); + if (in.readLine() != null) { + return true; + } + return false; + } catch (Throwable t) { + return false; + } finally { + if (process != null) { + process.destroy(); + } + } + } +} diff --git a/app/src/main/java/com/lechange/demo/tools/TaskPoolHelper.java b/app/src/main/java/com/lechange/demo/tools/TaskPoolHelper.java new file mode 100644 index 0000000..1fdf3c5 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/tools/TaskPoolHelper.java @@ -0,0 +1,103 @@ +package com.lechange.demo.tools; + +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.locks.LockSupport; + +public class TaskPoolHelper { + private final static String TAG = "lcop_TaskPoolHelper"; + + /** + * 构造具备过滤的task + */ + public static abstract class RunnableTask implements Runnable { + public String mTaskID; + + public RunnableTask(String taskID){ + this.mTaskID = taskID; + } + } + + //private static ExecutorService mPool = Executors.newFixedThreadPool(3); + //队列属性的task + private static ArrayBlockingQueue mQueueTask = new ArrayBlockingQueue(50); + private static List mFilteTask = new ArrayList(); + private static Thread mQueueThread; + + //实时属性的task + private static RunnableTask mRealTask; //=null + private static Thread mRealThread; + + static { + mQueueThread = new Thread() { + @Override + public void run() { + // TODO Auto-generated method stub + super.run(); + while (true) { + try { + //自带阻塞光环 + RunnableTask task = mQueueTask.take(); + task.run(); + mFilteTask.remove(task.mTaskID); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + mQueueThread.start(); + + mRealThread = new Thread() { + @Override + public void run() { + // TODO Auto-generated method stub + super.run(); + while (true) { + if (mRealTask == null) { + LockSupport.park(); + } else { + RunnableTask task = mRealTask; + mRealTask = null; + task.run(); + } + } + } + }; + mRealThread.start(); + } + + + public static void addTask(RunnableTask task) { + //过滤 + if (task.mTaskID.equals("real")) { + mRealTask = task; + LockSupport.unpark(mRealThread); + return; + } + if (mFilteTask.contains(task.mTaskID)) { + return; + } + + try { + mQueueTask.add(task); + mFilteTask.add(task.mTaskID); + } catch(IllegalStateException e) { + LogUtil.debugLog(TAG, e.getMessage()); + mQueueTask.clear(); + mFilteTask.clear(); + } + } + + + + public static void clearTask(){ + mQueueTask.clear(); + mFilteTask.clear(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceCloudRecordListFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceCloudRecordListFragment.java new file mode 100644 index 0000000..8bfc4ac --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceCloudRecordListFragment.java @@ -0,0 +1,416 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceRecordService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.CloudRecordsData; +import com.common.openapi.entity.DeleteCloudRecordsData; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.RecordListData; +import com.common.openapi.entity.RecordsData; +import com.lechange.demo.adapter.DeviceRecordListAdapter; +import com.lechange.demo.tools.DateHelper; +import com.lechange.demo.tools.DialogUtils; +import com.lechange.demo.view.LcPullToRefreshRecyclerView; +import com.lechange.pulltorefreshlistview.Mode; +import com.lechange.pulltorefreshlistview.PullToRefreshBase; +import com.mm.android.deviceaddmodule.mobilecommon.dialog.LCAlertDialog; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.mm.android.deviceaddmodule.mobilecommon.utils.TimeUtils; +import com.mm.android.deviceaddmodule.mobilecommon.utils.UIUtils; +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +public class DeviceCloudRecordListFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IDeviceCloudRecordCallBack, IGetDeviceInfoCallBack.IDeviceDeleteRecordCallBack, PullToRefreshBase.OnRefreshListener2 { + private static final String TAG = DeviceCloudRecordListFragment.class.getSimpleName(); + private Bundle arguments; + private String searchDate; + private long searchDate1; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private RecyclerView recyclerView; + private TextView tvMonthDay; + private DeviceRecordService deviceRecordService = ClassInstanceManager.newInstance().getDeviceRecordService(); + private List recordListDataList = new ArrayList<>(); + private DeviceRecordListAdapter deviceRecordListAdapter; + private long oneDay = 24 * 60 * 60 * 1000; + private static DeviceCloudRecordListFragment fragment; + private DeviceRecordListActivity deviceRecordListActivity; + private boolean editStatus = false; + private TextView tvDelete; + private List recordRegionIds = new ArrayList<>(); + private LcPullToRefreshRecyclerView deviceList; + private int pageSize = 30; + private long nextRecordId = -1; + private LCAlertDialog mLCAlertDialog; + private TextView tvToday; + + public static DeviceCloudRecordListFragment newInstance() { + fragment = new DeviceCloudRecordListFragment(); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + arguments = getArguments(); + searchDate = DateHelper.dateFormat(new Date(System.currentTimeMillis())); + searchDate1 = DateHelper.parseMills(searchDate + " 00:00:00"); + deviceRecordListActivity = (DeviceRecordListActivity) getActivity(); + deviceRecordListActivity.llEdit.setOnClickListener(this); + deviceRecordListActivity.llAll.setOnClickListener(this); + deviceRecordListActivity.llEdit.setVisibility(View.GONE); + deviceRecordListActivity.llAll.setVisibility(View.GONE); + deviceRecordListActivity.llBack.setVisibility(View.VISIBLE); + } + + public void deleteCloudRecord() { + if (!isAdded()) { + return; + } + initCloudRecord(false); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_cloud_list, container, false); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if (!hidden) { +// deviceRecordListActivity.llEdit.setVisibility(View.VISIBLE); + deviceRecordListActivity.llAll.setVisibility(editStatus ? View.VISIBLE : View.GONE); + deviceRecordListActivity.llBack.setVisibility(editStatus ? View.GONE : View.VISIBLE); + } else { + deviceRecordListActivity.llEdit.setVisibility(View.GONE); + deviceRecordListActivity.llAll.setVisibility(View.GONE); + deviceRecordListActivity.llBack.setVisibility(View.VISIBLE); + } + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initView(view); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + if (deviceListBean == null) { + return; + } + initData(); + } + + private ImageView mNextDayTv; + + private void initView(View view) { + view.findViewById(R.id.iv_day_pre).setOnClickListener(this); + mNextDayTv = view.findViewById(R.id.iv_day_next); + tvDelete = view.findViewById(R.id.tv_delete); + tvMonthDay = view.findViewById(R.id.tv_month_day); + deviceList = view.findViewById(R.id.record_list); + tvToday = view.findViewById(R.id.tv_today); + deviceList.setOnRefreshListener(this); + mNextDayTv.setOnClickListener(this); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + refreshMode(Mode.PULL_FROM_START); + refreshState(true); + } + }, 200); + recyclerView = deviceList.getRefreshableView(); + tvDelete.setOnClickListener(this); + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + } + + private void refreshState(boolean refresh) { + if (refresh) { + deviceList.setRefreshing(true); + } else { + deviceList.onRefreshComplete(); + } + } + + private void refreshMode(Mode mode) { + deviceList.setMode(mode); + } + + private void initData() { + tvMonthDay.setText(searchDate); + mCalendar.setTime(TimeUtils.stringToDate(searchDate, "yyyy-MM-dd HH:mm:ss")); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + } + + protected Calendar mCalendar = Calendar.getInstance(); + + private void initCloudRecord(boolean isLoadMore) { + if (isLoadMore) { + nextRecordId = nextRecordId; + } else { + nextRecordId = -1; + time = ""; + recordListDataList.clear(); + } + DialogUtils.show(getActivity()); + getCloudData(); + /* deviceRecordService.queryCloudUse(deviceListBean.deviceId, deviceListBean.channels.get(deviceListBean.checkedChannel).channelId, new IGetDeviceInfoCallBack.ICommon() { + @Override + public void onCommonBack(Integer response) { + if (response==-1||response==0){ + DialogUtils.dismiss(); + refreshState(false); + editStatus(false); + tvToday.setVisibility(View.VISIBLE); + tvToday.setText(getActivity().getResources().getString(R.string.lc_demo_device_cloud_not_open)); + }else{ + getCloudData(); + } + } + + @Override + public void onError(Throwable throwable) { + Toast.makeText(getActivity(),throwable.getMessage(),Toast.LENGTH_SHORT).show(); + } + });*/ + } + + private void getCloudData() { + CloudRecordsData cloudRecordsData = new CloudRecordsData(); + cloudRecordsData.data.deviceId = deviceListBean.deviceId; + cloudRecordsData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + cloudRecordsData.data.beginTime = searchDate + " 00:00:00"; + cloudRecordsData.data.endTime = searchDate + " 23:59:59"; + cloudRecordsData.data.nextRecordId = nextRecordId; + cloudRecordsData.data.count = pageSize; + deviceRecordService.getCloudRecords(cloudRecordsData, this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.iv_day_pre) { + searchDate1 = searchDate1 - oneDay; + searchDate = DateHelper.dateFormat(new Date(searchDate1)); + tvMonthDay.setText(searchDate); + mCalendar.setTime(new Date(searchDate1)); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + initCloudRecord(false); + } else if (id == R.id.tv_delete) { + recordRegionIds.clear(); + for (RecordListData recordListData : recordListDataList) { + for (RecordsData recordsData : recordListData.recordsData) { + if (recordsData.check) { + recordRegionIds.add(recordsData.recordRegionId); + } + } + } + if (recordRegionIds.size() == 0) { + return; + } + LCAlertDialog.Builder builder = new LCAlertDialog.Builder(getContext()); + builder.setTitle(R.string.lc_demo_device_delete_sure); + builder.setMessage(""); + builder.setCancelButton(com.mm.android.deviceaddmodule.R.string.common_cancel, null); + builder.setConfirmButton(com.mm.android.deviceaddmodule.R.string.common_confirm, + new LCAlertDialog.OnClickListener() { + @Override + public void onClick(LCAlertDialog dialog, int which, boolean isChecked) { + //删除 + DialogUtils.show(getActivity()); + DeleteCloudRecordsData deleteCloudRecordsData = new DeleteCloudRecordsData(); + deleteCloudRecordsData.data.recordRegionIds = recordRegionIds; + deviceRecordService.deleteCloudRecords(deleteCloudRecordsData, DeviceCloudRecordListFragment.this); + } + }); + + mLCAlertDialog = builder.create(); + mLCAlertDialog.show(getActivity().getSupportFragmentManager(), "delete"); + } else if (id == R.id.iv_day_next) { + searchDate1 = searchDate1 + oneDay; + searchDate = DateHelper.dateFormat(new Date(searchDate1)); + tvMonthDay.setText(searchDate); + mCalendar.setTime(new Date(searchDate1)); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + initCloudRecord(false); + } else if (id == R.id.ll_edit) { + editStatus(!editStatus); + if (editStatus && recordListDataList.size() <= 0) { + return; + } + for (RecordListData recordListData : recordListDataList) { + for (RecordsData recordsData : recordListData.recordsData) { + recordsData.check = false; + } + } + deviceRecordListAdapter.notifyDataSetChanged(); + } else if (id == R.id.ll_all) { + if (recordListDataList.size() <= 0) { + return; + } + for (RecordListData recordListData : recordListDataList) { + for (RecordsData recordsData : recordListData.recordsData) { + recordsData.check = true; + } + } + deviceRecordListAdapter.notifyDataSetChanged(); + } + } + + @Override + public void deviceCloudRecord(CloudRecordsData.Response result) { + if (!isAdded()) { + return; + } + tvToday.setVisibility(View.GONE); + recyclerView.setVisibility(View.VISIBLE); + DialogUtils.dismiss(); + refreshState(false); + editStatus(false); + if (result != null && result.data != null && result.data.records != null && result.data.records.size() > 0) { + if (result.data.records.size() >= pageSize) { + refreshMode(Mode.BOTH); + nextRecordId = Long.parseLong(result.data.records.get(result.data.records.size() - 1).recordId); + } else { + refreshMode(Mode.PULL_FROM_START); + } + recordListDataList = dealCloudRecord(result); + } else { + if (nextRecordId == -1) { + tvToday.setVisibility(View.VISIBLE); + recyclerView.setVisibility(View.GONE); + } + refreshMode(Mode.PULL_FROM_START); + } + showList(); + } + + private void editStatus(boolean b) { + editStatus = b; + tvDelete.setVisibility(editStatus ? View.VISIBLE : View.GONE); + deviceRecordListActivity.tvEdit.setText(editStatus ? getResources().getString(R.string.lc_demo_device_record_edit_finish) : getResources().getString(R.string.lc_demo_device_record_edit)); + deviceRecordListActivity.llAll.setVisibility(editStatus ? View.VISIBLE : View.GONE); + deviceRecordListActivity.llBack.setVisibility(editStatus ? View.GONE : View.VISIBLE); + } + + @Override + public void deleteDeviceRecord() { + if (!isAdded()) { + return; + } + DialogUtils.dismiss(); + initCloudRecord(false); + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()) { + return; + } + LogUtil.errorLog(TAG, "error", throwable); + DialogUtils.dismiss(); + refreshState(false); + refreshMode(Mode.PULL_FROM_START); + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + nextRecordId = -1; + time = ""; + recordListDataList.clear(); + editStatus(false); + showList(); + } + + private void showList() { + if (deviceRecordListAdapter == null) { + deviceRecordListAdapter = new DeviceRecordListAdapter(getContext(), recordListDataList); + recyclerView.setAdapter(deviceRecordListAdapter); + } else { + deviceRecordListAdapter.notifyDataSetChanged(); + } + deviceRecordListAdapter.setEditClickListener(new DeviceRecordListAdapter.EditClickListener() { + @Override + public void edit(int outPosition, int innerPosition) { + LogUtil.debugLog(TAG, outPosition + "..." + innerPosition); + if (editStatus) { + recordListDataList.get(outPosition).recordsData.get(innerPosition).check = !recordListDataList.get(outPosition).recordsData.get(innerPosition).check; + deviceRecordListAdapter.notifyDataSetChanged(); + } else { + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + bundle.putSerializable(MethodConst.ParamConst.recordData, recordListDataList.get(outPosition).recordsData.get(innerPosition)); + bundle.putInt(MethodConst.ParamConst.recordType, MethodConst.ParamConst.recordTypeCloud); + Intent intent = new Intent(getContext(), DeviceRecordPlayActivity.class); + intent.putExtras(bundle); + startActivityForResult(intent, 0); + } + } + }); + } + + String time = ""; + + private List dealCloudRecord(CloudRecordsData.Response result) { + for (CloudRecordsData.ResponseData.RecordsBean recordsBean : result.data.records) { + String innerTime = recordsBean.beginTime.substring(11, 13); + RecordsData a = new RecordsData(); + a.recordType = 0; + a.recordId = recordsBean.recordId; + a.deviceId = recordsBean.deviceId; + a.channelID = recordsBean.channelId; + a.beginTime = recordsBean.beginTime; + a.endTime = recordsBean.endTime; + a.size = recordsBean.size; + a.thumbUrl = recordsBean.thumbUrl; + a.encryptMode = recordsBean.encryptMode; + a.recordRegionId = recordsBean.recordRegionId; + a.type = recordsBean.type; + if (!innerTime.equals(time)) { + RecordListData r = new RecordListData(); + r.period = innerTime + ":00"; + r.recordsData = new ArrayList<>(); + r.recordsData.add(a); + recordListDataList.add(r); + time = innerTime; + } else { + RecordListData b = recordListDataList.get(recordListDataList.size() - 1); + b.recordsData.add(a); + } + } + LogUtil.debugLog(TAG, recordListDataList.size() + ""); + return recordListDataList; + } + + @Override + public void onPullDownToRefresh(PullToRefreshBase pullToRefreshBase) { + initCloudRecord(false); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase pullToRefreshBase) { + initCloudRecord(true); + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailDeploymentFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailDeploymentFragment.java new file mode 100644 index 0000000..09846e5 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailDeploymentFragment.java @@ -0,0 +1,138 @@ +package com.lechange.demo.ui; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceDetailService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceAlarmStatusData; +import com.common.openapi.entity.DeviceChannelInfoData; +import com.common.openapi.entity.DeviceDetailListData; +import com.lechange.demo.tools.DialogUtils; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; + +public class DeviceDetailDeploymentFragment extends Fragment implements IGetDeviceInfoCallBack.IDeviceChannelInfoCallBack, View.OnClickListener, IGetDeviceInfoCallBack.IDeviceAlarmStatusCallBack { + private static final String TAG = DeviceDetailDeploymentFragment.class.getSimpleName(); + private Bundle arguments; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private DeviceDetailLCActivity deviceDetailActivity; + private ImageView ivMoveCheck; + private int alarmStatus; + + public static DeviceDetailDeploymentFragment newInstance() { + DeviceDetailDeploymentFragment fragment = new DeviceDetailDeploymentFragment(); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.GONE); + arguments = getArguments(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_detail_deployment, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initView(view); + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_deployment_title)); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + if (deviceListBean == null) { + return; + } + initData(); + } + + private void initView(View view) { + ivMoveCheck = view.findViewById(R.id.iv_move_check); + ivMoveCheck.setOnClickListener(this); + } + + private void initData() { + //获取动检状态/设备详情 + DialogUtils.show(getActivity()); + DeviceDetailService deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + DeviceChannelInfoData deviceChannelInfoData = new DeviceChannelInfoData(); + deviceChannelInfoData.data.deviceId = deviceListBean.deviceId; + deviceChannelInfoData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + deviceDetailService.bindDeviceChannelInfo(deviceChannelInfoData, this); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void deviceChannelInfo(DeviceChannelInfoData.Response result) { + if (!isAdded()){ + return; + } + DialogUtils.dismiss(); + this.alarmStatus = result.data.alarmStatus; + if (result.data.alarmStatus == 1) { + ivMoveCheck.setImageDrawable(getResources().getDrawable(R.mipmap.lc_demo_switch_on)); + } else { + ivMoveCheck.setImageDrawable(getResources().getDrawable(R.mipmap.lc_demo_switch_off)); + } + } + + @Override + public void deviceAlarmStatus(boolean result) { + if (!isAdded()){ + return; + } + DialogUtils.dismiss(); + this.alarmStatus = (this.alarmStatus == 1) ? 0 : 1; + if (this.alarmStatus == 1) { + ivMoveCheck.setImageDrawable(getResources().getDrawable(R.mipmap.lc_demo_switch_on)); + } else { + ivMoveCheck.setImageDrawable(getResources().getDrawable(R.mipmap.lc_demo_switch_off)); + } + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()){ + return; + } + DialogUtils.dismiss(); + LogUtil.errorLog(TAG, "error", throwable); + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + + @Override + public void onClick(View v) { + //设置动检状态 + DialogUtils.show(getActivity()); + DeviceDetailService deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + DeviceAlarmStatusData deviceAlarmStatusData = new DeviceAlarmStatusData(); + deviceAlarmStatusData.data.deviceId = deviceListBean.deviceId; + deviceAlarmStatusData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + //现在是开启状态,则关闭,反之 + deviceAlarmStatusData.data.enable = alarmStatus == 1 ? false : true; + deviceDetailService.modifyDeviceAlarmStatus(deviceAlarmStatusData, this); + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailLCActivity.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailLCActivity.java new file mode 100644 index 0000000..ce18fb3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailLCActivity.java @@ -0,0 +1,109 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.common.openapi.IGetDeviceInfoCallBack; +import com.mm.android.deviceaddmodule.device_wifi.DeviceConstant; +import com.yonsz.z1.R; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CAT_EYE; + +public class DeviceDetailLCActivity extends AppCompatActivity implements View.OnClickListener, IGetDeviceInfoCallBack.IModifyDeviceName { + + public LinearLayout llOperate; + public LinearLayout llBack; + public TextView tvTitle; + public RelativeLayout rlTitle; + public FrameLayout frContent; + public RelativeLayout rlLoading; + private Bundle bundle; + private String name; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_detail_lc); + initView(); + initData(); + gotoDetailMainPage(); + } + + private void initData() { + bundle = getIntent().getExtras(); + } + + private void initView() { + llOperate = findViewById(R.id.ll_operate); + llBack = findViewById(R.id.ll_back); + tvTitle = findViewById(R.id.tv_title); + rlTitle = findViewById(R.id.rl_title); + frContent = findViewById(R.id.fr_content); + rlLoading = findViewById(R.id.rl_loading); + llOperate.setOnClickListener(this); + llBack.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.ll_back) { + goBack(); + } else if (id == R.id.ll_operate) { + + } + } + + @Override + public void onBackPressed() { + goBack(); + } + + private void goBack() { + if (llOperate != null) { + llOperate.setVisibility(View.GONE); + } + if (getSupportFragmentManager().getBackStackEntryCount() > 1) { + getSupportFragmentManager().popBackStack(); + } else { + if (!TextUtils.isEmpty(name)) { + Intent intent = new Intent(); + intent.putExtra(DeviceConstant.IntentKey.DHDEVICE_NEW_NAME, name); + setResult(100, intent); + } + finish(); + } + } + + public void gotoDetailMainPage() { + if (getIntent().getExtras().get("deviceType").equals(CAMERA_TAG) || getIntent().getExtras().get("deviceType").equals(CAT_EYE)) { + DeviceDetailMainFragment fragment = DeviceDetailMainFragment.newInstance(); + fragment.setArguments(bundle); + fragment.setModifyNameListener(this); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } else { + DeviceDetailLockFragment fragment = DeviceDetailLockFragment.newInstance(); + fragment.setArguments(bundle); + fragment.setModifyNameListener(this); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + } + + @Override + public void deviceName(String newName) { + name = newName; + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailLockFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailLockFragment.java new file mode 100644 index 0000000..51cd2f3 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailLockFragment.java @@ -0,0 +1,727 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.graphics.drawable.BitmapDrawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceDetailService; +import com.common.openapi.DeviceLocalCacheService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceLocalCacheData; +import com.common.openapi.entity.DeviceUnBindData; +import com.lechange.demo.business.Business; +import com.lechange.demo.tools.DialogUtils; +import com.lechange.demo.tools.MediaPlayHelper; +import com.lechange.demo.yonsz.RecoverSDCardActivity; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.mm.android.deviceaddmodule.device_wifi.CurWifiInfo; +import com.mm.android.deviceaddmodule.device_wifi.DeviceConstant; +import com.mm.android.deviceaddmodule.mobilecommon.entity.device.DHDevice; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.gateway.UnlockRecordActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.ChooseA1AddDeviceActivity; +import com.yonsz.z1.version5.ChooseA1OrUnbindActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.model.ModelBindActivity; + +import java.io.Serializable; +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static android.app.Activity.RESULT_OK; +import static com.mm.android.deviceaddmodule.device_wifi.DeviceConstant.IntentCode.DEVICE_SETTING_WIFI_LIST; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.NetWorkUrl.MODIFY_ALARM_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + +public class DeviceDetailLockFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IUnbindDeviceCallBack, IGetDeviceInfoCallBack.IDeviceCacheCallBack, IGetDeviceInfoCallBack.IModifyDeviceName { + private static final String TAG = DeviceDetailLockFragment.class.getSimpleName(); + private RelativeLayout rlDeviceDetail; + private RelativeLayout rlDetailVersion; + private RelativeLayout rlDeployment; + private RelativeLayout rlDetele; + private TextView tvDeviceName; + private ImageView ivDevicePic; + private TextView tvDeviceVersion; + private Bundle arguments; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private DeviceDetailLCActivity deviceDetailActivity; + private DeviceDetailService deviceDetailService; + private CurWifiInfo wifiInfo; + private TextView tvCurrentWifi; + private RelativeLayout rlCurWifi; + private IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener; + private String fromWhere; + + private TextView tv_device_address, tv_electric, tv_bind_ai, tv_safe_model, localStageTv; + private String devicePosition = "1"; + private String deviceId; + private RelativeLayout rl_device_storage, unlockRecordRl, rl_bind_ai, safeModelRl; + private UIHandle mHandler; + private String bindZiId = ""; + private String modelId = "", modelName = ""; + private int modelDelay = -1; + private String autoCloseAfterTrigger = "true"; + private CheckBox mCheckBox; + + public static DeviceDetailLockFragment newInstance() { + DeviceDetailLockFragment fragment = new DeviceDetailLockFragment(); + return fragment; + } + + public void onEventMainThread(EventBusEntity event) { + subsetGetDetail(); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.GONE); + EventBus.getDefault().register(this); + arguments = getArguments(); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_detail_lock, container, false); + } + + public void setModifyNameListener(IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener) { + this.modifyNameListener = modifyNameListener; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + rlDeviceDetail = view.findViewById(R.id.rl_device_detail); + rlDetailVersion = view.findViewById(R.id.rl_detail_version); + rlDeployment = view.findViewById(R.id.rl_deployment); + rlDetele = view.findViewById(R.id.rl_detele); + tvDeviceName = view.findViewById(R.id.tv_device_name); + ivDevicePic = view.findViewById(R.id.iv_device_pic); + tvDeviceVersion = view.findViewById(R.id.tv_device_version); + tvCurrentWifi = view.findViewById(R.id.tv_current_wifi); + rlCurWifi = view.findViewById(R.id.rl_cur_wifi); + localStageTv = (TextView) view.findViewById(R.id.tv_local_stage); + tv_device_address = (TextView) view.findViewById(R.id.tv_device_address); + tv_electric = (TextView) view.findViewById(R.id.tv_electric); + tv_bind_ai = (TextView) view.findViewById(R.id.tv_bind_ai); + tv_safe_model = (TextView) view.findViewById(R.id.tv_safe_model); + rl_device_storage = (RelativeLayout) view.findViewById(R.id.rl_device_storage); + unlockRecordRl = (RelativeLayout) view.findViewById(R.id.rl_unlock_record); + safeModelRl = (RelativeLayout) view.findViewById(R.id.rl_safe_model); + rl_bind_ai = (RelativeLayout) view.findViewById(R.id.rl_bind_ai); + mCheckBox = (CheckBox) view.findViewById(R.id.cb_device_defence); + + rlDeployment.setOnClickListener(this); + rlDetele.setOnClickListener(this); + rlDeviceDetail.setOnClickListener(this); + rlCurWifi.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + rl_device_storage.setOnClickListener(this); + unlockRecordRl.setOnClickListener(this); + rl_bind_ai.setOnClickListener(this); + mCheckBox.setOnClickListener(this); + safeModelRl.setOnClickListener(this); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_detail_title)); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + //不为空 列表页跳转 + fromWhere = arguments.getString(MethodConst.ParamConst.fromList); + if (deviceListBean == null) { + return; + } + deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 1) { + //多通道 + if (MethodConst.ParamConst.fromList.equals(fromWhere)) { + //设备详情 + tvDeviceName.setText(deviceListBean.name); + tvDeviceVersion.setText(deviceListBean.version); + rlDeployment.setVisibility(View.GONE); + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + //通道详情 + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + getDeviceLocalCache(); + rlDetailVersion.setVisibility(View.GONE); + rlCurWifi.setVisibility(View.GONE); + rlDetele.setVisibility(View.GONE); + } + } else if (deviceListBean.channels != null && deviceListBean.channels.size() == 1) { + //单通道 + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + getDeviceLocalCache(); + tvDeviceVersion.setText(deviceListBean.version); + if (deviceListBean.deviceSource == 2) { + rlDetele.setVisibility(View.GONE); + } + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + //多通道但是没有挂载通道 + //设备详情 + tvDeviceName.setText(deviceListBean.name); + tvDeviceVersion.setText(deviceListBean.version); + rlDeployment.setVisibility(View.GONE); + if (deviceListBean.ability.contains("WLAN")) { + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + rlCurWifi.setVisibility(View.GONE); + } + + } + if (deviceListBean.channels != null && deviceListBean.channels.size() == 0) { + if ("offline".equals(deviceListBean.status)) { + rlCurWifi.setVisibility(View.GONE); + } else { + rlDetailVersion.setOnClickListener(this); + } + } else { + if (deviceListBean.channels != null && "offline".equals(deviceListBean.channels.get(deviceListBean.checkedChannel).status)) { + rlCurWifi.setVisibility(View.GONE); + } else { + rlDetailVersion.setOnClickListener(this); + } + } + + + deviceId = getActivity().getIntent().getExtras().get("deviceId").toString(); + devicePosition = getActivity().getIntent().getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(devicePosition)); + + subsetGetDetail(); + } + + /** + * 获取设备缓存信息 + */ + private void getDeviceLocalCache() { + DeviceLocalCacheData deviceLocalCacheData = new DeviceLocalCacheData(); + deviceLocalCacheData.setDeviceId(deviceListBean.deviceId); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + deviceLocalCacheData.setChannelId(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + } + DeviceLocalCacheService deviceLocalCacheService = ClassInstanceManager.newInstance().getDeviceLocalCacheService(); + deviceLocalCacheService.findLocalCache(deviceLocalCacheData, this); + } + + private void getCurrentWifiInfo() { + //设备才能获取WIFI + DialogUtils.show(getActivity()); + deviceDetailService.currentDeviceWifi(deviceListBean.deviceId, new IGetDeviceInfoCallBack.IDeviceCurrentWifiInfoCallBack() { + @Override + public void deviceCurrentWifiInfo(CurWifiInfo curWifiInfo) { + DialogUtils.dismiss(); + if (!isAdded() || curWifiInfo == null) { + return; + } + rlCurWifi.setVisibility(View.VISIBLE); + if (curWifiInfo.isLinkEnable()) { + wifiInfo = curWifiInfo; + tvCurrentWifi.setText(wifiInfo.getSsid()); + } + } + + @Override + public void onError(Throwable throwable) { + DialogUtils.dismiss(); + } + }); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + public void gotoModifyNamePage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailNameFragment fragment = DeviceDetailNameFragment.newInstance(); + fragment.setArguments(arguments); + fragment.setModifyNameListener(this); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + public void gotoUpdatePage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailVersionFragment fragment = DeviceDetailVersionFragment.newInstance(); + fragment.setArguments(arguments); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + public void gotoDeploymentPage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailDeploymentFragment fragment = DeviceDetailDeploymentFragment.newInstance(); + fragment.setArguments(arguments); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.rl_device_detail) { + gotoModifyNamePage(getActivity()); + } else if (id == R.id.rl_cur_wifi) { + DHDevice device = new DHDevice(); + device.setDeviceId(deviceListBean.deviceId); + device.setName(deviceListBean.name); + device.setStatus(deviceListBean.status); + LCDeviceEngine.newInstance().deviceOnlineChangeNet(getActivity(), device, wifiInfo); + } else if (id == R.id.rl_deployment) { + gotoDeploymentPage(getActivity()); + } else if (id == R.id.rl_detail_version) { + gotoUpdatePage(getActivity()); + } else if (id == R.id.rl_detele) { + //解绑设备 + /* deviceDetailActivity.rlLoading.setVisibility(View.VISIBLE); + DeviceDetailService deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + *//* DeviceUnBindData deviceUnBindData = new DeviceUnBindData(); + deviceUnBindData.data.deviceId = deviceListBean.deviceId; + deviceDetailService.unBindDevice(deviceUnBindData, this);*//* + deviceDetailService.deletePermission(deviceListBean.deviceId, null, this);*/ + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + unBindDevice(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else if (id == R.id.tv_device_address) { + Intent intent2; + intent2 = new Intent(getActivity(), ModifyRoomActivity.class); + intent2.putExtra("deviceId", deviceId); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", CAMERA_TAG); + intent2.putExtra("deviceModel", "1"); + intent2.putExtra("deviceAddress", devicePosition); + intent2.putExtra("addressId", devicePosition); + startActivityForResult(intent2, GET_SWITCHER_CHANGE_INFO); + } else if (id == R.id.rl_device_storage) { + Intent intent = new Intent(getContext(), RecoverSDCardActivity.class); + intent.putExtra("UUID", deviceListBean.deviceId); + startActivity(intent); + } + switch (id) { + case R.id.rl_bind_ai: + getAideviceList(INTELLIGENT_DOOR_LOCK); + break; + case R.id.cb_camera_reverse: + + break; + case R.id.rl_unlock_record: + Intent intent = new Intent(getContext(), UnlockRecordActivity.class); + intent.putExtra("deviceId", deviceListBean.deviceId); + startActivity(intent); + break; + case R.id.rl_safe_model: + intent = new Intent(getContext(), ModelBindActivity.class); + intent.putExtra("modelId", modelId); + intent.putExtra("modelDelay", modelDelay); + intent.putExtra("modelName", modelName); + intent.putExtra("autoCloseAfterTrigger", autoCloseAfterTrigger); + intent.putExtra("deviceId", getActivity().getIntent().getExtras().get("id").toString()); + intent.putExtra("deviceType", INTELLIGENT_DOOR_LOCK); + intent.putExtra("deviceModel", "1"); + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.cb_device_defence: + if (mCheckBox.isChecked()) { + mCheckBox.setChecked(false); + subseSetVoice("1"); + } else { + mCheckBox.setChecked(true); + subseSetVoice("0"); + } + break; + + } + } + + @Override + public void unBindDevice(boolean result) { + if (!isAdded()) { + return; + } + DeviceUnBindData deviceUnBindData = new DeviceUnBindData(); + deviceUnBindData.data.deviceId = deviceListBean.deviceId; + deviceDetailService.unBindDevice(deviceUnBindData, this); + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + Toast.makeText(getContext(), getResources().getString(R.string.lc_demo_device_unbind_success), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(); + intent.putExtra(DeviceConstant.IntentKey.DHDEVICE_UNBIND, true); + deviceDetailActivity.setResult(RESULT_OK, intent); + deviceDetailActivity.finish(); + } + + @Override + public void deviceCache(DeviceLocalCacheData deviceLocalCacheData) { + if (!isAdded()) { + return; + } + BitmapDrawable bitmapDrawable = MediaPlayHelper.picDrawable(deviceLocalCacheData.getPicPath()); + if (bitmapDrawable != null) { + ivDevicePic.setImageDrawable(bitmapDrawable); + } + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()) { + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + LogUtil.errorLog(TAG, "error", throwable); + if (!"null point".equals(throwable.getMessage()) && isAdded()) { + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == DEVICE_SETTING_WIFI_LIST && resultCode == RESULT_OK && data != null) { + CurWifiInfo curWifiInfo = (CurWifiInfo) data.getSerializableExtra(DeviceConstant.IntentKey.DEVICE_CURRENT_WIFI_INFO); + if (curWifiInfo != null) { + wifiInfo = curWifiInfo; + tvCurrentWifi.setText(wifiInfo.getSsid()); + } + } + switch (requestCode) { + case GET_SWITCHER_CHANGE_INFO: + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + } + break; + } + } + + + @Override + public void deviceName(String newName) { + tvDeviceName.setText(newName); + //多通道设备详情 + if (deviceListBean.channels.size() == 0 || (deviceListBean.channels.size() > 1 && MethodConst.ParamConst.fromList.equals(fromWhere))) { + deviceListBean.name = newName; + } else { + deviceListBean.channels.get(deviceListBean.checkedChannel).channelName = newName; + } + if (modifyNameListener != null) { + modifyNameListener.deviceName(newName); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getActivity().getIntent().getExtras().get("id").toString()); + map.put("deviceModel", "1"); + map.put("deviceType", INTELLIGENT_DOOR_LOCK); + map.put("ziId", ""); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("unBindDevice", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + getActivity().finish(); + } else { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getAideviceList(String deviceTypeCode) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", "A1-L,A2-L,D1-L,B1-L,B3-L,B3-L-A"); + map.put("deviceType", deviceTypeCode); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(DeviceDetailLockFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + DeviceDetailLockFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + Intent intent = new Intent(getContext(), ChooseA1OrUnbindActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) simpleEntity.getData()); + intent.putExtras(bundle); + intent.putExtra("addressId", devicePosition); + intent.putExtra("deviceType", INTELLIGENT_DOOR_LOCK); + intent.putExtra("deviceModel", "1"); + intent.putExtra("deviceId", getActivity().getIntent().getExtras().get("id").toString()); + intent.putExtra("subType", "0"); + intent.putExtra("ziId", bindZiId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + } else { + ToastUtil.show(getContext(), "暂无可绑定的语音管家"); + } + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + SafeVoiceEntity voiceEntity = (SafeVoiceEntity) msg.obj; + SafeVoiceEntity.DataBean.ThirdInfoBean.ElectricitysBean electricitysBean = voiceEntity.getData().getThirdInfo().getElectricitys().get(0); + tv_electric.setText("碱性电池" + electricitysBean.getAlkElec() + "%、" + "锂电池" + electricitysBean.getLitElec() + "%"); + bindZiId = voiceEntity.getData().getTarget().getZiId(); + tv_bind_ai.setText(voiceEntity.getData().getThirdInfo().getGatewayName()); + if (null != voiceEntity.getData().getModeTrigger()) { + if (!voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger().isEmpty()) { + autoCloseAfterTrigger = voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger(); + } + modelId = voiceEntity.getData().getModeTrigger().getModeId(); + modelDelay = voiceEntity.getData().getModeTrigger().getValidTimeAfter(); + modelName = voiceEntity.getData().getModeTrigger().getModeName(); + tv_safe_model.setText(modelName); + if (null != voiceEntity.getData().getTarget()) { + if (voiceEntity.getData().getTarget().isModeTriggerFlag()) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动开"); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动关"); + } + } + } else { + modelName = ""; + modelDelay = 0; + tv_safe_model.setText(" 设置您需要联动的场景模式"); + } + break; + case SEND_UPDATEVOICE_CONTROL_SUCCESS: + String obj1 = (String) msg.obj; + if (obj1.equals("1")) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动开"); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动关"); + } + break; + case SEND_UPDATEVOICE_CONTROL_FAIL: + case SELECT_SAFETY_DETAIL_FAIL: + case CHECK_USER_BIND_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void subseSetVoice(final String flag) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getActivity().getIntent().getExtras().get("id").toString()); + map.put("deviceModel", "1"); + map.put("deviceType", INTELLIGENT_DOOR_LOCK); + map.put("modeTriggerFlag", flag); + map.put("ziId", ""); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SETMODETRIGGERFLAG, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailMainFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailMainFragment.java new file mode 100644 index 0000000..fa4eb43 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailMainFragment.java @@ -0,0 +1,691 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.graphics.drawable.BitmapDrawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceDetailService; +import com.common.openapi.DeviceLocalCacheService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceLocalCacheData; +import com.common.openapi.entity.DeviceUnBindData; +import com.lechange.demo.business.Business; +import com.lechange.demo.tools.DialogUtils; +import com.lechange.demo.tools.MediaPlayHelper; +import com.lechange.demo.yonsz.CameraDetailActivity; +import com.lechange.demo.yonsz.RecoverSDCardActivity; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.mm.android.deviceaddmodule.device_wifi.CurWifiInfo; +import com.mm.android.deviceaddmodule.device_wifi.DeviceConstant; +import com.mm.android.deviceaddmodule.mobilecommon.entity.device.DHDevice; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.fragment.FanA2Fragment; +import com.yonsz.z1.version5.ModifyRoomActivity; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static android.app.Activity.RESULT_OK; +import static com.mm.android.deviceaddmodule.device_wifi.DeviceConstant.IntentCode.DEVICE_SETTING_WIFI_LIST; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.MODIFY_ALARM_STATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.MODIFY_ALARM_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + +public class DeviceDetailMainFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IUnbindDeviceCallBack, IGetDeviceInfoCallBack.IDeviceCacheCallBack, IGetDeviceInfoCallBack.IModifyDeviceName { + private static final String TAG = DeviceDetailMainFragment.class.getSimpleName(); + private RelativeLayout rlDeviceDetail; + private RelativeLayout rlDetailVersion; + private RelativeLayout rlDeployment; + private RelativeLayout rlDetele; + private TextView tvDeviceName; + private ImageView ivDevicePic; + private TextView tvDeviceVersion; + private Bundle arguments; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private DeviceDetailLCActivity deviceDetailActivity; + private DeviceDetailService deviceDetailService; + private CurWifiInfo wifiInfo; + private TextView tvCurrentWifi; + private RelativeLayout rlCurWifi; + private IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener; + private String fromWhere; + private LinearLayout ll_fanren; + + private TextView tv_device_address; + private String devicePosition = "1"; + private String deviceId, deviceType = CAMERA_TAG; + private RelativeLayout rl_device_storage; + private CheckBox cb_camera_reverse, cb_device_light, cb_device_alarm; + private UIHandle mHandler; + + public static DeviceDetailMainFragment newInstance() { + DeviceDetailMainFragment fragment = new DeviceDetailMainFragment(); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.GONE); + arguments = getArguments(); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_detail_main, container, false); + } + + public void setModifyNameListener(IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener) { + this.modifyNameListener = modifyNameListener; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ll_fanren = view.findViewById(R.id.ll_fanren); + rlDeviceDetail = view.findViewById(R.id.rl_device_detail); + rlDetailVersion = view.findViewById(R.id.rl_detail_version); + rlDeployment = view.findViewById(R.id.rl_deployment); + rlDetele = view.findViewById(R.id.rl_detele); + tvDeviceName = view.findViewById(R.id.tv_device_name); + ivDevicePic = view.findViewById(R.id.iv_device_pic); + tvDeviceVersion = view.findViewById(R.id.tv_device_version); + tvCurrentWifi = view.findViewById(R.id.tv_current_wifi); + rlCurWifi = view.findViewById(R.id.rl_cur_wifi); + cb_camera_reverse = (CheckBox) view.findViewById(R.id.cb_camera_reverse); + cb_device_light = (CheckBox) view.findViewById(R.id.cb_device_light); + cb_device_alarm = (CheckBox) view.findViewById(R.id.cb_device_alarm); + tv_device_address = (TextView) view.findViewById(R.id.tv_device_address); + rl_device_storage = (RelativeLayout) view.findViewById(R.id.rl_device_storage); + + rlDeployment.setOnClickListener(this); + rlDetele.setOnClickListener(this); + rlDeviceDetail.setOnClickListener(this); + rlCurWifi.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + rl_device_storage.setOnClickListener(this); + cb_camera_reverse.setOnClickListener(this); + cb_device_light.setOnClickListener(this); + cb_device_alarm.setOnClickListener(this); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_detail_title)); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + //不为空 列表页跳转 + fromWhere = arguments.getString(MethodConst.ParamConst.fromList); + if (deviceListBean == null) { + return; + } + deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 1) { + //多通道 + if (MethodConst.ParamConst.fromList.equals(fromWhere)) { + //设备详情 + tvDeviceName.setText(deviceListBean.name); + tvDeviceVersion.setText(deviceListBean.version); + rlDeployment.setVisibility(View.GONE); + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + //通道详情 + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + getDeviceLocalCache(); + rlDetailVersion.setVisibility(View.GONE); + rlCurWifi.setVisibility(View.GONE); + rlDetele.setVisibility(View.GONE); + } + } else if (deviceListBean.channels != null && deviceListBean.channels.size() == 1) { + //单通道 + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + getDeviceLocalCache(); + tvDeviceVersion.setText(deviceListBean.version); + if (deviceListBean.deviceSource == 2) { + rlDetele.setVisibility(View.GONE); + } + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + //多通道但是没有挂载通道 + //设备详情 + tvDeviceName.setText(deviceListBean.name); + tvDeviceVersion.setText(deviceListBean.version); + rlDeployment.setVisibility(View.GONE); + if (deviceListBean.ability.contains("WLAN")) { + rlCurWifi.setVisibility(View.VISIBLE); + //设备才能获取WIFI + getCurrentWifiInfo(); + } else { + rlCurWifi.setVisibility(View.GONE); + } + + } + if (deviceListBean.channels != null && deviceListBean.channels.size() == 0) { + if ("offline".equals(deviceListBean.status)) { + rlCurWifi.setVisibility(View.GONE); + } else { + rlDetailVersion.setOnClickListener(this); + } + } else { + if (deviceListBean.channels != null && "offline".equals(deviceListBean.channels.get(deviceListBean.checkedChannel).status)) { + rlCurWifi.setVisibility(View.GONE); + } else { + rlDetailVersion.setOnClickListener(this); + } + } + + + deviceType = getActivity().getIntent().getExtras().get("deviceType").toString(); + deviceId = getActivity().getIntent().getExtras().get("deviceId").toString(); + devicePosition = getActivity().getIntent().getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(devicePosition)); + + if (deviceType.equals(CAMERA_TAG)) { + + } else { + ll_fanren.setVisibility(View.GONE); + } + } + + /** + * 获取设备缓存信息 + */ + private void getDeviceLocalCache() { + DeviceLocalCacheData deviceLocalCacheData = new DeviceLocalCacheData(); + deviceLocalCacheData.setDeviceId(deviceListBean.deviceId); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + deviceLocalCacheData.setChannelId(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + } + DeviceLocalCacheService deviceLocalCacheService = ClassInstanceManager.newInstance().getDeviceLocalCacheService(); + deviceLocalCacheService.findLocalCache(deviceLocalCacheData, this); + } + + private void getCurrentWifiInfo() { + //设备才能获取WIFI + DialogUtils.show(getActivity()); + deviceDetailService.currentDeviceWifi(deviceListBean.deviceId, new IGetDeviceInfoCallBack.IDeviceCurrentWifiInfoCallBack() { + @Override + public void deviceCurrentWifiInfo(CurWifiInfo curWifiInfo) { + DialogUtils.dismiss(); + if (!isAdded() || curWifiInfo == null) { + return; + } + rlCurWifi.setVisibility(View.VISIBLE); + if (curWifiInfo.isLinkEnable()) { + wifiInfo = curWifiInfo; + tvCurrentWifi.setText(wifiInfo.getSsid()); + } + } + + @Override + public void onError(Throwable throwable) { + DialogUtils.dismiss(); + } + }); + + //获取设备指示灯状态 + breathingLightStatus(); + //获取摄像头翻转状态 + frameReverseStatus(); + //获取报警消息提醒 + getAlarmStatus(); + } + + private synchronized void breathingLightStatus() { + Business.getInstance().breathingLightStatus(deviceListBean.deviceId, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final int arg1 = msg.arg1; + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (arg1 == 1) { + cb_device_light.setChecked(true); + } else { + cb_device_light.setChecked(false); + } + } + }); + + } else { + } + } + }); + } + + private synchronized void frameReverseStatus() { + Business.getInstance().frameReverseStatus(deviceListBean.deviceId, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final int obj = msg.arg1; + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (obj == 1) { + cb_camera_reverse.setChecked(true); + } else { + cb_camera_reverse.setChecked(false); + } + } + }); + } else { + + } + } + }); + } + + private void getAlarmStatus() { + + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + public void gotoModifyNamePage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailNameFragment fragment = DeviceDetailNameFragment.newInstance(); + fragment.setArguments(arguments); + fragment.setModifyNameListener(this); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + public void gotoUpdatePage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailVersionFragment fragment = DeviceDetailVersionFragment.newInstance(); + fragment.setArguments(arguments); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + public void gotoDeploymentPage(FragmentActivity fragmentActivity) { + if (fragmentActivity == null || fragmentActivity.getSupportFragmentManager() == null) { + return; + } + DeviceDetailDeploymentFragment fragment = DeviceDetailDeploymentFragment.newInstance(); + fragment.setArguments(arguments); + FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.rl_device_detail) { + gotoModifyNamePage(getActivity()); + } else if (id == R.id.rl_cur_wifi) { + DHDevice device = new DHDevice(); + device.setDeviceId(deviceListBean.deviceId); + device.setName(deviceListBean.name); + device.setStatus(deviceListBean.status); + LCDeviceEngine.newInstance().deviceOnlineChangeNet(getActivity(), device, wifiInfo); + } else if (id == R.id.rl_deployment) { + gotoDeploymentPage(getActivity()); + } else if (id == R.id.rl_detail_version) { + gotoUpdatePage(getActivity()); + } else if (id == R.id.rl_detele) { + /*//解绑设备 + deviceDetailActivity.rlLoading.setVisibility(View.VISIBLE); + DeviceDetailService deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + *//* DeviceUnBindData deviceUnBindData = new DeviceUnBindData(); + deviceUnBindData.data.deviceId = deviceListBean.deviceId; + deviceDetailService.unBindDevice(deviceUnBindData, this);*//* + deviceDetailService.deletePermission(deviceListBean.deviceId, null, this);*/ +// subsetDelete(); + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + unBindDevice(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else if (id == R.id.tv_device_address) { + Intent intent2; + intent2 = new Intent(getActivity(), ModifyRoomActivity.class); + intent2.putExtra("deviceId", deviceId); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("deviceModel", "0"); + intent2.putExtra("deviceAddress", devicePosition); + intent2.putExtra("addressId", devicePosition); + startActivityForResult(intent2, GET_SWITCHER_CHANGE_INFO); + } else if (id == R.id.rl_device_storage) { + Intent intent = new Intent(getContext(), RecoverSDCardActivity.class); + intent.putExtra("UUID", deviceListBean.deviceId); + startActivity(intent); + } + switch (id) { + case R.id.cb_camera_reverse: + if (cb_camera_reverse.isChecked()) { + modifyFrameReverseStatus("reverse"); + } else { + modifyFrameReverseStatus("normal"); + } + break; + case R.id.cb_device_light: + if (cb_device_light.isChecked()) { + modifyBreathingLight("on"); + } else { + modifyBreathingLight("off"); + } + break; + case R.id.cb_device_alarm: + if (cb_device_alarm.isChecked()) { + modifyAlarmStatus("1"); + } else { + modifyAlarmStatus("0"); + } + break; + } + } + + @Override + public void unBindDevice(boolean result) { + if (!isAdded()) { + return; + } + DeviceUnBindData deviceUnBindData = new DeviceUnBindData(); + deviceUnBindData.data.deviceId = deviceListBean.deviceId; + deviceDetailService.unBindDevice(deviceUnBindData, this); + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + Toast.makeText(getContext(), getResources().getString(R.string.lc_demo_device_unbind_success), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(); + intent.putExtra(DeviceConstant.IntentKey.DHDEVICE_UNBIND, true); + deviceDetailActivity.setResult(RESULT_OK, intent); + deviceDetailActivity.finish(); + } + + @Override + public void deviceCache(DeviceLocalCacheData deviceLocalCacheData) { + if (!isAdded()) { + return; + } + BitmapDrawable bitmapDrawable = MediaPlayHelper.picDrawable(deviceLocalCacheData.getPicPath()); + if (bitmapDrawable != null) { + ivDevicePic.setImageDrawable(bitmapDrawable); + } + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()) { + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + LogUtil.errorLog(TAG, "error", throwable); + if (!"null point".equals(throwable.getMessage()) && isAdded()) { + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == DEVICE_SETTING_WIFI_LIST && resultCode == RESULT_OK && data != null) { + CurWifiInfo curWifiInfo = (CurWifiInfo) data.getSerializableExtra(DeviceConstant.IntentKey.DEVICE_CURRENT_WIFI_INFO); + if (curWifiInfo != null) { + wifiInfo = curWifiInfo; + tvCurrentWifi.setText(wifiInfo.getSsid()); + } + } + switch (requestCode) { + case GET_SWITCHER_CHANGE_INFO: + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + } + break; + } + } + + private void modifyFrameReverseStatus(String state) { + Business.getInstance().modifyFrameReverseStatus(state, deviceListBean.deviceId, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + getContext(), + "修改成功", + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + getContext(), + "修改失败", + Toast.LENGTH_SHORT).show(); + + } + } + }); + } + + private void modifyBreathingLight(String state) { + Business.getInstance().modifyBreathingLight(state, deviceListBean.deviceId, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + getContext(), + "修改成功", + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + getContext(), + "修改失败", + Toast.LENGTH_SHORT).show(); + + } + } + }); + } + + private void modifyAlarmStatus(String state) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("deviceId", "4K0586CPAJ58121"); + map.put("deviceId", deviceListBean.deviceId); + map.put("alarmStatus", state); + netWorkUtil.requestPostByAsynewApi(MODIFY_ALARM_STATUS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("modifyAlarmStatus", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText( + getContext(), + "修改报警消息提醒成功", + Toast.LENGTH_SHORT).show(); + } + }); + } else { + + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + @Override + public void deviceName(String newName) { + tvDeviceName.setText(newName); + //多通道设备详情 + if (deviceListBean.channels.size() == 0 || (deviceListBean.channels.size() > 1 && MethodConst.ParamConst.fromList.equals(fromWhere))) { + deviceListBean.name = newName; + } else { + deviceListBean.channels.get(deviceListBean.checkedChannel).channelName = newName; + } + if (modifyNameListener != null) { + modifyNameListener.deviceName(newName); + } + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("unBindDevice", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + getActivity().finish(); + } else { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ""); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }); + } else { + + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(DeviceDetailMainFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + DeviceDetailMainFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case SEND_UPDATEVOICE_CONTROL_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailModifyNameFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailModifyNameFragment.java new file mode 100644 index 0000000..8d08a40 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailModifyNameFragment.java @@ -0,0 +1,185 @@ +package com.lechange.demo.ui; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.InputFilter; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceDetailService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceModifyNameData; +import com.mm.android.deviceaddmodule.helper.DeviceAddHelper; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.mm.android.deviceaddmodule.mobilecommon.utils.NameLengthFilter; +import com.mm.android.deviceaddmodule.mobilecommon.utils.WordInputFilter; +import com.mm.android.deviceaddmodule.mobilecommon.widget.ClearEditText; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; + +public class DeviceDetailModifyNameFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IModifyDeviceCallBack { + private static final String TAG = DeviceDetailModifyNameFragment.class.getSimpleName(); + private Bundle arguments; + private ClearEditText newName; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private DeviceDetailLCActivity deviceDetailActivity; + private final int MAXLETHER = 40; + private IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener; + private String name; + private String fromWhere; + + public static DeviceDetailModifyNameFragment newInstance() { + DeviceDetailModifyNameFragment fragment = new DeviceDetailModifyNameFragment(); + return fragment; + } + + public void setModifyNameListener(IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener) { + this.modifyNameListener = modifyNameListener; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + arguments = getArguments(); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + //不为空 列表页跳转 + fromWhere = arguments.getString(MethodConst.ParamConst.fromList); + if (deviceListBean == null) { + return; + } + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.VISIBLE); + deviceDetailActivity.llOperate.setOnClickListener(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_modify_name, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_detail_title)); + initView(view); + } + + private void initView(View view) { + newName = view.findViewById(R.id.et_new_name); + if (deviceListBean.channels.size() > 1) { + //多通道 + if (MethodConst.ParamConst.fromList.equals(fromWhere)) { + newName.setText(deviceListBean.name); + } else { + newName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + } + } else if (deviceListBean.channels.size() == 1) { + newName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + } else { + newName.setText(deviceListBean.name); + } + if (!TextUtils.isEmpty(newName.getText().toString())) { + newName.setSelection(newName.getText().toString().length()); + } + newName.setFilters(new InputFilter[]{new WordInputFilter(WordInputFilter.REX_NAME), new NameLengthFilter(MAXLETHER)}); + newName.addTextChangedListener(mTextWatcher); + } + + private final TextWatcher mTextWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) { + String devName = s.toString().trim(); + if (!TextUtils.isEmpty(devName)) { + deviceDetailActivity.llOperate.setEnabled(true); + newName.removeTextChangedListener(mTextWatcher); + String filterDevName = DeviceAddHelper.strDeviceNameFilter(devName); + if (!filterDevName.equals(devName)) { + newName.setText(filterDevName); + newName.setSelection(filterDevName.length()); + } + newName.addTextChangedListener(mTextWatcher); + } else { + deviceDetailActivity.llOperate.setEnabled(false); + } + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable arg0) { + } + }; + + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void onClick(View v) { + //修改名称 + deviceDetailActivity.rlLoading.setVisibility(View.VISIBLE); + if (newName == null || newName.getText().toString().trim() == null || newName.getText().toString().trim().isEmpty()) { + return; + } + name = newName.getText().toString().trim(); + DeviceDetailService deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + DeviceModifyNameData deviceModifyNameData = new DeviceModifyNameData(); + deviceModifyNameData.data.name = name; + deviceModifyNameData.data.deviceId = deviceListBean.deviceId; + if (deviceListBean.channels.size() > 1 && !MethodConst.ParamConst.fromList.equals(fromWhere)) { + //多通道 + deviceModifyNameData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + } + deviceDetailService.modifyDeviceName(deviceModifyNameData, this); + } + + @Override + public void deviceModify(boolean result) { + if (!isAdded()) { + return; + } + deviceDetailActivity.llOperate.setVisibility(View.GONE); + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + Toast.makeText(getContext(), getResources().getString(R.string.lc_demo_device_modify_success), Toast.LENGTH_SHORT).show(); + if (modifyNameListener != null) { + modifyNameListener.deviceName(name); + } + //多通道设备详情 + if (deviceListBean.channels.size() == 0 || (deviceListBean.channels.size() > 1 && MethodConst.ParamConst.fromList.equals(fromWhere))) { + deviceListBean.name = name; + } else { + deviceListBean.channels.get(deviceListBean.checkedChannel).channelName = name; + } + getActivity().getSupportFragmentManager().popBackStack(); + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()) { + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + LogUtil.errorLog(TAG, "error", throwable); + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailNameFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailNameFragment.java new file mode 100644 index 0000000..7208d61 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailNameFragment.java @@ -0,0 +1,128 @@ +package com.lechange.demo.ui; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.yonsz.z1.R; + +public class DeviceDetailNameFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IModifyDeviceName { + private static final String TAG = DeviceDetailNameFragment.class.getSimpleName(); + private Bundle arguments; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private DeviceDetailLCActivity deviceDetailActivity; + private TextView tvDeviceName; + private IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener; + private String fromWhere; + + public static DeviceDetailNameFragment newInstance() { + DeviceDetailNameFragment fragment = new DeviceDetailNameFragment(); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + arguments = getArguments(); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + //不为空 列表页跳转 + fromWhere = arguments.getString(MethodConst.ParamConst.fromList); + if (deviceListBean == null) { + return; + } + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.GONE); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_detail_name, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_detail_title)); + initView(view); + } + + private void initView(View view) { + view.findViewById(R.id.rl_device_modify).setOnClickListener(this); + tvDeviceName = view.findViewById(R.id.tv_device_name); + RelativeLayout rlDeviceType = view.findViewById(R.id.rl_detail_type); + RelativeLayout rlDeviceSerial = view.findViewById(R.id.rl_device_serial); + TextView tvDeviceType = view.findViewById(R.id.tv_device_type); + TextView tvDeviceSerial = view.findViewById(R.id.tv_device_serial); + if (deviceListBean.channels!=null&&deviceListBean.channels.size() > 1) { + //多通道 + if (MethodConst.ParamConst.fromList.equals(fromWhere)) { + tvDeviceName.setText(deviceListBean.name); + tvDeviceType.setText(deviceListBean.deviceModel); + tvDeviceSerial.setText(deviceListBean.deviceId); + }else { + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + rlDeviceType.setVisibility(View.GONE); + rlDeviceSerial.setVisibility(View.GONE); + } + } else if (deviceListBean.channels!=null&&deviceListBean.channels.size() == 1){ + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + tvDeviceType.setText(deviceListBean.deviceModel); + tvDeviceSerial.setText(deviceListBean.deviceId); + }else { + tvDeviceName.setText(deviceListBean.name); + tvDeviceType.setText(deviceListBean.deviceModel); + tvDeviceSerial.setText(deviceListBean.deviceId); + } + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void onClick(View v) { + if (getActivity() == null || getActivity().getSupportFragmentManager() == null) { + return; + } + DeviceDetailModifyNameFragment fragment = DeviceDetailModifyNameFragment.newInstance(); + fragment.setModifyNameListener(this); + fragment.setArguments(arguments); + FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); + transaction.hide(this).add(R.id.fr_content, fragment).addToBackStack(null); + transaction.commitAllowingStateLoss(); + } + + public void setModifyNameListener(IGetDeviceInfoCallBack.IModifyDeviceName modifyNameListener) { + this.modifyNameListener = modifyNameListener; + } + + @Override + public void deviceName(String newName) { + tvDeviceName.setText(newName); + //多通道设备详情 + if (deviceListBean.channels.size() == 0 ||(deviceListBean.channels.size() > 1 && MethodConst.ParamConst.fromList.equals(fromWhere))) { + deviceListBean.name = newName; + } else { + deviceListBean.channels.get(deviceListBean.checkedChannel).channelName = newName; + } + if (modifyNameListener != null) { + modifyNameListener.deviceName(newName); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceDetailVersionFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceDetailVersionFragment.java new file mode 100644 index 0000000..60dc97a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceDetailVersionFragment.java @@ -0,0 +1,170 @@ +package com.lechange.demo.ui; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceDetailService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceVersionListData; +import com.lechange.demo.dialog.DeviceUpdateDialog; +import com.lechange.demo.view.LcProgressBar; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; + +public class DeviceDetailVersionFragment extends Fragment implements IGetDeviceInfoCallBack.IDeviceVersionCallBack, View.OnClickListener , IGetDeviceInfoCallBack.IDeviceUpdateCallBack { + private static final String TAG = DeviceDetailVersionFragment.class.getSimpleName(); + private Bundle arguments; + private LcProgressBar pgUpodate; + private TextView tvVersionTip; + private LinearLayout llNewVersion; + private TextView tvNewVersionTip; + private TextView tvNewVersion; + private TextView tvDeviceCurrentVersion; + private DeviceDetailLCActivity deviceDetailActivity; + private DeviceDetailService deviceDetailService; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + + public static DeviceDetailVersionFragment newInstance() { + DeviceDetailVersionFragment fragment = new DeviceDetailVersionFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.llOperate.setVisibility(View.GONE); + arguments = getArguments(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_version, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + DeviceDetailLCActivity deviceDetailActivity = (DeviceDetailLCActivity) getActivity(); + deviceDetailActivity.tvTitle.setText(getResources().getString(R.string.lc_demo_device_version_title)); + initView(view); + initData(); + } + + private void initView(View view) { + tvDeviceCurrentVersion = view.findViewById(R.id.tv_device_current_version); + tvNewVersion = view.findViewById(R.id.tv_new_version); + tvNewVersionTip = view.findViewById(R.id.tv_new_version_tip); + llNewVersion = view.findViewById(R.id.ll_new_version); + tvVersionTip = view.findViewById(R.id.tv_version_tip); + pgUpodate = view.findViewById(R.id.pg_upodate); + pgUpodate.setOnClickListener(this); + } + + private void initData() { + //获取设备版本信息 + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + if (deviceListBean == null) { + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.VISIBLE); + deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + DeviceVersionListData deviceVersionListData = new DeviceVersionListData(); + deviceVersionListData.data.deviceIds = deviceListBean.deviceId; + deviceDetailService.deviceVersionList(deviceVersionListData, this); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void deviceVersion(DeviceVersionListData.Response responseData) { + if (!isAdded()){ + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + if (responseData.data == null || responseData.data.deviceVersionList == null || responseData.data.deviceVersionList.size() == 0) { + return; + } + DeviceVersionListData.ResponseData.DeviceVersionListBean deviceVersionListBean = responseData.data.deviceVersionList.get(0); + if (deviceVersionListBean == null) { + return; + } + tvDeviceCurrentVersion.setText(deviceVersionListBean.version); + if (deviceVersionListBean.getUpgradeInfo() == null) { + //已是最新版本 + llNewVersion.setVisibility(View.GONE); + pgUpodate.setVisibility(View.GONE); + tvVersionTip.setVisibility(View.VISIBLE); + tvVersionTip.setText(getResources().getString(R.string.lc_demo_device_version_new_tip)); + } else { + //需要更新设备 + llNewVersion.setVisibility(View.VISIBLE); + pgUpodate.setVisibility(View.VISIBLE); + tvVersionTip.setVisibility(View.GONE); + tvNewVersion.setText(deviceVersionListBean.getUpgradeInfo().getVersion()); + tvNewVersionTip.setText(deviceVersionListBean.getUpgradeInfo().getDescription()); + } + } + + @Override + public void deviceUpdate(boolean result) { + if (!isAdded()){ + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + Toast.makeText(getContext(), getResources().getString(R.string.lc_demo_device_update_success), Toast.LENGTH_SHORT).show(); + deviceDetailActivity.finish(); + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()){ + return; + } + deviceDetailActivity.rlLoading.setVisibility(View.GONE); + LogUtil.errorLog(TAG, "error", throwable); + pgUpodate.setText(getResources().getString(R.string.lc_demo_device_update)); + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.pg_upodate) { + DeviceUpdateDialog deviceUpdateDialog = new DeviceUpdateDialog(getContext()); + deviceUpdateDialog.setOnOkClickLisenter(new DeviceUpdateDialog.OnOkClickLisenter() { + @Override + public void OnOK() { + deviceDetailActivity.rlLoading.setVisibility(View.VISIBLE); + pgUpodate.setText(getResources().getString(R.string.lc_demo_device_updateing)); + if(deviceDetailService==null){ + deviceDetailService = ClassInstanceManager.newInstance().getDeviceDetailService(); + } + deviceDetailService.upgradeDevice(deviceListBean.deviceId, DeviceDetailVersionFragment.this); + } + }); + deviceUpdateDialog.show(); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceLocalRecordListFragment.java b/app/src/main/java/com/lechange/demo/ui/DeviceLocalRecordListFragment.java new file mode 100644 index 0000000..253ccda --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceLocalRecordListFragment.java @@ -0,0 +1,303 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceRecordService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.LocalRecordsData; +import com.common.openapi.entity.RecordListData; +import com.common.openapi.entity.RecordsData; +import com.lechange.demo.adapter.DeviceRecordListAdapter; +import com.lechange.demo.tools.DateHelper; +import com.lechange.demo.tools.DialogUtils; +import com.lechange.demo.view.LcPullToRefreshRecyclerView; +import com.lechange.pulltorefreshlistview.Mode; +import com.lechange.pulltorefreshlistview.PullToRefreshBase; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.mm.android.deviceaddmodule.mobilecommon.utils.TimeUtils; +import com.mm.android.deviceaddmodule.mobilecommon.utils.UIUtils; +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +public class DeviceLocalRecordListFragment extends Fragment implements View.OnClickListener, IGetDeviceInfoCallBack.IDeviceLocalRecordCallBack, PullToRefreshBase.OnRefreshListener2 { + private static final String TAG = DeviceLocalRecordListFragment.class.getSimpleName(); + private Bundle arguments; + private String searchDate; + private long searchDate1; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private RecyclerView recyclerView; + private TextView tvMonthDay; + private long oneDay = 24 * 60 * 60 * 1000; + private List recordListDataList = new ArrayList<>(); + private DeviceRecordListAdapter deviceRecordListAdapter; + private DeviceRecordService deviceRecordService = ClassInstanceManager.newInstance().getDeviceRecordService(); + private static DeviceLocalRecordListFragment fragment; + private DeviceRecordListActivity deviceRecordListActivity; + private LcPullToRefreshRecyclerView deviceList; + private int pageSize = 30; + private int pageIndex = 1; + private String time = ""; + private TextView tvToday; + private ImageView mNextDayTv; + public static DeviceLocalRecordListFragment newInstance() { + fragment = new DeviceLocalRecordListFragment(); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + arguments = getArguments(); + searchDate = DateHelper.dateFormat(new Date(System.currentTimeMillis())); + searchDate1 = DateHelper.parseMills(searchDate + " 00:00:00"); + deviceRecordListActivity = (DeviceRecordListActivity) getActivity(); + deviceRecordListActivity.llEdit.setVisibility(View.GONE); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_device_cloud_list, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initView(view); + if (arguments == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) arguments.getSerializable(MethodConst.ParamConst.deviceDetail); + if (deviceListBean == null) { + return; + } + initData(); + } + + private void initView(View view) { + view.findViewById(R.id.iv_day_pre).setOnClickListener(this); + mNextDayTv =view.findViewById(R.id.iv_day_next); + tvMonthDay = view.findViewById(R.id.tv_month_day); + deviceList = view.findViewById(R.id.record_list); + tvToday = view.findViewById(R.id.tv_today); + deviceList.setOnRefreshListener(this); + mNextDayTv.setOnClickListener(this); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + refreshMode(Mode.PULL_FROM_START); + refreshState(true); + } + }, 200); + recyclerView = deviceList.getRefreshableView(); + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + } + + private void refreshState(boolean refresh) { + if (refresh) { + deviceList.setRefreshing(true); + } else { + deviceList.onRefreshComplete(); + } + } + + private void refreshMode(Mode mode) { + deviceList.setMode(mode); + } + + private void initData() { + tvMonthDay.setText(searchDate); + mCalendar.setTime(TimeUtils.stringToDate(searchDate,"yyyy-MM-dd HH:mm:ss")); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + } + + protected Calendar mCalendar = Calendar.getInstance(); + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.iv_day_pre) { + searchDate1 = searchDate1 - oneDay; + searchDate = DateHelper.dateFormat(new Date(searchDate1)); + tvMonthDay.setText(searchDate); + mCalendar.setTime(new Date(searchDate1)); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + initLocalRecord(false); + } else if (id == R.id.iv_day_next) { + searchDate1 = searchDate1 + oneDay; + searchDate = DateHelper.dateFormat(new Date(searchDate1)); + tvMonthDay.setText(searchDate); + mCalendar.setTime(new Date(searchDate1)); + UIUtils.setEnabledEX(TimeUtils.isBeforeToday(mCalendar), mNextDayTv); + initLocalRecord(false); + } + } + + + + @Override + public void deviceLocalRecord(LocalRecordsData.Response result) { + if (!isAdded()){ + return; + } + tvToday.setVisibility(View.GONE); + recyclerView.setVisibility(View.VISIBLE); + DialogUtils.dismiss(); + refreshState(false); + if (result != null && result.data != null && result.data.records != null && result.data.records.size() > 0) { + if (result.data.records.size() >= pageSize) { + refreshMode(Mode.BOTH); + } else { + refreshMode(Mode.PULL_FROM_START); + } + recordListDataList = dealLocalRecord(result); + } else { + if (pageIndex == 1){ + tvToday.setVisibility(View.VISIBLE); + recyclerView.setVisibility(View.GONE); + } + refreshMode(Mode.PULL_FROM_START); + } + showList(); + } + + @Override + public void onError(Throwable throwable) { + if (!isAdded()){ + return; + } + LogUtil.errorLog(TAG, "error", throwable); + DialogUtils.dismiss(); + refreshState(false); + refreshMode(Mode.PULL_FROM_START); + Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_SHORT).show(); + pageIndex = 1; + time = ""; + recordListDataList.clear(); + showList(); + } + + private void initLocalRecord(boolean isLoadMore) { + if (isLoadMore) { + pageIndex = pageIndex + pageSize; + } else { + pageIndex = 1; + time = ""; + recordListDataList.clear(); + } + DialogUtils.show(getActivity()); + getLocalData(); + /* deviceRecordService.querySDUse(deviceListBean.deviceId, new IGetDeviceInfoCallBack.ICommon() { + + @Override + public void onCommonBack(String response) { + if (!"empty".equals(response)){ + getLocalData(); + }else{ + DialogUtils.dismiss(); + refreshState(false); + tvToday.setVisibility(View.VISIBLE); + tvToday.setText(getActivity().getResources().getString(R.string.lc_demo_device_local_sd)); + } + } + + @Override + public void onError(Throwable throwable) { + Toast.makeText(getActivity(),throwable.getMessage(),Toast.LENGTH_SHORT).show(); + } + });*/ + } + + private void getLocalData(){ + LocalRecordsData localRecordsData = new LocalRecordsData(); + localRecordsData.data.deviceId = deviceListBean.deviceId; + localRecordsData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + localRecordsData.data.beginTime = searchDate + " 00:00:00"; + localRecordsData.data.endTime = searchDate + " 23:59:59"; + localRecordsData.data.type = "All"; + localRecordsData.data.queryRange = pageIndex + "-" + (pageIndex + pageSize - 1); + deviceRecordService.queryLocalRecords(localRecordsData, this); + } + + private void showList() { + if (deviceRecordListAdapter == null) { + deviceRecordListAdapter = new DeviceRecordListAdapter(getContext(), recordListDataList); + recyclerView.setAdapter(deviceRecordListAdapter); + } else { + deviceRecordListAdapter.notifyDataSetChanged(); + } + deviceRecordListAdapter.setEditClickListener(new DeviceRecordListAdapter.EditClickListener() { + @Override + public void edit(int outPosition, int innerPosition) { + LogUtil.debugLog(TAG, outPosition + "..." + innerPosition); + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + bundle.putSerializable(MethodConst.ParamConst.recordData, recordListDataList.get(outPosition).recordsData.get(innerPosition)); + bundle.putInt(MethodConst.ParamConst.recordType, MethodConst.ParamConst.recordTypeLocal); + Intent intent = new Intent(getContext(), DeviceRecordPlayActivity.class); + intent.putExtras(bundle); + startActivity(intent); + } + }); + } + + private List dealLocalRecord(LocalRecordsData.Response result) { + for (LocalRecordsData.ResponseData.RecordsBean recordsBean : result.data.records) { + String innerTime = recordsBean.beginTime.substring(11, 13); + RecordsData a = new RecordsData(); + a.recordType = 1; + a.recordId = recordsBean.recordId; + a.channelID = recordsBean.channelID; + a.beginTime = recordsBean.beginTime; + a.endTime = recordsBean.endTime; + a.fileLength = recordsBean.fileLength; + a.type = recordsBean.type; + if (!innerTime.equals(time)) { + RecordListData r = new RecordListData(); + r.period = innerTime + ":00"; + r.recordsData = new ArrayList<>(); + r.recordsData.add(a); + recordListDataList.add(r); + time = innerTime; + } else { + RecordListData b = recordListDataList.get(recordListDataList.size() - 1); + b.recordsData.add(a); + } + } + LogUtil.debugLog(TAG, recordListDataList.size() + ""); + return recordListDataList; + } + + @Override + public void onPullDownToRefresh(PullToRefreshBase pullToRefreshBase) { + initLocalRecord(false); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase pullToRefreshBase) { + initLocalRecord(true); + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceOnlineMediaPlayActivity.java b/app/src/main/java/com/lechange/demo/ui/DeviceOnlineMediaPlayActivity.java new file mode 100644 index 0000000..5a1c5ed --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceOnlineMediaPlayActivity.java @@ -0,0 +1,1515 @@ +package com.lechange.demo.ui; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.drawable.BitmapDrawable; +import android.hardware.SensorManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v4.widget.PopupWindowCompat; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.OrientationEventListener; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceLocalCacheService; +import com.common.openapi.DeviceRecordService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.CloudRecordsData; +import com.common.openapi.entity.ControlMovePTZData; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.DeviceLocalCacheData; +import com.common.openapi.entity.LocalRecordsData; +import com.common.openapi.entity.RecordsData; +import com.lechange.common.log.Logger; +import com.lechange.demo.adapter.MediaPlayRecordAdapter; +import com.lechange.demo.dialog.EncryptKeyInputDialog; +import com.lechange.demo.handler.ActivityHandler; +import com.lechange.demo.tools.DateHelper; +import com.lechange.demo.tools.DeviceAbilityHelper; +import com.lechange.demo.tools.MediaPlayHelper; +import com.lechange.demo.view.Direction; +import com.lechange.demo.view.LcCloudRudderView; +import com.lechange.demo.view.LcPopupWindow; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.listener.LCOpenSDK_TalkerListener; +import com.lechange.opensdk.media.LCOpenSDK_ParamReal; +import com.lechange.opensdk.media.LCOpenSDK_ParamTalk; +import com.lechange.opensdk.media.LCOpenSDK_PlayWindow; +import com.lechange.opensdk.media.LCOpenSDK_Talk; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.mm.android.deviceaddmodule.device_wifi.DeviceConstant; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; + +public class DeviceOnlineMediaPlayActivity extends AppCompatActivity implements View.OnClickListener, IGetDeviceInfoCallBack.IDeviceCacheCallBack { + private static final String TAG = DeviceOnlineMediaPlayActivity.class.getSimpleName(); + + private LCOpenSDK_PlayWindow mPlayWin = new LCOpenSDK_PlayWindow(); + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private Bundle bundle; + private FrameLayout frLiveWindow, frLiveWindowContent; + private TextView tvNoVideo, tvDeviceName, tvCloudVideo, tvLocalVideo, tvLoadingMsg, tvPixel; + private RecyclerView rcvVideoList; + private LinearLayout llVideoContent, llVideo, llSpeak, llScreenShot, llCloudStage, llFullScreen, llSound, llPlayStyle, llPlayPause, llDetail, llBack, llVideo1, llSpeak1, llScreenShot1, llCloudStage1; + private ImageView ivPalyPause, ivPlayStyle, ivSound, ivCloudStage, ivScreenShot, ivSpeak, ivVideo, ivCloudStage1, ivScreenShot1, ivSpeak1, ivVideo1; + private ProgressBar pbLoading; + private RelativeLayout rlLoading; + private LcCloudRudderView rudderView; + private boolean cloudvideo = true; + private boolean isShwoRudder = false; + private boolean showHD = true;//显示HD和SD的切换 + private AudioTalkerListener audioTalkerListener = new AudioTalkerListener(); + + private VideoMode videoMode = VideoMode.MODE_HD; + private SoundStatus soundStatus = SoundStatus.PLAY; + private SoundStatus soundStatusPre = SoundStatus.PLAY; + private SpeakStatus speakStatus = SpeakStatus.STOP; + private RecordStatus recordStatus = RecordStatus.STOP; + private PlayStatus playStatus = PlayStatus.ERROR; + private LinearLayoutManager linearLayoutManager; + private MediaPlayRecordAdapter mediaPlayRecordAdapter; + private List recordsDataList = new ArrayList<>(); + private List cloudRecordsDataList; + private List localRecordsDataList; + private String cloudRecordsDataTip = ""; + private String localRecordsDataTip = ""; + private DeviceRecordService deviceRecordService = ClassInstanceManager.newInstance().getDeviceRecordService(); + private Direction mPTZPreDirection = null; + private int mCurrentOrientation; + private LinearLayout llController; + private FrameLayout frRecord; + private RelativeLayout rlTitle; + private ImageView ivChangeScreen; + private EncryptKeyInputDialog encryptKeyInputDialog; + private String encryptKey; + private boolean supportPTZ; + private String videoPath = null; + // 屏幕方向改变监听器 + private OrientationEventListener mOrientationEventListener; + + private int mVideoViewCurrentOrientationRequest = NO_ORIENTATION_REQUEST; + private LcPopupWindow lcPopupWindow; + private int imageSize = -1;//视频播放分辨率 + private int bateMode; + + + public enum PlayStatus { + PLAY, PAUSE, ERROR + } + + public enum LoadStatus { + LOADING, LOAD_SUCCESS, LOAD_ERROR + } + + public enum SoundStatus { + PLAY, STOP, NO_SUPPORT + } + + public enum SpeakStatus { + PLAY, STOP, NO_SUPPORT, OPENING + } + + public enum VideoMode { + MODE_HD, MODE_SD + } + + public enum RecordStatus { + START, STOP + } + + private Handler mHandler; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + finish(); + } + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + mHandler = new ActivityHandler(this) { + @Override + public void handleMsg(Message msg) { + switch (msg.what) { + case MSG_REQUEST_ORIENTATION: + requestedOrientation(msg.arg1, false); + break; + default: + break; + } + // handlePlayMessage(msg); + } + + }; + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mCurrentOrientation = Configuration.ORIENTATION_PORTRAIT; + initOrientationEventListener(); + setContentView(R.layout.activity_device_online_media_play); + initView(); + initData(); + operatePTZ(); + } + + protected void requestedOrientation(int requestedOrientation, boolean isForce) { + + if (!isForce) { + + if (mVideoViewCurrentOrientationRequest == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + + /* + * // 如果是开启全屏开关,禁止竖屏 if (requestedOrientation == + * ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || requestedOrientation == + * ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { return; } + */ + mVideoViewCurrentOrientationRequest = NO_ORIENTATION_REQUEST; + + } else { + + if (mVideoViewCurrentOrientationRequest == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { + + if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + + // 如果监听器发出的请求是横屏,表示屏幕处于横屏,直接返回; + mVideoViewCurrentOrientationRequest = NO_ORIENTATION_REQUEST; + return; + } + + if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { + + // 如果监听器发出的请求和当前开关方向保持一致时,表示屏幕已经恢复到制定的竖屏,将开关请求状态重置; + mVideoViewCurrentOrientationRequest = NO_ORIENTATION_REQUEST; + return; + } + + // 如果监听器发出的请求与当前开关方向不一致时,表示屏幕已经转到其他方向,将开关请求状态重置,并发出相应的请求; + mVideoViewCurrentOrientationRequest = NO_ORIENTATION_REQUEST; + } + + // 如果开关没有发出请求,或者开关请求状态已经重置,则直接发出相应请求; + + } + + } else { + mVideoViewCurrentOrientationRequest = requestedOrientation; + } + + try { + setRequestedOrientation(requestedOrientation); + } catch (Exception e) { + } + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + mCurrentOrientation = newConfig.orientation; + super.onConfigurationChanged(newConfig); + switchScreenDirection(); + } + + private void operatePTZ() { + rudderView.setRudderListener(new LcCloudRudderView.RudderListener() { + @Override + public void onSteeringWheelChangedBegin() { + + } + + @Override + public void onSteeringWheelChangedContinue(Direction direction) { + if (direction == null && mPTZPreDirection != null) { + controlPTZ(mPTZPreDirection, 200, true); + mPTZPreDirection = null; + } else if (direction != mPTZPreDirection) { + // 方向不同才更新云台指示图标 + mPTZPreDirection = direction; + controlPTZ(mPTZPreDirection, 30000, false); + } + } + + @Override + public void onSteeringWheelChangedSingle(Direction direction) { + controlPTZ(direction, 200, false); + } + + @Override + public void onSteeringWheelChangedEnd() { + } + }); + } + + private void controlPTZ(Direction em, long time, boolean stop) { + String operation = ""; + if (em == Direction.Left) { + operation = "2"; + } else if (em == Direction.Right) { + operation = "3"; + } else if (em == Direction.Up) { + operation = "0"; + } else if (em == Direction.Down) { + operation = "1"; + } + if (stop) { + operation = "10"; + } + ControlMovePTZData controlMovePTZData = new ControlMovePTZData(); + controlMovePTZData.data.deviceId = deviceListBean.deviceId; + controlMovePTZData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + controlMovePTZData.data.operation = operation; + controlMovePTZData.data.duration = time; + deviceRecordService.controlMovePTZ(controlMovePTZData); + } + + private void initCloudRecord() { + if ((cloudRecordsDataTip != null && !cloudRecordsDataTip.isEmpty()) || cloudRecordsDataList != null) { + if (cloudRecordsDataList != null) { + showRecordList(cloudRecordsDataList); + } else { + showRecordListTip(cloudRecordsDataTip); + } + } else { + getCloudRecord(); + /* deviceRecordService.queryCloudUse(deviceListBean.deviceId, deviceListBean.channels.get(deviceListBean.checkedChannel).channelId, new IGetDeviceInfoCallBack.ICommon() { + + @Override + public void onCommonBack(Integer response) { + if (response==-1||response==0){ + cloudRecordsDataTip = getResources().getString(R.string.lc_demo_device_cloud_not_open); + showRecordListTip(cloudRecordsDataTip); + }else{ + getCloudRecord(); + } + + } + + @Override + public void onError(Throwable throwable) { + Toast.makeText(DeviceOnlineMediaPlayActivity.this,throwable.getMessage(),Toast.LENGTH_SHORT).show(); + } + });*/ + } + } + + + private void getCloudRecord() { + if (deviceListBean.channels.size() == 0) { + return; + } + CloudRecordsData cloudRecordsData = new CloudRecordsData(); + cloudRecordsData.data.deviceId = deviceListBean.deviceId; + cloudRecordsData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + cloudRecordsData.data.beginTime = DateHelper.dateFormat(new Date(System.currentTimeMillis())) + " 00:00:00"; + cloudRecordsData.data.endTime = DateHelper.dateFormat(new Date(System.currentTimeMillis())) + " 23:59:59"; + cloudRecordsData.data.count = 6; + deviceRecordService.getCloudRecords(cloudRecordsData, new IGetDeviceInfoCallBack.IDeviceCloudRecordCallBack() { + @Override + public void deviceCloudRecord(CloudRecordsData.Response result) { + List cloudRecords = result.data.records; + if (cloudRecords != null && cloudRecords.size() > 0) { + cloudRecordsDataList = new ArrayList<>(); + for (CloudRecordsData.ResponseData.RecordsBean recordsBean : cloudRecords) { + RecordsData recordsData = RecordsData.parseCloudData(recordsBean); + cloudRecordsDataList.add(recordsData); + } + showRecordList(cloudRecordsDataList); + } else { + queryCloudUseState(deviceListBean.deviceId, deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + } + } + + @Override + public void onError(Throwable throwable) { + cloudRecordsDataTip = throwable.getMessage(); + showRecordListTip(cloudRecordsDataTip); + } + }); + } + + /** + * 查询套餐使用情况 + * + * @param deviceId + * @param channelId + */ + private void queryCloudUseState(String deviceId, String channelId) { + deviceRecordService.queryCloudUse(deviceId, channelId, new IGetDeviceInfoCallBack.ICommon() { + @Override + public void onCommonBack(Integer response) { + switch (response) { + case -1://未开通 + cloudRecordsDataTip = getResources().getString(R.string.lc_demo_device_cloud_state_not_opened); + break; + case 0://过期 + cloudRecordsDataTip = getResources().getString(R.string.lc_demo_device_cloud_state_expired); + break; + case 1://使用中 + cloudRecordsDataTip = getResources().getString(R.string.lc_demo_device_more_video); + break; + case 2://暂停 + cloudRecordsDataTip = getResources().getString(R.string.lc_demo_device_cloud_state_suspended); + break; + } + showRecordListTip(cloudRecordsDataTip); + } + + @Override + public void onError(Throwable throwable) { + cloudRecordsDataTip = throwable.getMessage(); + showRecordListTip(cloudRecordsDataTip); + } + }); + } + + private void showRecordList(List list) { + rcvVideoList.setVisibility(View.VISIBLE); + tvNoVideo.setVisibility(View.GONE); + recordsDataList.clear(); + for (RecordsData a : list) { + recordsDataList.add(a); + } + if (mediaPlayRecordAdapter == null) { + mediaPlayRecordAdapter = new MediaPlayRecordAdapter(recordsDataList, DeviceOnlineMediaPlayActivity.this); + rcvVideoList.setAdapter(mediaPlayRecordAdapter); + } else { + mediaPlayRecordAdapter.notifyDataSetChanged(); + } + //加载更多 + mediaPlayRecordAdapter.setLoadMoreClickListener(new MediaPlayRecordAdapter.LoadMoreClickListener() { + @Override + public void loadMore() { + gotoRecordList(); + } + }); + //进入视频片段播放页 + mediaPlayRecordAdapter.setOnItemClickListener(new MediaPlayRecordAdapter.OnItemClickListener() { + @Override + public void click(int recordType, int position) { + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + bundle.putSerializable(MethodConst.ParamConst.recordData, recordsDataList.get(position)); + bundle.putInt(MethodConst.ParamConst.recordType, recordsDataList.get(position).recordType == 0 ? MethodConst.ParamConst.recordTypeCloud : MethodConst.ParamConst.recordTypeLocal); + Intent intent = new Intent(DeviceOnlineMediaPlayActivity.this, DeviceRecordPlayActivity.class); + intent.putExtras(bundle); + startActivity(intent); + } + }); + } + + private void gotoRecordList() { + if (cloudvideo) { + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + bundle.putInt(MethodConst.ParamConst.recordType, MethodConst.ParamConst.recordTypeCloud); + Intent intent = new Intent(DeviceOnlineMediaPlayActivity.this, DeviceRecordListActivity.class); + intent.putExtras(bundle); + startActivity(intent); + } else { + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + bundle.putInt(MethodConst.ParamConst.recordType, MethodConst.ParamConst.recordTypeLocal); + Intent intent = new Intent(DeviceOnlineMediaPlayActivity.this, DeviceRecordListActivity.class); + intent.putExtras(bundle); + startActivity(intent); + } + } + + private void showRecordListTip(String txt) { + rcvVideoList.setVisibility(View.GONE); + tvNoVideo.setVisibility(View.VISIBLE); + tvNoVideo.setText(txt); + } + + private void initLocalRecord() { + if ((localRecordsDataTip != null && !localRecordsDataTip.isEmpty()) || localRecordsDataList != null) { + if (localRecordsDataList != null) { + showRecordList(localRecordsDataList); + } else { + showRecordListTip(localRecordsDataTip); + } + } else { + getLocalRecord(); + /* deviceRecordService.querySDUse(deviceListBean.deviceId, new IGetDeviceInfoCallBack.ICommon() { + @Override + public void onCommonBack(String response) { + if (!"empty".equals(response)){ + getLocalRecord(); + }else{ + localRecordsDataTip = getResources().getString(R.string.lc_demo_device_local_sd); + showRecordListTip(localRecordsDataTip); + } + } + @Override + public void onError(Throwable throwable) { + Toast.makeText(DeviceOnlineMediaPlayActivity.this,throwable.getMessage(),Toast.LENGTH_SHORT).show(); + } + });*/ + + } + } + + private void getLocalRecord() { + LocalRecordsData localRecordsData = new LocalRecordsData(); + localRecordsData.data.deviceId = deviceListBean.deviceId; + localRecordsData.data.channelId = deviceListBean.channels.get(deviceListBean.checkedChannel).channelId; + localRecordsData.data.beginTime = DateHelper.dateFormat(new Date(System.currentTimeMillis())) + " 00:00:00"; + localRecordsData.data.endTime = DateHelper.dateFormat(new Date(System.currentTimeMillis())) + " 23:59:59"; + localRecordsData.data.type = "All"; + localRecordsData.data.queryRange = "1-6"; + deviceRecordService.queryLocalRecords(localRecordsData, new IGetDeviceInfoCallBack.IDeviceLocalRecordCallBack() { + @Override + public void deviceLocalRecord(LocalRecordsData.Response result) { + List localRecords = result.data.records; + if (localRecords != null && localRecords.size() > 0) { + localRecordsDataList = new ArrayList<>(); + for (LocalRecordsData.ResponseData.RecordsBean recordsBean : localRecords) { + RecordsData recordsData = RecordsData.parseLocalData(recordsBean); + localRecordsDataList.add(recordsData); + } + showRecordList(localRecordsDataList); + } else { + localRecordsDataTip = getResources().getString(R.string.lc_demo_device_more_video); + showRecordListTip(localRecordsDataTip); + } + } + + @Override + public void onError(Throwable throwable) { + localRecordsDataTip = throwable.getMessage(); + showRecordListTip(localRecordsDataTip); + } + }); + } + + private void initView() { + frLiveWindow = findViewById(R.id.fr_live_window); + frLiveWindowContent = findViewById(R.id.fr_live_window_content); + tvCloudVideo = findViewById(R.id.tv_cloud_video); + tvLocalVideo = findViewById(R.id.tv_local_video); + llBack = findViewById(R.id.ll_back); + tvDeviceName = findViewById(R.id.tv_device_name); + llDetail = findViewById(R.id.ll_detail); + llPlayPause = findViewById(R.id.ll_paly_pause); + llPlayStyle = findViewById(R.id.ll_play_style); + llSound = findViewById(R.id.ll_sound); + llFullScreen = findViewById(R.id.ll_fullscreen); + llCloudStage = findViewById(R.id.ll_cloudstage); + llScreenShot = findViewById(R.id.ll_screenshot); + llSpeak = findViewById(R.id.ll_speak); + llVideo = findViewById(R.id.ll_video); + llVideoContent = findViewById(R.id.ll_video_content); + rcvVideoList = findViewById(R.id.rcv_video_list); + tvNoVideo = findViewById(R.id.tv_no_video); + rudderView = findViewById(R.id.rudder); + ivPalyPause = findViewById(R.id.iv_paly_pause); + ivPlayStyle = findViewById(R.id.iv_play_style); + tvPixel = findViewById(R.id.tv_play_pixel); + ivSound = findViewById(R.id.iv_sound); + ivCloudStage = findViewById(R.id.iv_cloudStage); + ivScreenShot = findViewById(R.id.iv_screen_shot); + ivSpeak = findViewById(R.id.iv_speak); + ivVideo = findViewById(R.id.iv_video); + + llCloudStage1 = findViewById(R.id.ll_cloudstage1); + llScreenShot1 = findViewById(R.id.ll_screenshot1); + llSpeak1 = findViewById(R.id.ll_speak1); + llVideo1 = findViewById(R.id.ll_video1); + ivCloudStage1 = findViewById(R.id.iv_cloudStage1); + ivScreenShot1 = findViewById(R.id.iv_screen_shot1); + ivSpeak1 = findViewById(R.id.iv_speak1); + ivVideo1 = findViewById(R.id.iv_video1); + + rlLoading = findViewById(R.id.rl_loading); + pbLoading = findViewById(R.id.pb_loading); + tvLoadingMsg = findViewById(R.id.tv_loading_msg); + llController = findViewById(R.id.ll_controller); + frRecord = findViewById(R.id.fr_record); + rlTitle = findViewById(R.id.rl_title); + ivChangeScreen = findViewById(R.id.iv_change_screen); + linearLayoutManager = new LinearLayoutManager(DeviceOnlineMediaPlayActivity.this); + linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); + rcvVideoList.setLayoutManager(linearLayoutManager); + initCommonClickListener(); + // 初始化播放窗口 + switchScreenDirection(); + mPlayWin.initPlayWindow(this, frLiveWindowContent, 0, false); + setWindowListener(mPlayWin); + mPlayWin.openTouchListener();//开启收拾监听 + } + + private void switchScreenDirection() { + if (mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT) { + RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(frLiveWindow.getLayoutParams()); + DisplayMetrics metric = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + mLayoutParams.addRule(RelativeLayout.BELOW, R.id.rl_title); + frLiveWindow.setLayoutParams(mLayoutParams); + MediaPlayHelper.quitFullScreen(DeviceOnlineMediaPlayActivity.this); + llController.setVisibility(View.VISIBLE); + rlTitle.setVisibility(View.VISIBLE); + llSpeak1.setVisibility(View.GONE); + llCloudStage1.setVisibility(View.GONE); + llVideo1.setVisibility(View.GONE); + llScreenShot1.setVisibility(View.GONE); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(frRecord + .getLayoutParams()); + layoutParams.addRule(RelativeLayout.BELOW, R.id.ll_controller); + frRecord.setLayoutParams(layoutParams); + FrameLayout.LayoutParams layoutParams3 = new FrameLayout.LayoutParams(rudderView.getLayoutParams()); + layoutParams3.gravity = Gravity.CENTER; + rudderView.setLayoutParams(layoutParams3); + switchCloudRudder(false); + } else if (mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE) { + DisplayMetrics metric = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metric); + RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(metric.widthPixels, metric.heightPixels); + mLayoutParams.setMargins(0, 0, 0, 0); + mLayoutParams.removeRule(RelativeLayout.BELOW); + frLiveWindow.setLayoutParams(mLayoutParams); + MediaPlayHelper.setFullScreen(DeviceOnlineMediaPlayActivity.this); + llController.setVisibility(View.GONE); + rlTitle.setVisibility(View.GONE); + llSpeak1.setVisibility(View.VISIBLE); + llCloudStage1.setVisibility(View.VISIBLE); + llVideo1.setVisibility(View.VISIBLE); + llScreenShot1.setVisibility(View.VISIBLE); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(frRecord + .getLayoutParams()); + layoutParams.removeRule(RelativeLayout.BELOW); + frRecord.setLayoutParams(layoutParams); + FrameLayout.LayoutParams layoutParams3 = new FrameLayout.LayoutParams(rudderView.getLayoutParams()); + layoutParams3.gravity = Gravity.CENTER_VERTICAL; + rudderView.setLayoutParams(layoutParams3); + switchCloudRudder(false); + } + } + + private void initData() { + bundle = getIntent().getExtras(); + if (bundle == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) bundle.getSerializable(MethodConst.ParamConst.deviceDetail); + switchVideoList(true); + if (deviceListBean.channels.size() == 0) { + return; + } + getDeviceLocalCache(); + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + + /*if (deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions != null && deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions.size() > 0) { + showHD = false; + bateMode = deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions.get(0).streamType; + imageSize = deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions.get(0).imageSize; + tvPixel.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions.get(0).name); + } else { + showHD = true; + } + lcPopupWindow = new LcPopupWindow(DeviceOnlineMediaPlayActivity.this, deviceListBean.channels.get(deviceListBean.checkedChannel).resolutions); + lcPopupWindow.getContentView().measure(lcPopupWindow.makeDropDownMeasureSpec(lcPopupWindow.getWidth()), + lcPopupWindow.makeDropDownMeasureSpec(lcPopupWindow.getHeight() + ));*/ + } + + /** + * 获取设备缓存信息 + */ + private void getDeviceLocalCache() { + DeviceLocalCacheData deviceLocalCacheData = new DeviceLocalCacheData(); + deviceLocalCacheData.setDeviceId(deviceListBean.deviceId); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + deviceLocalCacheData.setChannelId(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + } + DeviceLocalCacheService deviceLocalCacheService = ClassInstanceManager.newInstance().getDeviceLocalCacheService(); + deviceLocalCacheService.findLocalCache(deviceLocalCacheData, this); + } + + + @Override + public void deviceCache(DeviceLocalCacheData deviceLocalCacheData) { + BitmapDrawable bitmapDrawable = MediaPlayHelper.picDrawable(deviceLocalCacheData.getPicPath()); + if (bitmapDrawable != null) { + rlLoading.setBackground(bitmapDrawable); + } + } + + @Override + public void onError(Throwable throwable) { + + } + + @Override + protected void onResume() { + super.onResume(); + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_loading), deviceListBean.deviceId); + } + + @Override + protected void onPause() { + super.onPause(); + stop(); + recordStatus = RecordStatus.STOP; + } + + private void initAbility(boolean loadSuccess) { + String deviceAbility = deviceListBean.ability; + String channelAbility = deviceListBean.ability; +// String channelAbility = deviceListBean.channels.get(deviceListBean.checkedChannel).ability; + //云台 + supportPTZ = DeviceAbilityHelper.isHasAbility(deviceAbility, channelAbility, "PT", "PTZ") && loadSuccess; + cloudStageClickListener(supportPTZ); + //对讲 + speakClickListener(DeviceAbilityHelper.isHasAbility(deviceAbility, channelAbility, "AudioTalkV1", "AudioTalk") && loadSuccess); + } + + private void switchVideoList(boolean b) { + this.cloudvideo = b; + tvCloudVideo.setSelected(cloudvideo); + tvLocalVideo.setSelected(!cloudvideo); + if (cloudvideo) { + initCloudRecord(); + } else { + initLocalRecord(); + } + } + + private void initCommonClickListener() { + llBack.setOnClickListener(this); + llDetail.setOnClickListener(this); + tvCloudVideo.setOnClickListener(this); + tvLocalVideo.setOnClickListener(this); + tvNoVideo.setOnClickListener(this); + llFullScreen.setOnClickListener(this); + } + + private void featuresClickListener(boolean loadSuccess) { + llPlayPause.setOnClickListener(loadSuccess ? this : null); + llPlayStyle.setOnClickListener(loadSuccess ? this : null); + + llScreenShot.setOnClickListener(loadSuccess ? this : null); + llScreenShot1.setOnClickListener(loadSuccess ? this : null); + llVideo.setOnClickListener(loadSuccess ? this : null); + llVideo1.setOnClickListener(loadSuccess ? this : null); + llSound.setOnClickListener(loadSuccess ? this : null); + ivPalyPause.setImageDrawable(loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause_disable)); + if (showHD) { + ivPlayStyle.setVisibility(View.VISIBLE); + tvPixel.setVisibility(View.GONE); + ivPlayStyle.setImageDrawable(videoMode == VideoMode.MODE_HD ? + (loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_hd) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_hd_disable)) : + (loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_sd) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_hd_disable))); + } else { + ivPlayStyle.setVisibility(View.GONE); + tvPixel.setVisibility(View.VISIBLE); + } + + ivScreenShot.setImageDrawable(loadSuccess + ? getDrawable(R.drawable.lc_demo_photo_capture_selector) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_screenshot_disable)); + ivVideo.setImageDrawable(loadSuccess + ? getDrawable(R.mipmap.lc_demo_livepreview_icon_video) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_video_disable)); + + ivScreenShot1.setImageDrawable(loadSuccess + ? getDrawable(R.mipmap.live_video_icon_h_screenshot) + : getDrawable(R.mipmap.live_video_icon_h_screenshot_disable)); + ivVideo1.setImageDrawable(loadSuccess + ? getDrawable(R.mipmap.live_video_icon_h_video_off) + : getDrawable(R.mipmap.live_video_icon_h_video_off_disable)); + ivSound.setImageDrawable(loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off_disable)); + //媒体声 + if (soundStatus != SoundStatus.PLAY) { + return; + } + if (openAudio()) { + soundStatus = SoundStatus.PLAY; + ivSound.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_on)); + } + } + + private void cloudStageClickListener(boolean isSupport) { + llCloudStage.setOnClickListener(isSupport ? this : null); + ivCloudStage.setImageDrawable(isSupport + ? getDrawable(R.mipmap.lc_demo_livepreview_icon_cloudstage) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_cloudstage_disable)); + llCloudStage1.setOnClickListener(isSupport ? this : null); + ivCloudStage1.setImageDrawable(isSupport + ? getDrawable(R.mipmap.live_video_icon_h_cloudterrace_off) + : getDrawable(R.mipmap.live_video_icon_h_cloudterrace_off_disable)); + } + + private void speakClickListener(boolean isSupport) { + ivSpeak.setOnClickListener(isSupport ? this : null); + ivSpeak.setImageDrawable(isSupport + ? getDrawable(R.mipmap.lc_demo_livepreview_icon_speak) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_speak_disable)); + ivSpeak1.setOnClickListener(isSupport ? this : null); + ivSpeak1.setImageDrawable(isSupport + ? getDrawable(R.mipmap.live_video_icon_h_talk_off) + : getDrawable(R.mipmap.live_video_icon_h_talk_off_disable)); + } + + private void setWindowListener(LCOpenSDK_PlayWindow playWin) { + playWin.setWindowListener(new LCOpenSDK_EventListener() { + //手势缩放开始事件 + @Override + public void onZoomBegin(int index) { + super.onZoomBegin(index); + LogUtil.debugLog(TAG, "onZoomBegin: index= " + index); + } + + //手势缩放中事件 + @Override + public void onZooming(int index, float dScale) { + super.onZooming(index, dScale); + LogUtil.debugLog(TAG, "onZooming: index= " + index + " , dScale= " + dScale); + mPlayWin.doScale(dScale); + } + + //缩放结束事件 + @Override + public void onZoomEnd(int index, ZoomType zoomType) { + super.onZoomEnd(index, zoomType); + LogUtil.debugLog(TAG, "onZoomEnd: index= " + index + " , zoomType= " + zoomType); + } + + //窗口单击事件 + @Override + public void onControlClick(int index, float dx, float dy) { + super.onControlClick(index, dx, dy); + LogUtil.debugLog(TAG, "onControlClick: index= " + index + " , dx= " + dx + " , dy= " + dy); + } + + //窗口双击事件 + @Override + public void onWindowDBClick(int index, float dx, float dy) { + super.onWindowDBClick(index, dx, dy); + LogUtil.debugLog(TAG, "onWindowDBClick: index= " + index + " , dx= " + dx + " , dy= " + dy); + } + + //滑动开始事件 + @Override + public boolean onSlipBegin(int index, Direction direction, float dx, float dy) { + LogUtil.debugLog(TAG, "onSlipBegin: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + return super.onSlipBegin(index, direction, dx, dy); + } + + //滑动中事件 + @Override + public void onSlipping(int index, Direction direction, float prex, float prey, float dx, float dy) { + super.onSlipping(index, direction, prex, prey, dx, dy); + mPlayWin.doTranslate(dx, dy); + LogUtil.debugLog(TAG, "onSlipping: index= " + index + " , direction= " + direction + " , prex= " + prex + " , prey= " + prey + " , dx= " + dx + " , dy= " + dy); + } + + //滑动结束事件 + @Override + public void onSlipEnd(int index, Direction direction, float dx, float dy) { + super.onSlipEnd(index, direction, dx, dy); + mPlayWin.doTranslateEnd(); + LogUtil.debugLog(TAG, "onSlipEnd: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + } + + //长按开始回调 + @Override + public void onWindowLongPressBegin(int index, Direction direction, float dx, float dy) { + super.onWindowLongPressBegin(index, direction, dx, dy); + LogUtil.debugLog(TAG, "onWindowLongPressBegin: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + } + + //长按事件结束 + @Override + public void onWindowLongPressEnd(int index) { + super.onWindowLongPressEnd(index); + LogUtil.debugLog(TAG, "onWindowLongPressEnd: index= " + index); + } + + /** + * 播放事件回调 + * resultSource: 0--RTSP 1--HLS 5--DHHTTP 99--OPENAPI + */ + @Override + public void onPlayerResult(int index, String code, int resultSource) { + //mPlayWin.setSEnhanceMode(4);//设置降噪等级最大 + super.onPlayerResult(index, code, resultSource); + LogUtil.debugLog(TAG, "onPlayerResult: index= " + index + " , code= " + code + " , resultSource= " + resultSource); + boolean failed = false; + if (resultSource == 99) { + //code -1000 HTTP交互出错或超时 + failed = true; + } else { + if (resultSource == 5 && (!(code.equals("1000") || code.equals("0") || code.equals("4000")))) { + // code 1000-开启播放成功 0-开始拉流 + failed = true; + if (code.equals("1000005")) { + inputEncryptKey(); + } + } else if (resultSource == 0 && (code.equals("0") || code.equals("1") || code.equals("3") || code.equals("7"))) { + // code + // 0-组帧失败,错误状态 + // 1-内部要求关闭,如连接断开等,错误状态 + // 3-RTSP鉴权失败,错误状态 + // 7-秘钥错误 + failed = true; + if (code.equals("7")) { + inputEncryptKey(); + } + } + } + if (failed) { + loadingStatus(LoadStatus.LOAD_ERROR, getResources().getString(R.string.lc_demo_device_video_play_error) + ":" + code + "." + resultSource, ""); + playStatus = PlayStatus.ERROR; + } + } + + //分辨率改变事件 + @Override + public void onResolutionChanged(int index, int width, int height) { + super.onResolutionChanged(index, width, height); + LogUtil.debugLog(TAG, "onResolutionChanged: index= " + index + " , width= " + width + " , height= " + height); + } + + //播放开始回调 + @Override + public void onPlayBegan(int index) { + super.onPlayBegan(index); + LogUtil.debugLog(TAG, "onPlayBegan: index= " + index); + loadingStatus(LoadStatus.LOAD_SUCCESS, "", ""); + playStatus = PlayStatus.PLAY; + } + + //接收数据回调 + @Override + public void onReceiveData(int index, int len) { + super.onReceiveData(index, len); + LogUtil.debugLog(TAG, "onReceiveData: index= " + index + " , len= " + len); + } + + //接收帧流回调 + @Override + public void onStreamCallback(int index, byte[] bytes, int len) { + super.onStreamCallback(index, bytes, len); + LogUtil.debugLog(TAG, "onStreamCallback: index= " + index + " , len= " + len); + } + + //播放结束事件 + @Override + public void onPlayFinished(int index) { + super.onPlayFinished(index); + LogUtil.debugLog(TAG, "onPlayFinished: index= " + index); + } + + //播放时间信息回调 + @Override + public void onPlayerTime(int index, long time) { + super.onPlayerTime(index, time); + LogUtil.debugLog(TAG, "onPlayerTime: index= " + index + " , time= " + time); + } + }); + } + + /** + * 输入秘钥 + */ + private void inputEncryptKey() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (encryptKeyInputDialog == null) { + encryptKeyInputDialog = new EncryptKeyInputDialog(DeviceOnlineMediaPlayActivity.this); + } + encryptKeyInputDialog.show(); + encryptKeyInputDialog.setOnClick(new EncryptKeyInputDialog.OnClick() { + @Override + public void onSure(String txt) { + encryptKey = txt; + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_change), txt); + } + }); + } + }); + } + + /** + * 播放状态 + * + * @param loadStatus 播放状态 + * @param msg + */ + private void loadingStatus(final LoadStatus loadStatus, final String msg, final String psk) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (loadStatus == LoadStatus.LOADING) { + //先关闭 + stop(); + //开始播放 + play(psk); + rlLoading.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.VISIBLE); + tvLoadingMsg.setText(msg); + } else if (loadStatus == LoadStatus.LOAD_SUCCESS) { + //播放成功 + rlLoading.setVisibility(View.GONE); + rudderView.enable(true); + initAbility(true); + featuresClickListener(true); + } else { + //播放失败 + stop(); + rlLoading.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.GONE); + tvLoadingMsg.setText(msg); + initAbility(false); + featuresClickListener(false); + } + } + }); + } + + /** + * 开始播放 + */ + public void play(String psk) { + + if (showHD) { + bateMode = videoMode == VideoMode.MODE_HD ? 0 : 1; + } + if (deviceListBean.channels.size() == 0) { + return; + } + LCOpenSDK_ParamReal paramReal = new LCOpenSDK_ParamReal( + SharedpreferencesUtil.get("accessToken", ""), + deviceListBean.deviceId, + Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId), + psk, + deviceListBean.playToken, + bateMode, + true, true, imageSize + ); + mPlayWin.playRtspReal(paramReal); + + } + + /** + * 停止播放 + */ + public void stop() { + captureLastPic(); + stopRecord();// 关闭录像 + closeAudio();// 关闭音频 + stopTalk();//关闭对讲 + rudderView.enable(false); + mPlayWin.stopRtspReal(true);// 关闭视频 + } + + /** + * 保存最后一帧做封面 + */ + private void captureLastPic() { + if (playStatus == PlayStatus.ERROR) { + return; + } + String capturePath; + try { + capturePath = capture(false); + } catch (Throwable e) { + capturePath = null; + } + if (capturePath == null) { + return; + } + DeviceLocalCacheService deviceLocalCacheService = ClassInstanceManager.newInstance().getDeviceLocalCacheService(); + DeviceLocalCacheData deviceLocalCacheData = new DeviceLocalCacheData(); + deviceLocalCacheData.setPicPath(capturePath); + deviceLocalCacheData.setDeviceName(deviceListBean.name); + deviceLocalCacheData.setDeviceId(deviceListBean.deviceId); + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + deviceLocalCacheData.setChannelId(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + deviceLocalCacheData.setChannelName(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + } + deviceLocalCacheService.addLocalCache(deviceLocalCacheData); + } + + /** + * 开始录像 + */ + public boolean startRecord() { + // 录像的路径 + + String channelName = null; + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + channelName = deviceListBean.channels.get(deviceListBean.checkedChannel).channelName; + } else { + channelName = deviceListBean.name; + } + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + videoPath = MediaPlayHelper.getCaptureAndVideoPath(MediaPlayHelper.DHFilesType.DHVideo, channelName); + LogUtil.debugLog(TAG, "videopath:::----start" + videoPath); + //MediaScannerConnection.scanFile(this, new String[]{videoPath}, null, null); + // 开始录制 1 + int ret = mPlayWin.startRecord(videoPath, 1, 0x7FFFFFFF); + return ret == 0; + } + + /** + * 关闭录像 + */ + public boolean stopRecord() { + return mPlayWin.stopRecord() == 0; + } + + /** + * 截图 + */ + public String capture(boolean notify) { + String captureFilePath = null; + String channelName = null; + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + channelName = deviceListBean.channels.get(deviceListBean.checkedChannel).channelName; + } else { + channelName = deviceListBean.name; + } + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + captureFilePath = MediaPlayHelper.getCaptureAndVideoPath(notify ? MediaPlayHelper.DHFilesType.DHImage : MediaPlayHelper.DHFilesType.DHImageCache, channelName); + int ret = mPlayWin.snapShot(captureFilePath); + if (ret == 0) { + if (notify) { + // 扫描到相册中 + MediaPlayHelper.updatePhotoAlbum(captureFilePath); + // MediaScannerConnection.scanFile(this, new String[]{captureFilePath}, null, null); + } + } else { + captureFilePath = null; + } + return captureFilePath; + } + + /** + * 打开声音 + */ + public boolean openAudio() { + return mPlayWin.playAudio() == 0; + } + + /** + * 关闭声音 + */ + public boolean closeAudio() { + return mPlayWin.stopAudio() == 0; + } + + /** + * 开始对讲 多通道通道号参数传入对应的通道号,单通道传-1 + */ + public void startTalk() { + closeAudio(); + soundStatus = SoundStatus.STOP; + speakStatus = SpeakStatus.OPENING; + ivSound.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off_disable)); + llSound.setClickable(false);//声音按钮不允许点击 + LCOpenSDK_Talk.setListener(audioTalkerListener);//对讲前先设备监听 + int channelId = -1; + + if (Integer.parseInt(deviceListBean.channelNum) > 1) { + /* if(null != deviceListBean.channels.get(deviceListBean.checkedChannel).channelId && !"".equals(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId)) { + channelId = Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + } else { + stopTalk(); + Logger.e(TAG, "server returned NVR device channelId is null or empty charators"); + return; + }*/ + channelId = Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId); + Logger.d(TAG, "deviceCatalog = " + deviceListBean.catalog + ", routing device talk..."); + } + Logger.d(TAG, "playTalk, channelId = " + channelId); + LCOpenSDK_ParamTalk paramTalk = new LCOpenSDK_ParamTalk( + SharedpreferencesUtil.get("accessToken", ""), + deviceListBean.deviceId, + channelId, + TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey, + deviceListBean.playToken, + true, "talk" + ); + LCOpenSDK_Talk.playTalk(paramTalk); + } + + /** + * 停止对讲 + */ + public void stopTalk() { + soundStatus = soundStatusPre; + if (SoundStatus.PLAY == soundStatus) { + ivSound.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_on)); + openAudio(); + } else { + ivSound.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off)); + } + speakStatus = SpeakStatus.STOP; + ivSpeak.setImageDrawable(getDrawable(R.mipmap.lc_demo_livepreview_icon_speak)); + ivSpeak1.setImageDrawable(getDrawable(R.mipmap.live_video_icon_h_talk_off)); + + LCOpenSDK_Talk.stopTalk(); + LCOpenSDK_Talk.setListener(null);//停止对讲后对讲监听置为空 + llSound.setClickable(true); + } + + class AudioTalkerListener extends LCOpenSDK_TalkerListener { + public AudioTalkerListener() { + super(); + } + + @Override + public void onTalkResult(String error, int type) { + super.onTalkResult(error, type); + boolean talkResult = false; + if (type == 99 || error.equals("-1000") || error.equals("0") || error.equals("1") || error.equals("3")) { + talkResult = false; + } else if (error.equals("4")) { + talkResult = true; + } + final boolean finalTalkResult = talkResult; + runOnUiThread(new Runnable() { + @Override + public void run() { + if (!finalTalkResult) { + stopTalk(); + // 提示对讲打开失败 + Toast.makeText(DeviceOnlineMediaPlayActivity.this, R.string.lc_demo_device_talk_open_failed, Toast.LENGTH_SHORT).show(); + speakStatus = SpeakStatus.STOP; + ivSpeak.setImageDrawable(getDrawable(R.mipmap.lc_demo_livepreview_icon_speak)); + ivSpeak1.setImageDrawable(getDrawable(R.mipmap.live_video_icon_h_talk_off)); + } else { + // 提示对讲打开成功 + Toast.makeText(DeviceOnlineMediaPlayActivity.this, R.string.lc_demo_device_talk_open_success, Toast.LENGTH_SHORT).show(); + speakStatus = SpeakStatus.PLAY; + ivSpeak.setImageDrawable(getDrawable(R.mipmap.lc_demo_livepreview_icon_speak_ing)); + ivSpeak1.setImageDrawable(getDrawable(R.mipmap.live_video_icon_h_talk_on)); + + } + } + }); + } + + @Override + public void onTalkPlayReady() { + super.onTalkPlayReady(); + } + + @Override + public void onAudioRecord(byte[] bytes, int i, int i1, int i2, int i3) { + super.onAudioRecord(bytes, i, i1, i2, i3); + } + + @Override + public void onAudioReceive(byte[] bytes, int i, int i1, int i2, int i3) { + super.onAudioReceive(bytes, i, i1, i2, i3); + } + + @Override + public void onDataLength(int i) { + super.onDataLength(i); + } + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.ll_back) { + //返回 + finish(); + } else if (id == R.id.ll_fullscreen) { + //横竖屏切换 + if (mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + mCurrentOrientation = Configuration.ORIENTATION_LANDSCAPE; + } else { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + mCurrentOrientation = Configuration.ORIENTATION_PORTRAIT; + } + ivChangeScreen.setImageDrawable(mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ? getResources().getDrawable(R.mipmap.live_btn_smallscreen) : getResources().getDrawable(R.mipmap.video_fullscreen)); + } else if (id == R.id.ll_detail) { + Bundle bundle = new Bundle(); + bundle.putSerializable(MethodConst.ParamConst.deviceDetail, deviceListBean); + Intent intent = new Intent(DeviceOnlineMediaPlayActivity.this, DeviceDetailLCActivity.class); + intent.putExtras(bundle); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + startActivityForResult(intent, 0); + } else if (id == R.id.ll_paly_pause) { + //播放暂停 + if (playStatus == PlayStatus.PLAY) { + stop(); + initAbility(false); + featuresClickListener(false); + llPlayPause.setOnClickListener(this); + } else { + getDeviceLocalCache(); + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_loading), TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey); + } + playStatus = (playStatus == PlayStatus.PLAY) ? PlayStatus.PAUSE : PlayStatus.PLAY; + ivPalyPause.setImageDrawable(playStatus == PlayStatus.PLAY ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_play)); + } else if (id == R.id.ll_play_style) { + if (showHD) { + //视频清晰度切换 + videoMode = (videoMode == VideoMode.MODE_HD) ? VideoMode.MODE_SD : VideoMode.MODE_HD; + ivPlayStyle.setImageDrawable(videoMode == VideoMode.MODE_HD ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_hd) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_sd)); + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_change), TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey); + } else { + int offsetX = llPlayStyle.getWidth() / 3 * 2; + int offsetY = -(lcPopupWindow.getContentView().getMeasuredHeight() + 10); + PopupWindowCompat.showAsDropDown(lcPopupWindow, llPlayStyle, offsetX, offsetY, Gravity.START); + lcPopupWindow.setPixelRecycleListener(new LcPopupWindow.onRecyclerViewItemClickListener() { + @Override + public void onItemClick(RecyclerView parent, View view, int position, String name, int image_size, int streamType) { + tvPixel.setText(name); + lcPopupWindow.dismiss(); + imageSize = image_size; + bateMode = streamType; + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_change), TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey); + } + }); + } + + + } else if (id == R.id.ll_sound) { + //媒体声 如果是开启去关闭,反之 + if (soundStatus == SoundStatus.NO_SUPPORT) { + return; + } + boolean result = false; + if (soundStatus == SoundStatus.PLAY) { + result = closeAudio(); + } else { + result = openAudio(); + } + if (!result) { + return; + } + soundStatus = (soundStatus == SoundStatus.PLAY) ? SoundStatus.STOP : SoundStatus.PLAY; + ivSound.setImageDrawable(soundStatus == SoundStatus.PLAY ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_on) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off)); + } else if (id == R.id.ll_cloudstage || id == R.id.ll_cloudstage1) { + //云台和录像列表切换 + switchCloudRudder(!isShwoRudder); + } else if (id == R.id.ll_screenshot || id == R.id.ll_screenshot1) { + //截图 + if (capture(true) != null) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_capture_success), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_capture_failed), Toast.LENGTH_SHORT).show(); + } + } else if (id == R.id.iv_speak || id == R.id.iv_speak1) { + //对讲 如果是打开状态去关闭,反之 + if (speakStatus == SpeakStatus.NO_SUPPORT || speakStatus == SpeakStatus.OPENING) { + return; + } + if (speakStatus == SpeakStatus.STOP) { + soundStatusPre = soundStatus; + startTalk(); + } else { + Toast.makeText(DeviceOnlineMediaPlayActivity.this, R.string.lc_demo_device_talk_close_success, Toast.LENGTH_SHORT).show(); + stopTalk(); + + } + } else if (id == R.id.ll_video || id == R.id.ll_video1) { + //录像 如果是关闭状态去打开,反之 + if (recordStatus == RecordStatus.STOP) { + if (startRecord()) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_record_begin), Toast.LENGTH_SHORT).show(); + } else { + return; + } + } else { + if (stopRecord()) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_record_stop), Toast.LENGTH_SHORT).show(); + LogUtil.debugLog(TAG, "videopath:::" + videoPath); + MediaPlayHelper.updatePhotoVideo(videoPath); + } else { + return; + } + } + recordStatus = (recordStatus == RecordStatus.START) ? RecordStatus.STOP : RecordStatus.START; + ivVideo.setImageDrawable(recordStatus == RecordStatus.START + ? getDrawable(R.mipmap.lc_demo_livepreview_icon_video_ing) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_video)); + ivVideo1.setImageDrawable(recordStatus == RecordStatus.START + ? getDrawable(R.mipmap.live_video_icon_h_video_on) + : getDrawable(R.mipmap.live_video_icon_h_video_off)); + } else if (id == R.id.tv_cloud_video) { + //切换至云录像 + switchVideoList(true); + } else if (id == R.id.tv_local_video) { + //切换至设备录像 + switchVideoList(false); + } else if (id == R.id.tv_no_video) { + //暂无录像切换 + gotoRecordList(); + } + } + + private void switchCloudRudder(boolean isShow) { + this.isShwoRudder = isShow; + if (isShow) { + ivCloudStage.setImageDrawable(getDrawable(R.mipmap.lc_demo_livepreview_icon_cloudstage_click)); + ivCloudStage1.setImageDrawable(getDrawable(R.mipmap.live_video_icon_h_cloudterrace_on)); + llVideoContent.setVisibility(View.GONE); + rudderView.setVisibility(View.VISIBLE); + } else { + ivCloudStage.setImageDrawable(supportPTZ + ? getDrawable(R.mipmap.lc_demo_livepreview_icon_cloudstage) + : getDrawable(R.mipmap.lc_demo_livepreview_icon_cloudstage_disable)); + ivCloudStage1.setImageDrawable(supportPTZ + ? getDrawable(R.mipmap.live_video_icon_h_cloudterrace_off) + : getDrawable(R.mipmap.live_video_icon_h_cloudterrace_off_disable)); + llVideoContent.setVisibility(mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ? View.VISIBLE : View.GONE); + rudderView.setVisibility(View.GONE); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mPlayWin.uninitPlayWindow();// 销毁底层资源 + uninitOrientationEventListener(); + EventBus.getDefault().unregister(this); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK && data != null) { + boolean unBind = data.getBooleanExtra(DeviceConstant.IntentKey.DHDEVICE_UNBIND, false); + if (unBind) { + finish(); + } + } + if (resultCode == 100 && data != null) { + String name = data.getStringExtra(DeviceConstant.IntentKey.DHDEVICE_NEW_NAME); + tvDeviceName.setText(name); + deviceListBean.channels.get(deviceListBean.checkedChannel).channelName = name; + } + } + + + public static final int NO_ORIENTATION_REQUEST = -1; + + public static final int MSG_REQUEST_ORIENTATION = 1; + + + private void initOrientationEventListener() { + + mOrientationEventListener = new MediaPlayOrientationEventListener(this, + SensorManager.SENSOR_DELAY_NORMAL, mHandler); + + if (mOrientationEventListener.canDetectOrientation()) { + mOrientationEventListener.enable(); + } else { + mOrientationEventListener.disable(); + } + } + + + private void uninitOrientationEventListener() { + if (mOrientationEventListener != null) { + mOrientationEventListener.disable(); + mOrientationEventListener = null; + } + } + + + static class MediaPlayOrientationEventListener extends OrientationEventListener { + + private WeakReference mWRHandler; + + private int mOrientationEventListenerLastOrientationRequest = NO_ORIENTATION_REQUEST; + + public MediaPlayOrientationEventListener(Context context, int rate, Handler handler) { + super(context, rate); + mWRHandler = new WeakReference(handler); + } + + @Override + public void onOrientationChanged(int orientation) { + + int requestedOrientation = createOrientationRequest(orientation); + if (requestedOrientation != NO_ORIENTATION_REQUEST + && mOrientationEventListenerLastOrientationRequest != requestedOrientation) { + + Handler handler = mWRHandler.get(); + + if (handler != null) { + handler.removeMessages(MSG_REQUEST_ORIENTATION); + Message msg = handler.obtainMessage(MSG_REQUEST_ORIENTATION); + msg.arg1 = requestedOrientation; + handler.sendMessageDelayed(msg, 200); + mOrientationEventListenerLastOrientationRequest = requestedOrientation; + } + } + } + + private int createOrientationRequest(int rotation) { + int requestedOrientation = NO_ORIENTATION_REQUEST; + + if (rotation == -1) { + + } else if (rotation < 10 || rotation > 350) {// 手机顶部向上 + + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; + + } else if (rotation < 100 && rotation > 80) {// 手机左边向上 + + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; + + } else if (rotation < 190 && rotation > 170) {// 手机底边向上 + + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; + + } else if (rotation < 280 && rotation > 260) {// 手机右边向上 + + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; + } + + return requestedOrientation; + } + + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceRecordListActivity.java b/app/src/main/java/com/lechange/demo/ui/DeviceRecordListActivity.java new file mode 100644 index 0000000..0f5ea51 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceRecordListActivity.java @@ -0,0 +1,110 @@ +package com.lechange.demo.ui; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.common.openapi.MethodConst; +import com.yonsz.z1.R; + +public class DeviceRecordListActivity extends AppCompatActivity implements View.OnClickListener { + + private static final String TAG = DeviceRecordListActivity.class.getSimpleName(); + private TextView tvCloudRecord; + private TextView tvLocalRecord; + private Bundle bundle; + private DeviceCloudRecordListFragment deviceCloudRecordListFragment = DeviceCloudRecordListFragment.newInstance(); + private DeviceLocalRecordListFragment deviceLocalRecordListFragment = DeviceLocalRecordListFragment.newInstance(); + private FragmentManager supportFragmentManager; + private Fragment currentFragment; + public LinearLayout llEdit; + public LinearLayout llAll; + public LinearLayout llBack; + public TextView tvEdit; + private int recordType; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_record_list); + supportFragmentManager = getSupportFragmentManager(); + initView(); + initData(); + } + + private void initData() { + bundle = getIntent().getExtras(); + recordType = bundle.getInt(MethodConst.ParamConst.recordType); + if (recordType == MethodConst.ParamConst.recordTypeCloud ? showFragment(deviceCloudRecordListFragment) : showFragment(deviceLocalRecordListFragment)) { + tvCloudRecord.setSelected(recordType == MethodConst.ParamConst.recordTypeCloud); + tvLocalRecord.setSelected(recordType == MethodConst.ParamConst.recordTypeLocal); + } + } + + private void initView() { + findViewById(R.id.ll_back).setOnClickListener(this); + llBack = findViewById(R.id.ll_back); + llEdit = findViewById(R.id.ll_edit); + llAll = findViewById(R.id.ll_all); + tvEdit = findViewById(R.id.tv_edit); + tvCloudRecord = findViewById(R.id.tv_cloud_record); + tvLocalRecord = findViewById(R.id.tv_local_record); + tvCloudRecord.setOnClickListener(this); + tvLocalRecord.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.ll_back) { + finish(); + } else if (id == R.id.tv_cloud_record) { + if (showFragment(deviceCloudRecordListFragment)) { + tvCloudRecord.setSelected(true); + tvLocalRecord.setSelected(false); + } + } else if (id == R.id.tv_local_record) { + if (showFragment(deviceLocalRecordListFragment)) { + tvCloudRecord.setSelected(false); + tvLocalRecord.setSelected(true); + } + } + } + + private boolean showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = supportFragmentManager.beginTransaction(); + if (currentFragment != null) { + transaction.hide(currentFragment); + } + currentFragment = fragment; + fragment.setArguments(bundle); + if (!fragment.isAdded()) { + transaction.add(R.id.fr_content, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + return true; + } + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK && data != null) { + boolean delete = data.getBooleanExtra("data", false); + if (delete && deviceCloudRecordListFragment != null) { + deviceCloudRecordListFragment.deleteCloudRecord(); + } + } + } +} diff --git a/app/src/main/java/com/lechange/demo/ui/DeviceRecordPlayActivity.java b/app/src/main/java/com/lechange/demo/ui/DeviceRecordPlayActivity.java new file mode 100644 index 0000000..54357a8 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/ui/DeviceRecordPlayActivity.java @@ -0,0 +1,1000 @@ +package com.lechange.demo.ui; + +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.drawable.Drawable; +import android.media.MediaScannerConnection; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.common.openapi.ClassInstanceManager; +import com.common.openapi.DeviceRecordService; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.MethodConst; +import com.common.openapi.entity.DeleteCloudRecordsData; +import com.common.openapi.entity.DeviceDetailListData; +import com.common.openapi.entity.RecordsData; +import com.lechange.demo.dialog.EncryptKeyInputDialog; +import com.lechange.demo.tools.DateHelper; +import com.lechange.demo.tools.DialogUtils; +import com.lechange.demo.tools.MediaPlayHelper; +import com.lechange.demo.view.LcProgressBar; +import com.lechange.demo.view.RecoderSeekBar; +import com.lechange.opensdk.listener.LCOpenSDK_DownloadListener; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.media.LCOpenSDK_Download; +import com.lechange.opensdk.media.LCOpenSDK_ParamCloudRecord; +import com.lechange.opensdk.media.LCOpenSDK_ParamDeviceRecord; +import com.lechange.opensdk.media.LCOpenSDK_PlayWindow; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.mm.android.deviceaddmodule.mobilecommon.dialog.LCAlertDialog; +import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; +import com.yonsz.z1.R; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +public class DeviceRecordPlayActivity extends AppCompatActivity implements View.OnClickListener, IGetDeviceInfoCallBack.IDeviceDeleteRecordCallBack { + private static final String TAG = DeviceRecordPlayActivity.class.getSimpleName(); + private FrameLayout frLiveWindow, frLiveWindowContent; + private TextView tvDeviceName, tvLoadingMsg, recordStartTime, recordEndTime; + private LinearLayout llFullScreen, llSound, llPlayStyle, llPlayPause, llDelete, llBack, llScreenshot, llVideo; + private ImageView ivPalyPause, ivPlayStyle, ivSound, ivScreenShot, ivVideo; + private ProgressBar pbLoading; + private RelativeLayout rlLoading; + private LcProgressBar pgDownload; + private DeviceDetailListData.ResponseData.DeviceListBean deviceListBean; + private Bundle bundle; + private LCOpenSDK_PlayWindow mPlayWin = new LCOpenSDK_PlayWindow(); + private RecordsData recordsData; + //1 云录像 2 设备录像 + private int recordType; + private RecoderSeekBar recordSeekbar; + private int progress; + private String beginTime; + + private SoundStatus soundStatus = SoundStatus.PLAY; + private PlayStatus playStatus = PlayStatus.PAUSE; + private RecordStatus recordStatus = RecordStatus.STOP; + private DownloadStatus downloadStatus = DownloadStatus.UNBEGIN; + //倍速位置 + private int speedPosition = 0; + //倍速数组 + private int[] speed = {1, 4, 8, 16}; + //倍速图片 + private Drawable[] speedImage = new Drawable[4]; + private DeviceRecordService deviceRecordService = ClassInstanceManager.newInstance().getDeviceRecordService(); + private String totalMb; + private ImageView ivChangeScreen; + private LinearLayout llOperate; + private RelativeLayout rlTitle; + private EncryptKeyInputDialog encryptKeyInputDialog; + private String encryptKey; + private String path; + private LCAlertDialog mLCAlertDialog; + private int passcode; + + public enum LoadStatus { + LOADING, LOAD_SUCCESS, LOAD_ERROR + } + + public enum SoundStatus { + PLAY, STOP, NO_SUPPORT + } + + public enum PlayStatus { + PLAY, PAUSE, ERROR, STOP + } + + public enum RecordStatus { + START, STOP + } + + public enum DownloadStatus { + UNBEGIN, ING, FINISH, ERROR + } + + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mCurrentOrientation = getResources().getConfiguration().orientation; + setContentView(R.layout.activity_device_record_play); + initView(); + initData(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT) { + LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(frLiveWindow.getLayoutParams()); + DisplayMetrics metric = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + frLiveWindow.setLayoutParams(mLayoutParams); + MediaPlayHelper.quitFullScreen(DeviceRecordPlayActivity.this); + llOperate.setVisibility(View.VISIBLE); + if (recordType == MethodConst.ParamConst.recordTypeLocal) { + pgDownload.setVisibility(View.GONE); + } else { + pgDownload.setVisibility(View.VISIBLE); + } + rlTitle.setVisibility(View.VISIBLE); + } else if (mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE) { + DisplayMetrics metric = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metric); + LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(metric.widthPixels, metric.heightPixels); + mLayoutParams.setMargins(0, 0, 0, 0); + frLiveWindow.setLayoutParams(mLayoutParams); + MediaPlayHelper.setFullScreen(DeviceRecordPlayActivity.this); + llOperate.setVisibility(View.GONE); + pgDownload.setVisibility(View.GONE); + rlTitle.setVisibility(View.GONE); + } + } + + private void initData() { + speedImage[0] = getResources().getDrawable(R.mipmap.play_module_video_1x); + speedImage[1] = getResources().getDrawable(R.mipmap.play_module_video_4x); + speedImage[2] = getResources().getDrawable(R.mipmap.play_module_video_8x); + speedImage[3] = getResources().getDrawable(R.mipmap.play_module_video_16x); + bundle = getIntent().getExtras(); + if (bundle == null) { + return; + } + deviceListBean = (DeviceDetailListData.ResponseData.DeviceListBean) bundle.getSerializable(MethodConst.ParamConst.deviceDetail); + recordsData = (RecordsData) bundle.getSerializable(MethodConst.ParamConst.recordData); + recordType = bundle.getInt(MethodConst.ParamConst.recordType); + tvDeviceName.setText(deviceListBean.channels.get(deviceListBean.checkedChannel).channelName); + if (recordType == MethodConst.ParamConst.recordTypeLocal) { + llDelete.setVisibility(View.GONE); + pgDownload.setVisibility(View.GONE); + totalMb = byte2mb(Long.parseLong(recordsData.fileLength + "")); + } else { + totalMb = byte2mb(Long.parseLong(recordsData.size)); + } + //初始化时间 + initSeekBarAndTime(); + //初始化控件 + initCommonClickListener(); + //播放视频 + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_loading), deviceListBean.deviceId); + } + + @Override + protected void onPause() { + super.onPause(); + pauseAsync(); + playStatus = PlayStatus.PAUSE; + ivPalyPause.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_play)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + stop(); + mPlayWin.uninitPlayWindow();// 销毁底层资源 + } + + private void playVideo(String psk) { + if (recordType == MethodConst.ParamConst.recordTypeCloud) { + //云录像 + LCOpenSDK_ParamCloudRecord paramCloudRecord = new LCOpenSDK_ParamCloudRecord( + LCDeviceEngine.newInstance().accessToken, + deviceListBean.deviceId, + Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId), + psk, + deviceListBean.playToken, + recordsData.recordRegionId, + 1000, + 0, + 24 * 3600 + ); + + mPlayWin.playCloud(paramCloudRecord); + } else if (recordType == MethodConst.ParamConst.recordTypeLocal) { + //设备录像 + LCOpenSDK_ParamDeviceRecord paramDeviceRecord = new LCOpenSDK_ParamDeviceRecord( + LCDeviceEngine.newInstance().accessToken, + deviceListBean.deviceId, + Integer.parseInt(deviceListBean.channels.get(deviceListBean.checkedChannel).channelId), + psk, + deviceListBean.playToken, + recordsData.recordId, + DateHelper.parseMills(recordsData.beginTime), + DateHelper.parseMills(recordsData.endTime), + 0, + 0, + true + ); + + mPlayWin.playRtspPlayback(paramDeviceRecord); + } + } + + private void stop() { + stopPlayWindow(); + //禁止拖动 + setCanSeekChanged(false); + } + + /** + * 单独关闭播放 注意:组件要求必须要主线程调用 + */ + private void stopPlayWindow() { + closeAudio();// 关闭音频 + if (recordType == MethodConst.ParamConst.recordTypeCloud) { + mPlayWin.stopCloud(true); + } else { + mPlayWin.stopRtspPlayback(true);// 关闭视频 + } + } + + /** + * 设置拖动进度条是否能使用 + */ + public void setCanSeekChanged(boolean canSeek) { + recordSeekbar.setCanTouchAble(canSeek); + } + + /** + * 开始录像 + */ + public boolean startRecord() { + // 录像的路径 + String videoPath = null; + String channelName = null; + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + channelName = deviceListBean.channels.get(deviceListBean.checkedChannel).channelName; + } else { + channelName = deviceListBean.name; + } + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + videoPath = MediaPlayHelper.getCaptureAndVideoPath(MediaPlayHelper.DHFilesType.DHVideo, channelName); + MediaScannerConnection.scanFile(this, new String[]{videoPath}, null, null); + // 开始录制 1 + int ret = mPlayWin.startRecord(videoPath, 1, 0x7FFFFFFF); + return ret == 0; + } + + /** + * 关闭录像 + */ + public boolean stopRecord() { + return mPlayWin.stopRecord() == 0; + } + + /** + * 截图 + */ + public String capture() { + String captureFilePath = null; + String channelName = null; + if (deviceListBean.channels != null && deviceListBean.channels.size() > 0) { + channelName = deviceListBean.channels.get(deviceListBean.checkedChannel).channelName; + } else { + channelName = deviceListBean.name; + } + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + captureFilePath = MediaPlayHelper.getCaptureAndVideoPath(MediaPlayHelper.DHFilesType.DHImage, channelName); + int ret = mPlayWin.snapShot(captureFilePath); + if (ret == 0) { + // 扫描到相册中 + MediaScannerConnection.scanFile(this, new String[]{captureFilePath}, null, null); + } else { + captureFilePath = null; + } + return captureFilePath; + } + + private void initView() { + frLiveWindow = findViewById(R.id.fr_live_window); + frLiveWindowContent = findViewById(R.id.fr_live_window_content); + llBack = findViewById(R.id.ll_back); + tvDeviceName = findViewById(R.id.tv_device_name); + llDelete = findViewById(R.id.ll_delete); + llPlayPause = findViewById(R.id.ll_paly_pause); + llPlayStyle = findViewById(R.id.ll_play_style); + llSound = findViewById(R.id.ll_sound); + llFullScreen = findViewById(R.id.ll_fullscreen); + ivPalyPause = findViewById(R.id.iv_paly_pause); + ivPlayStyle = findViewById(R.id.iv_play_style); + ivSound = findViewById(R.id.iv_sound); + rlLoading = findViewById(R.id.rl_loading); + pbLoading = findViewById(R.id.pb_loading); + tvLoadingMsg = findViewById(R.id.tv_loading_msg); + recordStartTime = findViewById(R.id.record_startTime); + recordSeekbar = findViewById(R.id.record_seekbar); + recordEndTime = findViewById(R.id.record_endTime); + llScreenshot = findViewById(R.id.ll_screenshot); + llVideo = findViewById(R.id.ll_video); + ivScreenShot = findViewById(R.id.iv_screen_shot); + ivVideo = findViewById(R.id.iv_video); + pgDownload = findViewById(R.id.pg_download); + ivChangeScreen = findViewById(R.id.iv_change_screen); + llOperate = findViewById(R.id.ll_operate); + rlTitle = findViewById(R.id.rl_title); + pgDownload.setText(getResources().getString(R.string.lc_demo_device_record_download)); + // 初始化播放窗口 + LinearLayout.LayoutParams mLayoutParams = (LinearLayout.LayoutParams) frLiveWindow + .getLayoutParams(); + DisplayMetrics metric = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + frLiveWindow.setLayoutParams(mLayoutParams); + mPlayWin.initPlayWindow(this, frLiveWindowContent, 0, false); + setWindowListener(mPlayWin); + mPlayWin.openTouchListener();//开启收拾监听 + } + + private void initCommonClickListener() { + llBack.setOnClickListener(this); + llFullScreen.setOnClickListener(this); + if (recordType == MethodConst.ParamConst.recordTypeCloud) { + llDelete.setOnClickListener(this); + pgDownload.setOnClickListener(this); + LCOpenSDK_Download.setListener(new CloudDownloadListener()); + } + } + + private void featuresClickListener(boolean loadSuccess) { + llPlayStyle.setOnClickListener(loadSuccess ? this : null); + llPlayPause.setOnClickListener(loadSuccess ? this : null); + llSound.setOnClickListener(loadSuccess ? this : null); + ivScreenShot.setOnClickListener(loadSuccess ? this : null); + ivVideo.setOnClickListener(loadSuccess ? this : null); + ivPalyPause.setImageDrawable(loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause_disable)); + ivSound.setImageDrawable(loadSuccess ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off_disable)); + ivScreenShot.setImageDrawable(loadSuccess ? getDrawable(R.drawable.lc_demo_photo_capture_selector) : getDrawable(R.mipmap.lc_demo_livepreview_icon_screenshot_disable)); + ivVideo.setImageDrawable(loadSuccess ? getDrawable(R.mipmap.lc_demo_livepreview_icon_video) : getDrawable(R.mipmap.lc_demo_livepreview_icon_video_disable)); + //媒体声 + if (soundStatus != SoundStatus.PLAY) { + return; + } + if (openAudio()) { + soundStatus = SoundStatus.PLAY; + ivSound.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_on)); + } + } + + private void initSeekBarAndTime() { + String startTime = recordsData.beginTime.substring(11); + String endTime = recordsData.endTime.substring(11); + recordSeekbar.setMax((int) ((DateHelper.parseMills(recordsData.endTime) - DateHelper.parseMills(recordsData.beginTime)) / 1000)); + recordSeekbar.setProgress(0); + recordStartTime.setText(startTime); + recordEndTime.setText(endTime); + } + + + private void setSeekBarListener() { + recordSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + if (recordSeekbar.getMax() - DeviceRecordPlayActivity.this.progress <= 2) { + seek(recordSeekbar.getMax() >= 2 ? recordSeekbar.getMax() - 2 : 0); + } else { + seek(DeviceRecordPlayActivity.this.progress); + } + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) { + if (byUser) { + DeviceRecordPlayActivity.this.progress = progress; + } + } + }); + } + + /** + * 继续播放(异步) + */ + public void resumeAsync() { + mPlayWin.resumeAsync(); + } + + /** + * 暂停播放(异步) + */ + public void pauseAsync() { + mPlayWin.pauseAsync(); + } + + public boolean openAudio() { + return mPlayWin.playAudio() == 0; + } + + public boolean closeAudio() { + return mPlayWin.stopAudio() == 0; + } + + public void seek(int index) { + long seekTime = DateHelper.parseMills(recordsData.beginTime) / 1000 + index; + //先暂存时间记录 + beginTime = DateHelper.getTimeHMS(seekTime * 1000); + this.progress = index; + recordSeekbar.setProgress(index); + recordStartTime.setText(this.beginTime); + mPlayWin.seek(index); + } + + private int mCurrentOrientation; + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.ll_back) { + if (downloadStatus == DownloadStatus.ING) { + LCAlertDialog.Builder builder = new LCAlertDialog.Builder(this); + builder.setTitle(R.string.lc_demo_device_delete_exit); + builder.setMessage(R.string.lc_demo_device_delete_exit_tip); + builder.setCancelButton(com.mm.android.deviceaddmodule.R.string.common_cancel, null); + builder.setConfirmButton(com.mm.android.deviceaddmodule.R.string.common_confirm, + new LCAlertDialog.OnClickListener() { + @Override + public void onClick(LCAlertDialog dialog, int which, boolean isChecked) { + stopDownLoad(); + finish(); + } + }); + mLCAlertDialog = builder.create(); + mLCAlertDialog.show(getSupportFragmentManager(), "exit"); + return; + } + finish(); + } else if (id == R.id.ll_fullscreen) { + //横竖屏切换 + if (mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + mCurrentOrientation = Configuration.ORIENTATION_LANDSCAPE; + } else { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + mCurrentOrientation = Configuration.ORIENTATION_PORTRAIT; + } + ivChangeScreen.setImageDrawable(mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ? getResources().getDrawable(R.mipmap.live_btn_smallscreen) : getResources().getDrawable(R.mipmap.video_fullscreen)); + } else if (id == R.id.pg_download) { + //下载 + if (downloadStatus == DownloadStatus.ING || downloadStatus == DownloadStatus.FINISH) { + return; + } + pgDownloadProgress( + getResources().getString(R.string.lc_demo_device_record_download_begin), + 0, + 100, + getResources().getColor(R.color.lc_demo_color_ffffff)); + downloadStatus = DownloadStatus.ING; + startDownload(); + } else if (id == R.id.ll_play_style) { + if (speedPosition == 3) { + speedPosition = 0; + } else { + speedPosition = speedPosition + 1; + } + ivPlayStyle.setImageDrawable(speedImage[speedPosition]); + mPlayWin.setPlaySpeed(speed[speedPosition]); + } else if (id == R.id.ll_delete) { + LCAlertDialog.Builder builder = new LCAlertDialog.Builder(this); + builder.setTitle(R.string.lc_demo_device_delete_sure); + builder.setMessage(""); + builder.setCancelButton(com.mm.android.deviceaddmodule.R.string.common_cancel, null); + builder.setConfirmButton(com.mm.android.deviceaddmodule.R.string.common_confirm, + new LCAlertDialog.OnClickListener() { + @Override + public void onClick(LCAlertDialog dialog, int which, boolean isChecked) { + //删除 + DialogUtils.show(DeviceRecordPlayActivity.this); + DeleteCloudRecordsData deleteCloudRecordsData = new DeleteCloudRecordsData(); + List recordRegionIds = new ArrayList<>(); + recordRegionIds.add(recordsData.recordRegionId); + deleteCloudRecordsData.data.recordRegionIds = recordRegionIds; + deviceRecordService.deleteCloudRecords(deleteCloudRecordsData, DeviceRecordPlayActivity.this); + } + }); + mLCAlertDialog = builder.create(); + mLCAlertDialog.show(getSupportFragmentManager(), "delete"); + } else if (id == R.id.ll_paly_pause) { + //播放暂停 重新播放 + if (playStatus == PlayStatus.PLAY) { + pauseAsync(); + featuresClickListener(false); + llPlayPause.setOnClickListener(this); + playStatus = (playStatus == PlayStatus.PLAY) ? PlayStatus.PAUSE : PlayStatus.PLAY; + ivPalyPause.setImageDrawable(playStatus == PlayStatus.PLAY ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_play)); + } else if (playStatus == PlayStatus.PAUSE) { + resumeAsync(); + featuresClickListener(true); + llPlayPause.setOnClickListener(this); + playStatus = (playStatus == PlayStatus.PLAY) ? PlayStatus.PAUSE : PlayStatus.PLAY; + ivPalyPause.setImageDrawable(playStatus == PlayStatus.PLAY ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_pause) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_play)); + } else { + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_change), TextUtils.isEmpty(encryptKey) ? deviceListBean.deviceId : encryptKey); + } + } else if (id == R.id.ll_sound) { + //媒体声 如果是开启去关闭,反之 + if (soundStatus == SoundStatus.NO_SUPPORT) { + return; + } + boolean result = false; + if (soundStatus == SoundStatus.PLAY) { + result = closeAudio(); + } else { + result = openAudio(); + } + if (!result) { + return; + } + soundStatus = (soundStatus == SoundStatus.PLAY) ? SoundStatus.STOP : SoundStatus.PLAY; + ivSound.setImageDrawable(soundStatus == SoundStatus.PLAY ? getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_on) : getDrawable(R.mipmap.lc_demo_live_video_icon_h_sound_off)); + } else if (id == R.id.iv_screen_shot) { + //截图 + if (capture() != null) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_capture_success), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_capture_failed), Toast.LENGTH_SHORT).show(); + } + } else if (id == R.id.iv_video) { + if (playStatus != PlayStatus.PLAY) { + return; + } + //录像 如果是关闭状态去打开,反之 + if (recordStatus == RecordStatus.STOP) { + if (startRecord()) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_record_begin), Toast.LENGTH_SHORT).show(); + } else { + return; + } + } else { + if (stopRecord()) { + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_record_stop), Toast.LENGTH_SHORT).show(); + } else { + return; + } + } + recordStatus = (recordStatus == RecordStatus.START) ? RecordStatus.STOP : RecordStatus.START; + ivVideo.setImageDrawable(recordStatus == RecordStatus.START ? getDrawable(R.mipmap.lc_demo_livepreview_icon_video_ing) : getDrawable(R.mipmap.lc_demo_livepreview_icon_video)); + } + } + + private void setWindowListener(LCOpenSDK_PlayWindow playWin) { + playWin.setWindowListener(new LCOpenSDK_EventListener() { + //手势缩放开始事件 + @Override + public void onZoomBegin(int index) { + super.onZoomBegin(index); + LogUtil.debugLog(TAG, "onZoomBegin: index= " + index); + } + + //手势缩放中事件 + @Override + public void onZooming(int index, float dScale) { + super.onZooming(index, dScale); + LogUtil.debugLog(TAG, "onZooming: index= " + index + " , dScale= " + dScale); + mPlayWin.doScale(dScale); + } + + //缩放结束事件 + @Override + public void onZoomEnd(int index, ZoomType zoomType) { + super.onZoomEnd(index, zoomType); + LogUtil.debugLog(TAG, "onZoomEnd: index= " + index + " , zoomType= " + zoomType); + } + + //窗口单击事件 + @Override + public void onControlClick(int index, float dx, float dy) { + super.onControlClick(index, dx, dy); + LogUtil.debugLog(TAG, "onControlClick: index= " + index + " , dx= " + dx + " , dy= " + dy); + } + + //窗口双击事件 + @Override + public void onWindowDBClick(int index, float dx, float dy) { + super.onWindowDBClick(index, dx, dy); + LogUtil.debugLog(TAG, "onWindowDBClick: index= " + index + " , dx= " + dx + " , dy= " + dy); + } + + //滑动开始事件 + @Override + public boolean onSlipBegin(int index, Direction direction, float dx, float dy) { + LogUtil.debugLog(TAG, "onSlipBegin: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + return super.onSlipBegin(index, direction, dx, dy); + } + + //滑动中事件 + @Override + public void onSlipping(int index, Direction direction, float prex, float prey, float dx, float dy) { + super.onSlipping(index, direction, prex, prey, dx, dy); + LogUtil.debugLog(TAG, "onSlipping: index= " + index + " , direction= " + direction + " , prex= " + prex + " , prey= " + prey + " , dx= " + dx + " , dy= " + dy); + } + + //滑动结束事件 + @Override + public void onSlipEnd(int index, Direction direction, float dx, float dy) { + super.onSlipEnd(index, direction, dx, dy); + LogUtil.debugLog(TAG, "onSlipEnd: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + } + + //长按开始回调 + @Override + public void onWindowLongPressBegin(int index, Direction direction, float dx, float dy) { + super.onWindowLongPressBegin(index, direction, dx, dy); + LogUtil.debugLog(TAG, "onWindowLongPressBegin: index= " + index + " , direction= " + direction + " , dx= " + dx + " , dy= " + dy); + } + + //长按事件结束 + @Override + public void onWindowLongPressEnd(int index) { + super.onWindowLongPressEnd(index); + LogUtil.debugLog(TAG, "onWindowLongPressEnd: index= " + index); + } + + /** + * 播放事件回调 + * resultSource: 0--RTSP 1--HLS 5--DHHTTP 99--OPENAPI + */ + @Override + public void onPlayerResult(int index, String code, int resultSource) { + super.onPlayerResult(index, code, resultSource); + LogUtil.debugLog(TAG, "onPlayerResult: index= " + index + " , code= " + code + " , resultSource= " + resultSource); + boolean failed = false; + + if (resultSource == 99) { + //code -1000 HTTP交互出错或超时 + failed = true; + } else if (resultSource == 1) { + //云录像 + if (code.equals("0") || code.equals("4") || code.equals("7") || code.equals("11") || code.equals("14")) { + failed = true; + } + if (code.equals("11")) { + showInputKey(); + } + if (code.equals("14")) { + passcode = 1; + showInputKey(); + } + } else if (resultSource == 0) { + //设备录像 + if (code.equals("0") || code.equals("1") || code.equals("3") || code.equals("7")) { + failed = true; + } + if (code.equals("7")) { + showInputKey(); + } + } else if (resultSource == 5) { + //设备录像 + if (!(code.equals("1000") || code.equals("0") || code.equals("2000") || code.equals("4000"))) { + failed = true; + } + if (code.equals("1000005")) { + showInputKey(); + } + } + if (failed) { + loadingStatus(LoadStatus.LOAD_ERROR, getResources().getString(R.string.lc_demo_device_video_play_error) + ":" + code + "." + resultSource, ""); + } + } + + //分辨率改变事件 + @Override + public void onResolutionChanged(int index, int width, int height) { + super.onResolutionChanged(index, width, height); + LogUtil.debugLog(TAG, "onResolutionChanged: index= " + index + " , width= " + width + " , height= " + height); + } + + //播放开始回调 + @Override + public void onPlayBegan(int index) { + super.onPlayBegan(index); + LogUtil.debugLog(TAG, "onPlayBegan: index= " + index); + loadingStatus(LoadStatus.LOAD_SUCCESS, "", ""); + } + + //接收数据回调 + @Override + public void onReceiveData(int index, int len) { + super.onReceiveData(index, len); + // LogUtil.debugLog(TAG, "onReceiveData: index= " + index + " , len= " + len); + } + + //接收帧流回调 + @Override + public void onStreamCallback(int index, byte[] bytes, int len) { + super.onStreamCallback(index, bytes, len); + LogUtil.debugLog(TAG, "onStreamCallback: index= " + index + " , len= " + len); + } + + //播放结束事件 + @Override + public void onPlayFinished(int index) { + super.onPlayFinished(index); + LogUtil.debugLog(TAG, "onPlayFinished: index= " + index); + runOnUiThread(new Runnable() { + @Override + public void run() { + stop(); + playStatus = PlayStatus.STOP; + featuresClickListener(false); + speedPosition = 0; + ivPlayStyle.setImageDrawable(speedImage[0]); + llPlayPause.setOnClickListener(DeviceRecordPlayActivity.this); + ivPalyPause.setImageDrawable(getDrawable(R.mipmap.lc_demo_live_video_icon_h_play)); + } + }); + } + + //播放时间信息回调 + @Override + public void onPlayerTime(int index, final long current) { + super.onPlayerTime(index, current); + LogUtil.debugLog(TAG, "onPlayerTime: index= " + index + " , time= " + current); + + long startTime = DateHelper.parseMills(recordsData.beginTime) / 1000; + DeviceRecordPlayActivity.this.progress = (int) (current - startTime); + LogUtil.debugLog(TAG, "onPlayerTime: progress= " + DeviceRecordPlayActivity.this.progress); + runOnUiThread(new Runnable() { + @Override + public void run() { + recordSeekbar.setProgress(DeviceRecordPlayActivity.this.progress); + DeviceRecordPlayActivity.this.beginTime = DateHelper.getTimeHMS(current * 1000); + recordStartTime.setText(DeviceRecordPlayActivity.this.beginTime); + } + }); + + } + + + }); + } + + private void showInputKey() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (encryptKeyInputDialog == null) { + encryptKeyInputDialog = new EncryptKeyInputDialog(DeviceRecordPlayActivity.this); + } + encryptKeyInputDialog.show(); + if (1 == passcode) { + encryptKeyInputDialog.setText(getText(R.string.lc_demo_device_encrypt_device_password_tip).toString()); + } else { + encryptKeyInputDialog.setText(getText(R.string.lc_demo_device_encrypt_key_tip).toString()); + } + encryptKeyInputDialog.setOnClick(new EncryptKeyInputDialog.OnClick() { + @Override + public void onSure(String txt) { + encryptKey = txt; + loadingStatus(LoadStatus.LOADING, getResources().getString(R.string.lc_demo_device_video_play_change), txt); + } + }); + } + }); + } + + private void showInputKeyEx() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (encryptKeyInputDialog == null) { + encryptKeyInputDialog = new EncryptKeyInputDialog(DeviceRecordPlayActivity.this); + } + encryptKeyInputDialog.show(); + if (1 == passcode) { + encryptKeyInputDialog.setText(getText(R.string.lc_demo_device_encrypt_device_password_tip).toString()); + } else { + encryptKeyInputDialog.setText(getText(R.string.lc_demo_device_encrypt_key_tip).toString()); + } + encryptKeyInputDialog.setOnClick(new EncryptKeyInputDialog.OnClick() { + @Override + public void onSure(String txt) { + encryptKey = txt; + path = MediaPlayHelper.getDownloadVideoPath(0, recordsData.recordId, DateHelper.parseMills(recordsData.beginTime)); + LCOpenSDK_Download.startDownload(0, + path, + LCDeviceEngine.newInstance().accessToken, + recordsData.recordRegionId, + recordsData.deviceId, + String.valueOf(0), + txt, + 1000, + 5000); + } + }); + } + }); + } + + /** + * 播放状态 + * + * @param loadStatus 播放状态 + * @param msg + */ + private void loadingStatus(final LoadStatus loadStatus, final String msg, final String psk) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (loadStatus == LoadStatus.LOADING) { + //先关闭 + stop(); + //开始播放 + playVideo(psk); + rlLoading.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.VISIBLE); + tvLoadingMsg.setText(msg); + //禁止拖动 + setCanSeekChanged(false); + + } else if (loadStatus == LoadStatus.LOAD_SUCCESS) { + //播放成功 + rlLoading.setVisibility(View.GONE); + //允许拖动 + setCanSeekChanged(true); + //SeekBar监听 + setSeekBarListener(); + playStatus = PlayStatus.PLAY; + //mPlayWin.setSEnhanceMode(4);//设置降噪等级最大 + featuresClickListener(true); + } else { + //播放失败 + stop(); + rlLoading.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.GONE); + tvLoadingMsg.setText(msg); + //禁止拖动 + setCanSeekChanged(false); + playStatus = PlayStatus.ERROR; + featuresClickListener(false); + } + } + }); + } + + private void startDownload() { + path = MediaPlayHelper.getDownloadVideoPath(0, recordsData.recordId, DateHelper.parseMills(recordsData.beginTime)); + LCOpenSDK_Download.startDownload(0, + path, + LCDeviceEngine.newInstance().accessToken, + recordsData.recordRegionId, + recordsData.deviceId, + String.valueOf(0), + recordsData.deviceId, + 1000, + 5000); + } + + private void stopDownLoad() { + LCOpenSDK_Download.stopDownload(0); + //更新數據到相冊 + MediaPlayHelper.updatePhotoVideo(path); + } + + private int downloadProgress; + + private class CloudDownloadListener extends LCOpenSDK_DownloadListener { + @Override + public void onDownloadReceiveData(int index, final int dataLen) { + LogUtil.debugLog(TAG, "CloudDownloadListener----" + "index=" + index + ", dataLen=" + dataLen); + if (downloadStatus == DownloadStatus.ING) { + downloadProgress = downloadProgress + dataLen; + runOnUiThread(new Runnable() { + @Override + public void run() { + pgDownloadProgress( + getResources().getString(R.string.lc_demo_device_record_download_begin) + byte2mb(downloadProgress) + "MB/" + totalMb + "M", + (int) ((float) downloadProgress / (float) Long.parseLong(recordsData.size) * 100), + 100, + getResources().getColor(R.color.lc_demo_color_ffffff)); + + } + }); + } + } + + @Override + public void onDownloadState(int index, String code, int type) { + LogUtil.debugLog(TAG, "CloudDownloadListener----" + "index=" + index + ", code=" + code + ", type=" + type); + if (type == 99 || code.equals("0") || code.equals("4") || code.equals("7") || code.equals("8")) { + //下载出错 + downloadStatus = DownloadStatus.ERROR; + runOnUiThread(new Runnable() { + @Override + public void run() { + pgDownloadProgress(getResources().getString(R.string.lc_demo_device_record_download_error), + 0, + 0, + getResources().getColor(R.color.lc_demo_color_FF4F4F)); + downloadProgress = 0; + } + }); + } + if (code.equals("14")) { + passcode = 1; + } + if (code.equals("11") || code.equals("14")) { + //下载出错 + downloadStatus = DownloadStatus.ERROR; + showInputKeyEx(); + } + if (type == 1 && code.equals("1")) { + //开始下载 + downloadStatus = DownloadStatus.ING; + } + + if (type == 1 && code.equals("2")) { + //下载完成 + downloadStatus = DownloadStatus.FINISH; + // MediaScannerConnection.scanFile(DeviceRecordPlayActivity.this, new String[]{path}, null, null); + MediaPlayHelper.updatePhotoVideo(path); + runOnUiThread(new Runnable() { + @Override + public void run() { + pgDownloadProgress(getResources().getString(R.string.lc_demo_device_record_download_finish), + 100, + 100, + getResources().getColor(R.color.lc_demo_color_ffffff)); + downloadProgress = 0; + } + }); + } + } + } + + private void pgDownloadProgress(String tip, int progress, int secondProgress, int textColor) { + pgDownload.setText(tip); + pgDownload.setProgress(progress); + pgDownload.setSecondaryProgress(secondProgress); + pgDownload.setTextColor(textColor); + } + + @Override + public void deleteDeviceRecord() { + DialogUtils.dismiss(); + Toast.makeText(this, getResources().getString(R.string.lc_demo_device_record_delete_success), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(); + intent.putExtra("data", true); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onError(Throwable throwable) { + DialogUtils.dismiss(); + Toast.makeText(this, throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + + private String byte2mb(long b) { + double mb = (double) b / 1024 / 1024; + DecimalFormat decimalFormat = new DecimalFormat("0.00"); + return decimalFormat.format(mb); + } +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/ContainerAdapter.java b/app/src/main/java/com/lechange/demo/videoplay/ContainerAdapter.java new file mode 100644 index 0000000..af20bd8 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/ContainerAdapter.java @@ -0,0 +1,102 @@ +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.support.constraint.ConstraintLayout; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.media.LCOpenSDK_PlayWindow; +import com.yonsz.z1.R; + +import java.util.List; + +public class ContainerAdapter extends RecyclerView.Adapter { + private String TAG = getClass().getSimpleName(); + private LCOpenSDK_EventListener videoPlayerListener; + private List mData; + private Context mContext; + + private ConstraintLayout.LayoutParams layoutParams; + + public ContainerAdapter(Context mContext, List datas) { + this.mData = datas; + this.mContext = mContext; + } + + @Override + public ContainerHoler onCreateViewHolder(ViewGroup parent, int viewType) { + View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_container, parent, false); + ContainerHoler containerHoler = new ContainerHoler(rootView); + layoutParams = new ConstraintLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT); + layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; + layoutParams.rightToRight = ConstraintLayout.LayoutParams.PARENT_ID; + layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; + layoutParams.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID; + return containerHoler; + } + + @Override + public void onBindViewHolder(final ContainerHoler holder, int position) { + // final VideoBean videoBean = mData.get(position); + // holder.pqVideoPlayer.setId(videoBean.getId()); + // holder.pqVideoPlayer.setFocus(videoBean.isSelect()); + // holder.pqVideoPlayer.setVideoPlayerListener(videoPlayerListener); + // holder.pqVideoPlayer.setPqVideoOnclickListener(new PqVideoPlayer.PqVideoOnclickListener() { + // @Override + // public void onClick() { + // refreshSelect(videoBean); + // } + // }); + /*pqVideoPlayer.setVideoPlayerListener(videoPlayerListener); + pqVideoPlayer.setPqVideoOnclickListener(new PqVideoPlayer.PqVideoOnclickListener() { + @Override + public void onClick() { + refreshSelect(pqVideoPlayer); + } + });*/ + holder.setViews(position); + } + + private void refreshSelect(LCOpenSDK_PlayWindow videoBean) { + Log.d(TAG, "refreshSelect: "); + /*for (LCOpenSDK_PlayWindow vb : mData) { + vb.setFocus(vb == videoBean); + }*/ + // notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return mData.size(); + } + + public void setVideoPlayerListener(LCOpenSDK_EventListener videoPlayerListener) { + this.videoPlayerListener = videoPlayerListener; + } + + public class ContainerHoler extends RecyclerView.ViewHolder { + // private PqVideoPlayer pqVideoPlayer; + private ViewGroup constraintLayout; + private FrameLayout frame_content; + + public ContainerHoler(View itemView) { + super(itemView); + // pqVideoPlayer = itemView.findViewById(R.id.pq_video_player); + constraintLayout = (ConstraintLayout) itemView.findViewById(R.id.container); + } + + public void setViews(final int position) { + final VideoPlayOnlineFragment pqVideoPlayer = mData.get(position); + /*constraintLayout.addView(pqVideoPlayer, 0, layoutParams); + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, pqVideoPlayer) + .commitAllowingStateLoss();*/ + // constraintLayout.addView(pqVideoPlayer, 0, layoutParams); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayer.java b/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayer.java new file mode 100644 index 0000000..5390205 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayer.java @@ -0,0 +1,688 @@ +/* +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.SurfaceTexture; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.TextureView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DensityUtil; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +*/ +/** + * 描述:自定义播放器 + * + * @author :chezi008 on 2017/11/21 15:41 + * 邮箱:chezi008@163.com + *//* + + +public class PqVideoPlayer extends RelativeLayout implements View.OnClickListener, PqVideoPlayerZoomIn.PqZoomOutVideoListener { + + public static final int HANDLER_SET_STATUS_DEAULT = 0; + public static final int HANDLER_SET_STATUS_PLAYING = 1; + public static final int HANDLER_UPDATE_BPS = 2; + public static final int HANDLER_UPDATE_LOSS_FRAME = 3; + private static final int CORE_POOL_SIZE = 5; + private static final int MAXIMUM_POOL_SIZE = 10; + private static final int KEEP_ALIVE_TIME = 60000; + */ +/** + * 默认边框大小 + *//* + + private final int DEFAULT_BORDER_SIZE = 1; + private final int DEFALUT_BORDER_COLOR = Color.parseColor("#00000000"); + //自定义属性 1、选中时候边框大小 2、选中边框颜色 + //3、默认背景色 4、选中背景色 + // 5、资源添加icon + */ +/** + * 默认背景 + *//* + + private final int DEFAULT_BG_COLOR = Color.parseColor("#6b7e9e"); + private final int DEFAULT_BG_SELECT_COLOR = Color.parseColor("#FFFFFF"); + */ +/** + * 默认添加资源图片 + *//* + + private final int DEFAULT_RES_ICON = R.mipmap.vp_ic_res_add; + private final int DEFAULT_FULL_SCREEN_ICON = R.mipmap.vp_ic_full_screen; + private final int DEFAULT_STOP_ICON = R.mipmap.vp_ic_stop_play; + private ArrayBlockingQueue mArrayBlockingQueue; + private String TAG = getClass().getSimpleName(); + */ +/** + * 选中边框 + *//* + + private int mBorderSize, mBorderColor; + private int mBgColor, mBgSelectColor; + private int mResIcon, mFullIcon, mStopIcon; + + private RelativeLayout mRlBorderBg, mRlVideoBg, mTextureParent, mRlBottomBar; + private TextureView mTextureView; + private SurfaceTexture mSurfaceTexture; + private TextureView.SurfaceTextureListener mSurfaceTextureListener; + + private ProgressBar mProcessBar; + private TextView mTvPath, mTvLoss; + private ImageView ivResAdd; + + */ +/** + * 解码器 + *//* + + private PqVideoDecoder mVideoDecoder; + */ +/** + * 线程池 + *//* + + private ThreadPoolExecutor mExecutorService; + private ScheduledExecutorService mScheduledExecutorService; + private Runnable mScheduleRunable; + private H264ReadRunable mH264ReadRunable; + + private boolean isFullScreen, isFoucsed, isZoomIn; + */ +/** + * 码流统计 + *//* + + private Handler mMainHandler; + + private VideoPlayerListener videoPlayerListener; + private PqVideoOnclickListener mPqVideoOnclickListener; + + private PlayerViewState curState; + private long[] mHits = new long[2]; + + public PqVideoPlayer(Context context) { + this(context, null); + } + + + public PqVideoPlayer(Context context, AttributeSet attrs) { + super(context, attrs); + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PqVideoPlayer); + mBorderSize = ta.getInt(R.styleable.PqVideoPlayer_vp_border_size, DEFAULT_BORDER_SIZE); + mBorderColor = ta.getColor(R.styleable.PqVideoPlayer_vp_border_color, DEFALUT_BORDER_COLOR); + mBgColor = ta.getColor(R.styleable.PqVideoPlayer_vp_bg_default_color, DEFAULT_BG_COLOR); + mBgSelectColor = ta.getColor(R.styleable.PqVideoPlayer_vp_bg_select_color, DEFAULT_BG_SELECT_COLOR); + mResIcon = ta.getResourceId(R.styleable.PqVideoPlayer_vp_res_icon, DEFAULT_RES_ICON); + mFullIcon = ta.getResourceId(R.styleable.PqVideoPlayer_vp_fullscreen_icon, DEFAULT_FULL_SCREEN_ICON); + mStopIcon = ta.getResourceId(R.styleable.PqVideoPlayer_vp_stop_icon, DEFAULT_STOP_ICON); + + initVirable(); + initView(); + } + + public void setVideoPlayerListener(VideoPlayerListener videoPlayerListener) { + this.videoPlayerListener = videoPlayerListener; + } + + public void setPqVideoOnclickListener(PqVideoOnclickListener mPqVideoOnclickListener) { + this.mPqVideoOnclickListener = mPqVideoOnclickListener; + } + + private void initVirable() { + mArrayBlockingQueue = new ArrayBlockingQueue(MAXIMUM_POOL_SIZE); + mExecutorService = new ThreadPoolExecutor(CORE_POOL_SIZE, + MAXIMUM_POOL_SIZE, + KEEP_ALIVE_TIME, + TimeUnit.MILLISECONDS, mArrayBlockingQueue); + mScheduledExecutorService = new ScheduledThreadPoolExecutor(1); + + if (mMainHandler == null) { + mMainHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case HANDLER_SET_STATUS_DEAULT: + setDefaultUI(); + break; + case HANDLER_SET_STATUS_PLAYING: + setPlayerViewState(PlayerViewState.Playying); + break; + case HANDLER_UPDATE_BPS: + // if (videoPlayerFullScreenListener != null) { + // videoPlayerFullScreenListener.onGetBps((String) msg.obj); + // } + break; + //播放器丢包率更新 + case HANDLER_UPDATE_LOSS_FRAME: + mTvLoss.setText((String) msg.obj); + // if (videoPlayerFullScreenListener != null) { + // videoPlayerFullScreenListener.onGetLossFrame((String) msg.obj); + // } + break; + default: + break; + } + } + }; + } + } + + */ +/** + * 初始化视图 + *//* + + private void initView() { + //设置屏幕常亮 + setKeepScreenOn(true); + //添加选中的边框 + LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mRlBorderBg = new RelativeLayout(getContext()); + mRlBorderBg.setBackgroundColor(mBorderColor); + mRlBorderBg.setPadding(mBorderSize, mBorderSize, mBorderSize, mBorderSize); + addView(mRlBorderBg, layoutParams); + //添加播放器背景 + layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mRlVideoBg = new RelativeLayout(getContext()); + mRlVideoBg.setBackgroundColor(mBgColor); + mRlBorderBg.addView(mRlVideoBg, layoutParams); + + //添加播放器显示界面 + layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mTextureParent = new RelativeLayout(getContext()); + mTextureParent.setBackgroundColor(Color.BLACK); + mTextureParent.setVisibility(GONE); + mRlVideoBg.addView(mTextureParent, layoutParams); + + //添加添加资源图标 + layoutParams = new LayoutParams(DensityUtil.sp2px(getContext(), 35), + DensityUtil.sp2px(getContext(), 35)); + layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); + ivResAdd = new ImageView(getContext()); + ivResAdd.setImageResource(mResIcon); + ivResAdd.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ivResAdd.setId(R.id.iv_res_add); + ivResAdd.setOnClickListener(this); + mRlVideoBg.addView(ivResAdd, layoutParams); + //添加progres + mProcessBar = new ProgressBar(getContext(), null, android.R.attr.progressBarStyle); + mRlVideoBg.addView(mProcessBar, layoutParams); + mProcessBar.setVisibility(GONE); + + // addTextureView(); + + //添加播放器控制栏 + //底部白色背景 + LayoutParams layoutParamsInner = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + mRlBottomBar = new RelativeLayout(getContext()); + mRlBottomBar.setBackgroundColor(Color.WHITE); + mRlBottomBar.getBackground().setAlpha(128); + mRlBottomBar.setGravity(CENTER_VERTICAL); + layoutParamsInner.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + mRlVideoBg.addView(mRlBottomBar, layoutParamsInner); + mRlBottomBar.setVisibility(GONE); + //全屏 + int btnWidth = DensityUtil.sp2px(getContext(), 25); + int btnPadding = DensityUtil.sp2px(getContext(), 3); + LayoutParams layoutParamsFullScreen = new LayoutParams(btnWidth, btnWidth); + layoutParamsFullScreen.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + ImageView ivFull = new ImageView(getContext()); + ivFull.setId(R.id.btnFullScreen); + + ivFull.setPadding(btnPadding, btnPadding, btnPadding, btnPadding); + ivFull.setImageResource(mFullIcon); + ivFull.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ivFull.setOnClickListener(this); + mRlBottomBar.addView(ivFull, layoutParamsFullScreen); + //停止 + LayoutParams layoutParamsStopVideo = new LayoutParams(btnWidth, btnWidth); + layoutParamsStopVideo.addRule(RelativeLayout.ALIGN_PARENT_LEFT); + ImageView ivStop = new ImageView(getContext()); + ivStop.setId(R.id.btnStop); + ivStop.setPadding(btnPadding, btnPadding, btnPadding, btnPadding); + ivStop.setImageResource(mStopIcon); + ivStop.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ivStop.setOnClickListener(this); + mRlBottomBar.addView(ivStop, layoutParamsStopVideo); + + //设备路径信息 + LinearLayout llPath = new LinearLayout(getContext()); + llPath.setId(R.id.tvDeviceInfo); + mTvPath = new TextView(getContext()); + mTvPath.setTextColor(Color.WHITE); + mTvPath.setTextSize(8); + mTvPath.setSingleLine(true); + mTvPath.setText("轮播字"); + mTvPath.setEllipsize(TextUtils.TruncateAt.MARQUEE); + mTvPath.setMarqueeRepeatLimit(-1); + mTvPath.setSelected(true); + llPath.addView(mTvPath); + + LayoutParams layoutParamsDevicePathTextView = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + layoutParamsDevicePathTextView.setMargins(btnPadding, btnPadding, btnPadding, btnPadding); + layoutParamsDevicePathTextView.addRule(RIGHT_OF, R.id.btnStop); + layoutParamsDevicePathTextView.addRule(RelativeLayout.LEFT_OF, R.id.tvLossFrame); + layoutParamsDevicePathTextView.addRule(CENTER_VERTICAL); + mRlBottomBar.addView(llPath, layoutParamsDevicePathTextView); + + //丢包率 + mTvLoss = new TextView(getContext()); + mTvLoss.setId(R.id.tvLossFrame); + mTvLoss.setTextColor(Color.WHITE); + mTvLoss.setTextSize(8); + mTvLoss.setLines(1); + mTvLoss.setText("0.00%"); + LayoutParams rlLoss = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + rlLoss.setMargins(btnPadding, btnPadding, btnPadding, btnPadding); + rlLoss.addRule(RelativeLayout.LEFT_OF, R.id.btnFullScreen); + rlLoss.addRule(CENTER_VERTICAL); + mRlBottomBar.addView(mTvLoss, rlLoss); + + setPlayerViewState(PlayerViewState.Default); + // setPlayerViewState(PlayerViewState.Playying); + } + + private void initTextureView() { + if (mTextureView == null) { + mTextureView = new VideoTextureView(getContext()); + mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { + @Override + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + Log.d(TAG, "onSurfaceTextureAvailable: "); + //检查解码器是否初始化 + if (!initDecoder(surface)) { + Log.d(TAG, "onSurfaceTextureAvailable: init decoder failed!"); + return; + } + if (mH264ReadRunable != null) { + Log.d(TAG, "onSurfaceTextureAvailable: 读取视频流"); + mExecutorService.execute(mH264ReadRunable); + } + } + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + Log.d(TAG, "onSurfaceTextureDestroyed: "); + // stopDecoder(); + mSurfaceTexture = surface; + if (isZoomIn) { + videoPlayerListener.onChangeSurface(surface); + } + return false; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + + } + }); + + } + } + + */ +/** + * 添加显示画面 + *//* + + private void addTextureView() { + Log.d(TAG, "addTextureView: ----------->"); + LayoutParams textureParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + textureParams.addRule(RelativeLayout.CENTER_IN_PARENT); + if (mTextureParent.getChildCount() > 0) { + throw new IllegalStateException("已经添加了显示控件!"); + } + //不能添加空控件 播放器setPlaying的时候会添加 + mTextureParent.addView(mTextureView, textureParams); + mTextureParent.setVisibility(VISIBLE); + } + + */ +/** + * 停止解码器 + *//* + + private void stopDecoder() { + if (mVideoDecoder != null) { + mVideoDecoder.stop(); + } + } + + */ +/** + * 移除显示画面 + *//* + + private void removeTextureView() { + mTextureParent.setVisibility(GONE); + if (mTextureParent.getChildCount() > 0) { + mTextureParent.removeView(mTextureView); + // mTextureView = null; + } + } + + private void resetTextureView() { + mTextureParent.setVisibility(GONE); + if (mTextureParent.getChildCount() > 0) { + mTextureParent.removeView(mTextureView); + mTextureView = null; + } + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.iv_res_add) { + //播放 + if (mH264ReadRunable == null) { + mH264ReadRunable = new H264ReadRunable(); + mH264ReadRunable.setH264ReadListener(new H264ReadRunable.H264ReadListener() { + @Override + public void onFrameData(byte[] datas) { + mVideoDecoder.feedData(datas, 0, datas.length); + } + + @Override + public void onStopRead() { + stopVideoPlayer(true); + } + }); + } + setPlayerViewState(PlayerViewState.Playying); + } else if (v.getId() == R.id.btnFullScreen) { + //全屏 + startFullScreen(); + } else if (v.getId() == R.id.btnStop) { + //停止 + Log.d(TAG, "onClick:btnStop "); + stopVideoPlayer(true); + } + setSelectStyle(); + } + + */ +/** + * 开启全屏 + *//* + + public void startFullScreen() { + isFullScreen = true; + FullScreenActivity.start(getContext()); + } + + */ +/** + * 退出全屏模式 + *//* + + public void exitFullScreen() { + isFullScreen = false; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // gestureDetector.onTouchEvent(event); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + doubleClick_2(); + mPqVideoOnclickListener.onClick(); + return true; + case MotionEvent.ACTION_UP: + return true; + } + return super.onTouchEvent(event); + } + + private void doubleClick_2() { + System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); + //获取手机开机时间 + mHits[mHits.length - 1] = SystemClock.uptimeMillis(); + if (mHits[mHits.length - 1] - mHits[0] < 500) { + */ +/**双击的业务逻辑*//* + + Log.d(TAG, "doubleClick_2: 双击"); + onZoomViewExchange(); + } + } + + private void onZoomViewExchange() { + if (mTextureView != null) { + mSurfaceTextureListener = mTextureView.getSurfaceTextureListener(); + } + isZoomIn = true; + removeTextureView(); + videoPlayerListener.onZoomInView(PqVideoPlayer.this); + } + + */ +/** + * 设置选中的状态 + *//* + + private void setSelectStyle() { + isFoucsed = true; + //背景为黑色,且出现选中边框 + mRlVideoBg.setBackgroundColor(Color.BLACK); + mRlBorderBg.setBackgroundColor(mBgSelectColor); + } + + private void setDefultStyle() { + isFoucsed = false; + mRlVideoBg.setBackgroundColor(mBgColor); + mRlBorderBg.setBackgroundColor(mBorderColor); + } + + */ +/** + * 设置时候获取焦点 + * + * @param focus + *//* + + public void setFocus(boolean focus) { + if (focus) { + setSelectStyle(); + } else { + setDefultStyle(); + } + } + + */ +/** + * 开始播放视频 + *//* + + public void startVideoPlayer() { + setPlayerViewState(PlayerViewState.Playying); + //设置轮播字幕 + // mTvPath.setText(mParams.getVideoName()); + } + + public void stopVideoPlayer(boolean isClear) { + //停止视频解码器 + stopDecoder(); + //移除显示画面 + mMainHandler.sendEmptyMessage(HANDLER_SET_STATUS_DEAULT); + // setPlayerViewState(PlayerViewState.Default); + if (isClear) { + // mParams.getSessionParams().requestId = null; + } + } + + */ +/** + * 显示加载动画 + *//* + + public void showProgressbar() { + setPlayerViewState(PlayerViewState.Waiting); + //定时器 15s还没来自动关闭 + if (mScheduleRunable == null) { + mScheduleRunable = new Runnable() { + @Override + public void run() { + if (mProcessBar.getVisibility() == VISIBLE) { + mMainHandler.sendEmptyMessage(HANDLER_SET_STATUS_DEAULT); + } + } + }; + } + mScheduledExecutorService.schedule(mScheduleRunable, 15000, TimeUnit.MILLISECONDS); + } + + + private void setPlayerViewState(PlayerViewState state) { + curState = state; + Log.d(TAG, "setPlayerViewState: " + curState); + switch (state) { + case Default: + //默认背景 + mRlVideoBg.setBackgroundColor(mBgColor); + ivResAdd.setVisibility(VISIBLE); + //隐藏textureView + resetTextureView(); + //隐藏dialog + mProcessBar.setVisibility(GONE); + //隐藏底部控制栏 + mRlBottomBar.setVisibility(GONE); + break; + case Waiting: + //背景设为黑色 + mRlVideoBg.setBackgroundColor(Color.BLACK); + //隐藏资源图标 + ivResAdd.setVisibility(GONE); + //显示dialog + mProcessBar.setVisibility(VISIBLE); + break; + case Playying: + //隐藏dialog + mProcessBar.setVisibility(GONE); + //隐藏资源 + ivResAdd.setVisibility(GONE); + initTextureView(); + addTextureView(); + //显示底部控制栏 + mRlBottomBar.setVisibility(VISIBLE); + break; + case Control: + break; + } + } + + + private boolean initDecoder(SurfaceTexture surface) { + Log.d(TAG, "initDecoder: "); + if (mVideoDecoder == null) { + mVideoDecoder = new PqVideoDecoder(); + } + boolean initSuccess = mVideoDecoder.init(surface, + 1280, + 720); + + return initSuccess; + } + + + private void setDefaultUI() { + //判断当前是否是播放状态 + if (mRlBottomBar.getVisibility() == VISIBLE || mProcessBar.getVisibility() == VISIBLE) { + //停止视频解码器 + stopDecoder(); + //移除显示画面 + setPlayerViewState(PlayerViewState.Default); + setSelectStyle(); + } + } + + @Override + public void onZoomIn() { + onResume(); + setVisibility(VISIBLE); + isZoomIn = false; + } + + public void onResume() { + if (curState == PlayerViewState.Playying) { + setSurfaceTexture(); + } + } + + private void setSurfaceTexture() { + if (null == mTextureView.getSurfaceTexture()) { + Log.d(TAG, "setSurfaceTexture: "); + mTextureView.setSurfaceTextureListener(mSurfaceTextureListener); + mTextureView.setSurfaceTexture(mSurfaceTexture); + } + addTextureView(); + } + + public SurfaceTexture getSurfaceTexture() { + return mTextureView.getSurfaceTexture(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), + getDefaultSize(0, heightMeasureSpec)); + + int childWidthSize = getMeasuredWidth(); + // 高度和宽度一样 + heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec( + childWidthSize, MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + public interface VideoPlayerListener { + */ +/** + * 双击放大 + * + * @param videoPlayer + *//* + + void onZoomInView(PqVideoPlayer videoPlayer); + + */ +/** + * 渲染画面被交换 + * + * @param surfaceTexture + *//* + + void onChangeSurface(SurfaceTexture surfaceTexture); + + } + + public interface PqVideoOnclickListener { + void onClick(); + } +} +*/ diff --git a/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayerZoomIn.java b/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayerZoomIn.java new file mode 100644 index 0000000..b260336 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/PqVideoPlayerZoomIn.java @@ -0,0 +1,194 @@ +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.SurfaceTexture; +import android.os.SystemClock; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.TextureView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DensityUtil; + +public class PqVideoPlayerZoomIn extends FrameLayout implements View.OnClickListener { + private String TAG = getClass().getSimpleName(); + private RelativeLayout mTextureParent, mRlBottomBar; + private TextureView mTextureView; + private ImageView ivResAdd; + private TextView mTvPath, mTvLoss; + private PqZoomOutVideoListener mPqZoomOutVideoListener; + private SurfaceTexture mSurfaceTexture; + private long[] mHits = new long[2]; + private float[] mHorizontals = new float[2]; + + public PqVideoPlayerZoomIn(@NonNull Context context) { + this(context, null); + } + + public PqVideoPlayerZoomIn(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PqVideoPlayerZoomIn(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + } + + private void initView() { + //设置屏幕常亮 + setKeepScreenOn(true); + setBackgroundColor(getResources().getColor(R.color.colorPrimary)); + addTextureParent(); + // addTextureView(); + addResIconView(); + // addBottomView(); + } + + private void addTextureParent() { + //先添加其父容器 + LayoutParams parentParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + parentParams.gravity = Gravity.CENTER; + + mTextureParent = new RelativeLayout(getContext()); + mTextureParent.setBackgroundColor(Color.BLACK); + mTextureParent.setVisibility(VISIBLE); + addView(mTextureParent, parentParams); + } + + private void addResIconView() { + //添加添加资源图标 + LayoutParams layoutParams = new LayoutParams(DensityUtil.sp2px(getContext(), 35), + DensityUtil.sp2px(getContext(), 35)); + layoutParams.gravity = Gravity.CENTER; + ivResAdd = new ImageView(getContext()); + ivResAdd.setImageResource(R.mipmap.vp_ic_res_add); + ivResAdd.setScaleType(ImageView.ScaleType.CENTER_INSIDE); +// ivResAdd.setId(R.id.iv_res_add); + ivResAdd.setOnClickListener(this); + addView(ivResAdd, layoutParams); + } + + private void addTextureView() { + //添加渲染视图 + if (mTextureView == null) { + mTextureView = new VideoTextureView(getContext()); + mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { + @Override + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + Log.d(TAG, "onSurfaceTextureAvailable: "); + if (mSurfaceTexture != null) { + mTextureView.setSurfaceTexture(mSurfaceTexture); + } + } + + @Override + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + + } + + @Override + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + Log.d(TAG, "onSurfaceTextureDestroyed: "); + mSurfaceTexture = surface; + return false; + } + + @Override + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + + } + }); + } + + if (mTextureParent.getChildCount() > 0) { + throw new IllegalStateException("已经添加了一个子控件了!"); + } + RelativeLayout.LayoutParams LinlayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, + RelativeLayout.LayoutParams.MATCH_PARENT); + LinlayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); + mTextureParent.addView(mTextureView, LinlayoutParams); + } + + public void setSurfaceView(SurfaceTexture surfaceView) { + Log.d(TAG, "setSurfaceView: "); + addTextureView(); + mTextureView.setSurfaceTexture(surfaceView); + } + + public void setPqZoomOutVideoListener(PqZoomOutVideoListener mPqZoomOutVideoListener) { + this.mPqZoomOutVideoListener = mPqZoomOutVideoListener; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + Log.i("TAG", "onTouchEvent--ACTION_DOWN" + event.getX()); + mHorizontals[0] = event.getX(); + doubleClick_2(); + return true; + case MotionEvent.ACTION_UP: + Log.i("TAG", "onTouchEvent--ACTION_UP" + event.getX()); + mHorizontals[1] = event.getX(); + changeLeftOrRight(); + return true; + } + return super.onTouchEvent(event); + } + + private void changeLeftOrRight() { + if (mHorizontals[0] > mHorizontals[1]) { + if ((mHorizontals[0] - mHorizontals[1]) > 200) { + Log.i("TAG", "onTouchEvent" + "下一个" + (mHorizontals[0] - mHorizontals[1])); + Toast.makeText(getContext(), "下一个", Toast.LENGTH_SHORT).show(); + } + } else { + if ((mHorizontals[1] - mHorizontals[0]) > 200) { + Log.i("TAG", "onTouchEven" + "上一个"); + Toast.makeText(getContext(), "上一个", Toast.LENGTH_SHORT).show(); + } + } + } + + private void doubleClick_2() { + System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); + //获取手机开机时间 + mHits[mHits.length - 1] = SystemClock.uptimeMillis(); + if (mHits[mHits.length - 1] - mHits[0] < 500) { + /**双击的业务逻辑*/ + Log.d(TAG, "doubleClick_2: 双击"); + onZoomViewExchange(); + } + } + + private void onZoomViewExchange() { + mTextureParent.removeView(mTextureView); + mPqZoomOutVideoListener.onZoomIn(); + setVisibility(GONE); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + /*case R.id.iv_res_add: + break;*/ + } + } + + public interface PqZoomOutVideoListener { + void onZoomIn(); + } + +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoContainerFragment.java b/app/src/main/java/com/lechange/demo/videoplay/VideoContainerFragment.java new file mode 100644 index 0000000..3f9631c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoContainerFragment.java @@ -0,0 +1,169 @@ +package com.lechange.demo.videoplay; + +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v4.app.Fragment; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.yonsz.z1.R; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.version4.fragment.MyFragmentPagerAdapter; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +public class VideoContainerFragment extends BaseFragment { + private View fragView; + private String TAG = getClass().getSimpleName(); + private UIHandle mHandler; + private RecyclerView rv_list; + private PqVideoPlayerZoomIn pqZoomOutVideoPlayer; + private VideoPlayOnlineFragment mCurPqVideoPlayer; + private GridLayoutManager mGridLayoutManager; + private ContainerAdapter containerAdapter; + private List videoIdList; + private MyFragmentPagerAdapter myFragmentPagerAdapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_video_container, null); + initView(fragView); + return fragView; + } + + + private void initView(View fragView) { + videoIdList = new ArrayList<>(); + + for (int i = 0; i < 4; i++) { + VideoPlayOnlineFragment pqVideoPlayer = new VideoPlayOnlineFragment(); + Bundle b = new Bundle(); + String resId = getActivity().getIntent().getStringExtra("UUID"); + b.putString("RESID", resId); + pqVideoPlayer.setArguments(b); + videoIdList.add(pqVideoPlayer); + } + + rv_list = (RecyclerView) fragView.findViewById(R.id.rv_list); + pqZoomOutVideoPlayer = (PqVideoPlayerZoomIn) fragView.findViewById(R.id.pq_video); + + containerAdapter = new ContainerAdapter(getContext(), videoIdList); + myFragmentPagerAdapter = new MyFragmentPagerAdapter(getFragmentManager()) { + @Override + public int getCount() { + return 4; + } + + @Override + public Fragment getItem(int position) { + return videoIdList.get(position); + } + + @Override + public long getItemId(int position) { + return videoIdList.get(position).getId(); + } + }; + /*containerAdapter.setVideoPlayerListener(new PqVideoPlayer.VideoPlayerListener() { + @Override + public void onZoomInView(PqVideoPlayer videoPlayer) { + mCurPqVideoPlayer = videoPlayer; + videoPlayer.setVisibility(View.GONE); + pqZoomOutVideoPlayer.setVisibility(View.VISIBLE); + pqZoomOutVideoPlayer.setPqZoomOutVideoListener(videoPlayer); + } + + @Override + public void onChangeSurface(SurfaceTexture surfaceTexture) { + pqZoomOutVideoPlayer.setSurfaceView(surfaceTexture); + } + + });*/ + mGridLayoutManager = new VideoGridLayoutManager(getContext(), 2); + rv_list.setLayoutManager(mGridLayoutManager); + rv_list.setAdapter(containerAdapter); + + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + Log.d(TAG, "getMovementFlags: "); + int dragFlags; + int swipeFlags; + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + swipeFlags = 0; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + swipeFlags = 0; + } + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + Log.d(TAG, "onMove: "); + int fromPosition = viewHolder.getAdapterPosition(); + int toPosition = target.getAdapterPosition(); + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(videoIdList, i, i + 1); + } + } else { + for (int i = fromPosition; i < toPosition; i--) { + Collections.swap(videoIdList, i, i - 1); + } + } + containerAdapter.notifyItemMoved(fromPosition, toPosition); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + Log.d(TAG, "onSwiped: "); + } + }); + itemTouchHelper.attachToRecyclerView(rv_list); + } + + private void callBackUiThread(Message msg) { + + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(VideoContainerFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + VideoContainerFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoGridLayoutManager.java b/app/src/main/java/com/lechange/demo/videoplay/VideoGridLayoutManager.java new file mode 100644 index 0000000..cd6405a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoGridLayoutManager.java @@ -0,0 +1,27 @@ +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.support.v7.widget.GridLayoutManager; +import android.util.AttributeSet; + + +public class VideoGridLayoutManager extends GridLayoutManager { + public VideoGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public VideoGridLayoutManager(Context context, int spanCount) { + super(context, spanCount); + } + + public VideoGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) { + super(context, spanCount, orientation, reverseLayout); + } + + @Override + public boolean canScrollVertically() { +// super.canScrollVertically() + return false; + } + +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoPlayFragment.java b/app/src/main/java/com/lechange/demo/videoplay/VideoPlayFragment.java new file mode 100644 index 0000000..a6a2c92 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoPlayFragment.java @@ -0,0 +1,251 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayFragment.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.videoplay; + +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.hardware.SensorManager; +import android.os.Handler; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.OrientationEventListener; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.media.LCOpenSDK_PlayWindow; + + +/** + * 描述:视频播放组件基类 作者: lc + */ +public class VideoPlayFragment extends Fragment{ + private final static String tag = "MediaPlayFragment"; + //底层返回值 + protected static final int retOK = 0; + protected static final int retNG = -1; + + public interface BackHandlerInterface { + public void setSelectedFragment(VideoPlayFragment backHandledFragment); + } + protected LCOpenSDK_EventListener listener; + protected LCOpenSDK_PlayWindow mPlayWin = new LCOpenSDK_PlayWindow(); + protected Handler mHander = new Handler(); + // 屏幕方向改变监听器 + private OrientationEventListener mOrientationListener; + + // 统计当前累计总流量,单位:字节 + //protected long mTotalFlow; + protected ViewGroup mSurfaceParentView; + protected ProgressDialog mProgressDialog; //播放加载使用 + protected TextView mReplayTip; + + public enum ORIENTATION {isPortRait, isLandScape, isNone} + protected ORIENTATION mOrientation = ORIENTATION.isNone; //禁止横竖屏标志 + + protected static final String AUDIO_TALK_ERROR = "-1000"; //实时对讲初始化失败 + + + //吐司类工具 + protected void toast(int resId) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast.makeText(getActivity(), resId, Toast.LENGTH_SHORT).show(); + } + } + protected void toast(String content) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast.makeText(getActivity(), content, Toast.LENGTH_SHORT).show(); + } + } + public void toastWithImg(String content, int imgId) { + if (getActivity() != null && !getActivity().isFinishing()) { + Toast toast = Toast.makeText(getActivity(), content, Toast.LENGTH_LONG); + toast.setGravity(Gravity.CENTER, 0, 0); + LinearLayout toastView = (LinearLayout) toast.getView(); + ImageView imageCodeProject = new ImageView(getActivity()); + imageCodeProject.setImageResource(imgId); + toastView.addView(imageCodeProject, 0); + toast.show(); + } + } + + //播放失败提示器 + protected void showErrorTip(int resId){ + mReplayTip.setVisibility(View.VISIBLE); + mReplayTip.setText(resId); + } + protected void showErrorTip(String res){ + mReplayTip.setVisibility(View.VISIBLE); + mReplayTip.setText(res); + } + + //播放缓冲提示器 + protected void showLoading(int res) { + mReplayTip.setVisibility(View.GONE); + mProgressDialog.setStart(getString(res)); //开启播放加载控件 + } + protected void showLoading(String res) { + mReplayTip.setVisibility(View.GONE); + mProgressDialog.setStart(res); //开启播放加载控件 + } + + @Override + public void onStart() { + super.onStart(); + //将自己的实例传出去 + if (!(getActivity() instanceof BackHandlerInterface)) { + throw new ClassCastException("Hosting activity must implement BackHandlerInterface"); + } else { + ((BackHandlerInterface)getActivity()).setSelectedFragment(this); + } + } + + @Override + public void onDestroyView() + { + super.onDestroyView(); + mOrientationListener.disable(); + mOrientationListener = null; + } + + /** + * 描述:开启屏幕方向监听 + */ + protected final void startListener() { + if (getActivity() == null || getActivity().isFinishing()) { + return; + } + mOrientationListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) { + @Override + public void onOrientationChanged(int rotation) { + // 设置竖屏 + if (getActivity() == null || getActivity().isFinishing()) { + return; + } + requestedOrientation(rotation); + } + }; + if (mOrientationListener.canDetectOrientation()) { + mOrientationListener.enable(); + } else { + mOrientationListener.disable(); + } + + } + /** + * 描述:改变屏幕方向 + */ + private void requestedOrientation(int rotation) { + if (rotation < 10 || rotation > 350) {// 手机顶部向上 + setPortOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else if (rotation < 100 && rotation > 80) {// 手机右边向上 + setLandOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); + } else if (rotation < 190 && rotation > 170) {// 手机低边向上 + setPortOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); + } else if (rotation < 280 && rotation > 260) {// 手机左边向上 + setLandOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + } + + private void setPortOrientation(int type) { + switch(mOrientation){ + case isNone: + getActivity().setRequestedOrientation(type); + break; + case isPortRait: + mOrientation = ORIENTATION.isNone; + break; + default: + break; + } + } + + private void setLandOrientation(int type) { + switch(mOrientation){ + case isNone: + getActivity().setRequestedOrientation(type); + break; + case isLandScape: + mOrientation = ORIENTATION.isNone; + break; + default: + break; + } + } + + /** + * @see Fragment#onConfigurationChanged(Configuration) + * 描述:屏幕方向改变时重新绘制界面 + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + initWindow(newConfig); + initSurFace(newConfig); + resetViews(newConfig); + } + + /** + * 描述:初始化playWindow + */ + protected void initWindow(Configuration mConfiguration) { + LayoutParams mLayoutParams = (LayoutParams) mSurfaceParentView.getLayoutParams(); + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.heightPixels; // 屏幕高度(像素) + mLayoutParams.setMargins(0, 0, 0, 0); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + } + mSurfaceParentView.setLayoutParams(mLayoutParams); + } + + /** + * 描述:初始化全屏或非全屏 + */ + private void initSurFace(Configuration mConfiguration) { + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + if (getActivity() instanceof MediaPlayActivity) { + ((MediaPlayActivity) getActivity()).toggleTitle(false); + } + MediaPlayHelper.setFullScreen(getActivity()); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + if (getActivity() instanceof MediaPlayActivity) { + ((MediaPlayActivity) getActivity()).toggleTitle(true); + } + MediaPlayHelper.quitFullScreen(getActivity()); + } + } + + /** + * 重置View,子类实现 + */ + protected void resetViews(Configuration mConfiguration) {} + + public boolean onBackPressed() { + return false; + } +} + diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoPlayOnlineFragment.java b/app/src/main/java/com/lechange/demo/videoplay/VideoPlayOnlineFragment.java new file mode 100644 index 0000000..7358870 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoPlayOnlineFragment.java @@ -0,0 +1,1023 @@ +/* + * 项目名: YYS + * 文件名: MediaPlayOnlineFragment.java + * 版权声明: + * 本系统的所有内容,包括源码、页面设计,文字、图像以及其他任何信息, + * 如未经特殊说明,其版权均属大华技术股份有限公司所有。 + * Copyright (c) 2015 大华技术股份有限公司 + * 版权所有 + */ +package com.lechange.demo.videoplay; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.media.MediaScannerConnection; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.demo.business.Business; +import com.lechange.demo.business.Business.PlayerResultCode; +import com.lechange.demo.business.Business.RetObject; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.business.entity.ChannelPTZInfo; +import com.lechange.demo.business.util.MediaPlayHelper; +import com.lechange.demo.business.util.MediaPlayHelper.DHFilesType; +import com.lechange.demo.common.ProgressDialog; +import com.lechange.demo.localvideo.RecordListActivity; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.lechange.opensdk.listener.LCOpenSDK_EventListener; +import com.lechange.opensdk.listener.LCOpenSDK_TalkerListener; +import com.lechange.opensdk.media.LCOpenSDK_Talk; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.bean.Permissions; +import com.qw.soul.permission.callbcak.CheckRequestPermissionsListener; +import com.yonsz.z1.R; +import com.yonsz.z1.utils.NetWorkSpeedUtils; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * 描述:实时视频监控 作者: lc + */ +public class VideoPlayOnlineFragment extends VideoPlayFragment implements + OnClickListener, View.OnLongClickListener { + + protected static final int MediaMain = 0; // 主码流 + protected static final int MediaAssist = 1; // 辅码流 + protected static final int RECORDER_TYPE_DAV = 3; // 录制格式DAV + protected static final int RECORDER_TYPE_MP4 = 4; // 录制格式MP4 + private static final String TAG = "MediaPlayOnlineFragment"; + /** + * 描述:开始录制 + */ + String path = null; + // 状态值 + private int bateMode = MediaAssist; + private AudioTalkStatus mOpenTalk = AudioTalkStatus.talk_close; // 语音对讲状态 + private boolean isRecord = false; // 正在录制 + private boolean isOpenSound = false; // 声音打开 + private boolean isPlaying; // 正在播放 + private boolean IsPTZOpen = false; // 云台打开 + private ChannelInfo channelInfo; + private LinearLayout mLiveMenu; + private TextView mLiveMode; + private ImageView mLivePtz; + private RelativeLayout rl_live_ptz; + private ImageView mLiveSound; + private ImageView mLiveScale; + private ImageView mLiveStop; + private LinearLayout mLiveUseLayout; + private LinearLayout mLiveBack; + private ImageView mLiveScreenshot; + private ImageView mLiveTalk; + private ImageView mLiveRecord; + private TextView netSpeedTv; + private ImageView iv_top, iv_down, iv_left, iv_right; + private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 100: + netSpeedTv.setText(msg.obj.toString()); + break; + } + super.handleMessage(msg); + } + }; + + private ImageView list_device_localvideo; + private ImageView list_device_cloudvideo; + + /** + * @param savedInstanceState + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle b = getArguments(); + if (b != null) { + String channelId = b.getString("RESID"); + channelInfo = Business.getInstance().getChannel(channelId); + } + if (channelInfo == null) { + toast("设备不存在"); + getActivity().setResult(-1); + getActivity().finish(); + } + } + + /** + * ViewGroup, Bundle) 描述: + * + * @return + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View mView = inflater.inflate(R.layout.fragment_media_live, container, + false); + // 必须赋值,父类需要使用到 + mSurfaceParentView = (ViewGroup) mView.findViewById(R.id.live_window); + // 初始化窗口大小 + LayoutParams mLayoutParams = (LayoutParams) mSurfaceParentView + .getLayoutParams(); + DisplayMetrics metric = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); + mLayoutParams.width = metric.widthPixels; // 屏幕宽度(像素) + mLayoutParams.height = metric.widthPixels * 9 / 16; + mLayoutParams.setMargins(0, 0, 0, 0); + mSurfaceParentView.setLayoutParams(mLayoutParams); + + mPlayWin.initPlayWindow(this.getActivity(), + (ViewGroup) mView.findViewById(R.id.live_window_content), 0, true); + + mProgressDialog = (ProgressDialog) mView + .findViewById(R.id.live_play_load); + mReplayTip = (TextView) mView.findViewById(R.id.live_play_pressed); + + iv_top = (ImageView) mView.findViewById(R.id.iv_top); + iv_down = (ImageView) mView.findViewById(R.id.iv_down); + iv_left = (ImageView) mView.findViewById(R.id.iv_left); + iv_right = (ImageView) mView.findViewById(R.id.iv_right); + list_device_localvideo = (ImageView) mView.findViewById(R.id.list_device_localvideo); + list_device_cloudvideo = (ImageView) mView.findViewById(R.id.list_device_cloudvideo); + netSpeedTv = (TextView) mView.findViewById(R.id.tv_net_speed); + mLiveMenu = (LinearLayout) mView.findViewById(R.id.live_menu); + mLiveMode = (TextView) mView.findViewById(R.id.live_mode); + mLivePtz = (ImageView) mView.findViewById(R.id.live_ptz); + rl_live_ptz = (RelativeLayout) mView.findViewById(R.id.rl_live_ptz); + mLiveSound = (ImageView) mView.findViewById(R.id.live_sound); + mLiveUseLayout = (LinearLayout) mView.findViewById(R.id.live_use_layout); + mLiveBack = (LinearLayout) mView.findViewById(R.id.live_video_back_layout); + mLiveScale = (ImageView) mView.findViewById(R.id.live_scale); + mLiveStop = (ImageView) mView.findViewById(R.id.live_stop); + mLiveScreenshot = (ImageView) mView.findViewById(R.id.live_screenshot); + mLiveTalk = (ImageView) mView.findViewById(R.id.live_talk); + mLiveRecord = (ImageView) mView.findViewById(R.id.live_record); + + mReplayTip.setOnClickListener(this); + mLiveMode.setOnClickListener(this); + mLivePtz.setOnClickListener(this); + mLiveSound.setOnClickListener(this); + mLiveScale.setOnClickListener(this); + mLiveStop.setOnClickListener(this); + mLiveScreenshot.setOnClickListener(this); + mLiveTalk.setOnClickListener(this); + mLiveRecord.setOnClickListener(this); + list_device_localvideo.setOnClickListener(this); + list_device_cloudvideo.setOnClickListener(this); + iv_top.setOnClickListener(this); + iv_down.setOnClickListener(this); + iv_left.setOnClickListener(this); + iv_right.setOnClickListener(this); + iv_top.setOnLongClickListener(this); + iv_down.setOnLongClickListener(this); + iv_left.setOnLongClickListener(this); + iv_right.setOnLongClickListener(this); + + new NetWorkSpeedUtils(getContext(), mHandler).startShowNetSpeed(); + return mView; + + } + + /** + * 描述:MediaPlayActivity创建完毕 + * + * @param savedInstanceState + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + listener = new MyBaseWindowListener(); + mPlayWin.setWindowListener(listener); + mPlayWin.openTouchListener(); + + // 开启横竖屏切换 + startListener(); + + // int ability = channelInfo.getAbility(); + // if ((ability & ChannelInfo.Ability.AudioTalk) == 0) { + // if (getActivity().getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_LANDSCAPE) { + // mLiveTalk.setOnClickListener(new OnClickListener() { + // @Override + // public void onClick(View v) { + // toast(R.string.video_monitor_unsupport_audio_talk); + // } + // }); + // } else if + // (getActivity().getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_PORTRAIT) { + // mLiveTalk.setOnClickListener(new OnClickListener() { + // @Override + // public void onClick(View v) { + // toast(R.string.video_monitor_unsupport_audio_talk); + // } + // }); + // } + // } + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + play(0); + } + + @Override + public void onPause() { + super.onPause(); + // 停止实时视频,无效资源号 + stop(-1); + // 关闭语音对讲 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + } + + @Override + public void onDestroyView() { + // TODO Auto-generated method stub + super.onDestroyView(); + mPlayWin.uninitPlayWindow();// 销毁底层资源 + } + + /** + * 描述:实现个性化界面 + * + * @param mConfiguration + */ + @Override + protected void resetViews(Configuration mConfiguration) { + super.resetViews(mConfiguration); + if (mConfiguration.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏 + mLiveUseLayout.setVisibility(View.GONE); + mLiveBack.setVisibility(View.GONE); + mLiveScale.setTag("LANDSCAPE"); + mLiveScale.setImageResource(R.drawable.live_btn_smallscreen); + } else if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { + mLiveUseLayout.setVisibility(View.VISIBLE); + mLiveBack.setVisibility(View.VISIBLE); + mLiveScale.setTag("PORTRAIT"); + mLiveScale.setImageResource(R.drawable.live_btn_fullscreen); + } + } + + private void sendCloudOrder(final Cloud mCloud, final boolean longclick) { + if (IsPTZOpen && isPlaying) { + // super.sendCloudOrder(mCloud, longclick); + Log.d(TAG, "-----is longclick:" + longclick); + ChannelPTZInfo.Operation operation = ChannelPTZInfo.Operation.Move; + ChannelPTZInfo.Direction direction = null; + switch (mCloud) { + case up: + direction = ChannelPTZInfo.Direction.Up; + Log.d(TAG, "-----Up"); + break; + case down: + direction = ChannelPTZInfo.Direction.Down; + Log.d(TAG, "-----Down"); + break; + case left:// 手势向左, 摄像头向右转 + direction = ChannelPTZInfo.Direction.Left; + Log.d(TAG, "-----case left"); + break; + case right: + direction = ChannelPTZInfo.Direction.Right; + Log.d(TAG, "-----case right"); + break; + case zoomin: + direction = ChannelPTZInfo.Direction.ZoomIn; + Log.d(TAG, "-----ZoomIn"); + break; + case zoomout: + direction = ChannelPTZInfo.Direction.ZoomOut; + Log.d(TAG, "-----ZoomOut"); + break; + case stop: + Log.d(TAG, "-----stop"); + operation = ChannelPTZInfo.Operation.Stop; + // direction = ChannelPTZInfo.Direction.Down; + break; + default: + break; + } + ChannelPTZInfo ptzInfo = new ChannelPTZInfo(operation, direction); + ptzInfo.setDuration(ChannelPTZInfo.Duration.Short); + if (longclick) { + ptzInfo.setDuration(ChannelPTZInfo.Duration.Long); + } + + Business.getInstance().AsynControlPtz(channelInfo.getUuid(), + ptzInfo, new Handler() { + @Override + public void handleMessage(Message msg) { + if (!isAdded() || getActivity() == null) { + Log.d(TAG, "*******page not exits"); + return; + } + // Log.d(TAG, + // "-----control callback what:"+msg.what); + RetObject retObject = (RetObject) msg.obj; + if (msg.what == 0) { + Log.d(TAG, "-----control result: true"); + } else + toast(retObject.mMsg); + } + }); + } + } + + /** + * 描述:开始播放 + */ + public void play(int strRes) { + // if (isPlaying) { + stop(-1); + // } + if (strRes > 0) { + showLoading(strRes); + } else { + showLoading(R.string.common_loading); + } + mPlayWin.playRtspReal( + Business.getInstance().getToken(), + channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo + .getEncryptKey() : channelInfo.getDeviceCode(), + channelInfo.getIndex(), bateMode, true);//最后一个参数为true,表示使用长连接 + } + + /** + * 描述:停止播放 + */ + public void stop(final int res) { + // 关闭播放加载控件 + mProgressDialog.setStop(); + + if (isRecord) { + stopRecord();// 关闭录像 + } + + if (isOpenSound) { + closeAudio();// 关闭音频 + isOpenSound = false; + mLiveSound.setImageResource(R.drawable.live_btn_sound_off); + } + mPlayWin.stopRtspReal(false);// 关闭视频 + isPlaying = false; + + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + if (res > 0) + showErrorTip(res); + } + } + }); + } + } + + /** + * 描述:抓拍图像 + */ + public String capture() { + String captureFilePath = null; + // 判断SD卡是否已存在 + // SD卡容量检查 + // FIXME 检查设备是否在线 + // 抓图 + String channelName = null; + if (channelInfo != null) { + channelName = channelInfo.getName(); + } else { + channelName = ""; + } + + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + + captureFilePath = MediaPlayHelper.getCaptureAndVideoPath( + DHFilesType.DHImage, channelName); + int ret = mPlayWin.snapShot(captureFilePath); + if (ret == retOK) { + // 扫描到相册中 + MediaScannerConnection.scanFile(getActivity(), + new String[]{captureFilePath}, null, null); + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_success, + Toast.LENGTH_SHORT).show(); + } else { + captureFilePath = null; + Toast.makeText(getActivity(), + R.string.video_monitor_image_capture_failed, + Toast.LENGTH_SHORT).show(); + } + return captureFilePath; + } + + public boolean startRecord() { + if (!isPlaying) { + toast(R.string.video_monitor_video_record_failed); + return false; + } + // 判断SD卡是否已存在 + // SD卡容量检查 + + // FIXME 要做 ~~~~检查设备是否在线 + + // 录像的路径 + String channelName = null; + if (channelInfo != null) { + channelName = channelInfo.getName(); + } else { + channelName = ""; + } + + // 去除通道中在目录中的非法字符 + channelName = channelName.replace("-", ""); + + path = MediaPlayHelper.getCaptureAndVideoPath(DHFilesType.DHVideo, + channelName); + int recordType = 1; + long spaceRemain = 0x7FFFFFFF; //保留字段 + // 开始录制 1 + int ret = mPlayWin.startRecord(path, recordType, spaceRemain); + if (ret != retOK) { + toast(R.string.video_monitor_video_record_failed); + return false; + } + + return true; + } + + /** + * 关闭录像 + */ + public void stopRecord() { + mPlayWin.stopRecord(); + isRecord = false; + toast(getString(R.string.video_monitor_video_record_success)); + mLiveRecord.setImageResource(R.drawable.icon_videotape_nor); + + MediaScannerConnection.scanFile(getActivity(), new String[]{path}, + null, null); + } + + /** + * 打开声音 + */ + public boolean openAudio() { + return mPlayWin.playAudio() == retOK; + } + + /** + * 关闭声音 + */ + public boolean closeAudio() { + return mPlayWin.stopAudio() == retOK; + } + + /** + * 描述:开始对讲 + */ + public void startTalk() { + if (!isPlaying) { + toast(R.string.video_monitor_talk_open_error); + return; + } + + toastWithImg(getString(R.string.video_monitor_media_talk), + R.drawable.live_pic_talkback); + + // 替换图片 + mLiveTalk.setImageResource(R.drawable.icon_dialogue_pre); + mOpenTalk = AudioTalkStatus.talk_opening; + // 关闭扬声器 默认为关 + if (isOpenSound) { + closeAudio(); + mLiveSound.setImageResource(R.drawable.live_btn_sound_off); + } + mLiveSound.setClickable(false); + LCOpenSDK_Talk.setListener(new AudioTalkerListener()); + LCOpenSDK_Talk.playTalk( + Business.getInstance().getToken(), + channelInfo.getDeviceCode(), + channelInfo.getEncryptKey() != null ? channelInfo + .getEncryptKey() : channelInfo.getDeviceCode(), true);//对讲使用长连接 + } + + /** + * 描述:停止对讲 + */ + public void stopTalk() { + Log.d("playAudio", "stopTalk press"); + toast(R.string.video_monitor_media_talk_close); + // 替换图片 + mLiveTalk.setImageResource(R.drawable.icon_dialogue_nor); + LCOpenSDK_Talk.stopTalk(); + // 解决gc回收问题 + LCOpenSDK_Talk.setListener(null); + mOpenTalk = AudioTalkStatus.talk_close; + // 开启扬声器 + if (isOpenSound && isPlaying) { + openAudio(); + mLiveSound.setImageResource(R.drawable.live_btn_sound_on); + } + mLiveSound.setClickable(true); + } + + @Override + public void onClick(View view) { + // TODO Auto-generated method stub + switch (view.getId()) { + case R.id.live_ptz: + if (!isPlaying) { + return; + } + if ((channelInfo.getAbility() & ChannelInfo.Ability.PTZ) != 0) { + if (IsPTZOpen) { + // 测试专用 + // mPlayWin.setStreamCallback(0); + IsPTZOpen = false; + mLivePtz.setImageResource(R.drawable.icon_control_nor); + rl_live_ptz.setVisibility(View.GONE); + } else { + // 测试专用 + // mPlayWin.setStreamCallback(1); + IsPTZOpen = true; + mLivePtz.setImageResource(R.drawable.icon_control_pre); + rl_live_ptz.setVisibility(View.VISIBLE); + } + } else { + toast(R.string.toast_device_ability_no_ptz); + } + break; + case R.id.live_scale: + if ("LANDSCAPE".equals(mLiveScale.getTag())) { + mOrientation = ORIENTATION.isPortRait; + getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else { + mOrientation = ORIENTATION.isLandScape; + getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + break; + case R.id.live_stop: + if (isPlaying) { + // 停止实时视频,无效资源号 + stop(-1); + // 关闭语音对讲 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + } else { + play(0); + } + break; + case R.id.live_mode: + // if(isPlaying) //播放是个异步的,多次点击会使停止播放顺序乱掉 + if (mOpenTalk == AudioTalkStatus.talk_opening) { + stopTalk(); + } + // 高清切换到流畅 + if (bateMode == MediaMain) { + bateMode = MediaAssist; + mLiveMode.setText("流畅"); + play(R.string.video_monitor_change_stream_normal); + }// 流畅切换到高清 + else if (bateMode == MediaAssist) { + bateMode = MediaMain; + mLiveMode.setText("高清"); + play(R.string.video_monitor_change_stream_hd); + } + break; + case R.id.live_talk: + switch (mOpenTalk) { + case talk_open: + case talk_opening: + stopTalk(); + break; + case talk_close: + SoulPermission.getInstance().checkAndRequestPermissions( + Permissions.build(Manifest.permission.RECORD_AUDIO), + //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead + new CheckRequestPermissionsListener() { + @Override + public void onAllPermissionOk(Permission[] allPermissions) { + startTalk(); + } + + @Override + public void onPermissionDenied(Permission[] refusedPermissions) { + Toast.makeText(getContext(), "此功能需要开启麦克风权限", Toast.LENGTH_LONG).show(); + } + }); + break; + default: + break; + } + break; + case R.id.live_sound: + if (mOpenTalk != AudioTalkStatus.talk_close || !isPlaying) { + toast(R.string.video_monitor_load_talk_sound_error); + } else { + if (isOpenSound) { + boolean result = closeAudio(); + if (result) { + mLiveSound + .setImageResource(R.drawable.live_btn_sound_off); + toast(R.string.video_monitor_sound_close); + isOpenSound = false; + } + } else { + boolean result = openAudio(); + if (result) { + mLiveSound + .setImageResource(R.drawable.live_btn_sound_on); + toast(R.string.video_monitor_sound_open); + isOpenSound = true; + } + } + } + break; + case R.id.live_screenshot: + mLiveScreenshot + .setImageResource(R.drawable.icon_photograph_pre); + capture(); + mLiveScreenshot + .setImageResource(R.drawable.icon_photograph_nor); + break; + case R.id.live_record: + if (!isRecord) { + boolean result = startRecord(); + if (result) { + toastWithImg( + getString(R.string.video_monitor_media_record), + R.drawable.live_pic_record); + isRecord = true; + mLiveRecord + .setImageResource(R.drawable.icon_videotape_pre); + } + } else { + stopRecord(); + } + break; + case R.id.live_play_pressed: + play(-1); + break; + case R.id.list_device_cloudvideo: + Intent intent = new Intent(getContext(), RecordListActivity.class); + intent.putExtra("UUID", getActivity().getIntent().getExtras().get("UUID").toString()); + intent.putExtra("MEDIA_TITLE", R.string.cloud_records_name); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_CLOUD_RECORD); + startActivity(intent); + break; + case R.id.list_device_localvideo: + Intent intent1 = new Intent(getContext(), RecordListActivity.class); + intent1.putExtra("UUID", getActivity().getIntent().getExtras().get("UUID").toString()); + intent1.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_REMOTE_RECORD); + intent1.putExtra("MEDIA_TITLE", R.string.local_records_name); + startActivity(intent1); + break; + case R.id.iv_top: + sendCloudOrder(Cloud.up, false); + break; + case R.id.iv_down: + sendCloudOrder(Cloud.down, false); + break; + case R.id.iv_left: + sendCloudOrder(Cloud.left, false); + break; + case R.id.iv_right: + sendCloudOrder(Cloud.right, false); + break; + default: + break; + } + } + + @Override + public boolean onLongClick(View v) { + switch (v.getId()) { + case R.id.iv_top: + sendCloudOrder(Cloud.up, false); + break; + case R.id.iv_down: + sendCloudOrder(Cloud.down, false); + break; + case R.id.iv_left: + sendCloudOrder(Cloud.left, false); + break; + case R.id.iv_right: + sendCloudOrder(Cloud.right, false); + break; + } + return false; + } + + public enum Cloud { + up, down, left, right, leftUp, rightUp, leftDown, RightDown, zoomin, zoomout, stop + } + + private enum AudioTalkStatus { + talk_close, talk_opening, talk_open + } + + class MyBaseWindowListener extends LCOpenSDK_EventListener { + @Override + public void onPlayerResult(int index, String code, int type) { + if (type == Business.RESULT_SOURCE_OPENAPI) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_play_error); + } + } + }); + } + } else { + if (code.equals(PlayerResultCode.STATE_PACKET_FRAME_ERROR) + || code.equals(PlayerResultCode.STATE_RTSP_TEARDOWN_ERROR) + || code.equals(PlayerResultCode.STATE_RTSP_AUTHORIZATION_FAIL) + || code.equals(PlayerResultCode.STATE_RTSP_KEY_MISMATCH)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + stop(R.string.video_monitor_play_error); + } + } + }); + } + } + } + } + + @Override + public void onPlayBegan(int index) { + // TODO Auto-generated method stub + // 显示码率 + // if (mHander != null) { + // mHander.post(MediaPlayOnlineFragment.this); + // } + isPlaying = true; + // 建立码流,自动开启音频 + if (mHander != null) { + mHander.post(new Runnable() { + @Override + public void run() { + if (isAdded()) { + // showLoading(R.string.video_monitor_data_cache); + onClick(mLiveSound); + } + } + }); + } + // 关闭播放加载控件 + mProgressDialog.setStop(); + } + + // public void onReceiveData(int len) { + // // 流量统计 + // mTotalFlow += len; + // } + @Override + public void onStreamCallback(int index, byte[] data, int len) { + // Log.d(TAG, "LCOpenSDK_EventListener::onStreamCallback-size : " + + // len); + try { + String path = Environment.getExternalStorageDirectory() + .getPath() + "/streamCallback.ts"; + FileOutputStream fout = new FileOutputStream(path, true); + fout.write(data); + fout.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onWindowLongPressBegin(int index, Direction dir, float dx, + float dy) { + sendCloudOrder(direction2Cloud(dir), true); + } + + @Override + public void onWindowLongPressEnd(int index) { + sendCloudOrder(Cloud.stop, false); + } + + // 电子缩放 + @Override + public void onZooming(int index, float dScale) { + if (IsPTZOpen == false) { + mPlayWin.doScale(dScale); + } + + } + + // 云台缩放 + @Override + public void onZoomEnd(int index, ZoomType zoom) { + Log.d(TAG, "onZoomEnd" + zoom); + if (IsPTZOpen == false) { + return; + } + // TODO Auto-generated method stub + sendCloudOrder(zoom == ZoomType.ZOOM_IN ? Cloud.zoomin + : Cloud.zoomout, false); + } + + // 滑动开始 + @Override + public boolean onSlipBegin(int index, Direction dir, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin "); + } + sendCloudOrder(direction2Cloud(dir), false); + return true; + } + + // 滑动中 + @Override + public void onSlipping(int index, Direction dir, float prex, + float prey, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin onFlinging"); + mPlayWin.doTranslate(dx, dy); + } + } + + // 滑动结束 + @Override + public void onSlipEnd(int index, Direction dir, float dx, float dy) { + if (IsPTZOpen == false && mPlayWin.getScale() > 1) { + Log.d(TAG, "onflingBegin onFlingEnd"); + return; + } + + // sendCloudOrder(Cloud.stop, false); + } + + private Cloud direction2Cloud(Direction dir) { + Cloud cloud = null; + switch (dir) { + case Up: + cloud = Cloud.up; + break; + case Down: + cloud = Cloud.down; + break; + case Left: + cloud = Cloud.left; + break; + case Right: + cloud = Cloud.right; + break; + case Left_up: + cloud = Cloud.leftUp; + break; + case Left_down: + cloud = Cloud.leftDown; + break; + case Right_up: + cloud = Cloud.rightUp; + break; + case Right_down: + cloud = Cloud.RightDown; + break; + default: + break; + } + return cloud; + } + + public void onWindowDBClick(int index, float dx, float dy) { + // TODO Auto-generated method stub + switch (mLiveMenu.getVisibility()) { + case View.GONE: + mLiveMenu.setVisibility(View.VISIBLE); + break; + case View.VISIBLE: + mLiveMenu.setVisibility(View.GONE); + break; + default: + break; + } + } + + } + + class AudioTalkerListener extends LCOpenSDK_TalkerListener { + /** + * 描述:对讲状态获取 + */ + @Override + public void onTalkResult(String error, int type) { + // TODO Auto-generated method stub + if (type == Business.RESULT_SOURCE_OPENAPI + || error.equals(AUDIO_TALK_ERROR) + || error.equals(PlayerResultCode.STATE_PACKET_FRAME_ERROR) + || error.equals(PlayerResultCode.STATE_RTSP_TEARDOWN_ERROR) + || error.equals(PlayerResultCode.STATE_RTSP_AUTHORIZATION_FAIL)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + // 提示对讲打开失败 + toast(R.string.video_monitor_talk_open_error); + stopTalk();// 关闭播放 + } + } + }); + } + } else if (error.equals(PlayerResultCode.STATE_RTSP_PLAY_READY)) { + if (mHander != null) { + mHander.post(new Runnable() { + public void run() { + if (isAdded()) { + // 提示对讲打开成功 + toast(R.string.video_monitor_media_talk_ready); + } + } + }); + } + mOpenTalk = AudioTalkStatus.talk_open; + } + + } + + @Override + public void onTalkPlayReady() { + // TODO Auto-generated method stub + + } + + @Override + public void onAudioRecord(byte[] pData, int length, int audioFormat, int sampleRate, int sampleDepth) { + super.onAudioRecord(pData, length, audioFormat, sampleRate, sampleDepth); + BufferedOutputStream bufferedOutputStream; + FileOutputStream fileOutputStream; + String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioFile.pcm"; + File file = new File(filePath); + if (file.exists()) { + try { + fileOutputStream = new FileOutputStream(file, true); + bufferedOutputStream = new BufferedOutputStream(fileOutputStream); + try { + bufferedOutputStream.write(pData); + bufferedOutputStream.flush(); + bufferedOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + + } + } else { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public void onAudioReceive(byte[] pData, int length, int audioFormat, int sampleRate, int sampleDepth) { + super.onAudioReceive(pData, length, audioFormat, sampleRate, sampleDepth); + } + + } +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoRecycler.java b/app/src/main/java/com/lechange/demo/videoplay/VideoRecycler.java new file mode 100644 index 0000000..e1c006a --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoRecycler.java @@ -0,0 +1,54 @@ +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; + +import com.yonsz.z1.R; + + +public class VideoRecycler extends RecyclerView { + + public VideoRecycler(Context context) { + this(context, null); + } + + public VideoRecycler(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public VideoRecycler(Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initView(); + } + + private void initView() { + setBackgroundColor(getResources().getColor(R.color.colorAccent)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + int width = 0; + int height = 0; + + width = widthSize; + switch (heightMode) { + case MeasureSpec.EXACTLY: + height = heightSize; + break; + default: + height = widthSize; + break; + } + if (height > heightSize) { + height = heightSize; + } + setMeasuredDimension(width, height); + } +} diff --git a/app/src/main/java/com/lechange/demo/videoplay/VideoTextureView.java b/app/src/main/java/com/lechange/demo/videoplay/VideoTextureView.java new file mode 100644 index 0000000..b8e335c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/videoplay/VideoTextureView.java @@ -0,0 +1,55 @@ +package com.lechange.demo.videoplay; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.TextureView; + +public class VideoTextureView extends TextureView { + public String TAG = getClass().getSimpleName(); + + public VideoTextureView(Context context) { + this(context, null); + } + + public VideoTextureView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + int width = 0; + int height = 0; + // Log.d(TAG, "onMeasure: widthMode-->" + widthMode + "heightMode-->" + heightMode); + // if (widthMode == MeasureSpec.EXACTLY) { + // // Parent has told us how big to be. So be it. + // width = widthSize; + // } else if (widthMode == MeasureSpec.AT_MOST) { + // width = 200; + // } else { + // width = widthSize; + // Log.d(TAG, "onMeasure: width else"); + // } + width = widthSize; + height = width * 3 / 4; + if (height > heightSize) { + height = heightSize; + } + + // if (heightMode == MeasureSpec.EXACTLY) { + // // Parent has told us how big to be. So be it. + // height = heightSize; + // } else if (widthMode == MeasureSpec.AT_MOST) { + // height = width * 3 / 4; + // } else { + // height = heightSize; + // } + // Log.d(TAG, "onMeasure: width-->" + width + "height-->" + height); + setMeasuredDimension(width, height); + } + +} diff --git a/app/src/main/java/com/lechange/demo/view/Direction.java b/app/src/main/java/com/lechange/demo/view/Direction.java new file mode 100644 index 0000000..aa879f5 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/Direction.java @@ -0,0 +1,9 @@ +package com.lechange.demo.view; + +/** + * 云台移动方向 8个方向 + */ + +public enum Direction { + Up, Down, Left, Right, Left_up, Left_down, Right_up, Right_down +} diff --git a/app/src/main/java/com/lechange/demo/view/LcCloudRudderView.java b/app/src/main/java/com/lechange/demo/view/LcCloudRudderView.java new file mode 100644 index 0000000..14ca4c6 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/LcCloudRudderView.java @@ -0,0 +1,437 @@ +package com.lechange.demo.view; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PaintFlagsDrawFilter; +import android.graphics.Point; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +import com.yonsz.z1.R; + + +/** + * 云台控制面板 + */ +@SuppressLint("DrawAllocation") +public class LcCloudRudderView extends View { + private Point mRockerPosition; + private final Point mCtrlPoint = new Point(100, 100); + private float mSolidRudderRadius = 60; + private float mChangeRudderRadius = 60; + private int mWheelRadius = 100; + private RudderListener listener = null; + private int mDownState; + private int firstX, firstY; + private int dCtrlPointx, dCtrlPointy; + private static Bitmap mBigCircleBg; + private static Bitmap mBigCircleBg_h; + private static Bitmap mSmallCircleBg; + private static Bitmap mBigCircleLandScapeBg; + private static Bitmap mBigCircleLandScapeBg_h; + private static Bitmap mSmallCircleLandScapeBg; + private float mAngle; + private boolean mShowDirectPic; + private boolean mCanTouch = true; + private boolean mLandScapeOnly = false; + //支持四方向 + private boolean mSupportFourDirection=true; + + + public LcCloudRudderView(Context context) { + super(context); + init(); + } + + public LcCloudRudderView(Context context, AttributeSet attrs) { + super(context, attrs); + setAttribute(context, attrs); + init(); + } + + private void setAttribute(Context context, AttributeSet attrs) { + if (attrs != null) { + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.LcCloudRudderView); + mLandScapeOnly = array.getBoolean(R.styleable.LcCloudRudderView_landscape_only, false); + array.recycle(); + } + } + + private void init() { + setBackgroundColor(Color.TRANSPARENT); + this.setKeepScreenOn(true); + mCanTouch = true; + Paint mPaint = new Paint(); + mPaint.setColor(Color.GREEN); + mPaint.setAntiAlias(true); + mRockerPosition = new Point(mCtrlPoint); + setFocusable(true); + setFocusableInTouchMode(true); + + if (mBigCircleBg == null) { + mBigCircleBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_cloudstage_direction_default); + } + + if (mBigCircleBg_h == null) { + mBigCircleBg_h = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_cloudstage_direction_up); + } + + if (mSmallCircleBg == null) { + mSmallCircleBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_cloudstage_direction_button); + } + if (mBigCircleLandScapeBg == null) { + mBigCircleLandScapeBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_video_cloudstage_direction_default); + } + + if (mBigCircleLandScapeBg_h == null) { + mBigCircleLandScapeBg_h = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_video_cloudstage_direction_up); + } + + if (mSmallCircleLandScapeBg == null) { + mSmallCircleLandScapeBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_video_cloudstage_direction_button); + } + mSolidRudderRadius = (float) (mSmallCircleBg.getHeight() / 2.0); + } + + /** + * 重置云台背景图,为了区分4方向和8方向 + */ + public void resetCircleBg() { + if (mSupportFourDirection) { + if (mBigCircleBg != null) { + mBigCircleBg.recycle(); + mBigCircleBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_cloudstage_direction_default_four); + } + if (mBigCircleLandScapeBg != null) { + mBigCircleLandScapeBg.recycle(); + mBigCircleLandScapeBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_video_cloudstage_direction_default_four); + } + } else { + if (mBigCircleBg != null) { + mBigCircleBg.recycle(); + mBigCircleBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_cloudstage_direction_default); + } + if (mBigCircleLandScapeBg != null) { + mBigCircleLandScapeBg.recycle(); + mBigCircleLandScapeBg = BitmapFactory.decodeResource(getResources(), R.mipmap.play_module_video_cloudstage_direction_default); + } + } + invalidate(); + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + Bitmap bigCirclebg = mLandScapeOnly ? mBigCircleLandScapeBg : mBigCircleBg; + if (bigCirclebg == null || bigCirclebg.isRecycled()) { + return; + } + + try { + canvas.save(); + canvas.translate(mCtrlPoint.x, mCtrlPoint.y); + canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG)); + + Paint paint = new Paint(); + paint.setAntiAlias(true); + Rect srcRect = new Rect(0, 0, bigCirclebg.getWidth(), bigCirclebg.getHeight()); + RectF dstRcctF = new RectF(-mWheelRadius, -mWheelRadius, mWheelRadius, mWheelRadius); + canvas.drawBitmap(bigCirclebg, srcRect, dstRcctF, paint); + canvas.restore(); + + if (mShowDirectPic) { + + Bitmap bigCircleBg_h = mLandScapeOnly ? mBigCircleLandScapeBg_h : mBigCircleBg_h; + canvas.save(); + canvas.translate(mCtrlPoint.x, mCtrlPoint.y); + canvas.rotate(mAngle); + Rect srcRect2 = new Rect(0, 0, bigCircleBg_h.getWidth(), bigCircleBg_h.getHeight()); + RectF dstRcctF2 = new RectF(-mWheelRadius, -mWheelRadius, mWheelRadius, mWheelRadius); + canvas.drawBitmap(bigCircleBg_h, srcRect2, dstRcctF2, paint); + canvas.restore(); + } + + Bitmap smallCircleBg = mLandScapeOnly ? mSmallCircleLandScapeBg : mSmallCircleBg; + Rect srcRect3 = new Rect(0, 0, smallCircleBg.getWidth(), smallCircleBg.getHeight()); + RectF dstRcctF3 = new RectF(mRockerPosition.x - mChangeRudderRadius, mRockerPosition.y - mChangeRudderRadius, mRockerPosition.x + mChangeRudderRadius, mRockerPosition.y + mChangeRudderRadius); + canvas.drawBitmap(smallCircleBg, srcRect3, dstRcctF3, paint); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + + } + } + + + public void setRudderListener(RudderListener rockerListener) { + listener = rockerListener; + } + + public boolean isSupportFourDirection() { + return mSupportFourDirection; + } + + /** + * 设置是否支持四方向云台 + * + * @param supportFourDirection + */ + public void setSupportFourDirection(boolean supportFourDirection) { + this.mSupportFourDirection = supportFourDirection; + resetCircleBg(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!mCanTouch) { + return true; + } + int len = (int) Math.sqrt(Math.pow(mCtrlPoint.x - event.getX(), 2) + Math.pow(mCtrlPoint.y - event.getY(), 2)); + switch (event.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + if (len < mWheelRadius / 2) { + if (listener != null) { + listener.onSteeringWheelChangedBegin(); + } + mDownState = 1; + firstX = (int) event.getX(); + firstY = (int) event.getY(); + dCtrlPointx = firstX - mCtrlPoint.x; + dCtrlPointy = firstY - mCtrlPoint.y; + } else if (len >= (mWheelRadius / 2) && len <= mWheelRadius) { + if (listener != null) { + listener.onSteeringWheelChangedBegin(); + } + mDownState = 2; + mShowDirectPic = true; + firstX = (int) event.getX(); + firstY = (int) event.getY(); + dCtrlPointx = firstX - mCtrlPoint.x; + dCtrlPointy = firstY - mCtrlPoint.y; + float radian = getRadian(mCtrlPoint, new Point((int) event.getX(), (int) event.getY())); + int angle = LcCloudRudderView.this.getAngleConvert(radian); + Direction direction = directConvert(angle); + if (listener != null) { + listener.onSteeringWheelChangedSingle(direction); + } + } + invalidate(); + break; + case MotionEvent.ACTION_MOVE: + if (mDownState == 1) { + int dragLen = (int) Math.sqrt(Math.pow(firstX - event.getX(), 2) + Math.pow(firstY - event.getY(), 2)); + if (dragLen <= mWheelRadius - mChangeRudderRadius / 2) { + mRockerPosition.set((int) event.getX() - dCtrlPointx, (int) event.getY() - dCtrlPointy); + } else { + int cutRadius = (int) (mWheelRadius - mChangeRudderRadius / 2); + float radian = getRadian(mCtrlPoint, new Point((int) event.getX() - (firstX - mCtrlPoint.x), (int) event.getY() - (firstY - mCtrlPoint.y))); + mRockerPosition = new Point(mCtrlPoint.x + (int) (cutRadius * Math.cos(radian)), mCtrlPoint.y + (int) (cutRadius * Math.sin(radian))); + + } + float radian = getRadian(mCtrlPoint, new Point((int) event.getX(), (int) event.getY())); + int angle = LcCloudRudderView.this.getAngleConvert(radian); + Direction direction = directConvert(angle); + if (dragLen >= (mWheelRadius / 2)) {//超过 边界再发送命令 + mShowDirectPic = true; + if (listener != null) { + listener.onSteeringWheelChangedContinue(direction); + } + } else {//未超过边界,发送停止命令,图标不显示按下 + mShowDirectPic = false; + if (listener != null) { + listener.onSteeringWheelChangedContinue(null); + } + } + } else if (mDownState == 2) { + if (listener != null) { + if (len >= (mWheelRadius / 2) && len <= mWheelRadius) { + mShowDirectPic = true; + float radian = getRadian(mCtrlPoint, new Point((int) event.getX(), (int) event.getY())); + int angle = LcCloudRudderView.this.getAngleConvert(radian); + directConvert(angle); + } else { + mShowDirectPic = false; + } + } + + } + invalidate(); + break; + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + if (mDownState == 1) { + mShowDirectPic = false; + mRockerPosition = new Point(mCtrlPoint); + if (listener != null) { + listener.onSteeringWheelChangedContinue(null); + listener.onSteeringWheelChangedEnd(); + } + + } else if (mDownState == 2) { + mShowDirectPic = false; + float radian = getRadian(mCtrlPoint, new Point((int) event.getX(), (int) event.getY())); + int angle = LcCloudRudderView.this.getAngleConvert(radian); + Direction direction = directConvert(angle); + mRockerPosition = new Point(mCtrlPoint); + if (listener != null) { + //listener.onSteeringWheelChangedSingle(direction); + listener.onSteeringWheelChangedEnd(); + } + } + firstX = 0; + firstY = 0; + mDownState = 0; + invalidate(); + break; + default: + break; + } + return true; + } + + private static float getRadian(Point a, Point b) { + float lenA = b.x - a.x; + float lenB = b.y - a.y; + float lenC = (float) Math.sqrt(lenA * lenA + lenB * lenB); + float ang = (float) Math.acos(lenA / lenC); + ang = ang * (b.y < a.y ? -1 : 1); + return ang; + } + + private Direction directConvert(int angle) { + Direction direction = Direction.Left; + if (mSupportFourDirection) { + if (angle <= 45 || angle > 315) { + direction = Direction.Right; + mAngle = 90; + } else if (angle > 45 && angle <= 135) { + direction = Direction.Up; + mAngle = 0; + } else if (angle > 135 && angle <= 225) { + direction = Direction.Left; + mAngle = 270; + } else if (angle > 225 && angle <= 315) { + direction = Direction.Down; + mAngle = 180; + } + + } else { + + if (angle <= 22.5 || angle > 337.5) { + direction = Direction.Right; + mAngle = 90; + } else if (angle > 22.5 && angle <= 67.5) { + direction = Direction.Right_up; + mAngle = 45; + } else if (angle > 67.5 && angle <= 112.5) { + direction = Direction.Up; + mAngle = 0; + } else if (angle > 112.5 && angle <= 157.5) { + direction = Direction.Left_up; + mAngle = 315; + } else if (angle > 157.5 && angle <= 202.5) { + direction = Direction.Left; + mAngle = 270; + } else if (angle > 202.5 && angle <= 247.5) { + direction = Direction.Left_down; + mAngle = 225; + } else if (angle > 247.5 && angle <= 292.5) { + direction = Direction.Down; + mAngle = 180; + } else if (angle > 292.5 && angle <= 337.5) { + direction = Direction.Right_down; + mAngle = 135; + } + } + + return direction; + } + + private int getAngleConvert(float radian) { + int tmp = (int) Math.round(radian / Math.PI * 180); + if (tmp < 0) { + return -tmp; + } else { + return 180 + (180 - tmp); + } + } + + public interface RudderListener { + void onSteeringWheelChangedBegin(); + + void onSteeringWheelChangedContinue(Direction direction); + + void onSteeringWheelChangedSingle(Direction direction); + + void onSteeringWheelChangedEnd(); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + int len = Math.min(w, h) / 2; + mWheelRadius = (int) (len - mSolidRudderRadius / 2); + mChangeRudderRadius = mWheelRadius * 17 / 40; + + mCtrlPoint.set(w / 2, h / 2); + mRockerPosition.set(w / 2, h / 2); + postInvalidate(); + } + + public void enable(boolean enabled) { + if (mCanTouch && !enabled) { + mShowDirectPic = false; + mRockerPosition = new Point(mCtrlPoint); + invalidate(); + if (listener != null) { + listener.onSteeringWheelChangedContinue(null); + listener.onSteeringWheelChangedEnd(); + } + } + setEnabled(enabled); + setAlpha(enabled ? 1f : 0.5f); + mCanTouch = enabled; + } + + public void unit() { + Bitmap bigCirclebg = mLandScapeOnly ? mBigCircleLandScapeBg : mBigCircleBg; + Bitmap bigCircleBg_h = mLandScapeOnly ? mBigCircleLandScapeBg_h : mBigCircleBg_h; + Bitmap smallCircleBg = mLandScapeOnly ? mSmallCircleLandScapeBg : mSmallCircleBg; + if (bigCirclebg != null) { + bigCirclebg.recycle(); + if (mLandScapeOnly) { + mBigCircleLandScapeBg = null; + } else { + mBigCircleBg = null; + } + } + if (bigCircleBg_h != null) { + bigCircleBg_h.recycle(); + if (mLandScapeOnly) { + mBigCircleLandScapeBg_h = null; + } else { + mBigCircleBg_h = null; + } + } + if (smallCircleBg != null) { + smallCircleBg.recycle(); + if (mLandScapeOnly) { + mSmallCircleLandScapeBg = null; + } else { + mSmallCircleBg = null; + } + } + listener = null; + } +} diff --git a/app/src/main/java/com/lechange/demo/view/LcPopupWindow.java b/app/src/main/java/com/lechange/demo/view/LcPopupWindow.java new file mode 100644 index 0000000..b9b8227 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/LcPopupWindow.java @@ -0,0 +1,63 @@ +package com.lechange.demo.view; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; + +import com.common.openapi.entity.DeviceDetailListData; +import com.lechange.demo.adapter.PixelListAdapter; +import com.yonsz.z1.R; + +import java.util.List; + +/** + * 显示支持分辨率的弹框 + */ +public class LcPopupWindow extends PopupWindow { + + private RecyclerView pixelRecycle; +// private ArrayList mData = new ArrayList<>(); + private PixelListAdapter mPixelAdapter; + + public LcPopupWindow(Context context, List dataList) { + super(context); + setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); + setOutsideTouchable(true); + setFocusable(true); + setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + View contentView = LayoutInflater.from(context).inflate(R.layout.view_pixel_popwindow, + null, false); + pixelRecycle = contentView.findViewById(R.id.pixel_recycle); + pixelRecycle.setLayoutManager(new LinearLayoutManager(context)); + mPixelAdapter = new PixelListAdapter(context,dataList); + pixelRecycle.setAdapter(mPixelAdapter); + setContentView(contentView); + } + + public void setPixelRecycleListener(onRecyclerViewItemClickListener listener){ + mPixelAdapter.setOnItemClickListener(listener); + } + + @SuppressWarnings("ResourceType") + public int makeDropDownMeasureSpec(int measureSpec) { + int mode; + if (measureSpec == ViewGroup.LayoutParams.WRAP_CONTENT) { + mode = View.MeasureSpec.UNSPECIFIED; + } else { + mode = View.MeasureSpec.EXACTLY; + } + return View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(measureSpec), mode); + } + + public interface onRecyclerViewItemClickListener{ + void onItemClick(RecyclerView parent, View view, int position, String name, int imageSize, int streamType); + } + +} diff --git a/app/src/main/java/com/lechange/demo/view/LcProgressBar.java b/app/src/main/java/com/lechange/demo/view/LcProgressBar.java new file mode 100644 index 0000000..bcc5542 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/LcProgressBar.java @@ -0,0 +1,68 @@ +package com.lechange.demo.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.widget.ProgressBar; + +import com.yonsz.z1.R; + + +public class LcProgressBar extends ProgressBar { + + private final Paint progressPaint = new Paint(); + private Context context; + private String content = getResources().getString(R.string.lc_demo_device_update); + private int textColor = getResources().getColor(R.color.lc_demo_color_0B8C0D); + + public LcProgressBar(Context context) { + this(context, null); + } + + public LcProgressBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LcProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.context = context; + init(); + } + + private void init() { + progressPaint.setStrokeWidth(4); + progressPaint.setStyle(Paint.Style.FILL); + progressPaint.setColor(textColor); + progressPaint.setTextSize(dip2Px(context.getResources().getDimensionPixelSize(R.dimen.x12))); + progressPaint.setTextAlign(Paint.Align.CENTER); + progressPaint.setAntiAlias(true); + } + + private int dip2Px(int dip) { + float density = context.getResources().getDisplayMetrics().density; + int px = (int) (dip * density + 0.5f); + return px; + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + Rect rect = new Rect(); + progressPaint.getTextBounds(this.content, 0, this.content.length(), rect); + int x = (getWidth() / 2) ; + int y = (getHeight() / 2) - rect.centerY(); + canvas.drawText(this.content, x, y, this.progressPaint); + } + + public void setText(String text) { + this.content = text; + postInvalidate(); + } + public void setTextColor(int color) { + this.textColor = color; + progressPaint.setColor(textColor); + postInvalidate(); + } +} diff --git a/app/src/main/java/com/lechange/demo/view/LcPullToRefreshRecyclerView.java b/app/src/main/java/com/lechange/demo/view/LcPullToRefreshRecyclerView.java new file mode 100644 index 0000000..ae71ac2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/LcPullToRefreshRecyclerView.java @@ -0,0 +1,87 @@ +package com.lechange.demo.view; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.View; + +import com.lechange.pulltorefreshlistview.Mode; +import com.lechange.pulltorefreshlistview.Orientation; +import com.lechange.pulltorefreshlistview.PullToRefreshBase; + +public class LcPullToRefreshRecyclerView extends PullToRefreshBase { + public LcPullToRefreshRecyclerView(Context context) { + super(context); + } + + public LcPullToRefreshRecyclerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LcPullToRefreshRecyclerView(Context context, Mode mode) { + super(context, mode); + } + + @Override + public Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected RecyclerView createRefreshableView(Context context, AttributeSet attrs) { + RecyclerView recyclerView = new RecyclerView(context); + return recyclerView; + } + + + @Override + protected boolean isReadyForPullStart() { + return isFirstItemVisible(); + } + + public boolean isFirstItemVisible() { + final RecyclerView.Adapter adapter = getRefreshableView().getAdapter(); + + //如果未设置Adapter或者Adpter没有数据可以下拉刷新 + if(null == adapter || adapter.getItemCount() == 0){ + return true; + }else{ + if(getFristVisiblePosition() == 0){ + return mRefreshableView.getChildAt(0).getTop() >= mRefreshableView.getTop(); + } + } + + return false; + } + + public int getFristVisiblePosition() { + View firstVisibleChild = mRefreshableView.getChildAt(0); + return firstVisibleChild != null ? mRefreshableView.getChildPosition(firstVisibleChild) : -1; + } + + @Override + protected boolean isReadyForPullEnd() { + return isLastItemVisible(); + } + + public boolean isLastItemVisible() { + final RecyclerView.Adapter adapter = getRefreshableView().getAdapter(); + + //如果未设置Adapter或者Adpter没有数据可以下拉刷新 + if(null == adapter || adapter.getItemCount() == 0){ + return true; + }else{ + if(getLastVisiblePosition() == adapter.getItemCount() - 1){ + return mRefreshableView.getChildAt(mRefreshableView.getChildCount() - 1).getBottom() <= mRefreshableView.getBottom(); + } + } + + return false; + } + + public int getLastVisiblePosition() { + View lastVisibleChild = mRefreshableView.getChildAt(mRefreshableView.getChildCount() - 1); + return lastVisibleChild != null ? mRefreshableView.getChildPosition(lastVisibleChild) : -1; + } + +} diff --git a/app/src/main/java/com/lechange/demo/view/RecoderSeekBar.java b/app/src/main/java/com/lechange/demo/view/RecoderSeekBar.java new file mode 100644 index 0000000..a398043 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/RecoderSeekBar.java @@ -0,0 +1,34 @@ +package com.lechange.demo.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +public class RecoderSeekBar extends android.support.v7.widget.AppCompatSeekBar { + + private boolean canTouchAble = true; + + public RecoderSeekBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public RecoderSeekBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public RecoderSeekBar(Context context) { + super(context); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!canTouchAble) { + return true; + } + return super.onTouchEvent(event); + } + + public void setCanTouchAble(boolean canTouchAble) { + this.canTouchAble = canTouchAble; + } +} diff --git a/app/src/main/java/com/lechange/demo/view/SpacesItemDecoration.java b/app/src/main/java/com/lechange/demo/view/SpacesItemDecoration.java new file mode 100644 index 0000000..9512d00 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/view/SpacesItemDecoration.java @@ -0,0 +1,23 @@ +package com.lechange.demo.view; + +import android.graphics.Rect; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +public class SpacesItemDecoration extends RecyclerView.ItemDecoration { + private int space; + + public SpacesItemDecoration(int space) { + this.space = space; + } + + @Override + public void getItemOffsets(Rect outRect, View view, + RecyclerView parent, RecyclerView.State state) { + + // Add top margin only for the first item to avoid double space between items + if (parent.getChildPosition(view) != 0){ + outRect.left = space; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/AddCompleteAndRenameActivity.java b/app/src/main/java/com/lechange/demo/yonsz/AddCompleteAndRenameActivity.java new file mode 100644 index 0000000..ef687b2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/AddCompleteAndRenameActivity.java @@ -0,0 +1,345 @@ +package com.lechange.demo.yonsz; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2019/2/27. + */ + + +public class AddCompleteAndRenameActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private Button nextConfig; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "1"; + private List condition = new ArrayList<>(); + private String addressId; + private TextView deviceName; + private ImageView cleanIv; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_modify_camera_name); + initView(); + initListener(); + } + + private void initView() { + addressId = deviceAddress; + cleanIv = (ImageView) findViewById(R.id.iv_clean); + cleanIv.setOnClickListener(this); + deviceName = (TextView) findViewById(R.id.edit_device_name); + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead(R.string.add_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + // deviceName.setText(AddressNameUtil.getAddressName(localAddAddressId) + "摄像头"); + deviceName.setText("摄像头"); + } + + private void modifyDevice(String addressId) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + /*if (addressId.equals("13")) { + map.put("addressId", "0"); + } else { + map.put("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + }*/ + // map.put("addressId", localAddAddressId); + map.put("deviceId", getIntent().getExtras().get("deviceSN").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceName", deviceName.getText().toString().trim()); + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initListener() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + modifyDevice(addressId); + break; + case R.id.iv_clean: + deviceName.setText(""); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + Toast.makeText(AddCompleteAndRenameActivity.this, "添加成功", Toast.LENGTH_SHORT).show(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/CameraDetailActivity.java b/app/src/main/java/com/lechange/demo/yonsz/CameraDetailActivity.java new file mode 100644 index 0000000..753c783 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/CameraDetailActivity.java @@ -0,0 +1,603 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.MODIFY_ALARM_STATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.DEVICE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.MODIFY_ALARM_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; +import static com.yonsz.z1.version5.MainFragment5.isRefreshCamera; + +/** + * Created by Administrator on 2019/2/27. + */ + +public class CameraDetailActivity extends BaseActivity { + private TitleView mTitleView; + private TextView deleteDevice; + private RelativeLayout rl_device_storage, rl_alarm; + private String mChannelUUID = null; + private CheckBox cb_camera_reverse, cb_device_light, cb_device_check, cb_device_alarm; + private TextView tv_wifi_name, tv_device_name, tv_device_version; + private ImageView iv_last_pic; + private LinearLayout ll_device_detail_top; + private ChannelInfo channel; + private TextView tv_device_address; + private String devicePosition = "1"; + private String deviceCode; + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("2") || msg.equals("5")) { + + } else { + tv_device_name.setText(msg); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_camera_detail); + initView(); + initListener(); + } + + private void initView() { + mChannelUUID = getIntent().getStringExtra("UUID"); // 获取通道的UUID + ll_device_detail_top = (LinearLayout) findViewById(R.id.ll_device_detail_top); + tv_device_name = (TextView) findViewById(R.id.tv_device_name); + tv_device_version = (TextView) findViewById(R.id.tv_device_version); + iv_last_pic = (ImageView) findViewById(R.id.iv_last_pic); + tv_wifi_name = (TextView) findViewById(R.id.tv_wifi_name); + cb_camera_reverse = (CheckBox) findViewById(R.id.cb_camera_reverse); + cb_device_light = (CheckBox) findViewById(R.id.cb_device_light); + cb_device_check = (CheckBox) findViewById(R.id.cb_device_check); + cb_device_alarm = (CheckBox) findViewById(R.id.cb_device_alarm); + rl_device_storage = (RelativeLayout) findViewById(R.id.rl_device_storage); + rl_alarm = (RelativeLayout) findViewById(R.id.rl_alarm); + deleteDevice = (TextView) findViewById(R.id.tv_delete_device); + tv_device_address = (TextView) findViewById(R.id.tv_device_address); + mTitleView = (TitleView) findViewById(R.id.title_device_detail); + mTitleView.setHead("设备详情"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + //获取设备基本信息 + channel = Business.getInstance().getChannel(mChannelUUID); + // String deviceName = channel.getDeviceName(); + // final String backgroudImgURL = channel.getBackgroudImgURL(); + deviceCode = channel.getDeviceCode(); + if (channel.getDeviceName().contains("的")) { + devicePosition = channel.getDeviceName().substring(0, channel.getDeviceName().indexOf("的")); + tv_device_address.setText(devicePosition); + } + tv_device_name.setText(channel.getName()); + tv_device_version.setText(channel.getDeviceModel()); + /*if (backgroudImgURL != null && backgroudImgURL.length() > 0) { + //下载 注:由于有些请求的图片是经过加密处理的,所以需要使用带有解密功能的接口,默认密码为设备序列号 + ImageHelper.loadCacheImage(backgroudImgURL, deviceCode, deviceCode, new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if (backgroudImgURL.hashCode() == msg.what && msg.obj != null) { + // mBgDevice.setBackgroundDrawable((Drawable) msg.obj); + iv_last_pic.setImageDrawable((Drawable) msg.obj); + } + } + }); + }*/ + /*new AsyncTask() { + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + @Override + protected Object doInBackground(Object[] objects) { + //获取当前网络 + currentDeviceWifi(); + //获取设备指示灯状态 + breathingLightStatus(); + //获取摄像头翻转状态 + frameReverseStatus(); + return null; + } + + @Override + protected void onProgressUpdate(Object[] values) { + super.onProgressUpdate(values); + } + + @Override + protected void onPostExecute(Object o) { + super.onPostExecute(o); + } + }.execute();*/ + //获取当前网络 + getLcDeviceList(); + } + + private void initListener() { + rl_device_storage.setOnClickListener(this); + cb_camera_reverse.setOnClickListener(this); + cb_device_light.setOnClickListener(this); + cb_device_check.setOnClickListener(this); + cb_device_alarm.setOnClickListener(this); + deleteDevice.setOnClickListener(this); + ll_device_detail_top.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_device_storage: + Intent intent = new Intent(CameraDetailActivity.this, RecoverSDCardActivity.class); + intent.putExtra("UUID", mChannelUUID); + startActivity(intent); + break; + case R.id.cb_camera_reverse: + if (cb_camera_reverse.isChecked()) { + modifyFrameReverseStatus("reverse"); + } else { + modifyFrameReverseStatus("normal"); + } + break; + case R.id.cb_device_light: + if (cb_device_light.isChecked()) { + modifyBreathingLight("on"); + } else { + modifyBreathingLight("off"); + } + break; + case R.id.cb_device_check: + if (cb_device_check.isChecked()) { + modifyAlarmPlan(true); + } else { + modifyAlarmPlan(false); + } + break; + case R.id.cb_device_alarm: + if (cb_device_alarm.isChecked()) { + modifyAlarmStatus("1"); + } else { + modifyAlarmStatus("0"); + } + break; + case R.id.tv_delete_device: + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + unBindDevice(); + break; + } + } + }); + dialog.setContent("是否删除摄像头?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.ll_device_detail_top: + Intent intent1 = new Intent(CameraDetailActivity.this, CameraNameDetailActivity.class); + intent1.putExtra("UUID", mChannelUUID); + startActivity(intent1); + break; + case R.id.tv_device_address: + Intent intent2; + + if (null != homeListEntity && !TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent2 = new Intent(this, ChooseRoomInFloorActivity.class); + intent2.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + intent2.putExtra("houseTypeName", "房间选择"); + intent2.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + + intent2.putExtra("deviceId", channel.getDeviceCode()); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", "102"); + intent2.putExtra("deviceModel", "0"); + intent2.putExtra("addressId", AddressNameUtil.getAddressId(devicePosition)); + intent2.putExtra("deviceAddress", AddressNameUtil.getAddressId(devicePosition)); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } else { + /*intent = new Intent(getActivity(), ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", "000"); + intent.putExtra("deviceModel", "0"); + intent.putExtra("addressId", AddressNameUtil.getAddressId(devicePositionTv.getText().toString())); + intent.putExtra("deviceId", ziId); + startActivityForResult(intent, MODIFY_DEVICE_NAME);*/ + + intent2 = new Intent(CameraDetailActivity.this, ModifyRoomActivity.class); + intent2.putExtra("deviceAddress", AddressNameUtil.getAddressId(devicePosition)); + intent2.putExtra("deviceId", channel.getDeviceCode()); + + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", CAMERA_TAG); + intent2.putExtra("deviceModel", "0"); + intent2.putExtra("addressId", AddressNameUtil.getAddressId(devicePosition)); + startActivityForResult(intent2, GET_SWITCHER_CHANGE_INFO); + } + + break; + } + } + + private void modifyAlarmStatus(String state) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("deviceId", "4K0586CPAJ58121"); + map.put("deviceId", channel.getDeviceCode()); + map.put("alarmStatus", state); + netWorkUtil.requestPostByAsynewApi(MODIFY_ALARM_STATUS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("modifyAlarmStatus", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(MODIFY_ALARM_STATUS_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("deviceId", "4K0586CPAJ58121"); + map.put("deviceId", channel.getDeviceCode()); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + + /*mChannelInfoList.remove(mChannelInfoList.get(lechengPosition)); + mHorizontalAdapter.notifyDataSetChanged();*/ + // getLcDeviceList(); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + isRefreshCamera = true; + Log.i("unBindDevice", "onSuccess()" + respone); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + finish(); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void currentDeviceWifi() { + Business.getInstance().currentDeviceWifi(mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final String obj = (String) msg.obj; + runOnUiThread(new Runnable() { + @Override + public void run() { + tv_wifi_name.setText(obj); + //获取设备指示灯状态 + breathingLightStatus(); + } + }); + } else { + /*Toast.makeText( + CameraDetailActivity.this, + R.string.toast_storagestrategy_update_failed, + Toast.LENGTH_SHORT).show();*/ + + } + } + }); + } + + private void breathingLightStatus() { + Business.getInstance().breathingLightStatus(mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final int arg1 = msg.arg1; + runOnUiThread(new Runnable() { + @Override + public void run() { + if (arg1 == 1) { + cb_device_light.setChecked(true); + } else { + cb_device_light.setChecked(false); + } + //获取摄像头翻转状态 + frameReverseStatus(); + } + }); + + } else { + /*Toast.makeText( + CameraDetailActivity.this, + R.string.toast_storagestrategy_update_failed, + Toast.LENGTH_SHORT).show();*/ + + } + } + }); + } + + /** + * 修改动检计划状态 + * + * @param enable 动检计划开启与否 + */ + private void modifyAlarmPlan(final boolean enable) { + Business.getInstance().modifyAlarmStatus(enable, mChannelUUID, + new Handler() { + + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText(CameraDetailActivity.this, + R.string.toast_alarmplan_modifyalarmstatus_success, + Toast.LENGTH_LONG).show(); + if (enable) { + rl_alarm.setVisibility(View.VISIBLE); + } else { + rl_alarm.setVisibility(View.GONE); + } + } else { + Toast.makeText(CameraDetailActivity.this, + R.string.toast_alarmplan_modifyalarmstatus_failed, + Toast.LENGTH_LONG).show(); + } + } + + }); + } + + + private void modifyBreathingLight(String state) { + Business.getInstance().modifyBreathingLight(state, mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + CameraDetailActivity.this, + "修改成功", + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + CameraDetailActivity.this, + "修改失败", + Toast.LENGTH_SHORT).show(); + + } + } + }); + } + + private void frameReverseStatus() { + Business.getInstance().frameReverseStatus(mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final int obj = msg.arg1; + runOnUiThread(new Runnable() { + @Override + public void run() { + if (obj == 1) { + cb_camera_reverse.setChecked(true); + } else { + cb_camera_reverse.setChecked(false); + } + getAlarmStatus(); + } + }); + } else { + + } + } + }); + } + + private void getAlarmStatus() { + Business.getInstance().getAlarmStatus(mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + final int obj = msg.arg1; + runOnUiThread(new Runnable() { + @Override + public void run() { + if (obj == 1) { + cb_device_check.setChecked(true); + rl_alarm.setVisibility(View.VISIBLE); + } else { + cb_device_check.setChecked(false); + rl_alarm.setVisibility(View.GONE); + } + } + }); + } else { + + } + } + }); + } + + private void modifyFrameReverseStatus(String state) { + Business.getInstance().modifyFrameReverseStatus(state, mChannelUUID, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + CameraDetailActivity.this, + "修改成功", + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + CameraDetailActivity.this, + "修改失败", + Toast.LENGTH_SHORT).show(); + + } + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + LcListEntity obj = (LcListEntity) msg.obj; + for (int i = 0; i < obj.getData().size(); i++) { + if (deviceCode.equals(obj.getData().get(i).getDeviceId())) { + tv_device_version.setText(obj.getData().get(i).getVersion()); + if (obj.getData().get(i).getAlarmStatus().equals("1")) { + cb_device_alarm.setChecked(true); + } else { + cb_device_alarm.setChecked(false); + } + } + } + currentDeviceWifi(); + break; + case CHECK_USER_BIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case MODIFY_ALARM_STATUS_SUCCESS: + ToastUtil.show(this, "修改报警消息提醒成功"); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_SWITCHER_CHANGE_INFO: + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + break; + } + } + + private synchronized void getLcDeviceList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(DEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDevices", "onSuccess()" + respone); + LcListEntity obj = JSON.parseObject(respone, LcListEntity.class); + if (1 == obj.getFlag()) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/CameraNameDetailActivity.java b/app/src/main/java/com/lechange/demo/yonsz/CameraNameDetailActivity.java new file mode 100644 index 0000000..2f40ee2 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/CameraNameDetailActivity.java @@ -0,0 +1,171 @@ +package com.lechange.demo.yonsz; + +import android.content.ClipboardManager; +import android.content.Context; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2019/3/12. + */ + +public class CameraNameDetailActivity extends BaseActivity { + private TitleView mTitleView; + private String mChannelUUID; + private ChannelInfo channel; + private TextView tv_device_name, tv_device_type, tv_device_code, tv_device_code_copy; + private ImageView ImageView01_name_edit; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_camera_name); + initView(); + } + + private void initView() { + mChannelUUID = getIntent().getStringExtra("UUID"); // 获取通道的UUID + channel = Business.getInstance().getChannel(mChannelUUID); + mTitleView = (TitleView) findViewById(R.id.title_camera_name); + mTitleView.setHead("设备详情"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_device_name = (TextView) findViewById(R.id.tv_device_name); + tv_device_type = (TextView) findViewById(R.id.tv_device_type); + tv_device_code = (TextView) findViewById(R.id.tv_device_code); + tv_device_code_copy = (TextView) findViewById(R.id.tv_device_code_copy); + ImageView01_name_edit = (ImageView) findViewById(R.id.ImageView01_name_edit); + tv_device_name.setText(channel.getName()); + tv_device_type.setText(channel.getDeviceModel()); + tv_device_code.setText(channel.getDeviceCode()); + tv_device_code_copy.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(tv_device_code.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(CameraNameDetailActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + } + }); + ImageView01_name_edit.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + RenameNameDialog dialog = new RenameNameDialog(CameraNameDetailActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + modifyDevice(positioName); + break; + } + } + }); + dialog.setOldName(channel.getName()); + dialog.setContent("修改摄像机名称"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + }); + + } + + private void modifyDevice(final String deviceName) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", channel.getDeviceCode()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceName", deviceName); + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = deviceName; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + String obj = (String) msg.obj; + tv_device_name.setText(obj); + channel.setDeviceName(obj); + EventBus.getDefault().post( + new ChooseHomeEvent(obj)); + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + break; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/CustomSnapHelper.java b/app/src/main/java/com/lechange/demo/yonsz/CustomSnapHelper.java new file mode 100644 index 0000000..511bedf --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/CustomSnapHelper.java @@ -0,0 +1,87 @@ +package com.lechange.demo.yonsz; + +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.LinearSnapHelper; +import android.support.v7.widget.OrientationHelper; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.yonsz.z1.listener.OnRecyclerScrollListener; + +/** + * Created by loonggg on 2017/2/6. + */ + +public class CustomSnapHelper extends LinearSnapHelper { + private OrientationHelper mHorizontalHelper; + private OnRecyclerScrollListener mRecyclerScrollListener; + + @Override + public int[] calculateDistanceToFinalSnap(RecyclerView.LayoutManager layoutManager, View targetView) { + int[] out = new int[2]; + //判断支持水平滚动,修改水平方向的位置,是修改的out[0]的值 + if (layoutManager.canScrollHorizontally()) { + out[0] = distanceToStart(targetView, getHorizontalHelper(layoutManager)); + } else { + out[0] = 0; + } + return out; + } + + private int distanceToStart(View targetView, OrientationHelper helper) { + return helper.getDecoratedStart(targetView) - helper.getStartAfterPadding(); + } + + @Override + public View findSnapView(RecyclerView.LayoutManager layoutManager) { + return findStartView(layoutManager, getHorizontalHelper(layoutManager)); + } + + private View findStartView(RecyclerView.LayoutManager layoutManager, + OrientationHelper helper) { + + if (layoutManager instanceof LinearLayoutManager) { + int firstChild = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); + int lastChild = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); + if (firstChild == RecyclerView.NO_POSITION) { + return null; + } + //这行的作用是如果是最后一个,翻到最后一条,解决显示不全的问题 + /*if (lastChild == layoutManager.getItemCount() - 1) { + return layoutManager.findViewByPosition(lastChild); + }*/ + + View child = layoutManager.findViewByPosition(firstChild); + if (mRecyclerScrollListener != null) { + if (helper.getDecoratedEnd(child) >= helper.getDecoratedMeasurement(child) / 2 && helper.getDecoratedEnd(child) > 0) { + mRecyclerScrollListener.onScroll(firstChild); + + } else { + mRecyclerScrollListener.onScroll(firstChild + 1); + + } + } + //获取偏左显示的Item + if (helper.getDecoratedEnd(child) >= helper.getDecoratedMeasurement(child) / 2 + && helper.getDecoratedEnd(child) > 0) { + return child; + } else { + return layoutManager.findViewByPosition(firstChild + 1); + } + } + + return super.findSnapView(layoutManager); + } + + public void setmOnItemScrollListener(OnRecyclerScrollListener mRecyclerScrollListener) { + this.mRecyclerScrollListener = mRecyclerScrollListener; + } + + private OrientationHelper getHorizontalHelper( + RecyclerView.LayoutManager layoutManager) { + if (mHorizontalHelper == null) { + mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager); + } + return mHorizontalHelper; + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/LcDataListEntity.java b/app/src/main/java/com/lechange/demo/yonsz/LcDataListEntity.java new file mode 100644 index 0000000..a835a8c --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/LcDataListEntity.java @@ -0,0 +1,173 @@ +package com.lechange.demo.yonsz; + +import com.common.openapi.entity.DeviceDetailListData; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2019/3/2. + */ + +public class LcDataListEntity { + + /** + * data : [{"addressId":"3","deviceId":"4K0586CPAJ58121","deviceModel":"deviceModel","deviceProvider":"lc","deviceType":1,"houseId":"de37c4cef269487ab09af03fd5bbc721","id":1,"thirdDeviceAccountId":2,"userId":"c8971e8ea0654c429c89cb486d259357"}] + * flag : 1 + * msg : success + */ + + private int flag; + private String msg; + private List data; + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public String getMsg() { + return msg == null ? "" : msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getData() { + if (data == null) { + return new ArrayList<>(); + } + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * addressId : 3 + * deviceId : 4K0586CPAJ58121 + * deviceModel : deviceModel + * deviceProvider : lc + * deviceType : 1 + * houseId : de37c4cef269487ab09af03fd5bbc721 + * id : 1 + * thirdDeviceAccountId : 2 + * userId : c8971e8ea0654c429c89cb486d259357 + */ + + private String addressId; + private String deviceId; + private String deviceModel; + private String deviceProvider; + private int deviceType; + private String houseId; + private int id; + private int thirdDeviceAccountId; + private String userId; + private String deviceName; + private String version; + private String alarmStatus; + + public String getAlarmStatus() { + return alarmStatus == null ? "" : alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getVersion() { + return version == null ? "" : version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getDeviceName() { + return deviceName == null ? "" : deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getAddressId() { + return addressId == null ? "" : addressId; + } + + public void setAddressId(String addressId) { + this.addressId = addressId; + } + + public String getDeviceId() { + return deviceId == null ? "" : deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceModel() { + return deviceModel == null ? "" : deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public String getDeviceProvider() { + return deviceProvider == null ? "" : deviceProvider; + } + + public void setDeviceProvider(String deviceProvider) { + this.deviceProvider = deviceProvider; + } + + public int getDeviceType() { + return deviceType; + } + + public void setDeviceType(int deviceType) { + this.deviceType = deviceType; + } + + public String getHouseId() { + return houseId == null ? "" : houseId; + } + + public void setHouseId(String houseId) { + this.houseId = houseId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getThirdDeviceAccountId() { + return thirdDeviceAccountId; + } + + public void setThirdDeviceAccountId(int thirdDeviceAccountId) { + this.thirdDeviceAccountId = thirdDeviceAccountId; + } + + public String getUserId() { + return userId == null ? "" : userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/LcListEntity.java b/app/src/main/java/com/lechange/demo/yonsz/LcListEntity.java new file mode 100644 index 0000000..395ccfb --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/LcListEntity.java @@ -0,0 +1,171 @@ +package com.lechange.demo.yonsz; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2019/3/2. + */ + +public class LcListEntity { + + /** + * data : [{"addressId":"3","deviceId":"4K0586CPAJ58121","deviceModel":"deviceModel","deviceProvider":"lc","deviceType":1,"houseId":"de37c4cef269487ab09af03fd5bbc721","id":1,"thirdDeviceAccountId":2,"userId":"c8971e8ea0654c429c89cb486d259357"}] + * flag : 1 + * msg : success + */ + + private int flag; + private String msg; + private List data; + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public String getMsg() { + return msg == null ? "" : msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getData() { + if (data == null) { + return new ArrayList<>(); + } + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * addressId : 3 + * deviceId : 4K0586CPAJ58121 + * deviceModel : deviceModel + * deviceProvider : lc + * deviceType : 1 + * houseId : de37c4cef269487ab09af03fd5bbc721 + * id : 1 + * thirdDeviceAccountId : 2 + * userId : c8971e8ea0654c429c89cb486d259357 + */ + + private String addressId; + private String deviceId; + private String deviceModel; + private String deviceProvider; + private int deviceType; + private String houseId; + private int id; + private int thirdDeviceAccountId; + private String userId; + private String deviceName; + private String version; + private String alarmStatus; + + public String getAlarmStatus() { + return alarmStatus == null ? "" : alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getVersion() { + return version == null ? "" : version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getDeviceName() { + return deviceName == null ? "" : deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getAddressId() { + return addressId == null ? "" : addressId; + } + + public void setAddressId(String addressId) { + this.addressId = addressId; + } + + public String getDeviceId() { + return deviceId == null ? "" : deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceModel() { + return deviceModel == null ? "" : deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public String getDeviceProvider() { + return deviceProvider == null ? "" : deviceProvider; + } + + public void setDeviceProvider(String deviceProvider) { + this.deviceProvider = deviceProvider; + } + + public int getDeviceType() { + return deviceType; + } + + public void setDeviceType(int deviceType) { + this.deviceType = deviceType; + } + + public String getHouseId() { + return houseId == null ? "" : houseId; + } + + public void setHouseId(String houseId) { + this.houseId = houseId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getThirdDeviceAccountId() { + return thirdDeviceAccountId; + } + + public void setThirdDeviceAccountId(int thirdDeviceAccountId) { + this.thirdDeviceAccountId = thirdDeviceAccountId; + } + + public String getUserId() { + return userId == null ? "" : userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/LcModifyNameActivity.java b/app/src/main/java/com/lechange/demo/yonsz/LcModifyNameActivity.java new file mode 100644 index 0000000..e885279 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/LcModifyNameActivity.java @@ -0,0 +1,332 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version4.fragment.CurtainFragment; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2019/3/16. + */ + +public class LcModifyNameActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private Button nextConfig; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private TextView tv_curtain_step_two; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtain_two); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + addressId = deviceAddress; + tv_curtain_step_two = (TextView) findViewById(R.id.tv_curtain_step_two); + tv_curtain_step_two.setVisibility(View.GONE); + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + nextConfig.setText("确定"); + nextConfig.setVisibility(View.VISIBLE); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead("修改摄像头位置信息"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + } + + private void modifyDevice() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (addressId.equals("13")) { + map.put("addressId", "0"); + } else { + map.put("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + } + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = addressId; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initListener() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + modifyDevice(); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + Intent intent = new Intent(LcModifyNameActivity.this, CurtainFragment.class); + if (addressId.equals("13")) { + intent.putExtra("addressId", 0); + } else { + intent.putExtra("addressId", Integer.valueOf(addressId) + 1); + } + setResult(GET_SWITCHER_CHANGE_INFO, intent); + finish(); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/LechengChannelAdapter.java b/app/src/main/java/com/lechange/demo/yonsz/LechengChannelAdapter.java new file mode 100644 index 0000000..b4f4bd4 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/LechengChannelAdapter.java @@ -0,0 +1,174 @@ +package com.lechange.demo.yonsz; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.mediaplay.MediaPlayActivity; +import com.yonsz.z1.R; + +import java.util.List; + +/** + * Created by Administrator on 2019/2/27. + */ + +public class LechengChannelAdapter extends RecyclerView.Adapter { + + private List mChannelInfoList; + private Context mContext; + + public LechengChannelAdapter(Context mContext, List mChannelInfoList) { + super(); + this.mContext = mContext; + this.mChannelInfoList = mChannelInfoList; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_device_list_item, + parent, false); + return new LechengChannelAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(LechengChannelAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mChannelInfoList != null ? mChannelInfoList.size() : 0; + } + + @Override + public long getItemId(int position) { + return super.getItemId(position); + } + + private void unBindDevice(final ChannelInfo info) { + Business.getInstance().unBindDevice(info.getDeviceCode(), new Handler() { + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + Toast.makeText(mContext, R.string.toast_device_delete_success, Toast.LENGTH_SHORT).show(); + mChannelInfoList.remove(info); + notifyDataSetChanged(); + } else { + Toast.makeText(mContext, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + + } + }); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + /*private TextView mChannelName; + private ImageView mDelete;*/ + // private RelativeLayout mBgDevice; + private ImageView mLiveVideo; + /*private ImageView mLocalVideo; + private ImageView mCloudVideo; + private ImageView mMessage; + private ImageView mSetting;*/ + private LinearLayout mListShade; + private ChannelInfo mInfo; + private ImageView iv; + + public MessageViewHolder(View convertView) { + super(convertView); + /*mChannelName = (TextView) convertView.findViewById(R.id.list_channel_name); + mDelete = (ImageView) convertView.findViewById(R.id.list_device_delete);*/ + // mBgDevice = (RelativeLayout) convertView.findViewById(R.id.list_bg_device); + mLiveVideo = (ImageView) convertView.findViewById(R.id.list_device_livevideo); + /*mLocalVideo = (ImageView) convertView.findViewById(R.id.list_device_localvideo); + mCloudVideo = (ImageView) convertView.findViewById(R.id.list_device_cloudvideo); + mMessage = (ImageView) convertView.findViewById(R.id.list_device_message); + mSetting = (ImageView) convertView.findViewById(R.id.list_device_setting);*/ + mListShade = (LinearLayout) convertView.findViewById(R.id.list_shade); + iv = (ImageView) itemView.findViewById(R.id.imageView); + } + + public void setViews(final int position) { + //修改数据信息(含加密标识符) + mInfo = mChannelInfoList.get(position); + /*if (mInfo.getBackgroudImgURL() != null && mInfo.getBackgroudImgURL().length() > 0) { + //下载 注:由于有些请求的图片是经过加密处理的,所以需要使用带有解密功能的接口,默认密码为设备序列号 + ImageHelper.loadCacheImage(mInfo.getBackgroudImgURL(), mInfo.getDeviceCode(), mInfo.getDeviceCode(), new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if (mInfo.getBackgroudImgURL().hashCode() == msg.what && msg.obj != null) { + // mBgDevice.setBackgroundDrawable((Drawable) msg.obj); + iv.setImageDrawable((Drawable) msg.obj); + } + } + }); + }*/ + //"在线" : "离线" + if (mInfo.getState() == ChannelInfo.ChannelState.Online) { + mListShade.setVisibility(View.GONE); + } else { + mListShade.setVisibility(View.VISIBLE); + } + mLiveVideo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + // 启动实时视频 + final EditText et = new EditText(mContext); + if (mInfo.getEncryptMode() == 1 && mInfo.getEncryptKey() == null) { + new AlertDialog.Builder(mContext).setTitle(R.string.alarm_message_keyinput_dialog_title) + .setIcon(android.R.drawable.ic_dialog_info).setView(et) + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + mInfo.setEncryptKey(et.getText().toString()); + Intent intent = new Intent(mContext, MediaPlayActivity.class); + if (TextUtils.isEmpty(mInfo.getUuid())) { + return; + } + intent.putExtra("UUID", mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_ONLINE); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent); + } + }) + .setNegativeButton(R.string.dialog_negative, null).show(); + } else { + Intent intent = new Intent(mContext, MediaPlayActivity.class); + if (TextUtils.isEmpty(mInfo.getUuid())) { + return; + } + intent.putExtra("UUID", mInfo.getUuid()); + intent.putExtra("TYPE", MediaPlayActivity.IS_VIDEO_ONLINE); + /*ArrayList UUIDStringList = new ArrayList<>(); + for (int i = 0; i < mChannelInfoList.size(); i++) { + UUIDStringList.add(mChannelInfoList.get(i).getUuid()); + } + intent.putStringArrayListExtra("UUIDStringList", UUIDStringList); + intent.putExtra("position", position);*/ + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/LechengLoginActivity.java b/app/src/main/java/com/lechange/demo/yonsz/LechengLoginActivity.java new file mode 100644 index 0000000..0d2a7f4 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/LechengLoginActivity.java @@ -0,0 +1,302 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.USER_BIND_SMS_FAIL; +import static com.yonsz.z1.net.Constans.USER_BIND_SMS_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.USER_BIND; +import static com.yonsz.z1.net.NetWorkUrl.USER_BIND_SMS; + +/** + * Created by Administrator on 2017/5/26. + */ +public class LechengLoginActivity extends BaseActivity { + private EditText mUserPhone; + private EditText mUserCode; + private TextView mGetCode; + private int sec = 60; + private TitleView mTitleView; + private Button btNext; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lecheng_login); + initView(); + initListener(); + } + + + private void initView() { + mUserPhone = (EditText) findViewById(R.id.edit_username); + mUserCode = (EditText) findViewById(R.id.edit_code); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + btNext = (Button) findViewById(R.id.bt_forgetpw_next); + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mTitleView = (TitleView) findViewById(R.id.title_forgetpw); + mTitleView.setHead(R.string.login); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mUserPhone.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "").toString()); + } + + private void initListener() { + btNext.setOnClickListener(this); + mGetCode.setOnClickListener(this); + mUserCode.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int i = s.length(); + if (i != 0) { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + } else { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_forgetpw_next: + // checkUserCode(mUserPhone.getText().toString().trim(), mUserCode.getText().toString()); + // checkSms(); + userBind(); + break; + case R.id.tv_getcode: + // getUserSms(); + //发送短信验证码 + userBindSms(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(LechengLoginActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "forgetPw"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + } + } + + public void checkSms() { + String smsCode = mUserCode.getText().toString().trim(); + if (smsCode.length() == 0) { + Toast.makeText(getApplicationContext(), R.string.toast_userbind_no_idcode, Toast.LENGTH_LONG).show(); + return; + } + Business.getInstance().checkUserSms(mUserPhone.getText().toString().trim(), smsCode, new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Intent intent = new Intent(LechengLoginActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", "LechengLoginActivity"); + intent.putExtra("deviceAddress", "LechengLoginActivity"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + finish(); + } else { + String result = (String) msg.obj; + ToastUtil.show(LechengLoginActivity.this, result); + } + } + + }); + } + + /** + * 获取短信验证码 + */ + public void getUserSms() { + Business.getInstance().getUserSms(mUserPhone.getText().toString().trim(), new Handler() { + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + ToastUtil.show(LechengLoginActivity.this, R.string.notice_sms); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } else { + String result = (String) msg.obj; + ToastUtil.show(LechengLoginActivity.this, result); + } + } + + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_CODE_SUCCESS: + ToastUtil.show(this, R.string.notice_sms); + // mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_27_50)); + // mSure.setClickable(true); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + case CHECK_USER_BIND_SUCCESS: + CheckBindEntity bindEntity = (CheckBindEntity) msg.obj; + Business.getInstance().setToken(bindEntity.getData().getUserToken()); + Intent intent = new Intent(LechengLoginActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", "LechengLoginActivity"); + intent.putExtra("deviceAddress", "LechengLoginActivity"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + finish(); + break; + case CHECK_USER_BIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case USER_BIND_SMS_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case USER_BIND_SMS_SUCCESS: + ToastUtil.show(LechengLoginActivity.this, R.string.notice_sms); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + } + } + + private void userBind() { + String smsCode = mUserCode.getText().toString().trim(); + if (smsCode.length() == 0) { + Toast.makeText(getApplicationContext(), R.string.toast_userbind_no_idcode, Toast.LENGTH_LONG).show(); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("phone", mUserPhone.getText().toString().trim()); + map.put("smsCode", smsCode); + netWorkUtil.requestPostByAsynewApi(USER_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("userBind", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void userBindSms() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("phone", mUserPhone.getText().toString().trim()); + netWorkUtil.requestPostByAsynewApi(USER_BIND_SMS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("userBindSms", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(USER_BIND_SMS_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(USER_BIND_SMS_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(USER_BIND_SMS_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/RecoverSDCardActivity.java b/app/src/main/java/com/lechange/demo/yonsz/RecoverSDCardActivity.java new file mode 100644 index 0000000..6c3a4d4 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/RecoverSDCardActivity.java @@ -0,0 +1,103 @@ +package com.lechange.demo.yonsz; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.lechange.demo.business.Business; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2019/3/12. + */ + +public class RecoverSDCardActivity extends BaseActivity { + private TitleView mTitleView; + private TextView tv_recover_sdcard; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_recover_sdcard); + initView(); + } + + private void initView() { + tv_recover_sdcard = (TextView) findViewById(R.id.tv_recover_sdcard); + mTitleView = (TitleView) findViewById(R.id.title_recover_sdcard); + mTitleView.setHead("本地存储"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_recover_sdcard.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + ConfirmDialog dialog = new ConfirmDialog(RecoverSDCardActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + recoverSDCard(); + break; + } + } + }); + dialog.setContent("格式化将会清空存储卡内所有数据,且该操作一旦开始不可以取消"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("格式化"); + dialog.setCancelable(false); + dialog.show(); + } + }); + } + + private void recoverSDCard() { + Business.getInstance().recoverSDCard(getIntent().getExtras().get("UUID").toString(), new Handler() { + + @Override + public void handleMessage(Message msg) { + if (0 == msg.what) { + Toast.makeText( + RecoverSDCardActivity.this, + "格式化完成", + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText( + RecoverSDCardActivity.this, + "格式化失败", + Toast.LENGTH_SHORT).show(); + + } + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/ResetLechengActivity.java b/app/src/main/java/com/lechange/demo/yonsz/ResetLechengActivity.java new file mode 100644 index 0000000..cd73324 --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/ResetLechengActivity.java @@ -0,0 +1,183 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lechange.demo.manager.DeviceAddActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; + +/** + * Created by Administrator on 2019/2/26. + */ + +public class ResetLechengActivity extends BaseActivity { + private TitleView mTitleView; + private Button startConfig; + private CheckBox selectUnnorReveal, selectUnnorReveal1; + private String configWifiType; + private TextView apSmartTv, tv_gateway; + private TextView tv_ap_smart_declare, tv_ap_smart_declare1; + private RelativeLayout rl_camera, rl_gateway; + private LinearLayout ll_camera, ll_gateway; + private String devType = "0"; + private ImageView iv_gateway_pic; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_reset_lecheng); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceModel")) { + devType = getIntent().getExtras().get("deviceModel").toString(); + } + configWifiType = getIntent().getExtras().get("configWifiType").toString(); + iv_gateway_pic = (ImageView) findViewById(R.id.iv_gateway_pic); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal1 = (CheckBox) findViewById(R.id.iv_select_unnor_reveal1); + rl_camera = (RelativeLayout) findViewById(R.id.rl_camera); + rl_gateway = (RelativeLayout) findViewById(R.id.rl_gateway); + ll_camera = (LinearLayout) findViewById(R.id.ll_camera); + ll_gateway = (LinearLayout) findViewById(R.id.ll_gateway); + tv_gateway = (TextView) findViewById(R.id.tv_gateway); + mTitleView = (TitleView) findViewById(R.id.title_wifi_stepone); + mTitleView.setHead(R.string.add_device); + startConfig = (Button) findViewById(R.id.bt_start_config); + startConfig.setOnClickListener(this); + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + startConfig.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent; + if (devType.equals("1")) { + intent = new Intent(ResetLechengActivity.this, WifiHotspotActivity.class); + intent.putExtra("devId", getIntent().getExtras().get("deviceSN").toString()); + intent.putExtra("devType", devType); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("mPwd", getIntent().getExtras().get("password").toString());//将要连接的wifi的密码携带过去 + intent.putExtra("scCode", getIntent().getExtras().get("deviceCode").toString()); + } else { + intent = new Intent(ResetLechengActivity.this, DeviceAddActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (configWifiType.equals(GATE_WAY)) { + intent.putExtra("deviceType", GATE_WAY); + } else { + intent.putExtra("deviceType", CAMERA_TAG); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + } + startActivity(intent); + finish(); + } + }); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + selectUnnorReveal1.setOnClickListener(this); + apSmartTv = (TextView) findViewById(R.id.tv_ap_smart_top); + tv_ap_smart_declare = (TextView) findViewById(R.id.tv_ap_smart_declare); + tv_ap_smart_declare1 = (TextView) findViewById(R.id.tv_ap_smart_declare1); + if (devType.equals("1")) { + iv_gateway_pic.setImageResource(R.drawable.pic_add_gateway_g2); + tv_gateway.setText("已听到热点已开启提示"); + tv_ap_smart_declare.setText("长按配对键6s后松开,设备蓝灯慢闪后,听到 “设备热点已开启”后点击“下一步”"); + tv_ap_smart_declare1.setText("请确保该网关没有在乐橙等第三方app上添加过”"); + rl_gateway.setVisibility(View.VISIBLE); + rl_camera.setVisibility(View.GONE); + ll_camera.setVisibility(View.GONE); + ll_gateway.setVisibility(View.VISIBLE); + } else if (configWifiType.equals(GATE_WAY)) { + tv_ap_smart_declare.setText("长按配对键5s后松开,听到“开始无线配对”后点击“下一步”"); + tv_ap_smart_declare1.setText("请确保该网关没有在乐橙等第三方app上添加过”"); + rl_gateway.setVisibility(View.VISIBLE); + rl_camera.setVisibility(View.GONE); + ll_camera.setVisibility(View.GONE); + ll_gateway.setVisibility(View.VISIBLE); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + case R.id.iv_select_unnor_reveal1: + if (selectUnnorReveal1.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/TimeOutActivity.java b/app/src/main/java/com/lechange/demo/yonsz/TimeOutActivity.java new file mode 100644 index 0000000..acb9d2e --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/TimeOutActivity.java @@ -0,0 +1,99 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.TextView; + +import com.lechange.demo.manager.DeviceAddActivity; +import com.lechange.demo.manager.SoftAPActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.gateway.AddLCSafeActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2019/3/12. + */ + +public class TimeOutActivity extends BaseActivity { + private TitleView mTitleView; + private TextView bt_sure_config; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_time_out); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_time_out); + bt_sure_config = (TextView) findViewById(R.id.bt_sure_config); + mTitleView.setHead(R.string.add_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + bt_sure_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent; + if (getIntent().getExtras().get("from").toString().equals("LcnDeviceAddActivity")) { + intent = new Intent(TimeOutActivity.this, DeviceAddActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } else if (getIntent().getExtras().get("from").toString().equals("SoftAPActivity")) { + intent = new Intent(TimeOutActivity.this, SoftAPActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("pwd", getIntent().getExtras().get("pwd").toString()); + intent.putExtra("devId", getIntent().getExtras().get("devId").toString()); + intent.putExtra("scCode", getIntent().getExtras().get("scCode").toString()); + intent.putExtra("devType", getIntent().getExtras().get("devType").toString()); + intent.putExtra("from", "SoftAPActivity"); + } else { + intent = new Intent(TimeOutActivity.this, AddLCSafeActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "TimeOutActivity"); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + } + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/lechange/demo/yonsz/WifiHotspotActivity.java b/app/src/main/java/com/lechange/demo/yonsz/WifiHotspotActivity.java new file mode 100644 index 0000000..cab48bd --- /dev/null +++ b/app/src/main/java/com/lechange/demo/yonsz/WifiHotspotActivity.java @@ -0,0 +1,197 @@ +package com.lechange.demo.yonsz; + +import android.content.Intent; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lechange.demo.manager.DeviceAddActivity; +import com.lechange.demo.manager.SoftAPActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.device.deviceadd.ApConfigActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; + +/** + * Created by Administrator on 2019/2/26. + */ + +public class WifiHotspotActivity extends BaseActivity { + private TitleView mTitleView; + private Button startConfig; + private CheckBox selectUnnorReveal, selectUnnorReveal1; + private TextView apSmartTv, tv_gateway; + private TextView tv_ap_smart_declare, tv_ap_smart_declare1; + private RelativeLayout rl_camera, rl_gateway; + private LinearLayout ll_camera, ll_gateway; + private String devType = "1"; + private ImageView iv_gateway_pic; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wifi_hotspot); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + if (getSSid().contains("G2")) { + Intent intent = new Intent(WifiHotspotActivity.this, SoftAPActivity.class); + intent.putExtra("devId", getIntent().getExtras().get("devId").toString()); + intent.putExtra("devType", devType); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("mPwd", getIntent().getExtras().get("mPwd").toString());//将要连接的wifi的密码携带过去 + intent.putExtra("scCode", getIntent().getExtras().get("scCode").toString()); + startActivity(intent); + finish(); + } + if (getSSid().contains("HF-LPT220")) { + Intent intent = new Intent(WifiHotspotActivity.this, ApConfigActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initView() { + if (null != getIntent().getExtras().get("devType")) { + devType = getIntent().getExtras().get("devType").toString(); + } + iv_gateway_pic = (ImageView) findViewById(R.id.pic_one); + /*selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal1 = (CheckBox) findViewById(R.id.iv_select_unnor_reveal1);*/ + rl_camera = (RelativeLayout) findViewById(R.id.rl_camera); + rl_gateway = (RelativeLayout) findViewById(R.id.rl_gateway); + ll_camera = (LinearLayout) findViewById(R.id.ll_camera); + ll_gateway = (LinearLayout) findViewById(R.id.ll_gateway); + tv_gateway = (TextView) findViewById(R.id.tv_gateway); + mTitleView = (TitleView) findViewById(R.id.title_wifi_stepone); + mTitleView.setHead(R.string.add_device); + startConfig = (Button) findViewById(R.id.bt_start_config); + startConfig.setOnClickListener(this); + startConfig.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(); + intent.setAction("android.net.wifi.PICK_WIFI_NETWORK"); + startActivity(intent); + } + }); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + apSmartTv = (TextView) findViewById(R.id.tv_ap_smart_top); + tv_ap_smart_declare = (TextView) findViewById(R.id.tv_ap_smart_declare); + tv_ap_smart_declare1 = (TextView) findViewById(R.id.tv_ap_smart_declare1); + if (devType.equals("1")) { + tv_ap_smart_declare.setText("请将手机Wi-Fi连接到“G2-XXXX”后,返回此页面,热点密码" + getIntent().getExtras().get("scCode").toString()); + tv_ap_smart_declare1.setText("请确保该网关没有在乐橙等第三方app上添加过”"); + } + if (devType.equals("000")) { + tv_ap_smart_declare.setText("请将手机Wi-Fi连接到“HF-LPT220”后,返回App"); + iv_gateway_pic.setImageResource(R.drawable.pic_setup_apwifi); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + /*if (selectUnnorReveal.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + }*/ + break; + case R.id.iv_select_unnor_reveal1: + /* if (selectUnnorReveal1.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + }*/ + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + } + + private String getSSid() { + + WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wm != null) { + WifiInfo wi = wm.getConnectionInfo(); + if (wi != null) { + String ssid = wi.getSSID(); + if (ssid.length() > 2 && ssid.startsWith("\"") && ssid.endsWith("\"")) { + return ssid.substring(1, ssid.length() - 1); + } else { + return ssid; + } + } + } + + return ""; + } + +}
  • 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�K!yj0eNvU#AyHc*DBgLLK)gG|4@cx!1 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%0D{ReFrNiW2Cp4 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 _oM?t65UJc+lwEnnU~yMEm1 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