From 4f807803cc74108fdd53e3aabded4aeedecd1002 Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Tue, 16 Dec 2025 22:48:42 +0800 Subject: [PATCH] =?UTF-8?q?Step=20F7=EF=BC=9A=E6=95=B0=E6=8D=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/dataQueries.ts | 11 ++ frontend/src/components/DataQueryForm.vue | 147 +++++++++++++++++ frontend/src/components/Layout.vue | 2 + frontend/src/components/VerificationTable.vue | 27 ++++ frontend/src/router/index.ts | 14 ++ frontend/src/views/Aes.vue | 12 +- frontend/src/views/DataQueries.vue | 149 +++++++++++++++++- frontend/src/views/DataQueryDetail.vue | 132 ++++++++++++++++ frontend/src/views/Verification.vue | 29 +++- pg_data/base/16384/24576 | Bin 8192 -> 8192 bytes pg_data/base/16384/24584 | Bin 8192 -> 8192 bytes pg_data/base/16384/24672 | Bin 16384 -> 32768 bytes pg_data/base/16384/24672_fsm | Bin 24576 -> 24576 bytes pg_data/base/16384/24678 | Bin 16384 -> 16384 bytes pg_data/base/16384/24740 | Bin 8192 -> 8192 bytes pg_data/base/16384/24815 | Bin 8192 -> 8192 bytes pg_data/base/16384/24822 | Bin 16384 -> 16384 bytes pg_data/base/16384/24849 | Bin 16384 -> 16384 bytes pg_data/base/16384/24850 | Bin 16384 -> 16384 bytes pg_data/base/16384/24851 | Bin 16384 -> 16384 bytes pg_data/base/16384/24853 | Bin 8192 -> 8192 bytes pg_data/base/16384/24860 | Bin 16384 -> 16384 bytes pg_data/base/16384/24887 | Bin 16384 -> 16384 bytes pg_data/base/16384/24888 | Bin 16384 -> 16384 bytes pg_data/base/16384/24889 | Bin 16384 -> 16384 bytes pg_data/base/16384/2604 | Bin 8192 -> 8192 bytes pg_data/base/16384/2659 | Bin 98304 -> 98304 bytes pg_data/global/pg_control | Bin 8192 -> 8192 bytes pg_data/pg_wal/000000010000000000000001 | Bin 16777216 -> 16777216 bytes pg_data/pg_xact/0000 | Bin 8192 -> 8192 bytes 30 files changed, 519 insertions(+), 4 deletions(-) create mode 100644 frontend/src/api/dataQueries.ts create mode 100644 frontend/src/components/DataQueryForm.vue create mode 100644 frontend/src/components/VerificationTable.vue create mode 100644 frontend/src/views/DataQueryDetail.vue diff --git a/frontend/src/api/dataQueries.ts b/frontend/src/api/dataQueries.ts new file mode 100644 index 00000000..b72992b7 --- /dev/null +++ b/frontend/src/api/dataQueries.ts @@ -0,0 +1,11 @@ +import { apiGet, apiPost, apiPatch } from "./axios"; +import type { ApiListResponse } from "../types/api"; + +export const fetchDataQueries = (studyId: string, params?: Record) => + apiGet>(`/api/v1/studies/${studyId}/data-queries/`, { params }); + +export const createDataQuery = (studyId: string, payload: Record) => + apiPost(`/api/v1/studies/${studyId}/data-queries/`, payload); + +export const updateDataQuery = (studyId: string, queryId: string, payload: Record) => + apiPatch(`/api/v1/studies/${studyId}/data-queries/${queryId}`, payload); diff --git a/frontend/src/components/DataQueryForm.vue b/frontend/src/components/DataQueryForm.vue new file mode 100644 index 00000000..9e011b5d --- /dev/null +++ b/frontend/src/components/DataQueryForm.vue @@ -0,0 +1,147 @@ + + + diff --git a/frontend/src/components/Layout.vue b/frontend/src/components/Layout.vue index 9ca144b4..f01a9940 100644 --- a/frontend/src/components/Layout.vue +++ b/frontend/src/components/Layout.vue @@ -22,6 +22,8 @@ 受试者 AE 风险/问题 + 数据问题 + SDV/SDR diff --git a/frontend/src/components/VerificationTable.vue b/frontend/src/components/VerificationTable.vue new file mode 100644 index 00000000..4a2562a5 --- /dev/null +++ b/frontend/src/components/VerificationTable.vue @@ -0,0 +1,27 @@ + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index da059661..d5973f69 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -13,11 +13,13 @@ import SubjectDetail from "../views/SubjectDetail.vue"; import Aes from "../views/Aes.vue"; import AeDetail from "../views/AeDetail.vue"; import DataQueries from "../views/DataQueries.vue"; +import DataQueryDetail from "../views/DataQueryDetail.vue"; import Imp from "../views/Imp.vue"; import Finance from "../views/Finance.vue"; import Faq from "../views/Faq.vue"; import Issues from "../views/Issues.vue"; import IssueDetail from "../views/IssueDetail.vue"; +import Verification from "../views/Verification.vue"; const routes: RouteRecordRaw[] = [ { @@ -85,6 +87,12 @@ const routes: RouteRecordRaw[] = [ component: DataQueries, meta: { title: "数据问题", requiresStudy: true }, }, + { + path: "study/data-queries/:queryId", + name: "StudyDataQueryDetail", + component: DataQueryDetail, + meta: { title: "数据问题详情", requiresStudy: true }, + }, { path: "study/issues", name: "StudyIssues", @@ -115,6 +123,12 @@ const routes: RouteRecordRaw[] = [ component: Faq, meta: { title: "FAQ", requiresStudy: true }, }, + { + path: "study/verifications", + name: "StudyVerifications", + component: Verification, + meta: { title: "核查进度", requiresStudy: true }, + }, ], }, { diff --git a/frontend/src/views/Aes.vue b/frontend/src/views/Aes.vue index 1a3f03ae..7c8943d8 100644 --- a/frontend/src/views/Aes.vue +++ b/frontend/src/views/Aes.vue @@ -18,7 +18,11 @@ - + + + @@ -62,6 +66,12 @@ const total = ref(0); const page = ref(1); const pageSize = 10; const subjects = ref([]); +const subjectMap = computed(() => + subjects.value.reduce>((acc, cur) => { + acc[cur.id] = cur.subject_no || cur.id; + return acc; + }, {}) +); const statuses = ["NEW", "FOLLOW_UP", "CLOSED"]; diff --git a/frontend/src/views/DataQueries.vue b/frontend/src/views/DataQueries.vue index d8212d8f..33023cf1 100644 --- a/frontend/src/views/DataQueries.vue +++ b/frontend/src/views/DataQueries.vue @@ -1,13 +1,158 @@ - + diff --git a/frontend/src/views/DataQueryDetail.vue b/frontend/src/views/DataQueryDetail.vue new file mode 100644 index 00000000..1ae256e5 --- /dev/null +++ b/frontend/src/views/DataQueryDetail.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/frontend/src/views/Verification.vue b/frontend/src/views/Verification.vue index d97e9163..11472318 100644 --- a/frontend/src/views/Verification.vue +++ b/frontend/src/views/Verification.vue @@ -8,13 +8,26 @@
+ 新增进度
- + + + + + + + + + + + + + @@ -82,8 +95,22 @@ const openEdit = (row: any) => { showEdit.value = true; }; +const openCreate = () => { + if (!canEdit.value) return; + editForm.value = { subject_id: "", site_id: "", level: filters.value.level || "SDV", percent: 0, notes: "" }; + showEdit.value = true; +}; + const submitEdit = async () => { if (!study.currentStudy) return; + if (!editForm.value.subject_id) { + ElMessage.warning("请输入受试者ID"); + return; + } + if (!editForm.value.level) { + ElMessage.warning("请选择类型"); + return; + } submitting.value = true; try { await upsertVerification(study.currentStudy.id, { diff --git a/pg_data/base/16384/24576 b/pg_data/base/16384/24576 index df72e97b14b1ff5c0fcd12ebc57a524fe50a7de4..0b1d1fb6fcd4ff0e3ff6889fe145dd4ca175b187 100644 GIT binary patch delta 30 kcmZp0XmDU-0D_EX8`;{VnAlh*_es?;aj90CvI%q5uE@ diff --git a/pg_data/base/16384/24584 b/pg_data/base/16384/24584 index 061d791e95a6201cda9d71027e244c28b96c9d76..ae81a085b8da7b449bc88f87fadc1257d3dc4f9c 100644 GIT binary patch delta 23 dcmZp0XmDU-00M(&8`;9dnK)QB$B8fE002Vx1)%@{ delta 23 dcmZp0XmDU-0D=Jajcj4!OkbEc$B8fE002MJ145=820aE&1}07khR?}64s+gd_|Ytyr*XLU)S6;*0!VbQ z*HrQx>>uFj2XZNr!zU~1ipK#%bl<$HI*^MQ&|Itob+LFxQCEC`+s?I7z3wj@GMD0U zvE%cc(<;#}Q&-J=dFRTScGtr{S<$*!#{Na9*1D0eo)j9ljK1TsZV&eBM0P=A7~EIfI4L9ytx0WxBOBU zBy5nKGfAHh-66c0#l@wm7xWzCE$m%fW^+DOPPlEeN7FMnIMg*hIK(j|G&tVb!_m*( zwb>J-QX$2_DAmN!G)>po!Z=M=$pi>=Et3p@sm9dE*vud$$v8PF8I~JCiFiS zg#sr7!|r=hAXjakubwC&14_~d9zlvg83qk`1_c%ckeJ5&4UC&ND!gagd_ds=DpAWE z%!ZOTnShxBQv7Z2bZGW8a(uXA=H2TWKcnxWdx${sXFr*|(gaf8xw=d~ucxR1a(yh5 zGq}_Pu{S&=)pr~yzGH^_Zd%-giP_qI8#jnCGrx*g*oVh=82JoXxFeU9#AG?-^1O2xD{KFOsVRMz)PW0!%W4Np>a> H^_U+3E~*dg delta 84 zcmZoTz}Rqraf6J50wW^>BLf2%11UHSVuJwVL`8WOsVRM#haG0z@){Np=wV GgdYGE=?|&^ diff --git a/pg_data/base/16384/24678 b/pg_data/base/16384/24678 index dd24da86f17ea3bcd9c69037c806a48dd66d0d8c..4c1f41514cf044fa0fbf98b6ff94b23463a69be7 100644 GIT binary patch delta 418 zcmZo@U~Fh$+`ytB{^RK}Mg}10U#g3>6?HK(QIqC(l!`5(@xI zMF4dq0Cmp*nlb^XQ((sAX9`M88Pg}TDF$&j096j1^YGm5(61Kf75jp}uO;gGo$B(4n< zSF5+0oNBbv=j6tmd&{iNcC7(PXaOY{6HaF49e3G0JJuv~^TUakLE@S~@$fjggKNWm zH}`&uzuDoRx&S1u0Tf?4FYdqUEx*(S2^(bROw#8AiK~Ouhy7j^72?j)c>0umMzX&V WNL&pl{?OL4c}kF9+~xp_4eS74>40D_2{$2PLtN;CeQ>?&Q(_0D_8&qZ`?6r5Vpoc9kw?yt{d?v@;6;e})M) diff --git a/pg_data/base/16384/24815 b/pg_data/base/16384/24815 index 9db191cab3189e4fb48d540336aeda8401818323..4b18b8a4161ac68db0c1a5584ffe246fe78c8867 100644 GIT binary patch delta 302 zcmZp0XmHSB0D=vk#~4Ah4nu}4g93}fcV-5LhWQMPKjsNA769>wxeSaMa|IYT8rsO# zgCvmwD}z7-v!=r5Z&1MtdXDiH_AV~7IiD&g+_u>>e@k(4lbg%wExTv_b9!-Ik~1YG zg_%3ZGuT_$Imk1_)7jC7fkBmlf#2E3KiJiU!A^IbvfxW5hW4`0XBT~PI@tDh{>A?1 z@&}Fkq(I{F46$F{Cv28gD3)hrnY`9seDWIm F5CDa=4*UQB delta 47 zcmZo@U~Fh$+`ytB`QYSHMg|~IVOSymL7qhc#6B?JfMLaEMTKJdi2*W`*Vu;u086zF A2><{9 diff --git a/pg_data/base/16384/24850 b/pg_data/base/16384/24850 index 65d7624130431b1a3e8f50373be17a0e93f0d598..4c49be91b2af28fe2d767ded469903de46c9e043 100644 GIT binary patch delta 41 vcmZo@U~Fh$+`yv19Uy#+kpT!a7&c7iR}f{~uvt-|U!H}9L7-vs4toy(*j5U7 delta 33 ncmZo@U~Fh$+`yv1-EitCBLfhqFdUf7uOPb7X@UIYBlb1`sQL;q diff --git a/pg_data/base/16384/24851 b/pg_data/base/16384/24851 index 3c8c02ed9902e7c1cf196fb2a6a4fd099b93a556..ece7249e72269bfb4e7f6307425876f05ad91911 100644 GIT binary patch delta 41 vcmZo@U~Fh$+`yv1%^-4&kpT!a7&c7iR}f{~uvt-|U!H}9L7-vs4toy(&cq5S delta 33 ncmZo@U~Fh$+`yv1t#JA%BLfhqFdUf7uOPb7X@UIYBlb1`pl}J& diff --git a/pg_data/base/16384/24853 b/pg_data/base/16384/24853 index 8682a42ced4b18787c1ccf214cddd82e2594b448..a5f863b645f5e9b09a725b36f5c923c753d71910 100644 GIT binary patch literal 8192 zcmZQzU|@)Na*Pp3F*q<7NHHj|C>S#X#pVYv&Y0K0C@@cev0<(P@2A6=3)?RVAfPveG)no)O*6Tv|7g@ zYrk9RmFLssjplDDPHu8@IlX1~%zsWVu1nrFnZH+HzRT(va?QVvbv9&*KHWF{X~%}= zvswgwJ%fWi{oMI|U0pmweI-5p;sb*G-Gf|%gIQ8uOq}}FY4O^VOKL2(TmVEy)g zvEWN4hS-LOO(2>T&0U-jcP)Mkb(e5~NX+#Mo~DcSmy4BbdG3bpF5cq&l*D3bPd{gW zzhKYc5LdqtP9OhphF>ZS4E)YM{=u#;V2?*XbZP+Ehwh~1Wjk^};+lsc^2|W@AiD|Z zo&(IP3X9KD!9Bu`e!=0cL9Q<7jsUt4=8kk(6|g%Qf$jjg1qL{%=ni~Q1arq$hpIYI zxcmpsDIx4yK=jP)-zG@>OMZvOyR zKP;ibz)+X|rwZf_82uN`J*;T%Ir&+qbKxr&$vNsBu~{#5QqbMApgwi+eRWTxMvP;2{LU{0xdTT32D$?|PXY6j12ZckT&R|xa0Cr3AHnFKK=**s3=FVC z+(VUgi^B!^1>0GvdDe07x41QL z-X^$o|NhW5QsVR3w=eLKn=3Tq(d}!#3|rSp*QeMzGELQBU8+#^j8Xdeo?TCuY}yJ0NWBVR{#J2 delta 44 wcmZo@U~Fh$+`ytBJ|k)aBLfh~Fx-&;AkU%zV&9l=u+ee1{KNpZ$#?8k029;=0{{R3 diff --git a/pg_data/base/16384/24887 b/pg_data/base/16384/24887 index e22a91167f0e5cbe69c5a2c03b0ee39c686db6b2..bba1abc7df0cda6bc9b34ade382663065e2beee2 100644 GIT binary patch delta 110 zcmZo@U~Fh$+`yus9&zIsBLfiVFwBtuAkU%zV&9l=z;I%|0>cgGzF=14tN;K2 diff --git a/pg_data/base/16384/24888 b/pg_data/base/16384/24888 index dd8a8efc38c35bbbce0404dddd81997c2fdf8617..44c361eff4cc5a2a6040f76ed551d9983e34950b 100644 GIT binary patch delta 134 zcmZo@U~Fh$+`yuszTn0&Mg}0zVQ7&5AkU%zV$Yawz;FYIHvn-15TBT@u+cG6-iM7r zg5kEw{JjG6T~^PKYyNetvmq0to)sv*pgwi+eRWTBj@I8+*%?4K8FRW delta 20 bcmZp0XmHpd%FW0zS&Vx>Bgf`z+*%?4K6M4C diff --git a/pg_data/base/16384/2659 b/pg_data/base/16384/2659 index e8925a5d04f6a78a33c19406075f369652b4ece4..f8aa09f53e7d9d7eb587ede1c54539f3bffb5415 100644 GIT binary patch delta 19 ZcmZo@U~2%PEsV#K7!|i4Phzx`1pr7a2EzaV delta 19 ZcmZo@U~2%PEsV#K7!|f3Phzx`1pr7T2EqUU diff --git a/pg_data/global/pg_control b/pg_data/global/pg_control index d0a17a2c93109ebc2cefb2d3c7cc428f754f8e54..9ae82d735e2a270621e629588dfc96ba13e5f57e 100644 GIT binary patch delta 88 zcmZp0XmFSyp`~8nn8^SF&yO*Js1wg1G>8MkAaPEXiB4)lsxZ|cAs_&XRxM*;NXy#1 N*^u$P+++tvUI5Uh5D5SP delta 88 zcmZp0XmFSyq2-qDn8^SH4|tC;g6I`c8pMHNkoZ^TiB4)lFx4Ot5CDo+Eo1RJyy?+q ML&o!RlN}g&0polUJOBUy diff --git a/pg_data/pg_wal/000000010000000000000001 b/pg_data/pg_wal/000000010000000000000001 index bb30d23c05d9ee18bacc32b43b643c3238ad7d62..4c28f0905e5219ef89339aca80b6913a72f476d9 100644 GIT binary patch delta 12528 zcmeHNc~n$K)~}`;>2`$?p+(e2Q6SRF(rl7wgP@|Uq9Xy7-EB-n!MH^2j^1(0r$PPn zp@~AG#w8lt5d&k4qR@Ao#-|7z_ar2tn`^41r+K!%!FoArJ~-5Do^2fJlgfXo!K~ z5DQPkGcW>1f)U~%9!5a|B*JJI17jfx#=&?+lBbg59tO-h{od5B9?Wcnc1~A$S`Og9VPjU*ITI!!dXVYM>VW3diAH zI05g$NjL>{a2n1)Jv4x|y0K}zDU7gEF}_iOzueV?eE8m>V>YcYz<=75gkWu@m6iFz zw@I8w+omtvHrTSn9%Lt0B*ytzdKIvK{C$a=>rvk`^1|%6S=bbdNXpuxi0WiX#DJR- zUvif5jXKjf7slEwjFQfT=wl~eChmlIy7&{NsS{;mr0eE0b~av)kUR^ouRn3`M|3J( zIPJ}7TRtD(~KjNl7Ynj2F&9y}L8`k56o!#l2P)aMOr?f_;E0_JO zWz#4-n=OQgJ4s0$&g&gZ{F6Xg+|WFlW`BGk`DZAwT*wuSp-u*J_^)KyfKTb^yv za;G+@_nNt0V69GLdqXJelY6bz$T~~TI?92yF^5@SN6z-Y(_f{-O|Das(wQ-2hdmYMc7N z`wX0H-jY6q{7mUcfk1~c^zQpI8Y7|43GP%>y|!!ZI5v2KEOO&RbACe{nlJ zj+|!c>mM2(6%uNQDAX546@};xG2s#V{P3{p`uwQS$S6aBp*YGA$<14A_3f8;i|HhJ zGn7X`0#OtV*Lhsy0k0oXOM6j}0Di3I(xAqlwLwARza%pw;&+V{{0d${5c?u6*aK zUITE1#}^UlN>)pB*;9;WPWMrzmkH^3tngsr`3ZE0u*K)z`o*T+@<hSixoMta+rRwN4V^y9w~_lNt04|KddTh*|_C?{H{ai zb}x;ter_=#vESNC(IJap6%}Z#Ae2!QithAq@AsAwoz^asqx)3R4Hcv@*~M|en~2x$ zj*L<3hH*2A&fU()(OIfw&QNI=Bzmo29V&>XVY*T-h@k~0<)TGa z&LzWoO!1(mHp4nfH3&&HxQSR0WY}Sp%}xD7=~fSOsuDbfWt z-J^dtE?B_j-9O_q^eGAqXTcP_VR%K#C8N4s?eu^dA4jB9iY>BHqT4iJcW16->~3!p z9gysYWYGc{9@49A`@7iGh8(&5#6wyl(BUE7dV0LK;~{-SIbr1&rfU--&a05k8|gc# z+Z@?MO4feje11A1P2xn_e*62ouhYO$=)sdLRwRDJ<#^NwnA)Cq3=)yGR782yo0wTp zkKmGZvt{B?XVYGs*@9+fVIJc2=A+^>=)n!jU@115?ifFc$2XX?`uTyr7!40bw!9dTg`S6Bb z2!;w89@ujUM^7)h;y_Yvk7ny=G`o*hjB3ki#o|g2zVm+5ZatA*7519~Cn)KJcEJt? z-zFRt3vK{jQREn{D1P8p!DmwOn_Oo5qWEUH_>T9BcqasseRlE1V7!(FuJW{j#qgM<#ERQ$;Uv45{M?>tx2=vLyqaE7n>YIS zb1PIS!rV=qrM_o52P6R&=7{W%uMZxjRhM;ORoR7v4l6(hff z7Ne!+y5&r>(hoWD9v*L3Y>eF|v7H}2Y(KkQ>3xW|>obZ+oH4_?(0<9{jLzaEi>U&3 zwC<8v3_P9|$5MrjELC_UrV73T>+h-3k=~vQU?X}zn~c8rLQs#cHuZzZ65ib~x$pWC z@(ZO4IV{jo&v|dy9V1%xgl~h83kbJa15vB^TwsPg7pQ|0g_>4mBNYW1BIE>vhi@(p z+n;>y$egQh#zr1L=Ee`EO&LP{g)@%W#x zp42$rxt-{?I!nNkE9BE8?8=o7@KLrZfhdm}`;8Mnjbh-y5eXdFYLU@>I4``F z%QNlv8h|4#nL@B(OLs*AQK>D(n`KfsB7q27Sppq`==zG32%1UlU^_t>(Sn&2#u4Qr z9hL7+$ewE~lk%Q9e_d|+=)WGyUO%SAIBU;ioR0IhFjs5{EslyTEG*E686pa(D~_Sh zGx;$w`r??P!XiU{VRV!sf@M;j4>7UuZ4~zdg{l>WqQD5ed$$M6q=G33oCWK~8=6<- z6Ui|5Bhw9>d-`r~Kgvw9Gm>4Fks0s1f6NXcj!5>ymiwmyB&huwtQL2hI{TE|e&Qh< zE70K~j9>d@g5x1nP)=BpBP%b^5B8J@^NiH)1tz!6hly^u{YAi@d~|=B&ZO_bfl`Fs zJ1I3ceL~up35l7R&W{=5+ww8vlI6Gv#X%k}i%&)P=!bp#WQtum9eLEI)~*j&vRuls zf1-pglu-AXU;!%O)(uIwh^~=)_lGmRO>-}0ew(66Yd8{b9=u}eob<Tdrt=ehI+ z&agtVH8Qemz87yYSmB5SD{R#Xba*T;c?~~fQ-AXpx$#9KK!c>*rpA=R-<5DvxCr;o>R$F`Jia46l*WZj>DSq;B9V!fuBkao( zRzgjJZL7U(>a`R6&5kfqQMx9Pj!M*PT=O68FuGS*Td(=d*t)XU^MUotzQ6R}fYFX8 zhmoHgMl$#yngm<8H#KOVR?T8s4W+sxkWi;qK_~lz`*mjZXgbap3b0id7jIzz8%hD@ ztZWt!FywXTngp=?RO2mnLEwnwxUiKjtbrFvS#@L$Ll}-o2*cJIfe!a2sI_H{O}%r4 zd|yO_)d_Tnume%&3mg&VN;zRgj;t)BAM9xn<{`rFnoeG9B)Yg?bzJoAgLhotQbDlv z7?qrsnV7);&bblKL*=&|SWtaDu0=)5LwXu6GT>pS?gld$Drh>bt>0-=KYfR>Lo)iO z6Iwe_!YYB#OeM{(o|8`hEMgZlFOQxcN@r8Dzem)pHLgqwi@ULJ+vm-JZ8@JmAsDCN z-vWQrscn98G|Iuq(3hCNT^-Ws$CWR(s{E(AjNSgrd{C(k zaiM0>5@&T1c(~!Lx_?S=D^G3_;D#d-+_0s-DbX#h<+2#ua72O|wu}ND?nbDsc92c| zg(s7hib;zIw?zUS!fmi;pEgIhxlvA7ks~YgVV>`)66PV?M&wl2T_w6_?7Jx4lS$$| zX@C8C+&xKoi?97t%{Nxy$||mWnbp&TKQGHvx^g~!m`y$6=#3SUXTwkoOV$_6M5xk( z`A6Jrz5>z-p^uLm%1KQta>OsgCH^uC^AML4@@K`$aA_h4OeG~2fw^^B`NlsDNj+lm zQYydB)t!6{Fr72e-^8WtvUPs({?#Y%$6dA_2OE6+PyLaPn>1>Qi5Ilt~Nbq2IuP*$y#M(i{JQhAwwsQuvZZbcCZz4i?Ks=zS*?! zlug}sTfUVdI%f)WxRoh4bDJH}iCZadCuK~FIImnb@2APPLY)31Mf-{K*?e+VoJiZ9 zxfvE)me_+f6e|*IRNNGg`oSrKN*o`=k+)PtfyiwMlU&c*ir-MA#-lFfYgJ81r}0g_ pJO1skK!*i7EYM+r4hwWxpu++k7U-}*hXpz;&|!fmwZJQie*?pc?#loG delta 3851 zcmeIu#a5MJ06@{DR}l-b1p`|#vAZ$w+TC5)-SMN_?iLeN>=wNy2I^EE$;CT3{08Sd zz>cCQIVw*D6~$CiS&}M}RaH%OHPn=%mQ=OXQCB_nHPBEaY0@>;L{rUVXs(5pT4}9~ zw%TbgQwJS&(peW>W$C879(wAfw?6vnr@sLP8f35`h8kwL5weXm%4lQc7%Og^@g|sP zlF6o+YMSY0m}!>T=9p`q`4(7ck;Rr+YMJF$SZS49tF5utI_qt)(I%U1vDG%)?Xc4> zyX~>pKKmUI$#c*l9CpM}#~gRUNvE84##!f_cfm!MTz17(*W|nIhMR7=?T!M4?z-o` zA`d+D$YW1D^~`fGy!6UzZ@g9Po%a$x_~?_*zWA!dH{bp6Q>kBm7yl`XC(;XY3S)_^ hqYjI01OKn0lq