From 78057035d4495c645638ccf2a3e22c96b5e88270 Mon Sep 17 00:00:00 2001
From: "DESKTOP-7R8JEQQ\\k" <1076390229@qq.com>
Date: Sat, 5 Jul 2025 18:06:16 +0800
Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Game/View/Common/BaseWindow.lua | 411 +++++++++---------
.../MyFamily/Component/item_myFamilyList.xml | 30 +-
.../Family/MyFamily/com_myFamilyList.xml | 13 +-
.../ART/base/Family/ui/Family_fui.bytes | Bin 112872 -> 113103 bytes
4 files changed, 239 insertions(+), 215 deletions(-)
diff --git a/lua_probject/base_project/Game/View/Common/BaseWindow.lua b/lua_probject/base_project/Game/View/Common/BaseWindow.lua
index 1f4356bd..260c51a1 100644
--- a/lua_probject/base_project/Game/View/Common/BaseWindow.lua
+++ b/lua_probject/base_project/Game/View/Common/BaseWindow.lua
@@ -2,31 +2,33 @@
--author:--
BaseWindow = {
- --view description
- _view = nil,
+ --view description
+ _view = nil,
- --View 是否被销毁
- _is_destroy = false,
- --是否播放动画
- _animation = true,
- --弹出动画,0关闭,1左边,2右边
- _anim_pop = 0,
- --关闭摧毁
- _close_destroy = false,
+ --View 是否被销毁
+ _is_destroy = false,
+ --是否播放动画
+ _animation = true,
+ --弹出动画,0关闭,1左边,2右边
+ _anim_pop = 0,
+ --关闭摧毁
+ _close_destroy = false,
- --点击窗口以外关闭
- _close_zone = true,
+ --点击窗口以外关闭
+ _close_zone = true,
- --队列
- _queue = true,
- --全屏
- _full = false,
- --全屏偏移
- _full_offset = true,
- --新窗口隐藏队列
- _new_hide = true,
- --模糊组件对象
- _put_map = true
+ --队列
+ _queue = true,
+ --全屏
+ _full = false,
+ --缩放全屏
+ _scale = false,
+ --全屏偏移
+ _full_offset = true,
+ --新窗口隐藏队列
+ _new_hide = true,
+ --模糊组件对象
+ _put_map = true
}
--window 列表
@@ -41,216 +43,223 @@ local WindowQueue = {
local M = BaseWindow
function BaseWindow.new(url, blur_view)
- local self = setmetatable({}, { __index = M })
- self.class = "BaseWindow"
- -- self._blur_view = blur_view
- self:init(url)
- return self
+ local self = setmetatable({}, { __index = M })
+ self.class = "BaseWindow"
+ -- self._blur_view = blur_view
+ self:init(url)
+ return self
end
local win_url = {
- "ui://Common/Gcm_Window",
- "ui://Common/Gcm_Window_Full"
+ "ui://Common/Gcm_Window",
+ "ui://Common/Gcm_Window_Full"
}
function M:init(url)
- self._root_view = UIPackage.CreateObjectFromURL(self._full and win_url[2] or win_url[1])
- local contentPane = self._root_view:GetChild("contentPane")
- local ctr_hide_bg = self._root_view:GetController("hide_bg")
- if self._anim_pop ~= 0 then
- ctr_hide_bg.selectedIndex = 1
- PopPanel = contentPane:GetChild("PopPanel")
- else
- ctr_hide_bg.selectedIndex = 0
- end
- printlog(url)
- self._view = UIPackage.CreateObjectFromURL(url)
- printlog(self._view)
- -- self._view.fairyBatching = true
- local btn_close = self._view:GetChild("btn_close")
- if (btn_close) then
- btn_close.onClick:Set(function()
- self:CloseEvent()
- end)
- end
+ self._root_view = UIPackage.CreateObjectFromURL(self._full and win_url[2] or win_url[1])
+ local contentPane = self._root_view:GetChild("contentPane")
+ local ctr_hide_bg = self._root_view:GetController("hide_bg")
+ if self._anim_pop ~= 0 then
+ ctr_hide_bg.selectedIndex = 1
+ PopPanel = contentPane:GetChild("PopPanel")
+ else
+ ctr_hide_bg.selectedIndex = 0
+ end
+ printlog(url)
+ self._view = UIPackage.CreateObjectFromURL(url)
+ printlog(self._view)
+ -- self._view.fairyBatching = true
+ local btn_close = self._view:GetChild("btn_close")
+ if (btn_close) then
+ btn_close.onClick:Set(function()
+ self:CloseEvent()
+ end)
+ end
- local win_mode = self._root_view:GetChild("win_mode")
- win_mode.onClick:Set(function()
- if not self._close_zone then
- return
- end
- win_mode.touchable = false
- self:CloseEvent()
- end)
- printlog("======================================", self._full)
- if self._full then
- local offset = get_offset(self._full_offset)
- if self._anim_pop == 0 then
- self._view:AddRelation(contentPane, RelationType.Size)
- contentPane:AddChild(self._view)
- else
- contentPane:RemoveRelation(self._root_view, RelationType.Center_Center)
- contentPane:AddRelation(self._root_view, RelationType.Middle_Middle)
- PopPanel:AddChild(self._view)
- local click_item = PopPanel:GetChild("click_item")
- if self._anim_pop == 1 then
- contentPane:AddRelation(self._root_view, RelationType.Left_Left)
- self._view.x = 0
- elseif self._anim_pop == 2 then
- contentPane:AddRelation(self._root_view, RelationType.Right_Right)
- self._view.x = GRoot.inst.width - self._view.width - offset
- end
- print("lingmeng", PopPanel.height, self._view.height)
- self._view.y = (PopPanel.height - self._view.height) * 0.5
- click_item.xy = self._view.xy
- click_item.width = self._view.width
- click_item.height = self._view.height
- end
- else
- contentPane:AddChild(self._view)
- contentPane.height = self._view.height
- contentPane.width = self._view.width
- contentPane:Center()
- end
- self._contentPane = contentPane
- if self._put_map then
- WindowMap[#WindowMap + 1] = self
- end
+ local win_mode = self._root_view:GetChild("win_mode")
+ win_mode.onClick:Set(function()
+ if not self._close_zone then
+ return
+ end
+ win_mode.touchable = false
+ self:CloseEvent()
+ end)
+ printlog("======================================", self._full)
+ if self._full then
+ local offset = get_offset(self._full_offset)
+ if self._anim_pop == 0 then
+ self._view:AddRelation(contentPane, RelationType.Size)
+ contentPane:AddChild(self._view)
+ else
+ contentPane:RemoveRelation(self._root_view, RelationType.Center_Center)
+ contentPane:AddRelation(self._root_view, RelationType.Middle_Middle)
+ PopPanel:AddChild(self._view)
+ local click_item = PopPanel:GetChild("click_item")
+ if self._anim_pop == 1 then
+ contentPane:AddRelation(self._root_view, RelationType.Left_Left)
+ self._view.x = 0
+ elseif self._anim_pop == 2 then
+ contentPane:AddRelation(self._root_view, RelationType.Right_Right)
+ self._view.x = GRoot.inst.width - self._view.width - offset
+ end
+ print("lingmeng", PopPanel.height, self._view.height)
+ self._view.y = (PopPanel.height - self._view.height) * 0.5
+ click_item.xy = self._view.xy
+ click_item.width = self._view.width
+ click_item.height = self._view.height
+ end
+ else
+ contentPane:AddChild(self._view)
+ contentPane.height = self._view.height
+ contentPane.width = self._view.width
+ contentPane:Center()
+ end
+ self._contentPane = contentPane
+ if self._put_map then
+ WindowMap[#WindowMap + 1] = self
+ end
end
-- 显示窗口
function M:Show()
- -- print("===========================================entershow",M.class)
- local contentPane = self._root_view:GetChild("contentPane")
- if self._anim_pop == 1 then
- contentPane:GetTransition("left_pop"):Play()
- elseif self._anim_pop == 2 then
- contentPane:GetTransition("right_pop"):Play()
- elseif self._animation then
- local ani_in = self._root_view:GetTransition("in")
- if ani_in then
- ani_in:Play()
- end
- end
- -- if self._blur_view then
- -- BlurView(self._blur_view,true)
- -- end
+ -- print("===========================================entershow",M.class)
+ local contentPane = self._root_view:GetChild("contentPane")
+ if self._anim_pop == 1 then
+ contentPane:GetTransition("left_pop"):Play()
+ elseif self._anim_pop == 2 then
+ contentPane:GetTransition("right_pop"):Play()
+ elseif self._animation then
+ local ani_in = self._root_view:GetTransition("in")
+ if ani_in then
+ ani_in:Play()
+ end
+ end
+ -- if self._blur_view then
+ -- BlurView(self._blur_view,true)
+ -- end
- -- 判断当前窗口是否已经在队列中,如果在就不重复添加
- local _inQueue = false
+ -- 判断当前窗口是否已经在队列中,如果在就不重复添加
+ local _inQueue = false
- if self._new_hide then
- for i = 1, #WindowQueue do
- local win = WindowQueue[i]
- if win == self then
- _inQueue = true
- end
- if win._queue then
- win._root_view:RemoveFromParent()
- end
- end
- end
- if self._queue and not _inQueue then
- WindowQueue[#WindowQueue + 1] = self
- end
- AddPanel(self._root_view)
- if self._full then
- local offset = get_offset(self._full_offset)
- self._contentPane.width = GRoot.inst.width - 2 * offset
- self._contentPane.height = GRoot.inst.height
- self._contentPane.x = offset
- end
+ if self._new_hide then
+ for i = 1, #WindowQueue do
+ local win = WindowQueue[i]
+ if win == self then
+ _inQueue = true
+ end
+ if win._queue then
+ win._root_view:RemoveFromParent()
+ end
+ end
+ end
+ if self._queue and not _inQueue then
+ WindowQueue[#WindowQueue + 1] = self
+ end
+ AddPanel(self._root_view)
+
+ if self._scale then
+ local scaleY = GRoot.inst.height / self._contentPane.height
+ local scaleX = GRoot.inst.width / self._contentPane.width
+ self._contentPane:SetScale(scaleX, scaleY)
+ end
+
+ if self._full then
+ local offset = get_offset(self._full_offset)
+ self._contentPane.width = GRoot.inst.width - 2 * offset
+ self._contentPane.height = GRoot.inst.height
+ self._contentPane.x = offset
+ end
end
-- 关闭窗口
function M:Close()
- -- if self._blur_view then
- -- BlurView(self._blur_view,false)
- -- end
- if self._queue then
- for i, v in ipairs(WindowQueue) do
- if v == self then
- table.remove(WindowQueue, i)
- break
- end
- end
- end
+ -- if self._blur_view then
+ -- BlurView(self._blur_view,false)
+ -- end
+ if self._queue then
+ for i, v in ipairs(WindowQueue) do
+ if v == self then
+ table.remove(WindowQueue, i)
+ break
+ end
+ end
+ end
- if self._new_hide then
- local win = WindowQueue[#WindowQueue]
- if win and win._queue then
- AddPanel(win._root_view)
- end
- end
- self._root_view:RemoveFromParent()
+ if self._new_hide then
+ local win = WindowQueue[#WindowQueue]
+ if win and win._queue then
+ AddPanel(win._root_view)
+ end
+ end
+ self._root_view:RemoveFromParent()
end
local _destroy_all = false
-- 销毁窗口
function M:Destroy()
- if self._is_destroy then
- return
- end
- if not _destroy_all then
- self:Close()
- if self._put_map then
- for i, v in ipairs(WindowMap) do
- if v == self then
- table.remove(WindowMap, i)
- break
- end
- end
- end
- end
- self._is_destroy = true
- self._root_view:Dispose()
+ if self._is_destroy then
+ return
+ end
+ if not _destroy_all then
+ self:Close()
+ if self._put_map then
+ for i, v in ipairs(WindowMap) do
+ if v == self then
+ table.remove(WindowMap, i)
+ break
+ end
+ end
+ end
+ end
+ self._is_destroy = true
+ self._root_view:Dispose()
end
function M:CloseEvent()
- local win_mode = self._root_view:GetChild("win_mode")
- if self._anim_pop == 0 then
- if self._close_destroy then
- self:Destroy()
- else
- self:Close()
- win_mode.touchable = true
- end
- else
- self:ActionWithAnim(function()
- if self._close_destroy then
- self:Destroy()
- else
- self:Close()
- win_mode.touchable = true
- end
- end)
- end
+ local win_mode = self._root_view:GetChild("win_mode")
+ if self._anim_pop == 0 then
+ if self._close_destroy then
+ self:Destroy()
+ else
+ self:Close()
+ win_mode.touchable = true
+ end
+ else
+ self:ActionWithAnim(function()
+ if self._close_destroy then
+ self:Destroy()
+ else
+ self:Close()
+ win_mode.touchable = true
+ end
+ end)
+ end
end
function M:ActionWithAnim(callback)
- local contentPane = self._root_view:GetChild("contentPane")
- if self._anim_pop == 1 then
- contentPane:GetTransition("left_pop_back"):Play()
- elseif self._anim_pop == 2 then
- contentPane:GetTransition("right_pop_back"):Play()
- end
- if callback then
- coroutine.start(function()
- coroutine.wait(0.3)
- callback()
- end)
- end
+ local contentPane = self._root_view:GetChild("contentPane")
+ if self._anim_pop == 1 then
+ contentPane:GetTransition("left_pop_back"):Play()
+ elseif self._anim_pop == 2 then
+ contentPane:GetTransition("right_pop_back"):Play()
+ end
+ if callback then
+ coroutine.start(function()
+ coroutine.wait(0.3)
+ callback()
+ end)
+ end
end
function BaseWindow.DestroyAll()
- _destroy_all = true
- local list = WindowMap
- for i = 1, #list do
- local win = list[i]
- win:Destroy()
- end
- _destroy_all = false
- WindowQueue = {}
- WindowMap = {}
+ _destroy_all = true
+ local list = WindowMap
+ for i = 1, #list do
+ local win = list[i]
+ win:Destroy()
+ end
+ _destroy_all = false
+ WindowQueue = {}
+ WindowMap = {}
end
diff --git a/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml b/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml
index 731e3ed1..e5346be2 100644
--- a/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml
+++ b/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml
@@ -1,15 +1,25 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml b/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml
index 13afd530..507ddb5a 100644
--- a/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml
+++ b/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml
@@ -11,13 +11,18 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes b/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes
index 573824bd2aa3a0c4d6085d58288dfc25e59dd83e..0f259f2bf50a5ae20a6f08e795598d09926c480d 100644
GIT binary patch
delta 12869
zcmZ`<2Y6LQ(>}9%_TCgAA%R>{NP!Sa5_<0mH6a8DB_YyLnvEhz4ILB|kO5avx}c&U
zU;$D204a({wSja5sY*vs$p7xS30%ML7oL-ScV>2W&+hEZ?4En!x@-SU*PI3c?WS4g
zA3g22zQw}9!hV8J4=x#HH}x~rGI*-ssb*PrB|M3E8gucQrKkuGsat}Z45`LVBZ~0u
z4?uXKWgMm{NzTOGOh$dWvB
z7R1iUq29X7+zCKdcJyEe>hTYr2yXV6rm#9?0qsib6_vN`oqLBRi
zm~fedUV4o6s0@+pMR9FK<-!pspq=l`P-{`ekqXbQS}-On1~M@|xDoXv6pg$i_!IUneKd&1qDdj|d)V@2UtUv@QpiI)YojkORWuWgci^ehXNZ0UJbDpbKmTZIN?F#cqJII;!dCjncCn_50nk2cLU_zTUzvXleUNxsbmd(W
zk{dizC}VtE7oR@Fv*Niz1AQANaMOopEfmk=)hka7&mLST1NULA^^u{vV#vSp>WHEL
z#uLND3(&oIVz?ac^byurj1VstikrRG-KQHdQjGdHo;BM_f{J33JY7eNF$Gfoze2-i
zUkzi$xIztw!FxPW@Ns!!d;!nZ8a&^fXe|;Gpgj-TCyGghQoS%$zEWbcm{P!V9|i9p
z+NX+Xg}fW!9r7L3bnz0j{|@ahix~w{Gyr4x$6lN%UMb{F_%98X7Oxia%-Emt)jmti
zhV~wlJzeLB*9xR8#8m`$pU5^>a3QbjfAi*v`TsvJ$)eZA>)46=CMPN_-T-j9u(D9*9%Ou@fLJBoDd15Cc-cO>#k=A?v6>f8jU@Beqt=ME
zPTiwE6zdAmda(hh*t7zfuAhic#cJn0+{S-y_0_i#KFrJepG_||iO&k#35??(F?F-}
z+}PVRPuv&c%fh*jhg8HP?bw9RiY<`(bXubNj|elP8|{hPDz+79wM@?TIOdnKC_!w8
zRP^-ln6C=sLM~)-eRPT)^bm2O%k)IGQxLRI1KK5agZAn4Q96I0`i5<>c&NgugTM)E0gE#y-m
zgb@o_bR
z4;ww3Xt?yMb>AXNF)a4AscO~c%umlAOCs~&Y#+6Cy6R1ONy
zb`=`(D^TU@daMtmyO8$=c)spI`bqynBX0uUW5au883^>;
zEKk>avPj{4Rz=Hyq;U6T(L!GB|K^>N#R{W#9C+n@URnmhf%M=Lvph0b7Uw@_b#;Y6
z#0ut^IUas)_EQwf-_Pz#CAjXKp6W#YLs^pFn$uKu&h#UNxvVpPlQG(N;MS6SyolpcwASSrqG)j+14;D9x9+
zo*Rc(S=KsJ&^nm=&ht<_kD1q-%IVjNl>Yw8O019#W$)M4mI=JmQeRpy{KM$0O)D!=kZQ@a|;
z>U`jh+EjzLg;j8??o!s2wYc_z0Wp|ZX}M$_%TLy|0%SciQKckVepa9rChPN;3*uFz
zGezeYWYQI`wJ_cNJL(OrwS2H^9A-lC!*>IDhnmT2LyUreQ>&hKp4OCR!<6G_oDWc
z$~lWhQ8SKRSi*e`r`CD0IbU7WJn$0aS`aK&MDz7UWw^)U+Nz~&C0p}?#o4rzuP<(`
zI=~;c<)t52;H|~{`S~TGfqrO}<{YF~=qAmuXls_l$aJXOzoav@(Xq{_gfcQ2+<0jU
z73B#_+sn2xlMgS=p>}$36t&?OmwBi?&t8^A9e7zSkC0jX7b+dO+7(nfasTD*+?}DK
zi_GRPmsbhTG4G7&Mmp`3xdr7DtX5Q}Zd~k668BmWBRk9Nk0z~XOt92#Z#N6>?)Y*`
zmXWfD>=n0gOdp5sgJv{BE?!Ey-Ke|J>C
zP%FUNV~oRgX1^sw`eH|Iiz+mMXw@9Fr#SAtmhM!njUV|x;?8@o3_2agpS{s
zY&i$2)~(B+*Z9G@ct_z}PFSCgTdN`KlZbio`UE)+DtE7M&yzQV%RD)sYiwvwuX`6`
zywtn|)i?CAL|B+Hj~VR$QS+c|patZQIbMLL1Ft_G$p_9=-mr_f*v@cT%#}Zm$5eIv*s*&|)zXifD;OK5>f*=E1D^z1B9}tb
zH^%ZKck(J_#`nvF2k)G6qBW?0+qJqa=8MG?xEexXsr@3gD=3oXD*-g
z=_okK2_Hu)!(6~)K5g!xw|PeaTFFH>dTFb;%f{9;jhAf9;_jOwxyYst{LQ9tB$Y32
z%A)tp1Qn65$mUSn7$%y^6F0TyWuJxe(p4^6!|guHqP0BXSD5sNavgv9*+98oZs3ZW
z2lB(s{`}_VzC7sj0QUR5kK8CX@w1-~l%L7XeB|?ifuEbqo^X>OKg9i8Ej1ov{eq`|
z(Tu*tu8YMCD8BYZG;QIaFWb?7xF`N@_0)I3Twf%0^NKgv2lzT4JlxhyLkr
z&F^;%60(0l)?EKtRSP0XWr-pB6`HNQk^ey6#B&SJZ9I4I-1VArR6&afi8BMgwIh-)
z^QIl8x%|%Hz{kAWd=0deot3!s&H!9k8l!)}-FC*iXW_*k%6y)_GtE6Z|DlZoIowbJ
zKiC;9Y;qiI+OAMF7A(QNceN(Tt9SK4eD&YmCQ#8{tdhA_E#}PTtNYwMZg)Ai%bJT>
z{*i-rm*aiAE4ZIUYq#yk4|b=yX9D}%0o?ZMH1~AiK)VPp0-g$7)Go$XfhPk8*}>fC
zn>6=C;No@&zY3fO9BP-~(fQCBtkFkJ?iMF@DXSvJ}n-_e9AEJCd*M>4_Yq
z{kPGwv>nYuzRf|Vu?MwSJB}}Z+f$aY6c5>3hhszH`Q5#dvaB7?yY}{sDu;JTa{_BE
ztDe;WSJ`P+n!hy!9Vc+gcj>acU4dtPS3{Pvs&dndaa56Cd(mUtmFz^OeSKt-oy`6A
z)y8-h?JJ9{V%xqFfo58($T84NeBCdCU)kr!VtOHBH!1wo8p;}H%b@;XII=VqKisldY`|;BUO8E&3t?JtKc;8Q%imW=9u)mUS;q`I*`2xd4_-6qVrTOkKeUxOc2{&%o`Zg@EOYHA
zxap5MGRhJ}mJn6+g9b<09AY
zZTI0neoA%!1>DzulI#B5BFNyU?0(o!!?6U{x#`c1l%e(KeLuI61MGp$OI}O&u4>kakXE{(qI#Od3R6h481ResNM1ZAn)8n-o_(y1LmOp}
z=F`XeICzXbmeY^t1RB|Kb{>ZO3}+rMt%DoFPwqb+FUQ*x_|EapFzkt(d7?8-;pUpcy>sR9Tv-Q$opOw)Ll{y3#8JwUS)%
zbk~Sit$vU4$!1m?tAo|S-&%|@%;L9B_s4e<`%JE!ZO`G}XSyQre|}~$;`!;ID7P3d
z?YTDdxU-#$&BI&Iw~E-WW7L+*Bz1iE>@w24;MXjA!z4mMbD(m8^&|L0@l-7c+HS6P
zE`k@ItH=55=9%Y0-SZmc58qp36~-?Ire77Uwf)5w|-ZuXcjBj7Oett~Ahc-gdq<
zt>A#)TD#vip_crZE@Zl_TYyIa+tMoj>$i^d4!66|(fzK;V68bk@nQz|z8E2pzZSpP
zp1->o$zv~eK+rTPpS{+CEB8BTq~wRz5>ELmLasw@)AdrCT#r+S@g2u5Mam8KM|}TM
zj{LZQw)IDk{KS5fS6$8x{?uNCo?v)X1%BVZ6w}pcu6!j@ZnQUX#+458GkY^Hz0$$`
zxk(PBAGg2K*8Qcu1^5|WdNtE!Z$&s+XUK9JV&Ao^9o*aPub^`u$6o8gCH{zT$rVt)
z*;Hv4)3s7^xBWF&{UevYF*Wxd`&+z5w8P))@V~S7an!Y3+VAiW*az{IZHmJ`zL1WYp7Cv#|o1WJdHpFo{)n5+Bl>dlKH1B$@{K@{Af4QC`kNCX(QTrF3ej}HT
zIkDr^(2yb`15J+GCy)dcH|bL}4<4d8woFML9OCkKRh0Hg`;>i}huzGeGraYt$;8gx
zY^@fc*;%fBD?|QjpW}(Qa_~*^^!9LJui)FavgkJ_`?TNY-nX;hwN9@rp;n>AGXCy%
zQ(BJRo5_pzCC9M@-?e%Cod|_2!M@Ck?=)A)9qcRo8xXPu`zlwx+uXee=y#aIn7b|M
z58i$^i>~p+*Fyd1eK4-uH@NDbY4WChi^u+%M7R09Khpy5*mq&*m$4)(oB-(U$jveL
zJn~Ok=6II&^NN_WZzzBGRk&M5Nc*0BpBLZD#7Xq(y?FH&l>f?M_nRxT+g5PT`>o~M
z$c9(nZ%=>m!FNgo1%STH!jT-GI&j(QbX4oF1i8}wn|u6~hCq%(NKkP|t+K))feeRE
zIa0s=RR&h?{<~Y?yM!AYYayNu1zRqF`R@dT{yF@`-)1a<4=PA(A71#N68Cyg4~gx<
z2VLAt&FJt=b6Zq2Z+&2M_`@jVH!pGBhee-U)HgA^EESokA4n4$Ob3im0M`AW@Z|V#x4uUQ|IAK6|QQ{SHyQ+6q`)A0TQN
zXoN$|S7lXSKTA|zHx`sAUsNUZGlJ^Kk}6EE5>$>ndas~*R7$%fm341Kt8n{GjqI$x
z+Js7keqK^X8L6UlZ$;JhT}gGQw60=Pv<#;$Ug9L%A#S!QA~4!`Jog$b%niPNF`BQX
zt5U_yU6-)@RE!m%FpK7HI$ubO+g(c#s*J8?Q>3lRs(7PrAeF|6D#mq7sz5nHUsLoy
z=fL-cD(4&oRf6{*7&Ta`@~VQWs4uxGgDUAdeiWx)@uM0-B_jnaB~)c66RfSb`B4Q~
zMOD>T{HQlo^PaTeW>t0F-=CVR9e_3TIs?;
zrJoO=TK;uFOTimARkGzxRZkZWq%>JyHPGDyDVrLam{dwO
zQjPTiQ*UB6fcgRbG}S3ZsF_TW&GqymgsTnxT2(4V&Ghvmloi$7>hM3&i;zXC7OJK0
zS(H{%D?QL3>zyA#f&BEn;yN;tLWF3oyA`9>?sQ0+1%AI6wUn(@n!Z&GU8FnH;I0N{
z8ZiAr#Ps!719a08)H!OP)yl_#r&z75R{oTN_Zg&~*6T~)
zeV$Rz>iZDYTT2=}2lUe=p=YpH&k!|KA45HA*uUv{K@Hb!!=Pt`dQra~hNdIE;~S+$
zYqtmE9iw}CFr=|+oF0w3JI{Rg7t3{?2VW7?gx5<^d3P<0Xrf%9E0>~FIY~{{!%9&f
zn&P;%5#UWV@ln;nq+EVH$)0db@-#JF*9oWGsF$q%K5yy`RqAE5oq^r5CLFE-=MKj;
zykbiAs=gdf@j*snmYNM8z609deXPAc?8M|MPLtQ1CUbSC2#R-`CamV^@e$NT&R4JN
zpChPqut~?2R_3DDgXdE{#Ghhxw@8XK$+=pf7V5l6%+s6dExkLE+R8<0vGzn!4lOY^
zV}0C9t#dG57|L|7QESoTX&n?xwR!e$VSegE1w(d!
z^@w7t^=g9-jHM3pBlWTF8H-KviL>wIr)s1A*3>sSb@yj#GZKwJy+0P7=5sIY3-u*v
z=N+2d;v`YwMbv-ftLPTl6&yzIOELPFGT4zbFL`{@st8+cwLj7ymm%N8D$G{f)OPch
zx%3snd#pzGT~_Xpmo>afj(l0o*4^SAznE06@P15BDn}n6pD-6>#&w}vOTH-8ZuPbL
zMt4boMdAdk_E_Z#Pr&M1n)v7htoAxtj5z_D1^!OYDi0TER&<~KsXVo&{W`V+^>m*B
z<$yY74GK4DNZoE}5d_Z|Z{HpNtj1sADTr$?(e9l9#M7vo#9;V{S=S)_Il5
zqE#qFndUc5mAC#FCe$t6t_qgp
z2tWJqMc_ZxZE}}rws+faF{cKe#tN*SFw`ecYA3Ubf
zeeZPrrT*5Xsyz~=2VU|+go-I%^7?Af(6+kKaLe@CO}L1A|LL(^!X-_o-I4Gh7`hwg
zKXfUVOP{GuY2?;PHRws@=kk{o_52$6fsL?qU`>Rn7>EVPr8>7J)py6C5~#ZCH%+A+
zDn(pH^|6|SPYHTREqIP%dRu)e6&U0ShBY+B+ANqKM`d_x%`lrY6r#T^y~&`mY~l;3?8siLlhPC{D#zBR&-U`
zc)KBuN0#UOf>FQPgr38A|87D9-AM{3LGdxC^iR}@P2q(i2bJXZpO@gJ{gv%Xc2(Bj
zH>GD~6<1Z=JcWkIYOd;fa|+cdR>SK@@S8(p`OZzZ{8PGWx@x&<>x5MJ6kO@J>cEf8
z+8@oQiYon1D#cP={WW-0@6oM}t3Kucw>phoCVaRW=<&_G-o@2We{CS{a$Jpc@#fSp
z2v<3-#?I;1TqN({lzuUKOmp(cCU%OR-<(F{f~T1dX@MnpbhG11(bHN`8+-=xekX}?
zwUMr7GF!*Cq%rhRztxg<*2h-}D73^b>1yF>DRCSzht*$^Y2yyh67M7D{>Lv=#e7g<
zDB?XmApyqmQ7bBmkn>F|nC@{M+8S@z%6Y>eOafiS@zGK^`r)kb+L9>Uvl&k3XLpC1
zGd$hYds^ei5w+#}mx`*F==0Gv6lrZ1Tk7q
z8^ES!n7UURYD(AivNlv1HhiEBm8G`cG`Ji1XLQjF_}>eA84QLL~$AGZ_GYn`A
zu)%-~fTIRf0}$;29s*QqPvwz@W|{gf)JJ>k%e}=OZ*jw0M09}AT?nNb@G`)l4o>U2
z-eR*MzYFpi13m-@$O2dcP~Cv{0dfJ{>s?)7H0io_7RAYrKwX{X=s9GhR-t|$bp;uu
z51AbyGZD1(j$WFW>ZOeVZDAqpYyG>C)1X}f4Q~|E3A*m1Uf+Ow0DU?+j2YfygSR+p
zxFf(7odHGyRO;;Q$4=9EouSiA;AqgGbGf(J<1KD@i-;}`FV$NN@)mQuKwA)6ZuZvC
zc#8lyCFrT{EpolZByX|WTO9Hh_q|1#9H&9Lw;1Xz7J7^A-r|zC2XmPE-rD($)x}hPXJ^Bq(0%u
z5Aqgsy~Sq3%?9_3w;s^V5vuMja=U>$2i!>p>;PD8KrX-`1Kt9-Z@?XZGTi}w0!TMt
zC%{kx%nC2;?r7caEiM^yI>;eC0QLjaH^2{|j{)BS%;@2?*x)UWdJEAL+-~4jGGG`$
zR!>K4w5bQ6zTAL$0QiDXPF@1IVZdB~h+Y8K08$Mo4KT=ny#R9!I0CS_m!s~CsqaBO
z06$oeKLAuWU@<_h0Sf>o8PE}6wE=?w4jHf&;68wRv$JD_&g?_6wzVDP^giH+0t_{v
z1Hi&Q-f1!Q!>C^}pff;7Ux!iOTlDD*@+pvK81Mza1~22Nw-8T)Y`b!FB?DprvJ7|@
zV6*`<0hSw34q%S~R{(Ap5D5_R6u|EQsRo<^7-YaffVl=d39#9KjR0p1C=U?O58ww@)lVG!TrS5LysOv@iso&
z_0Y==X}YVI-ebU2S08=DfXS{Wb;KZmiLQP+6@Uh8959Ibmn`Zx>gj6F*LkwWFw6a1
pb^XnFBsaY#(DVL&&sD41b4ZQh1N7bT)EBjCPHp492^3NH{{U6`v2*|c
delta 12674
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