From 62d73ef052c590cf7fc0ef59ffbee04a455ababa Mon Sep 17 00:00:00 2001
From: xy <271556543@qq.com>
Date: Fri, 7 Feb 2025 18:05:56 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common/http.api.js | 17 +-
package_sub/pages/Shop/Order.vue | 595 +++++++++++++-
package_sub/pages/Shop/ProductDetail.vue | 949 +++++++++++++++++++++--
package_sub/pages/Shop/ProductList.vue | 4 +
package_sub/pages/Shop/Reply.vue | 224 ++++++
package_sub/static/Shop/yishouxing.png | Bin 0 -> 8434 bytes
pages.json | 6 +
7 files changed, 1713 insertions(+), 82 deletions(-)
create mode 100644 package_sub/pages/Shop/Reply.vue
create mode 100644 package_sub/static/Shop/yishouxing.png
diff --git a/common/http.api.js b/common/http.api.js
index 3c6dc2c..131b39b 100644
--- a/common/http.api.js
+++ b/common/http.api.js
@@ -42,8 +42,11 @@ let apiApp = {
// 用户商城订单
userOrders: '/api/mobile/user/orders',
userOrdersDetail: '/api/mobile/user/orders-detail',
-
-
+ // 购物车
+ cartIndex: '/api/mobile/cart/index',
+ cartShow: '/api/mobile/cart/show',
+ cartSave: '/api/mobile/cart/save',
+ cartDestroy: '/api/mobile/cart/destroy',
hospital: '/api/mobile/hospital/hospital',
banner: '/api/mobile/other/banner',
@@ -98,6 +101,13 @@ const install = (Vue, vm) => {
const hospitalList = (params = {}) => vm.$u.get(apiApp.hospital, params)
const banner = (params = {}) => vm.$u.get(apiApp.banner, params)
+ // end
+ // 购物车
+ const cartList = (params = {}) => vm.$u.get(apiApp.cartIndex, params)
+ const cartShow = (params = {}) => vm.$u.get(apiApp.cartShow, params)
+ const cartSave = (params = {}) => vm.$u.post(apiApp.cartSave, params)
+ const cartDestroy = (params = {}) => vm.$u.get(apiApp.cartDestroy, params)
+
// end
vm.$u.api = {
@@ -122,7 +132,8 @@ const install = (Vue, vm) => {
userAddress,userAddressShow,userAddressSave,userAddressDestroy,
// 用户商城订单
userOrders,userOrdersDetail,
-
+ // 购物车
+ cartList, cartSave, cartShow, cartDestroy
};
}
diff --git a/package_sub/pages/Shop/Order.vue b/package_sub/pages/Shop/Order.vue
index 0d799ea..054b954 100644
--- a/package_sub/pages/Shop/Order.vue
+++ b/package_sub/pages/Shop/Order.vue
@@ -1,23 +1,608 @@
-
+
+
+
+ {
+ if (item.product_sku && item.product_sku.stock_num) {
+ pickCart = item;
+ }
+ }
+ "
+ >
+
+
+
+
+ {{
+ item.product ? item.product.name : ""
+ }}
+
+
+ {{ item.product_sku ? item.product_sku.name : "" }}
+
+
+
+
+ ¥
+ {{
+ item.product_sku ? item.product_sku.price : ""
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 猜你喜欢
+
+
+
+
+
+ {
+ toDetail(item);
+ }, 500)
+ "
+ >
+
+
+
+
+
+ {{ item.name }}
+
+
+
+ ¥
+ {{ item.price }}
+
+
+
+
+
+
+
+
+
+ 合计:
+ ¥
+ {{
+ pickCart.product_sku ? pickCart.product_sku.price : 0.0
+ }}
+
+ 付款
+
+
+
+
+
+
+
+
+ {
+ if (item.stock_num) {
+ cartDetail.product_sku_id = item.id;
+ }
+ }
+ "
+ >
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+ ¥
+ {{ item.price }}
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
diff --git a/package_sub/pages/Shop/ProductDetail.vue b/package_sub/pages/Shop/ProductDetail.vue
index 1bb1130..8898b6a 100644
--- a/package_sub/pages/Shop/ProductDetail.vue
+++ b/package_sub/pages/Shop/ProductDetail.vue
@@ -1,12 +1,21 @@
-
-
-
-
-
+
+
+
+
+ (swiperIndex = e)"
+ >
+
+ {{ swiperIndex + 1 }} / {{ swiper.length }}
+
便宜又放心
@@ -15,49 +24,320 @@
¥
- {{ productSku ? productSku.price : detail.price }}
+ {{
+ productSku ? productSku.price : detail.price
+ }}
{{ detail.name }}
+ |{{ productSku.name }}
-
+ {
+ if (tag.stock_num) {
+ form.product_sku_id = tag.id
+ }
+ }"
+ >
{{ tag.name }}
-
+
+
+
+
+
+
+
+ 多仓发货
+
+
+
+
+
+ 买贵必赔|退货宝|假一赔十
+
+
+
+
+
+ 品牌|型号
+
-
-
+
+
+
+
+
+
+
+
+
+
{{ tab.text }}
@@ -65,106 +345,297 @@
export default {
data() {
return {
+ scrollTop: 0,
+ swiperIndex: 0,
+ showType: false,
detail: {},
form: {
- product_id: '',
- product_sku_id: ''
+ num: 1,
+ product_id: "",
+ product_sku_id: "",
},
tabs: [
{
- text: '宝贝',
- targetClass: 'price'
+ text: "宝贝",
+ targetClass: "content",
},
{
- text: '评价',
- targetClass: 'comment'
+ text: "评价",
+ targetClass: "comment",
},
{
- text: '详情',
- targetClass: 'detail'
+ text: "详情",
+ targetClass: "detail",
},
{
- text: '推荐',
- targetClass: 'recommend'
- }
+ text: "推荐",
+ targetClass: "recommend",
+ },
],
tabHeight: null,
currentTab: 0,
+
+ recommendPro: [],
+ timer: null,
+ cartNum: 0,
+
+ commentList: [],
+ isSkuSubmit: false,
+ isImmediateBuy: false,
};
},
computed: {
- backTop() {
- return (getApp().globalData.navbarHeight ?? 40) + 'px'
+ menuButtonLeft() {
+ return (
+ uni.getSystemInfoSync().windowWidth -
+ uni.getMenuButtonBoundingClientRect().left
+ );
+ },
+ tabTop() {
+ return uni.getMenuButtonBoundingClientRect().bottom;
},
swiper() {
- return this.detail?.product_images?.map(i => i.image?.url) || []
+ return this.detail?.product_images?.map((i) => i.image?.url) || [];
},
productSku() {
- return this.detail?.product_skus?.find(sku => sku.id === this.form.product_sku_id)
- }
+ return this.detail?.product_skus?.find(
+ (sku) => sku.id === this.form.product_sku_id
+ );
+ },
},
methods: {
+ toDetail(item) {
+ this.$u.route({
+ url: '/package_sub/pages/Shop/ProductDetail',
+ params: {
+ id: item.id
+ }
+ })
+ },
// 获取一个目标元素的高度
getElRect(elClass, dataVal) {
return new Promise((resolve, reject) => {
const query = uni.createSelectorQuery().in(this);
- query.select('.' + elClass).fields({
- rect: true
- }, res => {
- // 如果节点尚未生成,res值为null,循环调用执行
- if (!res) {
- setTimeout(() => {
- this.getElRect(elClass);
- }, 10);
- return;
- }
- if(dataVal) {
- this['dataVal'] = res.top;
- }
+ query
+ .select("." + elClass)
+ .fields(
+ {
+ rect: true,
+ },
+ (res) => {
+ // 如果节点尚未生成,res值为null,循环调用执行
+ if (!res) {
+ setTimeout(() => {
+ this.getElRect(elClass);
+ }, 10);
+ return;
+ }
+ if (dataVal) {
+ this["dataVal"] = res.top;
+ }
- resolve(res.top);
- }).exec();
- })
+ resolve(res.top);
+ }
+ )
+ .exec();
+ });
+ },
+ async getCartNum() {
+ try {
+ const res = await this.$u.api.cartList({
+ page: 1,
+ page_size: 1,
+ });
+ this.cartNum = res.total;
+ } catch (err) {}
+ },
+ async getComment() {
+ this.commentList = [
+ {
+ id: 1,
+ name: "叶轻眉",
+ date: "12-25 18:58",
+ contentText:
+ "我不信伊朗会没有后续反应,美国肯定会为今天的事情付出代价的",
+ url: "https://cdn.uviewui.com/uview/template/SmilingDog.jpg",
+ allReply: 12,
+ likeNum: 33,
+ isLike: false,
+ replyList: [
+ {
+ name: "uview",
+ contentStr:
+ "uview是基于uniapp的一个UI框架,代码优美简洁,宇宙超级无敌彩虹旋转好用,用它!",
+ },
+ {
+ name: "粘粘",
+ contentStr:
+ "今天吃什么,明天吃什么,晚上吃什么,我只是一只小猫咪为什么要烦恼这么多",
+ },
+ ],
+ },
+ {
+ id: 2,
+ name: "叶轻眉1",
+ date: "01-25 13:58",
+ contentText:
+ "我不信伊朗会没有后续反应,美国肯定会为今天的事情付出代价的",
+ allReply: 0,
+ likeNum: 11,
+ isLike: false,
+ url: "https://cdn.uviewui.com/uview/template/niannian.jpg",
+ },
+ {
+ id: 3,
+ name: "叶轻眉2",
+ date: "03-25 13:58",
+ contentText:
+ "我不信伊朗会没有后续反应,美国肯定会为今天的事情付出代价的",
+ allReply: 0,
+ likeNum: 21,
+ isLike: false,
+ url: "../../../static/logo.png",
+ replyList: [
+ {
+ name: "uview",
+ contentStr:
+ "uview是基于uniapp的一个UI框架,代码优美简洁,宇宙超级无敌彩虹旋转好用,用它!",
+ },
+ {
+ name: "豆包",
+ contentStr: "想吃冰糖葫芦粘豆包,但没钱5555.........",
+ },
+ ],
+ },
+ {
+ id: 4,
+ name: "叶轻眉3",
+ date: "06-20 13:58",
+ contentText:
+ "我不信伊朗会没有后续反应,美国肯定会为今天的事情付出代价的",
+ url: "https://cdn.uviewui.com/uview/template/SmilingDog.jpg",
+ allReply: 0,
+ likeNum: 150,
+ isLike: false,
+ },
+ ];
+ },
+ async getRecommendPro() {
+ try {
+ const res = await this.$u.api.productList({
+ page: 1,
+ page_size: 6,
+ sort_name: "sort",
+ });
+ this.recommendPro = res.list?.data;
+ } catch (err) {}
},
async pageScrollHandle() {
try {
- if(true) {
- const rect = await Promise.all(this.tabs.map((tab, index) => this.getElRect(tab.targetClass)))
- console.log(345, rect)
- this.tabHeight = rect
+ if (!this.tabHeight) {
+ const rect = await Promise.all(
+ this.tabs.map((tab, index) => this.getElRect(tab.targetClass))
+ );
+ this.tabHeight = rect;
}
} catch (err) {
- console.error(err)
+ console.error(err);
}
},
+ tabClick(index) {
+ this.currentTab = index;
+ uni.pageScrollTo({
+ scrollTop: this.tabHeight[index] + 1,
+ });
+ },
back() {
this.$u.route({
- type: 'back'
- })
+ type: "back",
+ });
},
async getDetail(id) {
try {
const res = await this.$u.api.productDetail({
- id
- })
- this.detail = res.detail
- if (res.detail?.product_skus?.length > 0) {
- this.form['product_sku_id'] = res.detail.product_skus[0].id
- }
+ id,
+ });
+ this.detail = res.detail;
+ // if (res.detail?.product_skus?.length > 0) {
+ // this.form["product_sku_id"] = res.detail.product_skus[0].id;
+ // }
+ this.$nextTick((_) => {
+ setTimeout((_) => {
+ this.pageScrollHandle();
+ }, 500);
+ });
} catch (err) {
- console.error(err)
+ console.error(err);
}
- }
+ },
+ async confirm() {
+ try {
+ if (this.isSkuSubmit) {
+ if (!this.form.product_sku_id) {
+ this.$refs.uToast.show({
+ title: "请选择产品规格",
+ type: "warning",
+ });
+ return
+ }
+ if (!this.form.num) {
+ this.$refs.uToast.show({
+ title: "请选择产品数量",
+ type: "warning",
+ });
+ return
+ }
+ const res = await this.$u.api.cartSave(this.form);
+ this.$refs.uToast.show({
+ title: "已加入购物车",
+ type: "success",
+ });
+ this.getCartNum();
+ }
+ if (this.isImmediateBuy) {
+ }
+ this.showType = false;
+ } catch (err) {}
+ },
+ },
+ created() {
+ this.getRecommendPro();
+ this.getCartNum();
+ this.getComment();
},
onLoad(option) {
if (option.id) {
- this.getDetail(option.id)
+ this.form.product_id = option.id;
+ this.getDetail(option.id);
}
},
- onPageScroll(e) {
- this.pageScrollHandle()
+ onPageScroll({ scrollTop }) {
+ if (this.timer) return;
+ this.timer = setTimeout(() => {
+ // 节流
+ this.timer = null;
+ this.scrollTop = scrollTop;
+ if (scrollTop < this.tabHeight[1]) {
+ this.currentTab = 0;
+ } else if (
+ scrollTop >= this.tabHeight[1] &&
+ scrollTop - this.tabTop - 86 < this.tabHeight[2]
+ ) {
+ this.currentTab = 1;
+ } else if (
+ scrollTop - this.tabTop - 86 >= this.tabHeight[2] &&
+ scrollTop - this.tabTop - 86 < this.tabHeight[3]
+ ) {
+ this.currentTab = 2;
+ } else {
+ this.currentTab = 3;
+ }
+ }, 100);
},
-}
+};
diff --git a/package_sub/pages/Shop/ProductList.vue b/package_sub/pages/Shop/ProductList.vue
index 60c6097..59dd576 100644
--- a/package_sub/pages/Shop/ProductList.vue
+++ b/package_sub/pages/Shop/ProductList.vue
@@ -251,6 +251,10 @@ export default {
font-weight: normal;
font-size: 24rpx;
color: $u-main-color;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ max-width: 180rpx;
}
.item-container {
diff --git a/package_sub/pages/Shop/Reply.vue b/package_sub/pages/Shop/Reply.vue
new file mode 100644
index 0000000..b0211fd
--- /dev/null
+++ b/package_sub/pages/Shop/Reply.vue
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+ 全部回复({{ comment.allReply }})
+
+
+
+
+
+
+
+
+
+
diff --git a/package_sub/static/Shop/yishouxing.png b/package_sub/static/Shop/yishouxing.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5f9d33ca226fb5cb4add4ae1f475bd6ac6f038c
GIT binary patch
literal 8434
zcmVPyA07*naRCr$PU0aqUISs9>e_%=UYzJlw&=j);U^~++3HYyMRMF~mx-3hwC0ma0
z{7j!phaY-eUu`?PdRWY6<-Bm!H4j0^i@?fBgIP_4dbf;rILf$8WdW?HeVO_xJn1
z@weC4*Kfc3%Rk7rrxxtR7I(YYdQZDt1OxyB1cB7~M=TrwCIyl|eErwoMvS}1@Rz^_
z3V#`!j{u-B6A-iuy5C>k;F--pw33U{egj1uU63<*gb(+xqgjH7c#wH);P8;HPoEno
zeB|2Q>j4h;uh7vMz@a7(WE?wG={6g;4mMD@iB{jSH#p=;$~2#l&K7q1H1YXJUOp0_
zUf{JsLvJ@Dp4dP!Ldumftib`n06+j79)|WlnZTS$3MdvpvO#0AaVEoWpqQi!1c)Ao
zdN73Bn>QG=h$#h-+wJ8ejB5Q4Kx2m{t)5no%D{ySU
zP??)q;|&yMqNF?O1&80fs&+Fej6}&o9t<^fucuxg=bp~d?)E>
zC1`URJBMLx(BHe;Kw%_T2s7^Y_g^L5t;QZ;Z4pjYG$6bILt=^YHXA79vMRRJR|E)L>HmKD^RJj(jJ8W(LH-@)
zY5M2}iUx5?S;Wc!k+O+YM7P`PPZ7e9bWT#hhz4{GrZ?@84HQbzON}z3Ln)W~^54Jz
z>0Wv!y>}u~ErUcikwPe~K4!MxKp~XAltrw*Yf0Dn%rau-FC?`XtLsT(v|u?J>Zbk~wfnpB)``q;Y)BNsdIU?1uA;}FWq|Pww
z9!L%(ymk`KC{vYr&4D+II4!u4&?;Xt%O2uLx;_&ZpwKu&KD`k)70oaTDR9otPee0Z
zPFD}0=r1GZbaZ9lHU|pn4j?s158$XJ5xtB-dsCCuPAQdh-
zDNtw>+9E8=Fs0yk|jU
z{2oWMtumkST#Id40PF^fhqldtf~yHgKXr%0OI`<-8m1-NkdE2gu4IV$_d#I{_&nh3
z6QbU=_B^iv3d_n_nDYjULvtoTQB$NuaXlY`p$yQ9ZS)v8_iWB8JVT%Km>K{&pBwcp
zjTE@jj~aU)ji&SCHX-kPP7N%s!uCvnf)Zpa{nN(roI}Fz5rHEG3QLecQ21@tAK&}b
zd{9Rs%g-S5@&gpaA%V=SYDH2u*8|KEfLLNnd7G<&MHf(%gcUWhvrg)RICrPWdB$*D{S&9IckzJX0}NGf+^p
zD@uN%#|h4w6z!3T)w5cbu>xRRAp|i6iWQXFV(?nymW;7tOfFfMrcIQpOU<0Awr3AP
znt>wHv8aWjrG2cF6qT-NcDu6x2K`az^}_MoCQO0i3}J`XX*S!?O03*on!||9TB&@+
z8BRf(fa1*gi5|1xY@HZ{{H?2%hcn~P
zUKbsoiB+h9B6``j1=32RmZlKU2xCFgg+q42jI$rb}u1d5SGx8P}
z${Z&Nw{OuywO+7jwG{~nH6
zLb@SZC+aE2BB}IjwQsBEL_o1}*r64aM_fO{X|(Ik+k3FC5p1LPJqvVZYmfl>($$*r
zk4l??q9so2HQpJ|dpJxQrmRpc>H(gfY@_E@Z(OTYxbgWo`_I4T$Ji_Qk_aeP3On#l
z0Z@>KvOR!f1?st4Qk2q@Gz9V5lvZUG%|J0*;3Y*;FRb-`1eh`!i`%WD
zFeRN|1bMHR)MSBTrTj!KnKfe9ZlUNNu`uV@p1-%qfSZqJn8J&*rmu0Ay^k=$I6&8L>cGvAqp)Us>Op07ojPDwSm`#aR^x9GpawW1Sj{8(!gTi``m0Q)Cop$WLJ6)nf-q={aQ(QNj*Ms9|A9%|X6eb1)F>k!^GWA!afN_KI4hmMbvqGI
ztavOcF;Y+9pcExNcI;8KhDGGMwRR9LztOYKkQoQrJ=3F|~=b
zQJ~=o6fL<3Za&th2AVuij}v-7>tQdEWwSI;c)peCVF+NnS^$$8yfn<{rNh=cYh>q;
z%l_vtUY~W0k`#Rcik0#cHG0kMl2QY}c2=O_6~fJ`CFudDa`H3&H%}$DV`VStShJI&
zEKqnEw?yDvhMG#gN%9jt{eeoPj|Na{r%T6GkE<8{@zQ+J>}Ko{5{WV>_s}x
zh@|KbpjfGF8w41w>QNG=cmf!8v-58S*>B*m)<>T;BQCA8#X+p(1+vjN6U^26oeoM~
zEpp)i#Di`80E(TT;KZ;0Jv9Qaumfk60!2Pn?bc`OQw?dT$~lOYylU^Fz+0|)sdU=j
z!{KUHWUUJr%j(6)gi)+>n^lymM?G}-J%PJs>CzL;cO5y=D((LVQ0)9fi`e5lLtTzbIf~WJFO`61cecFf*Xm@(Dh!g!
zD{tq)Hed{?UOs?grLaR=w%w|jvpmP`sG1$d%2=)FutY}|rw$q!N#S<^?*NoGe3p=zk#XB)6
zFi7hjv^$(@bvra1>v=`460qZ#Olht&5~UoVfnVL|o0wud
z9c2(8=tvin=1Slk)dD1-5AJkGN_|@$ti(2=>E+m5J{MQjbWj5h{K#|5y&%+>qc*>q
zy}+860tyhO=4fsPI_C{aJLb7sb|G7FF!;cD3#P}{lDX!A)0@%lB;NW(3&oHFbsb{=a?&%D*gf0bC
z8WxoT1@$&h%4j@4$}6!IZUd<~bbcgU+r(;s808Zg)O$f61y?m;jz%@9LrST&v_Fr+
znVGM`bGwyPE|PY69Nn@bOU7ww)55GYVM?iPA`d-|Bi7p+<}ga@DA}_o)1qWq1q#mT
zB7;RsLP}zAk6rThTTQ`KU$fXmIrg-_(=i=~Gid3KEYXXm4QJPqzN8xnjsnMYdWCkb(CELD7mlDhK
zF1{+Q6W3S-3S5j-;G9A=hROBi@w+wkrsn7wkHeS}`dgZtMnBfF(y$$g?k#LK*OL?|
zN;;sxh+9i87np;0m|uH0s0tLg7)v^8Z5W)uTYk58h9e|-dGl1Xg@eF6wfeD=Rj+)w
zvT3curaL?pQj~zd#OknJiy!sMMQZ;P8^XDZfFd7Eb571pRI{6LeR=%eqTEu9?goS5KJI>ku66Po27Fo+uwG-&C3hwKfUJdWRca^w0$q6mYbbR;R-Eu9oZt
z6RnYXComtZkFL`PnfB@i$I$@0W<#+E%cvX;2SS>8rgEs2fOC0|lm^53!Jo#OArm
z&?ZJv8(8Z|wZ3|bo+JY5ZIc?==f3LIc)eq%&r4oDv($}cm|_X0xg2tkz~5_tC*A3f
zkn-`hH16~Z#sqKyV0Zw|{rk&gpRIudIB)w&$2SKGFScO|ic}~T@qQkrNMdJ+
zVpeXW$;#K(DcMOia+(F~M@>Vy^j>l@R6D}O*U2AuPn1JGjhxc9lJ`Pd`=*{N*-y^$
zh5`k}HnfE*r3KG2N^7OH^ygJBZV4RT^%GKdBCR#aowvp~ELa7GB`xn2wb%?7w&r2a
zRG`>lO0SBK=Oy`x-jS@>pk+SdnXQ&zs)9D9?~B5Ro8h;XBySFS$TF}`oEL0>=^VML
z-MnJ7S7*}asj}@9v_b(zDNM0o8`|0csemK2ik(lwJ^&%9zs?
z+S5pOQ7hYiVpS20T`~tt8hoZOMQVH~V=vH@0*41sXl203Lb{fk-PRJjn)!OjE1h>~
zE~PQUGK!iKdUt?Q{JCmURI-!SWa$AMwLE}FT>w{XCE19MFr<9znZ~iHv7ReEk3_4a
zUvHq0e$rt{prCRa7Ga9^h)-&S9__3gXHkz1*)HcYF5m$%`2ZXlFwpr)s#va^)bP3?AstR%;xKf<(L
zL$Z864JoXOsw{UI51QU1KME+&2rU7#M$NgH_mLCu{X_vLOKW*h&MXOyy-t5P8Kl2+
zW!qsHMZO!MV_Jd68QDh3D0^N)(imC^I9sbkHRD>fJqojI!U~Rgl~~8f>dTVMB*&s5
z83jzLeD|Q=PGq^uaK>U~;I)1LI3z_ol3hMUvra;cuUb+!I3Jr-RID8_t@=*(dXXHb@Fuf_A+JT$-Kj+nlTh0oWDn`&d^CDayq
zpa>gCzGmsMXkefy-`nYNti~DT+1LiR-skw$_JuJI{k4>1mt=t80KesItagIa3Purt
zLwYP47ARn1n%GHW{5@?gcid=6QHfl7LDL5)+Af1m*IUbjQ71T<1F|@to?#1`W6{t+
zL46~^^V4$@XGz=iI!@YGgdN6n{a#0X7LHm14a_Z2VMn?ii_oNG3!Vjl+WZ8}FJ!@0
z3*u=F-Mamifdkprj6`NF{D9rMH9V-!{Kf(KW?|G*^?(wX!8?cfdVGBLiiyC
zjw`SYuJ}tTE6aBDM}Usw_Ex==LPhO;o!r*$)?NEuQ?~t-zv&s&^H~b{
zW``dSrM7+LJeOIEaZ+-R^g^4poV2zkNp#kd$kqjEnk()+i?K9i+e-jN8dwL3AIG2R>pZG
z(Tv1sE;Iq6+~9e@5MFSQzHur`)AZWQm)PHZ-!Zi`HY&rGUaRsVUuU
zG~ox#uLc%gyF{x2otbTLVTV>`R!Pj35iC*}Te1y~#E^c_qksupyj7}=V>Na9#~kZ7FRca^
zXAV1$@tGvl;HWJ1>hTAiyWPG?t3bIm&HmjY-cQ%CN|TgJZLFXRvl&4xp^ZYc(vd=d9v=m|sM;F{6lz(^YTT_DO((
zs@80OAuCn3hvRZ!fli>wMsvmz@%OWaDW%J9JnTrS)84Y}QvgMcRrDwaQMjiMj*@dR
zt=HI60~_7Wl5Io^Q>gllQS$9A+dd6Yz(VLRIq51kM=1}+kuZy^u!~&oXJs2B?F+~1
zE!#d7P|$a4wud02l)3?fm$V1lfKksL-dP=sqK1~MqbQk{_NsK=Jjb<=g2h!CMy?4<
z;NV{P8fOLeBUv4bo(w4HO2}2>{VM=Qn(VXK(RY|a1B}(N=&68$i~G4FQ+qsb>ruN~
zMm#1gJKNzU%?Y+wQMYz2(m5up+l{stGN!2h-1A3;FCuXG;{bN|jB
z+B84weHTmMh!&<;9*drmQQ)F#jp)CN<>Q)dcO
zEX%f^Hkuv*M}D?;)6~jfk%Hmt>+O%dJNif+&SDSRHCh7lXtv=IcAPTwNR8qw$xY7C
z!8oFV#wy@I$#^BUL9q#o5`oj@D4v0WuCI{1lFm73@9&8ImJG*oH*8toh#eF*0PQ`g
zEo&JO{#hnPt*bFF5qjVvBPTb#-&O?~AaDTVu*^NA`3$&x2m00~M_Zg1S)wJlw#*|9
z0Y9iYb9s$qj2@7!h1wSPVVsq{^feX+g^*Mo?;#XQ#1_0NXxJ7wnUMX_cg8{&-R{
z3J^+jN}VABBh2SGBTV5gMzXT+O8^D#tkJ+idL^I5jvxVpC~c4hrSmD}V4};#G7L;F
zTLQUAb5d3^x(rZ60}E+wgw>7^1q3AXkOHW8_+fdUgf-ic$kEbvE(H`3z=ETSxdB-1
z2ol4J(nboRN6zKt&7(RpkNGW=j%n`5BDYb}o3&gn2NbiwLJJU{P7nnUsCjUoI-nc_
z{@x23oSv*5FwLXEzb$~nV~&>u3Jxqh5@niQ5{<{3T1N&9?Pnh?fRzI%4+ktKZGZlP
ziEM2_o!1;M3ltn!9O!O;ot_3TJOGO_%-Yc=?y~T%Nbim<1t+bXdcThn1td!H;gX^w
zirOv>6cVuTKxmy4*n?GWjOZkIj*noF({K-2P{1LTkp-A?V~t$56i6R$?2f5lxjazJ
z0t;>jdxRhUcYl`VQu^TTNQaS}d|1q9MUaq!iDkPD6yK#e!(eh}NbixrO3Gt;_61kD
z5sh+8iScr}z&?6`g3E*S_AgoMDs47UB%0z3)H)W7RB0FqC~^lbv74S8l7!89%=xIkAC>ZIU-N+>CE5@vY!jK;0m#~PQTu0B`R(o~>g+OCcgIkSVw17mk
z`!0LJsR+zSV16N*Y@kr6LE>0>(UPM3;Z4&^ZMafl>k}WZ#hw+^z2qhBcLRk~Qs3K2
zz+%dhmK+z#k
zse!J>FjBCH$|j@?;z(BBzKy7E?J%YAk8YqaP|+Cy1J@LdO=tjOpJ*5u_xCO~P}s>*
z_31y$5Aqr=;i)T4t%BDauwOkujHx2^UU!uKH&7UB0;?^hHx;dPN@6T3QFko>vBM0J
zXjP3iP^iQuZ>$MNu-6q>hFk*eEw$jV^APQ_mOiiF;?CmqqT%3X?OzvhA($X
zUy7Qr#Nv>czma~trqsy>h&kHaKru(|-GG79PH)AU{knQCN(*4v;l)G)O@`h;5kL<;
zVF|VC!j0MZnx8kd>&28v}=#ZNQ^
z56mri