From b8f78eea71aa94fce8d0ba2389838cc19c1d3bf1 Mon Sep 17 00:00:00 2001 From: czm <2192718639@qq.com> Date: Wed, 13 Jul 2022 20:15:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=94=E5=8A=A8=E7=BB=84=E4=BB=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.tsx | 2 + src/common/constant.js | 4 +- .../estimatedAmount/index.module.scss | 2 +- src/components/orderBtns/index.tsx | 5 ++- src/components/sortBtn/index.module.scss | 8 ---- src/pages/applyAfterSales/index.tsx | 11 +++-- src/pages/creditUsed/index.scss | 3 ++ src/pages/creditUsed/index.tsx | 5 ++- src/pages/order/comfirm.tsx | 5 ++- .../components/advanceOrderState/index.tsx | 2 +- .../order/components/applyRefund/index.tsx | 2 +- .../order/components/orderState/index.tsx | 2 +- src/pages/order/index.tsx | 2 - .../components/order/index.module.scss | 10 +++++ .../orderList/components/order/index.tsx | 9 ++++- .../salesAfter/components/kindList/index.tsx | 23 ++++++++--- src/pages/salesAfter/index.tsx | 7 +++- .../salesAfterList/components/order/index.tsx | 10 ++++- src/pages/salesAfterList/index.tsx | 2 + src/pages/user/index.tsx | 13 +----- src/styles/iconfont.scss | 38 +++++++++++++++++- src/styles/iconfont.ttf | Bin 12236 -> 14732 bytes 22 files changed, 117 insertions(+), 48 deletions(-) diff --git a/src/app.tsx b/src/app.tsx index 0b1ad6c..72d455c 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -5,6 +5,7 @@ import configStore from './store' import './app.scss' import Taro, { useDidShow} from '@tarojs/taro' import { analysisShortCodeApi } from './common/shortCode' +import { IMG_CND_Prefix } from './common/constant' const store = configStore() const App:FC = (params) => { @@ -35,6 +36,7 @@ const App:FC = (params) => { } else { path = `/pages/index/index?share=${sortCode.shareShortPage.code}` title = sortCode.shareShortPage.title + imageUrl = IMG_CND_Prefix + '/mall/share_img_01.png' } return { title, diff --git a/src/common/constant.js b/src/common/constant.js index deed9aa..4b55726 100644 --- a/src/common/constant.js +++ b/src/common/constant.js @@ -11,8 +11,8 @@ // export const BASE_URL = `https://dev.zzfzyc.com/lymarket` // 开发环境 // export const BASE_URL = `https://www.zzfzyc.com/lymarket` // 正式环境 // export const BASE_URL = `http://192.168.1.5:40001/lymarket` // 王霞 -export const BASE_URL = `http://192.168.1.7:50002/lymarket` // 添 -// export const BASE_URL = `http://192.168.1.42:50001/lymarket` // 杰 +// export const BASE_URL = `http://192.168.1.7:50002/lymarket` // 添 +export const BASE_URL = `http://192.168.1.42:50001/lymarket` // 杰 // CDN // 生成密钥 diff --git a/src/components/estimatedAmount/index.module.scss b/src/components/estimatedAmount/index.module.scss index b61ef6e..6ddb7d3 100644 --- a/src/components/estimatedAmount/index.module.scss +++ b/src/components/estimatedAmount/index.module.scss @@ -31,7 +31,7 @@ .message{ position: absolute; top: 0; - background: rgba(168, 179, 189, 0.8); + background: rgba(168, 179, 189, 0.9); z-index: 9; min-height: 0; padding: 20px; diff --git a/src/components/orderBtns/index.tsx b/src/components/orderBtns/index.tsx index 0a8a676..e5468cc 100644 --- a/src/components/orderBtns/index.tsx +++ b/src/components/orderBtns/index.tsx @@ -58,7 +58,8 @@ export default memo(({orderInfo, onClick}:Param) => { SaleOrderStatusArranging.value, SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, - SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货 + SaleOrderStatusTaking.value, + SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货, 提货中 label: '取消订单' }, { @@ -115,7 +116,7 @@ export default memo(({orderInfo, onClick}:Param) => { return( orderInfo.wait_pay_amount != 0 && item.value.includes(orderInfo.status)) //只要没有付完款就显示 } else if(item.id == 3 ) { //申请退款, 只有大货才有 - return (orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //大货在待发货付过款 + return (orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && orderInfo.av_return_roll && item.value.includes(orderInfo.status)) //大货在待发货付过款 } else if( item.id == 8) { //退款按钮(直接退款不用申请), 只有散剪和剪板有 return (orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //散剪和剪板在待接单时付过款 diff --git a/src/components/sortBtn/index.module.scss b/src/components/sortBtn/index.module.scss index e734cf9..31df3c4 100644 --- a/src/components/sortBtn/index.module.scss +++ b/src/components/sortBtn/index.module.scss @@ -14,10 +14,6 @@ border-color: transparent transparent #999999; transform: rotate(180deg); } - .top:hover { - cursor: pointer; - border-color: transparent transparent #333333; - } .top { width: 0; @@ -27,10 +23,6 @@ border-color: transparent transparent #999999; margin-bottom: 5px; } - .bottom:hover { - cursor: pointer; - border-color: transparent transparent #333333; - } .selected{ border-color: transparent transparent $color_main; } \ No newline at end of file diff --git a/src/pages/applyAfterSales/index.tsx b/src/pages/applyAfterSales/index.tsx index 739ad34..3a46f34 100644 --- a/src/pages/applyAfterSales/index.tsx +++ b/src/pages/applyAfterSales/index.tsx @@ -12,6 +12,7 @@ import { alert, goLink } from "@/common/common"; import UploadImage from "@/components/uploadImage" import TextareaEnhance from "@/components/textareaEnhance"; import useLogin from "@/use/useLogin"; +import { throttle } from "@/common/util"; enum returnStatus { return_reason = 1, //原因 @@ -140,12 +141,12 @@ export default () => { } //底部按钮 - const onSubmit = (val) => { + const onSubmit = throttle((val) => { if(val == 2) { if(!submitData.return_explain) return alert.error('请填写其他说明') onSubmitData() } - } + }, 600) //退货原因选择弹窗 const [showReason, setShowReason] = useState(false) @@ -175,9 +176,11 @@ export default () => { //退货原因选择列表返回的数据 const [returnObj, setReturnObj] = useState([]) const onReturnSelect = useCallback((val) => { - setReturnGoodsInfo((e) => []) let res = val.data[val.data.length - 1] - if(val.index == 1) getReturnExplain(res.id) + if(val.index == 1) { + getReturnExplain(res.id) + setReturnGoodsInfo(() => []) + } if(val.index == 2) setReturnObj(val.data) }, []) const onHeaderSelect = useCallback((val) => { diff --git a/src/pages/creditUsed/index.scss b/src/pages/creditUsed/index.scss index e208050..9a1db48 100644 --- a/src/pages/creditUsed/index.scss +++ b/src/pages/creditUsed/index.scss @@ -19,6 +19,9 @@ font-size: 28px; font-weight: 400; } + .credit-used-list-price-add{ + color: red; + } .credit-used-list-bottom{ display: flex;justify-content: space-between; } diff --git a/src/pages/creditUsed/index.tsx b/src/pages/creditUsed/index.tsx index f2f5eed..5a3949e 100644 --- a/src/pages/creditUsed/index.tsx +++ b/src/pages/creditUsed/index.tsx @@ -4,6 +4,7 @@ import Taro, { useReady } from "@tarojs/taro" import { useCallback, useEffect, useMemo, useRef, useState } from "react" import {creditListApi} from "@/api/creditLine" import "./index.scss" +import classnames from "classnames"; import { formatDateTime, formatPriceDiv, toDecimal2 } from "@/common/fotmat" import { dataLoadingStatus, getFilterData } from "@/common/util"; import useLogin from "@/use/useLogin" @@ -31,8 +32,8 @@ export default ()=>{ return ( - 下单 - 0?'green':item.amount<0?'red':''}`}> + {item.quota_order_status_name} + {item.trans_type==2?"-":"+"}{toDecimal2(formatPriceDiv(item.amount)).toLocaleString()} diff --git a/src/pages/order/comfirm.tsx b/src/pages/order/comfirm.tsx index 30a62b5..ad3c1fa 100644 --- a/src/pages/order/comfirm.tsx +++ b/src/pages/order/comfirm.tsx @@ -15,6 +15,7 @@ import AddressInfoDetail from "./components/addressInfoDetail"; import { SubscriptionMessageApi } from "@/api/user"; import { SUBSCRIPTION_MESSAGE_SCENE } from "@/common/enum"; import { UseSubscriptionMessage } from "@/use/useCommon"; +import { throttle } from "@/common/util"; export default () => { @@ -140,7 +141,7 @@ import { UseSubscriptionMessage } from "@/use/useCommon"; //提交订单 const {fetchData: saleOrderFetchData} = SaleOrderApi() - const submitOrderEven = async () => { + const submitOrderEven = throttle(async () => { if(!submitOrderData?.shipment_mode) { alert.error('请选择收货方式') return false @@ -156,7 +157,7 @@ import { UseSubscriptionMessage } from "@/use/useCommon"; } else { alert.none(res.msg) } - } + }, 600) //页面下拉刷新 usePullDownRefresh(() => { diff --git a/src/pages/order/components/advanceOrderState/index.tsx b/src/pages/order/components/advanceOrderState/index.tsx index 01d21a2..36d68b8 100644 --- a/src/pages/order/components/advanceOrderState/index.tsx +++ b/src/pages/order/components/advanceOrderState/index.tsx @@ -66,7 +66,7 @@ export default memo(({orderInfo, onRefresh}:Param) => { onRefresh?.()}> - + 刷新 diff --git a/src/pages/order/components/applyRefund/index.tsx b/src/pages/order/components/applyRefund/index.tsx index 769e66d..f467eb3 100644 --- a/src/pages/order/components/applyRefund/index.tsx +++ b/src/pages/order/components/applyRefund/index.tsx @@ -87,7 +87,7 @@ export default memo(({show, onClose, orderId}:Param) => { return ( <> - + 退款说明 diff --git a/src/pages/order/components/orderState/index.tsx b/src/pages/order/components/orderState/index.tsx index b08861d..7dbbf74 100644 --- a/src/pages/order/components/orderState/index.tsx +++ b/src/pages/order/components/orderState/index.tsx @@ -72,7 +72,7 @@ export default memo(({orderInfo = {logistics_details: [],payment_method: 0, stat } {(orderInfo.payment_method == PaymentMethodCashOnDelivery.value)&&} - {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&&} + {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&&} {(orderInfo.status == SaleorderstatusWaitingPrePayment.value)&& diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx index b8e1b25..f2a1d39 100644 --- a/src/pages/order/index.tsx +++ b/src/pages/order/index.tsx @@ -229,8 +229,6 @@ import styles from './index.module.scss' } }, [orderDetail]) - - //刷新页面 const refresh = useCallback(() => { alert.loading('刷新中') diff --git a/src/pages/orderList/components/order/index.module.scss b/src/pages/orderList/components/order/index.module.scss index edbaba9..1d21036 100644 --- a/src/pages/orderList/components/order/index.module.scss +++ b/src/pages/orderList/components/order/index.module.scss @@ -135,5 +135,15 @@ border-radius: 10px; padding: 10px 22px; margin-top: 20px; + display: flex; + justify-content: space-between; + align-items: center; + .price{ + font-size: 30px; + color: #007AFF; + text{ + font-size: 23px; + } + } } } \ No newline at end of file diff --git a/src/pages/orderList/components/order/index.tsx b/src/pages/orderList/components/order/index.tsx index 9800929..db323af 100644 --- a/src/pages/orderList/components/order/index.tsx +++ b/src/pages/orderList/components/order/index.tsx @@ -31,7 +31,9 @@ type Param = { actual_amount: number, //实付金额 wait_pay_amount: number, //待付金额 should_collect_order_id: number, //应付单id - av_return_roll: number + av_return_roll: number, + total_sale_price: number, + estimate_amount: number }, onClickBtn?: (val:{status:number, orderInfo:Param['value']}) => void } @@ -126,7 +128,10 @@ export default memo(({value, onClickBtn}: Param) => { - {numText} + + {numText} + {(value.total_sale_price||value.estimate_amount)&& ¥{value.total_sale_price||value.estimate_amount}} + diff --git a/src/pages/salesAfter/components/kindList/index.tsx b/src/pages/salesAfter/components/kindList/index.tsx index d0d21a9..6361ec2 100644 --- a/src/pages/salesAfter/components/kindList/index.tsx +++ b/src/pages/salesAfter/components/kindList/index.tsx @@ -9,6 +9,8 @@ import styles from './index.module.scss' type OrderParam = { estimate_amount: number, //预估金额 list: any[], + product_list: any[], + quality_check_pass_product: any[], sale_mode: number, sale_mode_name: string, unit: string, @@ -23,6 +25,9 @@ type OrderParam = { total_weight_error_discount: number, //空差优惠 the_previous_status: number, //取消订单时的订单状态 actual_amount: number //实付金额 + quality_check_pass_colors: number, //验布后的颜色总数 + quality_check_pass_fabrics: number, //验布后的面料数量 + quality_check_pass_number: number, //验布后的总数量 } type Param = { @@ -39,15 +44,24 @@ export default memo(({order, comfirm = false}:Param) => { const standardPrice = useCallback(price => { return formatPriceDiv(price).toLocaleString() + '/' + (order?.sale_mode == 1?'m':'kg') }, [order]) - //数量格式 const numText = useMemo(() => { if(order) { - let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100) - return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${total_number}${order?.unit}` + if(!order?.quality_check_pass_fabrics&&!order?.quality_check_pass_number&&!order?.quality_check_pass_colors) { + let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100) + return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${total_number}${order?.unit}` + } else { + let total_number = order?.sale_mode == 0?order?.quality_check_pass_number:(order?.quality_check_pass_number/100) + return `${order?.quality_check_pass_fabrics}种面料,${order?.quality_check_pass_colors}种颜色,共${total_number}${order?.unit}` + } } }, [order]) + //获取面料数组 + const list = useMemo(() => { + return order?.quality_check_pass_product.length > 0?order?.quality_check_pass_product:order?.product_list + }, [order]) + //售后单状态枚举 const { ReturnStageApplying, // 申请中 @@ -137,7 +151,6 @@ export default memo(({order, comfirm = false}:Param) => { } else { return priceInfo[key[order?.sale_mode]].includes(order?.stage) } - }, [order]) const priceConDom = useMemo(() => { @@ -168,7 +181,7 @@ export default memo(({order, comfirm = false}:Param) => { {order?.type == 1?'退货信息':'退款信息'} { - order?.list?.map(item => { + list?.map(item => { return {order.sale_mode_name} diff --git a/src/pages/salesAfter/index.tsx b/src/pages/salesAfter/index.tsx index 54965e4..9029b07 100644 --- a/src/pages/salesAfter/index.tsx +++ b/src/pages/salesAfter/index.tsx @@ -52,8 +52,13 @@ import styles from './index.module.scss' total_colors: orderDetail.total_colors, //总颜色数量 total_number: orderDetail.total_number, //总数量 total_fabrics: orderDetail.total_fabrics, //面料数量 + quality_check_pass_colors: orderDetail.quality_check_pass_colors, //验布后的颜色总数 + quality_check_pass_fabrics: orderDetail.quality_check_pass_fabrics, //验布后的面料数量 + quality_check_pass_number: orderDetail.quality_check_pass_number, //验布后的总数量 unit: orderDetail.sale_mode == 0?'条':'m', //单位 - list: orderDetail.quality_check_pass_product, + // list: orderDetail.quality_check_pass_product.length > 0?orderDetail.quality_check_pass_product:orderDetail.product_list, + product_list: orderDetail.product_list, + quality_check_pass_product: orderDetail.quality_check_pass_product, stage: orderDetail.stage, //订单状态 type: orderDetail.type, //退货or退款 total_sale_price: orderDetail.total_sale_price, //销售金额 diff --git a/src/pages/salesAfterList/components/order/index.tsx b/src/pages/salesAfterList/components/order/index.tsx index 4d77e18..7c7f1eb 100644 --- a/src/pages/salesAfterList/components/order/index.tsx +++ b/src/pages/salesAfterList/components/order/index.tsx @@ -1,5 +1,5 @@ import { goLink } from "@/common/common"; -import { REFUND_STATUS_ORDER } from "@/common/enum"; +import { AFTER_ORDER_STATUS, REFUND_STATUS_ORDER } from "@/common/enum"; import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat"; import AfterOrderBtns from "@/components/afterOrderBtns"; import LabAndImg from "@/components/LabAndImg"; @@ -74,6 +74,12 @@ export default memo(({value, onClickBtn}: Param) => { return `${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${total_number_new}${value?.sale_mode == 0? '条':'米'}` }, [value]) + //售后单状态 + const {ReturnStageQualityCheckPendingRefund, ReturnStageServiceOrderPendingRefund} = AFTER_ORDER_STATUS + const stage_name = useMemo(() => { + return [ReturnStageQualityCheckPendingRefund.value, ReturnStageServiceOrderPendingRefund.value].includes(value?.stage)?'待退款':value?.stage_name + }, [value]) + return ( goLink('/pages/salesAfter/index', {id: value?.id})}> @@ -95,7 +101,7 @@ export default memo(({value, onClickBtn}: Param) => { {value?.sale_mode_name} {formatHashTag(value?.product_list?.[0].code, value?.product_list?.[0].name)} - {value?.stage_name} + {stage_name} diff --git a/src/pages/salesAfterList/index.tsx b/src/pages/salesAfterList/index.tsx index b77f56d..a261a53 100644 --- a/src/pages/salesAfterList/index.tsx +++ b/src/pages/salesAfterList/index.tsx @@ -111,6 +111,8 @@ export default () => { //显示记录 const [applyRecord, setApplyRecord] = useState(false) + + return ( diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index cda99e9..2f67f6b 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -13,19 +13,10 @@ import { useDidShow, } from '@tarojs/taro' import { GetAdminUserInfoApi } from "@/api/user"; - export default () => { - //重新获取用户信息 - // const {fetchData: useFetchData} = GetAdminUserInfoApi() - // const [userDataAgain, setUserDataAgain] = useState({}) - // const getUserData = async () => { - // let res = await useFetchData() - // setUserDataAgain(res.data) - // } - // 用户信息 - const { getSelfUserInfo } = useLogin(); + const { getSelfUserInfo, getAdminUserInfo } = useLogin(); const { adminUserInfo } = useSelector(state => state.userInfo); useEffect(() => { // getSelfUserInfo().then().catch(() => { @@ -45,7 +36,7 @@ export default () => { }, []) useDidShow(() => { ApigetTotal() - // getUserData() + getAdminUserInfo() }) const checkGo = () => { if (adminUserInfo?.authentication_status === 0 || adminUserInfo?.authentication_status === 1 || adminUserInfo?.authentication_status === 2 || adminUserInfo?.authentication_status === 3) { diff --git a/src/styles/iconfont.scss b/src/styles/iconfont.scss index 291d27f..ff1688d 100644 --- a/src/styles/iconfont.scss +++ b/src/styles/iconfont.scss @@ -1,6 +1,6 @@ @font-face { font-family: "iconfont"; /* Project id 2987621 */ - src: url('iconfont.ttf?t=1653384789393') format('truetype'); + src: url('iconfont.ttf?t=1657712890419') format('truetype'); } .iconfont { @@ -11,6 +11,42 @@ -moz-osx-font-smoothing: grayscale; } +.icon-shangchuanzhaopian:before { + content: "\e676"; +} + +.icon-zuzhiziliao:before { + content: "\e66e"; +} + +.icon-rili:before { + content: "\e66f"; +} + +.icon-yishoucang:before { + content: "\e670"; +} + +.icon-tongguorenzheng:before { + content: "\e671"; +} + +.icon-gerenziliao:before { + content: "\e672"; +} + +.icon-shuaxin:before { + content: "\e673"; +} + +.icon-piliangguanli:before { + content: "\e674"; +} + +.icon-xinzeng:before { + content: "\e675"; +} + .icon-yucunkuan:before { content: "\e66c"; } diff --git a/src/styles/iconfont.ttf b/src/styles/iconfont.ttf index a8e0a5ae506b1ba86cf5311419d1e377cb8c42bb..982bb9be43251b79521cc2beca4aca648ee261fa 100644 GIT binary patch delta 3362 zcmaJ@du&_P8UN0?_Pu`I>+5@MC-Eb(o!BXf?Zk2HBy}DgeS|h4X;&WU3Z0kcRnjRo|G}N1Y$ERWa zYxen_$9KMa?)kp&_nmX!JM!I?3thEeOvpL_{TYC*Wp44@?9|)azW`9m0GXrnGnJ!p zhx|DJ`~gv%M}hKt=>_b+f@qyTe(LNybn_Yj`3%SJELNv0g}b%|0pyQxJbS!ycA1RA zJ2>BfvqjKg4&=Emv2(r~dfYXAS|B94L5b?Um$k9ti3pMkU9sN3`-k zz->bT!0-NES>0+kH#ciGB0Yd(2T(4>AAc@?IYwH^xEaV^r0ce0m zXo4_AAPPY+!2lin-~$cZ-~lhbN5!p4_$E8Zpx~RFxQ8z2#`nvYcSw}fP!E6fFt724 zGi;9l?gH4T0PY9aEdsbRV0#5{kHE$RaJRt51#sWMZWTZafK3RXEx;xP&?;cH{a7K; zKwt+1&{SYw7eJ$d9TY(Gf!!v6jsSMM0J;R&9RlbaV0Q|jn}AITpu>P+kU7wGz`h|+ zLoWhD>p9S$!0r-2&jPz!0DTPXhyZ#U*f#~x@4zYo7y)1yI}VHmuxSB|3b3OB7$0CW z0vIV^vryv|V9e2w<3jEeddAvEu?5dSFWeoS&>J zfOG)1EC99|c1{Q&M}VCaK(+u|5kTGmJ0*Y&0(M#exdiNt0B826$O8`K7kr95;NX11 z--~27d5t>gEWIk-EnT(kwY_E^us<$)GU|yyCN>j{iMg|dB&UYKJNWk z{a7n%_iCT|e(d{?zN-Jpf6D)i|0Dlr#(?p$A_3DLUsV7(*CPQR9$p@QBjFfuv!6-3Wy$pBqaQ}Qy{4pWZ}01CCzCE! z9V||5Gsliim%H|NrAJ~~X>7D3Iq)>jxO!Zg=9(SXOl_PGw>tA-gFI<85#slyy*{5e z?emkc@iJF_$!KlTAKI7adaBGFh+agx>OGW zdb1Sg-Vt84hhikuQ_IH)dR!&VB&hNjq!Q?Vbn-AMrg%i^A*+WjA0(MTG#ViP135OodL&utLiV-vpm$txYi)b`wNl}yhL_3dCEN>lD9K@ljwt`(%4l1hC)@#G! ztPku3o2ojTD0gCN;B8j-&_4Q0JgkOcAK(#1wrCQ+PL~?;Ws7OZ)0AP#N<2#hWv`Pc zzC|XaopOT*mFrxqbL`LkxV=rlY9QU$mnOeP4#{D|>M)v`i~$rAKG$!AFIyjQzL0JV z=~I{P2pYO$J%UHq7lWruV?X=!VA9FQC@`6DQM)J|ILsgPsJ zZl7|}K*IlqVt>q=Of=94Q8skb)Hf6op$&|MwELVRk?H#$ ztnTwruhZ^wQ?+*6{olW^5;r8D;h{3Y?k~G)YeG^7*X7>)4)2`!<%`Zd@-W~K^yu_3ERniMPV4R1Kr0^_D<2_*F zafUu9rX(RjGq)rPKLUBmD*Uv}2ThsWnA11($<|4V50HI|X5W=k{O+1kkp1#Og*vWF zJY-8Ug#jAIFsp_UHB4HvR_mGm9bVtix0cEOMD#5im3O9OuU{_6xU6Yis|ytJmE>w> zxU+LOvt&k0EHzT{nqDlHYN%Mq`=aFux%s*Dxa7gFnKa(PU{7ReVTk5qG{BQkmJ+nrx^h zer#QSM4n2M{Q4)E12y~@=p-3ragKD6ZjvWG;9r@qEX_^NpRO#e&R43-3za4J>gm<_ zh1G?{g-X?S5*ydKg_Zg0>1kBdPF0uY=1x~n&Y=3t(wuv4hIi|_$_lP>c45i8%!gd9 Vvb4CMpkx&_o##$p?#r%`{{q+YY*YXM delta 999 zcmXw%OGwmF6vn^*{Kt7XPp6landX#_ibNzgk{iJX_EIagQYS~9(osPdwwi1a5iYE0 z)hf(Q5Fy&CM8ZXsM2M?4J!o+jlM6S2L@|AL4qf=&_vM`PeRp>9W8YkLYQ1CiCE%C? z?D^r*+e5E^#=iir`#^LfF&K-Nym@pLz;|*w!43B}`#I+;B$`N0O)ogIe*tTY>xI$r zf!K%Y%?RJua^0DXO;1=2c+c}fu1m&Z$-(fm`bFS)7h?`jj86up;sw7KfRk^z;eEJL z)=&wHcgfwcdn0|J`d{!lxdD9rRDSCJn9XKWPRpL*+5?B#Wi#(8my4~al^$}$QcJlF z;05g5>;%Vr-dchacX-vKPo-6onX}m}AWhPiX*082vv?lF13O$x(8niVDhX;GL8q*Y;3kT!+sLCz{n6mm{s%8>I4lZUV*1IvJ1Oqq_0 zQjYBkYlCzstP;|xuwKX|g_T1tE7SmTMWGrHnromgkZy$vL3$Kw1>vVMz|=3-6bcBr zu24!yuR>8FeG27;^eYq^5>qHSdK;nwAUj`LA0~um`)6pczutK{a35CW% zZYt)R$t{IuLPiwY3K><*Ka-?FtC68K2AYlxtuYvjb8QOSR-@Ij=IC{-+Gp$^&b7SS zyiM0DcbEH}r{DA0+vuImpUvO$)%c$Jd;E)m>cEp=Rj@z!AUGe~4o!#FLw~|G;mv}g cNJXSMl33mdb(dR}>8iSR3(Grok1b}2fBg^Gz5oCK