From 5736265388c302766ed8a0bcc988ab9130d49a12 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Fri, 30 Jun 2023 16:03:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BA=A2=E5=8C=85=EF=BC=8C?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E7=BA=A2=E5=8C=85=E6=8E=A5=E5=8F=A3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/bean/RedPacketInfoModel.java | 24 ++++++ .../com/yunbao/common/http/PDLiveApi.java | 12 +++ .../common/http/live/LiveNetManager.java | 22 ++++++ common/src/main/res/values/strings.xml | 2 + .../live/dialog/ReceiveRendPacketPopup.java | 72 ++++++++++-------- .../live/dialog/ResultRendPacketPopup.java | 64 +++++++++++++--- .../yunbao/live/views/LiveRoomViewHolder.java | 36 ++++++++- .../main/res/layout/view_no_red_packet.xml | 49 ++++++++++++ .../res/layout/view_result_red_packet.xml | 64 +++++++++++++--- .../mipmap-xhdpi/icon_grieved_red_packet.png | Bin 0 -> 7996 bytes 10 files changed, 289 insertions(+), 56 deletions(-) create mode 100644 live/src/main/res/layout/view_no_red_packet.xml create mode 100644 live/src/main/res/mipmap-xhdpi/icon_grieved_red_packet.png diff --git a/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java b/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java index 4880dd1c5..888a0dd6d 100644 --- a/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java +++ b/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java @@ -41,11 +41,15 @@ public class RedPacketInfoModel extends BaseModel { private String userExists; @SerializedName("is_attention") private String isAttention; + //0.未领取到 1.领取但是没抢过东西 2.已经领抢到东西 + @SerializedName("receive_status") + private String receiveStatus; public String getIsAttention() { return isAttention; } + public RedPacketInfoModel setIsAttention(String isAttention) { this.isAttention = isAttention; return this; @@ -56,6 +60,26 @@ public class RedPacketInfoModel extends BaseModel { @SerializedName("red_packet_gift") private List packetGiftModels; + @SerializedName("gift") + private List giftModels; + + public String getReceiveStatus() { + return receiveStatus; + } + + public RedPacketInfoModel setReceiveStatus(String receiveStatus) { + this.receiveStatus = receiveStatus; + return this; + } + + public List getGiftModels() { + return giftModels; + } + + public RedPacketInfoModel setGiftModels(List giftModels) { + this.giftModels = giftModels; + return this; + } public List getPacketGiftModels() { return packetGiftModels; diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 15d747ef6..27634d90a 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -751,4 +751,16 @@ public interface PDLiveApi { @Query("liveuid") String liveUid, @Query("red_packet_id") String redPacketId ); + + + + /** + * 获取盲盒礼物当前数据 + */ + @GET("/api/public/?service=Live.getRedPacket") + Observable> getRedPacket( + @Query("liveuid") String liveUid, + @Query("stream") String stream, + @Query("red_packet_id") String redPacketId + ); } diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java index c4000a5e1..d4311ebe7 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -1603,6 +1603,28 @@ public class LiveNetManager { }).isDisposed(); } + /** + * 领取红包 + * + * @param liveUid 直播间id + * @param redPacketId 红包id + */ + public void getRedPacket(String liveUid,String stream, String redPacketId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .getRedPacket(liveUid, stream,redPacketId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(redPacketInfoModelResponseModel -> { + if (callback != null) { + callback.onSuccess(redPacketInfoModelResponseModel.getData().getInfo()); + } + }, throwable -> { + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + }).isDisposed(); + } + /** * 直播间取消网络请求 */ diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 01e644c90..160c4e708 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1226,4 +1226,6 @@ Limited ride And limited avatar frame 倒計時:%s 待開紅包:%s 來自%s的獎勵,齊心協力連成目標 + 很遺憾 + 與紅包擦肩而過 diff --git a/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java b/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java index b8f81efdd..eb774e513 100644 --- a/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java +++ b/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java @@ -24,7 +24,6 @@ import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.TimeUtils; -import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.weight.CircleProgress; import com.yunbao.common.views.weight.ClipPathCircleImage; import com.yunbao.common.views.weight.ViewClicksAntiShake; @@ -37,18 +36,24 @@ public class ReceiveRendPacketPopup extends CenterPopupView { private Button redPacketOpen; private TextView redPacketTimeText, receiveRed, redPacketValue; private FrameLayout redPacketTimeLayout; - private String mLiveUid, redPacketId, userID; + private String mLiveUid,stream, redPacketId, userID; private ClipPathCircleImage headPortrait; private RecyclerView redPacketGiftList; private RedPacketGiftAdapter redPacketGiftAdapter; private ImageView isAttention; + private RedPacketInfoModel redPacketInfoModel; - public ReceiveRendPacketPopup(@NonNull Context context, int time, String mLiveUid, String redPacketId) { + + public ReceiveRendPacketPopup(@NonNull Context context, int time, String mLiveUid,String stream, + String redPacketId, RedPacketInfoModel redPacketInfoModel) { super(context); this.time = time; this.mLiveUid = mLiveUid; + this.stream = stream; this.redPacketId = redPacketId; + this.redPacketInfoModel = redPacketInfoModel; + } // 返回自定义弹窗的布局离开 @@ -66,31 +71,20 @@ public class ReceiveRendPacketPopup extends CenterPopupView { } private void initData() { - LiveNetManager.get(getContext()) - .redPacketInfo(mLiveUid, redPacketId, new HttpCallback() { - @Override - public void onSuccess(RedPacketInfoModel data) { - ImgLoader.displayAvatar(getContext(), data.getAvatar(), headPortrait); - receiveRed.setText(String.format(getContext() - .getString(R.string.together_to_achieve_goal), - data.getUserNicename())); - redPacketValue.setText(data.getAmountDiamond()); - redPacketGiftAdapter.addData(data.getPacketGiftModels()); - IMLoginModel userInfo = IMLoginManager.get(getContext()).getUserInfo(); - if (TextUtils.equals(String.valueOf(userInfo.getId()), data.getUid())) { - isAttention.setVisibility(GONE); - } else { - isAttention.setVisibility(TextUtils.equals(data.getIsAttention(), "0") ? VISIBLE : GONE); - } + ImgLoader.displayAvatar(getContext(), redPacketInfoModel.getAvatar(), headPortrait); + receiveRed.setText(String.format(getContext() + .getString(R.string.together_to_achieve_goal), + redPacketInfoModel.getUserNicename())); + redPacketValue.setText(redPacketInfoModel.getAmountDiamond()); + redPacketGiftAdapter.addData(redPacketInfoModel.getPacketGiftModels()); + IMLoginModel userInfo = IMLoginManager.get(getContext()).getUserInfo(); + if (TextUtils.equals(String.valueOf(userInfo.getId()), redPacketInfoModel.getUid())) { + isAttention.setVisibility(GONE); + } else { + isAttention.setVisibility(TextUtils.equals(redPacketInfoModel.getIsAttention(), "0") ? VISIBLE : GONE); + } - userID = data.getUserId(); - } - - @Override - public void onError(String error) { - ToastUtil.show(error); - } - }); + userID = redPacketInfoModel.getUserId(); } private Handler timeHandler = new Handler(); @@ -147,10 +141,25 @@ public class ReceiveRendPacketPopup extends CenterPopupView { } ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.red_packet_open), () -> { - dismiss(); - new XPopup.Builder(getContext()) - .asCustom(new ResultRendPacketPopup(getContext())) - .show(); + LiveNetManager.get(getContext()) + .getRedPacket(mLiveUid, stream,redPacketId, new HttpCallback() { + @Override + public void onSuccess(RedPacketInfoModel data) { + dismiss(); + new XPopup.Builder(getContext()) + .asCustom(new ResultRendPacketPopup(getContext(), false, data)) + .show(); + } + + @Override + public void onError(String error) { + dismiss(); + new XPopup.Builder(getContext()) + .asCustom(new ResultRendPacketPopup(getContext(), true, null)) + .show(); + } + }); + }); ViewClicksAntiShake.clicksAntiShake(isAttention, new ViewClicksAntiShake.ViewClicksCallBack() { @Override @@ -166,6 +175,7 @@ public class ReceiveRendPacketPopup extends CenterPopupView { } }); + } } diff --git a/live/src/main/java/com/yunbao/live/dialog/ResultRendPacketPopup.java b/live/src/main/java/com/yunbao/live/dialog/ResultRendPacketPopup.java index bef6d0c21..9571efe6b 100644 --- a/live/src/main/java/com/yunbao/live/dialog/ResultRendPacketPopup.java +++ b/live/src/main/java/com/yunbao/live/dialog/ResultRendPacketPopup.java @@ -1,29 +1,39 @@ package com.yunbao.live.dialog; import android.content.Context; -import android.os.Bundle; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; import androidx.annotation.NonNull; import com.lxj.xpopup.core.CenterPopupView; -import com.yunbao.common.Constants; +import com.yunbao.common.bean.RedPacketInfoModel; +import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.utils.Bus; import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; -import com.yunbao.live.activity.LiveAudienceActivity; import com.yunbao.live.event.LiveAudienceEvent; public class ResultRendPacketPopup extends CenterPopupView { + private boolean noData; + private RedPacketInfoModel redPacketInfoModel; - public ResultRendPacketPopup(@NonNull Context context) { + public ResultRendPacketPopup(@NonNull Context context, boolean noData, RedPacketInfoModel redPacketInfoModel) { super(context); + this.redPacketInfoModel = redPacketInfoModel; + this.noData = noData; } // 返回自定义弹窗的布局离开 @Override protected int getImplLayoutId() { - return R.layout.view_result_red_packet; + if (noData) { + return R.layout.view_no_red_packet; + } else { + return R.layout.view_result_red_packet; + } } // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑 @@ -35,11 +45,45 @@ public class ResultRendPacketPopup extends CenterPopupView { private void initView() { - ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.illustrate_close), () -> dismiss()); - ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.anchor_his_heart), () -> { - dismiss(); - Bus.get().post(new LiveAudienceEvent() - .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP)); + if (noData) { + + } else { + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.illustrate_close), () -> dismiss()); + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.anchor_his_heart), () -> { + dismiss(); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.GIFT_POPUP)); + }); + LinearLayout goldenLayout = findViewById(R.id.golden_layout); + TextView goldenName = findViewById(R.id.golden_name); + LinearLayout giftLayout = findViewById(R.id.gift_layout); + TextView giftTitle = findViewById(R.id.gift_title); + ImageView giftImage = findViewById(R.id.gift_image); + ImageView goldenIconBeans = findViewById(R.id.golden_icon_beans); + if (redPacketInfoModel.getGiftModels() != null) { + if (redPacketInfoModel.getGiftModels().size() > 1) { + goldenLayout.setVisibility(VISIBLE); + giftLayout.setVisibility(VISIBLE); + giftTitle.setText(redPacketInfoModel.getGiftModels().get(0).getGiftname()); + ImgLoader.displayAvatar(getContext(), redPacketInfoModel.getGiftModels().get(0).getGifticon(), giftImage); + ImgLoader.displayAvatar(getContext(), redPacketInfoModel.getGiftModels().get(1).getGifticon(), goldenIconBeans); + goldenName.setText(redPacketInfoModel.getGiftModels().get(1).getGiftname()); + } else { + if (redPacketInfoModel.getGiftModels().size() > 0) { + ImgLoader.displayAvatar(getContext(), redPacketInfoModel.getGiftModels().get(0).getGifticon(), goldenIconBeans); + goldenName.setText(redPacketInfoModel.getGiftModels().get(0).getGiftname()); + } + goldenLayout.setVisibility(VISIBLE); + giftLayout.setVisibility(GONE); + + } + } + } + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.view_lucky_viewers), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + + } }); } diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index 648708eca..d64e7c4fd 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -83,6 +83,7 @@ import com.yunbao.common.bean.MsgModel; import com.yunbao.common.bean.NewPeopleTaskModel; import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.RankHourModel; +import com.yunbao.common.bean.RedPacketInfoModel; import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.RewardAllModel; import com.yunbao.common.bean.StarChallengeStatusModel; @@ -155,6 +156,7 @@ import com.yunbao.live.dialog.LiveUserAnchorMailBoxWebInfoPopDialog; import com.yunbao.live.dialog.LiveUserDialogFragment; import com.yunbao.live.dialog.LiveWishListDialogFragment4Audience; import com.yunbao.live.dialog.ReceiveRendPacketPopup; +import com.yunbao.live.dialog.ResultRendPacketPopup; import com.yunbao.live.event.LiveAnchorEvent; import com.yunbao.live.event.LiveAudienceEvent; import com.yunbao.live.event.LiveRoomChangeEvent; @@ -1413,7 +1415,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis redPacketQueue.setVisibility(View.GONE); redPacketCountdown.setVisibility(View.VISIBLE); redTimeCountdown = redPacketModel.getCountdown() - 180; - redPacketCountdown.setText(TimeUtils.getTime(redTimeCountdown)); + redPacketCountdown.setText(String.format(mContext.getString(R.string.red_packet_countdown), TimeUtils.getTime(redTimeCountdown))); timeHandler.postDelayed(timeRunnable, 1000); } else { redPacketQueue.setVisibility(View.VISIBLE); @@ -1426,9 +1428,35 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.red_packet), new ViewClicksAntiShake.ViewClicksCallBack() { @Override public void onViewClicks() { - new XPopup.Builder(mContext) - .asCustom(new ReceiveRendPacketPopup(mContext, redTimeCountdown, mLiveUid, redPacketModel.getRedPacketId())) - .show(); + LiveNetManager.get(mContext) + .redPacketInfo(mLiveUid, redPacketModel.getRedPacketId(), new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(RedPacketInfoModel data) { + if (TextUtils.equals(data.getReceiveStatus(), "0")) { + new XPopup.Builder(mContext) + .asCustom(new ReceiveRendPacketPopup(mContext, redTimeCountdown, mLiveUid, mStream, redPacketModel.getRedPacketId(), data)) + .show(); + } else if (TextUtils.equals(data.getReceiveStatus(), "1")) { + new XPopup.Builder(mContext) + .asCustom(new ResultRendPacketPopup(mContext, true, null)) + .show(); + } else { + new XPopup.Builder(mContext) + .asCustom(new ResultRendPacketPopup(mContext, false, data)) + .show(); + } + + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + new XPopup.Builder(mContext) + .asCustom(new ResultRendPacketPopup(mContext, true, null)) + .show(); + } + }); + } }); } diff --git a/live/src/main/res/layout/view_no_red_packet.xml b/live/src/main/res/layout/view_no_red_packet.xml new file mode 100644 index 000000000..507643447 --- /dev/null +++ b/live/src/main/res/layout/view_no_red_packet.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_result_red_packet.xml b/live/src/main/res/layout/view_result_red_packet.xml index ae3a95066..d98f87e34 100644 --- a/live/src/main/res/layout/view_result_red_packet.xml +++ b/live/src/main/res/layout/view_result_red_packet.xml @@ -30,21 +30,63 @@ android:textSize="18sp" android:textStyle="bold" /> - + android:layout_height="wrap_content"> - + + + + + + + + + + + + + + D`Ogfno zf?}z4X&eq@2<>I83jC+O&+v_K)Nvd#xAga4s;rc=P^NQ2`R5?tJd=Y2%_bTIG#w8$ zvtc{g8xKoc_Po$dtq(`Tc`zBI^y7Ncb>8yzefw69$Jos+8A!+XBAg&=She`uwi>B% z7YlPIC#{n@qCPw{%#!C1R`@5&)+dL-@mj$})9QvYAbV9Qn1CpL&aPuvdL#f9y1m@V z^GN4Cpg2%wqtnew|I(jy3+>)m{yQy#O1#p3JU5e#H%M z`qWduNJR?5_JmD|ws+HShwSODN*3|PVMgg1KLb@m?W|3eJm{Fet;PPQHn_Qg+~XtBxGlo`743C`@a1`AuMd1Nzv;ANVu6eC+H+x?}e&W=9~Ht@m<1R6>@)7=EH!6bf% zP!(Eb^V!58QPN^%?wZ;Ee(gR}Ej;@E#z2<1=o$Zgr$jAN(X zU>Dmu@nweH9I`vVCoN8yHR@z8Z$6RDyyY7i62@$GStX>T5yD7ol0-JeY>GWJ7eKV9 z$HJ7fVROaDV6lpwNWyu(=`9S**7j9*QaZ@1GDn0<_Odpdh)5F4@oD6sF+npI|E=@dKz>aIg^UTBJ;zLvEQ zJ+^l@?WAKDUpi&C+#LL0Eu3gAJ@?ie`6D9Big%v(9YxXP+P5(A>?s2nC%uEHUpTmx6@8mt9@exvaZI_Kp~OtuD{hUS}3&o&ZmxA~gV(HlUXs z(TJSh3X0bpn0TZs9eLg~K<=!?CrPBPm5Sb3|yD!9UdtSD>Clq)F;bXQk0JWTj+n(g-LRK~m7SnuN*}gDd;vYxhx=VxH z@4(MNU{GSfBnOsa3Rtg41e*iK5TVDHVxPj`Mu-9C8YoPQ&>`75Whg z(x7sLKRH>fbyd&_0(LFfBi#ObV&dd7kWS{;(2zngå&-2j5BjK|xFN=_+s^A1( zkfDKrc_Gg)Apk>KR0K?gE^5frqGP^_QRMeCL&FZ>iWVDPzPM+B4NYc!W8-6gVsHW# zh!=raQdTx5B079d=;pXt+FZT7+5d^A9&9*W5wo44d)H)v@=BgkUPrqfG621*T?{t` zGT6s1jn3DkyW|$Akd1668rv9}aU<1Q|yciD63 zFzEIlBU#eGg(p?1{_@|GubiBmY%@2kJKJPlu-EVD%`5l(wUpj&;lTL#_=q`+-eH(4 zE92~h%bOIyI#Tzh7dv+kjPQcUMN$qOH|gi*=M~)4YpCR^x%8pX9WoUa6=MMD?KAdL zw;yZo!U;t?3iocnyoTOiQxJ$T8L>&?MyCRrzLu7jqwW2DN_MOMczz^@kp$o&9yZ2V z)J<4qy+7Y5^tnQNv6K55AxqxR<(Ok(4-&F_g3d8eTeuemjH?`Rqr%oq*x511IW985 z5HUArs?0_v`|pq4pAH2mXfMLx^54JwCA6`qTMndItzN(OqZ3uIF*HWV6Hh#XL?6vj z7q=MuwR6>mKXX%&TW9H1)YL)_oAI$af3$)tKCpDa$oW3dZ zI9e9%-B^^@=eRJUA@)l7@tunHb9rLa*sx6OcIM*ZqNI!uex)s?O>T<{RzSdLumeEko`vn$AXLs;u3r;82Bnw(a_a<)aSV(9%)J)PTKx zvpVYH^`u?F0a0s5p&^VXFT^Q0KlN}3!9yuO~YanYMzOXi@yo#2Wj z5+301RrGcS^nsNrA=D>jcClQat>OJk}8@{8+^$Y(YZb%l3_ZL+; zUY}n(U;NP*@$yfPve(&B5HX+6qmz@9J@IjIb#-|5YlKJ39af2bwv1ZR*&ZMQ)w|%w z3U954ybnyB3SydjEy=KowaeQ_jFmx#`p0ZIbU6M@((KY35}y24$i#G<0PxI{G7?ALBNmLTz)h)|VyWOxNJD z7`gX_y7|CR~n)dWx|bU2HRkLyUWAH zpq{qAx{8*T+osXc(SxTOqI?pwS6IFGh|ww5wc>=`aN0tT;*Kt~!+>^|7$JTEa- z6&9AB({%LA1z|cTsy40Nm{LAg5EmC$Sj4jy*WXdH%Myx0L%6-cV{4QMx;^MWT~}AP z8y+5RMLJOn6?lRf0Z2fkdpsSfTVJAP}a9m8& z9DA=;e?p}$67Bx+Dt&#+dxyJp3DUv{zhMEbrjVk&W~tthxp!2k)L0lVWo#Q(fAaj& zp9Ja|xmdxP))+>!Mq6V~?th0%iA8I+X^3>G^Fj8@)}}+`hJ}Si$j<(Lpr66-GiB?G z3~$#xJlBrLT{uxbTJqz8Yg??AT=-%2Gl=XuDdbUd!}(#q37k@<#}Y>1$lPsV9UHzR<1k%}2J z3;uX8rvFsXG_AJOwL#{MQvknlwSbPcbg|+7f$29pp@W?~Q_-s7+S|paa~~^^zZnkA zm2^__pD?VmO#HGg-SRNX9W{pOa6FJ^3FeiPIe|4hQ>UZJ54rTs_G#GyC)Kw^wENc-a2{W( zjBABzwL;X=91P!d+b6>uZP=BI2+^TG=Iju3G}L7p6pt<*BH#%3f6YfIYf68dZwHpr zWJM)Iodt|u1bmCY@9BA(w8CdaLwIFQJ1RBu0RGAZR22fKVP`cOWKHy?3VXGq=3UB_ z=#;A2^))#BX+>ZAqvW<5m8ASEOE1gC+y-+H@7Qa90`2k`BVw;kv(*bq1#x8jqlcP5 zLB2HnnPT}f$2{wLu4N`%Dqx&MJJq%9y(nHKlay6R`6s@5$d}7xmBzPN?MZLQ zOI|D@5L%o?Ay~qRupzud!oDoO92*)TZ%@zGOd^@=o(V|;Jo0msw<%qZl|)zXZQg-T zNLkS=>ntUqfgv&H1?ar7?v#;?^v^(C-9IGJM%8A;CYq&UXDElY9U?a1QTYo;UXq2v@7Z;fvz}lZYC;)a1Wh3W4 zv2j<(i!pGN{}kiM88G*3mnO=+UEc$-*|4o0tEQay-6F>Kg=VP`yPwg*3%J|9Jgy$S z1->LMf1C0AD=!lqbh4zVye3}z`uK(ji#16lt=Io41wZ`)F|1erF}TazqkP zCqKWR#=2=OQ3@W+YA4V6^X#S3uG&beCawMqYikC#HN(}xq)%eY9{59r88f*wU}RHk z!l5g4U{21R0w=h`Dv&Mu)B811?=Ns@$T#4c+6M%}l0Z>8TIL%YM^Pzy_Z#anU);|1 zYC#&a@|)>hd$A zH*vYy$K!~pp|SvUQlc^}VC41P%c3#x-dhT4%2xXXmRvVRxYSnWR-i8@glP)eg4db^e!Zq3*N|(mOe5qt=z0oTAAKT?D(jAi%Y%Y z+PsZ0lqb_1O-`Wz#g;+b1(_UQsb6mppDwI4uTU<(RUIFs;6z*4Gjvj(oV8nPtR=s5 z7&a;!`HKKH6D6Ze6!DNd!!t}h13Ea(n{NWf@e8wT<1`c_UwURbY za%xF(60eeu^;}*-8rmxslO5^dST&E=+^LHzPm0+%kz#zx#Xu>_bM{+%plT+@&c-?; zaMX8!&dsR+ik}c@A-vKOY%rO~_8AM**DIY><>StNyRvTyZVq)UZr2a+eEB|zi$?9y z!omnyFTp@e%5}(+7KfjJxY|T#}lhl_zMzTz+0Yb{nQyHIV=1y50!ah0&`cNw%>DCj;8%A4vOrqZ zv`R`7Rpwkoveh1ixflPH09lb$o|Zx;_tD^)!4CJ^?5fv61}a9?4-YAB=tu?2b$Vk3 zCb$rsA*|EKWC>2Ue|#6kILZ-%o_I^SYglLLV=q`z99uecp+wjx7v}tAc-6Uzwht@I z&kaia>r>Lvk@ejzH)ZLd*w~vJISBgSC$ZzD@64w#5`A&=#8IRLOWD&b4vZG)vFatv zK6}louVJ>&5782GAi2t}rA9PN4C_Ur8QKzF@(rNjfzGhJ^xRvas`NV+ysZh&)q;12-uYT)JGv|s|`A?#|Mab@Ky}1@h zzvM6bJsu!4hjXDa*gE}4G1Bw%5s1`MO{ygUuIyj7={}YywBs7bxCO$61@+v{%{x#= zO7=Dyo5=M)-*ZdGouA;gPJwVL=`W(@isltPef!^QoOIi4B7e{LiKtzx^fTZ+kHB!f zsWAsR6;2^ut~zlm@E0wq;u0@*bvlrZl<#(#Mk-=D&~e)F`ximRW3_ z>9#`y-prPem$H9vn5whxw3Ep)=~snkG;B*|@f4TcEWT&(^EWJSqa=kLBql&ZimE(J z$#`j>JP{<6%<7Qt_{Gh(Gs{Q&Uzm`{39bJt^=aJ@gDTfoeS=kK?o?JgGDl%sHW`?n z08cUuojucwq0V;)#mc`U9(dqL*>*rYW+l$eAtrU;=Ph7Y4>MV{UfO^zfs|M1h_MA< z^Dr8$_aDk2;LPtFQ*0V^#H7`br&Zn>t2vh z1A8yJF0nbhV?NvVHu$g0OV7YTJ{a+5zV1}o04?0h!0bW>yKnB;WY@IjS~_vJu``*c z6?iKagvuD(*mGU)>r<3u2qPN#a9SM-CR;X!mOJ3 zqHq5zJ6aX2SE-~x{N}w5Ma@%?K|v{vPr;xKXVlLzH!#=b1$fDn1DV!nu_fQb30pvM z`@Ku%&|mV-yCuy0Ul;y|?7ic_*WRoem^>zAv(6|WrD656!F5hX3~*qkKaQXuf`m+*Lvxx^GP;)&+{TJt=01=Ml=}h2*Tv%!~P}4 zGKpAnTZZf!=pgan4@@_&&p9j8RM>=L6t|uz-U(93UKs~nTlu{VqGWLmSMFo5p0puX zi|vfYudl*rmKk{k=f@rV%>w!mBJsj@QZ+2@EkUVrA#>Ov&3MBv2BO_O5k+`2XJ{SU zi#T9t`I{l_JPv&Y%se5i6V%9fjE>p2)9cKJ zCqz6wUzU+4M|x?Mq2u9l|FD4Hy=L}neVC)C6y#+3w~`Fz7iI1RL`W0EhE0)y&C`&$&3uzqg=e6uRxS z(8Wx`hStSFY&i<5vM?vUiU`#clMiEbwLDq^dfv&wP;EL_`u{aa*6qn<)_7(KmCB{R z@BuC;3$43-BfJBzTW$*!qq8pD$UCl$5H69f}I!*-5Hx4d`Jm2~&1 zz(7`c+%_r?j@l0z4^Rr$wfuqG$6U>LO9iKb&Rl_eRe?spd0vT|E~}0|oAC8uNiKba zPLgwGFG4fn)$RPNQ&G(G;5dY_EAz9oTnJ$|JPNPNM2sz*%`~n_S@H$ryke5WQE$|G zbz|6{J-{W$Wty*KD9eZo`Etj{lr%_CLCcmFU-v`#n#UV?R%V2Y61t46OHqcoM)T_F zCHpu9UN1)g>gieD!55})EaZ~oxrTyB2Kr=3(8sqh+~kuO8$4J(d-fpnJ-QTAfkr;y*(kk zi^ah->fB22E|br8!KM%|Czq*~;-7XfNKo-k4DyrE*az(1vvAkT%ms{$x-ENoddy>57>KprK{t{sYs0l zmXNA4VR2Z90NBY5Hu)V_j#S(5rtSdB^WSBCytlm#RUpwx%+;Sg2sa-(^A^4*i1cI* z+B~uMfe6sTBw)m*at*^d32bBLq(OAO0}<|&p?sl103?O2hD8b)Ypq{BUV=C25)Qqq qlCC9yR(qn-aPy0YzVP2i49@Ns!z>zgdFXaH0IZ^=T&-js{(k`B(p7%| literal 0 HcmV?d00001