/**
  * 修改单个房型日历价格方法
  *
  * @author chivalry
  * @param request
  * @return 2015-10-13
  */
 @SuppressWarnings("rawtypes")
 @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
 @RequestMapping(
     value = "/do_hotelRoomPrice_edit",
     method = {RequestMethod.POST})
 @ResponseBody
 public Response do_hotelRoomPrice_edit(
     HttpServletRequest request,
     String hotelId,
     String roomId,
     String roomPrice,
     String calendarDate) {
   // 返回对象
   Response response = new Response();
   LoginUser user = LoginSessionUtil.getSystemSession(request);
   // 设置客房日历信息并更新数据
   HotelRoomCalendarBo hotelRoomCalendar = new HotelRoomCalendarBo();
   hotelRoomCalendar.setHotelId(hotelId);
   hotelRoomCalendar.setRoomId(roomId);
   hotelRoomCalendar.setRoomPrice(roomPrice);
   int results = 1;
   hotelRoomCalendar.setCalendarDate(calendarDate);
   hotelRoomCalendar.setUserbaseId(user.getId().toString());
   results = this.hotelRoomCalendarService.updateHotelRoomCalendar(hotelRoomCalendar);
   if (results == 1) {
     response.setSucceessMessage("修改成功");
   } else {
     response.setFailMessage("修改失败");
   }
   return response;
 }
 /**
  * @author bian.chengde 获取房型
  * @param request
  * @return 2015-10-19
  */
 @PolicyJournal(accessLevel = AccessLevel.PUBLIC)
 @ResponseBody
 @RequestMapping("/to_roomType_query")
 public Response to_roomType_query(HttpServletRequest request, String hotelId) {
   Response res = new Response();
   List<Map<String, Object>> roomList = hotelRoomService.selectRoomByHotelId(hotelId);
   res.setRtData(roomList);
   return res;
 }
 /**
  * 查询生成单个房型日历价格方法
  *
  * @author chivalry
  * @param request
  * @return 2015-10-13
  */
 @SuppressWarnings("rawtypes")
 @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
 @RequestMapping(
     value = "/to_hotelRoomPrice_add",
     method = {RequestMethod.POST})
 @ResponseBody
 public Response to_hotelRoomPrice_add(
     HttpServletRequest request, String hotelNameId, String hotelRoomId, String selectdate) {
   // 返回对象
   Response response = new Response();
   LoginUser user = LoginSessionUtil.getSystemSession(request);
   // 根据roomId查询room的默认价格
   Map<String, Object> roomMap = this.hotelRoomService.selectHotelRoomByPk(hotelRoomId);
   String defaultPrice = "1000.00";
   if (null != roomMap) {
     if (roomMap.get("price") != null) {
       defaultPrice = roomMap.get("price").toString();
     }
   }
   // 设置客房日历信息并批量插入数据
   List<HotelRoomCalendarBo> hotelRoomCalendarList = new ArrayList<HotelRoomCalendarBo>();
   HotelRoomCalendarBo hotelRoomCalendar = new HotelRoomCalendarBo();
   hotelRoomCalendar.setHotelId(hotelNameId);
   hotelRoomCalendar.setRoomId(hotelRoomId);
   hotelRoomCalendar.setRoomPrice(defaultPrice);
   int results = 1;
   hotelRoomCalendar.setCalendarDate(selectdate);
   // 先查询该日期下房型是否存在价格
   List<Map<String, Object>> roomPriceList =
       this.hotelRoomCalendarService.selectRoomPriceListByExample(hotelRoomCalendar);
   Map<String, Object> map = new HashMap<String, Object>();
   if (roomPriceList.size() == 0) {
     // 不存在价格日历插入数据
     //	    	results=this.hotelRoomCalendarService.insertHotelRoomCalendar(hotelRoomCalendar);
     hotelRoomCalendar.setUserbaseId(user.getId().toString());
     hotelRoomCalendarList.add(hotelRoomCalendar);
     if (hotelRoomCalendarList != null
         && hotelRoomCalendarList.size() > 0
         && hotelRoomCalendarList.get(0).getCalendarDate() != null
         && hotelRoomCalendarList.get(0).getCalendarDate() != "") {
       results = this.hotelRoomCalendarService.insertHotelRoomCalendar(hotelRoomCalendarList);
     }
     map.put("roomPrice", hotelRoomCalendar.getRoomPrice());
   } else {
     // 存在读取价格
     map.put("roomPrice", roomPriceList.get(0).get("roomPrice"));
   }
   if (results >= 1) {
     response.setSucceessMessage("执行成功");
     response.setRtData(map);
   } else {
     response.setFailMessage("读取价格失败");
   }
   return response;
 }
 /**
  * 确认房型更新状态
  *
  * @param request
  * @return 2015-10-31
  */
 @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
 @RequestMapping("/to_hotelRoomStatus_change")
 @ResponseBody
 public Response to_hotelRoomStatus_change(
     HttpServletRequest request, String id, String roomStatus) {
   Response res = new Response();
   if (hotelRoomService.updateRoomStatus(id, roomStatus) > 0) {
     res.setRtCode(Constants.RIGHT_CODE);
   } else {
     res.setRtCode(Constants.ERROR_CODE);
   }
   return res;
 }
 @SuppressWarnings("rawtypes")
 @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
 @RequestMapping(
     value = "/getHotelRoomPriceByRoomId",
     method = {RequestMethod.POST})
 @ResponseBody
 public Response testJson(
     HttpServletRequest request, String roomId, HotelRoomCalendarBo hotelRoomCalendar) {
   // 返回对象
   Response response = new Response();
   // System.out.println("****************"+hotelRoomCalendar.getRoomPrice()+"/"+hotelRoomCalendar.getStartTime()+"/"+hotelRoomCalendar.getEndTime());
   /*hotelRoomCalendar.setRoomId(roomId);
   hotelRoomCalendar.setStartTime("2015-11-01");
   hotelRoomCalendar.setEndTime("2015-11-30");*/
   List<Map<String, Object>> list =
       this.hotelRoomCalendarService.selectRoomPriceListByExample(hotelRoomCalendar);
   for (int i = 0; i < list.size(); i++) {
     list.get(i).put("date", list.get(i).get("calendarDate").toString());
     // System.out.println("*********"+Double.parseDouble(list.get(i).get("roomPrice").toString()));
   }
   response.setRtData(list);
   return response;
 }
 /**
  * 客房删除方法
  *
  * @author chivalry
  * @param request
  * @return 2015-10-13
  */
 @SuppressWarnings("rawtypes")
 @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
 @RequestMapping(
     value = "/do_delete_hotelRoom",
     method = {RequestMethod.POST})
 @ResponseBody
 public Response do_delete_hotelRoom(HttpServletRequest request, String id) {
   // 返回对象
   Response response = new Response();
   HotelRoomBo hotelRoom = new HotelRoomBo();
   hotelRoom.setId(id);
   hotelRoom.setStatus("0");
   int results = this.hotelRoomService.updateHotelRoom(hotelRoom);
   HotelRoomPlanBo hotelRoomPlan = new HotelRoomPlanBo();
   hotelRoomPlan.setRoomId(id);
   this.hotelRoomPlanService.deleteRoomPlanByPk(hotelRoomPlan);
   if (results == 1) {
     response.setSucceessMessage("删除成功");
   } else {
     response.setFailMessage("删除失败");
   }
   return response;
 }
  /**
   * 客房批量生成日历价格方法
   *
   * @author chivalry
   * @param request
   * @return 2015-10-13
   */
  @SuppressWarnings("rawtypes")
  @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
  @RequestMapping(
      value = "/do_hotelRoomsPrice_add",
      method = {RequestMethod.POST})
  @ResponseBody
  public Response do_hotelRoomsPrice_add(
      HttpServletRequest request, String hotelNameId, String hotelRoomId) {
    // 返回对象
    Response response = new Response();
    LoginUser user = LoginSessionUtil.getSystemSession(request);
    // 根据roomId查询room的默认价格
    Map<String, Object> roomMap = this.hotelRoomService.selectHotelRoomByPk(hotelRoomId);
    String defaultPrice = "1000";
    if (null != roomMap) {
      if (roomMap.get("price") != null) {
        defaultPrice = roomMap.get("price").toString();
      }
    }
    // 设置客房日历信息并批量插入数据
    // 计算90天的所有时间批量插入数据
    int results = 1;
    Calendar c_begin = new GregorianCalendar();
    Calendar c_end = new GregorianCalendar();

    //	     DateFormatSymbols dfs = new DateFormatSymbols();
    //	     String[] weeks = dfs.getWeekdays();
    // 从当前时间开始
    Calendar systime = Calendar.getInstance();
    c_begin.set(
        systime.get(Calendar.YEAR),
        systime.get(Calendar.MONTH),
        systime.get(Calendar.DATE)); // Calendar的月从0-11
    c_end.set(
        systime.get(Calendar.YEAR),
        systime.get(Calendar.MONTH),
        systime.get(Calendar.DATE)); // Calendar的月从0-11
    // 获取90天后的时间
    c_end.add(Calendar.DAY_OF_YEAR, hotelRoom_generate_days);
    int count = 1;
    // 结束日期下滚一天是为了包含最后一天
    c_end.add(Calendar.DAY_OF_YEAR, 1);
    //	     System.out.println("开始时间是:"+new java.sql.Date(c_begin.getTime().getTime()));
    //	     System.out.println("结束时间是:"+new java.sql.Date(c_end.getTime().getTime()));
    List<HotelRoomCalendarBo> hotelRoomCalendarList = new ArrayList<HotelRoomCalendarBo>();
    while (c_begin.before(c_end)) {
      HotelRoomCalendarBo hotelRoomCalendar = new HotelRoomCalendarBo();
      hotelRoomCalendar.setHotelId(hotelNameId);
      hotelRoomCalendar.setRoomId(hotelRoomId);
      hotelRoomCalendar.setRoomPrice(defaultPrice);
      //	   System.out.println("**************"+new java.sql.Date(c_begin.getTime().getTime()));
      hotelRoomCalendar.setCalendarDate(new java.sql.Date(c_begin.getTime().getTime()).toString());
      // 先查询该日期下房型是否存在价格
      List<Map<String, Object>> roomPriceList =
          this.hotelRoomCalendarService.selectRoomPriceListByExample(hotelRoomCalendar);
      if (roomPriceList.size() == 0) {
        // 不存在价格日历插入数据
        hotelRoomCalendar.setUserbaseId(user.getId().toString());
        hotelRoomCalendarList.add(hotelRoomCalendar);
      }
      if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
        count++;
      }
      c_begin.add(Calendar.DAY_OF_YEAR, 1);
    }
    if (hotelRoomCalendarList != null
        && hotelRoomCalendarList.size() > 0
        && hotelRoomCalendarList.get(0).getCalendarDate() != null
        && hotelRoomCalendarList.get(0).getCalendarDate() != "") {
      results = this.hotelRoomCalendarService.insertHotelRoomCalendar(hotelRoomCalendarList);
    }
    if (results >= 1) {
      response.setSucceessMessage("执行成功");
    } else {
      response.setFailMessage("执行失败");
    }
    return response;
  }
  /**
   * 酒店客房修改
   *
   * @author chivalry
   * @param request
   * @return 2015-10-12
   */
  @SuppressWarnings("rawtypes")
  @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
  @RequestMapping(
      value = "/do_edit_hotelRoom",
      method = {RequestMethod.POST})
  @ResponseBody
  public Response do_edit_hotelRoom(
      HttpServletRequest request,
      @Valid HotelRoomBo hotelRoom,
      BindingResult result,
      HotelRoomPlanBo hotelRoomPlan) {
    // 返回对象
    Response response = new Response(); // 服务端验证
    if (result.hasErrors()) {
      ValidateParamUtils.analyzeErrors(result, response);
      return response;
    }
    int results = 1;
    results = this.hotelRoomService.updateHotelRoom(hotelRoom);
    // 根据客房主键ID删除客房产品
    hotelRoomPlan.setId(null);
    hotelRoomPlan.setRoomId(hotelRoom.getId());
    results = this.hotelRoomPlanService.deleteRoomPlanByPk(hotelRoomPlan);
    // 新增客房产品
    hotelRoomPlan.setHotelId(hotelRoom.getHotelId());
    hotelRoomPlan.setBedType(hotelRoom.getBedType());
    hotelRoomPlan.setRoomStatus(hotelRoom.getRoomStatus());

    String[] breakfastTypeStr = request.getParameterValues("isBreakfast");
    String[] cancelRuleStr = request.getParameterValues("cancelRule");
    String[] discountAmountStr = request.getParameterValues("discount");
    String[] cashBackStr = request.getParameterValues("cashBack");
    String[] roomPlanName = request.getParameterValues("roomPlanName");
    String[] payType = request.getParameterValues("payType");
    String[] campaignDaysStr = request.getParameterValues("campaignDays");
    List<HotelRoomPlanBo> list = new ArrayList<HotelRoomPlanBo>();
    if (breakfastTypeStr != null) {
      for (int i = 0; i < breakfastTypeStr.length; i++) {
        hotelRoomPlan.setBreakfastType(breakfastTypeStr[i]);
        hotelRoomPlan.setCancelRule(cancelRuleStr[i]);
        hotelRoomPlan.setDiscountAmount(discountAmountStr[i]);
        hotelRoomPlan.setCashBack(cashBackStr[i]);
        hotelRoomPlan.setRoomPlanName(roomPlanName[i]);
        hotelRoomPlan.setPayType(payType[i]);
        hotelRoomPlan.setCampaignDays(campaignDaysStr[i]);
        if (hotelRoomPlan.getDiscountAmount() == null
            || StringUtils.isBlank(hotelRoomPlan.getDiscountAmount())) {
          response.setFailMessage("折扣未填写完整!");
          return response;
        }
        if (hotelRoomPlan.getCashBack() == null
            || StringUtils.isBlank(hotelRoomPlan.getCashBack())) {
          response.setFailMessage("返现未填写完整!");
          return response;
        }
        if (hotelRoomPlan.getRoomPlanName() == null
            || StringUtils.isBlank(hotelRoomPlan.getRoomPlanName())) {
          response.setFailMessage("产品名称未填写完整!");
          return response;
        }
        if (hotelRoomPlan.getCampaignDays() == null
            || StringUtils.isBlank(hotelRoomPlan.getCampaignDays())) {
          response.setFailMessage("起订天数未填写完整!");
          return response;
        }
        double price = 0;
        double discountAmount = Double.parseDouble(discountAmountStr[i]);
        double cashBack = Double.parseDouble(cashBackStr[i]);
        double prices = Double.parseDouble(hotelRoom.getPrice());
        price = prices * discountAmount / 10 + cashBack;
        hotelRoomPlan.setPrice(Double.toString(price));
        HotelRoomPlanBo hotelRoomPlans = new HotelRoomPlanBo();
        BeanUtils.copyProperties(hotelRoomPlan, hotelRoomPlans);
        list.add(hotelRoomPlans);
      }
    }
    if (list != null
        && list.size() > 0
        && list.get(0).getBreakfastType() != null
        && list.get(0).getBreakfastType() != "") {
      results = this.hotelRoomPlanService.insertHotelRoomPlan(list);
    }
    if (results >= 0) {
      response.setSucceessMessage("修改成功");
    } else {
      response.setFailMessage("修改失败");
    }
    return response;
  }
  /**
   * 酒店房间新增方法
   *
   * @author chivalry
   * @param request
   * @return 2015-09-21
   */
  @SuppressWarnings("rawtypes")
  @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
  @RequestMapping(
      value = "/do_hotelRoom_add",
      method = {RequestMethod.POST})
  @ResponseBody
  public Response do_hotelRoom_add(
      HttpServletRequest request,
      @Valid HotelRoomBo hotelRoom,
      BindingResult result,
      HotelRoomPlanBo hotelRoomPlan) {
    // 返回对象
    LoginUser user = LoginSessionUtil.getSystemSession(request);
    // 判断当前用户是否为加盟商
    if (user.getAgentId() != null) {
      String id = user.getAgentId().toString();
      hotelRoomPlan.setAgentId(id);
    } else {
      hotelRoomPlan.setAgentId("0");
    }
    Response response = new Response(); // 服务端验证
    if (result.hasErrors()) {
      ValidateParamUtils.analyzeErrors(result, response);
      return response;
    }

    // 返回插入酒店信息主键ID,设置房间产品信息
    // 插入图片关联关系
    String imageIds = request.getParameter("imageIds");
    String[] imageidsStr = imageIds.split(",");
    List<Map<String, Object>> imageList = new ArrayList<Map<String, Object>>();
    for (int i = 0; i < imageidsStr.length; i++) {
      if (StringUtils.isNotBlank(imageidsStr[i])) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("roomId", hotelRoom.getId());
        map.put("hotelId", null);
        map.put("groupHotelId", null);
        map.put("imageId", imageidsStr[i]);
        imageList.add(map);
      }
    }
    //		 if(imageList!=null&&imageList.size()>0&&imageList.get(0).get("imageId")!=null
    //	    		 &&imageList.get(0).get("imageId")!=""){
    //			 imageService.insertRelation(imageList);
    //		 }

    hotelRoomPlan.setHotelId(hotelRoom.getHotelId());
    hotelRoomPlan.setBedType(hotelRoom.getBedType());
    hotelRoomPlan.setRoomId(hotelRoom.getId());
    hotelRoomPlan.setRoomStatus(hotelRoom.getRoomStatus());

    String[] breakfastTypeStr = request.getParameterValues("isBreakfast");
    String[] cancelRuleStr = request.getParameterValues("cancelRule");
    String[] discountAmountStr = request.getParameterValues("discount");
    String[] cashBackStr = request.getParameterValues("cashBack");
    String[] roomPlanName = request.getParameterValues("roomPlanName");
    String[] payType = request.getParameterValues("payType");
    String[] campaignDaysStr = request.getParameterValues("campaignDays");

    List<HotelRoomPlanBo> list = new ArrayList<HotelRoomPlanBo>();
    for (int i = 0; i < breakfastTypeStr.length; i++) {
      hotelRoomPlan.setBreakfastType(breakfastTypeStr[i]);
      hotelRoomPlan.setCancelRule(cancelRuleStr[i]);
      hotelRoomPlan.setDiscountAmount(discountAmountStr[i]);
      hotelRoomPlan.setCashBack(cashBackStr[i]);
      hotelRoomPlan.setRoomPlanName(roomPlanName[i]);
      hotelRoomPlan.setPayType(payType[i]);
      hotelRoomPlan.setCampaignDays(campaignDaysStr[i]);
      if (hotelRoomPlan.getDiscountAmount() == null
          || StringUtils.isBlank(hotelRoomPlan.getDiscountAmount())) {
        response.setFailMessage("折扣未填写完整!");
        return response;
      }
      if (hotelRoomPlan.getCashBack() == null || StringUtils.isBlank(hotelRoomPlan.getCashBack())) {
        response.setFailMessage("返现未填写完整!");
        return response;
      }
      if (hotelRoomPlan.getRoomPlanName() == null
          || StringUtils.isBlank(hotelRoomPlan.getRoomPlanName())) {
        response.setFailMessage("产品名称未填写完整!");
        return response;
      }
      if (hotelRoomPlan.getCampaignDays() == null
          || StringUtils.isBlank(hotelRoomPlan.getCampaignDays())) {
        response.setFailMessage("起订天数未填写完整!");
        return response;
      }
      double price = 0;
      double discountAmount = Double.parseDouble(discountAmountStr[i]);
      double cashBack = Double.parseDouble(cashBackStr[i]);
      double prices = Double.parseDouble(hotelRoom.getPrice());
      price = prices * discountAmount / 10 + cashBack;
      hotelRoomPlan.setPrice(Double.toString(price));
      HotelRoomPlanBo hotelRoomPlans = new HotelRoomPlanBo();
      BeanUtils.copyProperties(hotelRoomPlan, hotelRoomPlans);
      list.add(hotelRoomPlans);
    }
    //		if(list!=null&&list.size()>0&&list.get(0).getBreakfastType()!=null
    //	    		 &&list.get(0).getBreakfastType()!=""){
    //		results=this.hotelRoomPlanService.insertHotelRoomPlan(list);
    //		}
    int results = this.hotelRoomService.insertHotelRoomAndOther(hotelRoom, imageList, list);
    if (results >= 1) {
      response.setSucceessMessage("添加成功");
    } else {
      response.setFailMessage("添加失败");
    }
    return response;
  }
  /**
   * 批量修改价格
   *
   * @param request
   * @return 2015-10-31
   * @throws ParseException
   */
  @PolicyJournal(accessLevel = AccessLevel.PRIVATE)
  @RequestMapping("/do_hotelRoomPrices_edit")
  @ResponseBody
  public Response do_hotelRoomPrices_edit(HttpServletRequest request) throws ParseException {
    Response res = new Response();
    Calendar c_begin = new GregorianCalendar();
    Calendar c_end = new GregorianCalendar();
    String startDate = request.getParameter("startDate");
    String endDate = request.getParameter("endDate");
    String hotelRoomId = request.getParameter("hotelRoomId");
    String price = request.getParameter("price");
    String hotelNameId = request.getParameter("hotelNameId");
    LoginUser user = LoginSessionUtil.getSystemSession(request);
    // 从开始时间开始
    Calendar start = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date1 = sdf.parse(startDate);
    start.setTime(date1);
    // 从结束时间结束
    Calendar end = Calendar.getInstance();
    Date date2 = sdf.parse(endDate);
    end.setTime(date2);

    c_begin.set(
        start.get(Calendar.YEAR),
        start.get(Calendar.MONTH),
        start.get(Calendar.DATE)); // Calendar的月从0-11
    c_end.set(
        end.get(Calendar.YEAR), end.get(Calendar.MONTH), end.get(Calendar.DATE)); // Calendar的月从0-11
    int count = 1;
    int results = 1;
    // 结束日期下滚一天是为了包含最后一天
    c_end.add(Calendar.DAY_OF_YEAR, 1);
    //	     System.out.println("开始时间是:"+new java.sql.Date(c_begin.getTime().getTime()));
    //	     System.out.println("结束时间是:"+new java.sql.Date(c_end.getTime().getTime()));
    List<HotelRoomCalendarBo> hotelRoomCalendarList = new ArrayList<HotelRoomCalendarBo>();
    while (c_begin.before(c_end)) {
      HotelRoomCalendarBo hotelRoomCalendar = new HotelRoomCalendarBo();
      hotelRoomCalendar.setHotelId(hotelNameId);
      hotelRoomCalendar.setRoomId(hotelRoomId);
      hotelRoomCalendar.setRoomPrice(price);
      //	   System.out.println("**************"+new java.sql.Date(c_begin.getTime().getTime()));
      hotelRoomCalendar.setCalendarDate(new java.sql.Date(c_begin.getTime().getTime()).toString());
      // 先查询该日期下房型是否存在价格
      List<Map<String, Object>> roomPriceList =
          this.hotelRoomCalendarService.selectRoomPriceListByExample(hotelRoomCalendar);
      if (roomPriceList.size() == 0) {
        // 不存在价格日历插入数据
        hotelRoomCalendar.setUserbaseId(user.getId().toString());
        hotelRoomCalendarList.add(hotelRoomCalendar);
      } else {
        // 存在就删除数据再插入
        int r = hotelRoomCalendarService.deleteByExample(hotelRoomCalendar);
        hotelRoomCalendar.setUserbaseId(user.getId().toString());
        hotelRoomCalendarList.add(hotelRoomCalendar);
      }
      if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
        count++;
      }
      c_begin.add(Calendar.DAY_OF_YEAR, 1);
    }
    if (hotelRoomCalendarList != null
        && hotelRoomCalendarList.size() > 0
        && hotelRoomCalendarList.get(0).getCalendarDate() != null
        && hotelRoomCalendarList.get(0).getCalendarDate() != "") {
      results = this.hotelRoomCalendarService.insertHotelRoomCalendar(hotelRoomCalendarList);
    }

    if (results >= 1) {
      res.setSucceessMessage("执行成功");
    } else {
      res.setFailMessage("执行失败");
    }
    return res;
  }