|
|
- --[[@------------------------------------------------------------------
- @description:首充
- @author:huangcong
- ----------------------------------------------------------------------]]
- FirstRechargeViewNew = FirstRechargeViewNew or BaseClass(BaseView)
- local FirstRechargeViewNew = FirstRechargeViewNew
-
- function FirstRechargeViewNew:__init()
- self.base_file = "rechargeActivity"
- self.layout_file = "FirstRechargeViewNew"
- self.layer_name = "UI"
- self.destroy_imm = true
- self.need_show_money = false --是否要显示顶部的金钱栏
- self.use_background = true
- self.hide_maincancas = false --全屏界面需要放开隐藏主UI
- self.append_to_ctl_queue = false --添加进入控制队列
- self.blur_activity_bg = true
- self.close_fog = true
- self.item_list = {}
- self.model = RechargeActivityModel:getInstance()
- self.mainVo = RoleManager.Instance.mainRoleInfo
- self.choose_index = 1
- self.fire_change_visible_event = true
- self.open_guide_close = true
-
- self.showImg0_o_pos = {x = 0,y = 200}
- self.showImg1_o_pos = {x = -346,y = -228}
- self.showImg2_o_pos = {x = 0,y = 133}
- self.fightImg_o_pos = {x = 358,y = -228}
-
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- end
- self.open_callback = function ( )
- self:OpenSuccess()
- end
- self.destroy_callback = function ( )
- self:DestroySuccess()
- end
- end
-
- function FirstRechargeViewNew:DestroySuccess( )
- EquipModel:getInstance().need_equip_duibi = false
-
- self:StopAnim()
-
- if self.delay_id then
- TimerQuest.CancelQuest(GlobalTimerQuest, self.delay_id)
- self.delay_id = nil
- end
-
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.showImg1)
- self:ClearUIEffect(self.effectLeft)
- self:ClearUIEffect(self.effectRight)
- self:ClearUIEffect(self.effectHuohua)
- self:ClearUIEffect(self.effectHuohua1)
- self:ClearUIEffect(self.effectAward)
-
- if self.sound_id then
- lua_soundM:StopEffect(self, LuaSoundManager.SOUND_TYPE.GUIDE, self.sound_id)
- self.sound_id = nil
- end
-
- if RoleManager.Instance.mainRoleInfo.level<TaskModel.AutoOpViewStopTask then
- local task_data = TaskModel:getInstance():GetMainTask()
- if self.need_close_task and task_data and task_data.id > 0 then
- GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) --启动自动任务
- end
- end
-
- for k,v in pairs(self.item_list) do
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v)
- end
- self.item_list = {}
- end
-
- function FirstRechargeViewNew:Open()
- if RoleManager.Instance.mainRoleInfo.level<TaskModel.AutoOpViewStopTask then
- self.is_auto_task = TaskModel:getInstance():GetTaskAutoFlag()
- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) --停止自动任务
- GlobalEventSystem:Fire(EventName.CANCEL_TO_COLLECT) --停止采集任务
- if self.is_auto_task then
- self.need_close_task = true
- end
- end
- BaseView.Open(self)
- end
-
- function FirstRechargeViewNew:OpenSuccess( )
- self:UpdateView()
- if not RechargeActivityModel:getInstance():IsRecharge() then
- self.sound_id = lua_soundM:PlayEffect(self, "guide_10", false, LuaSoundManager.SOUND_TYPE.GUIDE)
- end
- end
-
- function FirstRechargeViewNew:LoadSuccess()
- local nodes = {
- "bg:raw","bg2:raw", "rechargeBtn:obj:img", "rechargeBtn/rechargeBtnText:img","rechargeBtn/redDot:obj", "closeBtn:obj",
- "fightImg:img", "showImg1:img", "showImg0:img", "showImg2:img", "showImg3:img",
- "roleCon2:obj", "roleCon","descText:tmp", "goodsNameText4:tmp", "goodsNameText3:tmp", "goodsNameText2:tmp", "pupleImg:obj:img",
- --特效情况
- "effectRight", "effectLeft", "effectHuohua", "effectAward", "effectHuohua1",
- }
- self:GetChildren(nodes)
-
- self:ClearUIEffect(self.effectHuohua)
- self:AddUIEffect("ui_effect_shouchong03", self.effectHuohua, self.layer_name, nil, 2, false,nil,nil,nil,nil,nil,nil)
- self:AddUIEffect("ui_effect_shouchong03", self.effectHuohua1, self.layer_name, nil, 2, false,nil,nil,nil,nil,nil,nil)
- self:AddUIEffect("ui_fazhenguangtiao", self.effectRight, self.layer_name, nil, 1, false,nil,nil,nil,nil,nil,nil)
- self:AddUIEffect("ui_fazhenguangtiao", self.effectLeft, self.layer_name, nil, 1, false,nil,nil,nil,nil,nil,nil)
-
- lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("first_recharge_bg1"))
- lua_resM:setOutsideRawImage(self, self.bg2_raw, GameResPath.GetViewBigBg("first_recharge_bg"))
- self.descText_tmp.text = HtmlColorTxt( "<color=#ffffff>首充后,奖励可连续领取3天!</color>越早首充,前期优势越大!", ColorUtil.GOLD_DARK)
- self.goods_img_list = {}
- for i=1,4 do
- self.goods_img_list[i] = {}
- self.goods_img_list[i].transform = self:GetChild("goodsImg"..i)
- end
-
- local function bg_back_func( ... )
- if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
- self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
- end
- self:MoveUIToBack(self.bg)
- self:MoveUIToBack(self.bg2)
- end
- if self.background_wnd then
- bg_back_func()
- else
- self.bg_back_func = bg_back_func
- end
-
- self.ori_dsg_pos = self.pupleImg.anchoredPosition.y + 60
- SetAnchoredPositionY(self.pupleImg, self.ori_dsg_pos)
- self.up_dsg_pos = self.ori_dsg_pos + 15
- self.down_dsg_pos = self.ori_dsg_pos - 15
-
- self.tab_list = {}
- for i=1,3 do
- self.tab_list[i] = {}
- self.tab_list[i].bg_obj = self:GetChild("tabName"..i).gameObject
- self.tab_list[i].name_img = self:GetChild("tabName"..i):GetComponent("Image")
- self.tab_list[i].name_choose_obj = self:GetChild("tabNameChoose"..i).gameObject
- self.tab_list[i].name_choose_tmp = self:GetChild("tabName"..i.."/tabNameChooseText"..i):GetComponent(typeof(TMPro.TextMeshProUGUI))
- self.tab_list[i].name_normal_tmp = self:GetChild("tabName"..i.."/tabNameNormalText"..i):GetComponent(typeof(TMPro.TextMeshProUGUI))
- self.tab_list[i].redDot_obj = self:GetChild("redDot"..i).gameObject
- local function clickHandler(target)
- if target == self.tab_list[i].bg_obj then
- self:ChooseIndex(i)
- self:PlaySwithTabAnim()
- end
- end
- AddClickEvent(self.tab_list[i].bg_obj, clickHandler,2)
- end
-
- self:ArrowAnimation(0)
-
- -- 隐藏并调整目标节点
- -- self.showImg0_img.color = Color(1,1,1,0)--右
- self.showImg1_img.color = Color(1,1,1,0)--右
- self.showImg2_img.color = Color(1,1,1,0)--左
- self.fightImg_img.color = Color(1,1,1,0)--左
- -- SetAnchoredPositionX(self.showImg0, self.showImg0_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.showImg1, self.showImg1_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.showImg2, self.showImg2_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.fightImg, self.fightImg_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX)
-
- if self.need_load_again then
- self:UpdateView()
- end
- end
-
- function FirstRechargeViewNew:AddEvent()
- local on_click = function ( click_obj )
- if self.closeBtn_obj == click_obj then--关闭按钮
- self:Close()
- elseif self.rechargeBtn_obj == click_obj then--充值按钮
- if self.rechargeBtn_img.gray then
- Message.show("您已经领取过奖励啦~!","fault")
- return
- end
- if self.server_info then
- if self.server_info.open == 0 then--充值
- self:Close()
- self.model.need_open_first_recharge_for_vip = true
- OpenFun.Open(450,1)
- else
- if self.choose_data.state == 0 then
- local str = string.format("首充登录第%s天可领取",self.choose_data.index)
- Message.show(str)
- elseif self.choose_data.state == 1 then
- self.model:Fire(RechargeActivityModel.REQUEST_CCMD_EVENT, 15906, self.choose_data.index, self.choose_data.product_id)
- end
- end
- end
- end
- end
- AddClickEvent(self.rechargeBtn_obj, on_click)
- AddClickEvent(self.closeBtn_obj, on_click)
-
- local updateFunc = function ()
- self:UpdateView()
- end
- self:BindEvent(self.model, RechargeActivityModel.UPDATE_FIRST_RECHARGE_VIEW, updateFunc)
- end
-
- function FirstRechargeViewNew:UpdateView()
- if not self.is_loaded then
- self.need_load_again = true
- return
- end
- self.server_info = self.model:GetFirstRechargeInfo()
- if not self.server_info or not self.server_info.product_list then return end
- local index = nil
- for i,v in ipairs(self.server_info.product_list) do
- if v.state == 1 and not index then
- index = i
- end
- self.tab_list[i].redDot_obj:SetActive(v.state == 1)
- end
- if not index then
- for i,v in ipairs(self.server_info.product_list) do
- if not index then
- index = 1
- end
- if v.state == 2 then
- if index + 1 <= 3 then
- index = i + 1
- end
- end
- end
- end
- if index then
- self.choose_index = index
- end
-
- self:ChooseIndex(self.choose_index)
-
-
- if not self.is_start_ainm then
- self.is_start_ainm = true
- local function func( ... )
- self:PlaySwithTabAnim()
- end
- self.delay_id = setTimeout(func,0.5)
- end
- end
-
- --选中哪个页签
- function FirstRechargeViewNew:ChooseIndex( index )
- self.choose_index = index or self.choose_index
- self.choose_data = self.server_info.product_list[self.choose_index]
- self.rechargeBtn_img.gray = self.choose_data.state == 2
- self.redDot_obj:SetActive(self.choose_data.state == 1)
-
-
- local btn_effect = self.choose_data.state ~= 2
- if btn_effect and btn_effect ~= self.btn_effect then
- elseif not btn_effect then
- end
- self.btn_effect = btn_effect
- local btn_res = "recharge_btn_t_1"--领取
- if self.server_info.open == 1 then--已充值
- if self.choose_data.state == 1 then
- btn_res = "recharge_btn_t_1"--"立即领取"
- elseif self.choose_data.state == 2 then
- btn_res = "recharge_btn_t_2"--已领取"
- elseif self.choose_data.state == 0 and self.choose_data.index == 2 then
- btn_res = "recharge_btn_t_3"--明日可领"
- elseif self.choose_data.state == 0 and self.choose_data.index == 3 then
- if self.server_info.product_list[2].state == 2 or self.server_info.product_list[2].state == 1 then
- btn_res = "recharge_btn_t_3"--明日可领"
- elseif self.server_info.product_list[2].state == 0 then
- btn_res = "recharge_btn_t_4"--第三日可领"
- end
- end
- end
- lua_resM:setImageSprite(self, self.rechargeBtnText_img, "rechargeActivity_asset", btn_res,true)
- lua_resM:setImageSprite(self, self.showImg3_img, "rechargeActivity_asset", "recharge_award_name_img"..index,true)
- lua_resM:setOutsideImageSprite(self, self.showImg1_img, GameResPath.GetRechargeActivityImage("first_recharge_show_bg1_"..index), true)
- lua_resM:setOutsideImageSprite(self, self.showImg2_img, GameResPath.GetRechargeActivityImage("first_recharge_show_bg2_"..index), true)
- lua_resM:setOutsideImageSprite(self, self.showImg0_img, GameResPath.GetRechargeActivityImage("first_recharge_show_bg"..index), true)
- lua_resM:setOutsideImageSprite(self, self.fightImg_img, GameResPath.GetRechargeActivityImage("recharge_fight_num"..index), true)
-
- for i=1,3 do
- if i == index then
- self.tab_list[i].name_choose_tmp.text = string.format("第%s天",ChineseNumber(i))
- self.tab_list[i].name_normal_tmp.text = ""
- self.tab_list[i].name_choose_obj:SetActive(true)
- else
- self.tab_list[i].name_choose_tmp.text = ""
- self.tab_list[i].name_normal_tmp.text = string.format("第%s天",ChineseNumber(i))
- self.tab_list[i].name_choose_obj:SetActive(false)
- end
- end
- local show_str = self.choose_data.product_id .. "@" .. RoleManager.Instance.mainRoleInfo.career .. "@" .. self.choose_data.index
- local show_cfg = DeepCopy(Config.Rechargefirst[show_str])
-
- local function end_call_func( ... )
- if show_cfg then
- self:UpdateAwardList(show_cfg.reward)
- self:UpdateModelCon(self.roleCon,show_cfg.left_res,nil,true)
- self.pupleImg_obj:SetActive(self.choose_data.index == 3)
- self.roleCon2_obj:SetActive(self.choose_data.index ~= 3)
- if self.choose_data.index == 3 then
- SetSizeDelta(self.pupleImg, 250, 70)
- local data = {
- parent = self,
- dress_id = 425014,
- bubbleCon = self.pupleImg,
- }
- FuncOpenModel:getInstance():ShowBubble(data)
- else
- self:UpdateModelCon(self.roleCon2,show_cfg.right_res,nil,false)
- end
- end
- end
- end_call_func()
- end
-
- --更新奖励
- function FirstRechargeViewNew:UpdateAwardList( reward )
- local item_list = stringtotable(reward)
- if not item_list or TableSize(item_list) == 0 then return end
- self.award_item_list = item_list
- for i, v in ipairs(item_list) do
- local item = self.item_list[i]
- if not item then
- item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.goods_img_list[i].transform)
- self.item_list[i] = item
- item:SetIsFixSize(false)
- item:SetIsAct(true)
- item:SetItemSize(78, 78)
- item:SetVisible(not RechargeActivityConst.PlayAwardAction)
- end
- local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
- if goodVo then
- item:SetData(goods_Id, v[3], nil, nil, lock)
- local equip_cfg = EquipModel:getInstance():GetEquipmentCfg(goods_Id)
- if equip_cfg then
- EquipModel:getInstance().need_equip_duibi = true
- item:ChangeEquipState(self.choose_data.state ~= 2 and 1 or nil)
- else
- item:ChangeEquipState(nil)
- end
- -- lua_resM:setOutsideImageSprite(self, self.goods_img_list[i].img, GameResPath.GetGoodsIcon(goodVo.goods_icon), true)
- end
- end
- for i=1,3 do
- if RechargeActivityConst.RechargeAwardNameList[self.choose_data.index] then
- self["goodsNameText"..(i+1).."_tmp"].text = RechargeActivityConst.RechargeAwardNameList[self.choose_data.index][i]
- end
- end
- end
-
- --更新模型
- function FirstRechargeViewNew:UpdateModelCon( transform,model_data,is_force,is_left )
- local index = is_left and self.left_old_choose_index or self.right_old_choose_index
- if self.choose_data.index ~= self.old_choose_index or is_force then
- if is_left then
- self.left_old_choose_index = self.choose_data.index
- else
- self.right_old_choose_index = self.choose_data.index
- end
- else
- return
- end
-
- local model_data = stringtotable(model_data)
- local figure_data = nil
- if model_data then
- figure_data = model_data[1]
- end
- if figure_data then
- local model_cfg = CustomActivityModel:getInstance():GetActModelConShowCfg(self.base_type,tonumber(figure_data[3]),tonumber(figure_data[4]))
- local scale = model_cfg and model_cfg.scale or 255
- local position = model_cfg and model_cfg.position or Vector3(0,400,-300)
- local fashion_type = tonumber(figure_data[3])
- local career = RoleManager.Instance.mainRoleInfo.career
- if fashion_type == FuncOpenModel.TypeId.FWing then--背饰放大
- scale = 350
- position = Vector3(-35,400,-300)
- elseif fashion_type < 1000 then
- scale = 220
- elseif fashion_type == FuncOpenModel.TypeId.FWeapon then--武器位置调高一点
- if career == 3 or career == 4 then
- scale = 440
- position = Vector3(55,300,-300)
- elseif career == 1 then
- scale = 260
- position = Vector3(40,480,-300)
- elseif career == 2 then
- scale = 300
- position = Vector3(20,440,-300)
- end
- elseif fashion_type == FuncOpenModel.TypeId.Light then--幻光大小需要调整
- scale = 1.9
- position = Vector3(25,135,-300)
- end
- if figure_data[1] == "show" then
- local res_data = {
- father_node = self,
- transform = transform,
- fashion_type = tonumber(figure_data[3]),
- raycast_size = Vector2(400,1200),
- scale = scale,
- figure_id = figure_data[4],
- position = position,
- layer_name = "UI",
- ui_model_type = UIModelCommon.ModelType.BackModel,
- show_shadow = false,
- use_bloom = false,
- can_rotate = true,
- light_id = nil,
- }
- -- print("huangcong:FirstRechargeViewNew [start:361] :", model_data)
- -- PrintTable(model_data)
- -- print("huangcong:FirstRechargeViewNew [end]")
- if TableSize(model_data) > 1 then
- local career = self.mainVo.career
- for i,v in ipairs(model_data) do
- local fashion_type = tonumber(v[3])
- local figure_id = tonumber(v[4])
- if figure_id then
- if type_pos ~= FashionPartPos.wing and type_pos ~= FashionPartPos.Hat and type_pos ~= FashionPartPos.light then
- if career then
- if figure_id < 1000 then
- figure_id = figure_id + career * 1000
- end
- end
- else
- figure_id = figure_id
- end
- end
- if fashion_type == FuncOpenModel.TypeId.Clothes then --衣服
- res_data.fashion_model_id = figure_id
- elseif fashion_type == FuncOpenModel.TypeId.Weapon then --武器
- res_data.weapon_res_id = figure_id
- elseif fashion_type == FuncOpenModel.TypeId.Head then --头饰
- res_data.head_wear_id = figure_id
- elseif fashion_type == FuncOpenModel.TypeId.Footprint then --足迹
- type_pos = FashionPartPos.Footmark
- elseif fashion_type == FuncOpenModel.TypeId.wing then --背部
- res_data.wing_id = figure_id
- elseif fashion_type == FuncOpenModel.TypeId.Hat then--头套
- res_data.hat_wear_id = figure_id
- elseif fashion_type == FuncOpenModel.TypeId.RoleLight then--人物幻光
- res_data.light_id = figure_id
- end
- end
- end
- FuncOpenModel:getInstance():SetModelRes(res_data)
- else
-
- end
- end
-
- end
-
- --图片上下移动
- function FirstRechargeViewNew:ArrowAnimation(time)
- self:StopAnim()
- local call_fun = function ()
- local function onCompleted()
- self:ArrowAnimation(time)
- end
- self.dsgcon_move_up_id = TweenLite.to(self, self.pupleImg, TweenLite.UiAnimationType.POSY, self.up_dsg_pos, 1.2, onCompleted)
- end
- local onDelay = function( )
- self.dsg_con_move_down_id = TweenLite.to(self, self.pupleImg, TweenLite.UiAnimationType.POSY, self.down_dsg_pos, 1.2, call_fun)
- end
- self.dsg_move_delay_id = setTimeout(onDelay, time)
- end
-
- function FirstRechargeViewNew:StopAnim()
- if self.dsg_con_move_down_id then
- TweenLite.Stop(self.dsg_con_move_down_id)
- self.dsg_con_move_down_id = nil
- end
- if self.dsgcon_move_up_id then
- TweenLite.Stop(self.dsgcon_move_up_id)
- self.dsgcon_move_up_id = nil
- end
- if self.dsg_move_delay_id then
- GlobalTimerQuest:CancelQuest(self.dsg_move_delay_id)
- self.dsg_move_delay_id = nil
- end
- end
-
-
- function FirstRechargeViewNew:CancelHide( )
- BaseView.CancelHide(self)
- if self.is_loaded then
- Scene.Instance:ChangeFogEnable(false)
- if self.choose_data then
- local show_str = self.choose_data.product_id .. "@" .. RoleManager.Instance.mainRoleInfo.career .. "@" .. self.choose_data.index
- local show_cfg = DeepCopy(Config.Rechargefirst[show_str])
- if show_cfg then
- self:UpdateAwardList(show_cfg.reward)
- self:UpdateModelCon(self.roleCon,show_cfg.left_res,true,true)
- self:UpdateModelCon(self.roleCon2,show_cfg.right_res,true,false)
- end
- end
- end
- end
-
- function FirstRechargeViewNew:Hide( )
- BaseView.Hide(self)
- EquipModel:getInstance().need_equip_duibi = false
- end
-
- -- 播放切换页签动画
- function FirstRechargeViewNew:PlaySwithTabAnim( )
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.showImg1)
- -- 隐藏并调整目标节点
- -- self.showImg0_img.color = Color(1,1,1,0)--右
- self.showImg1_img.color = Color(1,1,1,0)--右
- self.showImg2_img.color = Color(1,1,1,0)--左
- self.fightImg_img.color = Color(1,1,1,0)--左
- -- SetAnchoredPositionX(self.showImg0, self.showImg0_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.showImg1, self.showImg1_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.showImg2, self.showImg2_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX)
- SetAnchoredPositionX(self.fightImg, self.fightImg_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX)
-
- -- 进度百分比回调
- local function cg_callback(percent)
- self.showImg1_img.color = Color(1,1,1,percent)
- self.showImg2_img.color = Color(1,1,1,percent)
- -- self.showImg0_img.color = Color(1,1,1,percent)
- self.fightImg_img.color = Color(1,1,1,percent)
- -- SetAnchoredPositionX(self.showImg0, self.showImg0_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX * (percent - 1))
- SetAnchoredPositionX(self.showImg1, self.showImg1_o_pos.x + RechargeActivityConst.FisrtRechargeNameMoveX * (percent - 1))
- SetAnchoredPositionX(self.showImg2, self.showImg2_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX * (percent - 1))
- SetAnchoredPositionX(self.fightImg, self.fightImg_o_pos.x - RechargeActivityConst.FisrtRechargeNameMoveX * (percent - 1))
-
- if not self.showing_effect then
- self.showing_effect = true
- local function call_back( )
- -- self.showing_effect = false
- end
- self:ClearUIEffect(self.rightEffect2)
- self:AddUIEffect("ui_effect_shouchong04", self.effectAward, self.layer_name, nil, 1, false,nil,nil,call_back,nil,1.25,nil)
- end
- end
- local pec_action = cc.CustomUpdate.New(RechargeActivityConst.FisrtRechargeActionTime, cg_callback)
- local function call_func()
- if not self.title_is_action then
- self.title_is_action = true
- end
- end
- local callfun1 = cc.CallFunc.New(call_func)
- pec_action = cc.Sequence.New(pec_action, callfun1)
- cc.ActionManager:getInstance():addAction(pec_action, self.showImg1)
- end
|