|
|
|
@ -40,8 +40,8 @@ import com.renastudio.creative.web.util.file.FileAgent;
|
|
|
|
|
import com.renastudio.creative.web.util.logger.LogAgent;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author renamaestro
|
|
|
|
|
*/
|
|
|
|
|
* @author renamaestro
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@Controller
|
|
|
|
|
@RequestMapping(value="m/index/*")
|
|
|
|
@ -64,10 +64,10 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
// paging info
|
|
|
|
|
int ROW_COUNT = 20;
|
|
|
|
|
int PAGE_COUNT = 10;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M_Util gmUtil = new M_Util();
|
|
|
|
|
|
|
|
|
|
@RequestMapping(value="index2")
|
|
|
|
|
|
|
|
|
|
@RequestMapping(value="index2")
|
|
|
|
|
public String index2(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes ra) {
|
|
|
|
|
|
|
|
|
|
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
|
|
|
|
@ -80,19 +80,19 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
if(agent.contains("iOS") || agent.contains("iPhone")) {
|
|
|
|
|
paramMap.put("pt", "200");
|
|
|
|
|
}else {
|
|
|
|
|
paramMap.put("pt", "100");
|
|
|
|
|
paramMap.put("pt", "100");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
if(is_login == false) {
|
|
|
|
|
System.out.println(">>> " + DateUtil.getDateString(DateUtil.F_YYYYMMDD_HHMMSS) + " [SN mw_sona app] : index is_login is false :" + " paramMap:" + paramMap);
|
|
|
|
|
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
if(is_login == false) {
|
|
|
|
|
System.out.println(">>> " + DateUtil.getDateString(DateUtil.F_YYYYMMDD_HHMMSS) + " [SN mw_sona app] : index is_login is false :" + " paramMap:" + paramMap);
|
|
|
|
|
|
|
|
|
|
redirect_url = "redirect:/m/login/view_login.do";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(RenaStringUtil.getData(paramMap, "member_id") != null && RenaStringUtil.getData(paramMap, "password_dec") == null) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
System.out.println(" index native call:" + RenaStringUtil.getData(paramMap, "member_id"));
|
|
|
|
|
ra.addFlashAttribute("call_native_login", "Y");
|
|
|
|
@ -100,21 +100,21 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
}else{
|
|
|
|
|
String base_dt = DateUtil.getDateString(DateUtil.F_YYYYMMDDDash);
|
|
|
|
|
paramMap.put("base_dt", base_dt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 회원
|
|
|
|
|
DataMap rm_mem = init_member(model, request, paramMap);
|
|
|
|
|
DataMap rm_mem = init_member(model, request, paramMap);
|
|
|
|
|
// 아이
|
|
|
|
|
DataMap rm_child = init_child(model, request, paramMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 선택아이 성장 정보 조회
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
DataMap.putToModel(model, "rm_last_h", rm_last_h);
|
|
|
|
|
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
DataMap.putToModel(model, "rm_last_w", rm_last_w);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gmUtil.redirectParam(model, paramMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}catch(Exception ex1){ redirect_url = gmUtil.redirectError(true, ex1, request, paramMap, ra, ""); ex1.printStackTrace();}
|
|
|
|
|
|
|
|
|
|
return redirect_url;
|
|
|
|
@ -128,32 +128,31 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
* @param ra
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@RequestMapping(value="index")
|
|
|
|
|
@RequestMapping(value="index")
|
|
|
|
|
public String index(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes ra) {
|
|
|
|
|
|
|
|
|
|
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
|
|
|
|
|
|
|
|
|
|
String redirect_url = "m/index/index";
|
|
|
|
|
|
|
|
|
|
DataMap rm_agent = logAgent.parse(paramMap, request);
|
|
|
|
|
String agent = RenaStringUtil.getData(rm_agent, "agent");
|
|
|
|
|
// String smc_index = RenaStringUtil.getData(paramMap, "smc_index") == "" ? "0":RenaStringUtil.getData(paramMap, "smc_index");
|
|
|
|
|
|
|
|
|
|
if(RenaStringUtil.isNullOrEmpty(agent) == false) {
|
|
|
|
|
if(agent.contains("iOS") || agent.contains("iPhone")) {
|
|
|
|
|
paramMap.put("pt", "200");
|
|
|
|
|
}else {
|
|
|
|
|
paramMap.put("pt", "100");
|
|
|
|
|
paramMap.put("pt", "100");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
if(is_login == false) {
|
|
|
|
|
System.out.println(">>> " + DateUtil.getDateString(DateUtil.F_YYYYMMDD_HHMMSS) + " [SN mw_sona app] : index is_login is false :" + " paramMap:" + paramMap);
|
|
|
|
|
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
if(is_login == false) {
|
|
|
|
|
System.out.println(">>> " + DateUtil.getDateString(DateUtil.F_YYYYMMDD_HHMMSS) + " [SN mw_sona app] : index is_login is false :" + " paramMap:" + paramMap);
|
|
|
|
|
|
|
|
|
|
redirect_url = "redirect:/m/login/view_login.do";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(RenaStringUtil.getData(paramMap, "member_id") != null && RenaStringUtil.getData(paramMap, "password_dec") == null) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
System.out.println(" index native call:" + RenaStringUtil.getData(paramMap, "member_id"));
|
|
|
|
|
ra.addFlashAttribute("call_native_login", "Y");
|
|
|
|
@ -170,19 +169,20 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
rm_mem.put("menu_id", "1");
|
|
|
|
|
int tutorial_cnt = bf_tutorialBO.select_tbl_tutorial(rm_mem);
|
|
|
|
|
paramMap.put("tutorial_cnt", tutorial_cnt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 아이
|
|
|
|
|
DataMap rm_child = init_child(model, request, paramMap);
|
|
|
|
|
|
|
|
|
|
int recent_notice_cnt = bf_noticeBO.select_recent_notice_count(paramMap);
|
|
|
|
|
paramMap.put("recent_notice_cnt", recent_notice_cnt);
|
|
|
|
|
paramMap.put("recent_notice_cnt", recent_notice_cnt); //최근 일주일내 공지사항 목록수
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(rm_child != null) {
|
|
|
|
|
// 선택아이 성장 정보 조회
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
DataMap.putToModel(model, "rm_last_h", rm_last_h);
|
|
|
|
|
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
DataMap.putToModel(model, "rm_last_w", rm_last_w);
|
|
|
|
|
|
|
|
|
|
//기록 카테고리 목록 조회
|
|
|
|
@ -190,7 +190,7 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
DataMap.putToModel(model, "category_list", category_list);
|
|
|
|
|
|
|
|
|
|
// 오늘 영양입력 조회
|
|
|
|
|
List<DataMap> lm_nutrition = bf_daily_nutritionBO.select_bf_daily_nutrition_list_by_day(paramMap);
|
|
|
|
|
List<DataMap> lm_nutrition = bf_daily_nutritionBO.select_bf_daily_nutrition_list_by_day(paramMap);
|
|
|
|
|
DataMap.putToModel(model, "lm_nutrition", lm_nutrition);
|
|
|
|
|
|
|
|
|
|
//마지막 식사
|
|
|
|
@ -208,10 +208,10 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
int m = rm_child.getInt("m");
|
|
|
|
|
DataMap today = new DataMap();
|
|
|
|
|
List<DataMap> daily = new ArrayList<DataMap>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//성장점수 및 식품영양점수
|
|
|
|
|
if(m>5 && m<60 ) {
|
|
|
|
|
// 당일 균형 판정
|
|
|
|
|
// 당일 균형 판정
|
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat ("yyyy-MM-dd");
|
|
|
|
|
paramMap.put("scope", "day");
|
|
|
|
@ -245,18 +245,18 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
DataMap.putToModel(model, "rm_child", rm_child);
|
|
|
|
|
|
|
|
|
|
gmUtil.redirectParam(model, paramMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}catch(Exception ex1){ redirect_url = gmUtil.redirectError(true, ex1, request, paramMap, ra, ""); ex1.printStackTrace();}
|
|
|
|
|
|
|
|
|
|
return redirect_url;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private DataMap init_member(ModelMap model, HttpServletRequest request, DataMap paramMap) throws Exception{
|
|
|
|
|
HttpSession session = request.getSession(false);
|
|
|
|
|
DataMap rm_mem = (DataMap) session.getAttribute(ConstantSystem.SESSION_RM_MEMBER);
|
|
|
|
|
DataMap.putToModel(model, "rm_mem", rm_mem);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return rm_mem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -271,11 +271,11 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
@Override
|
|
|
|
|
public DataMap init_child(ModelMap model, HttpServletRequest request, DataMap paramMap) throws Exception{
|
|
|
|
|
HttpSession session = request.getSession(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String base_dt = DateUtil.getDateString(DateUtil.F_YYYYMMDDDash);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//세션정보에 선택된 아이가 있는지 확인
|
|
|
|
|
DataMap rm_child = (DataMap) session.getAttribute(ConstantSystem.SESSION_RM_CHILD);
|
|
|
|
|
DataMap rm_child = (DataMap) session.getAttribute(ConstantSystem.SESSION_RM_CHILD);
|
|
|
|
|
DataMap.putToModel(model, "rm_child", rm_child);
|
|
|
|
|
|
|
|
|
|
//아이목록 검색(정보갱신)
|
|
|
|
@ -287,11 +287,11 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
if(lm_child.size() > 0) {
|
|
|
|
|
for(DataMap rm_child2 : lm_child) {
|
|
|
|
|
String smc_no2 = RenaStringUtil.getData(rm_child2, "smc_no");
|
|
|
|
|
|
|
|
|
|
String birth_dt = RenaStringUtil.getData(rm_child2, "birthday");
|
|
|
|
|
|
|
|
|
|
String birth_dt = RenaStringUtil.getData(rm_child2, "birthday");
|
|
|
|
|
int age = DateUtil.getAge(birth_dt, DateUtil.F_YYYYMMDDDash);
|
|
|
|
|
int m = DateUtil.getDistanceByTwoMonth(birth_dt, base_dt, DateUtil.F_YYYYMMDDDash, DateUtil.F_YYYYMMDDDash);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//성병별 및 나이, 개월수 계산
|
|
|
|
|
String gender = RenaStringUtil.getData(rm_child2, "gender");
|
|
|
|
|
String gender_ko = "M".equals(gender) ? "남" : "여";
|
|
|
|
@ -303,15 +303,15 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
if(RenaStringUtil.isNullOrEmpty(smc_no) == false && smc_no2.equals(smc_no)) {
|
|
|
|
|
rm_child = rm_child2;
|
|
|
|
|
DataMap.putToModel(model, "rm_child", rm_child);
|
|
|
|
|
session.setAttribute(ConstantSystem.SESSION_RM_CHILD, rm_child);
|
|
|
|
|
session.setAttribute(ConstantSystem.SESSION_RM_CHILD, rm_child);
|
|
|
|
|
} else if (smc_no2.equals(RenaStringUtil.getData(rm_child,"smc_no"))) {
|
|
|
|
|
rm_child = rm_child2;
|
|
|
|
|
DataMap.putToModel(model, "rm_child", rm_child);
|
|
|
|
|
session.setAttribute(ConstantSystem.SESSION_RM_CHILD, rm_child);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 디폴트 요청한 아이가 없고 현재 세션에 저장된 아이가 없다면 첫번째 아이정보로 세션 저장찰;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 디폴트 요청한 아이가 없고 현재 세션에 저장된 아이가 없다면 첫번째 아이정보로 세션 저장;
|
|
|
|
|
if((RenaStringUtil.isNullOrEmpty(smc_no) == true && rm_child == null)&& lm_child.size() > 0) {
|
|
|
|
|
rm_child = lm_child.get(0);
|
|
|
|
|
DataMap.putToModel(model, "rm_child", rm_child);
|
|
|
|
@ -326,6 +326,34 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
if(rm_child != null) {
|
|
|
|
|
paramMap.copyFromDataMapByKeys(rm_child, new String[]{"smc_no"});
|
|
|
|
|
|
|
|
|
|
// 선택된 아이 가장 먼저
|
|
|
|
|
List<DataMap> lm_child2 = new ArrayList<DataMap>();
|
|
|
|
|
// lm_child2.add(rm_child);
|
|
|
|
|
|
|
|
|
|
smc_no = RenaStringUtil.getData(rm_child, "smc_no");
|
|
|
|
|
int smc_index = 0;
|
|
|
|
|
for(DataMap rm_child2 : lm_child) {
|
|
|
|
|
String smc_no2 = RenaStringUtil.getData(rm_child2, "smc_no");
|
|
|
|
|
|
|
|
|
|
if(smc_no2.equals(smc_no)) {
|
|
|
|
|
rm_child2.put("rep", "Y");
|
|
|
|
|
paramMap.put("smc_index", smc_index); //아이 노출 인덱스
|
|
|
|
|
} else {
|
|
|
|
|
rm_child2.put("rep", "N");
|
|
|
|
|
}
|
|
|
|
|
smc_index++;
|
|
|
|
|
lm_child2.add(rm_child2);
|
|
|
|
|
log.info("---------------------- rm_child2 ---------------- ");
|
|
|
|
|
log.info(rm_child2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DataMap.putToModel(model, "lm_child", lm_child2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if(rm_child != null) {
|
|
|
|
|
paramMap.copyFromDataMapByKeys(rm_child, new String[]{"smc_no"});
|
|
|
|
|
|
|
|
|
|
// 선택된 아이 가장 먼저
|
|
|
|
|
List<DataMap> lm_child2 = new ArrayList<DataMap>();
|
|
|
|
|
lm_child2.add(rm_child);
|
|
|
|
@ -340,14 +368,16 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
DataMap.putToModel(model, "lm_child", lm_child2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
return rm_child;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private DataMap init_child_info(ModelMap model, HttpServletRequest request, DataMap paramMap, String for_height, String for_weight) throws Exception{
|
|
|
|
|
|
|
|
|
|
private DataMap init_child_info(ModelMap model, HttpServletRequest request, DataMap paramMap, String for_height, String for_weight) throws Exception{
|
|
|
|
|
// 선택아이 성장 정보 조회
|
|
|
|
|
paramMap.put("for_height", for_height);
|
|
|
|
|
paramMap.put("for_weight", for_weight);
|
|
|
|
|
|
|
|
|
|
paramMap.put("for_weight", for_weight);
|
|
|
|
|
|
|
|
|
|
DataMap rm_last = bf_growth_bodyBO.select_bf_growth_body_child_for_last(paramMap);
|
|
|
|
|
|
|
|
|
|
return rm_last;
|
|
|
|
@ -361,27 +391,27 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
* @param redirectAttributes
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@RequestMapping(value="ajax_child_info", method=RequestMethod.GET)
|
|
|
|
|
@ResponseBody
|
|
|
|
|
public DataMap ajax_child_info(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
|
|
|
|
|
@RequestMapping(value="ajax_child_info", method=RequestMethod.GET)
|
|
|
|
|
@ResponseBody
|
|
|
|
|
public DataMap ajax_child_info(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
|
|
|
|
|
|
|
|
|
|
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
|
|
|
|
|
|
|
|
|
|
DataMap result = new DataMap();
|
|
|
|
|
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
|
|
|
|
|
|
|
|
|
|
DataMap result = new DataMap();
|
|
|
|
|
result.put("RESULT", ConstantResultCode.RESULT_INIT);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
boolean is_login = gmUtil.setSessionForMobileMember(request, paramMap);
|
|
|
|
|
if(is_login == false) {
|
|
|
|
|
ConstantResultCode.putResultCode(result, false, ConstantResultCode.RESULT_SESSION_OUT);
|
|
|
|
|
}else{
|
|
|
|
|
String smc_no = RenaStringUtil.getData(paramMap, "smc_no");
|
|
|
|
|
String smc_no = RenaStringUtil.getData(paramMap, "smc_no");
|
|
|
|
|
if(RenaStringUtil.isNullOrEmpty(smc_no)) {
|
|
|
|
|
ConstantResultCode.putResultCode(result, false, ConstantResultCode.RESULT_NEED_PARAMS);
|
|
|
|
|
}else {
|
|
|
|
|
}else {
|
|
|
|
|
String base_dt = DateUtil.getDateString(DateUtil.F_YYYYMMDDDash);
|
|
|
|
|
paramMap.put("base_dt", base_dt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 디폴트 아이정보 선택
|
|
|
|
|
DataMap rm_child = init_child(model, request, paramMap);
|
|
|
|
|
result.put("rm_child", rm_child);
|
|
|
|
@ -390,19 +420,19 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
|
|
|
|
|
if(rm_child != null) {
|
|
|
|
|
// 선택아이 성장 정보 조회
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
DataMap rm_last_h = init_child_info(model, request, paramMap, "Y", "N");
|
|
|
|
|
result.put("rm_last_h", rm_last_h);
|
|
|
|
|
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
result.put("rm_last_w", rm_last_w);
|
|
|
|
|
|
|
|
|
|
List<DataMap> lm_nutrition = bf_daily_nutritionBO.select_bf_daily_nutrition_list_by_day(paramMap);
|
|
|
|
|
|
|
|
|
|
DataMap rm_last_w = init_child_info(model, request, paramMap, "N", "Y");
|
|
|
|
|
result.put("rm_last_w", rm_last_w);
|
|
|
|
|
|
|
|
|
|
List<DataMap> lm_nutrition = bf_daily_nutritionBO.select_bf_daily_nutrition_list_by_day(paramMap);
|
|
|
|
|
result.put("lm_nutrition", lm_nutrition);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.put("RESULT", ConstantResultCode.RESULT_SUCCESS);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ex1) {
|
|
|
|
|
ex1.printStackTrace();
|
|
|
|
|
result.put("RESULT", ConstantResultCode.RESULT_EXCEPTION);
|
|
|
|
@ -410,6 +440,6 @@ public class M_IndexController extends AbstractControllerManager{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|